Bonjour à tous, je souhaite envoyer des données d'un fichier xml vers une base mysql. Pour ceci j'ai trouvé une fonction sur le net (des commentaires sur celle ci disent qu'elle marche).
Voila la table de ma base ou je veu ecrire:
idmoto
marque
modele
une partie de mon code xml:
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?xml version="1.0" encoding="ISO-8859-1" ?> <liste> <moto> <idmoto>1</idmoto> <marque>ducati</marque> <modele>748</modele> <photo>ducati748.jpg</photo> <couleur>Rouge</couleur> <annee>1999</annee> <kilometre>18000</kilometre> <prix>10000</prix>
la fonction :
les consignes de son auteur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48 function insertXml ($arrElem, $arrChamps, $table, $fichierXml) { $xml_parseur = xml_parser_create(); $fp = fopen($fichierXml, "r") or die("Fichier introuvable. L'analyse a ete suspendue"); while ($fdata = fread($fp, filesize ($fichierXml))){ xml_parse_into_struct ($xml_parseur, $fdata, $arrOutput) or die (sprintf("Erreur XML : %s à la ligne %d\n", xml_error_string(xml_get_error_code($xml_parseur)), xml_get_current_line_number($xml_parseur)) ); } foreach ($arrOutput as $elem) { if (in_array ($elem['tag'], $arrElem)) { $arrReq[$elem['tag']][] = $elem['value']; if (is_array ($elem['attributes'])){ foreach ($elem['attributes'] as $clef => $attr) { if (in_array ($clef, $arrElem)) { $arrReq[$clef][] = $attr; } } } } } if (is_array ($arrReq)) { $cpt = count ($arrReq[$arrElem[0]]); $strChamps = ''; foreach ($arrChamps as $champ) { $strChamps .= '"'.$champ.'",'; } $strChamps = rtrim ($strChamps, ','); $i = 0; while ($i < $cpt) { $strTmp = ''; foreach ($arrReq as $clef => $dump) { $strTmp .= '"'.$arrReq[$clef][$i].'",'; } $strTmp = rtrim ($strTmp, ','); $requeteTmp[] = $strTmp; $i ++; } $i = 0; while ($i < $cpt) { $requete[] = 'INSERT INTO '.$table.' ('.$strChamps.') VALUES ('.$requeteTmp[$i].')'; $i ++; } return $requete; } return false; }
et voila comment je l'appele:Les parametres a passer :
- $arrElem : tableau contenant tous les elements du fichier XML a inserer dans la BDD. C'est un tableau simple : array ('elem1', 'elem2'...). Les attributs doivent y etre mis de la meme maniere (si attributs il y a), ils seront inseres aussi dans un champ a part. Ex : array ('elem1', 'elem2', 'attr1'...)
- $arrChamps : les champs de votre base de donnees. Ces champs DOIVENT etre dans le meme ordre que les elenmts et attributs a inserer. De meme, evidemment, il doit y avoir dans ces 2 tableaux le meme nombre d'elements.
- $table : le nom de votre table.
- $fichierXml : le fichier xml.
Mon erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $arrElem = array ('idmoto', 'marque', 'modele'); $arrSql = array ('idmoto', 'marque', 'modele'); if (($arrRequetes = insertXml ($arrElem, $arrSql, 'import', 'ListeMotoOcaz.xml'))!== false) { echo 'OK<pre>'; print_r ($arrRequetes); echo '</pre>'; } else echo '<br /><br />Erreur, false retourne';
que faut il modifier? merci d'avanceNotice: Undefined variable: arrReq in e:\program files\easyphp1-7\www\motos\import.php on line 26
Erreur, false retourne
Partager