Recharger un formulaire

Recharger un formulaire - PHP - Programmation

Marsh Posté le 11-09-2006 à 14:32:45    

Bonjour à tous,  
 
Mon formulaire est composé de 2 listes déroulantes liées. La première les CATEGORIES la deuxième les SOUS CATEGORIE. Je sélectionne une catégorie, ma page se recharge, je peux selectionner une sous catégorie.  
 
Mon problème est que je souhaite que la catégorie que j'ai sélectionné reste affichée lors du rechargement de la page. Là lorsque je recharge ma liste catégorie affiche ...CATEGORIE...
 
Voici mon code :  

Code :
  1. <script language="javascript">
  2. function charger(val){
  3. //document.location.href = "test.php"+"&valeur="+val;
  4. document.location.href = "test.php?valeur="+val;
  5. }
  6. </script>
  7. <form action="adm_doc.php?act=<?=$act?>&cle=<?=$_GET['cle']?>" method="post" ENCTYPE="multipart/form-data" name="form">
  8. <table border="0" cellpadding="0" cellspacing="6" align="center">
  9. <tr>
  10.  <td align="right" id="formulaire">Catégorie</td>
  11.  <?
  12.  $sql = " SELECT cat_cle, cat_lib FROM categorie ORDER BY cat_lib ASC ";
  13.  $qry = pg_query ($conn, $sql);
  14.  ?>
  15.  <td align="left" id="formulaire">
  16.   <select id="formulaire" name="doc_categorie" onChange="javascript:charger(this.value);">
  17.    <option id="formulaire" value="0">... Categorie ...</option>
  18.    <?
  19.    while ($result = pg_fetch_object($qry))
  20.     {
  21.    ?>
  22.    <option id="formulaire" value="<?=$result->cat_cle ?>" <? if ($result->cat_cle==$fetch->doc_categorie){ echo 'selected'; } ?>><?=$result->cat_lib ?></option>
  23.    <?
  24.     }
  25.    ?>
  26.   </select>
  27.  </td>
  28. </tr>
  29. <tr>
  30.  <td align="right" id="formulaire">Sous-Catégorie</td>
  31.  <?
  32.  $sql = " SELECT scat_cle, scat_lib FROM souscategorie ";
  33.  if (isset($_GET['valeur']))
  34.   {
  35.   $sql.= " WHERE scat_categorie = ".$_GET['valeur']." ORDER BY scat_lib ";
  36.   }
  37.  $qry = pg_query ($conn, $sql);
  38.  ?>
  39.  <td align="left" id="formulaire">
  40.   <select id="formulaire" name="doc_scat">
  41.    <option id="formulaire" value="0">... Sous Categorie ...</option>
  42.    <?
  43.    while ($result = pg_fetch_object($qry)){
  44.    ?>
  45.    <option id="formulaire" value="<?=$result->scat_cle ?>" <? if ($result->scat_cle==$fetch->doc_scat){ echo 'selected'; } ?>><?=$result->scat_lib?></option>
  46.    <? } ?>
  47.   </select>
  48.  </td>
  49. </tr>
  50. </table>
  51. </form>


Reply

Marsh Posté le 11-09-2006 à 14:32:45   

Reply

Marsh Posté le 11-09-2006 à 14:38:37    

\o/ Jennnyyyyyyyyyy \o/
 
Question parce que je suis pas sur d'avoir tout compris, le problème c'est:
1- génération de la page avec juste la liste catégorie
2- validation avec un élement de cette liste selectionné
3- génération de la page avec la liste catégorie ( sans élement selectionné) et avec la liste sous-catégorie ( sans élement selectionné)
OU
1- génération de la page avec juste la liste catégorie
2- selection d'un élement ( pas de validation)
2- rechargement de la page
 
Dans le cas 1, tu dois reprendre celui qui était selectionné ( récupération en post) et vérifier si la valeur de la boucle sur catégorie est identique, auquel cas ajouter selected="selected".
C'est ce que tu sembles avoir essayer avec:

Code :
  1. if ($result->cat_cle==$fetch->doc_categorie)


Mais étant donné que $fetch est pas initialisé ( du moins dans le code donné la), ça risque pas de marcher
 
Dans le 2eme cas, c'est normal...


Message édité par anapajari le 11-09-2006 à 14:39:04
Reply

Marsh Posté le 11-09-2006 à 14:47:38    

C'est le deuxième cas car les champs catégorie et sous catégorie ne sont pas les seules dans mon formulaire. (nom, prenom...)
Comment je peux faire alors? je ne veux pas valider mais simplement recharger avec les éléments de mon formualire que j'ai déjà rempli(nom, prenom, catégorie)

Reply

Marsh Posté le 11-09-2006 à 15:27:28    

recharger =  
appuyer sur le bouton recharger du navigateur?
ou
appuyer sur un bouton recharger de ta page?

Reply

Marsh Posté le 11-09-2006 à 16:01:39    

OK je recommence.
J'ai un formulaire avec NOM, PRENOM, DATE, CATEGORIE, SOUS CATEGORIE. L'internaute rempli ses champs : DUPONT, ALAIN, 11/09/2006, là il sélectionne une catégorie. La page se recharge avec la fonction charger(val) en javascript. Mon formualire réapparait au bout d'une fraction de seconde, mais là mon NOM, PRENOM, DATE et catégorie sont effacés. Par contre dans ma liste sous catégorie j'ai bien les sous catégorie correspondant à la catégorie sélectionnée.
 
