2012-06-08 2 views
14

я наткнулся скрипты, которые используют:

isset($_POST['submit']) 

, а также код, который использует:

$_SERVER['REQUEST_METHOD']=='POST' 

Мне было интересно, какая разница между этими двумя и какой метод лучше всего.

+3

Они несравнимы , они выполняют разную работу – zerkms

+3

Проверка существования '$ _POST ['submit']', w здесь 'submit' - это имя кнопки' type = submit name = submit', является одной из наиболее распространенных (и хромых) привычек, которая запускается среди php-кодеров. Ваш код полностью терпит неудачу, когда пользователь отправляет форму через ключ ввода в значительном фрагменте общей базы веб-браузера. Не делай этого, это очень любитель. – goat

+0

@chris Thanx для информации, не знал этого. Я довольно новичок в php. – Madz

ответ

4

Это означает две разные вещи. Во-первых, проверяет, была ли передана форма отправки параметра submit. Многие используют этот фрагмент, чтобы проверить, была ли отправлена ​​форма. Это работает, потому что кнопка отправки технически является <input>, поэтому ее значение отправляется вместе с любыми другими элементами, которые были частью формы.

<?php 
    if(isset($_POST['submit'])) { // This way form and form logic can be adjacent to each other 
     // Logic 
    } 
?> 
<form method='POST' action='<?= $_SERVER['REQUEST_URI'] ?>'> 
    <!--- other form stuff --> 
    <input type="submit" name="submit" value="Send!" /> 
</form> 

Второй фрагмент теста, если форма была отправлена ​​методом POST. Это не обязательно означает, что кнопка формы была нажата. Если он не был отправлен с POST, тогда суперглобал $_POST будет пустым.

+2

Суперглобальный '$ _POST' всегда установлен и всегда является массивом. – Arjan

+0

@Arjan Хороший улов. Лучше формулировка: «будет пустым» –

+0

Исправьте меня, если я ошибаюсь, но если метод формы POST, не единственный ли путь $ _POST был бы пуст, если кнопка не была нажата? – Madz

4

Они делают разные вещи.

Первый проверяет, установлен ли ключ (submit) в массиве $_POST.

Второе проверяет, является ли значение ключа в массиве $_SERVER равным 'POST'. Думаю, это можно было бы использовать, чтобы определить, были ли данные отправлены с использованием метода «get» или «post», но обычно вам не нужен только тот метод, который использовался, а скорее, какие данные были отправлены.

Что вы пытаетесь сделать?

0

Первый оператор проверяет, был ли метод запроса Post и был ли запрос включен значением для элемента submit. Второй метод проверяет только, был ли метод запроса Post.

Чтобы проверить, была ли опубликована форма, вторая лучше в смысле, она немного яснее, что делает только одно и только одно. Однако я не стал бы слишком беспокоиться о том, какой из них использовать.

6
isset($_POST['submit']) 

Если вы уже знаете, что конкретное значение всегда быть отправлены и, следовательно, является показателем ожидаемого представления формы (submit поля в данном случае) этот код будет сказать вам две вещи:

  1. форма представлена ​​с помощью метода POST, в отличие от GET, PUT и т.д.
  2. поле submit было передано.

$_SERVER['REQUEST_METHOD'] == 'POST' 

Это говорит вам точно одно, форма была представлена ​​с помощью метода POST.Причины использования его включают в себя:

  • Вы хотите провести различие между представлением недействителен формы (например, не были переданы все поля) и другие виды поиска страницы (GET, PUT и т.д.)
  • Вы не точно знать, что вы собираетесь получать. Возможно, этот код запускается в контроллере, который не знает всех деталей своих зависимых частей.

Первое

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if (!isset($_POST['name'])) { 
     // at this point you know that `name` was not passed as part of the request 
     // this could be treated as an error 
    } 
} 

Versus:

if (!isset($_POST['name'])) { 
    // the `name` field was not passed as part of the request 
    // but it might also be a GET request, in which case a page should be shown 
} 

Важно

Проверка на подать кнопочном поле в запросе не надежен как форма может быть представлена другими способами (например, нажатие Enter в текстовом поле).


$_POST 

только с помощью этого выражения можно утверждать, что:

  1. Форма подается через POST
  2. По крайней мере одно поле было представлено
+1

Не проверяйте кнопки отправки, чтобы обнаружить отправку формы. Это не удается, когда пользователи отправляют форму через ключ ввода (в некоторых браузерах) и некоторые методы представления формы javascript. Его очень раздражает для пользователей, когда подача формы беззвучно терпит неудачу ... – goat

+0

@rambocoder в любом случае, ваш комментарий заставил меня изменить несколько вещей в моем ответе, чтобы решить вашу проблему ... посмотреть PLS –