使用PHP和AJAX将JS变量插入MySQL表格时出现问题

3

我是一名技术新手,今天整天都在努力解决一个本以为很简单的问题。基本上,我正在尝试使用AJAX将JS函数中的参数传递到我的PHP代码中,并将该参数插入到我的数据库中。

这是我在.html文件中的JS函数。

    function pushData(paramData) {
    $.ajax({
        url: "databaseStuff.php",
        type: "post",
        data: paramData
        });
}

我希望将放入参数的内容插入到我的SQL表中。例如,下面的代码应该创建3个新的数据库条目。我已经将它们连接到了项目中的按钮。

pushData('It is Wednesday');
pushData('My Dudes');
pushData('AHHHHHHH!'); 

databaseStuff.php

<?php

$mysqli = new mysqli("localhost", "root", "default", "testDB");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . 
$mysqli->connect_error;
}
echo $mysqli->host_info . "<br>";

$paramData = $_POST['paramData'];

$sql = "INSERT INTO testDBtable (Name, Text) VALUES ('Joe', '$paramData')";

?>

我的PHP已经成功连接到MySQL数据库,因为我收到了正确的“通过TCP/IP的本地主机”消息,但是我卡在这里:

“注意:C:\wamp64\www\databaseStuff.php的第23行中未定义索引:paramData”

需要帮助!我不关心SQL注入漏洞,因为此代码永远不会离开本地主机。


你从不查询 $sql 变量。你只是创建字符串。 - Qirel
你已经在使用支持带有绑定变量输入的API,应该利用带有占位符(预处理语句)的参数化查询来保护你的数据库免受SQL注入的攻击!请使用mysqli::prepare()mysqli_stmt::bind_param()开始。 - Qirel
2个回答

1

尝试以以下方式编写您的Ajax数据参数

data: {
    'paramdata':paramdata
}

此外,你实际上从未查询过你的数据。
mysqli_query($mysqli, $sql);

但是根据您收到的错误信息,很可能是由于ajax数据参数引起的。


谢谢,这解决了我将数据POST到PHP文件的问题。我的另一个问题是由于数据库中自动时间戳没有默认值引起的。 - Dynamicron

0

如果你只是想纠正你的代码,用这个替换 AJAX 查询:

$.ajax({
    url: "databaseStuff.php",
    type: "post",
    data: {'paramData': paramData}
});

然而,您不应该直接将用户输入与 SQL 查询连接起来,因为这会导致 SQL 注入攻击。我建议您使用参数化查询。这里是PHP 手册页面,其中包含解释和示例。


XSS攻击更多地是输出问题。在输入方面,你可能想到的是SQL注入。 - Qirel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接