PHP cURL Форма данных: несколько переменных, одно имя, diff.ценности - PullRequest
1 голос
/ 10 апреля 2011

Я работаю с PHP cUrl для запроса формы.Это делает запрос POST, поэтому я использую ассоциативный массив.Вот как выглядит форма:

<form action="form.php" method="POST">
...
    <input type="hidden" name="var" value="value1">
    <input type="hidden" name="var" value="value2">
    <input type="hidden" name="var" value="value3">
    <input type="hidden" name="var" value="value4">
    <input type="hidden" name="var" value="value5">
...
</form>

Во время выполнения моего запроса cUrl у меня есть следующий код:

$postfields = array();
$postfields ["var"] = "value1";
$postfields ["var"] = "value2";
$postfields ["var"] = "value3";
$postfields ["var"] = "value4";
$postfields ["var"] = "value5";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_REFERER, $referer);
$result = curl_exec ($ch);
curl_close ($ch); 

Очевидно, что в этом случае PHP перезаписывает предыдущий 4 "varmsgstr "назначения и только значение 5 передаются в качестве параметра, и я получаю сообщение об ошибке, указывающее, что мне не хватает значения1..значение4.Я попытался сделать массив "var", но это также выдает ошибку.

Я что-то пропускаю?Спасибо

1 Ответ

1 голос
/ 10 апреля 2011

Первая проблема с формой. У вас есть type = "POST", когда это должно быть method = "POST". Ваши скрытые поля также должны быть массивом с помощью [] в атрибуте имени. Вместо этого попробуйте следующее:

<?php


if (isset($_POST['submit']))
{
var_dump($_POST);
}
?>

<form action="" method="POST">
...
    <input type="hidden" name="var[]" value="value1">
    <input type="hidden" name="var[]" value="value2">
    <input type="hidden" name="var[]" value="value3">
    <input type="hidden" name="var[]" value="value4">
    <input type="hidden" name="var[]" value="value5">
    <input type="submit" name="submit" value="submit">
...
</form>

Если вы запустите это, вы увидите, что значения теперь находятся в массиве. Чтобы повторить это в вашем запросе CURL, вы должны сделать:

$postfields = array();
...
$postfields["var"][] = "value1";
$postfields["var"][] = "value2";
$postfields["var"][] = "value3";
$postfields["var"][] = "value4";
$postfields["var"][] = "value5";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...