PHP скрипт вывода песен из базы данных и возможности за них голосовать 29

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

You might like