IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Utiliser responseXML lors d'un Include PHP [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 59
    Par défaut Utiliser responseXML lors d'un Include PHP
    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

    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 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
     
    <?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();
    ?>
    le Include

    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);
    ?>
    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é.

    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

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    (je ne sais pas si c'est ça, mais...)
    Dans tes 2 fichiers PHP, existe-t-il des espaces ou passages à la ligne :
    • AVANT le premier <?php (balise PHP d'ouverture)
    • APRES le dernier ?> (balise PHP de fermeture)
      ?

    Auquel cas il faut les supprimer.

    ASTUCE : dans tous les fichiers se terminant par du code PHP, il est recommandé de NE PAS mettre le ?> final.
    Ça évite justement d'avoir des espaces ou passages à la ligne qui seront considérés comme des affichages HTML.

    ex. :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php // RIEN AVANT cette balise PHP d'ouverture (ni espace, ni passage à la ligne)
    $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);
    // PAS de balise PHP de fermeture

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 59
    Par défaut
    Bonjour,

    J'ai appliqué toutes ces astuces mais malgré cela, cela déconnait tjours ..

    Alors, je suis donc reparti de zéro avec une version minimale (avec include que j'ai réécrit complètement) qui fonctionnait et petit à petit j'ai enrichi en testant à chaque fois.

    Cela marche maintenant sans trop savoir pourquoi puisque au final le code est identique à celui d'origine.

    Il devait y avoir un caractère "indésirable" dans le include ..

    Merci de t'être penché sur mon pb ..

    je mets résolu mais bon, je ne suis pas convaincu que cela ne va pas revenir si j'ai de nouvelles modifications à effectuer.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser include php
    Par Marie_7 dans le forum Langage
    Réponses: 1
    Dernier message: 30/06/2015, 18h07
  2. Lancer un include PHP lors du change d'une liste de sélection
    Par beegees dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/10/2008, 23h30
  3. [PHP-JS] include php en javascript
    Par jeanmed dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/03/2006, 10h12
  4. [Wamp] include php sur serveur perso avec WAMP server
    Par Quality_Design dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 16/02/2006, 01h17
  5. [Débutant] équivalent du include() php
    Par R3iTt0R dans le forum ASP
    Réponses: 5
    Dernier message: 07/07/2004, 12h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo