За последние 24 часа нас посетили 9994 программиста и 439 роботов. Сейчас ищут 137 программистов ...

Отдельные условия для каждой строки в цикле while

Тема в разделе "PHP для новичков", создана пользователем yagordeev, 14 ноя 2017.

  1. yagordeev

    yagordeev Новичок

    С нами с:
    14 ноя 2017
    Сообщения:
    7
    Симпатии:
    0
    Помогите плиз! Не знаю как задать условие if чтобы в зависимости от него выводился свой код для каждой из строк. Нужно чтоб в зависимости от значения $row["Status"] в строке выводился разный код, а получается что while проходит сразу по всем строкам, находит все значения $row["Status"] и применяет для всех строк сразу:

    <?php while ($row = $results->fetch_assoc()) : ?>

    <?php if ($row["Status"] = 'to-ship') : ?>
    <div class="orders1"></div>

    <?php elseif ($row["Status"] = 'cancelled') : ?>
    <div class="orders2"></div>
    <?php endif; ?>

    <?php endwhile; ?>
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    30.279
    Симпатии:
    1.355
    PHP:
    1. <?php
    2. #вариант 1
    3. while ($row = $results->fetch_assoc()) {
    4.     $class = 'orders-general';
    5.     if ($row["Status"] == 'to-ship') {
    6.         $class = 'orders-to-ship';
    7.     } elseif ($row["Status"] == 'cancelled') {
    8.         $class = 'orders-cancelled';
    9.     }
    10.     echo '<div class="orders '. htmlspecialchars($class) .'"></div>';
    11. }
    12.  
    13. #вариант 2
    14. while ($row = $results->fetch_assoc()) {
    15.     switch ($row["Status"]) {
    16.         case 'to-ship':
    17.             $class = 'orders-to-ship';
    18.             break;
    19.         case 'cancelled':
    20.             $class = 'orders-cancelled';
    21.             break;
    22.         default:
    23.             $class = 'orders-general';
    24.     }
    25.     echo '<div class="orders '. htmlspecialchars($class) .'"></div>';
    26. }
    27.  
    28. #вариант 3, правильный
    29. // список статусов и соответствующих им классов
    30. $classes = [
    31.     'to-ship' => 'orders-to-ship',
    32.     'cancelled' => 'orders-cancelled',
    33. ];
    34. // дефолтное значение
    35. $classDefault = 'orders-general';
    36.  
    37. while ($row = $results->fetch_assoc()) {
    38.     $class = isset($classes[$row["Status"]]) ? $classes[$row["Status"]] : $classDefault;
    39.     echo '<div class="orders '. htmlspecialchars($class) .'"></div>';
    40. }
    прям хоть закрепляй
     
  3. yagordeev

    yagordeev Новичок

    С нами с:
    14 ноя 2017
    Сообщения:
    7
    Симпатии:
    0
    Вот блин, про равно забыл.. Спасибо!
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    30.279
    Симпатии:
    1.355
    я всё ж рекомендую третий вариант
     
  5. mkramer

    mkramer Старожил

    С нами с:
    20 июн 2012
    Сообщения:
    4.791
    Симпатии:
    784
    @igordata, если не секрет, зачем ты пропускаешь через htmlspecialchars строку, которая гарантированно не содержит ничего для этой функции интересного?
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    30.279
    Симпатии:
    1.355
    Это просто идеальный пример для малышей, вот я и вкрячил всё сразу, что в голову пришло. Не думал об этом.