[PHP] comment detecter que l'utilisateur à actualiser la page

comment detecter que l'utilisateur à actualiser la page [PHP] - PHP - Programmation

Marsh Posté le 07-05-2002 à 14:12:50    

hello,
 
Je suis en train de faire des formulaires d'enregistrement mais le pb c'est qd je fais actualiser la page aprés avoir enregistrer un formulaire, les informations sont enregistrer de nouveau.
 
Ma question est la suivante :
 
Peut on tester en PHP (ou en javascript) si le mec a Actualiser ou non la page...
 
Merci :jap:


---------------
Vous pouvez dire n'importe quelle connerie a votre chien, et votre chien vous regardera d'un air qui semble vouloir dire:
Reply

Marsh Posté le 07-05-2002 à 14:12:50   

Reply

Marsh Posté le 07-05-2002 à 14:41:51    

c'est normal que cela enregistre les infos a nouveau si tu fais actualiser car tu renvoit les informations.
la seule possibilités que je voit est de tester si la base de donnée contient deja le meme enregistrement, si oui, est ce que c'est la meme IP, si oui tu l'ignores.
cela implique que tu stockes les IP de chaque ordi qui ce sont enregistrées.
cela implique aussi que tu refuses ceux qui sont derriere une passerelle NAT et qui aurrait saisie les memes enregistrements. la probabilité de cette possibilités depends de la nature de ton application.
 

ftopaz a écrit a écrit :

hello,
 
Je suis en train de faire des formulaires d'enregistrement mais le pb c'est qd je fais actualiser la page aprés avoir enregistrer un formulaire, les informations sont enregistrer de nouveau.
 
Ma question est la suivante :
 
Peut on tester en PHP (ou en javascript) si le mec a Actualiser ou non la page...
 
Merci :jap:  



Reply

Marsh Posté le 07-05-2002 à 14:57:47    

fais un header("location:tapage.php" ); après la réception du formulaire.

Reply

Marsh Posté le 07-05-2002 à 16:49:40    

ethernal a écrit a écrit :

fais un header("location:tapage.php" ); après la réception du formulaire.  




 
En fait g le même problème !  
ethernal tu pourrais être plus précis stp !

Reply

Marsh Posté le 07-05-2002 à 17:45:00    

tu rediriges sur une autre page soit par une meta refresh, soit par un header()
 
page_formulaire.php -> confirmation.php
//page_fomulaire.php:
if (isset($submit)){
 - test des données
 - enreg dans la bd
  -choix de la page de confirmation éventuel
 header("location: confirmation.php" );
}
 
 
ou  
 
 
page_formulaire.php -> "Message de confirmation" -> page_autre.php
//page_fomulaire.php (comme dans ce forum je pense):
if (isset($submit)){
 - test des données
 - enreg dans la bd
 - choix de la page de destination et du message à afficher
?>
<html><head>
<meta HTTP-EQUIV="refresh" CONTENT="0: URL=<? $goto ?>">
</head>
<body><? $message ?></body>
</html>
<?
}
 
 
normalement ça devrait faire ce que tu veux :)

Reply

Marsh Posté le 07-05-2002 à 17:57:45    

en fait le fait de rediriger après (comme ici quand on poste) permet d'éviter de refaire une soumission du formulaire en cas de refresh.


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 13-05-2002 à 11:29:06    

ethernal a écrit a écrit :

 
page_formulaire.php -> "Message de confirmation" -> page_autre.php
//page_fomulaire.php (comme dans ce forum je pense):
if (isset($submit)){
 - test des données
 - enreg dans la bd
 - choix de la page de destination et du message à afficher
?>
<html><head>
<meta HTTP-EQUIV="refresh" CONTENT="0: URL=<? $goto ?>">
</head>
<body><? $message ?></body>
</html>
<?
}
normalement ça devrait faire ce que tu veux :)  




 
Alors moi je cale pas trop ce qu'est censé faire ce bout de code.
Le goto il indique koi comme URL ?
et le message il sert à koi ?
Merci de ta compréhension  :D

Reply

Marsh Posté le 13-05-2002 à 11:35:15    

dans "- choix de la page de destination et du message à afficher ", tu initialises la variables $goto à l'url sur laquelle tu veux rediriger par exemple :
- la page du formulaire en cas d'erreur dans les données avec un message d'erreur
- n'importe quelle page de ton site en cas de réussite de l'envoi avec un message de confirmation

 

[jfdsdjhfuetppo]--Message édité par ethernal le 13-05-2002 à 11:36:14--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 13-05-2002 à 13:20:05    

ethernal a écrit a écrit :

dans "- choix de la page de destination et du message à afficher ", tu initialises la variables $goto à l'url sur laquelle tu veux rediriger par exemple :
- la page du formulaire en cas d'erreur dans les données avec un message d'erreur
- n'importe quelle page de ton site en cas de réussite de l'envoi avec un message de confirmation  
 
 




 
ok ! mais que fait exactement la meta "refresh" : elle empêche la page de se réactualiser en chargeant une autre page ?
ya pas moyen de simplement empêcher le transfert de variables GET lors d'une 2ème réactualisation ? ce qui permettrai de rester sur la page voulue ...

