我有这个代码的问题,完整的Ajax代码运行到最后,并淡出deletebtn的父代,这里是deletebtn的代码,post和ajax:
<?php
include('php/connect.php');
$roomQuery = "SELECT * FROM rooms";
$roomResult = mysqli_query($conn, $roomQuery);
while($roomRow = mysqli_fetch_array($roomResult)){
echo "<div class='roomParent'>";
echo "<div class='edit_roomRow'><h1> Rum " . $roomRow['ID'] . "</h1>" . "<h4>" . $roomRow['Description'] . "</h4></div><div name='id' id='removepost' value='" . $roomRow['ID'] . "' class='btn btn-danger delete-btn'>Ta bort</div>";
echo "</div>";
}
mysqli_free_result($roomResult);
mysqli_close($conn);
?>
</div>
<script type="text/javascript">
$(".delete-btn").click(function(){
var id = $(this).val();
var parent = $(this).parent();
//Ajax call
$.ajax({
method:"GET",
url: "php/deletepost.php",
data:{ removepost: id },
success: function(){
$(this).val("");
parent.fadeOut("slow")
}});
})
以下是ajax数据发送到的PHP代码:
<?php
require('connect.php');
$deletesql = "DELETE FROM rooms WHERE ID = " . ($_GET['removepost']);
if(isset($_GET['removepost'])){
mysqli_query($conn, $deletesql);
}
?>
代码将从sql注入等修复,稍后,这只是测试
答案 0 :(得分:0)
您正在使用$(this).val()
,它不会返回任何内容,当然也不会返回ID。使用$(someElement).attr("id")
答案 1 :(得分:0)
您无法获得div的值。 我建议将div更改为按钮:
echo "<div class='edit_roomRow'><h1> Rum " . $roomRow['ID'] . "</h1>" . "<h4>" . $roomRow['Description'] . "</h4></div><button name='id' id='removepost' value='" . $roomRow['ID'] . "' class='btn btn-danger delete-btn'>Ta bort</button>";
现在,您可以在jQuery点击事件中使用$(this).val(),并获取要删除的房间的ID值。
如果您不熟悉这一提示,请打开开发者控制台(F12)并在您的jQuery代码中键入一些console.log(&#39; item to log&#39;)以查看在不同步骤中发生的情况。如果你在当前代码中执行此操作,并执行&#34; console.log(id)&#34;,它将输出&#34;&#34;。 (您还可以在代码中插入断点并逐步执行它以更好地了解发生的情况)
以上提示绝对不是专业人士的&#34;或教科书处理事物的方式,但它确实派上用场,人们使用它比他们承认的更多。
修改强>
虽然我暂时没有使用过MySQL或PHP,但我的理解是,最好将PDO与预备语句一起使用。 这样,您就可以准备要重用的语句,将参数绑定到,然后执行它们并捕获任何错误。
答案 2 :(得分:0)
请注意,您尝试将<div>
属性作为jQuery中的值进行访问,但您无法获得id
属性的值。
<强>建议:强>
1)您可以在html中使用数据属性:
<div name='id' id='removepost' data-value='" . $roomRow['ID'] . "' class='btn btn-danger delete-btn'>Ta bort</div>
2)您需要从jQuery中的属性获取值:
var id = $(this).attr("data-value"); // replace with: var id = $(this).val();
3)最后,非常重要的是,使用prepared statement而不是直接使用用户输入,这将有助于防止使用SQL注入的代码。如果您仍想在此使用$_GET
方法,请注意,每个人都可以使用任何removepost
点击网址。
答案 3 :(得分:0)
您还可以在jQuery中使用数据功能。总结一下:
<?php $id = $roomRow['ID']; ?>
<div id='removepost'data-id='<?=$id?>' class='btn btn-danger delete-btn'>
<script type="text/javascript">
$(".delete-btn").click(function(){
var id = $(this).data('id');
});
</script>
最终,您可能需要考虑将SQL代码放在单独的对象中,并将该对象传递到HTML模板视图中,这样就不会将逻辑和表示混合在一起。