首页 > 解决方案 > 获取php输入值

问题描述

我的目标是拥有一个 WordPress 表单,在发布时将输入发送到 API 到 ERP。

现在,以我的方式发送时,这些值似乎是空的。

在 CURLOPT_POSTFIELDS 中,如果我输入的不是“$inputname”,而是“Martin”,它可以完美运行。

如何获取要发送的 4 个字段的值?我试过 $POST['inputname'] 但同样,不起作用。

我根本不是php专家,所以任何提示都将不胜感激!谢谢!

<?php       
            if($_POST['Envoyer']) {
      ?>
                <form id="formid2" action="" method="POST">                            
                        <input type="submit" name="Envoyer2" value="Recommencer" />
                </form>
                <?

                $curl = curl_init();

                curl_setopt_array($curl, array(
                CURLOPT_URL => "*******",
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_ENCODING => "",
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_TIMEOUT => 0,
                CURLOPT_FOLLOWLOCATION => true,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => "POST",
                CURLOPT_POSTFIELDS =>"{\r\n    \"FirstName\": \"$inputname\",\r\n    \"Name\": \"$inputsurname\",\r\n    \"PhoneNo\": \"$inputphone\",\r\n    \"No\": \"$inputcomment\"\r\n}",
                CURLOPT_HTTPHEADER => array(
                    "Authorization: Basic ************",
                    "Content-Type: application/json",
                    "Cookie: RuntimeTenantAffinity=*******"
                ),
                ));
                
                $response = curl_exec($curl);

                curl_close($curl);
                echo $INPUTN;

            } else {
                ?>
                    <form id="formid" action="" method="POST">                            
                        <p>Nom : <input type="text" name="inputname" value="" /></p>
                        <p>Prénom : <input type="text" name="inputsurname" value="" /></p>
                        <p>Téléphone : <input type="text" name="inputphone" value="" /></p>
                        <p>Commentaire : <input type="text" name="inputcomment" value="" /></p>
                        <input type="submit" name="Envoyer" value="Envoyer" />
                    </form>
                <?
            }

            ?>

标签: phpapierp

解决方案


您不应该json手动创建,如果用户输入中有一些特殊字符,则会产生错误。

创建一个数组,然后用于json_encode在 curl 中传递数据。同样对于POST请求,不要使用CUSTOMREQUEST选项,而是使用CURLOPT_POST.

// User inputs are $inputname, $inputsurname, $inputphone, $inputcomment
// Create an array 
$arrData = [
    'FirstName' => $inputname,
    'Name'      => $inputsurname,
    'PhoneNo'   => $inputphone,
    'No'        => $inputcomment
];

// Now pass it in curl options array
[
    ...
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => json_encode($arrData),
]

如果 api 支持,您也可以在数组中传递数据。以下是您可以使用的选项。

CURLOPT_POSTFIELDS

在 HTTP“POST”操作中发布的完整数据。要发布文件,请在文件名前加上 @ 并使用完整路径。文件类型可以通过使用格式为“;type=mimetype”的文件名来明确指定。此参数可以作为 urlencoded 字符串(如 'para1=val1¶2=val2&...')或作为字段名称作为键和字段数据作为值的数组传递。如果 value 是一个数组,则 Content-Type 标头将设置为 multipart/form-data。从 PHP 5.2.0 开始,如果文件以 @ 前缀传递给此选项,则 value 必须是数组。从 PHP 5.5.0 开始,不推荐使用 @ 前缀,并且可以使用 CURLFile 发送文件。通过将 CURLOPT_SAFE_UPLOAD 选项设置为 TRUE,可以禁用 @ 前缀以安全传递以 @ 开头的值。

最后强烈建议你对 curl 使用错误检查,这样你就可以知道出了什么问题。

if(curl_exec($curl) === false){
    echo 'Curl error: ' . curl_error($curl);
}
else{
    echo 'Operation completed without any errors';
}

推荐阅读