PHP التحقق من صحة الأشكال المتعددة وإعادة التوجيه

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

  •  09-06-2019
  •  | 
  •  

سؤال

أملك buy.php مع استمارة حيث تدخل العناصر والكمية وبيانات الشحن وما إلى ذلك.

عند النقر فوق زر الإرسال, ، فإنه ينشر مرة أخرى إلى buy.php ($_SERVER['PHP_SELF']) ويقوم ببعض التحقق من صحة البيانات.

إذا كانت هناك حقول مفقودة أو أخطاء، فسيتم تمييزها.إذا كان كل شيء صحيحًا، فأنا أحفظه $_POST إدخال المعلومات $_SESSION المتغيرات، ثم قم بعمل header('Location: check.php'), حيث أقوم بعرض البيانات حتى يتمكن المشتري من التحقق من المعلومات مرة أخيرة قبل الشراء فعليًا.

الآن، إذا أنا في check.php واضغط على زر العودة إلى buy.php حتى أتمكن من تغيير الأشياء، يسألني المتصفح عما إذا كنت أرغب في إعادة إرسال بيانات POST.أحاول تجنب ذلك.

هل لدى أي شخص أي نصيحة جيدة أو ممارسات جيدة للتحقق من صحة PHP Multiform؟

أيضًا، إذا كان لدي صفحات n ليملأها المستخدم، buy.php, buy2.php, ... buyn.php قبل check.php هل ستظل نفس الأفكار قائمة؟

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

المحلول

يمكنك إجراء إعادة توجيه إلى buy.php بعد الحفظ في كائن الجلسة، والذي يقوم بعد ذلك بإعادة التوجيه إلى الخادم check.php، وهذا يعني أنه عندما ينقر المستخدم مرة أخرى، فإنه سيعود إلى طلب GET وليس طلب POST

نصائح أخرى

نعم - أتفق مع ما ورد أعلاه.أنا دائما أفعل redir بعيدًا عن المشاركة الأخيرة، لذا فإن النقر مرة أخرى يؤدي إلى ارتدادها مرة أخرى دون حدوث هذا الخطأ أو إعادة الإرسال.كما أنه يتجنب المضاعفات.يمكنك دائمًا وضع علامة على redir رابط الصفحة مع أ ?m أو &m (أي.: page.php?m) ويكون هذا في أعلى الصفحة:(يستخدم elseif هناك بعد)

if (isset($_GET['m'])) {
  echo 'order placed.';
}
else {
  //...
}

يمكنك الحصول على كل ذلك في صفحة واحدة أيضًا.فقط قم بتسمية أزرار الإرسال submit1, submit2, ، يحب:(ضع في اعتبارك أنه إذا كنت تستخدم صورة للإرسالات، فإنها تصبح $_POST['submit1_x'] :)

if (isset($_POST[submit1]) {
  //validate + save session data from form1
  //display form 2
} else if(isset($_POST[submit2])) {
  //validate + save session data from form2
  //display form 3
} else {
  //display first form
  //<input type="submit" name="submit1" value="Continue">
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top