PHP скрипт вывода песен из базы данных и возможности за них голосовать
Для реализации данной задачи создадим PHP-скрипт, который отображает список песен из базы данных и позволяет голосовать за каждую песню. Скрипт будет состоять из двух частей: одна часть будет отвечать за отображение списка и работу с голосами, вторая — за обновление информации о голосах и обработку голосования.
Структура таблицы
Убедитесь, что в базе данных существует таблица songs с колонками для хранения информации о песне и количестве голосов. Если такой таблицы нет, создайте её:
CREATE TABLE songs (
id INT AUTO_INCREMENT PRIMARY KEY,
artist VARCHAR(255) NOT NULL,
song VARCHAR(255) NOT NULL,
votes INT NOT NULL DEFAULT 0
);
Скрипт для отображения песен и голосования (index.php)
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Голосование за песни</title>
</head>
<body>
<h1>Список песен</h1>
<?php
// Подключение к базе данных
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
$conn = new mysqli($servername, $username, $password, $dbname);
// Проверка соединения
if ($conn->connect_error) {
die("Ошибка подключения: " . $conn->connect_error);
}
// Получение списка песен
$sql = "SELECT id, artist, song, votes FROM songs";
$result = $conn->query($sql);
// Отображение списка песен
if ($result->num_rows > 0) {
echo "<ul>";
while ($row = $result->fetch_assoc()) {
echo "<li>" . htmlspecialchars($row['artist']) . " - " . htmlspecialchars($row['song']) .
" (Голосов: " . $row['votes'] . ")
<form action='vote.php' method='post' style='display: inline;'>
<input type='hidden' name='song_id' value='" . $row['id'] . "'>
<input type='submit' value='Голосовать'>
</form>
</li>";
}
echo "</ul>";
} else {
echo "Песни не найдены.";
}
$conn->close();
?>
</body>
</html>
Скрипт для обработки голосов (vote.php)
<?php
// Подключение к базе данных
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
$conn = new mysqli($servername, $username, $password, $dbname);
// Проверка соединения
if ($conn->connect_error) {
die("Ошибка подключения: " . $conn->connect_error);
}
// Проверяем, была ли отправлена форма методом POST
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['song_id'])) {
$song_id = intval($_POST['song_id']);
// Увеличиваем количество голосов на 1
$sql = "UPDATE songs SET votes = votes + 1 WHERE id = $song_id";
if ($conn->query($sql) === TRUE) {
echo "Ваш голос учтен. <a href='index.php'>Вернуться к списку песен</a>";
} else {
echo "Ошибка при голосовании: " . $conn->error;
}
}
$conn->close();
?>
Объяснение:
index.php: Получает из базы данных список песен и отображает их. Каждая песня сопровождается формой с кнопкой «Голосовать», отправляющей запрос наvote.php.vote.php: Увеличивает количество голосов для выбранной песни. Использует безопасную передачу идентификатора песни черезhiddenполе формы.
Замечания:
- Замените
your_username,your_passwordиyour_databaseна данные доступа к вашей базе данных. - Применение функций
htmlspecialchars()помогает предотвратить XSS-атаки, обеспечивая безопасный вывод данных. - Предполагается, что у пользователя есть права на чтение и запись в базу данных.