Question

Comment traiter un formulaire sur la même page vs en utilisant une page de processus distinct. En ce moment, pour les inscriptions, les soumissions de commentaires, etc j'utiliser une deuxième page qui vérifie les données, puis soumet et itinéraires à dos home.php. Comment puis-je faire en sorte que le soumettre, la page elle-même vérifie plutôt que d'utiliser une deuxième page.

Était-ce utile?

La solution

Vous pouvez dire la forme de se soumettre à soi-même, puis vérifier les variables $_POST pour le traitement de la forme du PHP. Cette méthode est très bon pour la vérification des erreurs que vous pouvez définir une erreur et avoir la forme reload toutes les informations que l'utilisateur a déjà été soumis encore en tact (à savoir qu'ils ne perdent pas leur soumission).

Lorsque le bouton « Soumettre » est cliqué, il affichera les informations sur la même page, l'exécution du code PHP en haut. Si une erreur se produit (en fonction de vos chèques), le formulaire pour recharger l'utilisateur avec les erreurs affichées et des informations fournies à l'utilisateur encore dans les champs. Si une erreur ne se produit pas, vous afficherez une page de confirmation au lieu de la forme.

<?php
//Form submitted
if(isset($_POST['submit'])) {
  //Error checking
  if(!$_POST['yourname']) {
    $error['yourname'] = "<p>Please supply your name.</p>\n";
  }
  if(!$_POST['address']) {
    $error['address'] = "<p>Please supply your address.</p>\n";
  }

  //No errors, process
  if(!is_array($error)) {
    //Process your form

    //Display confirmation page
    echo "<p>Thank you for your submission.</p>\n";

    //Require or include any page footer you might have
    //here as well so the style of your page isn't broken.
    //Then exit the script.
    exit;
  }
}
?>

<form method="post" action="<?=$_SERVER['PHP_SELF']?>">
  <?=$error['yourname']?>
  <p><label for="yourname">Your Name:</label><input type="text" id="yourname" name="yourname" value="<?=($_POST['yourname'] ? htmlentities($_POST['yourname']) : '')?>" /></p>
  <?=$error['address']?>
  <p><label for="address">Your Address:</label><input type="text" id="address" name="address" value="<?=($_POST['address'] ? htmlentities($_POST['address']) : '')?>" /></p>
  <p><input type="submit" name="submit" value="Submit" /></p>
</form>

Autres conseils

La meilleure construction est de détecter si le tableau de $_POST n'est pas vide

if(isset($_POST['myVarInTheForm'])) {
  // Process the form
}

// do the regular job

vous pouvez vérifier si elle était requête POST à ??l'intérieur du code de la page, puis vérifier les données. Si elle était requête GET - il suffit de montrer la forme.

Mais s'il vous plaît rappelez-vous que c'est une bonne pratique pour afficher les résultats de la soumission du formulaire successfull sur une autre page servi par requête GET, à savoir toute forme Successfull POST doit répondre avec redirection vers la page de succès.

Vous pouvez bien explorer bien sûr regarder dans les requêtes AJAX, où vous faire un appel asynchrone à votre script de gestionnaire, puis mettre à jour puis mettre à jour la page d'envoi d'un message de réussite. Cela donne l'impression de « traitement de la page même » à savoir La page n'a pas à rafraîchir.

Cela dépend vraiment de l'effet que vous essayez d'atteindre cependant.

Irigoyen @ Michael: Il fonctionne très bien, mais sur la première rn / charge, il indique:

"Indication: Undefined variable: erreur dans C: \ xampp \ htdocs \ same_page.php à la ligne 28"

Comment gérer cet avis?

Vous avez maintenant: « Occasion isset, @ etc à des erreurs de ... Supprimez les » « Fonctionne comme un charme !!! » « Maintenant, je vais l'essayer sur mon code ... »

J'ai sauvé un message de remerciement et rafraîchi à l'aide des variables de session.

if(!is_array($error)){
    $_SESSION['message'] = 'Thank You!';
    header('Location: yourpage.php');
    exit();
} 

puis utilisez ce dans le haut de la forme:

if(isset($_SESSION['message'])){ 
    echo $_SESSION['message'];
    unset($_SESSION['message'];
} 

Cela devrait actualiser la page et affiche le message et si elles rafraîchissent la page de la variable de session est vide si le remerciement vous ne montrerez pas. Ceci est appelé un message flash.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top