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 :
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;
}
les consignes de son auteur:
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.
et voila comment je l'appele:
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';
Mon erreur:
Notice: Undefined variable: arrReq in e:\program files\easyphp1-7\www\motos\import.php on line 26


Erreur, false retourne
que faut il modifier? merci d'avance