Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/07/2011, 11h41   #1
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 151
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 151
Points : 37
Points : 37
Par défaut ré-affichage checkbox depuis bdd

Salutatous,

j'ai un 1er fichier comportant un formulaire qui permet d'envoyer dans une bdd des choix à partir de case à cocher (checkbox).

j'ai un 2e fichier qui permet d'afficher ces choix.

jusque-là tout se passe bien

j'ai ensuite un 3e fichier qui doit me permettre de modifier ces choix... et c'est là où je bloque car je n'arrive pas à ré-afficher ces choix dans les checkbox

code de mon 1er fichier qui permet de cocher les checkbox :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php 
	require('traitement.php'); 
?>
 
... / ...
 
<strong>PERMIS</strong><br />
      <input type="checkbox" value="Voiture" name="permis[]" <?php if (isset($_POST['permis']) && in_array('Voiture', $_POST['permis'])) echo 'checked="checked"'; ?>  />
      Voiture
	&nbsp;&nbsp;&nbsp;
    <input type="checkbox" value="Bâteau" name="permis[]" <?php if (isset($_POST['permis']) && in_array('Bâteau', $_POST['permis'])) echo 'checked="checked"'; ?>  />
    B&acirc;teau
	&nbsp;&nbsp;&nbsp;
    <input type="checkbox" value="Poids lourd" name="permis[]" <?php if (isset($_POST['permis']) && in_array('Poids lourd', $_POST['permis'])) echo 'checked="checked"'; ?>  />
    Poids lourd
	&nbsp;&nbsp;&nbsp;
    <input type="checkbox" value="Plongée" name="permis[]" <?php if (isset($_POST['permis']) && in_array('Plongée', $_POST['permis'])) echo 'checked="checked"'; ?>  />
code de mon fichier "traitement.php" qui permet l'enregistrement en base :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// gestion message erreur si aucune case n'est cochée :
 
if (!is_array($_POST['permis'])) {
	$permis_liste = '';
 
} else {
	$permis_liste = implode(', ', $_POST['permis']);
}
 
// requete SQL
 
$sql = 'INSERT INTO ma_table VALUES (
	"'.$permis_liste.'"
)';
code de mon 3e fichier qui doit permettre la modification :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
 
$requete_sql = "SELECT permis FROM ma_table WHERE login='" . $_SESSION['login'] . "'";
 
... / ...
 
