#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" : ""). "/> ";
}