A voir également:
- Php import données .csv dans mysql
- Php import données .csv dans mysql ✓ - Forum - PHP
- Importer données .csv dans une BD MySQL ✓ - Forum - MySQL
- Importation fichier csv dans mysql (php) ✓ - Forum - PHP
- Importer fichier csv dans mysql avec phpmyadmin ✓ - Forum - PHP
- Batch pour importer plusieurs CSV dans Mysql ✓ - Forum - MySQL
6 réponses
kilian
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
Noon, j'ai compris!
Ta clé primaire c'est un tinyint et ça c'est mal!
Les tinyint ne vont que de -128 à 127 voilà ou est le problème! Il essaie de réincrémenter la clé primaire mais il peut pas, il est bloqué à 127, donc il prend 127 et comme ça existe déjà, ça plante.
Change le type de id_annonce en INT, là tu as de quoi faire (environ 2 milliard).
Ta clé primaire c'est un tinyint et ça c'est mal!
Les tinyint ne vont que de -128 à 127 voilà ou est le problème! Il essaie de réincrémenter la clé primaire mais il peut pas, il est bloqué à 127, donc il prend 127 et comme ça existe déjà, ça plante.
Change le type de id_annonce en INT, là tu as de quoi faire (environ 2 milliard).
xelnegga
- Messages postés
- 2
- Date d'inscription
- mercredi 8 avril 2009
- Statut
- Membre
- Dernière intervention
- 17 mars 2011
Salut,
Le sujet est vieux, mais comme il y a pas eu de réponse et que j'ai eu le même problème que stefart avec ce code (je tiens a remercier celui qui l'a partagé)
Deux heures à essayer de décortiquer le code m'ont ramené à la page de fgets de php.net
la réponse est dans l'un des commentaires:
Je viens de tester, ça marche nickel, il suffit de boucler sur fgets au lieu de feof
Le sujet est vieux, mais comme il y a pas eu de réponse et que j'ai eu le même problème que stefart avec ce code (je tiens a remercier celui qui l'a partagé)
Deux heures à essayer de décortiquer le code m'ont ramené à la page de fgets de php.net
la réponse est dans l'un des commentaires:
Some people try to call feof before fgets, and then ignoring the return value of fgets. This method leads to processing value FALSE when reaching the end of file. Bad example: <?php $f = fopen ("fgetstest.php", "r"); $ln= 0; while (! feof ($f)) { $line= fgets ($f); ++$ln; printf ("%2d: ", $ln); if ($line===FALSE) print ("FALSE\n"); else print ($line); } fclose ($f); ?> Good example: <?php $f = fopen ("fgetstest.php", "r"); $ln= 0; while ($line= fgets ($f)) { ++$ln; printf ("%2d: ", $ln); if ($line===FALSE) print ("FALSE\n"); else print ($line); } fclose ($f); ?>
Je viens de tester, ça marche nickel, il suffit de boucler sur fgets au lieu de feof
kilian
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
Salut,
Oui c'est au niveau de la base que ça coince, tu essaies de réinsérer des données déjà insérées. L'erreur se produit au niveau d'une colonne de la table annonce qui possède une contrainte d'unicité. C'est à dire qu'une valeur peut apparaitre qu'une et une seule fois.
Généralement c'est au niveau des clés primaires de table qu'il y a ce genre de contrainte. Mais là il y a une contrainte sur un autre champs puisque tu ne touches pas au champs id (comme tu le dis en commentaire).
Il faut trouver la colonne qui a une contrainte d'unicité.
Tu utilises phpMyAdmin?
Oui c'est au niveau de la base que ça coince, tu essaies de réinsérer des données déjà insérées. L'erreur se produit au niveau d'une colonne de la table annonce qui possède une contrainte d'unicité. C'est à dire qu'une valeur peut apparaitre qu'une et une seule fois.
Généralement c'est au niveau des clés primaires de table qu'il y a ce genre de contrainte. Mais là il y a une contrainte sur un autre champs puisque tu ne touches pas au champs id (comme tu le dis en commentaire).
Il faut trouver la colonne qui a une contrainte d'unicité.
Tu utilises phpMyAdmin?
stefart
- Messages postés
- 33
- Date d'inscription
- jeudi 28 février 2008
- Statut
- Membre
- Dernière intervention
- 10 juin 2008
salut Kilian,
merci déjà pour ta réponse très rapide
alors oui j'utilise bien phpMyAdmin
j'ai bien deux champs au format tinyint id_annonces et id_clients
d'ailleurs j'ai augmenter la capacité du champs id de tinyint(4) a tinyint(30) je pensai que ça pouvais avoir un effet mais finalement le problème est toujours là !!!
Mais voici la structure de ma table :
merci de ton aide
merci déjà pour ta réponse très rapide
alors oui j'utilise bien phpMyAdmin
j'ai bien deux champs au format tinyint id_annonces et id_clients
d'ailleurs j'ai augmenter la capacité du champs id de tinyint(4) a tinyint(30) je pensai que ça pouvais avoir un effet mais finalement le problème est toujours là !!!
Mais voici la structure de ma table :
CREATE TABLE `annonces` ( `id_annonce` tinyint(30) NOT NULL auto_increment, `date_saisie` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `titre` text collate latin1_german2_ci NOT NULL, `themes` varchar(30) collate latin1_german2_ci NOT NULL default '', `prix` decimal(10,2) NOT NULL default '0.00', `id_clients` tinyint(4) NOT NULL default '0', `img` varchar(100) collate latin1_german2_ci NOT NULL, `codebarre` varchar(100) collate latin1_german2_ci NOT NULL, `marque` varchar(100) collate latin1_german2_ci NOT NULL, `etat` varchar(100) collate latin1_german2_ci NOT NULL, `quantite` decimal(10,0) NOT NULL, PRIMARY KEY (`id_annonce`), KEY `id_clients` (`id_clients`) ) ENGINE=MyISAM AUTO_INCREMENT=65 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci COMMENT='Tb annonces' AUTO_INCREMENT=65 ;
merci de ton aide
kilian
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
Enfin le vrai problème c'est que tu réinsères des données qui ont déjà été insérées.
Amen
>
stefart
- Messages postés
- 33
- Date d'inscription
- jeudi 28 février 2008
- Statut
- Membre
- Dernière intervention
- 10 juin 2008
au fait comme la dit mon predecesseur tu reinsere les donne deja presente
Au fait la structure de ta table ne ne permet pas la duplication des donnee . Ton ie la premiere colonne est un autoincremente donc il ne peut pas inserer ce ki existe avt?
la solution ninsere pas les donne deja presente dans le fichier
Au fait la structure de ta table ne ne permet pas la duplication des donnee . Ton ie la premiere colonne est un autoincremente donc il ne peut pas inserer ce ki existe avt?
la solution ninsere pas les donne deja presente dans le fichier
kilian
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
Si c'est bien ça surtout n'hésite surtout pas à le dire, ça nous permettra de mettre la solution dans la faq.