Вложено, если условия не работают

0

Я вложен в условия моего проекта, но у меня проблема;

if(isset($_GET['q']) && isset($_GET['t'])) {
  $query = $_GET['q'];
  $type = $_GET['t'];
  $none_key = FALSE;

  if($type = 'singer') {
      $singers = $connect->query("SELECT * FROM lyrica_singers WHERE singer_name LIKE '%$query%'");
      $control = $singers->rowCount();

      if($control > 0)  {
        $on_page = 24;
        $number_singers = $singers->rowCount();
        $number_page = ceil($number_singers/$on_page);

        $page = isset($_GET['p']) ? (int) $_GET['p'] : 1;
        if ($page < 1) $page = 1;
        if ($page>$number_page) $page = $number_page;

        $limit = ($page - 1) * $on_page;

        $singers = $connect->query("SELECT * FROM lyrica_singers WHERE singer_name LIKE '%$query%' ORDER BY singer_name ASC LIMIT ".$limit.",".$on_page);
        $singer_key = TRUE;
      } else {
        $none_key = TRUE;
      }
    }

    if($type = 'song') {
      $songs = $connect->query("SELECT * FROM lyrica_songs WHERE song_name LIKE '%$query%'");
      $control = $songs->rowCount();

      if($control > 0)  {
        $on_page = 24;
        $number_songs = $songs->rowCount();
        $number_page = ceil($number_songs/$on_page);

        $page = isset($_GET['p']) ? (int) $_GET['p'] : 1;
        if ($page < 1) $page = 1;
        if ($page>$number_page) $page = $number_page;

        $limit = ($page - 1) * $on_page;

        $songs = $connect->query("SELECT * FROM lyrica_songs WHERE song_name LIKE '%$query%' ORDER BY song_name ASC LIMIT ".$limit.",".$on_page);
        $song_key = TRUE;
      } else {
        $none_key = TRUE;
      }
    }
} else {
  $key = TRUE;
}

Когда я запускаю код, я ожидаю, что если одна из переменных "control" больше 0, переменная "none_key" должна быть равна 0. Когда "type" varible является "песней", проблем нет, но если "type" - это "singer", а затем переменная "none_key" 1, я думаю, что она запускает второй блок if и становится "none_key" 1 из-за второй переменной "control" не больше нуля.

  • 2
    Возможный дубликат 3 разных равных
  • 1
    ВНИМАНИЕ : При использовании mysqli вы должны использовать параметризованные запросы и bind_param для добавления пользовательских данных в ваш запрос. НЕ используйте интерполяцию или конкатенацию строк для достижения этой цели, поскольку вы создали серьезную ошибку внедрения SQL . НИКОГДА не помещайте $_POST , $_GET или любые пользовательские данные непосредственно в запрос, это может быть очень вредно, если кто-то попытается использовать вашу ошибку.
Теги:
if-statement

1 ответ

2
Лучший ответ

Это присваивание, он устанавливает значение $type в значение singer:

if ($type = 'singer') {

Вы хотите сравнить, он проверяет, равен ли $type равным singer ценности:

if ($type == 'singer') {

[Редактировать] Некоторые люди предпочитают писать такой оператор с переменной last. Обычно это называется "условием Йоды":

if ('singer' == $type) {

Таким образом, если вы испортите и используете только один =, вы получите сообщение об ошибке.

  • 0
    Другим возможным решением является использование оператора switch когда назначение не произойдет случайно.
  • 0
    @tadman Это кажется ненужным - по крайней мере 2-3 дополнительных строки кода, чтобы вы случайно не забыли ни одного = ?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню