Тема: Додавання завдань у БД.
Виконання операції INSERT та збереження отриманих валідованих даних із форми (POST) у реальну таблицю бази даних.
Мета: Навчитись відправляти дані до бази даних, використовуючи SQL-запити. Зрозуміти різницю між прямими запитами та підготовленими виразами (Prepared Statements) для захисту від SQL-ін’єкцій.
Технологічний стек: PHP (PDO::prepare(), execute()), MySQL (INSERT INTO).
create.php).db.php для доступу до бази даних.INSERT INTO).prepare() для захищеної передачі параметрів користувача у запит (замість прямого вклеювання змінних).Відкрийте файл create.php. На самому початку (але після session_start(), якщо ви його використовуєте) додайте підключення до бази за допомогою функції: require_once 'db.php';
Це надасть можливість користуватися об’єктом $pdo безпосередньо у блоці обробки форми.
Знайдіть місце в коді (після перевірки empty($errors)), де раніше виводився var_dump() масиву $_POST. Замість цього ми будемо вставляти дані у БД.
SQL-запит вставки виглядає так:
INSERT INTO tasks (title, description, priority, user_id) VALUES (:title, :description, :priority, :user_id)
Замість того, щоб формувати рядок запиту зі змінними PHP (VALUES ('$title', ...)), ми використовуємо іменовані плейсхолдери (знаки питання або імена з двокрапкою на кшталт :title). Це обов’язкова умова для запобігання атакам SQL-ін’єкції.
Об’єкт $pdo має метод prepare($sql). Він відправляє “скелет” запиту до бази для оптимізації та перевірки:
$stmt = $pdo->prepare('INSERT INTO tasks (title, description, priority, user_id) VALUES (:title, :description, :priority, :user_id)');
Далі викликаємо виконання, передавши в метод execute() масив реальних значень, які база надійно зіставить з плейсхолдерами:
// Для спрощення уявимо, що ви вже маєте $title, $desc, $priority
// та хардкод $user_id (наприклад 1)
$success = $stmt->execute([
':title' => $title,
':description' => $desc,
':priority' => $priority,
':user_id' => 1
]);
Після успішного виконання методу execute() (він повертає true) зробіть перенаправлення користувача на головну сторінку, щоб він побачив своє новостворене завдання у загальному списку. Використовуйте header('Location: index.php'); exit;.
Якщо після переходу на головну сторінку ви бачите створене завдання, яке можна редагувати і воно переживає перезавантаження сервера – вітаємо, форма повністю працездатна!
execute()? Чи можна виконати його кілька разів поспіль із різними масивами параметрів для об’єкта $stmt?lab13.md прикласти скриншот вікна браузера зі сторінкою index.php, на якій видно тільки що введене “свіже” завдання.prepare() -> execute()) вивести у вигляді блоку з підсвіткою PHP-коду..sql або просто надіслати посилання на Git-репозиторій із оновленнями.