Database tables:
film (id_film PK, name)
genre(id_genre PK, name)
film_genre(id_film FK, id_genre FK)
This outputs all genres from genre table:
$genremenu = $veza -> prepare("select * from genre");
$genremenu -> execute();
$resultmenu = $genremenu -> fetchALL(PDO::FETCH_OBJ);
This outputs all selected genres from film_genre table for specific film:
$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);
I am having a problem with outputting data from database to multiple selected list in a form. It's a movie database, and i'm doing foreach iteration to read all lines of movie genres to output to multiple select field. But i'm having a trouble with outputting "selected" genres to that list. the code is
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>";
}
}
}
Now i'm aware that i got duplicate outputs in selected list because, for example, if movie has got 2 genres let's say Comedy and Crime, that means for every $line he will iterate twice to check for $selectedgenre, so i get output like:
- Comedy
- Comedy "selected"
- Crime
- Crime"selected"
- Horror
- Horror
- etc.
I'm new to php so i'm asking how to get the right list output with no duplicate entries? I tried with brake and continue but not working or i didnt use it right? Please help and provide (if possible) more alternative solutions. Thank you!
DISTINCTon your SQL query will help sort your duplicate issue. As for the selected issue, what doesvar_dump($line->id_genre, $sg->id_genre);output?if ($line-> id_genre === $sg-> id_genre)