Как передать значение из HTML-формы в CURLOPT_POSTFIELDS

#php #curl

#php #curl

Вопрос:

Я пытаюсь отправить значение HTML-формы в виде CURLOPT_FIELDS . Моя HTML-форма:

 <form class="form-response" method="POST" action="postform.php">
    <h2 class="form-response-heading">get Response</h2>
    <input name="phonenumber" class="form-control" type="text" autofocus="" required="" placeholder="phonenumber">
    <button class="btn btn-lg btn-primary btn-block" type="submit">Get Response</button>
</form>
  

И в настоящее время мой postform.php является:

 <?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.example.com/AccountDetails",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{ "phonenumber":"6282818966317", "FullName":"Jenny Doe" }",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json;charset=UTF8",
    "api-key: myapikeynumbers",
    "cache-control: no-cache",
    "content-type: application/json"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
  

Я попробовал HTML-форму, которая передаст значение в CURLOPT_POSTFIELDS => «{ «номер телефона»:»6282818966317″ }»,

Пока что postform.php вернет ответ, если я добавлю номер телефона вручную. То, что я хочу сделать, CURLOPT_POSTFIELDS автоматически получит значение из phonenumber входных данных из HTML-формы.

Комментарии:

1. "{ "phonenumber":"" . $_POST['phonenumber'] . "",... должно получиться. Это было то, о чем вы просили?

2. Привет, Джефф, Да, я хочу получить входные данные формы в culrpost, я попробовал это, но в ответе появляется ошибка «responseCode»: -2, «ResponseMessage»: «Входные данные недопустимы».

Ответ №1:

Вам нужно сохранить значения в переменной и передать эту переменную.

 //Somewhere up here, store the post data in a variable something like this:
$phone = $_POST['phonenumber'];
$fullName = $_POST['full_name'];

 CURLOPT_POSTFIELDS => "{ "phonenumber":"" .$phone . "", "FullName":"" . $fullName . "" }",
  

Я считаю, что сохранение входных данных в переменных позволяет вам легче работать с ними. Согласно вашему комментарию выше, вам, вероятно, нужно просмотреть документацию, чтобы увидеть, что ожидает API, к которому вы подключаетесь, и проверить правильность ввода перед его отправкой.

Комментарии:

1. Кроме того, я предполагаю, что вы также хотите передать первое имя динамически. В этом случае добавьте форму, поданную в ваш html.

2. привет @jddev81, спасибо за предложение, но я получил ответ об ошибке ‘Неожиданный символ (‘}’ (код 125)): ожидаемое значение в [Источник: org.apache.catalina.connector. CoyoteInputStream@526e4938; строка: 1, столбец: 40]’ 🙁

3. @Bireon, я думаю, у меня была синтаксическая ошибка. Смотрите правку.

4. Большое спасибо @jddev81, теперь это работает. Спасибо за помощь.

5. … это требует экранирования, во многом по тем же причинам, по которым вы не можете просто вставлять переменные в SQL-запросы, сначала вам нужно экранировать эти переменные. сделайте это CURLOPT_POSTFIELDS => json_encode(array("phonenumber"=>$phone,"FullName"=>$fullName)) вместо этого.

Ответ №2:

Почему бы просто не передать все размещенные данные в curl ? Похоже, вам нужно отправить JSON в конечную точку вашего API, поэтому:

 CURLOPT_POSTFIELDS => json_encode($_POST),
  

Любое поле, которое вы включите в свою форму с помощью name и value , будет находиться в _POST . Просто передайте его в curl .

Если вам нужно отправить дополнительные поля, которых нет в вашей форме, просто добавьте их в _POST массив перед отправкой, например:

 $_POST['FullName'] = "Jenny Doe";

// ... rest of your code

CURLOPT_POSTFIELDS => json_encode($_POST),
  

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