php 提交带有查询参数的表单GET请求,但在提交表单时不包括提交[重复]

beq87vna  于 2023-03-07  发布在  PHP
关注(0)|答案(1)|浏览(194)
    • 此问题在此处已有答案**:

Stop an input field in a form from being submitted(14个答案)
昨天关门了。
因此,我使用HTML和PHP构建一个表单,它将接受两个参数,然后调用API并构建一个表单。
下面是HTML:

<div class="login-page">
  <div class="form">
    <span>Enter the Customer Load Number and Pickup Zip Code, then click "Submit" to track your shipment.</span>
      <form action="#" method="GET" style="margin-top: 20px">
      <!-- <label for="reference">Customer Load Number:</label> -->
      <input type="text" id="reference" name="reference" placeholder="Customer Load Number" value="<?php echo !empty($_GET['reference']) ?htmlspecialchars($_GET['reference']) :''; ?>" required="" />
      <!-- <label for="zipcode">Pickup Zipcode:</label> -->
      <input type="text" id="zipcode" name="zipcode" placeholder="Pickup zipcode" value="<?php echo !empty($_GET['zipcode']) ?htmlspecialchars($_GET['zipcode']) :''; ?>" required="" />
      <input type="submit" name="submit" value="Submit" style="margin-top: 20px; justify-content: center" />
    </form>
  </div>
</div>

然后,一旦输入客户装载编号和邮政编码,用户提交表单,它将装载并执行一些PHP w/HTML输出:

<?php if (isset($_GET['submit'])) {
    $reference = sanitize_text_field($_GET['reference']);
    $zipcode = intval($_GET['zipcode']);

    $curl = curl_init();
    $link = "https://example.net/customer-portal/tracking?reference=$reference&postalCode=$zipcode";
    curl_setopt_array($curl, [
    CURLOPT_URL => "$link",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_POSTFIELDS => "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"Reference\"\r\n\r\n2889615\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"postalCode\"\r\n\r\n35956\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--",
    CURLOPT_HTTPHEADER => [
        "AccountId: si",
        "Authorization: Basic d2Vic-----",
        "Postman-Token: 0fdfa047-----",
        "cache-control: no-cache"
    ],
    ]);
    $response = curl_exec($curl);
    $err = curl_error($curl);
    curl_close($curl);
    $response = json_decode($response);

    if ($response->Data === null) {
        $message =
            '<p style="text-align: center; margin-top: -50px; margin-bottom: 60px;">The provided Customer Load Number and <br/>Pickup Zipcode combination could not be validated.</p>';
        echo $message;
    } else {
        $data = $response;
    }
}
?>
    • 问题**:

当用户提交表单时,它将构建以下参数并提交表单:www.example.comhttps://example.com.test/customers/?reference=P337574&zipcode=50219&submit=Submit#
我怎么能有提交表单的选项,但排除submit参数,所以我想使用以下参数提交表单:https://example.com.test/customers/?reference=P337574&zipcode=50219
当我当前删除提交时,表单不会自动提交。
我试过输入submit参数,也试过删除它。

wgx48brx

wgx48brx1#

删除“提交”按钮中的“名称”属性。提交表单时将包含带有名称的元素。请参见此处:https://www.w3schools.com/tags/att_input_name.asp
根据备注添加附加信息。
通常,如果你需要检查一个按钮是否被点击,你会使用POST。POST不会在URL上附加字段。一个用户在这篇文章中发表了一个很好的解释,并包括了一个如何在需要时使用GET的选项(引用如下):
〈form method=“GET”怎么样?我们可以使用$_SERVER ['REQUEST_METHOD']=== 'POST'来检测表单POST的原因是POST是有意的,而GET不是- GET是默认的。所以,使用$_SERVER ['REQUEST_METHOD']=== 'GET'是不可靠的,因为有人可能只是在加载页面/url,而实际上并没有提交表单。因为在这两种情况下浏览器都会使用GET,因为它是默认的请求方法。
有很多不同的方法可以可靠地检测GET表单提交,但是一个简单而可靠的方法是添加到表单中,然后不使用if($_SERVER ['REQUEST_METHOD']=== 'POST'),而是使用if(isset($_GET ['submitted']))来检测表单提交。检测哪个按钮被按下的代码与POST的代码相同。
How can I tell which button was clicked in a PHP form submit?
你也可以解析URL来移除参数,这是一种肮脏的黑客行为,但会起作用。Strip off specific parameter from URL's querystring
或者你可以更新你的表单“action”,在提交时跳转到另一个PHP页面。这将被视为你的“if”语句,你可以在该页面中嵌入你的PHP代码。https://www.w3schools.com/php/php_forms.asp

相关问题