شرح صفوف ومحتوى الفقرة
لا تحذف سجلات قاعدة البيانات أبداً عبر طلب GET (مثل ?action=delete&id=10)؛ بل ضع زر الحذف دائماً داخل نموذج <form method="POST"> محمي بتوكن CSRF وفحص الملكية.
- روابط الحذف عبر
GETقد تُستدعى عن طريق الخطأ من المتصفح أو عبر هجمات تزوير الطلبات. - تحقق من توكن CSRF ومن شرط الملكية
WHERE id = :id AND user_id = :uidقبل تنفيذ الحذف. - اعرض نافذة تأكيد للمستخدم قبل إرسال نموذج الحذف.
يحذف استعلام DELETE المحضر المهمة 10 فقط بعد التأكد من ملكية المستخدم 42 لها.
PHP
<?php
$pdo = new PDO('sqlite::memory:');
$pdo->exec('CREATE TABLE tasks (id INTEGER PRIMARY KEY, user_id INT, title TEXT)');
$pdo->exec("INSERT INTO tasks VALUES (10, 42, 'Temporary Task')");
$stmt = $pdo->prepare('DELETE FROM tasks WHERE id = :id AND user_id = :u');
$stmt->execute(['id' => 10, 'u' => 42]);
echo "Deleted Rows: " . $stmt->rowCount() . "\n";