Mettre plusieurs valeurs dans un seul champ

Eléphant du PHP | 78 Messages

30 août 2007, 14:02

Bonjour,

Je voudrais savoir si il fallait obligatoirement 4 champs dans une table sql pour 4 proposition dans le formulaire.

Voici mon formulaire :
<div id="label" for="piece">Pièces :</div>  <input type="checkbox" name="piece" id="piece" value="Veste" /> Veste 
											<input type="checkbox" name="piece" id="piece" value="Sous cuirasse" /> Sous cuirasse 
											<input type="checkbox" name="piece" id="piece" value="Pantalon" /> Pantalon 
											<input type="checkbox" name="piece" id="piece" value="Masque" /> Masque <br /> 
Donc en fait je coche ce que le client loue. Mais je voudrais le renvoyer uniquement là :

Code : Tout sélectionner

`piece` varchar(20) collate latin1_general_ci NOT NULL,
Parceque j'ai déjà beaucoups de champs... Est ce possible ??

Si oui comment ?

Si non, je vais devoir créer dans champs supplémentaires pour chacune des pièces ??

Mici
Morkem

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

30 août 2007, 14:15

Bah tu fais comme tu veux... 4 valeurs dans 4 chmaps c'est juste plus facile à retrouver et à modifier ... Maintenant rien ne t'empêche de concaténer les valeurs reçues dans une seule variable et de la stocker dans ton varchar...

Le seul soucis que tu aurais dans le cas présent, c'est que si l'utilisateur coche les 4 cases, les 4 valeurs mises bout à bout ("VesteSous cuirassePantalonMasque") tiendront jamais dans un champ de 20 caractères ;)

Maintenant à mon avis, mieux vaut une table avec 100 champs utiles, que l'on peut indexer, mettre à jour et interroger facilement, qu'une table avec 20 champs pour des raisons de "beaucoup de champs" qu'il faudra parser, comparer, exploser et remplacer dès qu'on voudra en faire quelque chose :)
La question est donc de savoir l'usage que tu as de l'info et l'évolution possible de celle-ci.. parce qu'on peut aussi envisager une table avec ta liste de pieces et des id, et une table de liaison pour lier le gars à ses pièces...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 78 Messages

30 août 2007, 14:20

Non l'usage a été reflechi :) Le varchar va être de 50 peut importe... Ce qui me pose probleme c'est la manière d'envoyer les données :s

J'avais fait un truc comme ca :
<div id="label" for="piece">Pièces :</div>  <input type="checkbox" name="pieceveste" id="pieceveste" value="Veste" /> Veste 
											<input type="checkbox" name="piecesscuirasse" id="piecesscuirasse" value="Sous cuirasse" /> Sous cuirasse 
											<input type="checkbox" name="piecepantalon" id="piecepantalon" value="Pantalon" /> Pantalon 
											<input type="checkbox" name="piecemasque" id="piecemasque" value="Masque" /> Masque <br /> 
$piece = ($_POST['pieceveste'] . $_POST['piecesscuirasse'] . $_POST['piecepantalon'] . $_POST['piecemasque']);

mysql_query("INSERT INTO materiel VALUES('', '".$piece."' ) ") or die(mysql_error());
Mais rien ne s'enregistre... Ou est mon erreur ?
Morkem

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

30 août 2007, 14:24

Pas d'erreur mysql ?
As-tu affiché la valeur de $piece ? de $_POST
ta table "materiel" n'a que deux champs ?
tes champs sont dans le même ordre que tes valeurs ?
t'es bien connecté à la base ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 78 Messages

30 août 2007, 14:40

Bon effectivement après une petite correction ca fonctionne...

Mais si je fais une page modification, je ne peux pas réafficher les données dans les checkbox ??
Morkem

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

30 août 2007, 14:49

Tu peux, mais c'est la notamment que tu vas te prendre la tête puisque pour savoir si la case doit être cochée il faut que tu vérfies si la chaine que tu as récupéré de ta base contient une sous chaine correspondant à la valeur de la case (et encore tu as de la chance, elles sont toutes différentes, tu peux donc tester facilement) ...

Tu peux faire ça avec un strpos(), un ereg() ou un preg_match() par exemple
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 78 Messages

30 août 2007, 15:49

C'est génial... Ca fonctionne super bien :) Merci
Morkem