CURL发布表格不起作用

时间:2018-08-20 17:21:52

标签: php ajax curl

我正在使用PHP版本7.1.9,并且通过CURL提交表单时遇到问题。 在我的index.html中,我希望通过AJAX显示表单的响应,该表单在使用CURL的form.html页面上。

index.html

 function sendForm() {
        $.ajax({
            url: "formHandler.php",
            type: "POST",
            success: function (response) {
                showResponse.html("");
                showResponse.append(response);
            },
            error: function (response) {
                showResponse.html("");
                showResponse.append(response);
            }
        });
    }

Form.html非常简单

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<form action="form.php" method="post">
    name:
    <input type="text" name="name"/><br/>
    <input type="submit" value="submit"/>
</form>
</html>

表单的处理程序也很简单,仅显示提交的数据,仅出于安全目的将其写入txt文件中。

form.php:

<?php
$name=$_POST["name"];
    echo "hello $name";
$myfile = fopen("log.txt", "w") or die("Unable to open file!");
$txt = "$name";
fwrite($myfile, $txt);
fclose($myfile);
?>

formHandler.php:

<?php
// add form data
$data = array();
$data['name'] = 'SuperUser';
$post_str = '';

foreach($data as $key=>$value){
    $post_str .= $key.'='.urlencode($value).'&';
}
$post_str = substr($post_str, 0, -1);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost/form.html');
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_str);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($ch);

echo $response;
curl_close($ch);
?>

现在的问题是,当我使用sendForm()时,我看不到提交的表单(form.php),而看不到未提交的表单(form.html)。首先,我认为CURL仅不显示已提交的页面,但log.txt也为空。可能是因为PHP版本,还是还有其他问题?在我的phpinfo.php中,我已启用7.55.0版的 cURL 支持。

2 个答案:

答案 0 :(得分:1)

您应该提交给form.php,而不是form.html。 formHandler.php使用Curl完成来自浏览器的form.html

此行应更改

curl_setopt($ch, CURLOPT_URL, 'http://localhost/form.html');

curl_setopt($ch, CURLOPT_URL, 'http://localhost/form.php');

答案 1 :(得分:1)

我看到您具有sendForm()函数,但是在任何地方都没有调用它。

我认为,在提交表单时,您可能会要求它调用它。

告诉我您的要求,以便我帮助提供此代码。

还要在form.php中,修复以下行

$txt = "$name";

$txt = $name;

对于PHP变量,您不需要双引号