Bonjour a vous,
je cherche a importer des données d'excel (format .csv) dans ma base mysql via un script php que j'ai trouvé sur CCM (merci Doctormad au passage) :
http://www.commentcamarche.net/forum/affich 465200 importer des feuilles excel dans mysql
Je l'ai adapté a mes besoins et ca marche bien mais malheureusement qu'un seule foi !
En effet lors du deuxième test, l'import ne prend que la 1 ligne de la feuille en m'indique l'erreur suivante :
Duplicate entry '127' for key 1
Et ca ne remarche que si je vide ma table et que je relance le script
Je me casse la tête sur le problème et je ne comprend pas pourquoi !
voici le script de d'import :
<table width="505" border="1" align="center" cellpadding="2" cellspacing="0" bgcolor="#eeeeee">
<tr>
<td> </td>
<td>codebarre</td>
<td>Marque</td>
<td>QTY</td>
<td>Prix vente </td>
<td>Decsr</td>
</tr>
<?php
// vérification sur la session authentification (la session est elle enregistrée ?)
// ici les éventuelles actions en cas de réussite de la connexion
require_once('config.php');
//=========================
// Traitement des donnees
//=========================
//recupere le nom du fichier indiqué par l'user
$fichier=$_FILES["userfile"]["name"];
// ouverture du fichier en lecture
if ($fichier)
{
//ouverture du fichier temporaire
$fp = fopen ($_FILES["userfile"]["tmp_name"], "r");
}
else{
// fichier inconnu
?>
<p align="center" >- Importation échouée -</p>
<p align="center" ><B>Désolé, mais vous n'avez pas spécifié de chemin valide ...</B></p>
<?php
exit();
}
// declaration de la variable "cpt" qui permettra de compter le nombre d'enregistrement réalisé
$cpt=0;
?>
<p align="center">- Importation Réussie -</p>
<p align="right"><a href="#bas">Bas de page</a></p>
<?php
// importation
while (!feof($fp))
{
$ligne = fgets($fp,4096);
// on crée un tableau des élements séparés par des points virgule
$liste = explode(";",$ligne);
// premier élément
$liste[0] = ( isset($liste[0]) ) ? $liste[0] : Null;
$liste[2] = ( isset($liste[2]) ) ? $liste[2] : Null;
$liste[3] = ( isset($liste[3]) ) ? $liste[3] : Null;
$liste[5] = ( isset($liste[5]) ) ? $liste[5] : Null;
$liste[6] = ( isset($liste[6]) ) ? $liste[6] : Null;
$liste[7] = ( isset($liste[7]) ) ? $liste[7] : Null;
$champs1=$liste[0]; // id
$champs2=$liste[2]; // code barre
$champs3=$liste[3]; // marque
$champs4=$liste[5]; // quantité
$champs5=$liste[6]; // prix
$champs6=$liste[7]; // titre description
// pour eviter qu un champs "nom" du fichier soit vide
if ($champs1!='')
{
// nouvel ajout, compteur incrémenté
$cpt++;
// requete et insertion ligne par ligne
// champs1 id en general donc on affecte pas de valeur
$sql= "INSERT INTO annonces (codebarre,marque,quantite,prix,titre)
VALUES('$champs2','$champs3','$champs4','$champs5','$champs6') ";
//exécution de la requête SQL:
$requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
//suppr la ligne qui comporte le nom des colonnes
$champs3="Marque";
mysql_query("DELETE FROM annonces WHERE (Marque='$champs3')");
?>
<tr>
<td width="124">Eléments importés :</td>
<td width="361"><?php echo $champs2;?></td>
<td width="361"><?php echo $champs3;?></td>
<td width="361"><?php echo $champs4;?></td>
<td width="361"><?php echo $champs5;?></td>
<td width="361"><?php echo $champs6;?></td>
</tr>
<?php
}
}
// fermeture du fichier
fclose($fp);
//on supprime la derniere car elle est vide
//==================
// FIN
//==================
?>
</table>
<br><br>Nombre de valeurs nouvellement enregistrées: <b><?php echo $cpt;?></b>
Quelqu'un peut il me dire ce qui ne va pas ou bien alors une petite solution ne serait pas de refus !
merci beaucoup !
--
--Configuration: Windows XP
Firefox 2.0.0.14

