Formulaire contenant des boutons radio

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Formulaire contenant des boutons radio

par BFH » 06 mai 2005, 09:39

J'ai trouvé la solution en fait. Mon problème c'était :
http://127.0.0.1/PHP/Rapport3.php? P0=1 &TR0=FAUX& P1=2 &nb_lignes=2&Submit=Afficher+le+Rapport
OU
http://127.0.0.1/PHP/Rapport3.php?P0=1&P1=2&TR1=FAUX&nb_lignes=2&Submit=Afficher+le+Rapport
Bref, quoi que je choisisse il y avait toujours X valeur de P transmisent (X étant le nombre de rapport disponibles à la selection! Cependant comme vous pouvez le constater a chaque fois je n'avais qu'un seul TR= donc avec le code
<TD width="3%" valign="center">&nbsp;</TD>
<TD align="center" valign="center"><font color="#0033CC" size="4">Rapport Détaillé </font><input type="radio" value="[b]VRAI<?=$row2['ID_R'];?>[/b]" name="TR<?=$i;?>"></font></TD>
<TD align="center"><font color="#0033CC" size="4">Rapport Minimal </font><input type="radio" value="[b]FAUX<?=$row2['ID_R'];?>[/b]" name="TR"></font></TD>
<TD width="5%">&nbsp;<p></TD>
Je transmet à la fois labonne valeur de TR c'est a dire VRAI ou FAUX mais aussi le bon ID_R :D

Que je suis content d'avir trouvé ça!

Grâce a vous bien sûr et en particulier grace a toi Cyrano!
Si tu m'avais pas dit de faire
<TD width="5%"><INPUT TYPE="hidden" VALUE="<?=$row2['ID_R'];?>" Name="P<?=$i?>"></TD> //Ce qui est important est ici ! 
    <TD align="center"><H3><font color="#0033CC">Rapport Détaillé </font> <input type="radio" value="VRAI" name="TR<?=$i?>"> </H3> </TD> 
    <TD align="center"><H3><font color="#0033CC">Rapport Minimal </font> <input type="radio" value="FAUX" name="TR<?=$i?>"> </H3> </TD> 
J'y serai encore =D> =D> =D> =D> =D> =D> =D>

par BFH » 05 mai 2005, 18:12

Ok merci pour vos bons conseils, je testerai cela demain et je vous dirais ce qui se passe.
Merci a vous

par Cyrano » 05 mai 2005, 08:17

Ok, alors tu gardes le système de nom de champ dynamique. Si j'ai bien compris, tu as des boutons radio mais aucun n'est coché par défaut, tu risques donc d'avoir des variables non initialisées.

Ensuite, tu veux séparer deux type de traitement. Donc tu dois faire un while.
À chaque tour de boucle while, tu reconstruis les variable avec un pointeur et tu testes l'existence d'une rorrespondance:

Code : Tout sélectionner

for($i = 0;$i <= $_POST['champ_x']; $i++) { /* champ_x doit être le nom d'un champ caché qui a compté les lignes du formulaire */ $bouton_radio_1 = "P".$i; if(isset($_POST['$bouton_radio_1'])) { if($_POST['bouton_radio_1'] = "telle_valeur") { traitement_untel(); } else { traitement_autre(); } } }
Je n'ai mis que le schéma, tu devras construire les noms de champs pour récupérer ce qui correspond, mais tu peux traiter individuellement chaque ligne en fonction de la case sélectionnée et si aucune ne l'a été, tu fais autre chose ou rien et on sort de la boucle pour passer au suivant.

par daoud » 05 mai 2005, 00:50

Salut,

voici une idée. Un groupe de bouton radio comme tu as fait et une valeur id qui te donne l'id et le type. A la réception du décode la chaine (avec un explode par exemple)
<TR>
    <TD align="right"  width="20%"><H2>Poste <?=$row2["RUser"];?> : </H2></TD>
    <TD align="center"><H3><font color="#0033CC">Rapport Détaillé </font> <input type="radio" value="<?php echo $row2['ID_R'] . "-D";?>" name="TR"> </H3> </TD>
    <TD align="center"><H3><font color="#0033CC">Rapport Minimal </font> <input type="radio" value="<?php echo $row2['ID_R'] . "-M";?>" name="TR"> </H3> </TD>             
</TR> 
ainsi $_GET['TR'] te fournira une valeur comme 1-D =>id 1 rapport détaillé.
ex :
$resultat = explode("-", $_GET['PHP']);
$id = $reslutat[0];
$type = $resultat[1];
j'espère avoir pu t'aider et ne pas être à côté de la plaque (il est tard!)

a+
daoud

par BFH » 04 mai 2005, 23:24

Bin oui mais mon problème c'est que je veux pas forcément récupérer la valeur du dernier champs, je voudrais recupérer la valeur du champs choisit mais je ne voit pas comment faire...
Tout est transmis :cry:

Il n'y aurait pas moyen de dire:
Si case cliquée alors $P='la valeur de $RUser qui correspond à la ligne choisit'
Sinon on oublie la valeur de $P

Enfin, si y a bien un moyen : je peux mettre la balise <form> dans le while(...) { ici } mais bon il y aurait alors un bouton valider à chaque ligne mais j'ai ps trop envie que ça soit comme ça...[/quote]

par Cyrano » 04 mai 2005, 16:51

Autre méthode pour nommer tes champs: au lieu de leur donner des noms dynamiques, nommes les en tableaux name=valeur[]
À l'arrivée, tu as des tableaus indexés et tu pioches dans la ligne de ton choix.

par Cyrano » 04 mai 2005, 16:49

BOn attends, une chose à la fois. Ce qu'on a fait là, c'est récupérer toutes les informations selon chaque ligne. Maintenant, il faut aujster le traitement en fonction de ce que tu récupères et en sachant que si tu as 250 lignes, tu auras 250 valeurs de P nommées successivement P0, P1, P2,....P249 et P250
Si tu ne veux garder que le dernier, alors récupères la valeur du champ caché et tu concatènes avec "P"<?=$_POST['nb_lignes']?> et tu auras ton résultat. Et même à la rigueur, tu supprimers la concaténation dans le champ de traitement pour la faire directement dans le champ caché du formulaire et tu n'auras que la valeur à récupérer

par BFH » 04 mai 2005, 16:41

merci Cyrano,
maintenant si je choisit le premier rapport (sur 2 possibles) en mode minimal, l'url est :
http://127.0.0.1/PHP/Rapport3.php?P0=1&TR0=FAUX&P1=2&nb_lignes=2&Submit=Afficher+le+Rapport
mais je comprends pas trop a quoi ça sert car j'ai toujours deux P de transmis :(
De plus si je choisis le deuxième rapport sur les deux possibles, toujours en version minimale j'obtiens :
http://127.0.0.1/PHP/Rapport3.php?P0=1&P1=2&TR1=FAUX&nb_lignes=2&Submit=Afficher+le+Rapport
Je vois pas comment recupérer la bonne valeur de P dans les deux cas. :(

par Cyrano » 04 mai 2005, 16:10

On va reprendre le premier formulaire que tu as envoyé:
<form method="get" action="Rapport3.php">
    <TABLE border="0" width="100%">
<?
    $i = 0;
    while($row2=mysql_fetch_assoc($result2))
        {        
            $date=$row2["RDateTime"];
            $annee=substr($date, 0, 4);
            $mois=substr($date, 5, 2);
            $jour=substr($date, 8, 2);
            $Ra=$row2['ID_R'];
?>            
<TR>
    <TD align="right"  width="20%"><H2>Poste <?=$row2["RUser"];?> : </H2></TD>
    <TD width="5%"><INPUT TYPE="hidden" VALUE="<?=$row2['ID_R'];?>" Name="P<?=$i?>"></TD> //Ce qui est important est ici !
    <TD align="center"><H3><font color="#0033CC">Rapport Détaillé </font> <input type="radio" value="VRAI" name="TR<?=$i?>"> </H3> </TD>
    <TD align="center"><H3><font color="#0033CC">Rapport Minimal </font> <input type="radio" value="FAUX" name="TR<?=$i?>"> </H3> </TD>
    <TD width="5%">&nbsp;</TD>
    <TD width="20%"><H2>Date : <font color="#0033CC"><?=$jour ."-". $mois ."-". $annee;?></font> </H2></TD>                        
</TR>
<?
        $i++
        }
?>
<TR>
    <TD colspan="6">&nbsp;</TD>
</TR>
<TR>
    <TD colspan="6"><HR></TD>
</TR>
<TR>
    <TD colspan="6"><input type="hidden" name="nb_lignes" value="<?=$i?>"></TD>
</TR>
<TR>
    <TD colspan="6"><CENTER><input type="submit" name="Submit" value="Afficher le Rapport">&nbsp;&nbsp;&nbsp;
            <input type="reset" name="reset" value="Effacer"> </CENTER></TD>
</TR>
</TABLE>
</form>
Regarde bien ce que jai fait : affiche ta page dans ton navigateur et affiche la source obtenue : regarde bien les valeur des attributs "name" des champs. Note aussi en fin de formulaire le champ caché qui contient le nombre de lignes traitées par le while.

par BFH » 04 mai 2005, 16:04

Désolé mais je ne comprends pas ce que tu m'as dit Cyrano. je doit faire comment :
<form method="get" action="Rapport3.php"> 
    <TABLE border="0" width="100%"> 
<? 
    $i=0;
    while($row2=mysql_fetch_assoc($result2)) 
        {         
            $date=$row2["RDateTime"]; 
            $annee=substr($date, 0, 4); 
            $mois=substr($date, 5, 2); 
            $jour=substr($date, 8, 2); 
            $Ra=$row2['ID_R']; 
?>             
<TR> 
    <TD align="right"  width="20%"><H2>Poste <?=$row2["RUser"];?> : </H2></TD> 
    <TD width="5%"><INPUT TYPE="hidden" VALUE="<?=$row2['ID_R'];?>" [b][size=150]Name="<?=$i;?>"[/size] [/b] ></TD>  
    <TD align="center"><H3><font color="#0033CC">Rapport Détaillé </font> <input type="radio" value="VRAI" name="TR"> </H3> </TD> 
    <TD align="center"><H3><font color="#0033CC">Rapport Minimal </font> <input type="radio" value="FAUX" name="TR"> </H3> </TD> 
    <TD width="5%">&nbsp;</TD> 
    <TD width="20%"><H2>Date : <font color="#0033CC"><?=$jour ."-". $mois ."-". $annee;?></font> </H2></TD>                         
</TR> 
<?
    $i++; 
        } 
?> 
ou autre chose ?

Enfin, deja : merci pour tout ![/u][/b]

par Cyrano » 04 mai 2005, 15:42

Je viens de fouiner un peu dans le code et je contate une chose : les attributs "name" des champs ne sont pas dynamiques : donc tu as X fois (dépendant du nombre de tour de boucle while) avec le même nom

Il faut utiliser une astuce

Initialise un pointeur avant ton while : $i = 0

Dynamise le nom de tes champs : attribut ="valeur<?=$i?>"

Ajoute un champ caché et mets dedans la valeur : value="<?=$i?>"

Au traitement, récupère la valeur de $i pour savoir combien tu as de traitements à effectuer et tu auras la bone valeur pour chaque tour

N'oublie pas d'incrémenter $i avant la fermeture de l'accolade du while : $i++

par BFH » 04 mai 2005, 14:57

Désolé mais ce n'est pas cela, le problème reste entier et la ligne qui est transmise est toujours la même :
Note: si je passe mon champs caché (hidden) en champs text, les bonnes valeurs de P sont contenu aux bons endroits. Donc le problème se fait dans la transmission (enfin je pense)

Personne connaitrais une formule pour recupérer le premier P transmis et oublier le second (car dans tout les cas j'en ait deux)

par slipndi » 04 mai 2005, 14:37

bon enfaite je viens de voir une ptite ereur va savoir si c'est cela qui merde :

<form method="get" action="Rapport3.php">
    <TABLE border="0" width="100%">
<?
    while($row2=mysql_fetch_assoc($result2))
        {        
            $date=$row2["RDateTime"];
            $annee=substr($date, 0, 4);
            $mois=substr($date, 5, 2);
            $jour=substr($date, 8, 2);
            $Ra=$row2['ID_R'];
?>            
<TR>
    <TD align="right"  width="20%"><H2>Poste <?=$row2["RUser"];?> : </H2></TD>
    <TD width="5%"><INPUT TYPE="hidden" VALUE="<?=$row2['ID_R'];?>" Name="P"></TD> //Ce qui est important est ici ! 
tu met $row2['ID_R']; dans $Ra donc utilise $Ra ! ca donnerai :
<form method="get" action="Rapport3.php">
    <TABLE border="0" width="100%">
<?
    while($row2=mysql_fetch_assoc($result2))
        {        
            $date=$row2["RDateTime"];
            $annee=substr($date, 0, 4);
            $mois=substr($date, 5, 2);
            $jour=substr($date, 8, 2);
            $Ra=$row2['ID_R'];
?>            
<TR>
    <TD align="right"  width="20%"><H2>Poste <?=$row2["RUser"];?> : </H2></TD>
    <TD width="5%"><INPUT TYPE="hidden" VALUE="<? echo($Ra);?>" Name="P"></TD> //Ce qui est important est ici ! 

par BFH » 04 mai 2005, 14:25

Je ne pense pas que ce soit un probléme de reception car voila ce qui est transmit dans le cas où j'ai une liste de 2 rapports.
Ici j'ai choisit le rapport détaillé de la personne n°1 or comme vous pouvez le constater j'ai :
P=1 &TR=FAUX& P=2 &Submit=Afficher+le+Rapport
Donc forcément après ça bug!

Je receptionne mes données avec un
if(isset($_GET['P']))
Comme on me l'as appris a faire sur ce forum

par seayoung » 04 mai 2005, 14:16

dsl un pe de retard sur mon post