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