我正在我的代码中寻找某种导致这个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