|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Vainui TUAIVADéveloppeur informatique Inscription : novembre 2011 Messages : 19 ![]() |
Bonjour à tous,
Contexte: J'ai un formulaire ordonné dans un tableau que je rempli et que je valide à ce moment là aucun problème l'insertion se passe très bien. "LE problème" Lorsque je rafraîchis ma page à l'aide de "F5" j'ai les précédentes données (données que je viens de saisir) qui s'insèrent automatiquement et cela donc à chaque rafraîchissement de page. Question: Comment se fait-il? Je ne comprends pas. Quelqu'un pourrait-il m'expliquer? Merci par avance. Voici mon code: Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre actif
![]() Inscription : avril 2011 Messages : 426 ![]() |
C'est un cas typique car en faisant f5, le formulaire est de nouveau posté et donc intégré en base avec un autre identifiant.
Une des solution peut consister à tester le contenu de ton formulaire via une requête SQL qui va chercher la dernière insertion et la compare à la nouvelle insertion. Si et seulement si le contenu est différent, l'intégration peut être effectuée, sinon il s'agit d'un F5. |
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() Olivier Étudiant Inscription : novembre 2010 Messages : 303 ![]() |
Bonsoir,
C'est le fonctionnement standard. En fait lorsque tu fait F5 le navigateur recharge les informations de la page, mais également les informations envoyé par le formulaire. Du coup faire F5 revient à cliquer sur envoyer. |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Vainui TUAIVADéveloppeur informatique Inscription : novembre 2011 Messages : 19 ![]() |
Bonjour à vous!
Merci pour vos propositions je suis passé par une autre alternative, c'est à dire que je fais le traitement d'insertion php sur une autre page et donc j'envoi le formulaire vers cette page et lorsque je refresh la page où se trouve le formulaire tout est ok! Qu'en pensez-vous? Merci encore pour vos réponses. |
|
|
00
|
|
|
#5 |
|
Membre actif
![]() Inscription : avril 2011 Messages : 426 ![]() |
Tu es vraiment sur que tout est ok ? Pas de nouvelles insertions même si tu utilises une page différente pour le traitement ?
|
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Vainui TUAIVADéveloppeur informatique Inscription : novembre 2011 Messages : 19 ![]() |
Laisse moi le temps de vérifier!
Mais sinon oui je penses bien que tout est à mon avantage! Merci encore! |
|
|
00
|
|
|
#7 | |||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Citation:
Ce problème est connu, et il n'y a pas lieu de faire pointer sur une autre page, on peu tout faire sur la même page. Le moyen le plus courant de résoudre ce problème est de faire une redirection avec la fonction header(). Le principe est le suivant : - Lors du "submit (soumission du formulaire), le serveur reçoit la demande, reçoit toutes les données à traiter. 1/ Si lors des vérifications on remarque une erreur, on n'effectue aucune insertion/mise à jour : On ne fait rien, pas de redirection. 2/ Si toutes les données sont valides, on effectue l'insertion/mise à jour et juste après la redirection. Exemple : Code :
Tu effectue toute la construction de cette page en total relation du déroulement du code Html, cela même pour le déroulement du code Php. Pourtant, le déroulement du Html et du Php n'ont aucun rapport entre eux. Le Html sera interprété par un post client, un navigateur, et Php du coté serveur. La différence est de taille. Il préférable de faire en 1er tout ce qui est traitement, c'est à dire récupération/insertion/mise à jour/suppression des données en Bdd, manipulation de fichiers, etc ... Puis de faire en dernier la partie interface, c'est à dire de générer le code Html. Ceci va résoudre indirectement quelques problèmes, puis ça offre plus de possibilités. Aussi, le fait de faire en 1er cette requête : SELECT DATE_FORMAT(Daterecette, '%d/%m/%Y') puis après l'insertion (le INSERT INTO ...), la dernier valeur obtenue ne sera pas celle qu'on vient d'insérer vu que l'insertion se fait après. J'ai idée que tu actualises cette page pour justement obtenir cette dernière valeur, mais en faisant cela tu rencontres en cascade un 2ème problème de doublon. Dans le déroulement, il faut en 1er effectuer l'insertion, et c'est après ça qu'il faut récupérer la donnée dans cette table, et là on obtiendra bien la dernière valeur précédemment insérée (plus besoin d'actualiser entre autre).
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com