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

Langage PHP Discussion :

bouton radio , valeur indicée


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut bouton radio , valeur indicée
    Bonsoir,

    Je n'arrive pas à récupérer le choix effectué à partir d'un bouton radio dans un form en boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form method="get" action="tocan_truiteR.php" >
    <? for ($j=1; $j<11; $j++)
    	{ ?> 
      	Tocan:	<INPUT type=radio name="$choix[$j]" value="tocan">
    .................
    pour l'utiliser sur la page action:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for ($j=1; $j<11; $j++)
    	{ 
    		$choix[$j]=$_GET['$choix[$j]'];
    		print("<p><img src='$imgligne[$j]' > Vous avez proposé '$choix[$j]' ");
     
    	 } ?>
    Merci pour votre aide
    alain

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Dans l'intitulé tu mets ceci : bouton radio , valeur indicée
    La solution est théoriquement là, mais ce n'est pas ce que fait le code.

    Dans le code la valeur est la même à chaque tour de boucle : tocan
    Puis c'est le nom de chaque groupe de bouton radio qui change (qui est indicé).
    Ce n'est pas correcte, et tu dois d'ailleurs t'apercevoir qui'il est impossible de faire 1 choix parmi les propositions.

    Pour rappel, un groupe de boutons radios à pour but de proposer 1 seul et unique choix à l'utilisateur parmi plusieurs propositions.
    Ca donne ceci par exemple : -> 1 seule valeur sera retournée (rouge ou vert ou orange)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input type="radio" name="couleur" value="rouge" />
    <input type="radio" name="couleur" value="vert" />
    <input type="radio" name="couleur" value="orange" />

    - Est-ce que tu as 1 seul groupe de boutons radios pour plusieurs choix ?
    1 seule et unique valeur sera à récupérer (pas besoin de boucle ici)

    - Ou alors est-ce que tu as plusieurs groupes de boutons radios différents qui ont leurs propres choix (plusieurs là aussi) ?
    Il y aura ici autant de valeurs à récupérer qu'il y aura de groupes de boutons radio. Ici une boucle peut être utile (pas forcément).


    Fait le point la dessus.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut
    Le form présente 10 images avec, pour chacune 2 boutons radio :truite ou tocan.
    Il va y avoir 10 choix (truite ou tocan) à traiter. Dans mon idée, le choix N°1, le choix N°2... J'ai donc indicé [$j] de 1 à 10... mais je ne récupère pas la valeur de choix[$j]
    (et l'ouverture de la pêche, c'est samedi )

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Je penses que tu n'as pas compris le principe de fonctionnement d'un groupe de boutons radios (à ne pas confondre avec celui d'un checkbox, ça n'a rien à voir).

    Il va y avoir 10 choix (truite ou tocan) à traiter. Dans mon idée, le choix N°1, le choix N°2... J'ai donc indicé [$j] de 1 à 10... mais je ne récupère pas la valeur de choix[$j]
    Ton code avait des erreurs, donc il demandait de faire des corrections selon les explications et exemples que je t'ai mis.
    Si, même en faisant des modifs tu n'obtiens pas ce que tu veux, alors faut re-poster le nouveau code qu'on voit où ça n'irait pas.

    Si tu ne modifie rien, alors le code ne va pas se corriger tout seul par le Saint esprit.

    Il n'y a pas à faire de boucle pour récupérer les 2 valeurs pour la simple raison qu'un groupe de bouton radio renvoie 1 seule et unique valeur.

    Donc si dans ton formulaire il y a 2 groupes de boutons radios, 2 valeurs seront renvoyées, et comme les noms des boutons sont connus à l'avance (truite, tocan), il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $truite = $_POST['truite']; // Vaut la valeur choisie parmi les truites
    $tocan = $_POST['tocan']; // Vaut la valeur choisie parmi les tocans
    Pour le code Html, admettons qu'on ait un tableau pour la listes de choix pour les truites et un autre tableau pour des tocans.
    Exemple :
    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
    <?php
    $truites = array('truite1', 'truite2', 'truite3');
    $tocans = array('tocan1', 'tocan2', 'tocan3');
     
    // Liste des truites
    echo 'Veuillez choisir 1 truite parmi cette liste de choix :<br />';
    for ($i = 0; $i < 2; $i++) {
        echo '<input type="radio" name="truite" value="'.$truites[$i].'" />'.$truites[$i].'<br />';
    }
     
    // Liste des tocans
    echo 'Veuillez choisir 1 tocan parmi cette liste de choix :<br />';
    for ($i = 0; $i < 2; $i++) {
        echo '<input type="radio" name="tocan" value="'.$tocans[$i].'" />'.$tocans[$i].'<br />';
    }
    ?>
    (pour récupérer les 2 choix (truite et tocan), c'est le code plus haut)

    Bref. Il faut que le nom (attribut name) soit identique (le même) pour tous les choix de chaque groupe de bouton radio, c'est la valeur qui change.
    Puis 1 seule valeur par groupe de bouton radio sera retournée.


    Fais des essais simples/basiques, sans boucles, etc ... pour comprendre comment ça fonctionne au besoin.


    Si dans ton fonctionnement il doit être possible 1 ou plusieurs choix parmi une liste, alors ce n'est pas des groupes de boutons radios qu'il faudrait, mais des checkbox.
    Ca dépend ce que tu souhaites faire.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut

    Très basique, ça marche :
    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
     
    ### page du form #######
    <form method="GET" action="trait.php" >
    Tocan:	<INPUT type=radio name="choix" value="tocan">
    Truite:	<INPUT type=radio name="choix" value="truite">
    <input type="submit" value="Envoyer">
     
    </form>
    ______________________________________________________
    ### page 'trait.php'#####
     
    <?php
    $choix=$_GET['choix'];
    		print("<p> Vous avez proposé '$choix' ");
    ?>
    _____________________________________________________
     
    Mais comme j'affiche 10 images avec pour chacune le  choix entre truite et tocan,  je mets une boucle dans le form 
     
    <form method="GET" action="trait.php" >
         for ($j =1;$j<11;$j++) {
           ( affichage image, et récup des données ça marche)
           Tocan:<INPUT type=radio name="choix" value="tocan">
           Truite:	<INPUT type=radio name="choix" value="truite">
         }
    <input type="submit" value="Envoyer">
     
    </form>
    Donc, pour chaque image "choix" prendra la valeur "truite" ou "tocan", ça fait dix groupes de deux boutons, groupes dont Il faut changer le nom pour chaque image. et je pensais utiliser choix[$j] pour image[$j] afin de récupérer la valeur avec $_GET[$choix[$j]]...

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Donc, pour chaque image "choix" prendra la valeur "truite" ou "tocan", ça fait dix groupes de deux boutons, groupes dont Il faut changer le nom pour chaque image. et je pensais utiliser choix[$j] pour image[$j] afin de récupérer la valeur avec $_GET[$choix[$j]]...
    Alors ça donnerait quelque chose comme ça, si j'ai bien compris.
    En 1er il y a une liste de 10 poissons différents où un choix doit être fait si c'est une truite ou un tocan.

    Admettons un tableau avec 10 valeurs (10 poissons différents).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $liste_poissons = array('poisson1', 'poisson2', 'poisson3', 'poisson4', 'poisson5', 'poisson6', 'poisson7', 'poisson8', 'poisson9', 'poisson10');
     
    // Liste des poissons
    foreach ($liste_poissons as $poisson) {
        echo 'Veuillez faire un choix pour ce poisson '.$poisson.' :<br />';
        echo '<input type="radio" name="poissons['.$poisson.']" value="truite" />Truite<br />';
        echo '<input type="radio" name="poissons['.$poisson.']" value="tocan" />Tocan<br />';
    }
    ?>
    Il suffit de faire une boucle sur l'élément "poissons" pour obtenir les 10 choix effectués : (truite ou tocan)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    if (isset($_POST['poissons'])) {
        foreach ($_POST['poissons'] as $key => $poisson) {
            $liste_poissons[$key] = $poisson; // Valeur : truite ou tocan
        }
    }
    ?>
    (une boucle foreach est souvent plus pratique que for)
    Chaque clé (ou indice) de $liste_poissons est le nom du poisson (poisson1, poisson2, etc ...), et la valeur truite ou tocan.
    (c'est la même structure que les groupes de boutons radios).

    A chaque image (donc pour 1 image) il y a à chaque fois 1 choix à faire parmi 2 propositions : truite ou tocan.
    Concrètement :
    1 image -> 2 choix
    ... etc pour les 10 ...

    Tout dépend ce que tu souhaite faire comme présentation, faut juste éviter de provoquer une erreur à cause de ça.
    Les images sont plus quelque chose d'accessoires que quelque chose de fonctionnel.
    Disons il faut éviter que les noms des poissons soient trop "exotiques" (caractère spéciaux, comme des espaces, ", ', <, >, etc ...), sinon faudra faire un peu différemment.


    J'espère ne pas faire d'erreurs (pas testé), et surtout compris.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut
    Bonsoir et merci.
    J'ai récupéré tes deux bouts de code, complété le 1er en mettant la boucle dans un form appelant le 2e et terminé par un submit...
    j'ai bien l'affichage des questions mais pas la liste des réponses..
    J'ai mis en ligne ma première page ici :
    http://basaburua.fr/tocan_truiteQ.php
    mais c'est la 2ème qui bloque: je veux afficher à nouveau les images, mais en remplaçant les boutons par "Vous avez dit Tocan, c'est une bonne réponse"
    Ça marcherait si j'arrivais à récupérer la valeur de *choix* pour chaque question !
    Je te repasse le form qui envoie (théoriquement) les données vers la page Traitement/Reponse , avec ce de $choix[$j] qui ne passe pas

    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
    <FORM method="get" action="tocan_truiteR.php" >
     
    	<? for ($j=1; $j<11; $j++)
    	{ ?>
    		<p><img src='<?= $imgligne[$j] ?>' alt='<?=$comligne[$j] ?>' title='<?=$comligne[$j] ?>'  height="250" align="left" hspace="30"/><br /><br 	/><br /><br /><br 		/>Tocan: 
      		<INPUT type=radio name="$choix[$j]" value="tocan">
     
    		<br /><br />
     
    		<p>Truite : 
    		<INPUT type=radio name="$choix[$j]" value="truite">
     
    		<br /><br />
    		<br clear="all" /> 
    	<? } ?>
     
    	<br />...............................................................   <input type="submit" name ="submit" value="Valider" />
    	</p>
    	</FORM>
    (chaque image est accompagnée de commentaires et de la bonne réponse, dans un fichier texte d'une quinzaine pour l'instant, les dix sont sélectionnées par un tirage aléatoire )

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Je ne vois pas vraiment pourquoi tu tiens tant à utiliser une boucle for alors qu'un foreach est bien plus pratique.
    Enfin si, je vois quand même car tu as opté pour la création de 3 tableaux $imgligne, $comligne et $choix, mais ce n'est pas pratique ni logique à mon sens, 1 seul tableau devrait/serait mieux, ils sont tous en total rapports.

    Tous ces éléments là sont des poissons, c'est loin d'être un détail.
    Créer un tableau $poissons qui stockera les variétés, les noms et les choix permettrait de simplifier le tout.
    Exemple :
    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
    <?php
    $poissons[] = array(
        'choix' => 'Fnad2',
        'reponse' => 'tocan',
        'titre' => 'Nageoire adipeuse rougeâtre',
        'commentaire' => 'Un commentaire ... etc ...',
        'img' => 'images/Fnad2.jpg'
    );
     
    $poissons[] = array(
        'choix' => 'Fnc1',
        'reponse' => 'truite',
        'titre' => 'Nageoire caudale peu concave',
        'commentaire' => 'Un commentaire ... etc ...',
        'img' => 'images/Fnc1.jpg'
    );
    // ... etc ...
    ?>
    Une simple boucle foreach() suffira pour lister le tout.
    C'est juste une suggestion.


    Il te faut avoir le réflexe de regarder le code source HTML généré, car rien qu'en faisant cela on voit immédiatement le problème.
    Le code source (le code HTML) contient ceci :
    <INPUT type=radio name="$choix[$j]" value="tocan">
    Donc $choix[$j] n'a pas été interprété en Php coté serveur.
    Normal il manque les balises <?php ?>.


    Aussi, tu n'as jamais dit ce que contient ce tableau $choix, donc sous réserve.
    Mais le fait de mettre $choix comme base de nom suppose que le nom va changer à chaque tour de boucle.
    Or, si tu reprends mes explications, ce n'est pas pratique.
    Dans l'exemple que j'avais mis j'utilisais poissons[] pour justement permettre de faire une boucle sur 1 seul élément (un tableau) qui lui va contenir plusieurs éléments (les 10 différents poissons).

    Dans ton cas, (donc tout dépend ce que contient $choix), il faudrait faire comme ceci :
    (je mets juste les 2 input)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <INPUT type=radio name="poissons[<?php echo $choix[$j]; ?>]" value="tocan">
    <INPUT type=radio name="poissons[<?php echo $choix[$j]; ?>]" value="tocan">
    Du fait de mettre 1 seul tableau permettra de boucler lors de la récupération (le nom étant le même, donc connu à l'avance).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    if (isset($_POST['poissons'])) {
        foreach ($_POST['poissons'] as $key => $poisson) {
            // Ici on bouclera sur les 10 poissons
        }
    }
    ?>

    Pour vérifier se que tu reçois après validation, fais un print_r() ou var_dump().
    Là aussi en faisant cela tu aurais vu le problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    print_r($POST);
    // Ou
    print_r($_GET);
    Aussi, et comme je l'avais suggéré bien avant, fais des essais simples/basiques et sans boucles pour en 1er avoir quelque chose de fonctionnel, pas besoin d'en mettre 10, 2 ou 3 suffit.
    Tout cela histoire de comprendre.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <form method="get" action="tocan_truiteR.php" >
        <p>
            <INPUT type=radio name="poissons[Fnad2]" value="tocan" />Tocan<br />
            <INPUT type=radio name="poissons[Fnad2]" value="truite" />Truite<br />
        </p>
        <p>
            <INPUT type=radio name="poissons[Fnc1]" value="tocan" />Tocan<br />
            <INPUT type=radio name="poissons[Fnc1]" value="truite" />Truite<br />
        </p>
    </form>
    En somme, il faut d'abord savoir comment structurer le code HTML avant de faire cela de manière "dynamique" en Php (pas l'inverse).
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut
    Merci pour ta réponse... et ta patience ! J'imprime et je potasse car il va me falloir du temps pour digérer tout ça !
    ... mais je reviendrai

    Bonne journée
    alain

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut
    Je ne pensais pas revenir si vite mais, malgré pas mal d'essais, je plante pour récupérer le contenu de plusieurs tableaux avec le foreach ! (ça marche pour un seul mais $poissons[] est refusé )
    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
    $poissons[1]=array(
    	'choix'=>'Fna2',
    	'reponse'=> 'tocan',
    	'titre'=>'Nageoire anale bordée de blanc',
    	'img'=> 'images/Fna2.jpg'
    	);
    $poissons[2]=array(
    	'choix'=>'Fnc1',
    	'reponse'=> 'truite',
    	'titre'=>'Nageoire caudale peu concave',
    	'img'=> 'images/Fnc1.jpg'
    	);
    foreach ($poissons[] as $cle1=>$valeur1) 
    	{echo "tableau1:".$cle1."<br> " ;
    		foreach ($valeur1 as $cle2=>$valeur2)
    		{echo "Clé : ".$cle2 .", Valeur: " . $valeur2 . "<br />\n";
    		}
    	}

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($poissons as $cle1=>$valeur1)
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  12. #12
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par Bovino
    foreach ($poissons as $cle1=>$valeur1)
    Exacte
    Il ne faut pas confondre la boucle qui se fait sur le tableau $poissons créé dans la page du formulaire et la boucle qui se fera sur $_POST['poissons'] pour récupérer les données une fois saisis.

    Ceci dit, tu vas estimer que j'insiste de trop, mais je ne vois toujours pas pourquoi tu t'obtines à créer cette boucle alors qu'à ce stade rien n'a encore été totalement défini du comment structurer ces données là (les choix).
    La raison c'est que tu ne post toujours pas ce qhe contient ce tableau $choix.
    Ce que j'ai mis est purement un exemple, juste histoire de démontrer comment ça fonctionne.


    As tu essayé le code 100% en HTML que j'ai mis précédemment, soit tel quel ou alors en l'adaptant avec tes propres données réelles ?
    As tu fais un print_($_POST) ? Que renvoie t-il ?



    Par ailleurs, je remarques que tu indice ce tableau $poissons avec 1, 2, 3, etc ...
    Admettons que ces indices correspondent aux identifiants de ces poissons dans une Base De Données, genre table "poissons" avec un champ "id".
    Et bien on peu directement mettre cet identifiant comme nom pour chaque choix.
    En pure HTML ça donnerait ceci : (j'y mets juste les boutons radios)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <form method="get" action="tocan_truiteR.php" >
        <p>
            <INPUT type=radio name="poissons[1]" value="tocan" />Tocan<br />
            <INPUT type=radio name="poissons[1]" value="truite" />Truite<br />
        </p>
        <p>
            <INPUT type=radio name="poissons[2]" value="tocan" />Tocan<br />
            <INPUT type=radio name="poissons[2]" value="truite" />Truite<br />
        </p>
        ... etc ...
    </form>
    La même chose mais avec une boucle foreach() ça donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <form method="get" action="tocan_truiteR.php" >
    <?php
    foreach ($poissons as $id => $val_poisson) {
    ?>
        <p>
            <INPUT type=radio name="poissons[<?php echo (int)$id; ?>]" value="tocan" />Tocan<br />
            <INPUT type=radio name="poissons[<?php echo (int)$id; ?>]" value="truite" />Truite<br />
        </p>
    <?php
    }
    ?>
    </form>
    Et à la récupération, un aspect qui n'a d'ailleurs pas été évoqué, c'est la vérification des données reçues, c'est à dire de se garantir que les données reçues en POST (ou GET peu importe) correspondent bien aux poissons qu'on auraient dans la Bdd (ou autre support, peu importe).
    Cela suppose donc d'avoir le même tableau $poissons qui a servi à créer le formulaire pour vérifier cela, cela suppose de les récupérer au préalable.

    Par conséquent (et par exemple), on peu faire en 1er une boucle sur le tableau $poissons pour après vérifier s'il est présent dans le tableau $_POST.
    Exemple :
    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
    <?php
    if (isset($_POST['poissons'])) {
        // On récupère ici les poissons et on les stock dans $poissons
        // On boucle sur $poissons
        foreach ($poissons as $id => $val_poisson) {
            // On vérifie l'existance de la variété du poisson (de son identifiant)
            if (isset($_POST['poissons'][$id]) && in_array($_POST['poissons'][$id])) {
                // On stock les différents choix effectués
                // Clé : identifiant
                // Valeur : tocan ou truite
                $poissons_choix[$id] = $val_poisson;
            }
            else {
                // Erreur : Ce poisson n'existe pas dans la Bdd
            }
        }
    }
    ?>
    (code pas testé, donc en espérant ne pas faire d'erreurs)
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut
    Pressé par le temps, j'ai bidouillé un code horrible sans boucle (tu vas être content) mais sans tableau (ne dis rien !) simplement en répétant les lignes de code en indiçant les variables à la main .
    Vu superficiellement, ça marche... évidemment, si on a accès au code, on voit la technique de l'auteur
    http://basaburua.fr/tocan_truiteQ.php
    15 images sont dans un fichier texte, chacune avec un 'title' et la bonne réponse. Une bidouille avec random pour faire un tirage "aléatoire" qui fonctionnera mieux lorsque j'aurai d'autres photos (facile d'ajouter au fichier texte avec le bloc notes).
    Je vais étudier ce que tu m'as passé, mais j'avoue que j'ai beaucoup de mal (aussi) à raisonner avec les tableaux. Des vieux réflexes datant du GW Basic sans doute ... et bien émoussés en plus
    merci encore et bonne soirée.
    Alain

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut
    J'essaie de mettre tes conseils en pratique:
    J'ai bricolé un bout de code pour récupérer dans un tableau les enregistrements tirés de mon fichier texte.
    Ça, ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $poissons[]=array(
    			'img'=> $imgligne[$i],
    			'titre'=>$comligne[$i],
    			'breponse'=> $bonrligne[$i]
    		);
    Je réussis à lire l'ensemble
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach ($poissons as $cle1=>$valeur1) 
    	{echo "tableau:".$cle1."<br> " ;
    		foreach ($valeur1 as $cle2=>$valeur2)
    		{echo "Clé : ".$cle2 .", Valeur: " . $valeur2 . "<br />\n";
    ######## img src="????";
    		}
    	}
    Mais je bataille vainement pour créer le form qui posera les dix questions en utilisant le foreach :
    1- comment récupérer le nom de chaque image par exemple, pour img src ="...." ? J'erre lamentablement parmi les clés et j'obtiens tout sauf le nom de mes images
    2- dans le tableau, il n'y a pas le name de l'input radio : choix (du joueur). Comment ce choix va-t-il s'intégrer au tableau pour être récupéré sur la page de traitement ?

  15. #15
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 386
    Points : 10 413
    Points
    10 413
    Par défaut
    Citation Envoyé par jarailet Voir le message
    Mais je bataille vainement pour créer le form qui posera les dix questions en utilisant le foreach ...

    Il faut toujours commencer par le html que tu veux obtenir... toujours.
    Ensuite et ensuite seulement tu automatise pour que php génère ce code html. Refais ce fonctionnement pas à pas sinon il te sera difficile de comprendre.

    A noter que pour bien visualiser tes tableauxx php lors du développement tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<pre>';
    if(isset($poissons)) print_r($poissons);
    echo '</pre>';

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Points : 30
    Points
    30
    Par défaut
    J'avais déjà fait ce form en html... mais en nommant chaque élément différemment : image1, image2... reponse1, reponse2... ce qui marchait(et marche encore) mais faisait un fichier énorme.
    Ensuite, j'avais réussi à utiliser une boucle ça allait aussi, sauf pour la récup de la valeur du bouton radio.
    Comme me l'a conseillé "RunCodePHP", je tente d'utiliser des tableaux pour éviter la boucle "for..."
    J'en suis donc à la récup séparée des données stockées dans le array... et la pêche est moyenne !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    foreach ($poissons as $cle1=>$valeur1) 
    	{echo "tableau1:".$cle1."<br> " ;
    		foreach ($valeur1 as $cle2=>$valeur2)
    		{echo "Clé : ".$cle2 .", Valeur: " . $valeur2. "<br />\n";
    			foreach ($valeur2 as $cle3=>$valeur3)
    			{echo "Clé : ".$cle3.", Valeur: ".$valeur3." <br /\n";
    			}
    		}
    	}
    produit presque ce que je veux, mais avec des erreurs...
    tableau1:0
    Clé : choix, Valeur: Fna2

    ( ! ) Warning: Invalid argument supplied for foreach() in C:\wamp\www\Essais\developpezQ.php on line 26
    Call Stack
    # Time Memory Function Location
    1 0.0007 369440 {main}( ) ..\developpezQ.php:0
    Clé : reponse, Valeur: tocan

    ( ! ) Warning: Invalid argument supplied for foreach() in C:\wamp\www\Essais\developpezQ.php on line 26
    Call Stack
    # Time Memory Function Location
    1 0.0007 369440 {main}( ) ..\developpezQ.php:0
    Clé : titre, Valeur: Nageoire anale bordée de blanc
    Ai-je raison de faire un troisième foreach ? ou y a-t-il une syntaxe qui permettrait de récupérer par exemple la valeur de img dans le tableau1 ?
    Merci
    alain

  17. #17
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    comment récupérer le nom de chaque image par exemple, pour img src ="...." ? J'erre lamentablement parmi les clés et j'obtiens tout sauf le nom de mes images
    Les images (dans la balise <img src="une_image" />) ne sont pas renvoyées, même si elles se trouvent dans le formulaire.
    Puis normalement on s'en fiche pas mal, il n'y a pas a les renvoyer, ces images sont là uniquement pour la compréhension, voir à quoi correspond chaque poissons.

    Chaque image est théoriquement liée à chaque poisson, elles sont là encore théoriquement répertoriées/enregistrées quelques part (idéalement une Bdd, pourquoi pas un fichier).
    Il est bon de lier chaque poisson à 1 identifiant unique afin de faire référence.
    Je dirais que c'est la base (le BABA j'entends) pour faire quelque chose de cohérent et plus ou moins "automatisable".


    Il y a 2 points qui à mon sens te poses problème :
    - Une spécificité coté HTML, cette façon là de nommer un élément de formaulaire (text, radio, etc ...) : poissons[1], poissons[2]
    - Et les tableaux Php (à 1 et plusieurs dimensions), leur fonctionnement (clés/valeur)


    Cette façon là : poissons[1]
    permet d'obtenir un tableau à 2 dimensions dans le tableau $_POST (ou $_GET, peu importe) une fois le formulaire validé.
    - Si on prend un exemple simple, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="radio" name="poissons" value="un_poisson" />
    On va obtenir dans le tableau $_POST ceci : $_POST['poissons'], et comme valeur -> un_poisson
    Ca veut dire que $_POST contiendra 1 seul élément poissons, 1 dimension.
    poisson est la clé, et cette clé prend comme valeur le nom de l'attribut "name" du bouton radio.
    La valeur de cet élément "poisson" sera "un_poisson", la valeur dans l'attribut "value".

    - Maintenant concernant (en quelque sorte) notre cas particulier : poissons[1]
    On va obtenir dans $_POST ceci : $_POST['poissons'][1] et $_POST['poissons'][1], etc ..., et comme valeur -> tocan ou truite (ça dépend lequel des 2 l'utilisateur aura coché).
    On obtient un tableau à 2 dimensions.
    La 1ère dimension est l'élément "poissons", la 1ère dimension.
    Cependant, la valeur de "poissons" est (aussi) un tableau, cette valeur (1, 2, 3, etc ...) est la 2ème dimension.
    Cette 2ème dimension contient plusieurs valeurs : 1, 2, 3, etc ... le nombre de poissons (le nombre de groupe de boutons radios.


    Tu peux le vérifier en faisant un print_r($_POST) dans la partie de code/traitements lorsque le formulaire est validé.

    Là aussi il n'est obligé de faire des boucles pour voir (faire des essais) comment récupérer ces données des boutons radios, pour voir comment accéder aux tableau $_POST pour un tableau à 2 dimensions.
    (De manière "manuelle", si on peu dire).
    Vu qu'il y a 2 dimensions, on peu faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Si l'élément "poisson" existe (1ère dimension)
    if (isset($_POST['poisssons'])) {
        // Si le poisson d'indice (ou clé) 1 existe de la 2ème dimension :
        if (isset($_POST['poisssons'][1])) {
            echo 'Poisson 1 : '.$_POST['poisssons'][1]; // valeur : tocan ou truite
        }
     
        // Si le poisson d'indice (ou clé) 2 existe de la 2ème dimension :
        if (isset($_POST['poisssons'][2])) {
            echo 'Poisson 2 : '.$_POST['poisssons'][2]; // valeur : tocan ou truite
        }
     
        // ... etc pour 3, 4 selon les valeurs des clés existantes ...
    }
    Si tu regarde bien, la structure obtenue est finalement la même que celle générée dans la partie HTML de l'étape précédente (les radios).
    C'est à dire ceci : poisssons[1], poisssons[2], etc ...


    Pour automatiser la récupération, donc en faisant une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Si l'élément "poisson" existe (1ère dimension)
    if (isset($_POST['poisssons'])) {
        // On boucle sur la 1ère dimension : l'élément "poissons"
        foreach ($_POST['poisssons'] as $indice => $poisson) {
            // Liste de tous les poissons contenus dans la 1ère dimension
            echo 'Poisson : '.$indice.' | '.$poisson.'<br />';
            // Affiche : Poisson : 1 | tocan ou truite
        }
    }
    Ici, il n'y a pas lieu de faire je ne sais combien de boucles pour obtenir les données renvoyées dans $_POST

    Aussi, ne fais pas d'amalgame entre le tableau qui contient la liste des poissons existant (Bdd ou autre) et les poissons obtenus dans $_POST.

    Faut éviter par exemple d'utiliser le même nom comme $poissons, sinon l'un va "écraser" l'autre.
    Tu peux créer un tableau $poissons pour stocker les poissons existants (Bdd ou autre) et exploiter directement $_POST pour y accéder, voir pourquoi pas les stocker dans un nouveau tableau $poissons_choix dans la boucle.
    (j'ai déjà donné un exemple au tout début du topic avec $liste_poissons).


    Fais des essais "manuels, sans boucle en 1er, c'est le BABA pour comprendre comment cela fonctionne, c'est essentiel de comprendre ça.
    (ce n'est pas si compliqué que ça, c'est logique, faut juste éviter de ce faire "un film").
    Si c'est les tableaux Php qui te fais défaut (1, 2, 3, voir 4 dimensions (plutôt rare)), fais des éxos.
    Création de tableau -> parcourt des tableaux en manuel et auto/boucles.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Discussions similaires

  1. recupérer la valeur d'un bouton radio
    Par ericmart dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 19/05/2008, 15h42
  2. Bouton radio : valeur affichée != valeur interprétée
    Par untitled96 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/08/2007, 16h54
  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. Bouton radio : récupérer la valeur du bouton avec selectedIn
    Par djodjo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/08/2005, 12h07
  5. [JSP] passer en parametre valeur d un bouton radio
    Par logica dans le forum Servlets/JSP
    Réponses: 19
    Dernier message: 13/05/2005, 14h09

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