首页 > 解决方案 > 尝试使用 AJAX 和 cURL 提交表单

问题描述

我正在尝试通过 cURL 提交表单,POST 方法似乎工作正常。我唯一的问题是没有提交表单。该呼叫来自该home.php站点,用于填写另一个站点上的新闻通讯表格。样式是通过 Bootstrap 完成的。

卷曲命令:

if(!empty($_POST['p-firstname'])){
    $post_data['name'] = $_POST['p-firstname'];
}

if(!empty($_POST['p-lastname'])){
    $post_data['lastname'] = $_POST['p-lastname'];
}

if(!empty($_POST['p-email'])){                                 
    $post_data['email'] = $_POST['p-email'];
}

if(!empty($_POST['submit1'])){                                 
    $post_data['submit'] = $_POST['submit1'];
}

if(!empty($_POST['p-firstname'])  &&  (!empty($_POST['p-lastname'])) && (!empty($_POST['p-email'])) && (!empty($_POST['submit1']))){ 
    foreach ( $post_data as $key => $value) 
    {
        $post_items[] = $key . '=' . $value;
    }
    $post_string = implode ('&', $post_items);

    $curl_connection = curl_init('http://www.xx.xxxx-xxxxx.com/xxxxx/contents/mail/register.php');
    curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 1000);
    curl_setopt($curl_connection, CURLOPT_TIMEOUT, 0);
    curl_setopt($curl_connection, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
    curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl_connection, CURLOPT_POST, 1);
    curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);
    $result = curl_exec($curl_connection);                                   
    error_log($post_string);
    print_r(curl_getinfo($curl_connection));
    echo curl_errno($curl_connection) . '-' . 
    curl_error($curl_connection);
    curl_close($curl_connection);
}

<form action="register.php" method="post">
<?php   if ($error) { ?>
    <div class="error">There was an error subscribing you to the newsletter.</div>
    <?php } ?>

  <div class="form-group">
    <label for="name">Your first name</label>
    <input type="name" class="form-control<?php check('name')?>" name="name" id="name" placeholder="Max" value="<?= htmlentities($fields['name']); ?>">
    <div class="invalid-feedback">
      Please provide a proper first name.
    </div>
  </div>

   <div class="form-group">
    <label for="name">Your last name</label>
    <input type="name" class="form-control<?php check('lastname')?>" name="lastname" id="lastname" placeholder="Mustermann" value="<?= htmlentities($fields['lastname']); ?>">
    <div class="invalid-feedback">
      Please provide a proper last name.
    </div>
  </div>


    <div class="form-group">
    <label for="email">Email address</label>
    <input type="email" class="form-control<?php check('email')?>" name="email" id="email" placeholder="xxx@xxxxx.com" value="<?= htmlentities($fields['email']); ?>">
    <div class="invalid-feedback">
      Please provide a proper email-address.
    </div>
  </div>

  <button name="submit" value ="submit" type="submit" class="btn btn-primary">Submit</button>
</form>

我将 POST-String 记录为:name=test&lastname=test&email=xxxx.xxxx@xxxx.com&submit=submit

谢谢你的帮助

标签: phptwitter-bootstrapformscurl

解决方案


对于遇到类似问题的任何人,进行另一个 Ajax 调用是最好的解决方案。我的 register.php 中包含的文件有问题,这就是调用时间过长和超时的原因。

$.ajax({
       type: "POST",
       async: false,
       cache: false,           
       url: "https://www.xxx.xxx/xxxx/contents/mail/register.php",
       data: { firstname:name, lastname:lastname, email:email}, 
       });      

实际上知道如何通过浏览器工具调试 XHR 请求是非常有帮助的。


推荐阅读