Menu déroulant dynamique

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 : Menu déroulant dynamique

par Cyrano » 03 avr. 2007, 11:21

J'ajoute que j'ai envoyé une réponse à ton MP BelleIle, je ne pourrai pas dire grand chose de plus que ce que vient d'expliquer Truc.

Éventuellement, ce que tu pourrais faire, c'est ajouter un évènement dans la balise <select> de la seconde liste pour modifier la valeur de l'attribut action du formulaire de façon à ce que si tu as sélectionné une valeur, le clic sur le bouton d'envoi pointe vers une autre page. Mais cette formule pose des problèmes lors de la validation si d'autres données indépendantes des listes ne sont pas bonnes. il faut alors revenir vers la page du formulaire et tu risques de perdre les données déjà saisies.

C'est pour ça qu'il est plus pratique à mon sens de tourner sur la même page : On teste si des données ont été envoyées ou non et en fonction de ce qu'on trouve, on affiche telle ou telle partie éventuellement mise à jour ou encore on procède au traitement des données et si tout se passe bien, on affiche autre chose, un message indiquant le bon déroulement des opérations par exemple.

Regarde dans la FAQ un autre tuto sur la validation de formulaires complexes : il fonctionne selon ce principe.

par Truc » 03 avr. 2007, 10:20

On peut tourner en rond longtemps comme ça :?

Lors de la validation du formulaire sur clic du bouton "envoyer" tu récupères les données sur cette même page il suffit donc d'effectuer le traitement de ces données sur cette même page.
if( !empty($_POST['liste_1']) && !empty($_POST['liste_2']))
{
    // alors traitement du formulaire
}
else
{
   //affichage du formulaire
}

par BelleIle » 02 avr. 2007, 20:34

En fait le code est exposé plus haut... par Cyrano...

J'utilise le même code...

par Truc » 02 avr. 2007, 20:11

Tu devrais plutôt ouvrir un post et y exposer clairement ton souci avec du code. :wink:

Hélas

par BelleIle » 02 avr. 2007, 19:00

Hélas, je n'ai rien trouvé...

Par contre c'est assez normal, si je post sur la page en elle même, je ne peux pas envoyé la valeur des 2 champs pour mettre a jour ma fiche...

Je cherche un peu partout mais franchement je sais pas trop.

Je devrais peut être me rapprocher de Cyrano...

Merci d'avance en tout cas .

par Truc » 02 avr. 2007, 18:45

Depuis il y a peut être eu du changement dans la FAQ

Idem...

par BelleIle » 02 avr. 2007, 18:23

Ce bout de code est carrement bon et pratique !!!

Mais j'ai le même problème...

Maintenant, je n'arrive pas a envoyer les données grâce au formulaire
et le bouton envoyer.

En fait le formulaire tourne sur la mm page...

Franchement je séche... Comment contourner ce problème ?

Merci à l'auteur ! Il sera cité ^^ lol ^^

par Truc » 16 févr. 2006, 20:44

qu'entends tu par "poster" ?

afficher à l'écran les valeurs séléctionnées des listes ?

par tom_nameless » 16 févr. 2006, 17:41

non pas trop...

je souhaite poster les valeurs des deux listes dans une autre page à l'aide d'un bouton ou en auto après selection de la 2ème liste

:oops: suis-je clair ? :cry:

par Truc » 15 févr. 2006, 23:50

comme tout élément d'un formulaire.
$valeurs_liste_1 = isset($_POST['nom_liste_1']) ? $_POST['nom_liste_1']  : "";
$valeurs_liste_2 = isset($_POST['nom_liste_2']) ? $_POST['nom_liste_2']  : "";
explication ICI

si ce n'est pas ce que tu souhaites précise ta question :wink:

Javascript, AJAX

par tom_nameless » 15 févr. 2006, 11:47

Salut,

Merci pour le code des listes liées...

J'ai une petite question :

Comment poster les valeurs des deux listes dans une autre page ?

Merci pour votre aide..

par Maitrepylos » 04 juil. 2005, 10:46

Désolé, de réponder si tard, je n'ai pas d'accés Internet le W-K.

Pour alors pour mon problèmes de vaibles $_POST['Quelquechose'], cela fonctionne jusqu'a la partie de mon code qui termine les menus dynamique.
ensuite cela ne fonctionne pas.

