2010-08-16 7 views
0

Je tente de remplir une deuxième liste déroulante de manière dynamique en fonction d'une liste déroulante sélectionnée. Cependant, j'ai réussi à écrire obtenir la page à recharger lorsque je choisis quelque chose dans la liste déroulante mais la valeur choisie n'est pas transmise après le rechargement. J'ai register_globals désactivé (et préfère) et j'utilise la fonction GET pour soumettre le formulaire. Cependant quand j'essaye de placer des valeurs dans l'URL je ne peux pas le faire fonctionner. Exemple: dropdown.php? Area = 1 me donne toujours une valeur dans la liste déroulante avec la valeur par défaut. Qu'est-ce que je fais de mal? En cours d'exécution sur un serveur LAMP. Apache 2.2, php 5.3. Note: J'ai trouvé le code php ici sur le web, supposé m'aider à passer la variable GET et sélectionner l'option dans la selectbox.Problème avec la sélection de la valeur sélectionnée dans le formulaire après rechargement page

Ceci est mon code:

<html> 
<head> 
     <SCRIPT language=JavaScript> 
     function reload(form) 
     { 
     var val=form.area.options[form.area.options.selectedIndex].value; 
     self.location='dropdown.php?area=' + val ; 
     } 
     </script> 
</head> 
</body> 
<? @$area=$HTTP_GET_VARS['area']; ?> 
     <form action="" method="get"> 
       <select name="area" id="area" onchange="reload(this.form)"> 
         <option>1</option> 
         <option>2</option> 
         <option>3</option> 
       </select> 
     </form> 
</body> 
</html> 

De plus, si cela pourrait être fait avec POST (ou fonction équivalente), il serait encore mieux.

Cordialement.

Répondre

0

Je pense que vous ne spécifiez nulle part l'une des options à sélectionner lors du chargement de la page. En fonction de la valeur de la zone $, vous devez ajouter quelque chose comme

<option selected>1</option>

Vous pouvez facilement le faire avec quelques lignes de PHP lors du rendu des noeuds d'option:

<? if $area == 1 
     print '<option selected>1</option>'; 
?> 

etc.

Alternativement, vous pouvez simplement remplir le second combo en utilisant le javascript côté client, éliminant ainsi le besoin d'un rechargement de page. Si vous devez effectuer un traitement côté serveur sensible pour calculer la valeur du second combo, faites-le dans un appel AJAX en arrière-plan en utilisant jQuery (exemples here). Les publications pour ce genre de choses sont indésirables et démodées ces temps-ci. En ce qui concerne le problème GET, si la soumission du formulaire a des effets secondaires (par exemple, un changement d'état dans le compte de l'utilisateur, la suppression de quelque chose, la création d'une nouvelle entité), il doit définitivement être POST. Discussion here par exemple.

+0

Merci beaucoup! Cela fonctionne réellement maintenant! : D Une question, cela serait-il possible de faire avec $ _POST à ​​la place? – xeet

+0

@xeet: je ne vois pas pourquoi pas. Vous devrez envoyer manuellement la requête POST en utilisant jQuery ou similaire. –

+0

Merci, je vais essayer de lire sur jQueries :) – xeet

Questions connexes