Bonjour,

Voilà mon problème: j'utilise 3 fichiers afin de récupérer une valeur liée à une liste déroulante (code ci-après).
J'utilise SMARTY également pour afficher le template.
Ma base: 2 tables =>
country : id_country, name_country
continent id_continent, name_continent

Lorsque l'utilisateur selectionne une 'country', le continent lié doit apparaître en dur (dans un span par exemple), donc pas besoin de liste liée, juste un continent.

Ma requete SQL est OK. Quant je teste en postant avec $_POST, le continent apparait bien. Le probleme vient du script continent_xhr.js ou insert_patient.php ....

insert_patient.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/***********************************
Call retrieveAllCountries() method
***********************************/
$countries = DAOUtils::retrieveAllCountries();
$countryLength=count($countries);
for($i=0;$i<$countryLength;$i++){
	$country[$i]=$countries[$i]->getCountryName();
	}
$smarty->assign('country', $country);
 
//On récupère l'ID de la country choisie
$idc = isset($_GET['patient_country_birth']) ? $_GET['patient_country_birth'] : false;
/* Si on a une country, on procède à la requête */
if(false !== $idc)
{
    /* Cération de la requête pour avoir le continent de ce pays */
    $continent = $db->getRow("SELECT cont.id_continent, name_continent FROM country c, continent cont 
								WHERE c.id_continent = cont.id_continent
								AND c.id_country = $idc ");
};
 
$smarty->assign("continent", $continent);
var_dump($continent);
continent_xhr.js
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/**
 * Lister le continent de la country choisi avec un objet
 * XMLHTTPRequest.
 */
/* Création de la variable globale qui contiendra l'objet XHR */
var requete = null;
/**
 * Fonction privée qui va créer un objet XHR.
 * Cette fonction initialisera la valeur dans la variable globale définie
 * ci-dessus.
 */
function creerRequete()
{
    try
    {
        /* On tente de créer un objet XmlHTTPRequest */
        requete = new XMLHttpRequest();
    }
    catch (microsoft)
    {
        /* Microsoft utilisant une autre technique, on essai de créer un objet ActiveX */
        try
        {
            requete = new ActiveXObject('Msxml2.XMLHTTP');
        }
        catch(autremicrosoft)
        {
            /* La première méthode a échoué, on en teste une seconde */
            try
            {
                requete = new ActiveXObject('Microsoft.XMLHTTP');
            }
            catch(echec)
            {
                /* À ce stade, aucune méthode ne fonctionne... mettre son navigateur à jour ;) */
                requete = null;
            }
        }
    }
    if(requete == null)
    {
        alert('Impossible de créer l\'objet requête,\nVotre navigateur ne semble pas supporter les object XMLHttpRequest.');
    }
}
/**
 * Fonction privée qui va mettre à jour l'affichage de la page.
 */
function actualiserContinent()
{
    var listeCont = requete.responseText;
    var labelCont = document.getElementById('continent');
    labelCont.innerHTML = listeCont;
}
 
/**
 * Fonction publique appelée par la page affichée.
 * Cette fonction va initialiser la création de l'objet XHR puis appeler
 * le code serveur afin de récupérer les données à modifier dans la page.
 */
function getContinent(idc)
{
    /* Si il n'y a pas d'identifiant de country, on fait disparaître la seconde liste au cas où elle serait affichée */
    if(idc == 'vide')
    {
        document.getElementById('continent').innerHTML = '';
    }
    else
    {
        /* À cet endroit précis, on peut faire apparaître un message d'attente */
        var labelCont = document.getElementById('continent');
        labelCont.innerHTML = "Traitement en cours, veuillez patienter...";
        /* On crée l'objet XHR */
        creerRequete();
        /* Définition du fichier de traitement */
        var url = 'insert_patient.php?idc='+ idc;
        /* Envoi de la requête à la page de traitement */
        requete.open('GET', url, true);
        /* On surveille le changement d'état de la requête qui va passer successivement de 1 à 4 */
        requete.onreadystatechange = function()
        {
            /* Lorsque l'état est à 4 */
            if(requete.readyState == 4)
            {
                /* Si on a un statut à 200 */
                if(requete.status == 200)
                {
                    /* Mise à jour de l'affichage, on appelle la fonction apropriée */
                    actualiserContinent();
                }
            }
        };
        requete.send(null);
    }
}
Enfin, le template SMARTY: (le select country et le span pour afficher le continent)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<label id="label">*Patient country birth: </label>
					<select name="patient_country_birth" id="patient_country_birth" onchange="getContinent(this.value);">
						<option selected="selected" value="">--Patient country birth--</option>
						{foreach from=$country item=COUNTRY key=k}
						<option value="{$k}">{$COUNTRY}</option>
						{/foreach}
					</select>
				<span class="continent" name="continent" id="continent">{$continent.1}</span>
C'est long, désolé, mais je fourni un max d'info. S'il y a des spécialistes qui peuvent m'aider à trouver mon erreur, merci par avance