Виртуальная форма PHP - PullRequest
       6

Виртуальная форма PHP

2 голосов
/ 26 апреля 2009

У меня есть файл PHP, который выплевывает форму. Я хочу вызвать этот файл PHP на стороне сервера (в настоящее время использующий «include»), заполнить его и отправить.

Это лучше, так что мне не нужно вмешиваться в реальную форму PHP, просто разберитесь со слоем представления, чтобы данные были поняты его собственным файлом PHP.

Возможно ли это? Форма "метод" является POST.

Ответы [ 3 ]

4 голосов
/ 26 апреля 2009

Вы не сможете заполнить форму и отправить ее, используя include(). Отправка формы означает, что она должна пройти через HTTP на веб-сервер, поэтому вам нужно эмулировать запрос POST. Для этого в PHP есть популярная библиотека CURL.

Попробуйте что-то вроде этого:

$ch = curl_init('http://www.example.com/yourform.php');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'var1=value1&var2=value2&whatever=stuff');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);

$output будет содержать вывод страницы, как если бы вы только что отправили форму.

1 голос
/ 26 апреля 2009

Судя по вашим комментариям, вы пытаетесь смоделировать отправку этой формы в текущем запросе. Я не уверен, что вы можете сделать это с помощью cURL - я думаю, что каждый вызов вашего PHP-скрипта выполняется независимо, поэтому глобальные переменные из текущего прогона скрипта не будут совместно использоваться прогоном, обрабатывающим запрос cURL. 1001 *

Я бы справился с этим, создав функцию обработки формы:

function handle_form($postdata) {
    // whatever you would normally do, just replace $_POST with $postdata
}

// to handle a normal form submission:
handle_form($_POST);

Таким образом, вы можете смоделировать отправку формы, просто создав массив со значениями поля формы:

$formvals['fieldname1'] = 'fieldvalue1';
$formvals['fieldname2'] = 'fieldvalue2';

и звонит

handle_form($formvals);
1 голос
/ 26 апреля 2009

То есть вы хотите отправить форму себе? Похоже, CURL будет способом сделать это, но вы будете создавать другой сеанс HTTP. В противном случае вы можете эмулировать переменные POST и вызывать действие формы из внешнего скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...