Page 1 sur 1

Recuperer, enregistrer et lire les valeurs de checkbox

Posté : 07 nov. 2006, 16:31
par kriss
Salut
Bonsoir,
j'ai des difficultés à manipuler les cases à cocher dans mes formulaires.
Je donne la structure de ma table avec le champ hobby qui reçoit les valeurs de checkbox

Code : Tout sélectionner

hobby` enum('internet','vélo','danse','cuisine','football','karaté') default NULL
Structure de la table :

Code : Tout sélectionner

CREATE TABLE `utilisateur` ( `id_user` bigint(20) NOT NULL auto_increment, `pseudo` varchar(25) NOT NULL default '', `nom` varchar(25) NOT NULL default '', `prenom` varchar(75) NOT NULL default '', `age` int(11) NOT NULL default '0', `profession` varchar(50) NOT NULL default '', `hobby` enum('internet','vélo','danse','cuisine','football','karaté') default NULL, `email` varchar(75) NOT NULL default '', `mdp` varchar(50) NOT NULL default '', PRIMARY KEY (`id_user`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=18 ;
Mon formulaire :

Code : Tout sélectionner

<form name="inscription" action="inscrire.php" method="post"> <body> <table width="500" align="center" bgcolor="#99FFFF" class="bordure"> <tr><td bgcolor="#0000FF"><span class="Style10">Formulaire d'inscription au forum</span></td> </tr> <tr> <td> <div style="margin-bottom:3px; font-family: Arial, Helvetica, sans-serif; font-size: 10px;"> Pour être autorisé à envoyer des messages sur le forum, vous devez être inscrit.<br /> Veuillez indiquer le nom que vous souhaitez utiliser, votre adresse électronique <br /> et les autres informations mentionnées. </div> <div style="margin-bottom:3px"> <span class="Style4"><strong>Pseudo</strong>:</span><br /> <input type="text" name="pseudo" size="50" maxlength="25" value="" /> </div> <fieldset> <legend align="top" class="Style11">Mot de passe</legend> <table cellpadding="0" cellspacing="3" border="0" width="400"> <tr> <td colspan="2"><span class="Style4">Veuillez entrer un mot de passe pour votre compte utilisateur. Les mots de passe sont sensibles à la casse.</span></td> </tr> <tr> <td> <span class="Style9">Mot de passe:</span><br /> <input type="password" name="passe" size="25" maxlength="25" value="" /> </td> <td> <span class="Style9">Confirmez votre mot de passe:</span><br /> <input type="password" name="passeconfirm" size="25" maxlength="25" value="" /> </td> </tr> </table> </fieldset> <fieldset> <legend align="top" class="Style11">Adresse E-mail</legend> <table cellpadding="0" cellspacing="3" border="0" width="400"> <tr> <td colspan="2"><span class="Style4">Veuillez entrer une adresse E-mail valide qui nous permettra de vous notifier l'activation de compte</span></td> </tr> <tr> <td> <span class="Style9">E-mail:</span><br /> <input type="text" name="email" size="25" maxlength="75" value="" /> </td> <td> <span class="Style9">Confirmez votre E-mail:</span><br /> <input type="text" name="emailconfirm" size="25" maxlength="75" value="" /> </td> </tr> </table> </fieldset> <fieldset> <legend align="top"><span class="Style11">Informations personnelles</span></legend> <table cellpadding="0" cellspacing="3" border="0" width="400"> <tr> <td colspan="2"><span class="Style4">Veuillez nous communiquer quelques informations personnelles</span></td> </tr> <tr> <td> <span class="Style9">Nom:</span> <input type="text" name="nom" size="15" maxlength="25" value="" /> <span class="Style9">Prenom:</span> <input type="text" name="prenom" size="25" maxlength="50" value="" /> </tr> <tr> <td> <span class="Style9">Age:</span> <select name="age"> <?PHP for ($i=15; $i<=120; $i++) echo '<option>'.$i.'</option>';?> </select> <span class="Style9"> Profession:</span> <select name="profession"> <option >Informatique </option> <option >Profession libérale </option> <option >Commercial </option> </select> </td> </tr> </table> </fieldset> <fieldset> <legend align="top"><span class="Style11">Vos centres d'intérêt </span></legend> <table cellpadding="0" cellspacing="3" border="0" width="400"> <tr> <td><input type="checkbox" name="choix[]" Value "Internet" align="right" /><span class="Style12">Internet</span></td> <td><input type="checkbox" name="choix[]" Value "Velo" align="right"/><span class="Style12">Vélo</span></td> </tr> <tr> <td><input type="checkbox" name="choix[]" Value "Danse" /><span class="Style12">Danse</span></td> <td><input type="checkbox" name="choix[]" Value "Cuisine" /><span class="Style12">Cuisine</span></td> </tr> <tr> <td><input type="checkbox" name="choix[]" Value "Footaball" /><span class="Style12">Football</span></td> <td><input type="checkbox" name="choix[]" Value "Karate" /><span class="Style12">Karaté</span></td> </tr> </table> </fieldset> </tr> </td> <tr> <td align="center"> <input type="submit" name="inserer" value="Enregistrer" /> <input type="reset" name="initialiser" value="Initialiser" /></td> </tr> </table> </form>
Mon script inscrire.php

Code : Tout sélectionner

<?PHP include('../connexion.php'); // Appel du script de connexion à la base de données //Récupération des champs if (isset($_POST['pseudo'])) $pseudo=$_POST['pseudo']; else $pseudo=""; if (isset($_POST['passe'])) $passe1=$_POST['passe']; else $passe1=""; if (isset($_POST['passeconfirm'])) $passe2=$_POST['passeconfirm']; else $passe2=""; if (isset($_POST['email'])) $email1=$_POST['email']; else $email1=""; if (isset($_POST['emailconfirm'])) $email2=$_POST['emailconfirm']; else $email2=""; if (isset($_POST['nom'])) $nom=$_POST['nom']; else $nom=""; if (isset($_POST['prenom'])) $prenom=$_POST['prenom']; if (isset($_POST['age'])) $age=$_POST['age']; else $age=""; if (isset($_POST['profession'])) $profession=$_POST['profession']; else $profession=""; if (isset($_POST['choix'])) $choix=$_POST['choix']; else $choix=""; //On vérifie si les champs ne sont pas vides if(empty($pseudo) OR empty($nom) OR empty($prenom) OR empty($email1) OR empty($email2) OR empty($age) OR empty($profession)) { echo '<font color="red">Attention, il y a des champs obligatoires qui ne sont pas renseignés!</font>'; } //Vérification de l'unicité du pseudo choisi $StrSQL="Select pseudo From utilisateur where pseudo like '$pseudo'"; $RstPseudo = @mysql_query($StrSQL); $compteur = @mysql_num_rows($RstPseudo); if ($compteur = 0) { //le pseudo saisi est déjà utilisé echo '<font color="red">Attention, ce pseudo est déjà utilisé !</font>'; exit; } // //foreach($choix as $cle => $valeur) // { // $choix =$cle.' : '.$valeur.'-'; //} $variable = implode(",",$choix); //vérification de la validité de l'adresse E-mail //Ecriture de la réquête d'insertion $StrSQL ="INSERT INTO utilisateur (pseudo, nom, prenom, age, profession, hobby, email, mdp)"; $StrSQL .="VALUES ('$pseudo','$nom', '$prenom', '$age', '$profession', '$variable', '$email1', '$passe1')"; //Insertion des informations du formulaire $RstPseudo = @mysql_query($StrSQL) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); ?>
Ma requête dinsertion est exécutée sans message d'erreur, seulement pour mon hobby sensé contenir les valeurs des checkbox, rien n'est inséré.
Après refelexion je ne sais pas si cela est dû :
1- un mauvais choix du type du champ hobby
2- un mauvais traitement au niveau PHP
Je voudrais une bonne volonté pour me donner un coup de main

Posté : 07 nov. 2006, 17:24
par Ryle
Le problème ne viendrait-il pas de l'absence du signe égale pour l'attribut value dans tes cases à cocher ? ;)

Ceci dit, je pense qu'il y aussi un soucis dans le choix du type de champ. Enum permet de définir les différentes valeurs possible du champ mais n'en autorise qu'une seule à la fois.. ainsi, cela correspondrait plus à un system de bouton radio que de case à cocher..
Dans tous les cas, il ne me semble pas que tu puisse y mettre une liste d'éléments séparés par des virgules. Pour cela, c'est un varchar qu'il te faut à mon avis :)
(voire avoir une colonne pour chaque avec pour valeur oui/non, voire encore une table de hobbies avec un identifiant et une table de liaison pour savoir qui est associé à quel hobby... tout dépend de l'usage que tu en as :))