2010-12-12 22 views
2

Je crée un formulaire et je l'utilise pour obtenir des données à envoyer à une base de données MySQL via PHP. Si quelqu'un se rafraîchit sur la page, Firefox renvoie le dernier ensemble d'informations à la page php qui à son tour l'envoie à la base de données. Est-il un moyen d'empêcher cela?Actualiser la page va renvoyer des données de formulaire, est-il possible d'empêcher cela? (PHP)

+0

Ce n'est pas une "règle" mais une règle stricte, à partir de la norme HTTP. –

Répondre

6

Pour résoudre ce problème, il existe Post/Redirect/Get pattern vous devez suivre :)

Post/Redirect/Get (PRG) est un modèle de conception commun pour les développeurs web à aide éviter certaine forme de double des soumissions et permettre aux agents utilisateurs de se comporter de façon plus intuitive avec les signets et le bouton d'actualisation.

-1

Oui. Après avoir inséré des données, vous faites une redirection.

5

Vous devez faire une redirection vers la même page:

$current_url = (empty($_SERVER['HTTPS']) ? "http://" : "https://") . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
header ('Location: ' . $current_url); 
exit(); 
+1

La seule réponse avec le code actuel, et il devient laid comme un cauchemar. Peux-tu choisir une construction un peu moins laide? Ne pas répéter deux fois la chaîne entière pour modifier une seule lettre, par exemple? –

+0

@Col - Que diriez-vous de ceci: '$ current_url =" http ". (! empty ($ _ SERVER ['HTTPS'])? "s": "") ": //". $ _ SERVER ['SERVER_NAME']. $ _SERVER ['REQUEST_URI']; ' – AgentConundrum

+0

@Agent Je laisserais des https entiers à l'intérieur de la condition pour des raisons de lisibilité. Bien que l'opérateur ternaire soit un trou énorme dans la lisibilité elle-même. Et aussi HTTP_HOST devrait être utilisé à la place de SERVER_NAME –

-1

utiliser un code dans une entrée cachée et ce code obtenir par un code de table pour exmaple et si le code d'envoyer supprimer de la base de données et si le code non défini dans la table n'accepte pas la requête

2

La méthode habituelle consiste à utiliser une redirection.

Vous obtenez la demande, utiliser les données qu'il contient pour charger votre base de données ou autre, puis effectuez une redirection (je pense que vous êtes censé utiliser un 303 redirection pour cela, mais je l'ai entendu parler d'un beaucoup de gens utilisant 302s pour éviter certains problèmes de navigateur).

L'effet net de ceci est qu'il n'y avait pas de données POST envoyées lorsque la redirection s'est produite, si rafraichissant ne peut pas être renvoyé et bousiller votre application/base de données.

0

Si vous n'aimez pas ce qui précède et que vous utilisez JQUERY. Vous pouvez faire une simple fonction load ou ajax pour envoyer les informations à votre script.

Cela effacera toute chance d'envoi en double et vous ne recharger pas la page. J'aime mieux cette méthode, c'est rapide et facile.

Une autre solution que vous pouvez faire est d'avoir votre formulaire envoyer à une autre page, un peu comme ceci:

<form action="chat_server.php" method="post"> 
     Message: <input type="text" name="message" /> 
     <input type="submit" /> 
</form> 

Sur le fichier chat_server.php, vous faites ce que vous devez faire avec les données et à la fin, vous faites

echo '<meta http-equiv="REFRESH" content="0; url=chat.php" />'; 

Faites un essai, devrait vous débarrasser de votre problème.