Rafraichir form après choix dans <SELECT>

Résolu/Fermé
reedbedroom Messages postés 80 Date d'inscription lundi 11 juillet 2011 Statut Membre Dernière intervention 1 janvier 2020 - 15 nov. 2012 à 17:56
 reedbedroom - 16 nov. 2012 à 17:05
Bonjour,

J'ai un formulaire contenant deux liste Select, l'une contenant des pays, et l'autre contenant des ville.

Je souhaiterai pouvoir sélectionner un pays -> rafraichir le formulaire -> récupérer la variable $pays pour ensuite charger le contenu de la liste ville en PHP.

Je sais que je l'ai déjà fait sur un site il y a un moment mais je ne m'en souviens plus. Le tout étant de ne pas perdre les données du formulaire saisies dans les champs précédents et de récupérer le pays pour la requete SQL des villes.


Est il possible d'envoyer la valeur de liste pays avec onchange="location.reload()+value" par exemple ?!

Merci !


2 réponses

incaout Messages postés 347 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 novembre 2012 74
15 nov. 2012 à 22:21
Bonsoir.
Une solution consiste à utiliser une requête Ajax déclarée dans une fonction javascript qui serait appelée sur l'événement "onchange" de ta zone de liste pays.
La requête Ajax appelle un script PHP en lui passant en méthode GET ou POST au choix, l'id ou le nom du pays. Elle reçoit en retour une chaine JSON générée par le script PHP et contenant la liste des villes. Elle peut alors effacer le contenu de la zone de liste ville et insérer les enregistrements reçus. Le tout se fait sans rechargement de page.
Si tu ne connais pas Ajax, tu peux trouver de bons tutos sur internet en tapant requête Ajax ou httprequest. Par ailleurs, tu peux utiliser une librairie javascript comme prototypejs ou jquery qui facilite grandement l'utilisation de requêtes Ajax.

Une autre solution au plus simple est de créer une page qui contient ton script PHP de traitement, puis ton code HTML. Il te faut ensuite un formulaire qui contient tes deux zones de liste et un champ caché nommé "op" par exemple qui sert à mémoriser l'action demandée. Le paramètre "action" de ton formulaire rappelle cette même page. Tu associes une fonction javascript à l'événement onchange de ta liste pays. Cette fonction met à jour la propriété value du champ caché "op" (par exemple "chargeVilles" puis poste le formulaire. La page est rappelée. Le script PHP figurant en début de page vérifie la présence de données dans $_POST et si en trouve, teste la valeur du champ "op", lance le traitement associé (en utilisant les autres valeurs contenues dans le $_POST - dans ton cas l'id ou le nom du pays sélectionné) et place les données dans un tableau PHP (par exemple $listeVilles). Enfin, il faut que les "<option>" de ta liste ville soit générés par PHP à partir des informations lues dans le tableau.

Ex :
<select name="villes">
<?php
if(isset($listeVilles) && !empty($listeVilles))
{
foreach($listeVilles as $id=>$nom)
{
echo '<option value="' . $id . '">' . $nom . '</option>';
}
}
?>
</select>

Voilà grosso modo, la démarche, mais bien sûr, elle peut être optimisée.

Bon courage

IC
2
DarkAurora Messages postés 417 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 21 janvier 2013 27
16 nov. 2012 à 16:58
Il faut effectivement passer par là... si jamais tu ne sais pas par ou commencer, viens nous donner tes impressions et on t'aideras à réaliser les appels ajax et autres
0
reedbedroom
16 nov. 2012 à 17:05
Bonsoir,

Et merci pour ta réponse. J'ai retrouver la solution que j'avais utilisé il y a quelques temps. Moins compliquée et suffisante pour le site que je réalise actuellement.

Au cas où cela intéresse quelques la voici :

<select name="pays_sportif" id="pays_sportif" onchange="window.location='index.php?page=promesse_don.php'&pays_sportif=' + document.form.pays_sportif.value;" >
<?
if($pays_sportif != "")
{
echo '<option value="'.$pays_sportif.'" selected="selected">'.$pays_sportif.'</option>';
}
?>
<option value="Allemagne">Allemagne</option>
<option value="Australie">Australie</option>
<option value="Belgique">Belgique</option>
<option value="Chili">Chili</option>
<option value="Aspagne">Espagne</option>
<option value="Usa">États Unis</option>
<option value="Finlande">Finlande</option>
<option value="France">France</option>
<option value="Italie">Italie</option>
<option value="Nouvelle zelande">Nouvelle Zélande</option>
<option value="Portugal">Portugal</option>
<option value="Royaume uni">Royaume Uni</option>
<option value="Suede">Suède</option>
</select>


Merci.
0