Erreur d'analyse XML

Le problème exposé dans ce sujet a été résolu.

Bonjour,

J'ai besoin de votre aide pour résoudre une erreur parce que je tourne en rond depuis un moment et je ne vois pas l'origine.

À travers une requête AJAX, je souhaite récupérer les meilleurs scores dans un document XML, que le PHP se charge de faire. Or, si c'est bien un document XML (cf. résultat alert 1) et que le contenu est bon (cf. résultat alert 2), je n'arrive pas à traiter le contenu avec des getElementsByTagName("") -> undefined, mais le code me semble bon. De plus, en me rendant sur ma page php, j'ai ce qui suit :

Les alert m'affichent respectivement :

  • [object XMLDocument]

  • <!DOCTYPE html><html><head><title>Memory</title>meta charset="utf8"/></head><body> <!– Les differentes requêtes :// req = 1 : récupérer les meilleurs scores en fonction de la taille choisie // req = 2 : –> <?xml version="1.0"?> <SCORES><SCORE><CLASSEMENT>1</CLASSEMENT><PSEUDO>toto</PSEUDO><ESSAIS>5</ESSAIS><TEMPS>225.5</TEMPS></SCORE><SCORE><CLASSEMENT>2</CLASSEMENT><PSEUDO>toto2</PSEUDO><ESSAIS>6</ESSAIS><TEMPS>325.5</TEMPS></SCORE><SCORE><CLASSEMENT>3</CLASSEMENT><PSEUDO>toto</PSEUDO><ESSAIS>7</ESSAIS><TEMPS>525.5</TEMPS></SCORE></SCORES></body> </html>

Le code js en question :

 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
// Fonction pour récupérer les meilleurs scores en fonction de la taille (voire et du thème) choisie
function recupereScores() {
    // on récupère la taille choisie
    var taillePourScore = Math.pow(document.getElementById("idChoixTaille").value.split("*")[0], 2)
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            // Traitement réception
            alert(xmlhttp.responseXML)
            alert(xmlhttp.responseText)
            var affichage = "...";
            a = xmlhttp.responseXML;
            b = a.getElementsByTagName("SCORE");
            for (i = 0; i < b.length; i++) {
                affichage += b[i].getElementsByTagName("CLASSEMENT")[0].textContent;
                affichage += b[i].getElementsByTagName("PSEUDO")[0].textContent;
                affichage += b[i].getElementsByTagName("ESSAI")[0].textContent;
                affichage += b[i].getElementsByTagName("TEMPS")[0].textContent;
                affichage += "<br>";
            }
            alert(affichage);
        }
    }
    xmlhttp.open("GET", "http://localhost/Memory/memory.php?req=1&taille="+taillePourScore, true);
    xmlhttp.send();
}

Le code php en question :

 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
      <?php
            if (isset($_GET['req'])) {
                if ($_GET['req'] == '1' && isset($_GET['taille'])) {
                    mysql_connect("localhost", "root", "") or die("Connexion Impossible");
                    mysql_select_db("tmtc");
                    $result = mysql_query("SELECT fk_id_classement, pseudo, nb_essais, temps FROM memory_scores WHERE fk_id_taille = ".$_GET['taille'].";");
                    $doc = new DOMDocument("1.0");
                    $root = $doc->createElement("SCORES");
                    $root = $doc->appendChild($root);
                    while($row = mysql_fetch_array($result, MYSQL_NUM)) {
                        $child = $doc->createElement("SCORE");
                        $child = $root->appendChild($child);

                        $classement = $doc->createElement("CLASSEMENT", $row[0]);
                        $classement = $child->appendChild($classement);

                        $pseudo = $doc->createElement("PSEUDO", $row[1]);
                        $pseudo = $child->appendChild($pseudo);

                        $nb_essais = $doc->createElement("ESSAIS", $row[2]);
                        $nb_essais = $child->appendChild($nb_essais);

                        $temps = $doc->createElement("TEMPS", $row[3]);
                        $temps = $child->appendChild($temps);
                    }
                    $xml_string = $doc->saveXML();
                    header("Content-type:text/xml");
                    echo $xml_string;
                    mysql_free_result($result);
                }
            } else {
                echo "Pas de résultats trouvés";
            }
        ?>

Merci bien !

+0 -0

Salut,

Merci pour ta réponse :-)

Tu veux dire quoi par en regardant sa source ? En tout cas, l'erreur me dit que c'est juste avant le "<" de "<?php", pourtant j'ai juste des espaces (comme tu dis) avant ainsi que la structure basique d'une page html (<!DOCTYPE html><html><head><title>Memory</title><meta charset="utf8"/></head><body>). J'ai donc essayé de supprimer les blancs et de réécrire le "<?php" mais ça n'a rien changé.

J'ai une injection SQL ? Peux-tu m'expliquer ? De toute façon, le memory ne sera pas mis sur internet, mais ça serait intéressant de savoir s'en protéger.

+0 -0

Tu veux dire quoi par en regardant sa source ?

Sur cette page (erreur d'analyse) : clic droit > afficher la source.

ainsi que la structure basique d'une page html

Je n'avais même pas vu : pourquoi tu colles un DOCTYPE et autres balises HTML à un document XML ?!?

J'ai une injection SQL ? Peux-tu m'expliquer ?

Je ne vais pas répéter ce qu'on peut aisément trouver à ce sujet avec un moteur de recherche (et ce sera certainement mieux expliqué) donc je te laisse le soin d'effectuer cette tâche ;)

+0 -0

Sur cette page (erreur d'analyse) : clic droit > afficher la source.

D'accord

Je n'avais même pas vu : pourquoi tu colles un DOCTYPE et autres balises HTML à un document XML ?!?

Ahaha x). L'erreur venait en effet de là ! C'est dû à une erreur de compréhension de ma part. Je pensais que comme le document XML est généré dans le PHP et qu'on l'envoi, les balises ne seraient pas prises en compte. Mais en fait toute la page devient un document XML (donc les balises y compris et/ou ne se retrouvent pas à la bonne place vu qu'elles sont avant le <?xml…), c'est ça ?

Je ne vais pas répéter ce qu'on peut aisément trouver à ce sujet avec un moteur de recherche (et ce sera certainement mieux expliqué) donc je te laisse le soin d'effectuer cette tâche ;)

Pas de soucis ;)

Merci, sujet résolu !

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte