我正在使用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 支持。
答案 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变量,您不需要双引号