PHP : gestion fichiers xml

Eléphanteau du PHP | 14 Messages

21 févr. 2013, 15:59

bonjour ,

voilà je travail sur phpMyAdmin , j'ai deux tables de test : "ancienne" et "nouvelle" dont voici les fichiers xml : ( je voudrais importer dans la table nouvelle les occurrences de l'ancienne table pour cela j'ai pensé à faire une lecture grâce à : simplexml_load_file mais lorsque dans phpMyAdmin j'importe mon script ça ne fonctionne pas )

<pma:database name="testXml" collation="latin1_swedish_ci" charset="latin1">
<pma:table name="ancienne">
CREATE TABLE `ancienne` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nom` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
</pma:table>
</pma:database>
</pma:structure_schemas>

<!--
- Base de données: 'testXml'
-->
<database name="testXml">
<!-- Table ancienne -->
<table name="ancienne">
<column name="id">1</column>
<column name="nom">bob</column>
</table>
<table name="ancienne">
<column name="id">2</column>
<column name="nom">toto</column>
</table>
</database>
</pma_xml_export>


et pour la nouvelle :
<pma:structure_schemas>
<pma:database name="testXml" collation="latin1_swedish_ci" charset="latin1">
<pma:table name="nouvelle">
CREATE TABLE `nouvelle` (
`nouv_id` int(11) NOT NULL AUTO_INCREMENT,
`nouv_name` text NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`nouv_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
</pma:table>
</pma:database>
</pma:structure_schemas>

<!--
- Base de données: 'testXml'
-->
<database name="testXml">
<!-- Table nouvelle -->
<table name="nouvelle">
<column name="nouv_id">1</column>
<column name="nouv_name">titi</column>
<column name="date">2013-02-21 13:00:51</column>
</table>
</database>
</pma_xml_export>

script : <?php
$test_xml = simplexml_load_file('test.xml');
foreach ($ancienne ->ancienne as $ancienne) {
print "Id : {$ancienne->id} <hr />\n";
print "Nom : {$acienne->nom} <br />\n";
mysql_query("INSERT INTO nouveau SET nouv_id='".($ancienne->id)."' AND nouv_name='".($ancienne->nom)."'") or die("Erreur MySQL : ".mysql_error());
}
?>

pourriez vous me débloquer svp

Mammouth du PHP | 504 Messages

21 févr. 2013, 17:11

Etant donné que tes tables sont créées

Pourquoi pas une opération dans phpmyadmin

UPDATE nouvelle_table SET nlle_table.id=ancienne_table.id

par ex pour mise a jour de l'id.

Eléphanteau du PHP | 14 Messages

21 févr. 2013, 17:14

je veux passer par xml car c'est juste un test afin de le faire par la suite sur des bases de plus de 1000 occurences . je voudrais lire les informations de mon fichier xml de mon ancienne base et le transférer dans la nouvelle base

Mammouth du PHP | 504 Messages

21 févr. 2013, 17:21

Code : Tout sélectionner

