problème pendant exportation FORUMACTIF
Bonjour à tous, j'ai un message d'erreur lorsque je récupère les messages :
Erreur: Duplicata du champ '996' pour la clef 'PRIMARY'
Requête: "INSERT INTO forumactif_posts VALUES('996', '', '90', '1263767640', 'charlotte')"
j'ai déjà pris ca :
forumactif_forums Afficher Structure Rechercher Insérer Vider Supprimer 13 MyISAM utf8_general_ci 4,0 Kio -
forumactif_posts Afficher Structure Rechercher Insérer Vider Supprimer 55 MyISAM utf8_general_ci 3,6 Kio -
forumactif_topics Afficher Structure Rechercher Insérer Vider Supprimer 476 MyISAM utf8_general_ci 39,2 Kio -
3 table(s) Somme 544 MyISAM latin1_swedish_ci 46,8 Kio 0 o
J'ai éssayé de tout supprimer et de tout refaire : idem
J'ai éssayé avec d'autre genre (WAMP...)
Je suis bloqué :(
Merci pour votre aide chers être humains !
Erreur: Duplicata du champ '996' pour la clef 'PRIMARY'
En clair, tu ne peux pas dupliquer une clé primaire.
Une clé primaire à une valeur et cette valeur est unique.
Ton champ doit être en auto incrémente et ne précise pas l'identifiant dans ta requête
INSERT INTO forumactif_posts VALUES('', '', '90', '1263767640', 'charlotte')"
Merci pour ta réactivité, mais en fait j'utilise un script pour extraire une BDD forumactif..
Donc je ne sais rien modifier, c'est un fichier automatique
Franchement je suis vraiment perdu et surtout bloqué sur un point pendant que le script télécharge les messages du forum.
Comment je dois faire (concrètement étape par étape s'il te plait.. un vrai boulet je suis et je le sais :))
Coté MySQL
Tu te connectes à ton phpMyAdmin avec wamp.
Tu cliques sur ta base (je ne connais pas le nom de celle-ci)
Tu vas voir la liste de tes tables.
Tu cliques sur la table forumactif_posts puis sur structure (en haut dans les onglets)
Là tu regardes dans extra si ton champ est en "auto_increment" si c'est le cas tu ne fais rien, sinon tu cliques sur modifier(le crayon sur la ligne que tu souhaites modifier) et tu coches la case "auto_increment"
Maintenant coté PHP
Sur ta requête MySQl tu changes comme ça :
INSERT INTO forumactif_posts VALUES(NULL, '', '90', '1263767640', 'charlotte')
Tu places NULL pour valeur et normalement ça doit fonctionner.
Merci dark_nemo t'es une bombe, je vais tester ca de suite.
C'est super compliqué vraiment.
Je reviens vers toi dans quelques minutes
En fait le script réussi à prendre plein de messages jusqu'au 55 il bloque et me mets le message d'erreur.
Je ne sais donc pas si ton script à modifier va fonctionner, car il est seulement pour charlotte la apparemment alors que le mien est pour le tout
id bigint(4) UNSIGNED Non Aucun auto_increment
c'est bien affiché la
je vois pas ton script pour le remplacer par ce que tu m'a proposé, je vois plutot ca lorsque j'ouvre le fichier .php :
for ($i = 0; isset($Messages[0][$i])==true; $i++) //insere les messages dans la BDD
{
$total++;
$Auteur = mysql_real_escape_string(utf8_encode(html_entity_decode($Messages[5][$i])));
$Date = str_replace(array("Aujourd'hui à","Hier à"), array($aujourdhui,$hier), utf8_encode(html_entity_decode($Messages_suite[1][$i])));
preg_match('#.{3} (\d{1,2}) (.{3,4}) (\d{4}) - (\d{1,2}):(\d{1,2})#', $Date, $arrayDate);
$timestamp = mktime($arrayDate[4], $arrayDate[5], '0', $months[$arrayDate[2]], $arrayDate[1], $arrayDate[3]);
$sql = "INSERT INTO forumactif_posts VALUES('" . $Messages[2][$i] . "', '', '" . $topics['id'] . "', '" . $timestamp . "', '" . $Auteur . "')";
mysql_query($sql)or die('Erreur: ' . mysql_error() . '<br />Requête: "' . $sql . '"');
$total = progression($total);
C'était un exemple comme je n'avais rien pour écrire ta requête.
$Messages[2][$i] correspond à quoi dans ton tableau? Parce que là le problème (selon moi) c'est que si t'as 2 fois la même chose, le script va te jeter à tout les coups.
Si $Messages[2][$i] représente un identifiant unique que tu détermines par php, c'est une mauvais idée car les risques de doublons sont possible.
Fais un test en remplaçant la ligne par ça.
Et place le champ en auto-encremente
$sql = "INSERT INTO forumactif_posts VALUES(NULL , '', '" . $topics['id'] . "', '" . $timestamp . "', '" . $Auteur . "')";
J'avais pas vu un de tes posts ton champ est bien en auto-incremente donc fais juste la modif de la ligne php dans le script.
Si ça marche pas fais
print_r($Messages);
et donnes nous le résultat.