Php 否则就不行了

Php 否则就不行了,php,if-statement,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"; }

这没有道理。。我试图根据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
,我会得到带有
up>1
的帖子,反之亦然

if ($sort = "up")
elseif ($sort = "down")
应该是

if ($sort == "up")
elseif ($sort == "down")
应该是

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

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

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

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


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

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

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

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

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


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

if ($sort == "up") {
   $where .= " AND up > down";
} 
elseif ($sort == "down") {
   $where .= " AND down > up";
}
两个问题:

  if ($sort = "up") {
=
是赋值运算符。如果要测试相等性,需要在此处使用
==

此外,两个条件的主体:

  if ($sort = "up") {
     $where .= " AND $sort > 1";
  } 
  elseif ($sort = "down") {
     $where .= " AND $sort > 1";
  }
都是一样的。我不认为您的意思是在查询中附加相同的基本字符串,是吗?(当然,
$sort
在这两种情况下都会有所不同,但如果这正是您的意思,为什么不直接将字符串硬编码。这读起来非常混乱,很难准确说出您的意图。)

两个问题:

  if ($sort = "up") {
=
是赋值运算符。如果要测试相等性,需要在此处使用
==

此外,两个条件的主体:

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

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

Single=means variable 1=variable 2

Double==表示比较

此外,如果要使用此代码,请确保在$\u GET语句或任何有用户输入的语句周围放置mysql\u real\u escape\u string(),否则人们将能够使用sql注入

例如,mysql_real_escape_string($\u GET['sort']),如果您多次使用它,请确保使用变量

这是正确的代码;)


单一=表示变量1=变量2

Double==表示比较

此外,如果要使用此代码,请确保在$\u GET语句或任何有用户输入的语句周围放置mysql\u real\u escape\u string(),否则人们将能够使用sql注入

例如,mysql_real_escape_string($\u GET['sort']),如果您多次使用它,请确保使用变量

这是正确的代码;)


谢谢总是最基本的事情困扰着我lol。是的,上下都是我表格中的列。我用我看到的上下votesAh对帖子进行排序。你是在尝试只过滤投票率较高的帖子还是投票率较低的帖子,还是按分数排序?按分数排序。实际上,我正在尝试执行
up>down
,反之亦然(如果可能的话,不确定)。我刚才在例子中用了“1”。@Noob:你的分数是按上下计算的吗?这就是SO系统的工作原理。@Noob:我在答案中添加了修改后的SQL。看看是否对你有用。谢谢!总是最基本的事情困扰着我lol。是的,上下都是我表格中的列。我用我看到的上下votesAh对帖子进行排序。你是在尝试只过滤投票率较高的帖子还是投票率较低的帖子,还是按分数排序?按分数排序。实际上,我正在尝试执行
up>down
,反之亦然(如果可能的话,不确定)。我刚才在例子中用了“1”。@Noob:你的分数是按上下计算的吗?这就是SO系统的工作原理。@Noob:我在答案中添加了修改后的SQL。看看它是否对你有效。答案请点击Thx!:)实际上,我并没有将$sort与相同的值进行比较。答案是Thx!:)实际上,我并不是在比较$sort和同一个值。我的意思是,做一个
if(isset($\u GET['sort'])
,然后如果它被设置,
mysql\u real\u escape\u string($\u GET['sort'])
。我的意思是,做一个
如果(isset($\u GET['sort'])
,那么如果它被设置,
mysql\u real\u escape\u string($\u GET['sort'])
)。