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();
?>
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();
?>
Comment