De plus ce bout de code n'est qu'une partie de mon formulaires et je vousdrais passer à une feuilles suivantes, mais les $_POST[], ne passe pas.

Pour le select j'essaie de suite.

Voici ma première partie de formulaires.
<?php
session_start();
include('Base/pgConnect.php');


/********************************************************************************************************

partie concernant le participant

********************************************************************************************************/
?>
<form action="?section=NewInscription" method="POST" id="chgdept">
<?php
echo "<TABLE>";
echo "<H3><B>Participants : <HR></B> </H3>";


echo "
<TR>";

echo "<TD>Civilit&eacute; :</TD><BR>";
echo "<TD>";
	
echo "<SELECT name=\"Civilite\" size=\"1\">
		<OPTION selected value=\" \">";echo $_POST['Civilite']; echo "</OPTION>
		<OPTION value=\"Monsieur\">M</OPTION>
		<OPTION value=\"Madame\">Me</OPTION>
		<OPTION value=\"Mademoiselle\">Melle</OPTION>
		
				</SELECT>";
echo "</TD>";

echo "<TD>Nom : </TD>";
echo "<TD align=\"left\"><INPUT name=\"Nom\" size=\"12\" maxlenght=\"12\" type=\"text\"  value =\"";echo $_POST['Nom']; echo"\"> </TD>";





echo "<TD>Pr&eacute;nom : </TD>";
echo "<TD align=\"left\"><INPUT name=\"Prenom\" size=\"12\" maxlenght=\"12\" type=\"text\" value =\"";echo $_POST['Prenom']; echo"\"> </TD>";
echo"</TR>";

echo "<TR>";

echo "<TD>Rue : </TD>";
echo "<TD align=\"left\"><INPUT name=\"Rue\" size=\"12\" maxlenght=\"12\" type=\"text\" value =\"";echo $_POST['Rue']; echo"\"> </TD>";

echo "<TD>N&deg; : </TD>";
echo "<TD align=\"left\"><INPUT name=\"Numero\" size=\"3\" maxlenght=\"12\" type=\"text\" value =\"";echo $_POST['Numero']; echo"\"> </TD>";

echo "<TD>Bte : </TD>";
echo "<TD align=\"left\"><INPUT name=\"Bte\" size=\"3\" maxlenght=\"12\" type=\"text\"value =\"";echo $_POST['Bte']; echo"\"> </TD>";
echo "</TR>";
echo "</Table><Table><TR><TD>Localit&eacute;</TD><TD>";

/********************************************************************************************************

Bout de code pour le choix automatique de la commune etc...

********************************************************************************************************/

$idr = isset($_POST['Loc'])?$_POST['Loc']:null;


