Checkbox dans phpmyadmin et affichage

Nyx
Invité n'ayant pas de compte PHPfrance

18 févr. 2013, 14:50

Bonjour,

Voilà mon problème, j'ai un formulaire.php, dans lequel il est possible de sélectionner différents jours à l'aide d'une checkbox :

Jour de préférence de rappel :Lundi<input name="jour[]" type="checkbox" value="Lundi"></input>Mardi<input type="checkbox" name="jour[]" value="Mardi"></input>Mercredi<input type="checkbox" name="jour[]" value="Mercredi"></input>Jeudi<input type="checkbox" name="jour[]" value="Jeudi"></input>Vendredi<input type="checkbox" name="jour[]" value="Vendredi"></input>
					

J'ai donc mis des name="jour[]"

Mon problème concerne l'affichage dans ma ma base de données et la récupération ensuite
Dans ma base il m'affiche " array " et n'affiche pas les jours que j'ai coché ( ca encore c'est pas grave )
et je n'ai pas réussi a récupérer les jours dans un nouveau fichier contact.php
j'arrive a récupérer mes autres données de cette façon mais cela ne fonctionne pas avec les checkbox visiblement :
echo 'Jour de rappel :' .$_data['jour'].'<br />';

Une idée ? merci

Mammouth du PHP | 571 Messages

18 févr. 2013, 15:27

bonjour,

je ne sais pas à quoi correspond la variable $_data:
$_data['jour'];///???
dans le fichier php qui traite ton formulaire, tu dois avoir un tableau à 2 dimensions(pour le cas de checkbos car jour[] est un tableau) qui correspond à ça:
$_POST['jour']['indice_du_tableau'];
//un var_dump donne plus d'infos sur ls éléments du tableau:
var_dump($_POST['jour']);
pour envoyer les cases cochées dans ta bd il faut parcourir, à l'aide d'une boucle, le tableau $_POST['jour']

Nyx
Invité n'ayant pas de compte PHPfrance

18 févr. 2013, 16:02

