2012-09-01 206 views
0

前三个查询工作正常,但最后一个不是。第二届查询与$status !== ''好吗工作,但最后一个具有相同$status !== ''不执行查询任何一个可以帮助我需要帮助mysql查询

if (isset($_POST['go'])) { 

    $status = $_POST[status]; 
    if ($status == 4){ 
      $status = '' ; 
    } 

    if ($topic == 100 && $subtopic == '' && $status == '') { 
    $queryString = "select * from tblquiz where userid='$_SESSION[numericuserid]' LIMIT $start, $limit" ; 
    $countString = "select * from tblquiz where userid='$_SESSION[numericuserid]'"; 
    } // NOTE : THIS QUERY IS WORKING PERFECT 

     elseif ($topic !== '' && $subtopic !== '' && $status !== '') { 
    $queryString = "select * from tblquiz where qstatus=$status AND qtopic='$topic[topicname]' AND subtopic='$_POST[subtopic]' AND userid='$_SESSION[numericuserid]' LIMIT $start, $limit" ; 
    $countString = "select * from tblquiz where qstatus=$status AND qtopic='$topic[topicname]' AND subtopic='$_POST[subtopic]' AND  userid='$_SESSION[numericuserid]'"; 
     } // NOTE : THIS QUERY IS WORKING PERFECT 

     elseif ($topic !== '' && $subtopic !== '' && $status == '') { 
    $queryString = "select * from tblquiz where qtopic='$topic[topicname]' AND subtopic='$_POST[subtopic]' AND userid='$_SESSION[numericuserid]' LIMIT $start, $limit" ; 
    $countString = "select * from tblquiz where qtopic='$topic[topicname]' AND subtopic='$_POST[subtopic]' AND userid='$_SESSION[numericuserid]'"; 
     } // NOTE : THIS QUERY IS WORKING PERFECT 


     elseif ($topic == 100 && $subtopic == '' && $status !== '') { 
    $queryString = "select * from tblquiz where qstatus= $status AND userid='$_SESSION[numericuserid]' LIMIT $start, $limit" ; 
    $countString = "select * from tblquiz where qstatus= $status AND userid='$_SESSION[numericuserid]' "; 
    } **// NOTE : THIS QUERY IS NOT WORKING** 

} 
+2

不是一个答案,但是现在有一个很大的机会,你有一个[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)易受攻击的应用程序。 – PeeHaa

+1

qstatus缺少引号? – feathj

+1

99%的问题是由于没有使用正确的[SQL占位符](http://bobby-tables.com/php)来完成您的查询构建而造成的。如果你使用这些技术,你不会有这样的问题。你现在拥有它的方式,这些查询完全运行将会是纯粹的运气。 – tadman

回答

0
select * from tblquiz where qstatus= '$status' 

QSTATUS缺失报价?

+1

即可SQL注入,再一次SQL注入 –

+1

。实际上,这整块代码都是一个集群,但问题是“为什么它不起作用”,我回答了这个问题。显然这个用户应该刷新SQL安全。 – feathj

+0

仅仅因为这个问题是具体的,并不意味着我们这些拥有更多知识的人不应该把它传递下去。 :-) –

0

在你的elseif子句中,检查$ status是否为空,如果是则设置$ querystring和$ countstring。这意味着您试图查询

qstatus= AND 

这应该会产生SQL错误。尝试调试时打印出你的sql语句总是一个好主意。

+1

SQL注入和再次SQL注入 –

+1

@Adrian康沃尔好点,但问题不在于消毒SQL是吗? –

+1

正确 - 但这正是索尼被Lulzsec黑客攻击的原因。事实是,PHP是这样的,应该让OP意识到 - 问索尼是否认为他们的系统是安全的。 OP是直接从HTTP请求中获取不可信值 - 需要提及 –