Page 1 sur 1

récup. variable double liste déroulante

Posté : 26 sept. 2006, 13:56
par luc2590
Bonjour,
est-ce qq pourrait m'aider car je craque...

Voilà, pour que l'on puisse insérer des annonces dans un site d'annonce, j'ai un formulaire avec une première liste déroulante (Marque) faite en PHP et MYSQL, qui, si on sélectionne une marque, ouvre une autre liste déroulante (Modele).
Jusque là , tout va.
A ces listes correspondent des tables MYSQL : marques(idmarque, nommarque) et modeles(idmodele, idmarque, modele) et une table annonce(idannonce, nommarque, modele, ...) .
Or, j'arrive bien à insérer des annonces dans ma table annonce via le formulaire, mais sans le champ nommarque.
En effet, je n'arrive pas à récupérer la variable nommarque et l'envoyer dans la base.

Voici le code:

Code : Tout sélectionner

<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgmarque"> <fieldset> <legend>Votre annonce:</legend> <label>Marque:</label> <select name="idmarque" id="idmarque" onchange="document.forms['chgmarque'].submit();"> <option value="">Choississez une marque</option> <?php for($i=0; $i<$nb_marque; $i++) { ?> <option value=" <?php echo($idmarque[$i]) ; ?>" <?php echo((isset($idr) && $idr==$idmarque[$i])?" selected=\"selected\" ":null); ?> > <?php echo($nommarque[$i]); ?> </option> <?php } ?> </select><br />
tentative avec "explode" dans "option value " (sans résultat) :


Code : Tout sélectionner

