2011-03-03 1 views
0

J'ai un formulaire en page1.php qui dirige à page2.php d'où les données du formulaire en page1.php sont insérées dans la base de données. après une insertion réussie, page2.php affiche un message et donne un lien pour aller à une troisième page. Le problème est lorsque l'utilisateur après l'insertion frappe le bouton arrière du navigateur et clique sur le bouton soumettre le formulaire, l'insertion est faite à nouveau.Empêcher l'utilisateur d'utiliser le bouton de retour avec avertissement ou désactiver toute insertion

Y a-t-il un moyen pour que, après une insertion lorsque le bouton de retour est enfoncé, un message apparaisse indiquant que la visite du bouton arrière n'est pas autorisée? Ou dans le cas où il est autorisé aucune insertion n'aura lieu en cliquant sur le bouton soumettre le formulaire?

ÉDITÉ PLUS TARD POUR AJOUTER CETTE PARTIE:

okk-moi de dire dans les détails. Il s'agit d'une fin d'administration. l'administrateur donne une entrée de texte descriptif pour différents produits. Il donne l'entrée de page1.php et le message est affiché sur page2.php que la description a été insérée dans db. alors il y a une autre forme en dessous du message. Il demande simplement si l'administrateur souhaite en faire plus avec le texte de description. Si oui, puis en cliquant sur le bouton de soumission du formulaire, il est redirigé vers une page d'où à travers certaines pages il est de nouveau redirigé vers page1.php (cette fois pour un autre produit), de là vers page2.php et ainsi de suite . btw je pourrais utiliser un lien normal de page au lieu du lien de bouton de forme au-dessous du message sur la page2.php

Le problème est, tandis que l'admin est page2.php et frappe le bouton arrière, il revient à page1.php et à partir de là s'il tape sur le bouton d'envoi de formulaire, les données sont insérées pour la deuxième fois dans une nouvelle ligne. Vous pouvez suggérer d'utiliser la commande 'IGNORE' avec 'INSERT', mais il y a d'autres colonnes dans la ligne qui peuvent ne pas correspondre à celles d'une autre colonne alors que les colonnes de description (admin insère les données de texte pour cette colonne) être apparié.

1) Ignorer est-il applicable dans ce cas?

2) Quelle devrait être la solution si l'entrée en double est autorisée pour la base de données du site?

merci

espérons que tout cela soit clair.

Répondre

5

Au lieu de donner lien vers une troisième page, redirection vers la même URI
c'est la méthode très pratique appelée POST/Redirect/GET:
ici est un exemple concis de celui-ci:

<?php 
if ($_SERVER['REQUEST_METHOD']=='POST') { 

    $err = array(); 
    //performing all validations and raising corresponding errors 
    if (empty($_POST['name'])) $err[] = "Username field is required"; 
    if (empty($_POST['text'])) $err[] = "Comments field is required"; 

    if (!$err) { 
    //if no errors - saving data and redirect 
    header("Location: ".$_SERVER['PHP_SELF']); 
    exit; 
    } else { 
    // all field values should be escaped according to HTML standard 
    foreach ($_POST as $key => $val) { 
     $form[$key] = htmlspecialchars($val); 
    } 
    } 
} else { 
    $form['name'] = $form['comments'] = ''; 
} 
include 'form.tpl.php'; 
?> 

Ici vous pouvez voir un autre exemple, concis mais puissant: Separating Logic/Style in PHP properly
c'est une solution complète pour afficher, ajouter et modifier le contenu de la base de données, exactement à des fins d'administration.

+0

J'étais si heureux quand j'ai découvert la fonction « en-tête ». – Brian

+0

@Col. Shrapnel, je parle d'une insertion d'article. Le message est showon sur page2.php. sur la même page un bouton de soumission de formulaire est là demandant à l'utilisateur s'il est intéressé à faire une autre insertion d'article. J'espère que je l'ai clairement fait comprendre à vous. Je pense que vous devez changer votre code ur. btw "include 'form.tpl.php';" quoi et comment faire avec un fichier .tpl.php? –

+0

@sof_user Tout dépend du scénario. Comme vous n'avez rien dit à ce sujet, il est impossible de répondre certainement. Vous pouvez utiliser SESSION pour empêcher cela par exemple, mais pas pour tous les cas –

0

Vous ne devez pas afficher votre message sur page2.php.

Au lieu de cela:

  • page2.php devrait traiter les données
  • lorsque les données ont été enregistrées, page2.php devrait rediriger vers confirmation.php
  • Et c'est seulement confirmation.php qui affiche le message.


Pour plus d'informations, jetez un oeil à la configuration Post/Redirect/Get.


Modifier après le commentaire: mais notez que, dans tous les cas, vous ne serez jamais en mesure d'empêcher l'utilisateur de présenter à nouveau une forme, s'il veut vraiment ...

Le La seule solution que vous aurez est, quand un formulaire est soumis, de vérifier dans votre base de données si les données actuellement soumises existent déjà - et si c'est le cas, refusez de l'insérer à nouveau.

Bien sûr, si le Suer change même une seule lettre dans son entrée, il ne sera pas les mêmes données Anymore ...

+0

et que se passe-t-il si l'utilisateur appuie deux fois sur le bouton retour de conformation.php? –

+0

double entrée autorisée ... que faire maintenant? –

Questions connexes