Accueil > Forum > > > > [JS/PHP] Vérifier plusieurs radios d'un form
[JS/PHP] Vérifier plusieurs radios d'un form
vendredi 22 avril 2011 à 13:50:48 |
[JS/PHP] Vérifier plusieurs radios d'un form

mymemorial
|
Bonjour,
J'ai un formulaire en PHP que je remplis à l'aide d'une base de donnée mySQL. J'ai donc plusieurs questions et plusieurs choix qui sont affectées à chaque question.
Jusque là, l'affichage du formulaire est bon, pas de problème.
Maintenant, je voudrais vérifier si au moins un choix a été fait pour chaque question.
Si j'oublie de cocher un des radios d'une question, le formulaire ne doit pas s'envoyer.
J'essaye donc de faire une fonction Javascript qui me permet de vérifier que l'utilisateur a répondu à toutes les questions. Voici mon code JS :
Code Javascript : <script language="javascript">
function verif()
{
var res = false;
var result = false;
var l= 0;
var j;
var radios = document.getElementsByTagName('input');
for(j=1;j<3;j++)
// le 3 c'est juste pour tester les 2 premières questions d'abord, après je me débrouillerais pour prendre l'ID de la dernière question depuis la requete SQL du form pour savoir le nombre de questions total du form
{
l = radios.length;
result = false;
for (var k=0;k<l;k++)
{
if((radios[j].name == j)&&(radios[k].checked))
// Et c'est la ou j'ai eu des problemes : oui, le name des radios est un int, c'est en fait l'ID des questions ('1' et '2' dans ce cas).
// Ici, je veux que si pour chaque question, il ne trouve pas de choix checked, il me renvoie la valeur result qui sera false (vu que je lui donne la valeur false pour chaque question)
{
result = true;
}
}
if(result!=true)
{
alert("Attention! Un champ n'a pas ete saisi!");
return result;
}
}
// si pour chaque question la valeur de la variable result est true, alors arrivé ici je donne a la variable res la valeur true pour la retourner a mon form.
res = true;
return res;
}
</script>
En testant ce code, ca m'affiche toujours l'alerte "Attention", meme si je coche les choix des 2 premières questions.
Et voici une partie de mon script PHP. J'ai enlevé les boucles, les connexions à la base de données, etc, mais je sais qu'il n'y a aucun problème à ce niveau la :
Code HTML : <form name="form" action="Test4.php" method="post" onSubmit="return verif();"/>
<!--On va d'abord afficher ici les questions-->
<?php echo $data[1]; ?>
<!--On va afficher ici les differents choix de chaque question sous forme de radio-->
<input type="radio" id="<?php echo $data1[0]; ?>" name="<?php echo $data1[3]; ?>" value="<?php echo $data1[2]; ?>"/><?php echo $data1[1]; ?>
<input type="submit" value="Envoyez vos reponses!"/>
</form>
J'ai connu des problèmes au niveau du "name" des radios qui sont des int (les ID des questions, soit 1, 2, 3...)
|
|
vendredi 22 avril 2011 à 15:03:32 |
Re : [JS/PHP] Vérifier plusieurs radios d'un form

jopop
|
Réponse acceptée !
Salut,
Alors déjà je te déconseille d'identifier tes tag par des entiers purs, concatène plutôt avec une lettre, du genre "Q1.1", "Q1.2" ...
Ensuite tu récupères la liste de tous les input, ce qui comporte les radio mais aussi les boutons, les textbox, les check ... Ce qui pourrait être la source de ton erreur : en effet, buttonInput.checked renvoie false. Tu devrais donc vérifier, lors de ton parcours, que tu es bien sur un radio.
Enfin, les index en JS commence à 0 (zéro). Or ta boucle sur j commence à 1 (un).
|
|
vendredi 22 avril 2011 à 15:20:34 |
Re : [JS/PHP] Vérifier plusieurs radios d'un form

