Probleme avec un serveur fax : Duplicate key

ViPHP
ViPHP | 1961 Messages

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 ...."
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 86 Messages

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é?
Comme dit le proverbe chinois:"Si tu parles a tes chaussons.....C'est que tu es le Roi des C..." :D

ViPHP
ViPHP | 2144 Messages

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é.

ViPHP
ViPHP | 1961 Messages

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" ??? :?: :?: :?:
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 2144 Messages

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.

ViPHP
ViPHP | 1961 Messages

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).
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 86 Messages

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é)
Comme dit le proverbe chinois:"Si tu parles a tes chaussons.....C'est que tu es le Roi des C..." :D

ViPHP
ViPHP | 2144 Messages

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.

ViPHP
ViPHP | 1961 Messages

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.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 86 Messages

25 janv. 2007, 18:13

ok merci a tous je vais tester ON DUPLICATE KEY

Merci de votre patience :wink:
Comme dit le proverbe chinois:"Si tu parles a tes chaussons.....C'est que tu es le Roi des C..." :D