Estou tentando escrever um roteiro para votar em um filme, baseado no sistema “Like / dislike” de FB. Eu criei uma página php onde o script mostra a lista dos filmes mais apreciados, tirando os dados da tabela “votos” e com um “enquanto” eu os selecionaria da tabela “filmes”, mas eu tenho um problema: a saída HTML mostra apenas um filme (o filme com o ID mais elevado), e os outros filmes com voto não são mostrados.
O código do script é:
if ($_GET['top_rated'] == 'show') { $vote= 1; //vote positive(like) $sql = $pdo->prepare("SELECT * FROM votes WHERE vote= :vote GROUP BY film_id"); $swl->bindParam(":vote", $vote) $sql->execute(); while ($vote_info = $sql->fetch(PDO::FETCH_ASSOC)) { $film_id = $vote_info['film_id']; $result = $pdo->prepare("SELECT * FROM films WHERE id= :film_id"); $result->bindParam(":film_id", $film_id); $result->execute(); } } while ($film_info = $result->fetch(PDO::FETCH_ASSOC)) { $genre_id = $film_info['genre_id']; $sql = $pdo->prepare("SELECT * FROM genres WHERE id=:genre_id"); $sql->bindParam(":genre_id", $genre_id); $sql->execute(); $genre_info = $sql->fetch(PDO::FETCH_ASSOC); ?> <img class="poster" src="https://stackoverflow.com/questions/24224301/vote-system-php-mysql/"> Title:
Year:
Genre:
O mapa do database é:
my_database: films->id/film_name/film_year/genre_id genres->id/genre_name votes->id/film_id/vote
Desde já, obrigado!
Isso porque o seu código que exibe o filme é executado uma vez!
Você deve usar algum tipo de loop para imprimir vários itens. Minha sugestão é mudar
while ($film_info = $result->fetch(PDO::FETCH_ASSOC)) { $genre_id = $film_info['genre_id']; $sql = $pdo->prepare("SELECT * FROM genres WHERE id=:genre_id"); $sql->bindParam(":genre_id", $genre_id); $sql->execute(); $genre_info = $sql->fetch(PDO::FETCH_ASSOC); ?>
Title:
Year:
Genre:
para o seguinte
?>
fetch(PDO::FETCH_ASSOC)) { $genre_id = $film_info['genre_id']; $sql = $pdo->prepare("SELECT * FROM genres WHERE id=:genre_id"); $sql->bindParam(":genre_id", $genre_id); $sql->execute(); $genre_info = $sql->fetch(PDO::FETCH_ASSOC); //print the details at each loop! //this should work if you have multiple items match your query... echo "Title: $film_info['film_name']
Year: $film_info['film_year']
Genre: $genre_info['genre_name']"; ?>
Experimente e relate o que você descobre!