elseif不工作

时间:2010-11-28 02:51:08

标签: php if-statement

这没有意义..我正在尝试根据URL参数的值对帖子进行排序,但我的elseif语句不起作用。

这是一个向查询添加另一个WHERE子句的函数。没有MYSQL错误我只是声明有问题。

function sort_where($where)
{
  if (isset($_GET['sort'])) { 
      $sort = $_GET['sort'];

      if ($sort = "up") {
         $where .= " AND $sort > 1";
      } 
      elseif ($sort = "down") {
         $where .= " AND $sort > 1";
      }

   }

  return $where;
}

查询最终看起来像这样

$query = "SELECT * FROM posts WHERE something = $something AND $sort > 1";

if语句有效,elseif被忽略。如果if语句中有up > 1,我会收到$sort = down的帖子,反之亦然,反之亦然。

4 个答案:

答案 0 :(得分:5)

实际上,两个内部ifs都没有正常工作。

您需要使用==而不是=。一个等号表示赋值,如果赋值为truthy值,则它总是在if条件下求值为true。这就是为什么你的elseif似乎永远不会发生的原因。

您可能还需要修复WHERE条款,它们对我没有意义(您正在排序,但与up列和down列进行比较?) 。或许这就是你设计你的桌子的方式......


根据您的评论,尝试以下SQL WHERE子句,看看您是否收到了正确的帖子:

if ($sort == "up") {
   $where .= " AND up > down";
} 
elseif ($sort == "down") {
   $where .= " AND down > up";
}

答案 1 :(得分:1)

Single =表示变量1 =变量2

Double ==表示比较

此外,如果您要使用此代码,请确保将mysql_real_escape_string()放在$ _GET语句周围或任何具有用户输入的内容或人们将能够使用sql注入。

E.g。 mysql_real_escape_string($ _ GET ['sort'])如果您多次使用它,请确保使用变量

这是更正后的代码;)

function sort_where($where)
{
  if (isset($_GET['sort'])) { 
      $sort = $_GET['sort'];

      if ($sort == "up") {
         $where .= " AND $sort > 1";
      } 
      elseif ($sort == "down") {
         $where .= " AND $sort > 1";
      }

   }

  return $where;
}

答案 2 :(得分:0)

if ($sort = "up")
elseif ($sort = "down")

应该是

if ($sort == "up")
elseif ($sort == "down")

答案 3 :(得分:0)

两个问题:

  if ($sort = "up") {

=是赋值运算符。如果要测试是否相等,则需要在此使用==

此外,两个条件的正文:

  if ($sort = "up") {
     $where .= " AND $sort > 1";
  } 
  elseif ($sort = "down") {
     $where .= " AND $sort > 1";
  }

相同。我不认为你的意思是在查询中附加相同的基本字符串,对吗? (在任何一种情况下,授予$sort都会有所不同,但为什么不只是硬编码字符串,如果这就是你的意思。这只是读起来很混乱,而且很难准确说出你的意图。)