AJAX,PHP表单未提交到数据库
AJAX,PHP表单未提交到数据库
我已经尝试很久让这个工作起来,并且阅读了很多其他类似问题的答案(How to add AJAX Submit to PHP validation and return message? , ajax submit form why it cannot echo $_POST),但是似乎无法使其工作。
基本上,我试图创建一个注册表单,只需将某人的电子邮件地址插入到表中的新行中,以便我可以测量访问者的转化率!话不多说,这是我的脚本,我真诚地希望你能帮助我 🙂
HTML表单:
send_post php:
connect_error) { die("连接失败:" . $conn->connect_error); } // 插入数据 mysqli_query($conn,"INSERT INTO email (email) VALUES ('$email')"); $conn->close(); ?>
Javascript + AJAX:
// 提交表单 $('#signup-form').submit(function () { $.ajax({type: "POST", url: "send_post.php", data: $("#signup-form"), success: function () { alert("成功"); } }); e.preventDefault(); return false; });
为了提高可读性,我只包含了包含ajax部分的一小部分JS代码。
PS. 当我直接导航到send_post.php时,它会在数据库中创建一个空行。
问题的原因是没有将表单的值传递给请求数据。解决方法是显式地设置表单的值或者序列化表单对象。
以下是解决方法的具体步骤:
步骤1:设置表单的值
data: { field1: $("#field1").val(), field2: $("#field2").val(), // 以此类推,设置所有表单字段的值 },
步骤2:序列化表单对象
data: $("#signup-form").serialize(),
你可以参考这个链接了解更多关于如何将整个表单作为数据传递给jQuery的Ajax函数的信息。
问题的原因:
1. 未正确取消默认的提交事件,变量e未定义。
2. 未发送任何数据,需要序列化表单并发送数据,而不是发送表单对象本身。
3. 存在sql注入问题,应该使用预处理语句和绑定占位符。
解决方法:
1. 取消默认的提交事件应该使用event.preventDefault()方法。
2. 序列化表单数据并发送,可以使用jQuery的serialize()方法,例如
data: $('form').serialize()
。
3. 解决sql注入问题,可以使用预处理语句和绑定占位符。使用PDO或mysqli扩展可以实现预处理语句,例如:
$stmt = $pdo->prepare("INSERT INTO table (column1, column2) VALUES (?, ?)"); $stmt->bindValue(1, $value1); $stmt->bindValue(2, $value2); $stmt->execute();