شرح صفوف ومحتوى الفقرة
عندما يعالج سكريبت PHP طلب POST ويطبع صفحة HTML مباشرة في نفس الاستجابة، يبقى آخر طلب مسجل في ذاكرة المتصفح هو طلب POST نفسه.
- إذا ضغط المستخدم على زر تحديث الصفحة ، يعيد المتصفح إرسال نفس بيانات
POSTمرة ثانية للخادم. - في المتاجر الإلكترونية وأنظمة الحجز، يؤدي تكرار إرسال
POSTإلى خصم المبلغ مرتين أو إدراج سجلات مكررة في قاعدة البيانات. - القاعدة الذهبية: لا تعرض صفحة HTML النهائية مباشرة كرد على طلب
POSTأبداً!
نظراً لعدم إجراء تحويل بعد معالجة طلب POST، فإن تحديث الصفحة يعيد تنفيذ كود الإضافة ويكرر الطلب.
PHP
<?php
$method = "POST";
if ($method === "POST") {
// Anti-pattern: rendering HTML directly without redirecting
echo "Order saved! (Danger: Pressing F5 will submit POST again!)\n";
}