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-атаки, обеспечивая безопасный вывод данных. - Предполагается, что у пользователя есть права на чтение и запись в базу данных.