no save
Assistance
Achat
News

Forum | programmation
php import données .csv dans mysql
stefart, le jeu. 24 avr. 2008 à 15:48:19
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>&nbsp;</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


kilian
avr. 08
Suivant
REPONSES
kilian
avr. 08
kilian
avr. 08
stefart
avr. 08
stefart
avr. 08
Amen
avr. 08
stefart
avr. 08
kilian
avr. 08
kilian
avr. 08
stefart
avr. 08
kilian
avr. 08
Version Web
Réalisé par RedShift
no save