Page 1 sur 1

Duplicate entry...

Posté : 12 juin 2008, 18:05
par toshiro92
Bonjour,

J'ai un problème avec un script php envoyant une requete sql (qui est dans une boucle while)

voici le code:
$test=1;
while ($test<=$nb){
	$fin="type_$test";
	$fin2="question_$test";
	$fin3="rep_$test";
	$fin4="choix_$test";
	
	$requete="INSERT INTO questions (code_quest, type_quest, question, type_choix, nb_reponses, num_quest) VALUES ('".$code_quest."', '".$$fin."', '".$$fin2."', '".$$fin4."', '".$$fin3."', '".$j."');";
			//envoi des informations
		  $resultat= mysql_query($requete,$connexion) or die (mysql_error());
	echo "test code quest $test=$code_quest";
	echo "<br />";
$test++;
}

la boucle ne tourne qu'une fois, et l'erreur suivante aparaît : Duplicate entry '23579031' for key 1
(le code sortie correspond au champs code_quest)
Quel est le problème ?

Posté : 12 juin 2008, 18:22
par dunbar
Salut

La variable $code_quest est déclarer ou :?:

Posté : 12 juin 2008, 21:49
par toshiro92
en fait c'etait un extrait de ma page :? voici le code entier:
<?php 
//recuperation du nombre de questions
$nb=$_POST["nb"];


// récupération de toute les données
$i=1;
while ($i<=$nb){

	$nb_question="question_$i";
	$$nb_question=$_POST["$nb_question"];
	$nb_type="type_$i";
	$$nb_type=$_POST["$nb_type"];
	$nb_rep="rep_$i";
	$$nb_rep=$_POST["$nb_rep"];
	$nb_choix="choix_$i";
	$$nb_choix=$_POST["$nb_choix"];
	
		while ($k<=$$nb_rep){
			$nb_repe="rep_$i";
			$nb_repe2="_$k";
			$nb_repe_final=$nb_repe.$nb_repe2;
			$$nb_repe_final=$_POST["$nb_repe_final"];
		$k++;
		}
$i++;
}
//vérification
$test=1;
while ($test<=$nb){

	$final="type_$test";
	$final2="question_$test";
	$final3="rep_$test";
	$final4="choix_$test";
	
echo 'le type '.$test.'='.$$final.';';
echo 'la question '.$test.'='.$$final2.';';
echo 'la reponse '.$test.'='.$$final3.';';
echo 'le choix '.$test.'='.$$final4.';';
echo "le nombre de questions= $nb";
echo "<br /><br /><br />";
$test++;
}
// les includes donnent: $connexion, $code_quest, $code_enquete, $code_rep
include "connexion.php";
include "codes_generate.php";
// envoi des données à la bdd
$requete0="INSERT INTO enquete (code_enquete, date_crea)
VALUES ('$code_enquete','$date');";
//envoi des informations
	  $resultat0= mysql_query($requete0,$connexion) or die (mysql_error());
	  
$requete1="INSERT INTO contient (code_enquete, code_quest)
VALUES ('$code_enquete','$code_quest');";
//envoi des informations
	  $resultat1= mysql_query($requete1,$connexion) or die (mysql_error());
	  
$test=1;
while ($test<=$nb){
	$fin="type_$test";
	$fin2="question_$test";
	$fin3="rep_$test";
	$fin4="choix_$test";
	
	$requete="INSERT INTO questions (code_quest, type_quest, question, type_choix, nb_reponses, num_quest) VALUES ('".$code_quest."', '".$$fin."', '".$$fin2."', '".$$fin4."', '".$$fin3."', '".$j."');";
			//envoi des informations
		  $resultat= mysql_query($requete,$connexion) or die (mysql_error());
	echo "test code quest $test=$code_quest";
	echo "<br />";

$test++;
}
?>

Posté : 12 juin 2008, 22:24
par dunbar
Bin oui mais je voudrais pas être lourd a toujours poser la même question mais ou est déclarer ta variable $code_quest :lol:

Posté : 12 juin 2008, 22:32
par toshiro92
lol c'est marqué dans le code ^^
// les includes donnent: $connexion, $code_quest, $code_enquete, $code_rep 
Ce qui donne:

code_generate.php:
<?php
$number1=mt_rand(0, 100);
$number2=mt_rand(0, 100);
$number3=mt_rand(0, 100);
$number4=mt_rand(0, 100);
$code_enquete=$number1.$number2.$number3.$number4;
$code_rep=$number3.$number1.$number2.$number4;
$code_quest=$number2.$number3.$number1.$number4;
$date=date('d/m/Y');
?>

Posté : 12 juin 2008, 22:57
par dunbar
Tu pourrais déjà corriger ta requete comme ceci :?:
<?php
$requete="INSERT INTO questions (code_quest, type_quest, question, type_choix, nb_reponses, num_quest) 
VALUES ('".$code_quest."', '".$fin."', '".$fin2."', '".$fin4."', '".$fin3."', '".$j."')"; 
            //envoi des informations 
          $resultat= mysql_query($requete,$connexion) or die (mysql_error()); 
?>

Posté : 13 juin 2008, 09:26
par toshiro92
J'ai trouvé la réponse, c'était tout bête, comme code_quest est une clé primaire, elle est donc unique, et quand la boucle fait un 2 ème tour, elle remet le même code :)

Merci quand même pour l'aide ^^

Posté : 13 juin 2008, 10:22
par Truc
Modération :
toshiro92, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.