PHP脚本未通过标头重定向


PHP script not redirecting via header

我正在我的代码中寻找某种导致这个PHP页面无法重定向的错误。我想看看是否有人知道这个问题的原因(可能与cookie有关)。

inc_vars.php:

<?php
//some of the variables have been omitted.
$pid = 'gbb';
$dbtable ='';
$dbname = '';
$dbuser = '';
$dbpass = '';
$connect = mysql_connect('localhost', $dbuser, $dbpass);
if(!$connect){
    header('Location: omitted');
    die();
}
mysql_select_db ($dbname, $connect);
$webroot = 'omitted';
$share_page = $webroot . '/share-the-training';
$gift = $webroot . '/free-video?setuser=1199';
$bonus_content = $webroot . '/awesome-bonus';
$share_php = $webroot . '/share.php';
?>

refresh_id.php:

<?php
include_once('inc_vars.php');
$results = mysql_query("SELECT id FROM " . $dbtable . " WHERE email='" . $_GET['email'] . "'");

if(!$results || mysql_num_rows($results)==0){
    header('Location: ' . $share_page . '?errorcode=1');
    die();
}
$res_arr = mysql_fetch_assoc ($results);
setcookie($pid . "_viral", (string)$res_arr['id'], time() + 3600 * 365);
move_on();
function move_on(){
    header ('Location: ' . $share_php);
    die();
}
?>

此人何时访问refresh_id.php?email=他们的电子邮件他们应该重定向到$share_php页面。这不起作用。

但是,如果出现这种情况:refresh_id.php?email=一封不在数据库中的电子邮件,然后脚本重定向到$share_page,这绝对没问题。

我试过这个,有没有gbb_viral cookie。我不知道为什么这不起作用。所有页面都是实时的,现在都在互联网上,以防你想找自己。

省略

数据库中存在的电子邮件如下:acctrafficcop@gmail.com(对于那些想测试这个的人)

更新

作用域的愚蠢错误。我只是在move_on()函数中添加了全局$share_php,现在一切都很好。感谢大家对SQL注入的关注,我现在将转到准备好的语句。

move_on函数中,由于变量作用域的原因,变量$share_php不存在。因此,您的重定向如下所示:Location:。Location标头中没有URL。

您可以将变量传递到函数中,或者使用global关键字使其可用。试试这个:

move_on('/redirect_url');
function move_on($url){
    header ('Location: ' . $url);
    die();
}

事实上,在refresh_id.php中,我在任何地方都看不到名为$share_php的变量,所以您正在重定向到一个空的URL。

您还需要为浏览器设置一个状态标头来接受位置标头。尝试添加

header('HTTP/1.1 303 See Other');

使用curl将帮助您进行调试。此外,您正在使用SQL查询为自己设置SQL注入。

编辑:阅读第二个答案后,您没有将位置传递给重定向功能是正确的。这个问题也应该解决。

$results = mysql_query("SELECT id FROM " . $dbtable . " WHERE email='" . $_GET['email'] . "'");

永远不要相信来自这样的用户的输入。相反,请使用SQL绑定。以下是使用mysqli库的方法:http://php.net/manual/en/mysqli-stmt.bind-param.php