mymemorial
|
Coucou jopop, merci beaucoup pour ta réponse.
Tu as raison pour les input, même si je n'ai que des radios dans mon formulaire en ce moment. J'ai remplacé la ligne :
Code Javascript : if((radios[j].name == j)&&(radios[k].checked))
Par :
Code Javascript : if((radios[j].type == 'radio')&&(radios[j].name == j)&&(radios[k].checked))
En espérant que ça fasse l'affaire ^^
Sinon pour le j, je l'ai commencé par 1 car l'ID de ma première question est 1 (désolé, j'ai oublié de le préciser).
Par contre j'aime bien ton idée de concaténation, pourrais-tu me donner un coup d'pouce ?
Si je remplace dans mon code HTML :
Code HTML : <input type="radio" id="<?php echo $data1[0]; ?>" name="<?php echo $data1[3]; ?>" value="<?php echo $data1[2]; ?>"/><?php echo $data1[1]; ?>
Par ce qui suit en ajoutant "q" au nom :
Code HTML : <input type="radio" id="<?php echo $data1[0]; ?>" name="q<?php echo $data1[3]; ?>" value="<?php echo $data1[2]; ?>"/><?php echo $data1[1]; ?>
Est-ce que ce qui suit est juste ?
Code Javascript : if((radios[j].type == 'radio')&&(radios[j].name == 'q'+j)&&(radios[k].checked))
J'ai toujours le "Attention" qui pop, j'ai du rater la concaténation dans le script...
Je suis persuadé que le problème reste dans le "name", si tu peux m'aider encore sur ce point, ce serait sympa! 
|
|
vendredi 22 avril 2011 à 15:25:04 |
Re : [JS/PHP] Vérifier plusieurs radios d'un form

mymemorial
|
Euh en fait je crois que c'est bon là! =)
Ce n'était pas :
Code Javascript : if((radios[j].type == 'radio')&&(radios[j].name == 'q'+j)&&(radios[k].checked))
Mais :
Code Javascript : if((radios[k].type == 'radio')&&(radios[k].name == 'q'+j)&&(radios[k].checked))
Peux-tu me confirmer que c'est bon ? =)
Je viens de tester et apparemment ça marche... ^_^
|
|
vendredi 22 avril 2011 à 16:13:55 |
Re : [JS/PHP] Vérifier plusieurs radios d'un form

jopop
|
Réponse acceptée !
Re,
J'étais en train de voir comment j'aurais codé le truc ^^
Et en fait j'aurai pas fait comme toi ><
Voilà comment je verrais les chose :
- Le HTML que je tenterai de générer avec PHP (ou XXX correspond à un UID pour retrouver la réponse dans la BDD) :
Code HTML : <label>Ma première question ?</label><br />
<input type="radio" id="R1.1" name="Q1" value="XXX" />Oui<br/>
<input type="radio" id="R1.2" name="Q1" value="XXX" />Non<br/>
<input type="radio" id="R1.3" name="Q1" value="XXX" />Ptèt<br/>
<label>Ma deuxième question est-elle à la framboise ?</label><br />
<input type="radio" id="R2.1" name="Q2" value="XXX" />Non, au citron<br/>
<input type="radio" id="R2.2" name="Q2" value="XXX" />42<br/>
<input type="radio" id="R2.3" name="Q2" value="XXX" />Hardy<br/>
[..]
- Le script JS de vérification :
Code Javascript : var nbQ = <?php echo mon_nombre_de_questions; ?>
for (i=1;i<=nbQ;i++) {
// on récup' un groupe de réponses
var reps = document.getElementsByName("Q"+i);
// on parcours les réponses
var gchecked = false;
for (j=1;j<=reps.length;j++) {
if (reps[j].checked) && (!gchecked))
gckecked = true;
}
if (!gchecked) return false;
}
return true;
Alors je sais pas bien si ça va t'aider alors que je fais pas vraiment comme toi. Sinon, oui, il semblerait que tu te sois trompé d'itérateur et qu'il faille utiliser k, d'ailleurs on peut voir que depuis le début tu testes radio[k].checked ;)
|
|
vendredi 22 avril 2011 à 17:40:10 |
Re : [JS/PHP] Vérifier plusieurs radios d'un form

mymemorial
|
Oh, j'aime bien comment tu vois les choses! ^^
J'avais aussi pensé à getElementsByName au début, avant que j'ajoute le "q" au name, et comme getElementsByName(int) ne me donnait rien, j'ai du changer de plan!
En tout cas, merci beaucoup pour ton aide, tu es génial!
Très bonne soirée ^_^
(Et hop, réponse acceptée!)
|
|
Cette discussion est classée dans : code, php, var, js, radios
Répondre à ce message
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|