Тема: Видалити/Редагувати (Prepared Statements).
Реалізація дій “Видалити” (через передачу ID у $_GET) та зміни статусу завдання “Виконано/У процесі”, захист цих SQL-запитів (DELETE / UPDATE) через підготовлені вирази.
Мета: Закріпити навички використання бази даних шляхом реалізації повного циклу операцій (CRUD). Ознайомитися з передачею ідентифікаторів ресурсів через GET-параметри в URL-рядку.
Технологічний стек: SQL (UPDATE, DELETE), PHP ($_GET, PDO::prepare()).
id.is_completed у базі.Prepared Statements для уникнення ін’єкцій через URL.В index.php, під час ітерації масиву $tasks через foreach ($tasks as $task), додайте всередині кожного тегу <li> посилання на видалення і посилання на зміну статусу. Використовуйте ?= $task['id'] ? для підстановки унікального номера:
<a href="delete.php?id=<?= $task['id'] ?>" class="btn">Видалити</a>
<a href="complete.php?id=<?= $task['id'] ?>" class="btn">Змінити статус</a>
Створіть файл delete.php.
db.php (require_once 'db.php';).if(isset($_GET['id'])) { $id = $_GET['id']; ... }.$stmt = $pdo->prepare('DELETE FROM tasks WHERE id = :id');.$stmt->execute([':id' => $id]);.header('Location: index.php'); exit;.Не забувайте про безпеку: якщо зловмисник введе в браузері delete.php?id=1 OR 1=1, підготовлений вираз гарантовано не дасть йому очистити вашу таблицю, а лише попытається знайти id із таким дивним рядком.
Створіть файл complete.php. Процес ідентичний delete.php, але тут ми маємо не видалити рядок, а перемкнути статус булевого поля is_completed на протилежний (або хоча б просто встановити його в 1 / true).
SQL-запит:
UPDATE tasks SET is_completed = 1 WHERE id = :id
Виконайте $stmt->execute([':id' => $id]); і поверніть користувача на index.php.
(Додаткове завдання: зробіть так, щоб код спочатку дізнавався статус $task[‘is_completed’], і перемикав його на !$status, роблячи звичайний тогл. Так користувач зможе знімати галочку “Виконано”).
Відкрийте index.php у браузері. Натисніть на посилання “Видалити” поруч з одним із завдань. Завдання повинно зникнути. Відкрийте phpMyAdmin і переконайтесь, що запису в таблиці більше немає. Натисніть “Змінити статус”, і якщо у вас налаштовані CSS-класи відображення, елемент повинен змінити колір (бо в базі його is_completed став True).
DELETE і UPDATE? Чим вони відрізняються?UPDATE або DELETE у чистому SQL є найстрашнішою та призводить до модифікації/видалення всієї таблиці відразу? (Підказка: забута конструкція)..../delete.php?foo=bar&id=5 потрапляють у PHP скрипт і як їх дістати?delete.php, якщо зловмисник навмисно відвідає адресу delete.php (без передачі ?id=...), і як ви захистили код від збоїв (кидання Notice / Undefined index) в цьому випадку?lab14.md надіслати код файлів обробників: delete.php та complete.php.