Import csv vers Mysql

  • Auteur de la discussion Auteur de la discussion amazigh25
  • Date de début Date de début
WRInaute impliqué
Bonjour

Pour un site j'ai eu besoin de faire un petit script pour importer des fichies csv vers une table Mysql.
Voici le script :

Code:
<?

mysql_connect('localhost', 'root', '');
mysql_select_db('mabase');

$row = 1;
$handle = fopen ("fichier.csv","r");
while ($data = fgetcsv($handle, 1000, ";")) 
{


mysql_query("INSERT INTO matable(`id`, `marque`, `cartouche`, `Descriptif`, `Imprimante`, `fournisseur`, `url`) VALUES('".$row."', '".$data[0]."', '".$data[1]."', '".$data[2]."', '".$data[3]."', '".$data[4]."', '".$data[5]."')");

   
  $row++;
}
fclose ($handle);
?>

Le script n'affiche aucune erreur lors de son execution mais quand je vérifie si tous les enregistrements ont été importés je remarque qu'il ne le sont pas tous.
Exemple : De 1412 enregistrements juste 663 sont importés.

Questions :
Comment importés tous les enregistrements ?
Comment faire pour que les anciens enregistrements ne soit pas suprimés lors de l'import d'un nouveau fichier csv ?


Merci d'avance
 
WRInaute passionné
Tu peux te simplifier la vie en utilisant la syntaxe LOAD DATA INFILE de mySQL.
http://dev.mysql.com/doc/refman/4.1/en/load-data.html

La syntaxe va ressembler à un truc de ce style
Code:
LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\n';

tu peux définir quels sont les séparateur de champ, les fins de ligne, les caractères qui entourent tes champs, etc....

Pour gérer l'import tu as aussi l'option IGNORE | REPLACE.
Cette option permet de savoir si tu remplace ou non les enregistrements déjà existant.
Dans ton cas tu veux l'option : IGNORE
Code:
LOAD DATA INFILE IGNORE 'data.txt' INTO TABLE tbl_name
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\n';

Pour les lignes en erreur, il est possible que certaines lignes de ton fichier ne respectent pas les règles de ta table.
 
WRInaute impliqué
Salut
Merci spidetra j'ai réussi à régler ce problème.

J'ai une autre question s'il vous plait.

Dans une table 'imprimantes' il y'a plusieurs champs (id, marque, imprimante, cartouche, fournisseur ... ).
Dans une page je voudrais lister toutes les marques ça parrait facile :
Code:
mysql_connect($host, $username, $password);
mysql_select_db($dbname);
$reponse = mysql_query("SELECT marque FROM imprimantes"); 

while ($donnees = mysql_fetch_array($reponse) )
{
?>

<p><?php echo $donnees['marque']; ?>  </p>
<?php
}
mysql_close();
?>
Le problème ici c'est que dans la page où je met ce code, j'obtient plusieurs fois la même marque puisque plusieurs imprimantes peuvent avoir la même marque.
Comment faire pour afficher toutes la marque sans doublons ?

Merci encore
 
WRInaute passionné
amazigh25 a dit:
Salut
Merci spidetra j'ai réussi à régler ce problème.

J'ai une autre question s'il vous plait.

Dans une table 'imprimantes' il y'a plusieurs champs (id, marque, imprimante, cartouche, fournisseur ... ).
Dans une page je voudrais lister toutes les marques ça parrait facile :

....

Le problème ici c'est que dans la page où je met ce code, j'obtient plusieurs fois la même marque puisque plusieurs imprimantes peuvent avoir la même marque.
Comment faire pour afficher toutes la marque sans doublons ?

Merci encore

DISTINCT est ton ami. Modifie ta requête.

Code:
SELECT DISTINCT marque FROM imprimantes
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut