2016-08-31 4 views
0

Я только начинаю с PHP, и я обнаружил, что независимо от того, где я смотрю в Интернете, я не могу найти подробного объяснения того, как на самом деле работает суперкомбинат $ _POST.

Я получаю основы, которые суперкоммутатор $ _POST является ассоциативным массивом, доступ к которому можно получить в любом месте сценария, и что он содержит значения, полученные через почтовые запросы. Мои вопросы: универсален ли он для всех файлов PHP на веб-сайте? Если нет, как вы указываете, какой файл на веб-сайте, на который вы хотите отправить данные, или передать что-то, полученное $ _POST в другой файл? Как сделать код, ожидающий отправки данных в определенный индекс в $ _POST (то есть $ _POST ["name"]), прежде чем что-то делать с этими данными, чтобы ваш код не сразу установил переменную равную к указанному выше индексу, который является нулевым до получения запроса?

Я задаю эти вопросы, потому что обнаруживаю, что, хотя я не имею проблемы с использованием $ _POST, когда дело доходит до обработки формы, я не могу заставить что-либо работать с $ _POST, когда я отправляю запрос на отправку извне, например из программы, такой как Fiddler. Я попытался отправить почтовые данные в формате «application/x-www-form-urlencoded» на свой веб-сайт для тестирования, размещенный на бесплатном веб-хостинге, и независимо от того, что я делаю, я всегда получаю $ _POST ["name" ] (да, данные, которые я отправляю, правильно написаны как «имя = тест»), имеющие тип NULL в каждом файле на моем сайте, поэтому мне не удалось сохранить эти отправленные данные в моей базе данных SQL.

+1

Не думаю, что вы хотите знать, как $ _POST работает внутри. Вы хотите знать, что не так с вашим POST-запросом, и это невозможно узнать, если вы не используете какой-либо код. –

+0

Вы написали любой файл .htaccess правила перенаправления? –

ответ

1

является универсальным для всех файлов PHP на веб-сайте?

Конечно. Это было бы не очень хорошо, если бы это было не так.

, как вы определяете, какой файл на веб-сайте вы хотите разместить данные в

Имея это обрабатывать URL, что запрос сделан в

или передать что-то, полученного $ _POST в другой файл?

Вообще-то include Входящий файл.

Как сделать код, который ожидает данные для отправки определенного показателя в $ _POST (т.е. $ _POST [ «имя»]), прежде чем делать что-то с этими данными

Вообще говоря, вы этого не делаете.

Веб-сайты, которые используют PHP, не пишут весь веб-сервер в PHP.

Вы помещаете PHP-скрипт на веб-сервер, чтобы указать ему URL-адрес. Клиент отправляет HTTP-запрос на этот URL-адрес. Веб-сервер запускает программу PHP в ответ на этот запрос. Когда программа PHP заканчивается, вывод из нее отправляется обратно клиенту.

У меня нет проблем с использованием $ _POST, когда дело доходит до формирования обработки, я не могу получить что-нибудь работать с $ _POST, когда я отправить запрос на почту извне, например, из программы, как Fiddler.

Нет абсолютно никакой разницы между этими двумя случаями. В любом случае, HTTP-запрос делается на сервер, на котором выполняется PHP-ответ.

Предположительно, вы производите неправильный запрос при попытке создать его вручную.

-2
In form declaration should use method post. 
<form name="form_name" action="your file path to post" method="post"> 
<input type="text" name="name" value=""> 
<input type="submit" name="submit" value="submit"> 
</form> 

Code for post file 

$sql = "insert into table set col = '.$_POST['name'].'"; 
mysql_query($sql); 
+0

