我有一个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'];
}
}
感谢您的帮助, 莱恩史密斯
答案 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进行重定向时应该注意的几个要点:
如果你没有这个功能,我建议你写一个相同的功能,这样你就可以轻松地在你的应用程序中进行重定向。