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 与准备好的语句一起使用。 这样您就可以准备要重用的语句,将参数绑定到,然后执行它们并捕获任何错误。

http://php.net/manual/en/pdo.prepared-statements.php

请注意,您正在尝试访问 <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 模板视图中,这样您就不会将逻辑和表示混合在一起.