merci de votre réponse,
j'ai un petit peu avancé depuis, j'ai pu récupéré les valeurs cochées des checkbox par foreach que j'enregistre dans $valeur de cette façon :

		
					$jour = (isset($_POST['jour']))?$_POST['jour']:null;
					if (!empty($jour)) {
						foreach($jour as $cle => $valeur) {
						echo  $valeur ;

lorsque j'appuie sur le bouton valider je vois bien les jours que j'ai sélectionné, par exemple LundiMardi, par contre dans phpmyadmin il ne m'affiche que Mardi si je récupére $valeur, je ne comprends pas pourquoi il ne prends pas tout en compte, et de plus il refuse toujours de m'afficher le contenu de 'jour' lorsque je souhaite le récupérer

Mammouth du PHP | 571 Messages

18 févr. 2013, 16:51

merci de votre réponse,
j'ai un petit peu avancé depuis, j'ai pu récupéré les valeurs cochées des checkbox par foreach que j'enregistre dans $valeur de cette façon :

		
					$jour = (isset($_POST['jour']))?$_POST['jour']:null;
					if (!empty($jour)) {
						foreach($jour as $cle => $valeur) {
						echo  $valeur ;

lorsque j'appuie sur le bouton valider je vois bien les jours que j'ai sélectionné, par exemple LundiMardi, par contre dans phpmyadmin il ne m'affiche que Mardi si je récupére $valeur, je ne comprends pas pourquoi il ne prends pas tout en compte, et de plus il refuse toujours de m'afficher le contenu de 'jour' lorsque je souhaite le récupérer

une seule valeur insérée (alors que plusieurs ont été sélectionnées) laissent à penser que la requête insertion ne se trouve pas dans la boucle.En effet la requête qui insère les éléments sélectionnées doit s'exécuter autant de fois qu'il y a d’éléments dans $_POST['jour'].Tu peux poster la portion de code pour l'insertion?
concernant l'affichage du contenu jour je ne pourrais pas t'en dire plus sans ton code .

Nyx
Invité n'ayant pas de compte PHPfrance

18 févr. 2013, 19:10

Voici mon code entier qui récupére les données du formulaire
			<?php 
			
				if(isset ($_POST['valider'])) 
					{					
				
					$civ=$_POST ['civ'] ;
					$prénom=$_POST['Prénom'] ;
					$nom=$_POST['Nom'] ;
					$tel=$_POST['tel'] ;
					$demande=$_POST['demande'] ;
					$email=$_POST['email'] ;
					$com=$_POST['com'];
					$heure=$_POST['heure'] ;
					$today = date ("y-m-d") ;
					
				
				
						// vérifier les checkbox
						$jour = (isset($_POST['jour']))?$_POST['jour']:null;
						// Recup données
						if (!empty($jour)) {
						
						$jour = (isset($_POST['jour']))?$_POST['jour']:null;
						
								if (!empty($jour)) {
								
									foreach($jour as $cle => $valeur) {
									echo  $valeur ;
									}
								}
						
						
							
					
				
						}

					connectbase1 () ;
				
					$sql = 'INSERT INTO contact VALUES (" ","'.$civ.'","'.$prénom.'","'.$nom.'","'.$tel.'","'.$email.'","'.$demande.'","'.$com.'","'.$heure.'","'.$valeur.'", "'.$today.'" ) ' ;
					mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
					mysql_close();
					}		
			?>




et voici le code pour afficher les données contact.php :


				<?php
        include ( 'fonctions.php');
        connectbase1();
                                
        
        $sql = 'SELECT * FROM contact';  
                                 
        
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
                                
       
        
                                
        
        while ($data = mysql_fetch_array($req)) { 
		
			$id=$data['ID'] ;
            echo 'Civilit&eacute; : '.$data['civ'].'<br />';
            echo 'Nom : '.$data['Nom'].'<br />'; 
            echo 'Pr&eacute;nom : '.$data['Prénom'].'<br />'; 
			echo 'Tel : '.$data['tel'].'<br />';
			echo 'Email : '.$data['email'].'<br />';
			echo 'Demande : '.$data['demande'].'<br />';
			echo 'Commentaire : '.$data['com'].'<br />';
			echo 'Jour de rappel :' .$data['jour'].'<br />';
			echo 'Heure de pr&eacute;f&eacute;rence : '.$data['heure'].'<br />';
            echo 'Sa date d\'inscription : '.$data['date'].'<br /><br/>';
		
			echo ' <a href="delete.php?ID='.$id.'"> Suppprimer </a>';
			}  
        
        mysql_free_result ($req);  
                                
        
        mysql_close ();  
        ?>
			


Je vois bien le problème de la boucle, j'ai seulement le dernier tour de boucle qui va s'enregistrer dans ma base de données je pense, est ce possible de crée une nouvelle variable pour récupérer toute les valeurs des jours cochés ?

Nyx
Invité n'ayant pas de compte PHPfrance

19 févr. 2013, 22:46

Une idée svp ?

Mammouth du PHP | 571 Messages

19 févr. 2013, 23:42

c'est normal qu'une seule valeur parmi les n sélectionnées soient insérées dans la BD Car au lieu d'exécuter la requête INSERT dans la boucle, tu l'exécutes hors de la boucle donc à la dernière itération tu récupères la dernière valeur du tableau $jour(ce qui est loin de l'objectif).


un exemple, soit un tableau $tab:
$tab=array('a', 'b', 'c','d');
foreach($tab as $valeur){

echo $valeur; //a, b, c, d
}

////affichera d car on est sorti de la boucle
echo $valeur; //d
je te signale aussi qu'il y a un problème de conception.En effet si on place la requête "INSERT INTO contact VALUES..." dans la boucle afin d'inserer toutes les valeurs selectionnées on se retrouverait avec autant d'utilisateurs qu'il y'aura des valeurs sélectionnées.Concrètement si l'utilisateur toto insère les jours suivants lundi,mardi, jeudi (3 jours) ça impliquerait à inserer l'utilisateur toto 3 fois dans la table contact(d'où la d'où la duplication des données)

Mammouth du PHP | 571 Messages

19 févr. 2013, 23:57

pour modéliser proprement tu dois pouvoir te poser les questions suivantes:

-un contact peut-il choisir plusieurs jours? oui => une cardinalité max donc *
-un jour peut-il être choisi par plusieurs contacts ? oui => cardinalité max donc *