Duplicate entry '2' for key 1

Duplicate entry '2' for key 1 - PHP - Programmation

Marsh Posté le 05-07-2005 à 12:00:59    

"Duplicate entry '2' for key 1"
 
ça veut dire quoi ?  
j'arrive pas à savoir de quoi il s'agit, j'ai pas de numero de ligne, je sais pas si c une erreur mysql ou php... je soupçonne une erreur concernant les foreach que j'ai dans mon code.. mais là je sais pas ! je suis perdu !

Reply

Marsh Posté le 05-07-2005 à 12:00:59   

Reply

Marsh Posté le 05-07-2005 à 12:01:58    

Erreur de MySQL
 
Edit: tu veux dupliquer ta clé, c'est pas possible.


Message édité par cesarr89 le 05-07-2005 à 12:02:57
Reply

Marsh Posté le 05-07-2005 à 12:02:57    

qui voudrait dire quoi ?

Reply

Marsh Posté le 05-07-2005 à 12:03:11    

ah ok !

Reply

Marsh Posté le 05-07-2005 à 12:05:33    

un clef doit etre unique c'est ça ?  
en fait dans mon code je supprime un enregistrement et je le recree... (avec le même numero de clef) peut etre que l'erreur vient de la ?

Reply

Marsh Posté le 05-07-2005 à 12:07:20    

freed102 a écrit :

un clef doit etre unique c'est ça ?  


 
Bah oui c'est la définition.
 
Edit: Tu as déjà fais des BD?


Message édité par cesarr89 le 05-07-2005 à 12:08:19
Reply

Marsh Posté le 05-07-2005 à 12:08:11    

bon sinon comment on retire l'attribut "key" d'un champ en mysql ?

Reply

Marsh Posté le 05-07-2005 à 12:08:58    

freed102 a écrit :

bon sinon comment on retire l'attribut "key" d'un champ en mysql ?


 
C'est toi qui a fait la base de données?
Explique moi concrétement ton problème.

Reply

Marsh Posté le 05-07-2005 à 12:22:25    

oui c moi qui ait fait la base de données, en fait je fais un systeme de devis/facturation...
j'ai donc trois tables
 
factures -> references_factures ->items_facture
 
au debut la difference entre un devis et une facture etait juste un champs 'type_commande' qui indiquait "facture" ou "devis"... il suffit de cliquer sur un bouton pour transformer un devis en facture et vis versa. Maintenant je me rends compte qu'il y a un probleme concernant l'attribution des numeros de facture... il ne peut pas y avoir de "trou" dans la numerotation des factures, au debut les devis etaient inclus dans la même serie que les factures... hors on suppose qu'un devis n'est pas forcement accepté... dans ce cas... ça provoquerait un "trou" dans la facturation.. ce qui n'est pas correct... donc j'ai decidé de changer de systeme de numerotation en séparant les devis des factures...
 
