我正在尝试使用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));
}
?>
任何关于哪里出了问题的帮助都是值得感谢的!
发布于 2019-02-16 09:50:24
实际上,您的查询看起来不错。但是@RonCajan说对了可能的SQL注入。
1)我认为你在这里有错误:
if(isset($_POST['favbut'])) { ...
...
if(isset($_POST['unfavbut'])) { ...
您不会通过$.ajax请求传递这些值。将它们添加到您的请求中,或者不传递它们,您可以检查lid
值的集合。
检查它的简单方法是在条件之前设置echo 1;
和在语句内部设置echo 2;
块。然后看看你的反应。
2)正如@RonCajan所说,如果你的fid
列是auto_increment,你应该在查询中跳过它,不要将它设置为''
。
同样,在php中,如果你使用双引号,你不需要使用连接来插入变量值。docs
$query = "INSERT INTO userslocation (username, lid, favourite) VALUES ('${username}', '${lid}','${favourite}')";
还有一个建议。了解如何将调试工具用作xdebug。查找代码中的错误变得容易得多。
发布于 2019-02-16 08:41:47
更新:
首先,您的代码容易发生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; ?>
。也许它不包含任何值。
https://stackoverflow.com/questions/54718652
复制相似问题