Page 1 sur 1

Pb de code formulaire, select

Posté : 07 janv. 2006, 10:04
par bobivienla
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>

Posté : 07 janv. 2006, 10:26
par Cyrano
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>";
    }
}

Posté : 07 janv. 2006, 10:50
par bobivienla
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>

Posté : 07 janv. 2006, 11:11
par Cyrano
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.

Posté : 07 janv. 2006, 11:27
par bobivienla
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

Posté : 07 janv. 2006, 11:45
par Cyrano
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.