PHP验证链接到下一页
Posted
技术标签:
【中文标题】PHP验证链接到下一页【英文标题】:PHP validation link to next page 【发布时间】:2011-12-23 02:25:42 【问题描述】:我有一个 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】:Flash 结果是因为您在“浏览器内部”进行重定向。这意味着,浏览器需要加载您的 HTML,然后已经开始显示它。
然后浏览器看到它应该重定向,重置窗口(flash)并进行重定向。
您可以通过已经使用 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 进行重定向时应注意的多个要点:
如果您没有该功能,我建议您编写一个功能相同的功能,以便您可以轻松地在应用程序中进行重定向。
【讨论】:
在这里是正确的+1。您不能依赖<meta http-equiv="refresh"...>
,因为某些浏览器可能已将其关闭。上述header()
调用将向浏览器发出302 Found
,浏览器将立即重定向到$uri
。在发出标头重定向后,不必打印 Moved
链接,但如果浏览器出于某种奇怪的原因将最大重定向数设置为 0,则最好这样做。
@Yzmir Ramirez:浏览器可能也禁用了位置标头的自动重定向,请记住这一点。
可能值得添加您要使用 header()
函数发送的响应代码(即,无论是 301 还是在本例中为 303 重定向)。
嗨@hakre,感谢您的建议。我收到错误警告:无法修改标题信息 - 第 31 行 /home/user/public_html/lanning/page2 中的(输出开始于 /home/user/public_html/lanning/page2.php:25)的标题第 31 行在我的代码中是: header('Location: '.$uri);任何建议。这是因为 POST 操作指向自身以执行验证吗?解决方法是什么?以上是关于PHP验证链接到下一页的主要内容,如果未能解决你的问题,请参考以下文章