Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/01/2007, 23h35   #1
Membre du Club
 
Homme Stéphane
Développeur Web
Inscription : septembre 2005
Messages : 100
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 37
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Services à domicile

Informations forums :
Inscription : septembre 2005
Messages : 100
Points : 45
Points : 45
Envoyer un message via MSN à Shiva
Par défaut AJAX et PHP

J'ai un formulaire avec une liste déroulante contenant des noms de pays, quand j'en choisis un une seconde liste déroulante arrive en dessous avec la liste des états pour le pays choisit.
Jusque là tout fonctionne.

Maintenant quand je choisis un état dans la seconde liste, je cherche à faire venir une troisième liste avec les villes pour l'état voulu mais là, ça ne fonctionne pas.

Mes données proviennent biensur de différentes tables et les listes sont générées en PHP.
Voici le code :

Le fichier ajax.js
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
function createRequestObject()
{
    var ro;
    ro = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    return ro;
}
 
var http = createRequestObject();
 
function sndReq(param,arg,arg2)
{
    IDCountry = GetIdCountry();
    IDState = GetIdState();
    http.open('get', 'ajax.php?param='+param+'&IDCountry='+IDCountry+'&IDState='+IDState);
    http.onreadystatechange = handleResponse;
    http.send(null);
}
 
function handleResponse()
{
    if(http.readyState == 4) {
        var response = http.responseText;
        var update = new Array();
 
        if(response.indexOf('|') != -1) {
            update = response.split('|');
            document.getElementById(update[0]).innerHTML = update[1];
        }
    }
}
 
function GetIdCountry()
{
    var ID_Country = document.getElementById('countryList').options[document.getElementById('countryList').selectedIndex].value;
    return ID_Country;
}
 
function GetIdState()
{
    var ID_State = document.getElementById('stateList').options[document.getElementById('stateList').selectedIndex].value;
    return ID_State;
}
Le fichier ajax.php pour générer les listes :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
switch($_REQUEST['param']) {
/** ******************************************************************************
 * Generation de la liste des etats
 */
case 'State':
    $new_sql = 'SELECT ID_State, StateName
                FROM '.$data->T_State.'
                WHERE ID_Country = '.$_REQUEST['IDCountry'];
 
    $StateList = '<select size="1" onChange="sndReq(\'City\');" id="stateList">';
    $StateList .= $data->liste_select('ID_State', array('ID_State', 'StateName'), $data->T_State, 'StateName', $ID_Country, false, '', $new_sql, false);
 
    echo 'State|<br>'.$listeDepartement;
 
    break;
 
/** ******************************************************************************
 * Generation de la liste des villes
 */
case 'City':
    $new_sql = 'SELECT ID_City, CityName
                FROM '.$data->T_City.'
                WHERE ID_State = '.$_REQUEST['IDState'];
 
    $listeVille = $data->liste_select('ID_City', array('ID_City', 'CityName'), $data->T_City 'CityName', '', false , '', $new_sql, true);
 
    echo 'City|<br>'.$listeVille;
 
    break;
}
?>
La méthode liste_select() génère une liste déroulante.

Et la section de la page php avec la première liste contenant les pays :
Code :
1
2
3
4
5
6
7
8
 
$form .= '<tr bgcolor="#FFFFFF">
<td align="right">Pays :</td>
<td><select size="1" onChange="sndReq(\'State\');" id="countryList">
'.$this->liste_select('champ[ID_Country]', array('ID_Country', 'CountryName'), $this->T_Country, 'CountryName', $DefaultCountry, false, '', '', false).'
<div id="State"></div>
</td>
</tr>';
Ce morceau de code fait partie d'une méthode dans une classe qui ne fait qu'afficher le formulaire avec ma liste plus quelques autres champs texte tout simples

Sinon, je remarque un truc :
Dans ajax.js si je commente la fonction GetIdState() et que dans l'url de la fonction sndReq je vire ceci +'&IDState='+IDState tout fonctionne jusqu'à la seconde liste (marche toujours pas pour la 3eme liste) mais si je laisse ce code plus rien ne tourne (plus d'accès à la seconde liste).
Shiva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2007, 10h11   #2
Nouveau Membre du Club
 
Mikael Randy
Inscription : août 2006
Messages : 28
Détails du profil
Informations personnelles :
Nom : Mikael Randy
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : août 2006
Messages : 28
Points : 32
Points : 32
Bonjour,

Dans le désordre, je remarque ça :
- ton <select> n'est pas fermé.
- pas besoin de mettre un <div>, tu peut faire un innerHTML directement sur ton <select>
- Est-ce que tu as essayé d'afficher le retour de ton AJAX pour voir si le soucis se situe à l'appel du script ajax.php ou lors de son interprétation ?
Zeus_phpfrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2007, 20h43   #3
Membre du Club
 
Homme Stéphane
Développeur Web
Inscription : septembre 2005
Messages : 100
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 37
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Services à domicile

Informations forums :
Inscription : septembre 2005
Messages : 100
Points : 45
Points : 45
Envoyer un message via MSN à Shiva
Pour le </select> il est généré par la méthode liste_select()
Sinon quand je regarde la log apache en direct, le fichier n'est pas appelé...
Shiva est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h39.


 
 
 
 
Partenaires

Hébergement Web