我正试图为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_METHOD
是POST
,它就会执行。
您的主页面将表单数据发布到formverify.php,因此主页面永远不会看到数据或设置会话变量。也许您打算将表单操作设置为当前页面,而不是formverify.php
?