[RESOLU] INSERT INTO n'insert pas tout

Avatar du membre
Eléphant du PHP | 224 Messages

30 mars 2016, 03:40

Bonjour à tous,

Je suis confronté à un problème sur lequel je n'arrvie pas à m'en sortir :(

J'importe des données depuis un fichier csv vers une base de données.
Chaque ligne correspond à une alarme sur une machine de tri.
Je ne peux pas changer la structure du fichier (remplacer le , par ; ou autre bidouille du genre), je peux seulement supprimer des lignes, notamment les 4 premières qui sont les titres et qui ne m'intéressent pas.
Soit, là n'est pas le souci principal.

Chaque ligne est structurée de cette façon :
Unite trieur,ID Alarme,Heure debut,Heure fin,SH01-IUH01,SH01 Injection Colis trop large,29/03/2016 21:40:25,29/03/2016 21:40:48
Je fais un while comme ceci

Code : Tout sélectionner

while (($objArr = fgetcsv($objCSV, 1000, ",", "\"")) !== FALSE)
Les 4 premiers champs ne m’intéressent pas , je commence donc le travail à partir de

Code : Tout sélectionner

$objArr[4]
que j'appelle

Code : Tout sélectionner

$inj_name
(car c'est le nom de l'équipement machine). Dans l'exemple, cela correspond dont à SH01-IUH01 .
Nous avons 14 équipements donc 14 noms différents, mais des centaines d'alarmes possibles.
Le souci c'est que dès lors qu'un nom d’équipement a été inséré dans la base mySQL , les alarmes suivantes du même équipement ne sont pas insérés.
Pourtant, si dans le while je liste chaque ligne (les echo), toutes les alarmes apparaissent.

Voici la partie pertinente de mon code php :

Code : Tout sélectionner

$objCSV = fopen("import/".$_FILES["fileCSV"]["name"], "r"); $i = 1; echo "<table border=1>"; while (($objArr = fgetcsv($objCSV, 1000, ",", "\"")) !== FALSE) { $inj_name = $objArr[4]; $inj_dft = $objArr[5]; $inj_debut = $objArr[6]; echo "<tr><td>"; echo $i."</td><td>"; echo $inj_name."</td><td>"; echo $inj_dft."</td><td>"; echo $inj_debut."</td><td>"; echo $inj_fin."</td></tr>"; $sql = "INSERT INTO inj_list (inj_i, inj_name, inj_dft,inj_debut, inj_fin) VALUES ('$i','$inj_name','$inj_dft','$inj_debut','$inj_fin')"; $sql = mysql_query($sql); $i = $i+1; } fclose($objCSV); echo "</table>";
L'importation n'importe que 14 lignes au lieu de toutes.
Je ne vois pas à quel endroit je fais erreur, d'autant plus que c'est du code que j'ai déjà utilisé pour un autre projet, et qui ne m'a pas posé de problème...

Merci pour votre aide et désolé pour le pavé lol
Couin
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen:

Avatar du membre
Eléphant du PHP | 224 Messages

30 mars 2016, 03:51

Bon, arf, je viens de trouver!
J'ai fais un export de la base et pour une raison que j'ignore, j'avais
UNIQUE KEY `priority` (`inj_name`)
J'ai modifié en
UNIQUE KEY `priority` (`id`)
et réimporté la base et cela fonctionne.

Je passe en résolu, au cas où ca puisse servir :)
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen: