2010-11-28 5 views
0

Это не имеет смысла. Я пытаюсь сортировать сообщения в соответствии со значением параметра URL, но моя инструкция elseif не работает.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"; 

КРП работает оператор, то ElseIf игнорируется. Я получаю сообщения с up > 1 независимо или наоборот, если $sort = down в инструкции if.

ответ

5

На самом деле, ни один из двух внутренних МФСА работает правильно.

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

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


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

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

Спасибо! Это всегда самые основные вещи, которые беспокоят меня lol. Да вверх и вниз столбцы в моей таблице. Im сортировки сообщений с UP и DOWN голосов – Noob 2010-11-28 03:04:27

+0

А я вижу. Вы пытаетесь отфильтровать только вышеперечисленные записи или нисходящие записи или сортировать их по счетам? – BoltClock 2010-11-28 03:07:12

+0

своими оценками. Я на самом деле пытаюсь сделать «вверх»> «вниз» и наоборот наоборот (не уверен, если возможно). Я просто использовал «1» в примере. – Noob 2010-11-28 03:09:12

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

должен быть

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

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

if ($sort = "up") { 

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

Кроме того, корпус обоих условными:

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

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

1

Single = означает переменная 1 = переменная 2

Double == означает сравнить

Кроме того, если вы собираетесь использовать этот код убедитесь, что вы положили mysql_real_escape_string() вокруг $ _GET заявления или что-нибудь, что имеет пользовательский ввод или люди будут иметь возможность для использования SQL-инъекции.

E.g.mysql_real_escape_string ($ _ GET [ «вроде»]), и если вы используете его несколько раз убеждается вы используете переменную

Вот исправленный код;)

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; 
} 
Смежные вопросы