Php 标题(';位置:…)与if子句组合时行为不正确
我希望通过多个步骤处理用户发布的数据(首先验证是否所有内容都正确,然后对数据进行处理) 如果验证post数据并对其进行处理已经成功,我想将用户重定向到success.php 若验证失败,或者处理数据失败,我想重定向到failure 下面是正在发生的事情: 当我通过注释删除标题(…)函数时,我说Php 标题(';位置:…)与if子句组合时行为不正确,php,redirect,if-statement,header,Php,Redirect,If Statement,Header,我希望通过多个步骤处理用户发布的数据(首先验证是否所有内容都正确,然后对数据进行处理) 如果验证post数据并对其进行处理已经成功,我想将用户重定向到success.php 若验证失败,或者处理数据失败,我想重定向到failure 下面是正在发生的事情: 当我通过注释删除标题(…)函数时,我说 if(isset($_POST)) { if(verify_post_data() == 'success') { if(do_something_with_verified_post_d
if(isset($_POST))
{
if(verify_post_data() == 'success')
{
if(do_something_with_verified_post_data() == 'success')
{
//do something else
header('location: success.php');
}
}
header('location: failure.php');
}
及
如果我的数据正确并且在处理数据时没有发生错误,我的脚本将打印“success!failure!”。很有道理。。。因为成功的回音没有中断脚本,所以仍然会显示失败
因此,当我取消注释success头(failure头保持注释状态)时,它确实会将我发送到success.php
如果我随后也取消了对failure头的注释,那么即使成功,它现在也会将我发送到failure.php
这怎么可能
我希望header函数中断脚本并忽略它后面的任何代码。我的假设错了吗?我是否必须手动退出脚本
php不是逐行处理代码吗?或者它是最后一个放在花括号中的标题,而其他标题是第一个,还是什么
或者这不应该发生,而我一定是在其他地方出错了?首先不要在
标题前后使用echo
。并在标题
之后使用退出
//header('location: failure.php');
echo 'failure!';
首先,不要在标题前后使用echo
。并在标题
之后使用退出
//header('location: failure.php');
echo 'failure!';
header函数不会中断脚本并忽略它后面的任何代码。因此,在所有情况下,位置头都作为Location:failure.php
最好将location:failure.php
放在else部分。如果安装了firebug,您可以在firebug的“net”面板中检查响应标题。标题函数不会中断脚本并忽略其后的任何代码。因此,在所有情况下,位置头都作为Location:failure.php
最好将location:failure.php
放在else部分。如果您安装了firebug,您可以在firebug的“net”面板中检查响应标题,引导我找到答案
我必须调用exit();调用header()之后……
我刚刚试过,当调用退出函数时,一切正常。显然是我的假设
我希望header函数中断脚本并忽略它后面的任何代码
这是错误的 A引导我找到答案
我必须调用exit();调用header()之后……
我刚刚试过,当调用退出函数时,一切正常。显然是我的假设
我希望header函数中断脚本并忽略它后面的任何代码
这是错误的 首先,
在调用header()
之前,不要使用echo/setcookie()
第二,,
您需要抽象重定向,如下所示:
if(isset($_POST))
{
if(verify_post_data() == 'success')
{
if(do_something_with_verified_post_data() == 'success')
{
//do something else
header('location: success.php');
exit();
}
}
header('location: failure.php');
exit();
}
首先,,
在调用header()
之前,不要使用echo/setcookie()
第二,,
您需要抽象重定向,如下所示:
if(isset($_POST))
{
if(verify_post_data() == 'success')
{
if(do_something_with_verified_post_data() == 'success')
{
//do something else
header('location: success.php');
exit();
}
}
header('location: failure.php');
exit();
}
是的,php逐行执行。
您发布的数据中可能有一些错误,
如果您编写两个位置头,第一个将被执行,
但脚本的其余部分也将被执行,
为了避免这种情况,您需要调用exit;如果用户发布了错误的数据,也可以使用die()函数。
也请尝试以下代码:
function redirect($location){
if ( ! headers_sent() ){
header(sprintf('Location : %s', $location));
exit;
}
}
if( ! empty($_POST) ) // isset() is good for array keys, not for this one itself
{
if(verify_post_data() == 'success')
{
if(do_something_with_verified_post_data() == 'success')
{
//do something else
redirect('success.php');
}
}
redirect('failure.php');
是的,php逐行执行。
您发布的数据中可能有一些错误,
如果您编写两个位置头,第一个将被执行,
但脚本的其余部分也将被执行,
为了避免这种情况,您需要调用exit;如果用户发布了错误的数据,也可以使用die()函数。
也请尝试以下代码:
function redirect($location){
if ( ! headers_sent() ){
header(sprintf('Location : %s', $location));
exit;
}
}
if( ! empty($_POST) ) // isset() is good for array keys, not for this one itself
{
if(verify_post_data() == 'success')
{
if(do_something_with_verified_post_data() == 'success')
{
//do something else
redirect('success.php');
}
}
redirect('failure.php');
退出代码>在标题()之后代码>确保所有树文件都在同一个文件夹中。问题不是,header函数不做任何事情,因为我在调用header之前有输出,而且我没有被重定向到404。从我的两个标题选项中,我被调到了错误的一个…退出代码>在标题()之后代码>确保所有树文件都在同一个文件夹中。问题不是,header函数不做任何事情,因为我在调用header之前有输出,而且我没有被重定向到404。从我的两个标题选项中,我被调到了错误的一个…就是这样,我必须使用exit。。。我没有回应任何声音,这不是问题…就是这样,我必须使用退出。。。但我没有回应任何事情,这不是问题所在……你是对的。但是如果我不想复制我的代码,我不能使用其他部分不幸的是你是对的。但是如果我不想复制我的代码,我不能使用其他部分