Reply

Marsh Posté le 13-05-2002 à 13:54:24    

oui la meta refresh t'envoie sur une autre page pour que si l'utilisateur actualise la page, les données ne soient pas renvoyées.
 
empêcher le transfert (c du POST, pas du GET en général) ?
si tu actualises la page, tu renvoies les données...
comment tu vas faire pour savoir si les données ont déjà été envoyées ? à moins de regarder dans ta bd si ces donées ont déjà été stockées il y a peu de temps, je ne connais pas d'autre  méthode :(
 
si tu veux juste réafficher la même page, utilise plutôt  
header("location:".$PHP_SELF);

Reply

Marsh Posté le 13-05-2002 à 13:54:24   

Reply

Marsh Posté le 13-05-2002 à 14:16:52    

Corbier a écrit a écrit :

 
 
ok ! mais que fait exactement la meta "refresh" : elle empêche la page de se réactualiser en chargeant une autre page ?
ya pas moyen de simplement empêcher le transfert de variables GET lors d'une 2ème réactualisation ? ce qui permettrai de rester sur la page voulue ...  



une méthode : A chaque demande de formulaire, tu rajoute un numéro unique.
Ensuite, quand tu reçois les données, tu vérifie qu'une demande a partir du formulaire numéro x n'as pas déjà était reçus, si c'est le cas, tu traites pas et tu préviens l'utilisateur.
Pour réussir ça, il te faut conaitre la liste des formulaires qui t'ont déjà été envoyé (utilisation d'une table dans la base de donnée).

Reply

Marsh Posté le 14-05-2002 à 10:26:25    

Y'aurait peut etre une autre solution : une fois ke le formulaire a été rempli et que les variables ont été envoyées, le contenu du form se vide : ceci évite lors d'une réactualisation ultérieure de transférer une seconde fois les mêmes variables ... C possible de faire ça ?
 
Chez moi la fonction header ne veut pas marcher et pour ce qui est de la meta refresh j'avoue ne pas avoir trop compris comment m'en servir ...

Reply

Marsh Posté le 14-05-2002 à 14:54:08    

bah faut croire ki a pas moyen ...  :??:

 

[jfdsdjhfuetppo]--Message édité par Corbier le 14-05-2002 à 16:19:09--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 14-05-2002 à 16:59:09    

Le refresh sert en fait à loader une page au bout d'un certain nombre de secondes (ou millisecondes je sais plus), voir instantanément. On peut s'en servir par exemple pour rerouter un internaute vers un autre domaine (changement d'hébergeur) lorsqu'il arrive sur la page d'accueil de l'ancien site.
Aussi, dans ton cas, quand tu valides ta page, ta base de données est updatée et puis au bout d'un certain nombre de secondes tu reroute l'internaute sur un page de confirmation (ou d'erreur). Par exemple, ta page : formulaire.php. Ce qui fait que les paramètres ne sont plus gardés.

Reply

Marsh Posté le 14-05-2002 à 17:08:12    

donc le $goto = formulaire.php

Reply

Marsh Posté le 16-05-2002 à 16:44:02    

Bon je vais maintenant poser une question concrète :
n'existe-t-il pas une variable de type HTTP_GET_VARS qui une fois le transfert effectué des variables du formulaire, les supprime, pour que le formulaire soit de nouveau vide : ceci mettrait fin à tous mes problèmes !
en fait il faudrait un GET qui au lieu de faire un "copier/coller" des variables, fasse un "couper/coller".

Reply

Marsh Posté le 16-05-2002 à 17:33:22    

non, car quand l'utilisateur raffraichit la page, son navigateur reposte les variables.
HTTP_GET_VAR n'existe que sur le serveur, pas chez le client.

Reply

Marsh Posté le 11-01-2013 à 12:49:11    

Bonjour,
 
Sur ce forum on trouve ce code :

Code :
  1. <meta http-equiv="Pragma" content="no-cache" />
  2. <meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
  3. <meta http-equiv="Expires" content="0" />


 
Cela a-t-il des avantages par rapport à :
 
<meta HTTP-EQUIV="refresh" CONTENT="0: URL=<? $goto ?>">  
 
Merci d(avance.

Reply

Marsh Posté le 11-01-2013 à 13:25:39    

[:pseudo ______] Joli déterrage...
 
Pour répondre à ta question : ça ne fait pas la même chose. Le premier code sert à éviter que le navigateur ou un proxy mette la page en cache, le deuxième sert à rediriger vers une autre page.


---------------
Are you two fucking? Are you serious? Right in front of my salad?!
Reply

Marsh Posté le 12-01-2013 à 10:53:50    

Oh la oui effectivement... il y a quelques années qui sépare les 2 sujets :)


---------------
Besoin d'aide pour votre projet? agence web
Reply

Marsh Posté le 12-01-2013 à 22:13:11    

Joli déterrage...
 
En effet mais le sujet est important et peu traité.
 
Il me semble que la solution par header () est plus fiable que Meta Refresh car tu ne dépends pas du navigateur client et tu es sûr de bloquer les variables $_GET.
 
Autrement, pas de notifcations par mail sur ce forum, je n'ai pas trouvé ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed