PHP验证(SQL)和重定向

时间:2014-01-16 15:27:16

标签: php redirect

我使用GET从URL获取值“ID”,如下所示 -

if ( isset($_GET['id']) && (filter_var($_GET['id'], FILTER_VALIDATE_INT))) {
  $colname = $_GET['id'];
}
else
{
$URL="/index.php";
header ("Location: $URL");
exit(); 
}

然后我检查表中是否存在该ID的元素,如下所示 -

$query_validate = sprintf("SELECT * from surveys where id = %s", GetSQLValueString($colname, "int"));
$result_validate = mysql_query($query_validate, $conn) or die(mysql_error());
$row_validate = mysql_fetch_assoc($result_validate);
$num_validate = mysql_num_rows($row_validate);
if($num_validate==0)
{
$URL="/index.php";
header ("Location: $URL");
exit;   
}

我的想法是,当我输入网址为http://example.com/surveys?id=1时,它会加载第一个调查,依此类推。 如果输入了无效的ID(字母表,id不存在于表中等),它应该将用户重定向回index.php,这是我的代码的基本前提。

但是,即使我转到URL http://example.com/surveys?id=abc,它也会加载页面并显示SQL语法错误。我知道在输出到页面后不能调用头函数,但这两个检查发生在非常接近开始的时候,我确保那里没有输出。

1 个答案:

答案 0 :(得分:1)

试试这个,

$num_validate = mysql_num_rows($result_validate);

而不是

$num_validate = mysql_num_rows($row_validate);

代码:

    $query_validate = sprintf("SELECT * from surveys where id = %s", GetSQLValueString($colname, "int"));
    $result_validate = mysql_query($query_validate, $conn) or die(mysql_error());       
    $num_validate = mysql_num_rows($result_validate);
    if($num_validate==0)
    {
        $URL="/index.php";
        header ("Location: $URL");
        exit;
    }else{
        $row_validate = mysql_fetch_assoc($result_validate);
    }