Pb de code formulaire, select

Eléphanteau du PHP | 29 Messages

07 janv. 2006, 10:04

bonjour,

j'ai adapté ce tuto a ma bdd pour faire des listes déroulantes liées
http://www.aidejavascript.com/article15 ... sommaire_1

il ne m'affiche qu'une boite select avec 2 valeurs : $id_gam, $id_gam, directement le nom de variable, si quelqu'un peut me débloqué merci

<html>

<body>
<form action="test.php" method="post">
   <fieldset>
       <legend></legend>
       <?php
       
$dbhost="localhost";
$dblogin="xxxxxxxx";
$dbpassword="xxxxxxxxxxx";
$dbname="xxxxxxxxxxxxx";

mysql_connect($dbhost,$dblogin,$dbpassword);
mysql_select_db($dbname);

// Execution requête

$ma_req = "SELECT id_gam FROM gamme";
echo $ma_req;
$res_req = mysql_query ($ma_req);
$liste_gam = mysql_fetch_array($res_req);
       
// récupération des pays dans la BDD ou dans un fichier

// création de la liste des pays
$select1 = '<select name="id_gam" onchange="this.form.submit()">';
foreach ($liste_gam as $id_gam) {
   if (isset($_REQUEST["id_gam"]) && $_REQUEST["id_gam"])
       $select1 .= '<option value="$id_gam" selected="selected">$id_gam</option>';
   else $select1 .= '<option value="$id_gam">$id_gam</option>';
       }
$select1 .= '</select>';

// création de la liste des régions, si un pays a été sélectionné
if (isset($_REQUEST["id_gam"]) && $_REQUEST["id_gam"]) {
   // récupération des régions dans la BDD ou dans un fichier
   
$ma_req2 = "SELECT id_niveau1 FROM niveau1 WHERE id_gam = $id_gam";
$res_req2 = mysql_query ($ma_req2);
$liste_niveau1 = mysql_fetch_array($res_req2);
   
   if ($liste_niveau1) {
       // création de la liste des régions
       $select2 = '<select name="id_niveau1" onchange="this.form.submit()">';
       foreach ($liste_niveau1 as $id_niveau1) {
           if (isset($_REQUEST["id_niveau1"]) && $_REQUEST["id_niveau1"])
                $select2 .= '<option value="$id_niveau1" selected="selected">$id_niveau1</option>';
           else $select2 .= '<option value="$id_niveau1">$id_niveau1</option>';
       }
       $select2 .= '</select>';
   }
   else $select2 = '';
}
else $select2 = '';

// création de la liste des villes, si une région a été sélectionnée
if (isset($_REQUEST["id_niveau1"]) && $_REQUEST["id_niveau1"]) {
   // récupération des villes dans la BDD ou dans un fichier en fonction de la région
   $ma_req3 = "SELECT id_niveau2 FROM niveau2 WHERE id_id_niveau1 = $id_id_niveau1;";
$res_req3 = mysql_query ($ma_req3);
$liste_niveau1 = mysql_fetch_array($res_req3);
   
   
   
   $liste_villes = lireVilles($_REQUEST["region"]);
   // création de la liste des localités
   if ($liste_villes) {
       $select3 = '<select name="ville">';
       foreach ($liste_villes as $ville) {
           $select3 = '<option value="$ville"> ' . $ville . '</option>';
       }
       $select3 .= '</select>';
   }
   else $select3 = '';
}
else $select3 = '';
       
          echo $select1;
           echo $select2;
           echo $select3;
       ?>
   </fieldset>
</form>






</body>
</html>

Mammouth du PHP | 19672 Messages

07 janv. 2006, 10:26

Utilise des guillemets au lieu d'apostrophes :
$id_gam = "1234";
echo($id_gam); // affiche "1234"
echo("$id_gam"); // affiche "1234"
echo('$id_gam'); // affiche "$id_gam"
Donc ça donne par exemple ceci;
foreach ($liste_gam as $id_gam)
{
    if (isset($_REQUEST["id_gam"]) && $_REQUEST["id_gam"])
    {
        $select1 .= "<option value=\"". $id_gam ."\" selected=\"selected\">". $id_gam ."</option>";
    }
    else
    {
        $select1 .= "<option value=\"". $id_gam ."\">". $id_gam ."</option>";
    }
}
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 29 Messages

07 janv. 2006, 10:50

j'ai donc remplacer des apostrophes par des guillements, mais lorsque j'affiche la page, il n'y a que deux listes déroulantes avec les 2 memes valeurs dedans, lorsque je fai un choix sur la 1er liste, il m'affiche 3 listes : les 2 premieres sont vides et la 3eme avec les 2 memes valeurs dedans, c'est un peu le bordel

merci pour tes conseils

<html>

<body>
<form action="test.php" method="post">
   <fieldset>
       <legend></legend>
       <?php
       
$dbhost="localhost";
$dblogin="root";
$dbpassword="bz2cad";
$dbname="gammes";

