Page 1 sur 2

Checkbox

Posté : 26 juin 2005, 20:15
par elminio
Bonjour à tous,
Je suis dans la réalisation d'un formulaire php
dans lequel les données doivent être enregistré sur base une mysql
et je rencontre une difficulté pour enregistré les choix checkbox sur ma base.
Voici un exemple de mon checkbox :

Code : Tout sélectionner

<input type="checkbox" name="bande" value="10m" /> <input type="checkbox" name="bande" value="20m" /> <input type="checkbox" name="bande" value="40m" />
Je sais qu'il me manque quelque chose pour enregistrer 10m, 20m et 40m
si sélectionner sur la base.
merci d'avance pour vos réponses,
Cordialement,
Elminio.

Posté : 26 juin 2005, 20:18
par Rei Itchido
Sans même parler de l'enregistrement dans la BD, t'es sûr que tu voudrais pas plutôt des boutons radios pour avoir un choix entre les 3?
Quelque chose dans ce genre :

<input type="radio" name="bande" value="10m" />
<input type="radio" name="bande" value="20m" />
<input type="radio" name="bande" value="40m" />

Là t'as des checkbox avec le même nom, ça me semble bizzar.

Posté : 26 juin 2005, 20:33
par elminio
Voici mon fichier formulaire.php pour exemple :

Code : Tout sélectionner

<form name="form1" id="form1" method="post" action="stock.php"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <th width="10%" scope="col">&nbsp;</th> <th width="345" height="50" colspan="2" scope="col"><span class="Style4">ENTREE UN CONCOURS </span></th> <th width="50%" height="50" scope="col">&nbsp;</th> </tr> <tr> <td width="10%">&nbsp;</td> <td width="345" height="50" colspan="2">&nbsp;</td> <td width="50%" height="50">&nbsp;</td> </tr> <tr> <td width="10%"><span class="Style3">Nom</span></td> <td width="345" height="50" colspan="2"> <input name="nom" type="text" size="66" /> </td> <td width="50%" height="50"><p class="Style4"><strong> IARU HF World Championship </strong></p></td> </tr> <tr> <td width="10%"><span class="Style3">Date</span></td> <td width="345" height="50" colspan="2"> <textarea name="date" cols="50" rows="2"></textarea> </td> <td width="50%" height="50"><div align="justify"><span class="Style6"> 2 nd week-end entier de juillet, du samedi &agrave; 12:00 UTC au dimanche &agrave; 12:00 UTC. </span></div></td> </tr> <tr> <td width="10%"><span class="Style3">Bande</span></td> <td width="10%"> <p class="Style6"> <input type="checkbox" name="bande" id="160m" value="1" /> 160 m </p> <p class="Style6"> <input type="checkbox" name="bande" id="80m" value="2" /> 80 m </p> <p class="Style6"> <input type="checkbox" name="bande" value="40m" /> 40 m </p> <p class="Style6"> <input type="checkbox" name="bande" value="30m" /> 30 m </p> <p class="Style6"> <input type="checkbox" name="bande" value="20m" /> 20 m </p> <p class="Style6"> <input type="checkbox" name="bande" value="17m" /> 17 m </p></td> <td width="10%"><p class="Style6"> <input type="checkbox" name="bande" value="15m" /> 15 m </p> <p class="Style6"> <input type="checkbox" name="bande" value="12m" /> 12 m </p> <p class="Style6"> <input type="checkbox" name="bande" value="10m" /> 10 m </p> <p class="Style6"> <input type="checkbox" name="bande" value="6m" /> 6 m </p> <p class="Style6"> <input type="checkbox" name="bande" value="2m" /> 2 m </p> <p class="Style6"> <input type="checkbox" name="bande" value="70cm" /> 70 cm </p></td> <td width="50%"> <p class="Style6"> 160, 80, 40, 20, 15, 10 m&egrave;tres </p> </td> </tr> <tr> <td width="10%"><span class="Style3">Mode</span></td> <td width="345" height="50" colspan="2"> <p class="Style6"> <input type="checkbox" name="mode" value="phonie" /> Phonie</p> <p class="Style6"> <input type="checkbox" name="mode" value="telegraphie" /> T&eacute;l&eacute;graphie </p> <p class="Style6"> <input type="checkbox" name="mode" value="mode digitaux" /> Mode digitaux </p></td> <td width="50%" height="50"><span class="Style6"> Phonie et T&eacute;l&eacute;graphie </span></td> </tr> <tr> <td width="10%"><span class="Style3">Report</span></td> <td height="50" colspan="2"> <textarea name="report" cols="50" rows="6"></textarea> </td> <td width="50%" height="50" class="Style6"><p><strong><em> Soci&eacute;t&eacute; membre IARU </em></strong></p> <p> RST + abr&eacute;viation de la soci&eacute;t&eacute; (ex&nbsp;: 599REF) </p> <p><strong><em>Radio Amateur </em></strong></p> RST + Zone ITU (ex&nbsp;: 59927) </td> </tr> <tr> <td width="10%"><span class="Style3">Infos</span></td> <td height="50" colspan="2"> <input type="text" name="info" size="66" /> </td> <td width="50%" height="50"><p><a href="http://www.arrl.org/contests/rules/2005/iaru.html" class="Style6">http://www.arrl.org/contests/rules/2005/iaru.html</a></p></td> </tr> <tr> <td colspan="4">&nbsp;</td> </tr> <tr> <td colspan="4"><div align="center"> <input type="reset" name="effacer" value="Effacer" > </div></td> </tr> <tr> <td colspan="4"><div align="center"> <input type="submit" name="envoyer" value="Envoyer"> </div></td> </tr> </table> </form>
et voici mon fichier stock.php pour accédez a ma base mysql

