/
Denkon
/
task-manager-api
Обзор
Документация
Войти
/
Denkon
/
task-manager-api
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
index.php
128 строк
4 KB
Denkon367
Заливка файлов
13 фев 2026, 03:33
13 фев 2026, 03:33
14c18d7
Код
Авторство
О чём код?
<?php // Подключаемся к базе данных $dbFile = __DIR__ . '/db.sqlite'; try { $pdo = new PDO("sqlite:$dbFile"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die($e->getMessage()); } // Определение роутов $method = $_SERVER['REQUEST_METHOD']; $path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'); if ($path === 'tasks') { if ($method === 'GET') { handleGetAllTasks($pdo); } elseif ($method === 'POST') { handleCreateTask($pdo); } } elseif (preg_match('/^task\/(\d+)/', $path, $matches)) { $taskId = intval($matches[1]); if ($method === 'GET') { handleGetSingleTask($pdo, $taskId); } elseif ($method === 'PUT') { handleUpdateTask($pdo, $taskId); } elseif ($method === 'DELETE') { handleDeleteTask($pdo, $taskId); } } else { header("Location: /panel.html"); exit; } // Функция для получения всех задач function handleGetAllTasks($pdo) { $stmt = $pdo->prepare("SELECT * FROM tasks ORDER BY id DESC"); $stmt->execute(); $tasks = $stmt->fetchAll(PDO::FETCH_ASSOC); if (!$tasks) { http_response_code(404); echo json_encode(['error' => 'Задачи отсутствуют']); } else { http_response_code(200); echo json_encode($tasks); } } // Функция для создания новой задачи function handleCreateTask($pdo) { $data = json_decode(file_get_contents('php://input'), true); if (empty($data['title'])) { http_response_code(400); echo json_encode(['error' => 'Необходимо заполнить название задачи']); return; } $stmt = $pdo->prepare("INSERT INTO tasks (title, description, status) VALUES (:title, :description, :status)"); $stmt->execute([ ':title' => $data['title'], ':description' => $data['description'] ?? '', ':status' => $data['status'] ?? 'pending' ]); http_response_code(201); echo json_encode(['message' => 'Задача успешно создана', 'id' => $pdo->lastInsertId()]); } // Функция для получения отдельной задачи function handleGetSingleTask($pdo, $id) { $stmt = $pdo->prepare("SELECT * FROM tasks WHERE id=?"); $stmt->execute([$id]); $task = $stmt->fetch(PDO::FETCH_ASSOC); if (!$task) { http_response_code(404); echo json_encode(['error' => 'Задача не найдена']); } else { http_response_code(200); echo json_encode($task); } } // Функция для обновления задачи function handleUpdateTask($pdo, $id) { $data = json_decode(file_get_contents('php://input'), true); // Проверяем обязательные поля if (empty($data['title'])) { http_response_code(400); echo json_encode(['error' => 'Заголовок задачи обязателен']); return; } // Подготовленное выражение для обновления всех полей задачи $stmt = $pdo->prepare("UPDATE tasks SET title=:title, description=:description, status=:status WHERE id=:id"); $stmt->execute([ ':title' => $data['title'], ':description' => $data['description'] ?? '', // Используем дефолтное значение, если отсутствует ':status' => $data['status'] ?? 'pending', // Дефолтный статус, если не задан ':id' => $id ]); if ($stmt->rowCount() > 0) { http_response_code(200); echo json_encode(['message' => 'Задача успешно обновлена']); } else { http_response_code(404); echo json_encode(['error' => 'Задача не найдена']); } } // Функция для удаления задачи function handleDeleteTask($pdo, $id) { $stmt = $pdo->prepare("DELETE FROM tasks WHERE id=?"); $stmt->execute([$id]); if ($stmt->rowCount() > 0) { http_response_code(200); echo json_encode(['message' => 'Задача удалена']); } else { http_response_code(404); echo json_encode(['error' => 'Задача не найдена']); } }