ماذا يحدث إذا ذهبت إلى GET أسلوب رابط مع طلب POST؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

ودعونا نقول لدي صفحة تسمى display.php وكان المستخدم يستعرض display.php?page=3. أريد أن تسمح للمستخدم القيام إجراء مثل التصويت عن طريق طلب POST ثم اعادتهم إلى صفحة كانوا على. لذا، إذا كنت تفعل طلب POST ستكون المعلومات الصفحة متاحة أيضا إلى البرنامج النصي لdisplay.php?page=3؟

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

المحلول

والجواب البسيط هو "نعم". يمكنك استخدام URL على غرار GET باسم URL تقديم للحصول على نموذج POST. سوف PHP على حد سواء في ما بعد والحصول على المعلومات المتوفرة لديها في الطرق المعتادة عندما يتم إرسال النموذج.

وهذا لا يعني أنك <م> يجب القيام بذلك، ولكنها ستعمل.

نصائح أخرى

في PHP، يمكنك الحصول على المتغيرات طلب من المصفوفات العالمية الخاصة:

$_GET['page'] (for GET requests)
$_POST['page'] (for POST requests)
$_REQUEST['page'] (for either)

وهذا يبدو وكأنه كنت تبحث عن "إعادة توجيه بعد بوست"، أود أن أقترح فصل display.php وvote.php إلى ملفات منفصلة. صوت يبدو شيئا من هذا القبيل:

<?php
//vote.php
$page_number = (int)$_REQUEST['page'];
vote_for_page($page_number); //your voting logic
header('Location: display.php?page=' . $page_number); //return to display.php

ملحوظة أن عمياء قبول بيانات النموذج unsanitized يمكن أن تكون خطرة على التطبيق الخاص بك.

وتحرير: بعض الناس تنظر فيه شكل سيء لاستخدام $ _REQUEST إلى التعامل مع كل الحالات. الخطر هو أنك قد ترغب في إشارة خطأ إذا كنت تتلقى GET عندما تتوقع POST. وعادة ما تحصل عليه هو المخصصة للعرض ومحجوز وظيفة لإجراء تغييرات (إنشاء / تحديث / حذف العمليات). إذا كان هذا هو حقا مشكلة يعتمد على طلبك.

نعم، يتم تعبئة مجموعة GET دائما مع المعلمات URL بغض النظر عن طريقة الطلب. يمكنك أن تجرب ذلك مع صفحة بسيطة مثل هذا:

<form action="test.php?a=b" method="post">
    <input name="a"/>
    <input type="submit"/>
</form>
<pre>
POST:
<?php print_r($_POST); ?>
GET:
<?php print_r($_GET); ?>
</pre>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top