enregistrement choix multiple dans mysql

turtle
Invité n'ayant pas de compte PHPfrance

27 oct. 2006, 11:48

[quote]pb: j'ai des 3 champs à choix multiple (checkbox). Lorsque je les enregistre dans la base sql, un seul choix apparait, précédé de "0:" ou "1:" ou "2:"

code formulaire html :

Code : Tout sélectionner

<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Régime Alimentaire</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <style type="text/css"> <!-- body { background-color: #D9E8E5; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 90%; color: #333333; } p { text-align: center; } legend { font-family: Verdana, Arial, Helvetica, sans-serif; font-weight: bold; font-size: 110%; color: #414B56; } .fleft { float: left; width: 200px; } .largeur { width: 200px; } --> </style> </head> <body> <p>Régime Alimentaire Célien</p> <form method="post" name="form1" action="traitement.php"> <fieldset> <legend>&nbsp;Global&nbsp;&nbsp;</legend><br /> <label>Date :&nbsp;<input name="date" type="text" size="12" maxlength="10" />&nbsp;(ex: 10/10/2006)</label><br/> <div>&nbsp;</div> <label>Qualité du sommeil :&nbsp;<input name="nuit" type="radio" value="bonne" />Bonne<input name="nuit" type="radio" value="moyenne" />Moyenne<input name="nuit" type="radio" value="mauvaise" />Mauvaise</label> <div>&nbsp;</div> <div>Oui/Non</div> <label><input name="wc" type="radio" value="oui" /></label> <label><input name="wc" type="radio" value="non" />WC</label><br/> <label><input name="sport" type="radio" value="oui" /></label> <label><input name="sport" type="radio" value="non" />Sport</label><br/> <label><input name="gluten" type="radio" value="oui" /></label> <label><input name="gluten" type="radio" value="non" />Gluten</label><br/> <label><input name="caseine" type="radio" value="oui" /></label> <label><input name="caseine" type="radio" value="non" />Caseine</label><br/> <label><input name="soja" type="radio" value="oui" /></label> <label><input name="soja" type="radio" value="non" />Soja</label><br/> <label><input name="crise" type="radio" value="oui" /></label> <label><input name="crise" type="radio" value="non" />Crise</label><br/> </fieldset> <fieldset> <legend>&nbsp;Petit Déjeuner&nbsp;&nbsp;</legend><br /> <div class="fleft"> <label><input type="checkbox" name="pdj[]" value="Rien" />Rien</label><br/> <label><input type="checkbox" name="pdj[]" value="yaourt" />Yaourt</label><br/> <label><input type="checkbox" name="pdj[]" value="Yaourt soja" />Yaourt soja</label><br/> <label><input type="checkbox" name="pdj[]" value="Crepes nutella" />Crepes nutella</label><br/> </div> <div class="fleft"> <label><input type="checkbox" name="pdj[]" value="Viennoiserie" />Viennoiserie</label><br/> <label><input type="checkbox" name="pdj[]" value="Compotes" />Compotes</label><br/> <label><input type="checkbox" name="pdj[]" value="Fruit" />Fruit</label><br/> <label><input type="checkbox" name="pdj[]" value="Pain" />Pain</label><br/> </div> </fieldset> <br /> <fieldset> <legend>&nbsp;Déjeuner&nbsp;&nbsp;</legend><br /> <div class="fleft"> <label><input type="checkbox" name="dj[]" value="Rien" />Rien</label><br/> <label><input type="checkbox" name="dj[]" value="Légumes" />Légumes</label><br/> <label><input type="checkbox" name="dj[]" value="Pates" />Pates</label><br/> <label><input type="checkbox" name="dj[]" value="Riz" />Riz</label><br/> </div> <div class="fleft"> <label><input type="checkbox" name="dj[]" value="Pommes de terre" />Pommes de terre</label><br/> <label><input type="checkbox" name="dj[]" value="Féculent sans gluten" />Féculent sans gluten</label><br/> <label><input type="checkbox" name="dj[]" value="Viande rouge" />Viande rouge</label><br/> <label><input type="checkbox" name="dj[]" value="Viande blanche" />Viande blanche</label><br/> </div> <div class="fleft"> <label><input type="checkbox" name="dj[]" value="Poisson" />Poisson</label><br/> <label><input type="checkbox" name="dj[]" value="yaourt" />Yaourt</label><br/> <label><input type="checkbox" name="dj[]" value="Yaourt soja" />Yaourt soja</label><br/> <label><input type="checkbox" name="dj[]" value="Crepes nutella" />Crepes nutella</label><br/> </div> <div class="fleft"> <label><input type="checkbox" name="dj[]" value="Viennoiserie" />Viennoiserie</label><br/> <label><input type="checkbox" name="dj[]" value="Compotes" />Compotes</label><br/> <label><input type="checkbox" name="dj[]" value="Fruit" />Fruit</label><br/> <label><input type="checkbox" name="dj[]" value="Pain" />Pain</label><br/> </div> </fieldset> <br /> <fieldset> <legend>&nbsp;Gouter&nbsp;&nbsp;</legend><br /> <div class="fleft"> <label><input type="checkbox" name="gouter[]" value="Rien" />Rien</label><br/> <label><input type="checkbox" name="gouter[]" value="yaourt" />Yaourt</label><br/> <label><input type="checkbox" name="gouter[]" value="Yaourt soja" />Yaourt soja</label><br/> <label><input type="checkbox" name="gouter[]" value="Crepes nutella" />Crepes nutella</label><br/> </div> <div class="fleft"> <label><input type="checkbox" name="gouter[]" value="Viennoiserie" />Viennoiserie</label><br/> <label><input type="checkbox" name="gouter[]" value="Compotes" />Compotes</label><br/> <label><input type="checkbox" name="gouter[]" value="Fruit" />Fruit</label><br/> <label><input type="checkbox" name="gouter[]" value="Pain" />Pain</label><br/> </div> </fieldset> <br /> <fieldset> <legend>&nbsp;Dîner&nbsp;&nbsp;</legend><br /> <div class="fleft"> <label><input type="checkbox" name="diner[]" value="Rien" />Rien</label><br/> <label><input type="checkbox" name="diner[]" value="Légumes" />Légumes</label><br/> <label><input type="checkbox" name="diner[]" value="Pates" />Pates</label><br/> <label><input type="checkbox" name="diner[]" value="Riz" />Riz</label><br/> </div> <div class="fleft"> <label><input type="checkbox" name="diner[]" value="Pommes de terre" />Pommes de terre</label><br/> <label><input type="checkbox" name="diner[]" value="Féculent sans gluten" />Féculent sans gluten</label><br/> <label><input type="checkbox" name="diner[]" value="Viande rouge" />Viande rouge</label><br/> <label><input type="checkbox" name="diner[]" value="Viande blanche" />Viande blanche</label><br/> </div> <div class="fleft"> <label><input type="checkbox" name="diner[]" value="Poisson" />Poisson</label><br/> <label><input type="checkbox" name="diner[]" value="yaourt" />Yaourt</label><br/> <label><input type="checkbox" name="diner[]" value="Yaourt soja" />Yaourt soja</label><br/> <label><input type="checkbox" name="diner[]" value="Crepes nutella" />Crepes nutella</label><br/> </div> <div class="fleft"> <label><input type="checkbox" name="diner[]" value="Viennoiserie" />Viennoiserie</label><br/> <label><input type="checkbox" name="diner[]" value="Compotes" />Compotes</label><br/> <label><input type="checkbox" name="diner[]" value="Fruit" />Fruit</label><br/> <label><input type="checkbox" name="diner[]" value="Pain" />Pain</label><br/> </div> </fieldset> <br /> <input type="submit" value="Envoyer" /> <input type="reset" value="Rétablir" /> </form> </body> </html>
code de la page traitement php

Code : Tout sélectionner

<?php $date=$_POST['date']; $nuit=$_POST['nuit']; $wc=$_POST['wc']; $sport=$_POST['sport']; $gluten=$_POST['gluten']; $caseine=$_POST['caseine']; $soja=$_POST['soja']; $crise=$_POST['crise']; $pdj = $_POST['pdj']; $dj = $_POST['dj']; $gouter = $_POST['gouter']; $diner = $_POST['diner']; foreach($pdj as $cle => $valeur) { $pdj=$cle.' : '.$valeur.' - '; } foreach($dj as $cle => $valeur) { $dj=$cle.' : '.$valeur.' - '; } foreach($gouter as $cle => $valeur) { $gouter=$cle.' : '.$valeur.' - '; } foreach($diner as $cle => $valeur) { $diner=$cle.' : '.$valeur.' - '; } // connexion à la base $db = mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error()); // sélection de la base mysql_select_db('food',$db) or die('Erreur de selection '.mysql_error()); // on écrit la requête sql $sql = "INSERT INTO ingredients(date, nuit, wc, sport, gluten, caseine, soja, crise, pdj, dj, gouter, diner) VALUES('$date','$nuit','$wc','$sport','$gluten','$caseine','$soja','$crise','$pdj','$dj','$gouter','$diner')"; // on insère les informations du formulaire dans la table mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); // on affiche le résultat pour le visiteur echo 'Vos infos on été ajoutées.'; mysql_close(); // on ferme la connexion ?>
exemple de résultat dans la base de données

Code : Tout sélectionner

2006-08-08 mauvaise oui oui oui oui non non 0 : Viennoiserie - 1 : Poisson - 0 : Crepes nutella - 2 : Pain -

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

27 oct. 2006, 22:45

Salut,

Tu n'oublirais pas une concaténation pour reprendre les choix d'avant ?
$pdj=$pdj . $cle.' : '.$valeur.' - ';
ou
$pdj .= $cle.' : '.$valeur.' - '; // le point juste avant = 
Sinon tu peux passer tout le tableau dans implode() pour former une chaine
$variable = implode("-",$ton_tableau);
Ceci dit ce n'est pas vraiement la bonne manière pour enregistrer des données.... tout dans un même champ :?

Les "$cle" ne sont pas utiles !
Et tu pourrais passer ton type de champ en "enum" (au lieu de varchar certainement)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

turtle
Invité n'ayant pas de compte PHPfrance

01 nov. 2006, 11:42

j'ai utilisé un implode et cela fonctionne sans souci.
Pourqui ce n'est pas une bonne idée de mettre autant de valeurs dans un seul champs?
quel est l'avantage de enum par rapport à varchar ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 nov. 2006, 19:37

Pour des raisons de normalisation et facilité de manipulation des données.

Si tu recherches un élément précis tu aura beaucoup de mal à le retrouver.

Laisse tomber l'idée "Enum" 8-[
dans ton cas c'est plus un type SET (pour pouvoir enregistrer plusieurs choix, même s'il y a plusieurs valeur dans un même champ la manipulation est plus simple)

Petit lien pour plus d'explications

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute