2016-03-21 11 views
0

Ich versuche, eine "dynamische Umleitung" für eine HTML-Formularseite zu erstellen, so dass bei falscher Eingabe (zB: leerer Eingabewert) das Formular "Enter "button wird die Fehlerseite laden (formerr.php), aber wenn die Eingabe in Ordnung ist, wird die Datenseite Verify (formverify.php) geladen. Hier ist, was ich versucht habe:Versuch, PHP zu verwenden, um eine Formularseitenausgabe dynamisch umzuleiten

<?php 
session_start(); 
?> 
<html> 

<?php 
$emailErr = ""; 
$email = ""; 
?> 
<?php 
$newpage = "formverify.php" ; 
echo "$newpage" . "<br>" ; 
$_SESSION["emailErr"] = "email OK" ; 
echo "<br>" . $_SESSION["emailErr"] . "<br>" ; 
?> 
<body> 
<form method="POST" action=<?php echo "$newpage" ; ?> > 
     <?php echo "$newpage" . "<br>" ;?> 
    e-mail:<span class="error"> *Important!</span><br> 
    <input type="text" name="email"   value="<?php echo $_SESSION["email"];  ?>" ><br> 
    <input type="submit" name="enter" value="Enter"> 
</form> 

<?php 
$email = ($_POST["email"]); 

if ($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) //check for presence of a properly formed email address 
    { 
    echo "filter_var output = " . filter_var($email, FILTER_VALIDATE_EMAIL) . "<br>" ; //none of these "echo" statements print 
     $_SESSION['emailErr']= "Invalid email format"; 
     echo $_SESSION['emailErr'] ; 
     $_SESSION['newpage'] = "formerr.php" ; 
     $newpage = "formerr.php" ; 
     echo "<br> new page = " . $newpage ; 
    } 
    } 
    ?> 

    </body> 

Die Verify Seite:

formverify.php:

<?php 
session_start(); 
?> 

<?php 
echo "Form Verify Page" . "<br>" ; 
$_SESSION['email'] =$_POST['email']; 
echo "emailErr = " . $_SESSION['emailErr'] ; 
echo "<br> email is: " . $_SESSION['email']; 
echo "<br> Session emailErr = " . $_SESSION['emailErr']; 
echo "<br> new page = " . $_SESSION['newpage'] ; 
?> 
</html> 

Wert für "$ _SESSION [ 'email']" across richtig kommt, wenn gefüllte in, leer wenn nicht ausgefüllt.
"$ _SESSION ['emailErr']" bleibt als "email OK" unabhängig. (?) "$ _SESSION ['newpage']" ist leer (leer) unabhängig von der Eingabe (?) Auch wenn das Textfeld "email" leer ist, wird das Formular an die Seite "formverify.php" übergeben Variable "newpage" wird als leer angezeigt.

Ich bin nicht wirklich klar, wie das HTML "Form" reagiert, wenn die Eingabe-Schaltfläche aktiviert ist, aber ich erwartete, dass es ein Zurücksetzen der $ newpage-Variable basierend auf dem PHP-Skript darunter ausgelöst wird, aber es nicht t ändern Sie den Wert von $ newpage - es bleibt als "formverify.php" anstatt zu "fremer.php" geändert werden. Ich bin ein Autodidakt Autodidakt, also bitte entschuldigen Sie jeden Mangel an Verständnis.

Antwort

0

Don ' t ändern die Aktion auf der HTML selbst. Verwenden Sie PHP den Benutzer aus der Aktion Skript zu umleiten.

Eg

TheForm.php

<form method='POST' action='MyScript.php'> 
    <input type='text' name='email' /> 
</form> 

myscript.php

<?php 
if(valid($_POST['email'])){ 
    header('Location: AllIsGood.php'); 
} else { 
    header('Location: NotValid.php'); 
} 
?> 

AllIsGood.php

<p>Thanks! Your email was valid.</p> 

NotValid.php

<p>Oh no! You gave an invalid email.</p> 

Code In Bezug auf, falls Sie nicht erkennen, die top Der PHP-Code wird immer dann ausgeführt, wenn die Seite (die das Formular enthält) geladen wird. Wenn Sie die Aktion des Formulars auf die Seite festlegen, auf der sich das Formular befindet (d. H. Sich selbst anrufen), wird das oberste PHP, in dem Sie Ihre anfänglichen Werte festlegen, ausführen. Das in der Logik $_SERVER["REQUEST_METHOD"] == "POST" eingewickelte PHP wartet nicht darauf, dass der Benutzer das Formular ausfüllt. Es wird ausgeführt, wenn REQUEST_METHODPOST ist.

0

Ihre Hauptseite sendet die Formulardaten an formverify.php, daher sieht die Hauptseite niemals die Daten oder legt die Sitzungsvariablen fest. Vielleicht wollten Sie die Formularaktion auf die aktuelle Seite anstatt auf formverify.php setzen?

+0

Nein, wechseln Sie zu einer zweiten Seite. Logikfluss: 1. Der Kunde füllt die Formulardaten aus (form.php), drückt die Eingabetaste. 2. "Enter" -Schaltfläche verweist auf (verify.php), um Daten im Formular zu überprüfen (statisch, nicht editierbar). (Seite hat 2 Schaltflächen: "Senden" und "Zurück"). 3. Wenn die Daten OK sind, klicken Sie auf "Senden"; Daten gehen zur Datenbank, Seite verweist auf "thanks.php" 4. Wenn Korrekturen erforderlich sind, kehrt die Schaltfläche "Zurück" zu "form, php" zurück, wo Daten zurückgemeldet werden, Änderungen werden vorgenommen, dann zu "Enter", gefolgt von "Submit "auf verify.php. Es funktioniert, aber ein leeres Formular wurde eingereicht, und ich habe versucht, das zu vermeiden, also die Validierung. – fwa

+0

Also gibt es eine andere Seite, die Sie nicht zur Verfügung gestellt haben? Wenn nicht etwas auf die erste Seite gepostet wird, dann wird es natürlich nicht funktionieren. Aus dem von Ihnen bereitgestellten Code sieht nur aus, dass formverify.php die POST-Daten erhält. – Chris

Verwandte Themen