【问题标题】:elseif not working否则不工作
【发布时间】:2010-11-28 02:51:07
【问题描述】:

这没有意义。我正在尝试根据 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 语句中的 $sort = down$sort = down,我都会收到带有 up > 1 的帖子。

【问题讨论】:

    标签: php if-statement


    【解决方案1】:

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

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

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


    根据您的 cmets,尝试以下 SQL WHERE 子句,看看您是否得到正确的帖子:

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

    【讨论】:

    • 谢谢!困扰我的总是最基本的事情,哈哈。是的,上下是我表中的列。我用 UP 和 DOWN 投票对帖子进行排序
    • 啊,我明白了。您是想只过滤赞成的帖子或反对的帖子,还是按分数排序?
    • 按他们的分数。我实际上正在尝试做up > down 和反之亦然(不确定是否可能)。我只是在示例中使用了“1”。
    • @Noob:你的分数是按up - down计算的吗? SO的系统就是这样运作的。
    • @Noob:我将修改后的 SQL 添加到我的答案中。看看它是否适合你。
    【解决方案2】:

    Single = 表示变量 1 = 变量 2

    双 == 表示比较

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

    例如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;
    }
    

    【讨论】:

    • 我的意思是,做一个if (isset($_GET['sort'])),然后如果它被设置,mysql_real_escape_string($_GET['sort'])
    【解决方案3】:

    两个问题:

      if ($sort = "up") {
    

    = 是赋值运算符。如果你想测试是否相等,你需要在这里使用==

    另外,两个条件句的主体:

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

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

    【讨论】:

    • 感谢您的回答! :) 实际上,我没有将 $sort 与相同的值进行比较。
    【解决方案4】:
    if ($sort = "up")
    elseif ($sort = "down")
    

    应该是

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      相关资源
      最近更新 更多