Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[PHP + MYSQL] : [Desactiver la touche F5 - ou du moins, ne rien faire ]

9 réponses
Avatar
Vincent BENNER - PERSO
Bonjour,

J'ai un formulaire qui contient des zones
de texte. Ces zones sont passées ($_POST)
dans un script PHP qui fait une insertion
dans une base de données avec une
clé auto incrémentée. Ce script affiche
le résultat de l'insertion

L'insertion ne se produit que si $_POST["Var1"]
est isset.

Le problème, est que, sur la page où
j'affiche le résultat, si l'utilisateur fait F5
ou rafraichir, ça rajoute à nouveau.

J'ai essayé de faire un unset($_POST["Var1"]);
mais ça n'a pas l'air de marcher !

Des idées ?

Merci,

Vincent

9 réponses

Avatar
FAb
"Vincent BENNER - PERSO" writes:

Bonjour,

Le problème, est que, sur la page où
j'affiche le résultat, si l'utilisateur fait F5
ou rafraichir, ça rajoute à nouveau.

Des idées ?


Un champs hidden dans le formulaire avec un paramètre unique. Par contre tu dois
en gérer l'unicité et le stockage.
Sinon juste avant l'insertion dans la BD tu regards s'il y a un enregistrement
ayant les exactements les mêmes valeurs dans les champs importants (et fixes).

Ou alors plus crade dans ta première insertion est finie avec header("Location:
...");
tu rediriges vers une autre page, dois y avoir une ruse.

FAb

Avatar
Olivier Miakinen

[...] clé auto incrémentée.

[...] si l'utilisateur fait [] rafraichir, ça rajoute à nouveau.


Je pensais que c'était dans la FAQ, mais je n'arrive pas à le trouver.

Le principe de base c'est de ne *pas*, de ne *JAMAIS* utiliser une clé
auto-incrémentée si tu ne veux pas avoir de doublons. Choisis-toi une
bonne clé bien unique, et tu n'auras plus de problème.

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
Lascap
Tu peux tester avant de faire l'insertion si une requete avec le même
contenu n'a pas été faite auparavant...

C'est parfois difficile à mettre en oeuvre, surtout s'il est
envisageable d'avoir des enregistrements identiques dans ta table, mais
c'est malheureusement la seule solution valable que j'ai trouvée.

Lascap
Avatar
Laurent Seguin
"Vincent BENNER - PERSO" , le 16 déc. 2004
14:47:17, écrivait ceci:

J'ai un formulaire qui contient des zones
de texte. Ces zones sont passées ($_POST)
dans un script PHP qui fait une insertion
dans une base de données avec une
clé auto incrémentée. Ce script affiche
le résultat de l'insertion

L'insertion ne se produit que si $_POST["Var1"]
est isset.

Le problème, est que, sur la page où
j'affiche le résultat, si l'utilisateur fait F5
ou rafraichir, ça rajoute à nouveau.

Des idées ?


Alors coté client, tout ce que tu feras est utopique.
Coté serveur la solution pour régler le problème serait de mettre une vraie
clée primaire(*) et de gerer l'erreur. Si tu ne peux pas (ça peu arriver de
ne pas avoir de PK), tu peux essayer de jouer avec les sessions pour
bloquer l'insert. Reste la solution de rechercher si tel ou tel champ n'est
pas déjà présent dans la base mais on en reviens au changement de choix de
la PK.



(*) je simplifie : colonne ou un ensemble de colonnes qui identifie chaque
ligne de façon unique.

Avatar
Laurent Seguin
Lascap , le 16 déc. 2004 20:10:44,
écrivait ceci:

Tu peux tester avant de faire l'insertion si une requete avec le même
contenu n'a pas été faite auparavant...


Si on peu faire ce genre de requête, on en reviens à ce qui a été déjà dit
par Olivier et moi même : revoir sa clée primaire.

Avatar
Lascap
Laurent Seguin wrote:
Lascap , le 16 déc. 2004 20:10:44,
écrivait ceci:


Tu peux tester avant de faire l'insertion si une requete avec le même
contenu n'a pas été faite auparavant...



Si on peu faire ce genre de requête, on en reviens à ce qui a été déjà dit
par Olivier et moi même : revoir sa clée primaire.


Soit, mais au moment ou je l'ai dit, ça n'avait pas encore été dit. :)


Avatar
loufoque
Laurent Seguin a dit le 16/12/2004 20:10:
Alors coté client, tout ce que tu feras est utopique.
Coté serveur la solution pour régler le problème serait de mettre une vraie
clée primaire(*) et de gerer l'erreur.


Quand bien même, je ne vois pas en quoi ça empecherait quoi que ce soit.
Il faudrait que la clé soit renseignée dans le formulaire.

Avatar
Laurent Seguin
loufoque , le 23 déc. 2004
18:21:13, écrivait ceci:

Alors coté client, tout ce que tu feras est utopique.
Coté serveur la solution pour régler le problème serait de mettre une
vraie clée primaire(*) et de gerer l'erreur.


Quand bien même, je ne vois pas en quoi ça empecherait quoi que ce
soit. Il faudrait que la clé soit renseignée dans le formulaire.


Certes, mais tu avouera que c'est rare que ce ne soit pas le cas. Si c'est
le cas, on en reviens à la solution de jouer avec les sessions que je
proposais également.


Avatar
Vincent BENNER - PERSO
Bonjour,

[...] clé auto incrémentée.
Quand je parle de clé auto incrémentée, il


s'agit d'une clé que je génère moi même,
comme un bon vieux numéro de facture...

Le principe de base c'est de ne *pas*, de
ne *JAMAIS* utiliser une clé auto-incrémentée
si tu ne veux pas avoir de doublons. Choisis-toi une
bonne clé bien unique, et tu n'auras plus de problème.
C'est un conseil, mais pas une obligation ;-)


Merci, je vais continuer ma prospection avec
tous ces élements,

Vincent