[PHP + MYSQL] : [Desactiver la touche F5 - ou du moins, ne rien faire ]
9 réponses
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 !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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.
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
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.
[...] 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.
[...] 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.
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
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.
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.
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.
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.
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.
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.
Lascap <lascap_PAS_DE_SPAM_J_AI_DIT_@olasia.org>, 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.
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. :)
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.
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.
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.
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.
loufoque <mat.wilmots.remove@nospam.wanadoo.fr>, 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.
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.
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
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,
[...] 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,