【问题标题】:SQL Insert and Delete query through AJAX通过 AJAX 进行 SQL 插入和删除查询
【发布时间】:2019-02-16 00:22:03
【问题描述】:

我正在尝试使用 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));          
}
?>

感谢您对出现问题的任何帮助!

【问题讨论】:

  • 您没有检查查询结果。 mysqli_error($conn) 告诉你什么?
  • 抱歉这个愚蠢的问题,但我在哪里阅读 mysqli_error 的输出?
  • 你可以在任何你想要的地方输出。例如,您可以直接将其写入脚本输出:echo mysqli_error($conn); 然后在您的客户端代码(或浏览器的调试工具)中,您将读取来自 AJAX 调用的响应。
  • 我不知道我是不是很愚蠢,但它没有在响应窗口中显示任何内容,它只是说“此请求没有可用的响应”。抱歉让我如此绝望。

标签: php jquery sql ajax


【解决方案1】:

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

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

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

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

检查它的简单方法是在条件前创建echo 1;,在语句块内创建echo 2;。并观察响应。

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

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

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

还有一个建议。以xdebug 的身份了解如何使用调试工具。发现代码中的错误变得容易得多。

【讨论】:

  • 虽然我现在有一个问题,在发出一个请求后,除非我刷新浏览器,否则我发送的下一个请求不会通过
  • 无论点击哪一个,它都会发送相同的盖子参数
  • 因为你使用了id选择器$("#lidfav").val()。在 DOM 中只能是一个具有唯一 id 的元素。这将需要第一个或最新的一个。一种方法是在按钮上使用data- 属性。例如&lt;input data-lid='.$lid.'... id="unfavbut" /&gt;。在您的点击处理程序中,通过$(this).data('lid') 获取值。另外最好把$("#unfavbut").click(改成类选择器$(".favButt.unfav").click(
  • 这在一定程度上有效,我真的很感激!!!我只有最后一个问题。目前,如果您喜欢某个位置,则无需刷新即可立即取消收藏它。那是因为我把数据盖放在两个上面了吗?
  • 是的。您应该在 favunfav 操作之后更新您的 DOM 和属性。更改按钮类别,例如反向操作。 p.s.仅仅因为您的代码有更多其他问题,而您在第一个问题中没有问到,所以取消标记正确答案并不是很有礼貌。问候
【解决方案2】:

更新:

首先,您的代码容易发生 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 代码中。尝试在所有输入值中使用&lt;?php echo $variable; ?&gt;。也许它不包含任何值。

【讨论】:

  • 您好,感谢您的建议和解决方案,这似乎并没有解决问题,但我一定会记住您对未来编码的建议!
  • @RonCajan 您的查询无效。它行不通。 1)您定义了 4 列,但只传递了 3 个变量。 2) 你有语法错误(count single qoutes)
  • 是的。抱歉,我没有注意到。我会更新查询。
  • 原则上应该可以工作,但它似乎没有并且不会返回任何类型的错误。我对出了什么问题感到困惑。
  • 尝试在你的 ajax 上设置条件。例如 if `if(!username=' '&& !lid=' '&& !favorite==' '){ //这里的ajax代码}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 2017-06-13
  • 2012-07-05
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多