Script php-mysql+ actualisation navigateur

ogyon Messages postés 345 Date d'inscription   Statut Contributeur Dernière intervention   -  
 Julien Fastré -
Bonjours à tous :)

Ptite problematique:

Un formulaire php (form.php avec des variables POST) vient remplir une base de données via le script (script.php). L'insertion se passe niquel, et à vrai dire il n'y a pas de pb.
Cependant, si on réactualise la page (script.php) cela incrémente la base de la meme valeur...encore et encore à chaque clic de réactualisation...
Comment empecher cela?

(pourtant je réinitialise bien mes valeurs au début...mais que néni ca continue)

Merci d'avance pour vos lueurs :)

3 réponses

  1. crabs Messages postés 909 Statut Membre 507
     
    salut,
    Il me semble que tu peux eviter ce problème en utilsant une redirection :
    1 -> la page qui propose ton formulaire
    2 -> POST (action navigateur)
    3 -> script qui traite le formulaire et qui fait une redirection
    4 - > la page qui fait l'affichage
    Pour faire une redirection, avant tout affichage dans la page en php:
    header( "Location: $url_absolu_de_la_page" ) ;

    Tu peux mettre une url relative, mais certains navigateurs ne supportent pas bien
    le changement de dossier.
    A+, crabs
    3
  2. ogyon Messages postés 345 Date d'inscription   Statut Contributeur Dernière intervention   23
     
    Aucune lueurs??
    1
  3. Julien Fastré
     
    Un moyen très simple:

    Une variable de session qui s'incrémente à chaque page. Dans le formulaire, une variable de type 'hidden' qui a la valeur de la variable session courante.

    Le script qui traite les données de formulaire ne s'exécute que si la variable cachée renvoyée par le formulaire est égale à la variable de session - 1 .

    Exemple:
    Au début de la page:
    $_session['page'] ++ //(il ne faut pas oublier, si la variable n'existe pas, de la créér avant)
    
    <form>
    <input type = 'hidden' value = $_session['page'] name = 'page'>
    </form>
    
    et le script qui traite le formulaire:
    
    if ( "si c'est le formulaire qui a été envoyé" && $_post['page'] =  $_session['page'] -1 )
                   // le script qui traite les données du formulaire est exécuté. 


    Je ne sais pas si la méthode est sûre au niveau de la sécurité, mais a priori elle ne devrait pas l'être moins que le script séparé.

    Julien
    1