Code : Tout sélectionner

<? /* On se connecte et on choisi la base de données */ mysql_connect("localhost","root","") or die ("Impossible de se connecter à MySQL"); mysql_select_db("fconcours") or die("Impossible de sélectionner la base de données"); /* On construit la requête en fonction des paramètres qui sont envoyés. */ $query_string="INSERT INTO concours (nom, date, bande, mode, report, info) VALUES ('$nom','$date','$bande','$mode','$report','$info')"; $query=mysql_query($query_string); /* On donne le résultat à l'utilisateur */ if ($query) { echo "<p class=\"resultok\">Votre requête a bien été enregistrée</p>"; } else { echo "<p class=\"resultbad\">Il y a eu un problème avec votre requête</p>"; echo "<p class=\"resultbad\">" . mysql_error() . "</p>"; } ?>
en espérant que sa peux vous aidez à comprendre
je veux seulement enregistré mes choix (checkbox sur ma base mysql)
je dois pouvoir sélectionner plusieurs case.

Posté : 26 juin 2005, 20:35
par ouckileou
ce que veut dire Rei Itchido, c'est qu'il faut voir ce que tu veux :
si tu veux que l'utilisateur ne puisse choisir qu'une possibilité, alors c'est sa solution de bouton radio qui convient
sinon pour des choix multiples ce sont effectivement les checkbox qui conviennent

ensuite pour ton code PHP, il faut que tu récupères tes données comme ceci :
$bande = $_POST['bande'];
car ton formulaire transmet les infos via une méthode POST

édition : je viens de voir la dernière phrase
si tu veux récupérer les infos liées à des checkbox, nomme-les comme ça :

Code : Tout sélectionner

<input type="checkbox" name="bande[]" value="valeur1>
comme ça tu récupèreras un tableau et tu pourras boucler dessus pour les enregistrer

Posté : 26 juin 2005, 20:39
par Rei Itchido
Tu ne veux pas repondre à ma question avant? ;)

Si je regarde ton formulaire, pour une "bande" tu as plusieurs choix donc apparemment on peut cocher 20m, 30m et 40m (par exemple).

Mais si je regarde la structure de ta table concours (nom, date, bande, mode, report, info), bande ne peut avoir qu'une seule valeur.

Avant d'aller plus loin, soit sûr de ce que tu veux stocker comme infos.

EDIT : je viens aussi de voir ta derniere phrase...il y a donc un soucis au niveau de ta table concours

Posté : 26 juin 2005, 20:39
par elminio
$bande = $_POST['bande'];
ou dois je placé cette commande dans mon premier script ?
et à quelle endroit ?

Posté : 26 juin 2005, 20:45
par ouckileou
tu places cette ligne au début du code, avant d'utiliser la variable bande

si tu ne vois pas ce que siginifie $_POST, regarde ici :
http://www.phpfrance.com/forums/voir_sujet-48.php

et je suis d'accord avec Rei itchido, on n'enregistre que rarement plusieurs valeurs dans un même champ
si tu as plusieurs possibilités pour "bande" il devrait y avoir un table bande, et une relation entre concours et bande
ou quelque chose comme ça

