В «окне редактирования» моей формы у меня есть список флажков, и я хочу проверить те, которые находятся в таблице 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 проверены, но они дублируются. Как я могу указать в первом эхо только те языки, которых нет в таблице?
Вы просматриваете языки, но не языки, которые есть в книге. Если ваша таблица соответствует описанию, $data_idi
должен иметь более одного результата, и вы соответствуете только первому. Вы должны также зацикливаться на этих результатах.
Вот как я решил:
<?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>";
}
?>