انتقل إلى محتوى الدرس

The Duplicate POST Resubmission Problem مشكلة إعادة إرسال النماذج عند تحديث الصفحة

امنع تكرار إرسال النماذج عند تحديث الصفحة عبر نمط PRG ورسائل الجلسة المؤقتة Flash Messages في PHP 8.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

عندما يعالج سكريبت PHP طلب POST ويطبع صفحة HTML مباشرة في نفس الاستجابة، يبقى آخر طلب مسجل في ذاكرة المتصفح هو طلب POST نفسه.

  • إذا ضغط المستخدم على زر تحديث الصفحة ، يعيد المتصفح إرسال نفس بيانات POST مرة ثانية للخادم.
  • في المتاجر الإلكترونية وأنظمة الحجز، يؤدي تكرار إرسال POST إلى خصم المبلغ مرتين أو إدراج سجلات مكررة في قاعدة البيانات.
  • القاعدة الذهبية: لا تعرض صفحة HTML النهائية مباشرة كرد على طلب POST أبداً!

نظراً لعدم إجراء تحويل بعد معالجة طلب POST، فإن تحديث الصفحة يعيد تنفيذ كود الإضافة ويكرر الطلب.

مخطط توضيحي: محاكي نمط التحويل بعد الإرسال (PRG) ورسائل التنبيه المؤقتة (Flash) في PHP
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";
}