PHP验证链接到下一页

时间:2011-11-06 15:15:50

标签: php forms validation hyperlink refresh

我有一个HTML表单页面,我将其发回给自己以执行一些PHP验证。

一旦发回自身并验证通过,我使用字符串将页面指向下一个链接:

echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://www.website.com/planning/page2.php\">"; 

使用此页面时,页面会在进入下一页(page2.php)之前自行刷新,这意味着页面会在执行验证时再次闪烁,然后重定向。如何在执行验证时将其设为“闪存”?

我的验证如下:

//validation
if(isset($_POST['loadid'])){
$errors = array();
$load=$_POST['loadid'];

if (empty($load)){
$errors[]='<strong><font color=red>Please select a load number</font></strong>';
}


if (!empty($errors)) {
foreach ($errors as $error) {
    echo $error."<br>";
    }}
    else {
        echo "Population accurate";
        echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://www.website.com/planning/page2.php\">"; 
        $_SESSION['sessionloadid']=$_POST['loadid'];

}
}

感谢您的帮助, 莱恩史密斯

1 个答案:

答案 0 :(得分:4)

闪存的结果是因为您正在“浏览器内部”进行重定向。这意味着,浏览器需要加载HTML然后才开始显示它。

然后浏览器会看到它应该重定向,重置窗口(闪存)并进行重定向。

您可以通过使用HTTP标头进行重定向来阻止这种情况:

$_SESSION['sessionloadid']=$_POST['loadid'];
$uri = 'http://www.website.com/planning/page2.php';
header('Location: '.$uri);
printf('<a href="%s">Moved.</a>', $uri);
exit;

而不是:

echo "Population accurate";
echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://www.website.com/planning/page2.php\">"; 
$_SESSION['sessionloadid']=$_POST['loadid'];

浏览器在开始显示页面之前处理HTTP标头,然后它会看到重定向并重定向(通常是自动)。如果浏览器没有自动重定向,则短暂“移动”。显示消息,因此用户可以通过单击链接导航到新位置。

另请参阅http_redirect函数,该函数提供了更多使用PHP进行重定向的功能。如果您没有可用的扩展,那么函数文档显示了在使用PHP进行重定向时应该注意的几个要点:

  • 使用绝对URI。
  • 提供HTTP正文。
  • 指定重定向代码(301,302,...)。
  • 退出剧本。

如果你没有这个功能,我建议你写一个相同的功能,这样你就可以轻松地在你的应用程序中进行重定向。