mysql_connect($dbhost,$dblogin,$dbpassword);
mysql_select_db($dbname);

// Execution requête

$ma_req = "SELECT id_gam FROM gamme";
echo $ma_req;
$res_req = mysql_query ($ma_req);
$liste_gam = mysql_fetch_array($res_req);
       
// récupération des pays dans la BDD ou dans un fichier

// création de la liste des pays
$select1 = '<select name="id_gam" onchange="this.form.submit()">';
foreach ($liste_gam as $id_gam) {
   if (isset($_REQUEST["id_gam"]) && $_REQUEST["id_gam"])
       $select1 .= "option value=\"". $id_gam ."\" selected=\"selected\">" . $id_gam . "</option>";
   else $select1 .= "<option value=\"" . $id_gam . "\">" . $id_gam . "</option>";
       }
$select1 .= '</select>';
echo $select1;

// création de la liste des régions, si un pays a été sélectionné
if (isset($_REQUEST["id_gam"]) && $_REQUEST["id_gam"]) {
   // récupération des régions dans la BDD ou dans un fichier
   
$ma_req2 = "SELECT id_niveau1 FROM niveau1 WHERE id_gam = \"$id_gam\"";
$res_req2 = mysql_query ($ma_req2);
$liste_niveau1 = mysql_fetch_array($res_req2);
   
   if ($liste_niveau1) {
       // création de la liste des régions
       $select2 = '<select name="id_niveau1" onchange="this.form.submit()">';
       foreach ($liste_niveau1 as $id_niveau1) {
           if (isset($_REQUEST["id_niveau1"]) && $_REQUEST["id_niveau1"])
                $select2 .= "<option value=\"" . $id_niveau1 . "\" selected=\"selected\">" . $id_niveau1 . "</option>";
           else $select2 .= "<option value=\"" . $id_niveau1 . "\">" . $id_niveau1 . "</option>";
       }
       $select2 .= '</select>';
   }
   else $select2 = '';
}
else $select2 = '';

// création de la liste des villes, si une région a été sélectionnée
if (isset($_REQUEST["id_niveau1"]) && $_REQUEST["id_niveau1"]) {
   // récupération des villes dans la BDD ou dans un fichier en fonction de la région
   $ma_req3 = "SELECT id_niveau2 FROM niveau2 WHERE id_niveau1 =  \"$id_niveau1\"";
$res_req3 = mysql_query ($ma_req3);
$liste_niveau2 = mysql_fetch_array($res_req3);
   
  
   // création de la liste des localités
   if ($liste_niveau2) {
       $select3 = '<select name="id_niveau2">';
       foreach ($liste_niveau2 as $id_niveau2) {
           $select3 = "<option value=\"" . $id_niveau2 . "\">" . $id_niveau2 . "</option>";
       }
       $select3 .= '</select>';
   }
   else $select3 = '';
}
else $select3 = '';
       
          echo $select1;
           echo $select2;
           echo $select3;
       ?>
   </fieldset>
</form>






</body>
</html>

Mammouth du PHP | 19672 Messages

07 janv. 2006, 11:11

Soit attentif dans ton code, tu as des oublis:
$ma_req2 = "SELECT id_niveau1 FROM niveau1 WHERE id_gam = ". $id_gam .";";
Où est donc définie la valeur de $id_gam ? nulle part et il manque une ligne dans ton code.
if (isset($_REQUEST["id_gam"]) && $_REQUEST["id_gam"])
{
    $id_gam = $_REQUEST['id_gam'];
    // récupération des régions dans la BDD ou dans un fichier
    $ma_req2 = "SELECT id_niveau1 FROM niveau1 WHERE id_gam = ". $id_gam .";";
Là ça a plus de chances de fonctionner.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 29 Messages

07 janv. 2006, 11:27

dans la premiere liste il ne boucle pas, j'ai uniquement le 1er enregisrement de ma table, j'ai pourtant mon foreach , je ne comprend pas et lorque je fait mon choix, il me met ce message d'erreur :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/html/produits/test.php on line 46

Mammouth du PHP | 19672 Messages

07 janv. 2006, 11:45

Ton code comporte pas mal de fautes d'inattention... Corrige donc ceci par exemple:
// création de la liste des pays
$select1 = '<select name="id_gam" onchange="this.form.submit()">';
foreach ($liste_gam as $id_gam)
{
    if (isset($_REQUEST["id_gam"]) && $_REQUEST["id_gam"] == $id_gam)
    {
        $select1 .= "<option value=\"". $id_gam ."\" selected=\"selected\">" . $id_gam . "</option>";
    }
    else
    {
        $select1 .= "<option value=\"" . $id_gam . "\">" . $id_gam . "</option>";
    }
}
$select1 .= '</select>';
echo $select1;
Le message d'erreur que tu mentionnnes indique une très probable erreur dans la requête en question. Teste la requête directement dans phpMyAdmin.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: