2009-12-26 5 views
1

Par exemple, je pose cette question et clique sur "Poster ta question" et reste dans la page actuelle. Maintenant, je peux cliquer sur le bouton "Actualiser" de mon navigateur pour voir de nouvelles réponses. Mais je trouve que sur mon site web, si je clique sur le bouton "Actualiser", une question dupliquée sera publiée. Comment éviter ce problème? J'utilise PHP.Comment éviter les doublons lorsqu'un utilisateur clique sur le bouton "Actualiser" de son navigateur?

+0

Comment déterminer si des données ont été soumises? – Steven

+0

Comment stackoverflow.com évite/s'attaque à ce problème? – Steven

Répondre

6

Il est de pratique courante après une demande POST de rediriger vers la même page pour éviter ce problème.

Disons que vous êtes sur /ask_question.php

Votre balise d'ouverture <form> pourrait ressembler à ceci:

<form action="/ask_question.php" method="post"> 

Maintenant, dans votre /ask_question.php faire quelque chose comme ceci:

if(isset($_POST['new-question'])){ 
    // Do your processing here 

    // On success: 
    header('Location: /ask_question.php'); 
    exit(); // End the request 
} 

Mise à jourIl est important de rediriger seulement après un valide $_POST demande a été traitée. Je test pour un champ de formulaire nommé new-question mais vous devez utiliser toute forme nom de champ qui doit être présent pour le $_POST pour réussir

Ce processus de leurs données affichées, puis en cas de succès, redirige vers la même page. La seule différence maintenant, c'est que quand ils cliquent sur refresh, aucune information ne sera postée.

Remarque Assurez-vous que rien n'est echo 'sorti avant l'appel header.

+0

Battez-moi. =) –

+0

@Alix haha. Cependant, je suis trop verbeux. Votre réponse est beaucoup plus courte et communique probablement mieux la réponse :) –

+0

@Doug: La verbosité est bonne. =) –

0

Tout d'abord, utilisez POST pour votre formulaire. Presque tous les navigateurs demanderont à l'utilisateur de confirmer lors de l'actualisation d'un résultat de formulaire POSTed, puisqu'il doit le soumettre à nouveau. Deuxièmement, dans votre script de traitement de formulaire, vérifiez si la question existe déjà - ou définissez une session pour l'utilisateur et gardez la trace de s'il a récemment soumis quelque chose.

+0

Mais mon navigateur (Firefox) ne me demande pas de confirmer. – Steven

+0

Ensuite, votre navigateur a un bug. Ça marche pour moi. –

1

Soumettre le formulaire en utilisant POST, à valider la soumission et si tout va bien redirigent l'utilisateur à une page de succès, de cette façon si l'utilisateur actualise la page tout ce qu'il va faire est de voir la page « merci » à nouveau .

Questions connexes