Обработка таблицы рекордов на php
- <?php
- $db_host = 'localhost:3307';
- $db_name = 'test';
- $db_user = 'root';
- $db_pass = '';
- // Подключаемся к БД
- $pdo = new PDO("mysql:host=$db_host;dbname=$db_name;charset=utf8", $db_user, $db_pass, [
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
- ]);
- // Создаём таблицу результатов
- $pdo->exec('
- CREATE TABLE IF NOT EXISTS `hiscore` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(100) NOT NULL,
- `score` int(11) NOT NULL,
- `date` datetime NOT NULL,
- PRIMARY KEY (`id`),
- KEY `score` (`score`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- ');
- $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
- switch ($action) {
- case 'set':
- // Сохранение результата
- $name = $_POST['name'] ?: '';
- $score = intval($_POST['score'] ?: 0);
- // Проверка правильности переданных данных
- if (empty($name) || $score == 0) {
- header('HTTP/1.1 400 Bad Request');
- header('Content-Type: application/json;charset=utf-8');
- die('{"error":"Empty required fields: name, score"}');
- }
- $stmt = $pdo->prepare('
- INSERT INTO `hiscore` SET
- `name` = ?,
- `score` = ?,
- `date` = NOW()');
- $stmt->execute([$name, $score]);
- header('HTTP/1.1 200 OK');
- exit;
- case 'get':
- // Вывод топ-10 в json
- header('HTTP/1.1 200 OK');
- header('Content-Type: application/json;charset=utf-8');
- $data = $pdo->query('
- SELECT `name`, `score`, `date` FROM `hiscore`
- ORDER BY `score` DESC
- LIMIT 10
- ')->fetchAll();
- echo json_encode($data, JSON_UNESCAPED_UNICODE);
- exit;
- }
- // В остальных случаях выводим результаты на страницу
- $stmt = $pdo->query('
- SELECT `name`, `score`, `date` FROM `hiscore`
- ORDER BY `score` DESC
- LIMIT 10
- ');
- ?>
- <style>
- #content {
- margin: 10px auto;
- font-size: 120%;
- line-height: 150%;
- max-width: 800px;
- }
- .score {
- width: 100%;
- text-align: center;
- border-collapse: collapse;
- }
- .score th {
- background: #E0E0E0;
- }
- .score tr:nth-child(odd) {
- background: #f9f9f9;
- }
- .score td {
- padding: 5px 0px;
- }
- </style>
- <div id="content">
- <table class="score">
- <thead><tr>
- <th>Место</th><th>Имя</th><th>Результат</th><th>Дата</th>
- </tr></thead>
- <?php
- $place = 0;
- while (list($name, $score, $date) = $stmt->fetch(PDO::FETCH_NUM)) {
- $place++;
- echo '<tr>';
- echo "<td>$place</td><td>$name</td><td>$score</td><td>$date</td>";
- echo '</tr>';
- }
- ?>
- </table>
- </div>
Добавление и вывод таблицы рекордов в формате json и html.
Подключается к базе данных test, создаёт таблицу hiscore и обрабатывает результат.
Если переданы поля action=set, name и score, происходит добавление результата в таблицу. В случае возникновения ошибки, сервер передаёт соответствующий статус-код и текст ошибки в json.
При запросе hiscore.php?action=get, сервер возвращает топ-10 игроков в формате json.
Во всех остальных случаях, выводится таблица рекордов в html.
Подключается к базе данных test, создаёт таблицу hiscore и обрабатывает результат.
Если переданы поля action=set, name и score, происходит добавление результата в таблицу. В случае возникновения ошибки, сервер передаёт соответствующий статус-код и текст ошибки в json.
При запросе hiscore.php?action=get, сервер возвращает топ-10 игроков в формате json.
Во всех остальных случаях, выводится таблица рекордов в html.