尝试使用PHP动态重定向表单页面输出


Attempt to use PHP to dynamically redirect a form page output

我正试图为HTML表单页面创建一个"动态重定向",这样,如果遇到不正确的输入(例如:空输入值),form"Enter"按钮将导致加载错误页面(formerr.php),但如果输入正常,则会加载数据验证页面(formverify.php)。以下是我尝试过的:

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

验证页面:

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>

"$_SESSION['email']"的值如果填写正确,则为空。
"$_SESSION['emailErr']"保持为"电子邮件正常"。(?)"$_SESSION['newpage']"为空(空),与输入无关(?)即使"电子邮件"文本框为空,表单也会传递到"formverify.php"页面,而"newpage"变量echo为空。

我真的不清楚当输入按钮被激活时HTML"Form"是如何操作的,但我希望它会根据下面的PHP脚本触发$newpage变量的重置,但它不会改变$newpage的值-它仍然是"formverify.PHP",而不是改为"formerr.PHP"。我是一个自学成才的傻瓜,所以请原谅我的理解不足。

不要更改HTML本身的操作。使用PHP从操作脚本重定向用户。

例如

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>

关于您的代码,如果您没有意识到,只要页面(包含表单)加载,就会执行顶部的PHP代码。如果将表单的操作设置为表单所在的页面(即调用自身),则将执行设置初始值的顶级PHP。封装在$_SERVER["REQUEST_METHOD"] == "POST"逻辑中的PHP不会等待用户填写表单。只要REQUEST_METHODPOST,它就会执行。

您的主页面将表单数据发布到formverify.php,因此主页面永远不会看到数据或设置会话变量。也许您打算将表单操作设置为当前页面,而不是formverify.php