<?php for($i=0; $i<$nb_marque; $i++) { $t=$idmarque[$i] ."-" . $nommarque[$i]; ?> <option value="<?php $tab=explode("-", $t); echo $t,"<br>"; print_r($tab); ?>">



Pour la deuxieme liste déroulante:

Code : Tout sélectionner

<?php //echo 'post<pre>' ;print_r($_POST) ;echo'</pre>'; //choix Modeles: mysql_free_result($rech_marque); if(isset($idr) && $idr !=-1) { $sql2="SELECT idmodele, modele FROM modeles WHERE idmarque=$idr ORDER BY idmodele"; { $rech_modele=mysql_query($sql2); $nd=0; $idmodele=array(); $modele=array(); while($ligne_modele=mysql_fetch_assoc($rech_modele)) { array_push($idmodele, $ligne_modele['idmodele']); array_push($modele, $ligne_modele['modele']); $nd++; } ?> <label>Modele</label> <select name="modele" id="modele"> <?php for($d=0; $d<$nd; $d++) { ?> <option value="<?php echo($modele[$d]); ?>"> <?php echo($modele[$d]); ?> </option> <?php } ?> </select> <?php } mysql_free_result($rech_modele); } ?> <?php $nommarque[$i] = isset($_POST['nommarque[$i]']) ? $_POST['nommarque[$i]'] : ""; $modele[$d] = isset($_POST['modele[$d]']) ? $_POST['modele[$d]'] : ""; echo 'post<pre>' ;print_r($_POST) ;echo'</pre>'; ?> </fieldset>
[/code]

Posté : 26 sept. 2006, 15:30
par ouckileou
Déjà, est-ce que le code du formulaire généré te semble correct et correspond à ce que tu attends ?

Au passage, ilfaudrait utiliser les balises
 plutôt que [code] pour encadrer du code PHP
Tu peux éditer ton message pour les changer

Posté : 26 sept. 2006, 21:08
par luc2590
D'abord, merci de ton intérêt

Ensuite, voici le code en PHP
Je ne savais pas comment faire pour y mettre la présentation

Oui, le code me semble correct dans le sens où il me permet d'avoir un formulaire avec une première liste déroulante et une deuxième en découlant.
Il permet également d'envoyer dans la base les nouveaux enregistrements, mais incomplètement puisque je n'arrive pas à récupérer la variable nommarque ; nommarque ne se retrouve donc pas dans la base!
Là est mon problème

<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgmarque"> 
          
            <fieldset> 
               <legend>Votre annonce:</legend> 
                  <label>Marque:</label> 
                  <select name="idmarque" id="idmarque" 
                     onchange="document.forms['chgmarque'].submit();"> 
                     <option value="">Choississez une marque</option> 
                      
         <?php 
         for($i=0; $i<$nb_marque; $i++) 
         { 
         ?> 
         <option value=" <?php echo($idmarque[$i]) ; ?>" 
         <?php 
         echo((isset($idr) && $idr==$idmarque[$i])?" selected=\"selected\" ":null); 
         ?> > 
         <?php echo($nommarque[$i]); ?> 
            </option> 
         <?php 
         } 
         ?> 
          
            </select><br /> 
 





tentative avec "explode" dans "option value " (sans résultat) :


<?php 
         for($i=0; $i<$nb_marque; $i++) 
         { 
         $t=$idmarque[$i] ."-" . $nommarque[$i]; 
         ?> 
         <option value="<?php 
          
          
   $tab=explode("-", $t); 
   echo $t,"<br>"; 
   print_r($tab); 
    
    
         ?>"> 

 



Pour la deuxieme liste déroulante:
       
         <?php 
   //echo  'post<pre>' ;print_r($_POST) ;echo'</pre>'; 
//choix Modeles:          
          
         mysql_free_result($rech_marque); 
          
         if(isset($idr) && $idr !=-1) 
         { 
         $sql2="SELECT idmodele, modele 
                     FROM modeles 
                     WHERE idmarque=$idr 
                     ORDER BY idmodele"; 
         { 
         $rech_modele=mysql_query($sql2); 
         $nd=0; 
         $idmodele=array(); 
         $modele=array(); 
         while($ligne_modele=mysql_fetch_assoc($rech_modele)) 
         { 
         array_push($idmodele, $ligne_modele['idmodele']); 
         array_push($modele, $ligne_modele['modele']); 
         $nd++; 
         } 
         ?> 
         <label>Modele</label> 
         <select name="modele" id="modele"> 
          
         <?php 
         for($d=0; $d<$nd; $d++) 
         { 
         ?> 
         <option value="<?php echo($modele[$d]); ?>"> 
         <?php echo($modele[$d]); ?> 
         </option> 
         <?php 
         } 
         ?> 
         </select> 
         <?php 
         } 
         mysql_free_result($rech_modele); 
         } 
         ?> 
         <?php  $nommarque[$i] = isset($_POST['nommarque[$i]']) ? $_POST['nommarque[$i]']  : ""; 
$modele[$d] = isset($_POST['modele[$d]']) ? $_POST['modele[$d]']  : ""; 

echo  'post<pre>' ;print_r($_POST) ;echo'</pre>'; 

         ?> 
         </fieldset> 
 

Posté : 26 sept. 2006, 22:09
par ouckileou
Je parlais du HTML généré, tu as déjà donné ce code

Insères ce code dans la page de traitement du formulaire :
echo '<pre>';
print_r($_POST);
echo '</pre>';
Tu verras ainsi les variables que tu récupères. Si ta variable est affichée, c'est que le problème est dans le code d'insertion. Si elle n'y est pas, c'est que le problème est dans le formulaire.

Posté : 27 sept. 2006, 09:23
par luc2590
Ouf, j'avais pas compris!


J'avais déjà inséré ce bout de code et
non, ma variable "nommarque" ne s'affiche pas, alors que "idmarque" oui.

Je sais que cela vient du fait que c'est une liste déroulante liée dans un Formulaire, et qu'il ne s'agit certainement que d'un problème d'écriture de ce formulaire, mais je n'arrive pas à récupérer ce "nommarque" pour l'envoyer dans la base ( alors que je le récupère une première fois car c'est lui qui s'affiche dans ma première liste déroulante ).
Le problème est que j'ai besoin du "idmarque" pour lancer la deuxième liste déroulante, et c'est pour cela qu'il est en "value".

Merci de ta compréhension

Posté : 27 sept. 2006, 18:04
par ouckileou
Puisque tu transmets "idmarque", pourquoi veux-tu transmettre "nommarque" ?

Puisque :
- soit tu peux récupérer ce nom par la suite grâce à l'id dans tes tables
- soit ne stocker que l'idmarque (pourquoi stocker les 2)

En tout cas, si tu veux vraiment transmettre nommarque depuis ton formulaire, il te faut un élément de formulaire nommé "nommarque" avec sa valeur...

Posté : 27 sept. 2006, 21:33
par luc2590
Je suis obligé de transmettre "idmarque" en "value" dans le formulaire car j'en ai besoin pour la deuxieme liste déroulante (pour retrouver le modele).

Par contre, il me faudrait "nommarque" pour remplir la table "annonce", car j'ai tout essayé, je n'arrive pas à avoir "nommarque" d'après "idmarque"; je sais, ça parait dingue !

Quant à transmettre "nommarque" depuis le formulaire, il faudrait le plaçer dans le "value" , mais il y a déjà "idmarque" !?

donc je suis coinçé !

Posté : 06 oct. 2006, 08:05
par luc2590
merci finalement de ne m'avoir pas aidé

Posté : 07 oct. 2006, 12:21
par Invité
Bonjour

Insere un hidden en recuperant le champ nommarque

@+

Posté : 07 oct. 2006, 12:43
par zeus
merci finalement de ne m'avoir pas aidé
Je suis sincérement désolé pour toi que tu n'ais pas pu trouver une solution à ton problème mais je tiens à te rappeller que PHPFrance est maintenu par des bénévoles à qui tu ne doit rien et qui ne te doivent rien en retour ...

Nous n'avons donc pas obligation de résultat ... Si tu cherches quelqu'un qui fera tout son possible pour te trouver une solution, tourne toi vers une société de service, et ses tarifs.
il est possible que ouckileou n'ai pas eu le temp de te répondre et que ton sujet ce soit perdu dans la montagne des posts précédent.

En tout cas, ce n'est pas en répondant comme ça que tu vas motiver les troupes ;?