数据库表:
电影(id_film PK,名字)
类型(id_genre PK,名称)
film_genre(id_film FK,id_genre FK)
这将从流派表输出所有类型:
$genremenu = $veza -> prepare("select * from genre");
$genremenu -> execute();
$resultmenu = $genremenu -> fetchALL(PDO::FETCH_OBJ);
这将输出film_genre表格中所有选定的特定电影类型:
$izraz = $veza -> prepare("select * from genre a inner join film_genre b on a.id_genre=b.id_genre where b.id_film=:id_film");
$izraz -> execute(array("id_film" => $film -> id_film));
$selectedgenre = $izraz -> fetchAll(PDO::FETCH_OBJ);
我在将数据从数据库输出到表单中的多个选定列表时遇到问题.这是一个电影数据库,我正在进行foreach迭代,以读取所有电影类型的行,以输出到多个选择字段.但是我在输入“选定”类型到该列表时遇到了麻烦.代码是
foreach ($resultmenu as $line) {
foreach ($selectedgenre as $sg) {
if ($line-> id_genre === $sg-> id_genre) {
echo "<option value=\"" . $line-> id_genre . "\" selected>" . $line-> name . "</option>";
} else {
echo "<option value=\"" . $line-> id_genre . "\">" . $line-> name . "</option>";
}
}
}
现在我知道我在选定的列表中有重复的输出,因为,例如,如果电影有2个类型,让我们说喜剧和犯罪,这意味着每个$行他将迭代两次检查$selectedgenre,所以我得到输出喜欢:
>喜剧
>喜剧“入选”
>犯罪
>犯罪“选中”
>恐怖
>恐怖
>等
我是PHP的新手,所以我问如何获得没有重复条目的正确列表输出?我试过制动并继续但不工作或我没有使用它?请帮助并提供(如果可能的话)更多替代解决方案.谢谢!
解决方法:
你需要在电影中建立一个类型阵列,然后用它们进行交叉检查.
试试这个
<?PHP
$genres = array();
foreach ($selectedgenre as $sg) {
$genres[] = $sg->id_genre;
}
foreach ($resultmenu as $line) {
if (in_array($line->id_genre,$genres)) {
echo "<option value=\"" . $line->id_genre . "\" selected>" . $line->name . "</option>";
} else {
echo "<option value=\"" . $line->id_genre . "\">" . $line->name . "</option>";
}
}
?>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。