مشكلة في تنفيذ بلدي لنشر / إعادة التوجيه / الحصول على نمط

StackOverflow https://stackoverflow.com/questions/1678763

  •  16-09-2019
  •  | 
  •  

سؤال

أنا دائما استخدام بعد / إعادة توجيه / الحصول طريقة على أشكالي. أشكالي عموما تقدم دائما إلى أنفسهم. ومع ذلك، عندما يكون لدي خطأ في النموذج، لا أرسل أي رؤوس جديدة. هذا هو لذا يمكنني بسهولة القيام بالأشياء مثل هذا

<input type="text" name="email" value="<?php echo $this->input->post('email', '') ?>" />

تعد PHP مجرد وظيفة مكتبة تعالج الحججتين 2، ومفتاح $ _Post والقيمة الافتراضية إذا لم تكن موجودة.

هذا يعني أنه إذا كان شخص ما يحدث خطأ في النموذج، فلا يلزم إعادة ملء النموذج مرة ثانية. العيب هو أن إعادة تحميل الصفحة تمنحهم تحذير آخر في متصفحهم.

هل هناك على أي حال لتجنب ذلك، دون استخدام شيء ما للدولة (أي ملفات تعريف الارتباط والدورة وقاعدة البيانات وغيرها)

هل كانت مفيدة؟

المحلول

أجد أفضل طريقة للقيام بذلك تستخدم وظيفة الرأس. يمكنك نشر أي ملف على الإطلاق الذي تحتاجه حتى في حد ذاته يقوم بالتحقق من الصحة، ثم استخدم إعادة توجيه الرأس للعودة إلى النموذج إذا فشل. قم بتخزين قيم Post'd في الجلسة أو متغير آخر قابل للحياة، وبالتالي يمكنك الوصول إلى البيانات التي تم إدخالها مسبقا.

عند استخدام رأس ("الموقع: MyScript.php")؛ تأكد من تضمين خروج ()؛ بعد ذلك، ما زلت لا تزال تحصل على تحذير آخر في تحديث.

myscript.php.

if($_POST['submit'])
{
    //check for errrors

    if ($error)
    {
        $_SESSION['myPostVars'] = $_POST;
        header("location: myscript.php");
        exit();
    }
}

<form>
    // your form code
</form>

تحرير: لقد لاحظت أنك قمت بتحرير سؤالك لتجنب استخدام الجلسات.

يمكنك تسلسل الفارغات التي تريد إرجاعها ووضعها في سلسلة الاستعلام (المرسلة عبر الرأس ()

نصائح أخرى

لا توجد طريقة لتجنب ذلك دون حفظ الدولة في الجلسة. عند مواجه خطأ، ربما يمكنك القيام بشيء ما مثل ما يلي:

  1. توليد معرف فريد
  2. انسخ ال $_POST متغير في الجلسة المفتاح بواسطة المعرف الفريد أعلاه
  3. إعادة توجيه كما تفعل الآن، ولكن اجتياز المعرف الفريد كجزء من سلسلة الاستعلام
  4. قم بتحديث مكتبتك للبحث عن هذا المعرف الفريد في الجلسة (حالات الخطأ) بدلا من الوصول إلى $_POST متغير مباشرة، إذا لم يتم تمرير المعرف الفريد على الطلب أو الاسم الذي تبحث عنه غير موجود استخدم القيمة الافتراضية
  5. في نهاية الطلب، قم بإزالة إدخال المعرف الفريد من الجلسة. هذا يحفظ تلوث الجلسة مع الكثير من القمامة. يمكنك أيضا القيام بذلك في بداية الطلب اعتمادا على مكتبتك

أعتقد أنك تعني شيئا مثل هذا:

function Value($array, $key, $default = false)
{
    if (is_array($array) === true)
    {
        settype($key, 'array');

        foreach ($key as $value)
        {
            if (array_key_exists($value, $array) === false)
            {
                return $default;
            }

            $array = $array[$value];
        }

        return htmlspecialchars($array);
    }

    return $default;
}

<input type="text" name="email" value="<?= Value($_POST, 'email', ''); ?>" />

قد ترغب أيضا في قراءة هذا البرنامج التعليمي.

أنت تفعل ذلك بشكل أساسي. لا توجد طريقة جيدة بشكل خاص تجنب تحذيرات "إعادة النشر".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top