Voici mon code :

Code :
  1. <script language="javascript">
  2. function charger(val){
  3. //document.location.href = "test.php"+"&valeur="+val;
  4. document.location.href = "test.php?doc_categorie=16&valeur="+val;
  5. }
  6. </script>
  7. </head>
  8. <body>
  9. <form action="adm_doc.php?act=<?=$act?>&cle=<?=$_GET['cle']?>" method="post" ENCTYPE="multipart/form-data" name="form">
  10. <table border="0" cellpadding="0" cellspacing="6" align="center">
  11. <tr>
  12.  <td align="right" id="formulaire">NOM</td>
  13.  <td align="left" id="formulaire">
  14.   <input type="text" name="doc_nom" size="30" value="<?=$fetch->doc_nom?>">
  15.  </td>
  16. </tr>
  17. <tr>
  18.  <td align="right" id="formulaire">Catégorie</td>
  19.  <?
  20.  $sql = " SELECT cat_cle, cat_lib FROM categorie ORDER BY cat_lib ASC ";
  21.  $qry = pg_query ($conn, $sql);
  22.  ?>
  23.  <td align="left" id="formulaire">
  24.   <select id="formulaire" name="doc_categorie" onChange="javascript:charger(this.value);">
  25.    <option id="formulaire" value="0">... Categorie ...</option>
  26.    <?
  27.    while ($result = pg_fetch_object($qry))
  28.     {
  29.    ?>
  30.    <option id="formulaire" value="<?=$result->cat_cle ?>" <? if ($result->cat_cle==$fetch->doc_categorie){ echo 'selected'; } ?>><?=$result->cat_lib ?></option>
  31.    <?
  32.     }
  33.    ?>
  34.   </select>
  35.  </td>
  36. </tr>
  37. <tr>
  38.  <td align="right" id="formulaire">Sous-Catégorie</td>
  39.  <?
  40.  $sql = " SELECT scat_cle, scat_lib FROM souscategorie ";
  41.  if (isset($_GET['valeur']))
  42.   {
  43.   $sql.= " WHERE scat_categorie = ".$_GET['valeur']." ORDER BY scat_lib ";
  44.   }
  45.  $qry = pg_query ($conn, $sql);
  46.  ?>
  47.  <td align="left" id="formulaire">
  48.   <select id="formulaire" name="doc_scat">
  49.    <option id="formulaire" value="0">... Sous Categorie ...</option>
  50.    <?
  51.    while ($result = pg_fetch_object($qry)){
  52.    ?>
  53.    <option id="formulaire" value="<?=$result->scat_cle ?>" <? if ($result->scat_cle==$fetch->doc_scat){ echo 'selected'; } ?>><?=$result->scat_lib?></option>
  54.    <? } ?>
  55.   </select>
  56.  </td>
  57. </tr>
  58. </table>
  59. </form>

Reply

Marsh Posté le 11-09-2006 à 16:09:06    

et bin alors tu peux pas !!!!
Si tu veux garder les valeurs "qui sont dedans le formulaire avant le chargement", il faut que tu les soumettes à ton serveur.
Donc :

  • soit tu rajoutes les différents champs dans ton charger val, et dans ton script php tu récupères les valeurs en get pour pouvoir les remettre dans la page regénéré  
  • soit tu fais les choses proprement, tu fais de ton bouton un submit et en fonction des données passées tu affiches les bonnes choses préalablement récupérées ( ce coup ci en post)

Reply

Marsh Posté le 11-09-2006 à 16:25:10    

ok je me doutais que ce serait chiant !!!
 
Si je fais un bouton c'est pas pratique pour l'internaute!! Comment font-ils les webmasters pour créer des formulaires à ralonge avec des listes dépendantes les unes des autres?
Peux-t-on liées 2 listes sans recharger la page?

Reply

Marsh Posté le 11-09-2006 à 16:43:03    

jenny50 > Ils ont trois choix pour ce genre de page :
- soit une page hyper lourde qui contient tout avec du javascript en prime pour remplir les listes
- soit plusieurs pages avec un passage d'une page à l'autre en fonction de la liste dont on a changé la sélection
- soit une page contenant le minimum avec du javascript pour aller chercher le reste sur le serveur à la demande.

Reply

Marsh Posté le 11-09-2006 à 16:50:06    

jenny50 a écrit :


Peux-t-on liées 2 listes sans recharger la page?


 
Oui !
Méthode lourde : charger toutes les données dans les scripts js,
Méthode plus légère (enfin ça dépent) : AJAX

Reply

Marsh Posté le 11-09-2006 à 16:57:13    

OK je vous remercie pour vos réponses, jvais chercher des script pour ce genre de liste déroulantes dynamique liées.  
 
Avez-vous un lien avec un exmple classique?

Reply

Marsh Posté le 11-09-2006 à 16:57:13   

Reply

Marsh Posté le 12-09-2006 à 16:09:08    

Salut Jenny, j'utilise aussi pas mal AJAX sur mon site. Voici un lien sur lequel j'ai pu apprendre pas mal de truc et faire mes 1ères requêtes:
 
http://www.xul.fr/xml-ajax.html
 
Tu verras sur le site, tu as pas mal de démos!
 
Bon courage à toi!
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed