Besoin de faire une requête dans un boucle

pedro-webmaster Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
pedro-webmaster Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'ai besoin de faire une requête dans un boucle mais il me donne cette erreur je sais pas quel la solution !!!!

Duplicata du champ '26' pour la clef 'PRIMARY'

et voila mon code source

if($nbre!=0)
{
$dernierNumero=mysql_result($resultat, 0, "nbc");
}
else
{
$dernierNumero=0;
}

for($i=0; $i<$NbreProd; $i++)
{
$numAchat=$dernierNumero;
$ref=$_SESSION['panier']['ref'][$i];
$qte=$_SESSION['panier']['qte'][$i];

$req2="insert into detai_commande(nbc, code_produit, qte_commande) values('$numAchat','$ref', '$qte')";
mysql_query($req2)or die(mysql_error());
}

merci

1 réponse

avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Salut,

Imaginons que la dernière ligne dans la table ait 26 comme valeur dans la colonne ndc.
La fonction mysql_result va te retourner ce nombre.

Plus loin, tu tentes une insertion en utilisant la variable contenant le résultat de mysql_result, donc 26. Ta requête revient donc à ça :
INSERT INTO table(ndc,...) VALUES(26,...)
Et la, l'erreur apparaît : une clé primaire (ndc) valant 26 existe déjà !

Il faut donc l'incrémenter comme je te l'ai dit dans ton précédent sujet.
if($nbre!=0) { 
    $dernierNumero = mysql_result($resultat, 0, "nbc");
    $dernierNumero++;
} else {
    $dernierNumero = 1;
}
1
pedro-webmaster Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
Monsieur,
pouvez-vous me donner une autre solution
Parce que cette solution sa marche pas
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Si ton champ nbc est de type INT (ou SMALLINT, TINYINT ou autre variante), il ne faut pas mettre de guillemets autour de la valeur.

$req2 = "INSERT INTO detai_commande(nbc, code_produit, qte_commande) values($numAchat, '$ref', '$qte')";
Et ta table se nomme-t-elle bien « detai_commande » ? Je pense quil manque une lettre, ou deux si c'est au pluriel.
0
pedro-webmaster Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
la requête sa marche bien parce que s'enregistre le première et les autres non
0
pedro-webmaster Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
et si je choisir une seul enregistrement la requête sa larche bien
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Tu veux dire que ça fonctionne avec un produit mais pas avec deux ?
Il faut aussi incrémenter $dernierNumero à la fin de la boucle.

if($nbre!=0) { 
    $dernierNumero = mysql_result($resultat, 0, "nbc");
    $dernierNumero++;
} else {
    $dernierNumero = 1;
}

for($i = 0 ; $i < $NbreProd ; $i++) {
    $numAchat = $dernierNumero;
    $ref = $_SESSION['panier']['ref'][$i];
    $qte = $_SESSION['panier']['qte'][$i];

    $req2 = 'INSERT INTO detai_commande(nbc, code_produit, qte_commande) '
          . 'VALUES('.$numAchat.', "'.$ref.'", '.$qte.')';

    mysql_query($req2) or die(mysql_error());
    $dernierNumero++;
}
0