首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过AJAX实现SQL插入和删除查询

通过AJAX实现SQL插入和删除查询
EN

Stack Overflow用户
提问于 2019-02-16 08:22:03
回答 2查看 78关注 0票数 0

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

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

下面是我的HTML和JQUERY代码:

代码语言:javascript
复制
 $(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
                }
            });
        });
    });
代码语言:javascript
复制
<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文件:

代码语言:javascript
复制
<?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));          
}
?>

任何关于哪里出了问题的帮助都是值得感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-16 09:50:24

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

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

代码语言:javascript
复制
if(isset($_POST['favbut'])) { ...
...
if(isset($_POST['unfavbut'])) { ...

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

检查它的简单方法是在条件之前设置echo 1;和在语句内部设置echo 2;块。然后看看你的反应。

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

同样,在php中,如果你使用双引号,你不需要使用连接来插入变量值。docs

代码语言:javascript
复制
$query = "INSERT INTO userslocation (username, lid, favourite) VALUES ('${username}', '${lid}','${favourite}')";

还有一个建议。了解如何将调试工具用作xdebug。查找代码中的错误变得容易得多。

票数 1
EN

Stack Overflow用户

发布于 2019-02-16 08:41:47

更新:

首先,您的代码容易发生SQL注入。出于安全目的,请使用预准备语句。请参考此站点以改进您的代码。http://php.net/manual/en/book.mysqli.php

我想你把这个弄错了。

代码语言:javascript
复制
$sql = "INSERT INTO userslocation 
(fid,username,lid,favourite) VALUES ('','".$username."', 
'".$lid."','".$favourite."')"; 

而应使用以下查询:

代码语言:javascript
复制
$sql = "INSERT INTO userslocation 
(username,lid,favourite) VALUES 
('$username','$lid','$favourite')"; 

如果你的fid默认有一个auto_increment,你不需要在你的查询中连接它,也不需要连接你的查询。我认为连接是为了连接两个字符串或者打印文本。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54718652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档