while ( list ( $permis ) = mysql_fetch_array($requete_sql_bis)) {
 
?>
 
... / ...
 
	<input type="checkbox" value="Voiture" name="permis[]" <?php if (isset($permis) && in_array('Voiture', $permis)) echo "checked"; ?>  />
      Voiture
	&nbsp;&nbsp;&nbsp;
    <input type="checkbox" value="Bâteau" name="permis[]" <?php if (isset($permis) && in_array('Bâteau', $permis)) echo "checked"; ?>  />
    B&acirc;teau
	&nbsp;&nbsp;&nbsp;
    <input type="checkbox" value="Poids lourd" name="permis[]" <?php if (isset($permis) && in_array('Poids lourd', $permis)) echo "checked"; ?>  />
    Poids lourd
	&nbsp;&nbsp;&nbsp;
    <input type="checkbox" value="Plongée" name="permis[]" <?php if (isset($permis) && in_array('Plongée', $permis)) echo "checked"; ?>  />
 
... / ...
si je fais un echo sur $permis, ça m'affiche bien mes choix comme ceci :
Voiture, Bâteau, Plongée

par contre ces choix ne se ré-affiche pas dans les cases à cocher correspondantes et j'ai le message d'erreur suivant :
Warning: in_array() [function.in-array]: Wrong datatype for second argument in /blablabla/blablabla.php on line ...

j'ai donc placer ce code juste avant mon formulaire de modification :

Code :
1
2
3
4
5
6
7
$permis = array();
 
if (is_array($permis)) {
	var_dump($permis);
} else {
	echo '<br /><br />ce n\'est pas un tableau<br /><br />';
}
je n'ai plus le message d'erreur
et ça m'affiche ceci :
array(0) { }

par contre mes checkbox ne sont toujours pas cocher de mes choix : Voiture, Bâteau, Plongée

une aide serait la bienvenue, merci d'avance...
nicomax34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 11h50   #2
Membre habitué
 
Inscription : décembre 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 181
Points : 140
Points : 140
bonjour,
A première vue je partirai pour ton troisième fichier sur une structure de code plus proche de ça:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
$sql="SELECT * FROM permis WHERE detenteur=$id"; //ou la requete qui va bien pour tes infos
$sql=mysql_query($sql);
while($res=mysql_fetch_assoc($sql)){
//on prépare la balise html
$opt="<input type=\"checkbox\" value=\"".$res['name']."\" ";
//si le permis est detenu on coche la case
 if($res[permis]=='oui')
$opt.="checked=\"checked\"";
//on ajoute la fin de balise
$opt.=">";
}
roduce est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 11h51   #3
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 140
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 140
Points : 2 885
Points : 2 885
Bonjour,

tu enregistres tes "permis" sous forme d'une chaine de caractères et non d'un tableau (via la fonction implode), donc tout ceci est normal.

Voici ce que tu devrais faire :

Code :
1
2
3
 
while ( $row = mysql_fetch_array($requete_sql_bis)) {
    $permis = explode(',', $row['permis']);
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 12h17   #4
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 151
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 151
Points : 37
Points : 37
Bonjour Thomas,

dans mon fichier de modification je récupère la valeur des champs comme suit :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
while ( list (
 
	  $prenom,
	  $nom,
	  $permis,
 
	  ... / ...
 
	  ) = mysql_fetch_array($requete_sql_bis)) {
 
	  >> formulaire de modification <<
 
}
comment dois-je m'y prendre pour intégrer les autres champs ($prenom, $nom ...) à ton code :

Code :
1
2
3
4
5
6
while ( $row = mysql_fetch_array($requete_sql_bis)) {
 
    $permis = explode(',', $row['permis']);
 
	>> formulaire de modification <<	  
}
nicomax34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 12h29   #5
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 140
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 140
Points : 2 885
Points : 2 885
Citation:
omment dois-je m'y prendre pour intégrer les autres champs ($prenom, $nom ...) à ton code :
Je pense que tu devrais lire la documentation de la fonction mysql_fetch_array : http://fr.php.net/mysql_fetch_array. Cette fonction comme son nom l'indique renvoie un tableau. Si tu veux voir ce qu'il y a dedans tu peux faire un var_dump($row);

Code :
1
2
3
4
5
6
7
8
9
10
11
 
// on va chercher tous les champs au lieu de uniquement "permis"
// on pourrait faire SELECT permis, prenom, nom FROM ma_table aussi
$requete_sql = "SELECT * FROM ma_table WHERE login='" . mysql_real_escape_string($_SESSION['login']) . "'";
// on parcourt les enregistrements un à un
while($row = mysql_fetch_array($requete_sql)){
    // on transforme la chaine "Voiture, Bateau" en un tableau de deux occurences
    $permis = explode(',', $row['permis'];
    echo $row['prenom'];
    echo $row['nom'];
}
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 16h38   #6
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 151
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 151
Points : 37
Points : 37
bon j'avance, lentement mais sûrement

j'ai enfin réussi à réafficher mes checkbox cochés, comme ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
 
$requete_sql = "SELECT * FROM ma_table WHERE login='" . mysql_real_escape_string($_SESSION['login']) . "'";
 
... / ...
 
while( $row = mysql_fetch_array($requete_sql_bis) ) {
 
// transformation de la chaîne "voiture, moto, ..." en tableau
$permis_array = explode(',', $row['permis']);
 
foreach($permis_array as $valeur) {
 
?>
 
<input type="checkbox" name="permis[]" value="<?php echo $valeur; ?>" <?php if (in_array($valeur, $permis_array)) echo "checked"; ?>  /> <?php echo $valeur; ?>&nbsp;&nbsp;&nbsp;
 
<?php 
} 
?>
Petit souci tout de même :
ça ne m'affiche que les checkbox qui ont été cochées, les checkbox non cochées ne s'affichant pas !

Ayant 3 checkbox (voiture, moto, bâteau), je souhaiterais que ces 3 checkbox s'affichent, qu'elles soient cochées ou non

Merci pour votre aide...
nicomax34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 17h47   #7
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 151
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 151
Points : 37
Points : 37
j'arrive maintenant à afficher chaque checkbox, cochée ou pas cochée... avec ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php 
	// transformation de la chaîne "voiture, bâteau, ..." en tableau
    	$permis_array = explode(',', $row['permis']);
?>
 
    <?php if (in_array("$permis_array[0]", $permis_array)) { $check = "checked"; } else { $check = ''; } ?> <input name="permis[]" type="checkbox" value="Voiture" <?php echo $check; ?> />
	Voiture
    &nbsp;&nbsp;&nbsp;
 
    <?php if (in_array("$permis_array[1]", $permis_array)) { $check = "checked"; } else { $check = ''; } ?> <input name="permis[]" type="checkbox" value="Moto" <?php echo $check; ?> />
	Moto
    &nbsp;&nbsp;&nbsp;
 
    <?php if (in_array("$permis_array[2]", $permis_array)) { $check = "checked"; } else { $check = ''; } ?> <input name="permis[]" type="checkbox" value="Bâteau" <?php echo $check; ?> />
	Bâteau
    &nbsp;&nbsp;&nbsp;
Ouf et merci à tous
nicomax34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h29.


 
 
 
 
Partenaires

Hébergement Web