شرح صفوف ومحتوى الفقرة
يُطبّق نمط 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";