[RESOLU] Récupérer valeurs checkbox à partir d'une bdd

Eléphant du PHP | 55 Messages

02 août 2013, 19:22

Bonjour,
Je suis débutant en php et je suis en train de créer un backoffice. Je prépare une interface pour des textes. Une page notamment de modification qui comporte une checkbox qui si égale à 1, autorisera la mise en ligne de l'article et si égale à 0, non mis en ligne.
J'ai réussi à affecter grâce à la value="1", cette donnée dans la bdd mais lorsque je veux modifier l'article, la case n'est pas cochée.
Pourriez-vous m'aider?
Mon code est le suivant de ma page ModifTextes.php
<?php 
if(isset($_POST['bouton'])){ 
	if(isset($_POST['titre']) && ($_POST['editor1'])){
		//on récupère les post
		$id = $_POST['id']; 
		$nomdossier = $_POST['nomdossier']; 
		$titre = $_POST['titre'];
		$contenu = $_POST['editor1']; 
		$date = $_POST['date'];
		$enLigne = $_POST['favori']; 
		
		$requete=$b2d->prepare("UPDATE articles_doss SET nom_dossier=:nomdossier,titre=:titre,contenu_t=:contenu,date=:date,enLigne=:enLigne WHERE idtext=:id");
		$requete->execute(array(
				  ':nomdossier'=>$nomdossier,
				  ':titre'=>$titre,
				  ':contenu'=>$contenu,
				  ':date'=>date("Y-m-d",strtotime($date)),
				  ':enLigne'=>$enLigne,
				  ':id'=>$id));
		
	}
	//Redirection vers Gestion
	header("Location:GererTextes.php");
}

//---requête fiche modif
$req=$b2d->prepare("SELECT * FROM articles_doss where idtext=:id");
$req->execute(array(':id'=>$_GET['id']));
$texte=$req->fetch(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html>
	
	<head>
		<title> </title>
		<meta http-equiv="Content-Script-Type" content="text/javascript">
		<script type="text/javascript"src="../ckeditor/ckeditor.js"></script>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
	</head>
	
	<body>
	</br>
	<label><a href="GererTextes.php?logout=ok">Déconnexion</a></label>
	</br>
	<label><a href='EditTextes.php'>Editer un texte</a></label>
	<br/>
	<label><a href="GererTextes.php">Gestion des textes</a></label>
	<br/>
	<form id="monform" name="monform" method="post" enctype="multipart/form-data" action="ModifTextes.php">
			
		<p>
		<label> ID </label>
			<input type="hidden" name="id" value="<?php echo $texte['idtext'];?>" /> 
			<?php echo $texte['idtext'];?> 
		</p>
		<p>
		<label> NOM du DOSSIER </label>
			<input type="text" name="nomdossier" value="<?php echo $texte['nom_dossier'];?>"/>  
		</p>
		<p>
		<label> TITRE </label>
			<input type="text" name="titre" value="<?php echo $texte['titre'];?>"/>  
		</p>
		<p>
		<label> CONTENU </label>
			<textarea id="editor1" name="editor1" style="width:80%" /><?php echo $texte['contenu_t'];?></textarea>
			<script type="text/javascript">
				CKEDITOR.replace( 'editor1' );
			</script>
		</p>
		<p>
		<label> DATE </label>
			<input type="text" name="date" value="<?php echo date("d-m-Y",strtotime($texte['date']));?>"/>
		</p>
		<p>
		<label>Article à mettre en ligne</label>
		<input type="checkbox" name="favori" value="1"<?php if(isset($_POST['favori']) && $_POST['favori']=="1") echo 'checked="checked"' ;?>"/>
		</p>
		<p>
		<label><input type="submit" name="bouton" value="Editer"/></label>  
		</p>
	</form>
	</body>
</html>
Vous remerciant pour votre aide.
Ionesco

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

03 août 2013, 10:23

Salut,

En, fait dans ton cas, la valeur tu t'en fou ;)

Lorsqu'une cas a cochée n'est pas cochée elle n'est pas présente dans le tableau post, du coup tu test l'existence si existe tu met le flag à un sinon à zéro.

Pour teste, ajoute un var_dump($_POST); au début de script et regarde ce qu'il y a dans le tableau quand tu coche ou non la case.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 55 Messages

08 août 2013, 13:12

Bonjour,
Merci pour la réponse. Je n'ai pu répondre plus tôt.
En fait, quand je coche la case, j'ai bien 1 dans ma bdd mais lorsque je dois modifier ma page, dans une page de type modifier.php qui m'affiche le contenu, la case n'est plus cochée. Je voudrais donc savoir comment faire pour qu'elle le soit.
Pourquoi value="1" n'est pas nécessaire? Je ne suis pas sur de tout comprendre.
Si vous pouviez me donner davantage d'explications car je suis un peu perdu.
Merci
Ionesco

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 août 2013, 16:06

Sauf si la case a cocher n'a pas de nom unique (cas des tableaux) le fait d'avoir le champs parent suffit a savoir que la case est cochée.

Pour l'affichage, quand tu récupère l'info de la base, ajoute le même test que dans le formulaire : si la valeur de la base = 1 affiche checked="checked".
Sinon rien.

Sans le code en question je ne peux plus t'aider.

As tu essayer d'ajouter le var_dump($_POST) avant la validation pour tester la différence entre la case cochée et la case non cochée ?


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 55 Messages

08 août 2013, 19:10

Merci. Quel code? J'ai indiqué le code que j'utilise respectivement pour mes 2 pages et j'ai d'ailleurs ajouté un checked pour enLigne mais il ne fonctionne pas. Je me suis mélangé les pinceaux avec les post? J'ai essayé var_dump mais je n'obtiens rien. Je ne dois pas le placer au bon endroit certainement. Je l'ai mis au niveau des post, est-ce correct?
Je ne sais pas ce que je peux poster de plus.
Il est possible que ce que j'ai écris dans ma page de modification soit erroné. Le script n'est peut-être pas adapté à ce que je souhaite obtenir.
J'ai le sentiment de tourner en rond....
Ionesco

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 août 2013, 09:58

=> le code : je de comprendre pourquoi je ne voyais pas l'utilisation des infos de la base. C'est parce que la valeur de la Checkbox (contrairement aux autre champs) est alimentée a partir de $_POST et non $texte du coup cela ne peux fonctionner ;)

=> le var_dump() tu le met en première ligne (enfin après <?php ) de la page qui valide le formulaire (attribut action de la balise form) il faut bien sur commenter les éventuels header ou code Javascript qui ferais une redirection.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 55 Messages

11 août 2013, 14:07

Bonjour,
Ca y est, je viens de faire la modification. Impeccable, cela fonctionne. Je suis super content.
Mille fois merci. J'ai traîné ce problème pendant des jours, il est enfin résolu grâce à tes conseils.
Super++
Ionesco