mysql_query("INSERT INTO nouveau SET nouv_id='".($ancienne->id)."' AND nouv_name='".($ancienne->nom)."'") or die("Erreur MySQL :
J'ai lu ça dan ton code ??

Je crois que c'est déjà plutot un ça

INSERT INTO ( ) values ()

ou UPDATE table SET ...

dans le cas ou tu utiliserais l'un ou l'autre, je te conseille de relire la doc pour l'insertion des données.

Eléphanteau du PHP | 14 Messages

21 févr. 2013, 17:27

oui j'ai vu mon erreur pas longtemps après que j'ai poster .. #-o mais du coup maintenant je sais plus quoi faire .
ce que je pensais faire au départ comme les bases sont différentes je voulais en php lire le fichier xml de l'ancienne base et créer par la suite un fichier avec le résultat qui me servira pour remplir ma deuxième base . Or voilà ou j'en suit :
<?php
$test_xml = simplexml_load_file('test.xml');

Mammouth du PHP | 504 Messages

21 févr. 2013, 17:48

relis la doc sur simple_xml

Tu dois différencier les balises, des attributs.

Code : Tout sélectionner

<?php $test_xml = simplexml_load_file('test.xml'); foreach ($ancienne ->ancienne as $ancienne) { print "Id : {$ancienne->id} <hr />\n"; print "Nom : {$acienne->nom} \n"; mysql_query("INSERT INTO nouveau SET nouv_id='".($ancienne->id)."' AND nouv_name='".($ancienne->nom)."'") or die("Erreur MySQL : ".mysql_error()); } ?>
ici tu confond un peu tout.

Pour commencer

Code : Tout sélectionner

- Base de données: 'testXml' --> <database name="testXml"> <!-- Table ancienne --> <table name="ancienne"> <column name="id">1</column> <column name="nom">bob</column> </table> <table name="ancienne"> <column name="id">2</column> <column name="nom">toto</column> </table> </database>
ici les balise sont database, table, column

les attibuts (relatifs à chaque balise) sont name.

lire une balise par exemple ->table
lire un attribut ->table['name']

Tout est dans la doc simple_xml et l'insertion dans ta bdd, pareil.

Eléphanteau du PHP | 14 Messages

21 févr. 2013, 17:54

je suis perdu .. :oops: :oops:
1 journée bloqué dessus , je comprend pas comment tout lire pour ensuite placer les champs que je veux de mon ancienne base où je le veux dans ma nouvelle base

Mammouth du PHP | 504 Messages

21 févr. 2013, 18:10

regarde ce topic, c'est pareil. exactement la meme chose.

php-debutant/xml-classer-dans-ordre-t267225.html

Eléphant du PHP | 120 Messages

22 févr. 2013, 00:02

C'est une mauvaise idée. Pour transférer le contenu d'une base de données vers une autre, il y a des moyens très simples comme mysqldump.
Si ton hébergeur ne met pas ça à ta disposition : change d'hébergeur (ou installe PHPMyAdmin qui peut dumper les données aussi). 10000 données, ce n'est rien du tout - surtout si le dump est zippé.

Eléphanteau du PHP | 14 Messages

22 févr. 2013, 11:05

Merci de ta réponse perrine :)
Une fois que j'ai effectué un dump comment je fait pour tout transférer et que les attributs concordent bien avec les attributs de la nouvelles tables ; parce que j'ai quand même un fichier avec 3000 occurrences

Mammouth du PHP | 504 Messages

22 févr. 2013, 11:24

Re, alors vu ta réponse à Perine, je suis un peu perdu.

ton ancienne base est dans un fichier xml ou dans une bdd que tu consulte sur phpmyadmin ?

Eléphanteau du PHP | 14 Messages

22 févr. 2013, 11:32

bjr , on est deux à être perdue ..
je suis sur phpMyAdmin , mes tables sont deçu et j'ai extrait de phpMyAdmin mes tables dans un fichier xml
afin de transférer les données de l'ancienne table vers la nouvelle qui n'a pas les mêmes attributs

Mammouth du PHP | 504 Messages

22 févr. 2013, 11:50

Bon, ok.

Sur phpmyadmin, dans la meme base, tu as apparement tes 2 tables (l'ancienne et la nouvelle). Si tu n'as que l'ancienne, tu créée la nouvelle.

ton ancienne table contient les champs.

Tu peux copier tes champs d'une table à l'autre avec la commande que je t'ai donné hier
UPDATE nouvelle_table SET nlle_table.id=ancienne_table.id 
pour l'id.

une fois que tu as défini la structure de ta nouvelle table tu copies les donnée de ton champ ancienne table dans la nouvelle.

Si tu veux créer un nouveau jeu avec 2 champs ou plus de ton ancienne base vers la nouvelle, tu peux fusionner tes champs avec la commande CONCAT
par exemple
update zeTable set grosChamp=CONCAT(champ1, ' ', champ2);

Eléphanteau du PHP | 14 Messages

22 févr. 2013, 11:55

Mes deux tables sont déjà crée , je veux juste importer que les données pas faire une table . mais la j'ai pas bcp d'attributs donc pour ta methodes j'y ai déjà pensé c'est pas compliqué

Mammouth du PHP | 504 Messages

22 févr. 2013, 12:01

Tu as des attribut dans ta bdd ?? Dans ton phpmyadmin, tu n'as que des tables et des champs qui ont des valeurs.

Donc avec la commande que je t'ai donné, tu peux copier les valeurs des champs d'une table vers une autre.