Fonction inserant les donnees d'un fichier xml dans une bdd mysql

Soyez le premier à donner votre avis sur cette source.

Vue 10 428 fois - Téléchargée 953 fois

Description

Ok, c'est une simple fonction que j'ai ecrite suite a un message sur le forum. Le but etait d'inserer dans une base de donnees Mysql des donnees provenant d'un fichier xml.

Cette fonction ne fait que des insert into.
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.

Voila, c'est tout.

Source / Exemple :


Fichier test.xml
-----------------
<?xml version="1.0" encoding="UTF-8"?>

<exportcontact>
    <contact>
        <nom>Toto</nom>
        <prenom>Titi</prenom>
        <numero type="tel portable" >0633333330</numero>       
    </contact>

    <contact>
        <nom>dupont</nom>
        <prenom>Pierre</prenom>
        <numero type="tel fixe" >04946986980</numero>       
    </contact>

</exportcontact>

Fonction 
-------------
<?php
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;
}
?>

Exemple d'appel
----------------
<?php
$arrElem = array ('NOM', 'PRENOM', 'NUMERO', 'TYPE');
$arrSql = array ('nom', 'prenom', 'telephone', 'type');
if (($arrRequetes = insertXml ($arrElem, $arrSql, 'matable', 'test.xml'))!== false) {
    echo 'OK<pre>';
    print_r ($arrRequetes);
    echo '</pre>';
}
else
    echo '<br /><br />Erreur, false retourne';
?>

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

malalam
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
heu, desole pour l'indentation, il semble que le copier-coller ait eu un probleme...
pappolypheme
Messages postés
6
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
31 juillet 2005
-
comment faire pour mettre une vieille conversation msn en XML dans une base de donénes ? merci :D

(je sais, je suis un incapable)
malalam
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Ben essaye avec ce code, ca devrait fonctionner en fait.
schwera92
Messages postés
1
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
27 juillet 2005
-
ji arrive pas est sa m'enerve
voila mon fichier xml n'est pas sur le même ftp que le mien ses grave???
le scripts et il complet ??ou sinon ou met ton la BDD le PW le login et tous le reste??
merci d'avances
malalam
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Oups, désolé de ne pas m'être occupé de toi, je n'avais pas reçu ce message dans mes emails.
Donne moi ton code, ce sera plus simple, je t'expliquerai ce qui est faux.
La connection à la bdd doit évidemment se faire avant de lancer ce script.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.