通过AJAX进行SQL插入和删除查询

时间:2019-02-16 00:22:03

标签: php jquery sql ajax

我正在尝试使用AJAX和PHP发送插入和删除SQL查询。我已经检查了开发人员工具的“网络”选项卡,并且可以看到,当我单击输入时,它成功检索到了值,所以我遇到的主要问题是将这些值插入到数据库中并从数据库中删除了值。

编辑:关于我的SQL查询,没有错误消息返回,所以我不确定发生了什么。

这是我的HTML和JQUERY代码:

 $(document).ready(function() {
        $("#favbut").click(function() {
            var username = $("#usernamefav").val();
            var lid = $("#lidfav").val();
            var favourite = $("#favouritefav").val();

            $.ajax({
                url: "fave.php",
                type: "post",
                dataType: "json",
                data: {
                    username: username,
                    lid: lid,
                    favourite: favourite
                }
            });
        });
        $("#unfavbut").click(function() {
            var username = $("#usernameunfav").val();
            var lid = $("#lidunfav").val();
            var favourite = $("#favouriteunfav").val();

            $.ajax({
                url: "unfave.php",
                type: "post",
                dataType: "json",
                data: {
                    username: username,
                    lid: lid,
                    favourite: favourite
                }
            });
        });
    });
<input type="hidden" name="username" id="usernamefav" value='.$user.'>
<input type="hidden" name="lid" id="lidfav" value='.$lid.'>
<input type="hidden" name="favourite" id="favouritefav" value=YES>
<input class="favButt fav" id="favbut" type="submit" name="faveBTN" value="Fave">';
                
                
<input type="hidden" name="username" id="usernameunfav" value='.$user.'>
<input type="hidden" name="lid" id="lidunfav" value='.$lid.'>
<input type="hidden" name="favourite" id="favouriteunfav" value=YES>
<input class="favButt unfav" id="unfavbut" type="submit" name="unfaveBTN" value="unFave">';

以下是php文件:

<?php
if(isset($_POST['favbut'])){
include 'includes/dbh.inc.php';

$username = $_POST['username'];
$lid = $_POST['lid'];
$favourite = $_POST['favourite'];

$sql = "INSERT INTO userslocation (fid,username,lid,favourite) VALUES ('','".$username."', '".$lid."','".$favourite."')";
$result = (mysqli_query($conn, $sql));          
}
?>

<?php

if(isset($_POST['unfavbut'])){
    include 'includes/dbh.inc.php';
$username = $_POST['username'];
$lid = $_POST['lid'];
$favourite = $_POST['favourite'];

$sql = "DELETE FROM userslocation WHERE username='$username' AND lid='$lid'";
$result = (mysqli_query($conn, $sql));          
}
?>

感谢您提供任何有关发生问题的帮助!

2 个答案:

答案 0 :(得分:1)

实际上,您的查询看起来不错。但是@RonCajan对可能的SQL注入说的没错。

1)我认为您在这里有错误:

if(isset($_POST['favbut'])) { ...
...
if(isset($_POST['unfavbut'])) { ...

您不会通过$ .ajax请求传递这些值。将它们添加到您的请求中,或者代替传递它们,您可以检查lid值的isset。

检查它的简便方法是将echo 1;置于条件之前,并将echo 2;置于语句块内部。并观察响应。

2)正如@RonCajan所说,如果您的fid列是auto_increment,则应在查询中将其跳过,不要将其设置为''

在php中,如果您使用双引号,也不需要使用串联来插入变量值。 docs

$query = "INSERT INTO userslocation (username, lid, favourite) VALUES ('${username}', '${lid}','${favourite}')";

还有另一条建议。了解如何将调试工具用作xdebug。在代码中发现错误变得容易得多。

答案 1 :(得分:0)

已更新:

首先,您的代码易于进行SQL注入。为了安全起见,请使用准备好的语句。请访问此站点以改进您的代码。 http://php.net/manual/en/book.mysqli.php

我认为您弄错了这个。

$sql = "INSERT INTO userslocation 
(fid,username,lid,favourite) VALUES ('','".$username."', 
'".$lid."','".$favourite."')"; 

代替使用此查询:

$sql = "INSERT INTO userslocation 
(username,lid,favourite) VALUES 
('$username','$lid','$favourite')"; 

如果您的fid默认情况下具有auto_increment,则无需在查询中加入它,也无需连接查询。我认为串联是用于连接两个字符串或用于打印文本。

在您的html代码中。尝试在所有输入值中使用<?php echo $variable; ?>。也许它不包含任何值。