les devis commencent par DEV000001 (et s'incrémentent de 1)
les factures sont sous la forme 0000356 (et s'incrémentent de 1)
 
si un devis devient une facture.. il reprends la série des factures (0000357) en incrémentant de 1... logiquement comme ça il ne peut pas y avoir de trou dans les factures puisque il prends toujours le dernier nombre et ajoute 1.
 
simplement j'ai du m'emmeler les crayons au niveau du SQL pour effacer et recreer mes enregistrements...  
 
un bout de code pour comprendre mieux :
 

Code :
  1. if($save_facture)
  2. {
  3. if(isset($_SESSION['date_reglement']))
  4. {
  5. $new_date=explode("/",$_SESSION['date_reglement']);
  6. $date_reg2=strtotime($new_date[2]."-".$new_date[1]."-".$new_date[0]);
  7. }
  8.   $req="SELECT * FROM factures WHERE numero_facture='$_SESSION[numero_facture]';";
  9.   //echo $req."<br />";
  10.   $query1=mysql_query($req);
  11.   $numrows=mysql_num_rows($query1);
  12.   if($numrows<1)
  13.   {
  14.   //echo $numrows."<br />";
  15.    $sql="INSERT INTO factures(numero_facture,type,id,contact, titre,total_ht, date_reg,date_modif,reglement,type_reglement,modalites_reglement,date_reglement,observations)";
  16.    $sql.="VALUES ('$_SESSION[new_numero_facture]','$_SESSION[type_commande]','$_SESSION[current_client]','$_SESSION[current_contact]','$_SESSION[titre_facture]', '$_SESSION[total_ht]', '$date','$date','$_SESSION[reglement]','$_SESSION[type_reglement]','$_SESSION[modalites_reglement]','$date_reg2','$_SESSION[observations]');";
  17.    //echo $sql."<br />";
  18.     if(mysql_query($sql) or die(mysql_error()))
  19.     {
  20.     $_SESSION['infos']="La facture à bien été enregistrée";
  21.     }
  22.     else
  23.     {
  24.     $_SESSION['infos']="Impossible d'enregistrer la facture";
  25.     }
  26.   }
  27.   else
  28.   {
  29.    $sql="UPDATE factures SET numero_facture='$_SESSION[new_numero_facture]',id='$_SESSION[current_client]',type='$_SESSION[type_commande]',contact='$_SESSION[current_contact]',titre='$_SESSION[titre_facture]',total_ht='$_SESSION[total_ht]',date_modif='$date',reglement='$_SESSION[reglement]',type_reglement='$_SESSION[type_reglement]',date_reglement='$date_reg2',observations='$_SESSION[observations]' WHERE numero_facture='$_SESSION[numero_facture]';";
  30.    //echo $req."<br />";
  31.    if(mysql_query($sql) or die(mysql_error()))
  32.    {
  33.    $_SESSION['infos']="La facture à bien été mise à jour<br />";
  34.    }
  35.    else
  36.    {
  37.    $_SESSION['infos']="Impossible de mettre à jour la facture<br />";
  38.    }
  39.   }
  40.   //print_r($_SESSION['ref']);
  41.   $sql="DELETE FROM references_factures WHERE numero_facture='$_SESSION[numero_facture]';";
  42.    if(mysql_query($sql) or die(mysql_error()))
  43.    {
  44.    $_SESSION['infos']="La facture à bien été mise à jour<br />";
  45.    }
  46.    else
  47.    {
  48.    $_SESSION['infos']="Impossible de mettre à jour la facture<br />";
  49.    }
  50.   foreach($_SESSION['ref'] as $key1=>$value)
  51.   {
  52.   $ref_num_ref=$_SESSION['ref'][$key1]['number'];
  53.   $ref_titre=$_SESSION['ref'][$key1]['titre'];
  54.   if(isset($_SESSION['ref'][$key1]['date']))
  55.   {
  56.   $new_date=explode("/",$_SESSION['ref'][$key1]['date']);
  57.   $ref_date2=strtotime($new_date[2]."-".$new_date[1]."-".$new_date[0]);
  58.   }
  59.   $ref_contact=$_SESSION['ref'][$key1]['contact_ref'];
  60.   $ref_prix_ht=$_SESSION['ref'][$key1]['prix_ht'];
  61.    $sql="INSERT INTO references_factures (numero_facture,num_ref,titre,date,contact,prix_ht) ";
  62.     $sql.="VALUES ('$_SESSION[new_numero_facture]','$ref_num_ref','$ref_titre','$ref_date2','$ref_contact', '$ref_prix_ht');";
  63.     //echo $sql."<br />";
  64.      if(mysql_query($sql) or die(mysql_error()))
  65.      {
  66.      $_SESSION['infos']="La référence à bien été enregistrée";
  67.      }
  68.      else
  69.      {
  70.      $_SESSION['infos']="Impossible d'enregistrer la référence";
  71.      }
  72.   $req="SELECT * FROM items_facture WHERE numero_facture='$_SESSION[numero_facture]' AND num_ref='$ref_num_ref'";
  73.   //echo $req."<br />";
  74.   $query1=mysql_query($req);
  75.   $numrows=mysql_num_rows($query1);
  76.   //echo $numrows."<br />";
  77.   if($numrows>=1)
  78.   {
  79.    $sqldel="DELETE FROM items_facture WHERE numero_facture='$_SESSION[numero_facture]' AND num_ref='$ref_num_ref' ";
  80.    //echo $req."<br />";
  81.    if(mysql_query($sqldel) or die(mysql_error()))
  82.    {
  83.    $_SESSION['infos']="La facture à bien été mise à jour<br />";
  84.    }
  85.    else
  86.    {
  87.    $_SESSION['infos']="Impossible de mettre à jour la facture<br />";
  88.    }
  89.   }
  90.  foreach($_SESSION['item'] as $key=>$value)
  91.   {
  92.   if($_SESSION['item'][$key]['ref']==$key1)
  93.   {
  94.   $libelle=$_SESSION['item'][$key]['libelle'];
  95.   $quantite=$_SESSION['item'][$key]['quantites'];
  96.   $prix_unitaire=$_SESSION['item'][$key]['prix_unitaire'];
  97.   $ref_num_ref=$_SESSION['ref'][$key1]['number'];
  98.    if(!empty($quantite))
  99.    {
  100.    $sql="INSERT INTO items_facture (numero_facture,num_ref,item,libelle, quantite,prix_unitaire)";
  101.    $sql.="VALUES ('$_SESSION[new_numero_facture]','$ref_num_ref','$key','$libelle','$quantite', '$prix_unitaire');";
  102.    //echo $sql."<br />";
  103.     if(mysql_query($sql) or die(mysql_error()))
  104.     {
  105.     $_SESSION['infos']="La facture à bien été enregistrée";
  106.     $_SESSION['numero_facture']=$_SESSION['new_numero_facture'];
  107.     }
  108.     else
  109.     {
  110.     $_SESSION['infos']="Impossible d'enregistrer la facture";
  111.     }
  112.    }
  113.   }
  114.   }
  115. }
  116. }


Reply

Marsh Posté le 05-07-2005 à 17:04:33    

c bon j'ai corrigé mon erreur... conflit de numero de facture

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed