insertion de donnees dans une table MySQL a partir d'un fichier texte

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Agathe

    #1

    insertion de donnees dans une table MySQL a partir d'un fichier texte

    Bonjour,

    Je souhaite insérer dans une table MySQL des données provenant d'un fichier
    texte grâce à un script PHP. Mon fichier porte l'extension "txt" et les
    données sont séparées par des ";'.

    J'ai créé un script qui upload le fichier texte sur le serveur et qui lit le
    contenu de chaque ligne, sépare chaque champ, puis stocke les données dans
    un tableau indicé pour ensuite insérer ces données dans une table MySQL.
    Mon script fonctionne bien, seulement je ne comprends pas pourquoi certains
    enregistrements ne sont pas pris en compte alors qu'ils semblent répondre au
    même formatage que les autres lignes du fichier texte.

    Sur 1357 enregistrements dans mon fichier texte, 194 ne sont pas pris en
    compte. Je n'en trouve pas la raison d'autant plus que qu'ils ne se suivent
    pas forcément, dans ce cas difficile pour moi de trouver un "dénominate ur
    commun" à ces 194 enregistrements ignorés de façon un peu "aléatoire" . J'ai
    "épluché" mon fichier texte sous toutes les coutures, je ne vois pas où se
    trouve la clé du mystère. A moins que cela puisse venir de mon script? Ça me
    parait peu probable puisque ce script se contente d'ouvrir le fichier texte,
    de le lire ligne à ligne, de faire un explode() pour séparer les données au
    niveau des ";", d'attribuer la valeur contenue dans chaque champ à une
    variable et enfin de récupérer grâce à une boucle les valeurs contenues dans
    ces variables pour les insérer dans ma table MySQL jusqu'à ce que la fin du
    fichier soit atteinte.

    Je ne reçois aucun message d'erreur.
    Je travaille avec PHP 4.2.0 et MySQL 3.23.49 (issu d'EasyPHP 1.6) sous WinXP
    pro.

    Je souhaitais savoir si quelqu'un avait déjà rencontré ce problème et si
    vous aviez une solution.

    Merci à tous

    Ci-dessous mon script :

    <?PHP
    require("funct/connexion.inc.p hp");
    require("funct/function_upload csv.inc.php");

    //upload csv

    if ($file_upload_n ame) {

    upload(
    $file_upload,
    $file_upload_na me,
    $file_upload_si ze,
    1000000
    );//1Mo max

    } else {
    header("Locatio n: importcsv.php?e rror=fichier");
    }//EndIf;

    //effacement de tous les enregistrements de la table avant l'import
    mysql_query("DE LETE FROM ma_table");

    //ouverture du fichier uploadé et lecture du contenu
    if ( file_exists($fi le_upload) ){
    $fp = fopen("$file_up load","r");
    } else {
    echo "<link href='../privatezone.css ' rel='stylesheet '
    type='text/css'>"."<p align='center' class='TexteNor mal'>Fichier
    introuvable, importation stoppée !</p>";
    exit();
    }//endif;

    while( !feof($fp) ) {
    $ligne = fgets($fp,4096) ;
    $liste = explode(";",$li gne);//crée le tableau des éléments séparés par des
    ;

    $civilitep = $liste[0];//la variable $civilitep reçoit la première valeur
    du tableau $liste etc.
    $prenomp = $liste[1];
    $nomp = $liste[2];
    $adressep = $liste[3];
    $cpp = $liste[4];
    $villep = $liste[5];
    $bdayp = $liste[6];
    $telp = $liste[7];
    $civilitepn = $liste[8];
    $prenompn = $liste[9];
    $nompn = $liste[10];
    $civilitemed = $liste[11];
    $prenommed = $liste[12];
    $nommed = $liste[13];
    $adressemed = $liste[14];
    $cpmede = $liste[15];
    $villemed = $liste[16];
    $telmed = $liste[17];
    $vide = $liste[18];
    $prescript = $liste[19];
    $typeprescript = $liste[20];
    $forfaitprescri pt = $liste[21];
    $humid = $liste[22];
    $deamb = $liste[23];
    $marqueapp = $liste[24];
    $modeleapp = $liste[25];
    $compteurapp = $liste[26];
    $consosapp = $liste[27];
    $insitupat = $liste[28];
    $observancep = $liste[29];
    $dernvisite = $liste[30];
    $procvisite = $liste[31];
    //comparer nom prénom de la table pour trouver id
    $sql1 = " SELECT id FROM table_utilisate urs WHERE nom = '$liste[10]' AND
    prenom = '$liste[9]' ";
    $query1 = mysql_query($sq l1);
    $rs1 = mysql_fetch_arr ay($query1);
    $varidpn = $rs1["id"];

    if( mysql_error() ){
    print "Erreur dans la base de données : ".mysql_error() ;
    print "<br>importatio n stoppée";
    fclose($fp);
    exit();
    } else {
    //insertion des données dans la table, découpage de l'instruction sur deux
    lignes
    $sql = "INSERT INTO ma_table (civilitep, prenomp, nomp, adressep, cpp,
    villep, bdayp, telp, idpn, civilitepn, prenompn, nompn, civilitemed,
    prenommed, nommed, adressemed, cpmed, villemed, telmed, prescription, type,
    forfait, humid, deamb, marque, modele, consos, insitu, observance,
    dernierevisite, prochainevisite )";
    $sql .= " VALUES ('$civilitep', '$prenomp',' $nomp', '$adressep', '$cpp',
    '$villep', '$bdayp', '$telp', '$varidpn', '$civilitepn', '$prenompn',
    '$nompn', '$civilitemed', '$prenommed', '$nommed', '$adressemed', '$cpmed',
    '$villemed', '$telmed', '$prescript', '$typeprescript ', '$forfaitprescr ipt',
    '$humid', '$deamb', '$marqueapp', '$modeleapp', '$consosapp', '$insitupat',
    '$observancep', '$dernvisite', '$procvisite')" ;
    $query = mysql_query($sq l);

    //affiche chaque ligne insérée pour controle
    echo $sql."<br><br>" ;

    }//endif;

    }//EndWhile;
    echo "<link href='../privatezone.css ' rel='stylesheet '
    type='text/css'>"."<p align='center' class='TexteNor mal'>"."Fichier importé
    avec succès</p>";
    echo " importation terminée, ";

    $sql3 = " SELECT * FROM ma_table ";//pour compter les enregistrements
    présents
    $query3 = mysql_query($sq l3);
    $nb = mysql_num_rows( $query3);
    echo $nb;
    echo " enregistrements insérés dans la table";

    fclose($fp);
    mysql_close();
    ?>



  • Michael Austin

    #2
    Re: insertion de donnees dans une table MySQL a partir d'un fichiertexte

    Agathe wrote:

    From GOOGLE translation tools:

    Hello, I wish to insert in a MySQL table of the data coming from a textual file
    thanks to a script PHP. My file carries the extension "txt" and the data are
    separated by ";'. I created a script which upload the textual file on the
    waiter and which reads the contents of each line, each field separates, then
    stores the data in a subscripted table for then inserting these data in a MySQL
    table. My script functions well, only I do not include/understand why certain
    recordings are not taken into account whereas they seem to answer the same
    formatting as the other lines of the textual file. On 1357 recordings in my
    textual file, 194 are not taken into account. I do not find of it the reason
    more especially as that they are not followed inevitably, in this case difficult
    for me to find a "common denominator" to these 194 ignored recordings in a
    "random" way a little. I "peeled" my textual file under all the seams, I do not
    see where the key of the mystery is. To less than that can come from my script?
    That appears not very probable to me since this script is satisfied to open
    the textual file, to read it line with line, to make a explode() to separate the
    data on the level from ";", to allot the value contained in each field to a
    variable and finally to recover thanks to a loop the values contained in these
    variables to insert them in my MySQL table until the end of the file is reached.
    I do not receive any error message. I work with PHP 4.2.0 and MySQL 3.23.49
    (resulting from EasyPHP 1.6) under WinXP pro. I wished to know if somebody had
    already encountered this problem and if you had a solution. Thank you with all

    [color=blue]
    > Ci-dessous mon script :
    >
    > <?PHP
    > require("funct/connexion.inc.p hp");
    > require("funct/function_upload csv.inc.php");
    >
    > //upload csv
    >
    > if ($file_upload_n ame) {
    >
    > upload(
    > $file_upload,
    > $file_upload_na me,
    > $file_upload_si ze,
    > 1000000
    > );//1Mo max
    >
    > } else {
    > header("Locatio n: importcsv.php?e rror=fichier");
    > }//EndIf;
    >
    > //effacement de tous les enregistrements de la table avant l'import
    > mysql_query("DE LETE FROM ma_table");
    >
    > //ouverture du fichier uploadé et lecture du contenu
    > if ( file_exists($fi le_upload) ){
    > $fp = fopen("$file_up load","r");
    > } else {
    > echo "<link href='../privatezone.css ' rel='stylesheet '
    > type='text/css'>"."<p align='center' class='TexteNor mal'>Fichier
    > introuvable, importation stoppée !</p>";
    > exit();
    > }//endif;
    >
    > while( !feof($fp) ) {
    > $ligne = fgets($fp,4096) ;
    > $liste = explode(";",$li gne);//crée le tableau des éléments séparés par des
    > ;
    >
    > $civilitep = $liste[0];//la variable $civilitep reçoit la première valeur
    > du tableau $liste etc.
    > $prenomp = $liste[1];
    > $nomp = $liste[2];
    > $adressep = $liste[3];
    > $cpp = $liste[4];
    > $villep = $liste[5];
    > $bdayp = $liste[6];
    > $telp = $liste[7];
    > $civilitepn = $liste[8];
    > $prenompn = $liste[9];
    > $nompn = $liste[10];
    > $civilitemed = $liste[11];
    > $prenommed = $liste[12];
    > $nommed = $liste[13];
    > $adressemed = $liste[14];
    > $cpmede = $liste[15];
    > $villemed = $liste[16];
    > $telmed = $liste[17];
    > $vide = $liste[18];
    > $prescript = $liste[19];
    > $typeprescript = $liste[20];
    > $forfaitprescri pt = $liste[21];
    > $humid = $liste[22];
    > $deamb = $liste[23];
    > $marqueapp = $liste[24];
    > $modeleapp = $liste[25];
    > $compteurapp = $liste[26];
    > $consosapp = $liste[27];
    > $insitupat = $liste[28];
    > $observancep = $liste[29];
    > $dernvisite = $liste[30];
    > $procvisite = $liste[31];
    > //comparer nom prénom de la table pour trouver id
    > $sql1 = " SELECT id FROM table_utilisate urs WHERE nom = '$liste[10]' AND
    > prenom = '$liste[9]' ";
    > $query1 = mysql_query($sq l1);
    > $rs1 = mysql_fetch_arr ay($query1);
    > $varidpn = $rs1["id"];
    >
    > if( mysql_error() ){
    > print "Erreur dans la base de données : ".mysql_error() ;
    > print "<br>importatio n stoppée";
    > fclose($fp);
    > exit();
    > } else {
    > //insertion des données dans la table, découpage de l'instruction sur deux
    > lignes
    > $sql = "INSERT INTO ma_table (civilitep, prenomp, nomp, adressep, cpp,
    > villep, bdayp, telp, idpn, civilitepn, prenompn, nompn, civilitemed,
    > prenommed, nommed, adressemed, cpmed, villemed, telmed, prescription, type,
    > forfait, humid, deamb, marque, modele, consos, insitu, observance,
    > dernierevisite, prochainevisite )";
    > $sql .= " VALUES ('$civilitep', '$prenomp',' $nomp', '$adressep', '$cpp',[/color]
    ^^^ remove extra space.
    [color=blue]
    > '$villep', '$bdayp', '$telp', '$varidpn', '$civilitepn', '$prenompn',
    > '$nompn', '$civilitemed', '$prenommed', '$nommed', '$adressemed', '$cpmed',
    > '$villemed', '$telmed', '$prescript', '$typeprescript ', '$forfaitprescr ipt',
    > '$humid', '$deamb', '$marqueapp', '$modeleapp', '$consosapp', '$insitupat',
    > '$observancep', '$dernvisite', '$procvisite')" ;
    > $query = mysql_query($sq l);[/color]

    You should also check the mysql_error() to see if it succeeded. If not display
    the error message. Some of your data may be trying to insert text into a numeric
    field. Numeric data should not be enclosed in ' ' as a general rule.

    [color=blue]
    >
    > //affiche chaque ligne insérée pour controle
    > echo $sql."<br><br>" ;
    >
    > }//endif;
    >
    > }//EndWhile;
    > echo "<link href='../privatezone.css ' rel='stylesheet '
    > type='text/css'>"."<p align='center' class='TexteNor mal'>"."Fichier importé
    > avec succès</p>";
    > echo " importation terminée, ";
    >
    > $sql3 = " SELECT * FROM ma_table ";//pour compter les enregistrements
    > présents
    > $query3 = mysql_query($sq l3);
    > $nb = mysql_num_rows( $query3);
    > echo $nb;
    > echo " enregistrements insérés dans la table";
    >
    > fclose($fp);
    > mysql_close();
    > ?>
    >
    >
    >[/color]


    --
    Michael Austin.
    Donations welcomed. Http://www.firstdbasource.com/donations.html
    :)

    Comment

    Working...