如何用if(isset($ GET ['user']和php mysql中的空用户获得正确的查询?

时间:2014-05-23 10:08:15

标签: php mysql

我使用此查询获取用户名数据表,所以如果我写url index.php?user=username获取用户数据基于用户名,如果index.php和数据表重定向到管理表这个我的查询 如果我根据用户名编写url index.php?user=username数据显示,但是如果写index.php数据不显示,那么它是有用的。

此查询有什么问题,谢谢

if(isset($_GET['user'])) {
  $result = mysql_query("select * from content_table where username = '" . $_GET['user'] . "' limit 2 ;");
if(!empty($GET['user'])){
  $result = mysql_query("select * from content_table order by content_id desc limit 1;");
}

3 个答案:

答案 0 :(得分:1)

我暂时不考虑SQL注入问题。首先,你缺少一个结束大括号。第二个问题是你没有正确地做第二部分。你有:

if(isset($_GET['user'])) {
    // query based on username
if(!empty($GET['user'])){
    // query just first row
}

第二次检查与第一次检查相同 - 不需要它。你的逻辑应该是:

if(!empty($_GET['user'])) {
    // query based on username
}
else {
    // query just first row
}

请注意,您还需要在某处处理空结果。

现在,至于你的SQL注入漏洞,想象一下传入的用户名为myname'; drop table content_table --的一秒钟 - 你的代码只会将其放入并执行它 - 删除表。想一想。

哦,请帮个忙,停止使用mysql_函数 - 切换到PDO或至少mysqli_

答案 1 :(得分:0)

试试这个

if(empty($GET['user'])){
  $result = mysql_query("select * from content_table order by content_id desc limit 1;");
}

if(isset($_GET['user'])) {
  $result = mysql_query("select * from content_table where username = '" . $_GET['user'] . "' limit 2 ;");

答案 2 :(得分:0)

您向前进行了empty测试。因此,当参数为空时,您永远不会执行任何一个查询。

这样做:

if (empty($_GET['user'])) {
    $result = mysql_query("select * from content_table order by content_id desc limit 1;");
} else {
    $result = mysql_query("select * from content_table where username = '" . $_GET['user'] . "' limit 2 ;");
}

empty()首先执行isset测试,因此您无需同时执行这两项测试。