Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche DOM).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/04/2008, 13h51   #1
Invité de passage
 
Inscription : novembre 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 19
Points : 2
Points : 2
Par défaut [SimpleXML] Importer un flux XML dans une table

Bonjour,


Je souhaite importer un flux XML dans une base de donnée MYSQL.

Cependant, mon flux contient des apostrophes dans le champ description ce qui bloque l'insertion dans la base de donnée.

Autrement je souhaite pouvoir récupérer le nom de la catégorie ("Orchidee") pour l'insérer dans ma base mais je ne vois pas comment faire.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="iso-8859-1"?>
<productFeed version="0" timestamp="20080413:13:49:55">
<product id="960" delete="false">
	<name>ORCHIDEE JAUNE</name>
<productURL>http://affiliation.florajet.com/track.php?redir=ZGV0YWlsLnBocD9wYXlzPTcyJnByb2R1aXQ9OTYw&amp;appel=perez_468</productURL>
	<imageURL>http://www.florajet.com/produits/150/960.jpg</imageURL>
	<price>44.00</price>
	<description>
	<![CDATA[Originaire des régions tropicales et sub-tropicales d'Asie, l'orchidée papillon est très floriflère.Ses hampes retombantes portent des fleurs toute l'année, plus ou moins rondes et étoilées qui peuvent durer jusqu'à huit semaines. On l'apprécie pour sa facilité de culture.  <br /><br />]]>
	</description>
	<fields>
	</fields>
	<categories>
	<category name="Orchidee" />
	</categories>
</product>

Code PHP

Code :
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
<?php
//connection a la base de donnee
$dbhost = "localhost";
$dbuser = "root";      // mysql user
$dbpass = "";       // mysql password
$dbname = "spip";     // mysql database
$conn=mysql_connect($dbhost,$dbuser,$dbpass) or die(erreurServeurMySQL());
mysql_select_db($dbname,$conn) or die('Erreur de selection '.mysql_error());
 
$flux = simplexml_load_file('http://localhost/spip/catalogue.xml');
 
foreach ($flux->product as $item) {
 
   $nom = $item->name;
   $url = $item->productURL;
   $image = $item->imageURL;
   $prix = $item->price;
   $description = $item->description;
   $fields = $item->fields;
   $categorie = $item->categories;
 
 
   $sql = "INSERT INTO `affiliation_fleurs` (`id`, `nom`, `url`,`image`,`prix`,`description`,`fields`, `categorie`) VALUES ('', '$nom', '$url', '$image','$prix','$description','$fields','$categorie')";
   $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
   echo 'données inserées en base';
 
}
 
?>

Merci pour votre aide,

José
antitrust56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2008, 14h05   #2
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
Pour le champ description, tu peux échapper les quotes avant l'insertion:
Code :
1
2
3
 
$sql = "INSERT INTO `affiliation_fleurs` (`id`, `nom`, `url`,`image`,`prix`,`description`,`fields`, `categorie`) VALUES ('', '$nom', '$url', '$image','$prix','mysql_real_escape_string($description)','$fields','$categorie')";
   $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
Pour la catégorie, j'essaeirai un truc du genre:

Code :
1
2
3
foreach($item->categories->category as $cat){
  echo $cat['name'];
}
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2008, 20h06   #3
Invité de passage
 
Inscription : novembre 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 19
Points : 2
Points : 2
Pour la catégorie ton code a très bien marché, je t'en remercie.

Cependant, pour la suppression des apostrophes j'ai toujours une erreur.
A mon avis la fonction mysql_real_escape_string n'est pas bien reconnu, j'ai supprimer les apostrophes mais ça ne marche toujours pas.

Autrement, y a t-il un encodage spéciale à spécifier pour que les accents soient bien prise en compte dans ma base de donnée.

Code :
1
2
3
4
5
6
Erreur SQL !INSERT INTO `affiliation_fleurs` (`id`, `nom`, `url`,`image`,`prix`,`description`,`fields`, `categorie`) VALUES ('', 'ORCHIDEE JAUNE', 'http://affiliation.florajet.com/track.php?redir=ZGV0YWlsLnBocD9wYXlzPTcyJnByb2R1aXQ9OTYw&appel=perez_468', 'http://www.florajet.com/produits/150/960.jpg','44.00','mysql_real_escape_string( Originaire des régions tropicales et sub-tropicales d'Asie, l'orchidée papillon est très floriflère.Ses hampes retombantes portent des fleurs toute l'année, plus ou moins rondes et étoilées qui peuvent durer jusqu'à huit semaines. On l'apprécie pour sa facilité de culture.
 
Entretien : Arroser régulièrement pendant la floraison. Réduire à 1 fois par mois hors floraison. Aime la lumière mais pas le soleil direct. Utiliser des bâtonnets d'engrais pour les orchidées.
 
Période : Toute l'année.
)',' ','Orchidee')
antitrust56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2008, 10h52   #4
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
Essaie peut etre comme ceci pour échapper les apostrophes:
Code :
1
2
$sql = "INSERT INTO `affiliation_fleurs` (`id`, `nom`, `url`,`image`,`prix`,`description`,`fields`, `categorie`) VALUES ('', '$nom', '$url', '$image','$prix','".addslashes($description)."','$fields','$categorie')";
   $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
Pour les accents, c'est une question d'encodage, il faut que tu regardes si tu n'as pas une incohérence dans l'encodage de ta bdd, de tes pages, et des flux que tu traites.
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2008, 12h59   #5
Invité de passage
 
Inscription : novembre 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 19
Points : 2
Points : 2
Ca fonctionne, merci Raideman
antitrust56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 19h10   #6
Invité régulier
 
Inscription : septembre 2008
Messages : 54
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : septembre 2008
Messages : 54
Points : 6
Points : 6
Bonsoir,

J'ai un autre petit soucis

Code :
1
2
Erreur SQL !INSERT INTO `alauneaccueil` (`id`, `date`, `titre`, `lien`, `desc`) VALUES ('', 'Fri, 26 Sep 2008 19:03:49 GMT', 'blabla', 'http://www.monsite.be','L'actualité dans le monde')
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'actualité dans le monde')' at line 1


Auriez vous une idée ?

merci
antxbe est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h36.


 
 
 
 
Partenaires

Hébergement Web