Frage

Wie kann ein Formular auf derselben Seite mit einer separaten Prozessseite verarbeitet werden. Im Moment verwende ich für Anmeldungen, Kommentare -Einsendungen usw. eine zweite Seite, die Daten überprüft und dann zurück zu home.php einreicht. Wie kann ich es so schaffen, dass die Seite selbst bei Subjekt eher überprüft, anstatt eine zweite Seite zu verwenden.

War es hilfreich?

Lösung

Sie können das Formular feststellen $_POST Variablen zur Formverarbeitung. Diese Methode ist sehr gut für die Fehlerprüfung, da Sie einen Fehler festlegen und dann das Formular mit allen Informationen neu laden können, die der zuvor noch in Takt übermittelte Benutzer übermittelt hat (dh sie verlieren nicht ihre Einreichung).

Wenn auf die Schaltfläche "Senden" klickt, wird die Informationen auf derselben Seite veröffentlicht und den PHP -Code oben ausgeführt. Wenn ein Fehler auftritt (basierend auf Ihren Schecks), lädt das Formular für den Benutzer mit den angezeigten Fehlern und allen Informationen, die der Benutzer noch in den Feldern geliefert hat, neu. Wenn nicht ein Fehler auftritt, zeigen Sie eine Bestätigungsseite anstelle des Formulars an.

<?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>

Andere Tipps

Die einfachste Konstruktion ist zu erkennen, ob die $_POST Array ist nicht leer

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

// do the regular job

Sie können überprüfen, ob es in den Code der Seite nach einer Postanforderung wurde, und dann die Daten überprüfen. Wenn es sich um Anfrage handelt, zeigen Sie einfach das Formular.

Aber bitte denken Sie daran, dass dies eine gute Praxis ist, um erfolgreiche Formulareergebnisse auf einer anderen Seite zu zeigen, die über Get -Anfrage serviert wurde.

Sie können natürlich nach Ajax -Anfragen suchen, bei denen Sie einen asynchronen Anruf bei Ihrem Handler -Skript tätigen und dann die Senderseite mit einer Erfolgsnachricht aktualisieren. Dies vermittelt den Eindruck der "selben Seitenverarbeitung ", dh die Seite muss nicht aktualisiert werden.

Es hängt jedoch wirklich von dem Effekt ab, den Sie erreichen möchten.

@Michael iRigoyen: Es funktioniert gut, aber bei First RN/Load zeigt es:

"HINWEIS: Undefinierte Variable: Fehler in C: xampp htdocs same_page.php in Zeile 28"

Wie gehe ich mit dieser Mitteilung um?

Ich habe es jetzt bekommen: "Gebrauchte ISSET, @ usw. zu Supress -Fehlern ..." "funktioniert wie ein Zauber !!!" "Jetzt werde ich es in meinem Code versuchen ..."

Ich habe eine Dankesnachricht gespeichert und mit Sitzungsvariablen aktualisiert.

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

und verwenden Sie dies dann oben in der Form:

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

Dies sollte die Seite aktualisieren und die Nachricht anzeigen. Wenn sie dann die Seite aktualisieren, ist die Sitzungsvariable leer, sodass das Dankeschön nicht angezeigt wird. Dies wird als Flash -Nachricht bezeichnet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top