Bonjour,
J'ai un script php appelé à partir d'un script javascript via ajax : le javascript envoie une clé au PHP qui lit en base des infos relatives à cette clé et les renvoie normalement dans un responseXML.
Mon pb est tout bête .. lorsque j'utilise un include php dans mon script php, le résultat du script est envoyé dans ResponseText sous forme de texte et pas dans ResponseXML sous forme d'objet.
Lorsque je copie le contenu de l'include directement dans le script cela passe correctement dans le ResponseXML..
le pb c'est que l'include contient les infos de connexion à la base donc la solution de contournement qui consiste à copier les infos de l'include dans le script principal n'est pas satisfaisante.
Ci-joint l'appel
Le 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
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 function getinfosdossier(numdossier){ xhr=getxhr(); xhr.onreadystatechange=function(){ if(xhr.readyState==4) { docXML = xhr.responseXML; if (docXML == null) { alert ("Problème en retour de lecture du dossier : " + xhr.responseText); } else { item=docXML.getElementsByTagName("codeclient").item(0).firstChild; document.getElementById("codeclient").value=nz(item); item=docXML.getElementsByTagName("nomclientfacturation").item(0).firstChild; document.getElementById("client").value=nz(item); item=docXML.getElementsByTagName("descriptif").item(0).firstChild; document.getElementById("etatdossier").value=nz(item); item=docXML.getElementsByTagName("descriptif").item(0).firstChild; document.getElementById("typeentree").value=nz(item); item=docXML.getElementsByTagName("traitepar").item(0).firstChild; document.getElementById("technicien").value=nz(item); item=docXML.getElementsByTagName("prevule").item(0).firstChild; document.getElementById("dateheureprevue").value=nz(item); item=docXML.getElementsByTagName("detatdossier").item(0).firstChild; document.getElementById("codetetatdossier").value=nz(item); } } } xhr.open("POST","getinfosdossier.php",true); xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); xhr.send("numdossier="+encodeURI(numdossier)); } function nz(champ) { if (champ == null){return("")} else {return(champ.data)}; } function getxhr(){ try{xhr=new XMLHttpRequest();} catch(e){ try {xhr=new ActiveXObject("Microsoft.XMLHTTP");} catch(e1){ try{xhr=new ActiveXObject("Msxml2.XMLHTTP");} catch(e2){ alert("AJAX non supporté!"); } } } return xhr; }
le Include
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 <?php header('Content-Type: text/xml'); header("Cache-Control: no-cache, must-revalidate"); header("Expires: Mon, 10 Jul 1990 05:00:00 GMT"); $dbhost = 'XXXXX'; $dbname = 'XXXXX'; $dbuser = 'XXXXX'; $dbpass = 'XXXXX'; $conn = mysql_pconnect($dbhost, $dbuser, $dbpass) or die("Impossible de se connecter à la BDD avec les identifiants transmis"."<br />"); mysql_select_db($dbname, $conn); //include("connect.php"); $numdossier=$_POST["numdossier"]; if ($numdossier==null) { echo "Saisie du dossier impérative"; return; }; $sql ='SELECT numdossier,codeclient,d.typeentree dtypeentree,libelle, d.etatdossier detatdossier, descriptif, nomclientfacturation,traitepar,prevule '; $sql .= 'FROM `dossier` d left join xetatdossier e on e.etatdossier = d.etatdossier '; $sql .= 'left join xentreedossier f on d.typeentree = f.typeentree '; $sql .= 'where numdossier = '.$numdossier.';'; $db_items = mysql_query($sql) or die("Erreur de syntaxe dans la requête générée<br />"); $xml = new DOMDocument('1.0', 'UTF-8'); if (mysql_num_rows($db_items) != 0) { $items = $xml->createElement("items"); while ($db_item = mysql_fetch_assoc($db_items)) { $item = $xml->createElement("item"); foreach($db_item as $key => $value) { $node = $xml->createElement($key,$value); $item->appendChild($node); } $items->appendChild($item); } $xml->appendChild($items); } else { echo "Dossier ".$numdossier." non trouvé"; return; } mysql_close($conn); $xml->save("dossier.xml"); echo $xml->saveXML(); ?>
Je précise qu'avec le include, le XML généré est correct puisque lorsque je mets en ligne le dossier.xml généré dans le $xml->save("dossier.xml") et que je modifie un peu l'appel, le ResponseXML est correctement interprété.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <?php $dbhost = 'XXXXX'; $dbname = 'XXXXX'; $dbuser = 'XXXXX'; $dbpass = 'XXXXX'; $conn = mysql_pconnect($dbhost, $dbuser, $dbpass) or die("Impossible de se connecter à la BDD avec les identifiants transmis"); mysql_select_db($dbname, $conn) or die("Impossible de trouver la base de donnee".$dbname); ?>
Bien que les problèmes soient, à priori, relativement courants avec le responseXML, je n'ai rien trouvé en lien avec le Include ou le Require.
Une idée ?
Merci
Partager