if($Connect != false)
{
{
    
    $sql1 = "SELECT DISTINCT localite, codeid FROM codepostal ORDER BY localite";
    $rech_regions = pg_query($sql1);
    $code_region = array();
    $region = array();
    /* On active un compteur pour les régions */
    $nb_regions = 0;
    if($rech_regions != false)
   
        while($ligne = pg_fetch_assoc($rech_regions))
        {
            array_push($code_region, $ligne['codeid']);
            array_push($region, $ligne['localite']);
            /* On incrémente de compteur */
            $nb_regions++;
        }
    }
    ?>


<select name="Loc" id="loc" onchange="document.forms['chgdept'].submit();">isset($_POST['Loc'])?$_POST['Loc']:null;
  <option value="-1">- - - Choisissez une localit&eacute; - - -</option>
    <?php
    for($i = 0; $i < $nb_regions; $i++)
    {
?>
  <option value="<?php echo($code_region[$i]); ?>"<?php echo((isset($idr) && $idr == $code_region[$i])?" selected=\"selected\"":null); ?>><?php echo($region[$i]); ?></option>
<?php
    }
    ?>
</select>
    <?php
    pg_free_result($rech_regions);
    /* On commence par vérifier si on a envoyé un numéro de région et le cas échant s'il est différent de -1 */
    
echo "</TD><TR>";
echo "<TR><TD>Commune</TD><TD>";
    if(isset($idr) && $idr != -1)
    {
        /* Cération de la requête pour avoir les départements de cette région */
        $sql2 = "SELECT DISTINCT codeid, commune FROM codepostal WHERE codeid = $idr ORDER BY codeid";
        if($Connect != false)
        {
            $rech_dept = pg_query($sql2);
            /* Un petit compteur pour les départements */
            $nd = 0;
            /* On crée deux tableaux pour les numéros et les noms des départements */
            $code_dept = array();
            $nom_dept = array();
            /* On va mettre les numéros et noms des départements dans les deux tableaux */
            while($ligne_dept = pg_fetch_assoc($rech_dept))
            {
                array_push($code_dept, $ligne_dept['codeid']);
                array_push($nom_dept, $ligne_dept['commune']);
                $nd++;
            }
            /* Maintenant on peut construire la liste déroulante */
            ?>
<select name="Commune" id="Commune">
            <?php
            for($d = 0; $d<$nd; $d++)
            {
                ?>
  <option value="<?php echo($code_dept[$d]); ?>"><?php echo($nom_dept[$d] ); ?></option>
                <?php
            }
?>
</select>
<?php
        }
        pg_free_result($rech_dept);
    }
?>
</TD><TD>Code Postal</TD><TD>
<?php
if(isset($idr) && $idr != -1)
    {
        /* Cération de la requête pour avoir les départements de cette région */
        $sql3 = "SELECT DISTINCT codeid, codepost FROM codepostal WHERE codeid = $idr ORDER BY codeid";
        if($Connect != false)
        {
            $rechLocalite= pg_query($sql3);
            /* Un petit compteur pour les départements */
            $nd = 0;
            /* On crée deux tableaux pour les numéros et les noms des départements */
            $codedept = array();
            $nomdept = array();
            /* On va mettre les numéros et noms des départements dans les deux tableaux */
            while($lignedept = pg_fetch_assoc($rechLocalite))
            {
                array_push($codedept, $lignedept['codeid']);
                array_push($nomdept, $lignedept['codepost']);
                $nd++;
            }
            /* Maintenant on peut construire la liste déroulante */
            ?>
<select name="CodePostal" id="CodePostal">
            <?php
            for($d = 0; $d<$nd; $d++)
            {
                ?>
  <option value="<?php echo($codedept[$d]); ?>"><?php echo($nomdept[$d]); ?></option>
                <?php
            }
?>
</select>
<?php
        }
        pg_free_result($rechLocalite);
    }
?>








<?php
echo "</form>"; 
echo "</TD></TR>";


//A partir d'ici les $_POST ne Passe plus
echo "<TR>";
echo "<TD>N&eacute;(e) &agrave; : </TD>";
echo "<TD align=\"left\"><INPUT name=\"LieuNaissance\" size=\"12\" maxlenght=\"12\" type=\"text\" value =\"";echo $_POST['LieuNaissance']; echo"\"> </TD>";

?>
........

</form>
<?php
}
else
{
    /* Si on arrive là, c'est pas bon signe, il faut vérifier les
    * paramètres de connexion, mot de passe, serveur pas démarré etc... */

echo "<p>Un incident s\'est produit lors de la connexion à la base de données, veuiillez essayer à nouveau ultérieurement.</p>";

}
echo "</TABLE>";

par Kicoe » 01 juil. 2005, 14:58

:agenouille: Cyrano, mon maaaaitre LOL

par Cyrano » 01 juil. 2005, 14:19

Si tu as plus d'un champ dans ta requête avec un DISTINCT, tu dois ajouter une clause GROUP BY, essaye avec :
$sql1 = "SELECT DISTINCT localite, codeid 
FROM codepostal 
GROUP BY codeid 
ORDER BY localite ";

par Maitrepylos » 01 juil. 2005, 14:12

Désolé , mais j'ai trouvé la réponse.

en fait si je fais ceci cela ne marche pas
echo "<TD align=\"left\"><INPUT name=\"Nom\" size=\"12\" maxlenght=\"12\" type=\"text\"  value =\"".echo $_POST['Nom']."\"> </TD>";
Mais ceci bien, allez comprendre!
echo "<TD align=\"left\"><INPUT name=\"Nom\" size=\"12\" maxlenght=\"12\" type=\"text\"  value =\"";echo $_POST['Nom']; echo"\"> </TD>";
Par contre je n'arrive pazs à utiliser al commande DISTINCT dans le select
$sql1 = "SELECT DISTINCT localite, codeid FROM codepostal ORDER BY localite ";