Importation fichier csv dans mysql (php) [Résolu/Fermé]

Signaler
Messages postés
1
Date d'inscription
samedi 23 décembre 2006
Statut
Membre
Dernière intervention
13 juin 2007
-
 kio -
Bonjour à tous,

voilà, je vous soumets mon problème que je tourne et retourne dans tous les sens..

J'ai un fichier csv de 500 lignes, dont une ligne d'entête, issu d'une application spécifique.
Lorsque je l'importe dans ma base mysql, (que ce soit en PHP ou avec easy php), seule la première ligne est importée.

J'ai donc essayé de supprimer cette première ligne.
J'ouvre mon fichier, et à partir de la deuxième ligne, je le recopie dans un nouveau fichier.
1- Si j'utilise fputcsv($fichier_new,$ligne,';'), le même problème apparaît sur $fichier_new
2- Si j'utilise une concaténation de champs séparés par des ";" avec un "\r\n" en fin de ligne, puis insertion dans un nouveau fichier avec fputs($fichier_new,$string), celà fonctionne en importation dans mysql avec load data infile, mais lorsque j'ouvre $fichier_new dans excel, j'ai des lignes blanches intercalées.

Comment résoudre mon problème?

Avec 5000 lignes çà va, mais avec 50000, j'ai peur de ne pas pouvoir ouvrir $fichier_new dans excel (limité à 65000 lignes je crois).

Merci de vos conseils....

2 réponses

// ****************************************************************** *
// ******Lire un csv et l'importer dans la base de donnée *
// ******2 fichiers nécessaires : formulaire.php et ajouter.php *
// *********l'un pour choisir le fichier csv et l'autre pour *
// ***************enregistrer dans la bdd *
**** le fichier csv doit etre du type ci dessous *
*** link,email *
*** www.mafonction.com,axel@tueslemeilleur.com *
*** www.csvfacile.com,csv@insert.com *
///************************************************************ *********




//formulaire.php
<form action="ajouter.php" method="post" enctype="multipart/form-data" name="form1">


<p><input type="file" name="file" /></p>

<input type="submit" name="Submit" value="Submit">
</form>


________________________________________________






//ajouter.php


//lire un csv et ajouter le couple email,url dans la base de donnee

if (isset($_FILES['file'])) {
$file = $_FILES['file']['tmp_name'];
$handle = fopen($file,'r');
$row = 1;
$handle = fopen("$file", "r");
while (($data = fgetcsv($handle, 4096, ",")) !== FALSE) {
$num = count($data);
//echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {

//je met les donnees en miniscule et detecte si l'email est dans la colonne 0 ou 1
//meme chose pour l'url


//je les transformes en miniscule
$data[1]=strtolower($data[1]);
$data[0]=strtolower($data[0]);
//je controle l'entete du csv
if ($data[1]=='emails' && $data[0] == 'links' ) $mode=1 ;
if ($data[1]=='email' && $data[0] == 'link' ) $mode=1 ;
if ($data[1]=='email' && $data[0] == 'links' ) $mode=1 ;
if ($data[1]=='emails' && $data[0] == 'link' ) $mode=1 ;


////meme chose pour le mode 2 il faut changer $data[0] par $data[1]
///c'est à dire si l'on souhaite avoir email,link, il faut recopier le
///meme code et changer tous les $data[0] par $data[1] et $data[1] par $data[0]


}




if ($mode==1)
{
//je controle l'email

$avant_arobase = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';
$nomdudomaine = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)';

$caract_allow_before_arobase = '/^' . $atom . '+' .
'(\.' . $avant_arobase . '+)*' .

'@' .
'(' . $nomdudomaine . '{1,63}\.)+' .

$domain . '{2,63}$/i';

// test de l'adresse e-mail
if (preg_match($caract_allow_before_arobase, $data[1])) {


}
else
{

$data[1] = NULL ;


}

$data[1]=strtolower($data[1]);
$data[0]=strtolower($data[0]);

//je controle tous les donnees s'il s'agit bien d'un url et d'un email
///dans le cas contraire, ils seront filtrées


$point = strpos($data[0],".");
if($point=='')
{
$data[0]=NULL;
}


$point = strpos($data[0],"@");
if($point=='')
{
$data[0]=$data[0];
}
else
{
$data[0]=NULL;
}










if ( $data[1] != NULL && $data[0] != NULL )
{
$numberdownload=$numberdownload+1;

$marequete = "INSERT INTO matable SET
monurl ='$data[0]' ,
monemail ='$data[1]'
";




$resultat=mysql_query ($marequete) or die (mysql_error());
}
}




}



//if ( $resultat ){ echo "<p> insertion with Succesfully </p> <p>
//" ;

//si des adresses ont ete enregistrer
if ($numberdownload>0){
echo " <p>You have downloaded $numberdownload combinaisons </p>";
echo "<p>The list Id is : $rowIdListNext </p>";
}

///si aucune adresse a ete enregistrer
if ($existadresse==0 && $numberdownload==0)
{
echo " <p> Error .. Your Csv file has a problem.</p>";
echo " <p> Please notice that your csv file has a header</p>";
}
//si les adresses existe deja
if ($existadresse>0 )
{
echo " <p>$existadresse combinaisons already exist! </p>";

}


//renvoie à la page qui a valider le formulaire...c'est à dire vers formulaire.php
$departure=$_SERVER['HTTP_REFERER'];//recover the adress which the user come from
echo "<meta HTTP-EQUIV=\"Refresh\" content=\"5;URL=$departure \"> " ;
                        
                
10
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
2
Date d'inscription
mercredi 15 juillet 2009
Statut
Membre
Dernière intervention
17 juillet 2009

bonjour,
j'ai essayer a importer un fichier csv dans easyphp mais il m'envoie un message d'erreur.
voila le message:
MySQL a répondu:Documentation
#1065 - Query est vide

merci de m'avoir repondre le plutot possible.
bonne journee. :)
quel est votre script php ???????