gpt4 book ai didi

javascript - Ajax 连接到 php 中的函数失败

转载 作者:行者123 更新时间:2023-11-28 12:30:28 26 4
gpt4 key购买 nike

我正在尝试通过 ajax 提交表单,但它不允许我:

Ajax - 同一页面

<script type="text/javascript">
$(document).on('submit','.subscribe',function(e) {
$.ajax({ url: 'lib/common-functions.php',
data: {action: 'subscribe'},
type: 'post',
success: function(output) {
alert(output);
}
});
});
</script>

HTML - 同一页面

  <form class="subscribe">
<label class="lablabel">Name:</label><input type="text" class="subscribe-field" id="sname" name="sname"></br>
<label class="lablabel">Email:</label><input type="text" class="subscribe-field" id="semail" name="semail" >
<input type="submit" id="ssub" value="Subscribe">
</form>

PHP-common-functions.php

<?php
require_once('dbconn.php');
function subscribe() {
$name = $_POST['sname'];
$email = $_POST['semail'];
$db->query("INSERT INTO subscribers (`name`, `email`, 'confirmed') VALUES ($sname, $email, 0)");
echo "You have been subscribed";
}
?>

编辑添加了 dbconn

$db = new mysqli($dbhostname, $dbuser, $dbpass, $dbname);
if ($db->connect_errno) {
echo "Failed to connect to MySQL: (" . $db->connect_errno . ") " . $db->connect_error;
}

在控制台中我什么也没得到。单击提交并检查控制台后。我可以看到红色的 common-functions.php 是如何操作的,但没有做任何事情。请帮忙。

最佳答案

TL;DR 您需要做六件事来解决您提供的代码中的问题。事件传播、范围界定和变量验证存在陷阱。

首先,将其添加到您的 JavaScript 中:event.preventDefault(); event.stopPropagation();.

第二,提交您的实际数据。

显示这些修复的示例:

$(document).on('submit','.subscribe',function(e) {
e.preventDefault(); // add here
e.stopPropagation(); // add here
$.ajax({ url: 'lib/common-functions.php',
data: {action: 'subscribe',
sname: $("#sname").val(),
semail: $("#semail").val()},
type: 'post',
success: function(output) {
alert(output);
}
});
});

第三,实际调用subscribe()

第四,您遇到了范围界定问题:$db 是全局变量,但您并不将其称为全局变量。这就是我在下面添加 global $db; 的原因。

第五,检查 POST 值是否存在。

第六,在数据库值周围加上引号并首先转义它们。

<?php
require_once('dbconn.php');
function subscribe() {
global $db;
if(isset($_POST['semail'], $_POST['sname'])) {
$name = $_POST['sname'];
$email = $_POST['semail'];
$db->query("INSERT INTO subscribers (`name`, `email`, 'confirmed') VALUES ('".$db->escape_string($sname)."', '".$db->escape_string($email)."', 0)");
echo "You have been subscribed";
}
}
subscribe();
?>

注意:这仅显示如何修复您发布的代码。然而,问题中的代码对 SQL injection 是开放的。 。您确实应该使用准备好的语句,而不是依赖特殊字符的转义。

关于javascript - Ajax 连接到 php 中的函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22510010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com