我使用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语法错误。我知道在输出到页面后不能调用头函数,但这两个检查发生在非常接近开始的时候,我确保那里没有输出。
答案 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);
}