Как вывести «проверено», если флажок установлен

В «окне редактирования» моей формы у меня есть список флажков, и я хочу проверить те, которые находятся в таблице book_have_languages (обратите внимание, что в одной книге может быть несколько языков).

Код:

<?php $query_c = mysqli_query($mysqli, "SELECT id_language, name_language FROM languages ORDER BY name_language;")
or die('error '.mysqli_error($mysqli));
while ($data_c = mysqli_fetch_assoc($query_c)) {
echo "<div class='checkbox'><label><input type='checkbox' name='languages[]' value='$data_c[id_languages]'>$data_c[name_language]</label></div>";

$sql = "SELECT id_book, id_language FROM book_have_languages WHERE id_book=3";
$res = $mysqli->query($sql) or die("error: ".$sql);
$results = array();
while($row = mysqli_fetch_assoc($res)) {
$results[] = $row;
}
foreach ($results as $result){
if($result['id_language'] == $data_c['id_language']){
echo"<div class='checkbox'><label><input type='checkbox' name='languages[]' value='$data_c[id_language]'checked >$data_c[name_language]</label></div>";
}

}}
?>

Результат:

Если мой стол:

id_book | id_language

3 — 2

3 — 5

3 — 6

Языки 2, 5, 6 проверены, но они дублируются. Как я могу указать в первом эхо только те языки, которых нет в таблице?

0

Решение

Вы просматриваете языки, но не языки, которые есть в книге. Если ваша таблица соответствует описанию, $data_idi должен иметь более одного результата, и вы соответствуете только первому. Вы должны также зацикливаться на этих результатах.

0

Другие решения

Вот как я решил:

<?php
$query_c = mysqli_query($mysqli, "SELECT id_language, name_language FROM languages ORDER BY name_language;")
or die('error '.mysqli_error($mysqli));

while ($data_c = mysqli_fetch_assoc($query_c)) {
$sql = "SELECT id_book, id_language FROM book_te_languages WHERE id_book='$_GET[id]'";
$res = $mysqli->query($sql) or die("error: ".$sql);
$results = array();
while($row = mysqli_fetch_assoc($res)) {
$results[] = $row;
}

echo "<div class='checkbox'><label><input type='checkbox' name='languages[]' value='$data_c[id_language]'";
foreach ($results as $result){
if($result['id_language'] == $data_c['id_language']){
echo "checked";
}
}
echo ">$data_c[name_language]</label></div>";
}
?>
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector