Использование curl для отправки / получения результатов форм - PullRequest
9 голосов
/ 04 января 2011

Мне нужна помощь в попытке использовать curl для публикации данных на странице и получения результатов после отправки формы.

Я создал простую форму:

<form name="test" method="post" action="form.php">              
    <input type="text" name="name" size="40" />
    <input type="text" name="comment" size="40" />
    <input type="submit" value="submit" />
</form>

InКроме того, у меня есть PHP-код для обработки этой формы на той же странице.Все, что он делает, это возвращает значения формы.

Я использую локон:

  $h = curl_init();

  curl_setopt($h, CURLOPT_URL, "path/to/form.php"); 
  curl_setopt($h, CURLOPT_POST, true);
  curl_setopt($h, CURLOPT_POSTFIELDS, array(
  'name' => 'yes',
  'comment' => 'no'
  ));
  curl_setopt($h, CURLOPT_HEADER, false);
  curl_setopt($h, CURLOPT_RETURNTRANSFER, 1);

  $result = curl_exec($h);
  echo $result;

Когда я запускаю страницу с кодом локона, я получаюСодержимое страницы form.php, но оно не показывает переменные, которые PHP должен иметь echo'd при отправке формы.

был бы признателен за любую помощь в этом.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 04 января 2011

Ааааа после вашего комментария, проблема ясна.

вам нужно включить еще одну переменную POST в ваш массив.

'submitted' => 'submitted'

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

if ($_POST['submitted']) {

в вашем коде curl, однако вы не указали переменную post для отправки.

Если это то, что вы ищете, установите флажок рядом с этим ответом. спасибо!

1 голос
/ 04 января 2011

Из прочтения двух других ответов и комментария ОП у меня есть пара идей.

В частности, комментарий ОП был:

Отправка формы вручную дает правильный вывод. PHP, который обрабатывает форму: if (isset ($ _ POST ['submit'])) {echo $ _POST [name] ..... и т. Д. И все

В стандартных условиях ваша базовая форма, как отмечено в Первоначальном вопросе, генерирует массив $ _POST, как показано ниже:

array(
  'name' => 'The Name as Entered in the Form' ,
  'comment' => 'The Comment as Entered in the Form' ,
  'submit' => 'submit' # From the "Submit" button
);

Ваш комментарий предполагает, что какой-то аспект вашего обработчика форм ищет элемент $ _POST, называемый "submit".

1) Базовая форма, как указано в вопросе, всегда будет возвращать FALSE для проверки на $ _POST ['submit'] и, как таковая, будет запускать действие ELSE (если присутствует) для этого условия.

2) Ваше действие CURL не устанавливает ни «отправить», ни «отправлено» и, опять же, всегда возвращает ЛОЖЬ для условного.

Итак, я бы посоветовал вам:

1) Проверьте ваш обработчик форм и посмотрите, какие поля являются обязательными, как их имена и каким должно быть их содержимое.

2) Проверьте основную форму и убедитесь, что в ней есть соответствующие поля.

3) Проверьте действие CURL и убедитесь, что оно детализирует каждое обязательное поле. (Простая проверка заключается в том, чтобы вставить print_r( $_POST );die(); вверху вашего обработчика форм и отправить основную форму. Это покажет вам, что именно отправляет форма, чтобы вы могли воссоздать ее в CURL.

...