если не работает - PullRequest
       4

если не работает

0 голосов
/ 28 ноября 2010

Это не имеет смысла .. Я пытаюсь сортировать сообщения по значению параметра 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 игнорируется.Я получаю сообщения с up > 1 независимо или наоборот, если $sort = down в операторе if.

Ответы [ 4 ]

5 голосов
/ 28 ноября 2010

На самом деле ни один из двух внутренних if не работает правильно.

Вам нужно использовать ==, а не =.Один знак равенства означает присваивание, и если вы присваиваете истинное значение, оно всегда оценивается как истинное в условии if.Вот почему ваш elseif, кажется, никогда не происходит.

Вам также может понадобиться исправить ваши WHERE предложения, они не имеют смысла для меня (вы сортируете, но сравниваете столбец up иdown столбец?).Или, может быть, именно так вы спроектировали свою таблицу ...


На основе ваших комментариев попробуйте следующие предложения SQL WHERE и посмотрите, получите ли вы правильные сообщения:

if ($sort == "up") {
   $where .= " AND up > down";
} 
elseif ($sort == "down") {
   $where .= " AND down > up";
}
1 голос
/ 28 ноября 2010

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;
}
0 голосов
/ 28 ноября 2010

Две проблемы:

  if ($sort = "up") {

= - оператор присваивания.Вам нужно использовать == здесь, если вы хотите проверить на равенство.

Кроме того, тело обоих условий:

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

идентичны.Я не думаю, что вы хотите добавить одну и ту же базовую строку в запрос, не так ли?(Допустим, $sort будет отличаться в любом случае, но почему бы просто не жестко закодировать строки, если это то, что вы имеете в виду. В любом случае, это выглядит просто сбивающим с толку, и трудно точно сказать, каково ваше намерение.)

0 голосов
/ 28 ноября 2010
if ($sort = "up")
elseif ($sort = "down")

должно быть

if ($sort == "up")
elseif ($sort == "down")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...