Posté : 26 juin 2005, 20:51
par elminio
désolé tu vas trop vite pour moi je ne suis plus ;-)
donc pour information je débute complétement.
Mon but actellement
de pouvoir sélectionner une ou plusieurs bande
avec le système checkbox ensuite de pouvoir les enregistrées sur ma base mysql.
pas évident pour moi lol. :roll:

Posté : 26 juin 2005, 20:55
par ouckileou
ok, donc déjà réussi à enregistrer tes valeurs

et c'ets donc comme je l'ai dit, renomme tes checkbox avec des crochets en plus, tu récupèreras une variable tableau

Posté : 26 juin 2005, 21:00
par Rei Itchido
$bande = $_POST['bande'];
ou dois je placé cette commande dans mon premier script ?
et à quelle endroit ?
Je crois que tu n'as pas repondu à sa question ouckileou :)

elminio, $_POST['bande']; te permet de recuperer dans ta page de traitement du formulaire (donc de stock.php) ce qui dans ton formulaire (qui utilise la methode 'post', d'où le $_POST[''] ;) ) a comme nom 'bande'.

Avant de te lancer dans l'enregistrement dans ta base de données, essayes dèjà de te familiariser avec les formulaires pour recuperer dans stock.php les bonnes infos.

Posté : 26 juin 2005, 21:00
par elminio
Exemple de mon formulaire d'insertion :

ENTREE UN CONCOURS

Nom du concours :
IARU HF World Championship

Date :
2 nd week-end entier de juillet, du samedi à 12:00 UTC au dimanche à 12:00 UTC.

Bande :

O 160 m O 17 m

O 80 m O 15 m

O 40 m O 12 m

O 30 m O 10 m

O 20 m O 6 m


Mode :

O Phonie

O Télégraphie

O Mode digitaux

Report :

Société membre IARU

RST + abréviation de la société (ex : 599REF)

Radio Amateur

RST + Zone ITU (ex : 59927)

Infos :
http://www.arrl.org/contests/rules/2005/iaru.html


Les O sont les cases lol

Posté : 26 juin 2005, 21:16
par ouckileou
ben si j'avais répondu ;)
tu places cette ligne au début du code, avant d'utiliser la variable bande
mais bon c'est peut-être un peu court...

sinon elminio pas besoin de nous filer un exemple, on a tout ce qu'il faut et toi aussi

problème : tu veux utiliser des checkbox, sélectionner plusieurs choix et enregistrer les choix dans un champ d'une table
solution : renommer avec des crochets, récupérer ce tableau et boucler dessus pour avoir chaque valeur, et les enregistrer dans ton champ

contente toi de ça , tu as la marche à suivre
si tu as des problèmes spécificiques là-dessus demande ici

bon courage ;)

Posté : 26 juin 2005, 21:21
par Rei Itchido
ben si j'avais répondu ;)
tu places cette ligne au début du code, avant d'utiliser la variable bande
mais bon c'est peut-être un peu court...
Vi mais me semble qu'il demandait si il devait utiliser ça dans sa première page, celle du formulaire.
Bref.

Posté : 26 juin 2005, 21:22
par elminio
dernière question pour aujourd'hui
pas besoin de crée un table bande alors ?
merci ouckileou et Rei Itchido

Posté : 26 juin 2005, 21:28
par ouckileou
ben si j'avais répondu ;)
tu places cette ligne au début du code, avant d'utiliser la variable bande
mais bon c'est peut-être un peu court...
Vi mais me semble qu'il demandait si il devait utiliser ça dans sa première page, celle du formulaire.
Bref.
peut-être, de toute façon ton explication était plus claire
pas besoin de crée un table bande alors ?
on va dire que non...
si tu n'as pas encore de données tu pourras changer ça après
mais il faut savoir que si tu récupères plusieurs valeurs dans un champ, ou si tu as plusieurs champs de même nature dans une table (ex : note1, note2, note3... etc) c'ets qu'il y a probablement un problème de conception

j'aurai plutôt vu quelquechose comme ça :
concours(id_concours,nom, date, mode, report, info);
bandes(id_bande], libelle_bande);

contient(id_concours#,id_bande#);

comme ça tu as d'un coté la liste des bandes, de l'autre celle des concours, et une relation "contient" qui fait le lien

comme ça tu peux par exemple modifier le libellé d'une bande sans tout changer, ou en rajouter facilement