XML -> MYSQL

Eléphanteau du PHP | 38 Messages

22 avr. 2009, 01:22

Bonjour à tous,

j'insère des donnés contenues dans un xml dans ma base de données mysql/phpmyadmin grâce au tutoriel d'@rthur

http://www.phpfrance.com/forums/voir_reponse-264954.php
Je souhaiterais maintenant insérer les données d'un XML dans différentes tables mysql.

Voici ma requête

Code : Tout sélectionner

mysql_query("INSERT INTO jos_estateagent AND jos_estateagent_categories AND jos_estateagent_images SET created_by='".($annonce->client)."', obj_id='".($annonce->reference)."', title='".($annonce->titre)."', description='".($annonce->texte)."', created='".($annonce->date_saisie)."', path='".($annonce->photo)."', type='".($annonce->code_type)."', pcode='".($annonce->code_postal)."', town='".($annonce->ville)."', homes_size='".($annonce->surface)."', rooms='".($annonce->nb_pieces)."', price='".($annonce->prix)."', id='".($annonce->type)."' ") or die("Erreur MySQL : ".mysql_error());
Quand j'insère dans une seule table ça fonctionne par contre quand je veux inserer dans les differentes tables voilà le message d'erreur que j'ai

Code : Tout sélectionner

Erreur MySQL : 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 'AND jos_estateagent_categories AND jos_estateagent_images SET created_by='OPTIM' at line 1
Merci de votre compréhension, je suis débutant.
Nats

ViPHP
ViPHP | 3300 Messages

22 avr. 2009, 01:31

un insert = une table, il faut exécuter plusieurs reqêtes sql distinctes. ou passer plusieurs inserts séparés par des ; dans un appel mysql(i)_query
Fait du php depuis que ca existe ou presque :)

Eléphanteau du PHP | 38 Messages

22 avr. 2009, 06:03

un insert = une table, il faut exécuter plusieurs reqêtes sql distinctes. ou passer plusieurs inserts séparés par des ; dans un appel mysql(i)_query
Merci beaucoup Nagol pour ta reactivité.

Un problème en amenant un autre je n'arrive pas à récupérer les valeurs de <photo></photo> et de <type></type>.
L'insertion se fait mais elle est vierge.

Code : Tout sélectionner

<?include "_connexion.php";?> <?php $optimhome_xml = simplexml_load_file('exemple.xml'); foreach ($optimhome_xml ->annonce as $annonce) { mysql_query("INSERT INTO jos_estateagent SET created_by='".($annonce->client)."', obj_id='".($annonce->reference)."', title='".($annonce->titre)."', description='".($annonce->texte)."', created='".($annonce->date_saisie)."', type='".($annonce->code_type)."', pcode='".($annonce->code_postal)."', town='".($annonce->ville)."', homes_size='".($annonce->surface)."', rooms='".($annonce->nb_pieces)."', price='".($annonce->prix)."'") or die("Erreur MySQL : ".mysql_error()); } foreach ($optimhome_xml ->prestation as $prestation){ mysql_query("INSERT INTO jos_estateagent_categories SET name='".($prestation->type)."'") or die("Erreur MySQL : ".mysql_error()); } foreach ($optimhome_xml ->photo as $photo){ mysql_query("INSERT INTO jos_estateagent_images SET path='".($prestation->photo)."'") or die("Erreur MySQL : ".mysql_error()); } ?>
Voci mon xml



Merci d'avance

Code : Tout sélectionner

<?xml version='1.0' encoding='windows-1252'?> <annonces> <annonce> <client>OPTIMHOME</client> <reference>123456</reference> <titre>APPARTEMENT A ARGENTEUIL</titre> <texte>(95) ARGENTEUIL – F4 LUMINEUX (BAIES VITREES) ET FONCTIONNEL, COMPOSE DE : ENTREE, SEJOUR, CUIS EQUIP INDEPENDANTE, 3 CHAMBRES, 2 DRESSING, PLACE DE PARKING PRIVEE, GARDIEN, INTERPHONE. ECOLES, GARE ET COMMERCES SUR PLACE. A DECOUVRIR : CONTACTER LYES AGENT MANDATAIRE 95 AU</texte> <date_saisie>09/11/2008</date_saisie> <photos> <photo>http://www.optimhome.com/images/upload/biens/A-abdly-1010365413-P.jpg</photo> <photo>http://www.optimhome.com/images/upload/biens/A-abdly-1010365413-P.jpg</photo> <photo>http://www.optimhome.com/images/upload/biens/A-abdly-1010365413-P.jpg</photo> <photo>http://www.optimhome.com/images/upload/biens/A-abdly-1010365413-P.jpg</photo> <photo>http://www.optimhome.com/images/upload/biens/A-abdly-1010365413-P.jpg</photo> <photo>http://www.optimhome.com/images/upload/biens/A-abdly-1010365413-P.jpg</photo> </photos> <agence> <telAgence>06 34 00 55 23</telAgence> <emailAgence>[email protected]</emailAgence> <nomAgence>Agent mandataire Optimhome Test</nomAgence> </agence> <bien> <code_type>APPARTEMENT</code_type> <code_postal>95100</code_postal> <ville>ARGENTEUIL</ville> <code_insee approximatif='false'></code_insee> <surface>130</surface> <nb_pieces>4</nb_pieces> <prix>235000</prix> </bien> <prestation> <type>VENTE</type> </prestation> </annonce> </annonces>
Nats

ViPHP
ViPHP | 3300 Messages

22 avr. 2009, 15:26

tes variables :)

foreach ($optimhome_xml ->photo as $photo)

mais

$prestation->photo

tu peux tout faire avec une seule boucle (et faire plusieurs inserts à l'intérieur) ca devrait clarifier le tout (et puis les boucles faut limiter c'est mieux niveau perf.
Fait du php depuis que ca existe ou presque :)

Eléphanteau du PHP | 38 Messages

23 avr. 2009, 11:43

tes variables :)

foreach ($optimhome_xml ->photo as $photo)

mais

$prestation->photo

tu peux tout faire avec une seule boucle (et faire plusieurs inserts à l'intérieur) ca devrait clarifier le tout (et puis les boucles faut limiter c'est mieux niveau perf.
Je ne te suis plus :oops:
J'aurais donc une erreur au niveau de mes variables.

Si j'ai bien compris

Code : Tout sélectionner

$optimhome_xml = simplexml_load_file('exemple.xml');
Me permet de récuperer le xml.

Code : Tout sélectionner

foreach ($optimhome_xml ->annonce as $annonce)
Chaque fois que je load le xml les données du xml sont contenues dans la variable $annonce.

J'aimerais savoir pourquoi je n'arrive pas à accéder aux données dans <photos></photos> et <prestation></prestation> et surtout comment y accéder.
Je pense avoir raté une étape au niveau de ton explication vu que je débute il doit y avoir un élément que je ne maitrise pas.

Peux tu également m'éclairer sur la syntaxe pour tout faire avec une seule boucle. Je suis tout honteux au milieu de vous experts je vous remercie d'avance pour votre aide.
Nats

Eléphanteau du PHP | 38 Messages

27 avr. 2009, 22:15

Avec ma méthode je n'arrive à récupérer les données que jusqu'à <date_saisie></date_saisie>. Comme vous l'avez compris j'aimerais traiter toutes les données du xml et je n'ai toujours pas trouvé la solution.
Merci d'avance
Nats