Page 1 sur 1

Petit problème avec mon script php > xml

Posté : 02 mai 2013, 16:24
par Prodiguy
Bonjour,

Étant débutant en php et en programmation en général je dois écrire un code qui doit se connecter à ma base de données pour en extraire les infos et les retranscrire dans un fichier XML. Voici mon code :
<?php  

// Start XML file, create parent node

$dom = new DomDocument("1.0");
$node = $dom->createElement("experts");
$parnode = $dom->appendChild($node); 

// Opens a connection to a MySQL server

$connection=mysql_connect (localhost, $username, $password);
if (!$connection) {  die('Not connected : ' . mysql_error());} 

// Set the active MySQL database

$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
  die ('Can\'t use db : ' . mysql_error());
} 

// Select all the rows in the markers table

$query = "SELECT * FROM experts";
$result = mysql_query($query);
if (!$result) {  
  die('Invalid query: ' . mysql_error());
} 

header("Content-type: text/xml"); 

// Iterate through the rows, adding XML nodes for each

while ($row = @mysql_fetch_assoc($result)){  
  // ADD TO XML DOCUMENT NODE  
  $node = $dom->createElement("experts");  
  $newnode = $parnode->appendChild($node);   
  $newnode->setAttribute("IdClient",$row['IdClient']);
  $newnode->setAttribute("ReferenceClient", $row['ReferenceClient']);  
  $newnode->setAttribute("RaisonSociale", $row['RaisonSociale']);  
  $newnode->setAttribute("Type", $row['Type']);
  $newnode->setAttribute("SSType", $row['SSType']);
  $newnode->setAttribute("BlocageADV",$row['BlocageADV']);
  $newnode->setAttribute("DateCreationClient", $row['DateCreationClient']);
  $newnode->setAttribute("ContactNom", $row['ContactNom']);  
  $newnode->setAttribute("ContactPrenom", $row['ContactPrenom']); 
  $newnode->setAttribute("ContactEmail", $row['ContactEmail']);  
  $newnode->setAttribute("Adresse", $row['Adresse']);  
  $newnode->setAttribute("Adresse2",$row['Adresse2']);
  $newnode->setAttribute("CodePostal", $row['CodePostal']);  
  $newnode->setAttribute("Ville", $row['Ville']);  
  $newnode->setAttribute("Pays", $row['Pays']);  
  $newnode->setAttribute("Telephone", $row['Telephone']);
  $newnode->setAttribute("Ismap", $row['Ismap']);
} 

echo $dom->saveXML();

?>
Cependant, en voulant exécuter mon script voici l'erreur qui apparaît :

Erreur d'analyse XML : données incompréhensibles après l'élément de document
Emplacement : http://localhost/tests/TESTXML.php
Numéro de ligne 2, Colonne 1 :<font size='1'><table class='xdebug-error xe-notice xe-scream' dir='ltr' border='1' cellspacing='0' cellpadding='1'> ^

Any Idea ?

Merci de votre aide.

Re: Petit problème avec mon script php > xml

Posté : 02 mai 2013, 16:40
par moogli
salut,

vire l'arobase devant le myslq_fetch_assoc, cet opérateur ne devrait pas être utilisé tu doit traiter les données avant qu'elle ne puisse produire une erreur (dans ton cas le retour de mysql_query).

ensuite il semble que ton xml ne soit pas bien formé, peux tu l'afficher en entier ?

le début que tu indique c'est du code html généré par xdebug, tu doit avoir une erreur dans ton code.


tu peux mettre en commentaire le header et le dom->saveXML() afin de voir ce qui se passe (sinon tu peux aussi regarder le log du serveur web ;) )


@+

Re: Petit problème avec mon script php > xml

Posté : 02 mai 2013, 16:52
par Prodiguy
Bonjour et merci de ton intérêt !

L'erreur que j'ai joint a mon post précédent et le résultat qui s'affiche sur ma page.
Le fait de retirer le @ n'a rien modifié et en commentant le header et le echo $dom->saveXML() ça m'a donné ceci :

( ! ) SCREAM: Error suppression ignored for
( ! ) Notice: Use of undefined constant localhost - assumed 'localhost' in C:\wamp\www\tests\TESTXML.php on line 17
Call Stack
# Time Memory Function Location
1 0.0008 150624 {main}( ) ..\TESTXML.php:0

( ! ) SCREAM: Error suppression ignored for
( ! ) Warning: DOMElement::setAttribute(): string is not in UTF-8 in C:\wamp\www\tests\TESTXML.php on line 53
Call Stack
# Time Memory Function Location
1 0.0008 150624 {main}( ) ..\TESTXML.php:0
2 0.0231 234800 DOMElement->setAttribute( ) ..\TESTXML.php:53

( ! ) SCREAM: Error suppression ignored for
( ! ) Warning: DOMElement::setAttribute(): string is not in UTF-8 in C:\wamp\www\tests\TESTXML.php on line 53
Call Stack
# Time Memory Function Location
1 0.0008 150624 {main}( ) ..\TESTXML.php:0
2 0.0234 235336 DOMElement->setAttribute( ) ..\TESTXML.php:53

Re: Petit problème avec mon script php > xml

Posté : 02 mai 2013, 18:09
par moogli
La première erreur c'est parce que tu n'a pas mis localhost ente '' ($connection=mysql_connect ('localhost', $username, $password); )


la seconde se résout avec un utf8_encode.

met le code généré dans un fichier et ouvre le avec un éditeur de texte (genre notepad++) afin de voir tous ce qu'il y a dedans).
=> $dom->saveXML('lefichier.xml');

tu devrais voir le message d'erreur enregistré dedans.

Pense à encoder les entités tels que & en & afin d'éviter les soucis :)

@+

Re: Petit problème avec mon script php > xml

Posté : 03 mai 2013, 09:15
par Prodiguy
Bonjour moogli,

J'ai mis mon localhost entre ' ' comme tu l'as dit, cependant je n'ai pas trop saisi la suite.
Je ne sais pas où mettre mon utf8_encode(), de plus mon "lefichier.xml" n'as pas l'air de se créer :(

EDIT : J'ai trouvé grâce à ton aide ! Merci beaucoup ! Je met ce sujet en mode résolu :D