PHP — Как изменить результаты из цикла While, если какой-либо результат строки совпадает

#php #mysql #while-loop

#php #mysql #цикл while

Вопрос:

Я искал результат для этого и, похоже, не могу найти ничего, что касается этой конкретной проблемы…

Я использую цикл while для создания HTML-шаблона из моей таблицы MySQL.

Все работает, но я не могу понять, как сказать «если какой-либо результат строки в возврате из цикла while равен «true», измените его на «проверено».

Итак, у меня есть, например:

 $result = mysqli_query($conn, "SELECT * FROM hardware_requests");


    while($row = mysqli_fetch_array($result)) {       

     echo "<input  type='checkbox' " . $row["checkbox1"] . "/>
           <input  type='checkbox' " . $row["checkbox2"] . "/> ";

    }
  

Результатом $row[checkbox1] является ‘true’, а результатом $row[checkbox2] является null (в таблице нет записи для этой ячейки)

Ни за что на свете я не могу понять, как внутри цикла while сделать что-то вроде:

 if ($row[] == 'true') {

   $row[] = 'checked';

}
  

С помощью $row[] проверяется каждая запись в базе данных.

Я отредактировал это (изначально кавычки вокруг «checkbox1» и «checkbox2» в HTML отсутствовали…

Чтобы прояснить больше, разработчик, который изначально настраивал код, установил флажки во внешнем интерфейсе, введенные в базу данных как «true» (и теперь существует довольно надежная база данных с заполненными флажками).

Некоторые части того, что я пытаюсь завершить, имеют более 30 флажков, и я хочу иметь возможность устанавливать свойство ‘checked’ для входного HTML-кода (при настройке чего-то, что будет системой отслеживания того, что было завершено, на основе ввода в базу данных).

Таким образом, вместо индивидуальной установки каждого флажка, т.е.

 $row["checkbox1"] = 'checked',
$row["checkbox2"] = 'checked'
  

имея более 30 флажков, я надеялся просто перебрать каждую строку и использовать оператор if, чтобы выяснить, какой из них в данный момент равен ‘true’, и если это так, изменить на ‘checked’.

Еще раз спасибо за помощь!

Комментарии:

1. У вас отсутствуют кавычки в $row[checkbox1]

2. Сколько столбцов в вашей таблице? Вы не перечисляете их…

3. Если вы знаете, что $row['checkbox2'] равно нулю, почему вы утруждаете себя его выводом?

4. Я не уверен, но вам просто нужно просто изменить ‘true’ на ‘checked’? «<тип ввода=’checkbox’ » . ($row[checkbox1] == ‘true’ ‘checked’:») . «/>

Ответ №1:

Одной из возможностей является преобразование логических значений в строки в вашем запросе.

 $result = mysqli_query($conn,
 "SELECT
   IF(checkbox1,'checked','') AS checkbox1,
   IF(checkbox2,'checked','') AS checkbox2
 FROM hardware_requests");
  

Тогда ваш шаблон может остаться прежним. Однако вам следует заключить эти ключи массива в кавычки.

 while($row = mysqli_fetch_array($result)) {
     echo "<input  type='checkbox' " . $row['checkbox1'] . "/>
           <input  type='checkbox' " . $row['checkbox2'] . "/> ";
}
  

Ответ №2:

Вы можете использовать условное выражение.

 while($row = mysqli_fetch_array($result)) {       
     echo "<input  type='checkbox' " . ($row['checkbox1'] == "true" ? "checked" : "")  . "/>
           <input  type='checkbox' " . ($row['checkbox2'] == "true" ? "checked" : ""). "/> ";
}