jQuery AJAX 代码会 运行,但 MySQL post 不会被删除
jQuery AJAX code does run, but MySQL post does not get deleted
这段代码我有问题,完整的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 注入等中修复。稍后,这只是测试
您正在使用 $(this).val()
,这不会 return 任何东西,当然也不会是 ID。使用 $(someElement).attr("id")
您无法获取 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('item to log') 以查看会发生什么在不同的步骤。如果您在当前代码中执行此操作,并执行 "console.log(id)",它将输出“”。 (您也可以在代码中插入断点并单步执行以更好地了解发生了什么)
以上提示绝不是 "professional" 或教科书式的处理方式,但它确实派上了用场,而且人们使用它的次数超出了他们愿意承认的程度。
编辑:
虽然我有一段时间没有使用 MySQL 或 PHP,但我的理解是最好将 PDO 与准备好的语句一起使用。
这样您就可以准备要重用的语句,将参数绑定到,然后执行它们并捕获任何错误。
请注意,您正在尝试访问 <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
.
点击 URL
您还可以使用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 模板视图中,这样您就不会将逻辑和表示混合在一起.
这段代码我有问题,完整的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 注入等中修复。稍后,这只是测试
您正在使用 $(this).val()
,这不会 return 任何东西,当然也不会是 ID。使用 $(someElement).attr("id")
您无法获取 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('item to log') 以查看会发生什么在不同的步骤。如果您在当前代码中执行此操作,并执行 "console.log(id)",它将输出“”。 (您也可以在代码中插入断点并单步执行以更好地了解发生了什么)
以上提示绝不是 "professional" 或教科书式的处理方式,但它确实派上了用场,而且人们使用它的次数超出了他们愿意承认的程度。
编辑:
虽然我有一段时间没有使用 MySQL 或 PHP,但我的理解是最好将 PDO 与准备好的语句一起使用。 这样您就可以准备要重用的语句,将参数绑定到,然后执行它们并捕获任何错误。
请注意,您正在尝试访问 <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
.
您还可以使用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 模板视图中,这样您就不会将逻辑和表示混合在一起.