By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,262 Members | 1,128 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,262 IT Pros & Developers. It's quick & easy.

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

P: n/a
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énominateur
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.php");
require("funct/function_uploadcsv.inc.php");

//upload csv

if ($file_upload_name) {

upload(
$file_upload,
$file_upload_name,
$file_upload_size,
1000000
);//1Mo max

} else {
header("Location: importcsv.php?error=fichier");
}//EndIf;

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

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

while( !feof($fp) ) {
$ligne = fgets($fp,4096);
$liste = explode(";",$ligne);//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];
$forfaitprescript = $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_utilisateurs WHERE nom = '$liste[10]' AND
prenom = '$liste[9]' ";
$query1 = mysql_query($sql1);
$rs1 = mysql_fetch_array($query1);
$varidpn = $rs1["id"];

if( mysql_error() ){
print "Erreur dans la base de données : ".mysql_error();
print "<br>importation 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', '$forfaitprescript',
'$humid', '$deamb', '$marqueapp', '$modeleapp', '$consosapp', '$insitupat',
'$observancep', '$dernvisite', '$procvisite')";
$query = mysql_query($sql);

//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='TexteNormal'>"."Fichier importé
avec succès</p>";
echo " importation terminée, ";

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

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

Jul 17 '05 #1
Share this Question
Share on Google+
1 Reply


P: n/a
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

Ci-dessous mon script :

<?PHP
require("funct/connexion.inc.php");
require("funct/function_uploadcsv.inc.php");

//upload csv

if ($file_upload_name) {

upload(
$file_upload,
$file_upload_name,
$file_upload_size,
1000000
);//1Mo max

} else {
header("Location: importcsv.php?error=fichier");
}//EndIf;

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

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

while( !feof($fp) ) {
$ligne = fgets($fp,4096);
$liste = explode(";",$ligne);//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];
$forfaitprescript = $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_utilisateurs WHERE nom = '$liste[10]' AND
prenom = '$liste[9]' ";
$query1 = mysql_query($sql1);
$rs1 = mysql_fetch_array($query1);
$varidpn = $rs1["id"];

if( mysql_error() ){
print "Erreur dans la base de données : ".mysql_error();
print "<br>importation 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', ^^^ remove extra space.
'$villep', '$bdayp', '$telp', '$varidpn', '$civilitepn', '$prenompn',
'$nompn', '$civilitemed', '$prenommed', '$nommed', '$adressemed', '$cpmed',
'$villemed', '$telmed', '$prescript', '$typeprescript', '$forfaitprescript',
'$humid', '$deamb', '$marqueapp', '$modeleapp', '$consosapp', '$insitupat',
'$observancep', '$dernvisite', '$procvisite')";
$query = mysql_query($sql);
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.


//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='TexteNormal'>"."Fichier importé
avec succès</p>";
echo " importation terminée, ";

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

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

--
Michael Austin.
Donations welcomed. Http://www.firstdbasource.com/donations.html
:)
Jul 17 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.