Probleme avec un serveur fax : Duplicate key

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme avec un serveur fax : Duplicate key

par tinou » 25 janv. 2007, 18:13

ok merci a tous je vais tester ON DUPLICATE KEY

Merci de votre patience :wink:

par Ajoloca » 25 janv. 2007, 17:32

Re,
Donc ce qui te faut c'est
- Supprimer ton attribut soit ne pas te servir de ta clé
- un "INSERT ... ON DUPLICATE KEY ..." mais sans la clause "WHERE"

Si ton enregistrement n'existe pas, il sera créé, s'il existe les valeurs que tu mettras après le "ON DUPLICATE KEY" seront modifiées.

par iclo » 25 janv. 2007, 17:29

Comme Ajoloca et moi, te l'avons dit (on se complête sur ce poste :D )
- soit tu as un champ en autu-incrément, et tu ne lui donnes pas de valeur dans l'insert et ne le modifie pas dans un update
- soit tu veux lui donner toi même une valeur, et pouvoir avoir des doublons, et dans ce cas-là, il ne peut être en auto-incrément.

par tinou » 25 janv. 2007, 17:25

en fait j'ai du mal m'exprimer.
voila comment fonctionne mon script

- J'envoi un fax donc pour cela j'insere mes données dans la base.
- Je test ensuite si mon serveur est OK pour le lancer.
- Si mon id_fax est a 0 c'est que le fax ne s'est pas envoyé et donc que le serveur a planté.
- Je redemarre le serveur, je met l'id_fax à -1, je recupere le num_fax et je renvoi le fax.
- Je reviens donc dans ma fonction envoyerFax et j'insere a nouveau les données.
- Au debut je ne m'occuper pas du num_fax et je re-inserer un nouveau fax mais c'est là qu'il me mettait DUPLICATE KEY
- L'update que j'ai crée sert a lister les problemes rencontrés lors des plantages serveur (date, premier fax non envoyé, dernier fax non envoyé)

par Ajoloca » 25 janv. 2007, 17:23

oui, en conclusion : num_fax ne doit pas être dans l'insert, vu que c'est le serveur de base de donnée qui donne sa valeur.
Ou si pour une raison X ou Y tu tiens à conserver le numéro généré par ta fonction, modifie le type de la colonne (supprime l'auto_increment).

par iclo » 25 janv. 2007, 17:15

oui, en conclusion : num_fax ne doit pas être dans l'insert, vu que c'est le serveur de base de donnée qui donne sa valeur.

par Ajoloca » 25 janv. 2007, 17:11

Re,
Il-y-a tout de même QQ chose qui m'échappe.
Si je calcule la valeur de ma clé pourquoi utiliser un champ "AUTO_INCREMENT" ??? :?: :?: :?:

par iclo » 25 janv. 2007, 16:55

Attention:
On insert un enregistrement, sans donner de valeur au champ auto-incrémenté. (C'est le serveur qui se charge d'affecter une valeur à ce champ et donc qui garantit son unicité)
On modifie l'enregistrement, en faisantun update en utilisant la valeur du champ auto-incrémenté, pour identifier l'enregistrement à modifier, grâce à une clause where.
Mais on ne modifie jamais un champ auto-incrémenté.

par tinou » 25 janv. 2007, 16:41

le seul inconveniant c'est qu'au depart je n'ai pas l'enregistrement dans ma table, je le crée avec la fonction envoyerFax puis je test mon serveur et je relance la fonction envoyer Fax.

je suis donc obligé de faire un INSERT.

J'ai tenté cela mais je peut pas le tester, a votre avis, cela peut fonctionner?
//Construction de la requête
	$sql_req='INSERT INTO envois (destinataire,personne,tel,fax,contrat,ta,dateenvoi,id_fax,ref_client,codeclient,codeoperation)';
	$sql_req.=' VALUES ("'.$opt[1].'","'.$opt[2].'","'.$opt[3].'","';
	$sql_req.=$opt[5].'","'.$opt[0].'","'; 
	$sql_req.=$_SESSION['identifiant'].'",NOW(),"'.$res[0][3].'","'.$opt[4].'","'.$opt[7].'","'.$opt[6].'") WHERE num_fax= '.$opt[9].'';
	echo '<BR>'.$sql_req;
J'ai mis une clause WHERE :shock:

Bonjour,

Je crois qu'une instruction "UPDATE" serait plus appropriée qu'un "INSERT",

Dans le pire des cas "INSERT .....ON DUPLICATE KEY ...."
cela permet d'ecraser l'ancienne clé ou cela permet de mettre 2 enregistrement avec la meme clé?

par Ajoloca » 25 janv. 2007, 16:33

Bonjour,

Je crois qu'une instruction "UPDATE" serait plus appropriée qu'un "INSERT",

Dans le pire des cas "INSERT .....ON DUPLICATE KEY ...."

par tinou » 25 janv. 2007, 16:20

tu as raison, je renvoie le fax mais vu qu'il avait deja un num_fax il y a conflit de clé.

il faudrait que je fasse un truc du genre num_fax+ un entier mais le probleme c'est qu'il peut y avoir 50 fax ou plus que je doit renvoyer donc quel entier je doit choisir?

Suis-je claire :?: :roll:

par ouckileou » 25 janv. 2007, 16:08

Tu ne le modifies pas mais tu en insères un, donc peut-être qu'il existe déjà.

Regarde celui que tu insères quand tu as l'erreur, puis fais un select dessus, tu verras bien

par tinou » 25 janv. 2007, 15:10

mais je ne le modifie pas, je recupere seulement le premier et le dernier num_fax des fax non-envoyés

par iclo » 25 janv. 2007, 13:31

Ha, si c'est num_fax, c'est normal, c'est un champ auto-incrémenté, par le serveur, qui n'accepte pas les doublons, et d'ailleurs ne doit pas être modifié.

par tinou » 25 janv. 2007, 13:29

je pense que le duplicate se situe au niveau de num_fax mais je ne vois pas où