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

Preserving Old Form Inputs on Error الاحتفاظ بمدخلات النموذج السابقة عند فشل التحقق

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

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

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

يُطبّق نمط PRG أيضاً عند فشل التحقق من النموذج؛ حيث تُحفظ رسائل الخطأ والمدخلات السابقة غير الحساسة في $_SESSION ثم يُحوّل المستخدم لصفحة النموذج بـ 303 لإعادة ملء الحقول.

  • ينزعج المستخدمون عندما يضيع كل ما كتبوه بسبب خطأ في حقل واحد؛ لذا احتفظ بالحقول الآمنة (مثل الاسم والبريد) داخل $_SESSION["old"].
  • قاعدة أمنية صارمة: لا تخزن أبداً كلمات المرور أو أرقام البطاقات البنكية داخل $_SESSION["old"]!
  • رمّز دائماً القيم المسترجعة باستخدام htmlspecialchars() عند طباعتها داخل خاصية value="..." في HTML.

تتم قراءة ومسح كل من الأخطاء والمدخلات السابقة في طلب GET، مع ترميز الاسم بـ htmlspecialchars() لحمايته داخل خاصية الحقل.

PHP
<?php
session_start();
$_SESSION["errors"] = ["email" => "Please enter a valid email address."];
$_SESSION["old"]    = ["name" => "Tariq & Co.", "email" => "invalid-email"];

$errors = $_SESSION["errors"] ?? [];
$old    = $_SESSION["old"] ?? [];
unset($_SESSION["errors"], $_SESSION["old"]);

$safeName = htmlspecialchars($old["name"] ?? "", ENT_QUOTES, "UTF-8");
echo 'Input value="' . $safeName . '" | Error: ' . $errors["email"] . "\n";