** Опасность **: вы используете [** устаревший ** API баз данных] (http://stackoverflow.com/q/12859942/19068), который был [удален] (http://php.net/ manual/en/mysql.php) из PHP. Вы должны выбрать [современную замену] (http://php.net/manual/en/mysqlinfo.api.choosing.php). Вы уязвимы для [SQL-инъекций] (http://bobby-tables.com/) **, что современный API упростит [защиту] (http://stackoverflow.com/questions/60174/ наилучшим образом-чтобы-предотвратить-sql-injection-in-php). – Quentin

1

Шаг назад один слой на запрос HTTP . Каждый раз, когда вы взаимодействуете с PHP на стороне сервера, он находится в контексте HTTP-запроса. * «Щелчок по ссылке» вызывает HTTP-запрос GET на сервер, который может обрабатываться скриптом PHP. Отправка формы вызывает запрос HTTP POST, который должен быть отправлен на сервер, где он может обрабатываться скриптом PHP.

* Если это не является, но мы будем игнорировать менее распространенные случаи ...

Каждый запрос, который обрабатывается PHP скрипт вызывает один PHP экземпляр для запуска. Он начнется с того, что запрашивается какой-то файл .php, и этот файл может include/require еще .php-файлы в процессе. Все это все еще выполняется в контексте одного и того же HTTP-запроса. Независимо от того, что вы echo или иначе вывод будет возвращен как ответ HTTP. Когда ваш скрипт завершен, и весь вывод возвращается в качестве ответа, экземпляр PHP завершается, и выполнение скрипта заканчивается. До следующего запроса входящего HTTP ...

Любые данные тела, посланные с просьбой HTTP (обычно с POST HTTP запросов), который кодируется в формате application/x-www-form-urlencoded автоматически будут обрабатываться с помощью PHP и проанализированные данные будут доступны в глобальная переменная $_POST. Эта переменная/данные доступны для всего вашего экземпляра PHP на протяжении всей его жизни. Это удобный API для доступа к данным тела HTTP. После завершения экземпляра PHP, что означает, что после завершения HTTP-запроса эти данные будут отброшены. Данные уникальны для каждого запроса для каждого экземпляра PHP.

Если данные тела не закодированы application/x-www-form-urlencoded, скажем, что это закодированный JSON, PHP не может разобрать его и не заполнить $_POST. В этом случае вам нужно прочитать и разобрать тело вручную, например .:

$body = file_get_contents('php://input'); 
$data = json_decode($body); 

$_GET глобальной переменным работает очень похож, но она содержит анализируемые параметры URL запроса (например, http://…/example.php?foo=bar&baz=42). Нет, он не работает только для GET HTTP-запросов, он работает для всех HTTP-запросов; это общее недоразумение из-за откровенно плохого именования этой переменной.

+0

Спасибо! Это многое прояснилось. Несколько вещей - если на веб-сайте было 2 файла, index.php и extra.php, а почтовый запрос был отправлен на его URL-адрес, будет ли этот запрос получать только index.php или обоими файлами?И когда этот запрос действительно получен, PHP-код просто запускается таким же образом, как если бы кто-то действительно пытался просмотреть его на веб-сайте, но теперь он фактически имеет значения для $ _POST ["whatever"]? – staple

+0

Только один из этих файлов будет выполнен веб-сервером. Они не могут быть выполнены веб-сервером. «Его URL» укажет на один из этих файлов, а не на оба. Файл, который выполняется в ответ на HTTP-запрос, будет иметь контекст запроса, то есть он будет иметь доступ к любым данным тела HTTP в '$ _POST'. - Опять же, должен index.php 'include 'extra.php'', затем extra.php также будет запускаться в контексте одного и того же HTTP-запроса и иметь доступ к тем же данным' $ _POST'. Однако, если вы сделаете отдельный запрос к '.../extra.php' без данных POST, то, очевидно, этого не произойдет. – deceze

+0

Итак, чтобы отправить запрос на extra.php, а не index.php, запрос должен быть направлен на «http://www.examplesite.com/extra.php», учитывая, что URL-адрес показывает местоположение файла ? – staple

Смежные вопросы