IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

groupes de boutons radio


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut groupes de boutons radio
    Bonjour

    Dans un script php , je voudrais sélectionner qu'une radio à la fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    $sql="SELECT nom_titre FROM question,titre,type,reponse WHERE question.id_question=titre.id_titre AND question.id_question=reponse.id_question AND reponse.id_type=type.id_type AND id_sondage=1 AND type.id_type=1 GROUP BY nom_titre;";
    $req= mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    $nb_res=mysql_num_rows($req);
    while ($row = mysql_fetch_row($req))
    {
    	$i=0; 
    	echo "<span class='petit_titre'><br />".$row[$i]."</span><br />"; //Titre
    	$sql_1="SELECT nom_question FROM question,titre WHERE question.id_titre=titre.id_titre AND titre.nom_titre='$row[$i]'";
    	$req_1= mysql_query($sql_1) or die('Erreur SQL!'.$sql_1.'<br>'.mysql_error());
    	while ($row_1 = mysql_fetch_row($req_1))
    	{	
    		$j=0;
     
    		echo "<table border=1  class='center_bloc' width='50%'>";
     
    		echo "<td>".$row_1[$j]."</td>.</tr>"; //Question
    		$sql_2="SELECT id_reponse,nom_reponse FROM reponse,question WHERE reponse.id_question=question.id_question AND nom_question='$row_1[$j]'";
    		$req_2= mysql_query($sql_2) or die('Erreur SQL !'.$sql_2.'<br>'.mysql_error());
    		while ($row_2 = mysql_fetch_row($req_2))
    		{
     
    			$k=0;
    			echo "<tr>";
    			echo "<td align='center'><input type='radio' name='tab[]' value='$row_2[$k]'><br>".$row_2[1]."</input></td>"; //Réponse
    			echo "</tr>";
     
    		}
    		echo "</table>";
    		}
     
    }
    Mon affichage se fait correctement

    Question 1
    choix 1
    choix 2

    Question 2
    choix 1
    choix 2

    Mais malheureusement lorsque je ne peut sélectionner qu'une radio à la fois (c'est à dire choix1 question1 OU choix1 quesstion2)

    A Noter qu'avec les checkbox , cela fonctionnes très bien et me retournes d'ailleurs les bons résultats.

    Ou alors je ne sais pas si quelqu'un aurait une idée afin que je puisse sélectionner qu'une checkbox. (en javascript ?)

    Cela me permettrait de contourner le problème.


    Cdt

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    Hello,

    Pour grouper plusieurs boutons radio, tu dois leur donner un attribut name identique. Tu ne pourras alors en sélectionner qu'un seul ayant cet attribut name.

    Sinon, c'est effectivement aussi faisable avec des checkbox et du JS, mais autant utiliser les élements fait pour ca.

  3. #3
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Oui mais c'est ce que j'ai fais.

    Mais malheuresement , il m'est possible de sélectionner qu'UNE radio box dans mon formulaire alors que je voudrais une radiobox par question.

  4. #4
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <script>
    function checkSelect(elmId)
    {
    	  maxOptionsSelect = 1;
    	  form = document.all("formulaire");
    	  inputs = form.getElementsByTagName("input");
    	  count = 0;
    	  for(i=0 ; i<inputs.length ; i++)
    	  {
    	    if(inputs[i].type=="checkbox" && inputs[i].checked==true)
    		{
    		  count++;
    		}
    	  }
     
    	  if(count > maxOptionsSelect)
    	  {
    	  	document.all(elmId).checked=false;
    	  	alert("Vous ne pouvez sélectionner que maximum " + maxOptionsSelect + " options");
    		return false;
    	  }
    	  return false;
    }
    </script>
    J'ai trouvé un script qui permet de sélectionner qu'un certain nombre défini de checkbox.


    Cependant , il ne s'applique pas ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    $sql="SELECT nom_titre FROM question,titre,type,reponse WHERE question.id_question=titre.id_titre AND question.id_question=reponse.id_question AND reponse.id_type=type.id_type AND id_sondage=1 AND type.id_type=1 GROUP BY nom_titre;";
    						$req= mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    						$nb_res=mysql_num_rows($req);
    						while ($row = mysql_fetch_row($req))
    						{
    							$i=0; 
    							echo "<span class='petit_titre'><br />".$row[$i]."</span><br />"; //Titre
     
    							$sql_1="SELECT nom_question FROM question,titre WHERE question.id_titre=titre.id_titre AND titre.nom_titre='$row[$i]'";
    							$req_1= mysql_query($sql_1) or die('Erreur SQL !'.$sql_1.'<br>'.mysql_error());
    							while ($row_1 = mysql_fetch_row($req_1))
    							{	
    								$j=0;
     
    								echo "<table border=1  class='center_bloc' width='50%'>";
     
    								echo "<td>".$row_1[$j]."</td>.</tr>"; //Question
    								$sql_2="SELECT id_reponse,nom_reponse FROM reponse,question WHERE reponse.id_question=question.id_question AND nom_question='$row_1[$j]'";
    								$req_2= mysql_query($sql_2) or die('Erreur SQL !'.$sql_2.'<br>'.mysql_error());
    								while ($row_2 = mysql_fetch_row($req_2))
    								{
     
    										$k=0;
    										echo "<tr>";
    										echo "<td align='center'><input type='checkbox' name='tab[]' value='$row_2[$k]' onclick='javascript:checkSelect($row_2[$k]);''><br>".$row_2[1]."</input></td>"; //Réponse
    										echo "</tr>";
     
    								}
    								echo "</table>";
    							}
     
    						}
    Je vais laisser tomber pour le javascript.

    J'ai trouvé d'ou vient le problème ,c'est au nom de la radio.

    Toutes les radio ont le meme nom , c'est donc pour cela que je ne peut pas en sélectionner un pour chaque question.

    Maintenant reste à voir comment attribuer un nom dynamique à la radio en fonction de la question...

    Si quelqu'un a une idée, je suis preneur pour résoudre mon m'aider à résoudre mon problème.Merci

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il suffit que les boutons radio aient un "name" reprenant le numero de la question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    name="reponse[$question]"
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    Oui, c'est cela, il faut un nom pour chaque groupe de questions, donc un name différent pour chaque question.

    Pour avoir un nom différent, si tu as un champ id pour les questions dans ta BDD, tu peux utiliser celui là en le recuperant avec la question dans ta premiere requete. Ce qui donnerai un truc du genre : 'name="radio'.$row['id'].'"'; et donnerai donc un nom différent pour chaque question. Tu peux aussi utiliser une variable que tu concaténe au nom comme avec l'id et que tu incrémente à chaque nouvelle question.

  7. #7
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Cela fonctionnes , j'arrive maintenant à sélectionner correctement mes radio.
    Je vous remercie.

    Maintenant lorsque je récupérais , je fesais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for($i=0; $i<count($_POST['tab']);$i++)
    {
    	echo $_POST["tab"][$i]." ";
    }
    Et je récupérais ainsi tous mes id réponses. (avec les checkbox)

    Mais maintenant que ma radio s'appelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<td align="center"><input type="radio" name="radio'.$row_1[0].'"" value="$row_2[$k]" ><br>'.$row_2[1].'</input></td>'; //Réponse
    Comment récupérer les différentes valeurs de mes radio?

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    c'est pour cela qu'il ne faut pas concatener mais utiliser un tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<td align="center"><input type="radio" name="radio['.$row_1[0].']" value="$row_2[$k]" ><br>'.$row_2[1].'</input></td>'; //Réponse
    et ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($_POST['radio'] as $question=>$reponse) {
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<td align="center"><input type="radio" name="radio['.$row_1[0].']" " value="$row_2[$k]" ><br>'.$row_2[1].'</input></td>'; //Réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($_POST['radio'] as $row_1[0]=>$row_2[1])
    {
    	echo $_POST['radio'];
    }

    Et la il m'affiche Array.

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Regarde le fonctionnement de la fonction foreach()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    En lisant la page de la doc php sur foreach (ici), tu peux voir que le foreach demande d'abord un tableau, et ensuite 2 variables qui prendront la valeur de la clé (la chaine entre les crochets [ ]) et la valeur dans le tableau pour chaque élément du tableau.
    Dans $_POST['radio'], tu as un tableau contenant un élément par groupe de radio buttons avec comme clé l'id de ta question comme indiqué dans le name et comme valeur, la valeur du radio button sélectionné.

    Si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($_POST['radio'] as $question=>$reponse)
    {
    ...
    }
    tu accederas donc dans la boucle à la valeur $reponse du radio button selectionné pour la question d'id $question.

    J'espere que c'est plus clair pour toi.

  12. #12
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Oui , ayant lu la doc avant aussi. J'ai compris l'idée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<td align="center"><input type="radio" name="radio['.$row_1[0].']" " value="$row_2[0]" ><br>'.$row_2[1].'</input></td>'; //Réponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    foreach($_POST['radio'] as $key => $value)
    {
    	echo $key . ':<br />';
     
    	foreach($value as $valeur)
    	{
    		echo ''.$valeur.'<br />';
    	}
    }
    J'ai bien l'ID de la question (1er echo) mais pas les réponses.

    L'erreur pour le 2e echo étant : Warning:Invalid argument supplied for foreach()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<td align="center"><input type="radio" name="radio['.$row_1[0].']" " value="$row_2[0]" ><br>'.$row_2[1].'</input></td>'; //Réponse
    C'est ok pour le name ? Ca doit pas ressembler à un truc du genre name=radio[question[reponse]] ?

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    $value prend la valeur de l'attribut value du radio button sélectionné, ce n'est donc pas un array.

  14. #14
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Ok mais le value est obligé d'être un tableau puisqu'il est dans une boucle.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    Reprenons du début.

    Tu as plusieurs groupes de radio buttons. Après avoir submit ton formulaire, tu recupere un tableau qui associe l'id de la question avec la valeur du radio button sélectionné pour chaque groupe de radio buttons.
    Un truc genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $_POST['radio'] = Array(
    1 => "valeur du radio button selectionné pour la question 1",
    2 => "valeur du radio button selectionné pour la question 2"
    ...
    );
    Pour afficher ca et mieux voir le contenu de l'array, tu peux essayer la fonction print_r(array) qui permet d'afficher facilement un array.
    On voit bien que chaque clé (les chiffres avant =>) est associée à UNE valeur.

    Maintenant, le foreach... Tu lui dis de parcourir le tableau $_POST['radio'] en mettant successivement la valeur de la clé dans $key et la valeur associée dans $value en parcourant le tableau. Donc $value n'est pas un tableau, mais bien la valeur du radio button selectionné associée à la question d'id $key.

    Si tu ne vois toujours pas, dis moi qu'est ce qui te pose probleme plus précisement que je sache quoi expliquer.

  16. #16
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<td align="center"><input type="radio" name="radio['.$row_1[0].']" " value="$row_2[0]" ><br>'.$row_2[1].'</input></td>'; //Réponse
    $row_1[0] : id de la question
    $row_2[0] : id de la réponse
    $row_2[1] : nom de la réponse

    Le tout étant dans une boucle while , je suis obligé de tout stocker dans des tableaux.

    Mais le problème vient de la liaison je penses entre l'id de la question et l'id de la réponse (pour le foreach).

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    Teste un print_r($_POST['radio']); pour voir ce que tu récupere. Tu verras que l'id de la question est associée à l'id de la réponse sélectionnée dans $_POST['radio'].

    Le foreach permet de parcourir facilement ce tableau en mettant l'id de la question dans $key et l'id de la reponse associée dans $value. Donc, il n'y a pas de probleme, à chaque passage dans la boucle, un nouvel élément du tableau est sélectionné et tu récupere l'id de la question et l'id de la reponse... Tu parcours donc toutes les questions les unes apres les autres grace au foreach.

  18. #18
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Donc lorsque je fais un print_r($_POST['radio']);

    j'obtiens
    Array([numéro de la question] => $row_2[0]);

    Ce qui confirmes toujours mon problème , c'est peut-être un problème de concaténation pour le value non ? ou alors il ne veut absolument pas le tableau.

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    Ah oui, probleme de concaténation effectivement. Regarde cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<td align="center"><input type="radio" name="radio['.$row_1[0].']" " value="$row_2[0]" ><br>'.$row_2[1].'</input></td>'; //Réponse
    Pour $row_2[1], tu as bien concaténé en fermant les guillemets et en mettant un ., mais pour la value, tu l'as laissé à l'interieur des guillemets. Cela fonction pour les variables simples (genre $var) entre "...", mais pas pour les tableaux. Donc concatene bien les variables $row_2[
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<td align="center"><input type="radio" name="radio['.$row_1[0].']" value="'.$row_2[0].'" ><br />'.$row_2[1].'</input></td>'; //Réponse
    (jai juste rajouté des ' et des . pour concaténer correctement la variable dans l'attribut value) et ca devrait fonctionner.

  20. #20
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Ok parfait. Ca fonctionnes.

    Merci beaucoup et bonne continuation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Groupe de boutons radios
    Par owzzone dans le forum Langage
    Réponses: 1
    Dernier message: 04/04/2007, 17h23
  2. [Debutant] Fonction avec 2 groupe de Bouton Radio
    Par jazer dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/10/2006, 16h23
  3. Valeur d'un groupe de boutons radio non sélectionnés ??
    Par michaelbob dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/11/2005, 16h27
  4. [Débutant][Netbeans 4.1]Groupe de boutons RADIO
    Par Terminator dans le forum NetBeans
    Réponses: 1
    Dernier message: 12/09/2005, 16h22
  5. [JPanel] ajouter un groupe de boutons radio
    Par ummon99 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 25/04/2005, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo