jQuery AJAX代码运行,但MySQL帖子不会被删除


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注入等稍后修复,这只是测试

请注意,您正在尝试访问<div>属性作为jQuery中的值,您不能像那样获得id属性的值。

建议:

1) 你可以在你的html中使用data属性:

<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) 最后,非常重要的是,使用预处理语句而不是直接使用用户输入,这将有助于防止您的代码使用SQL注入。如果你仍然想在这里使用$_GET方法,请注意,每个人都可以使用任何removepost .

点击URL。

您使用的是$(this).val(),它不会返回任何东西,当然也不是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)",它将输出"。(您也可以在代码中插入断点并逐步执行,以便更好地理解发生了什么)

上面的建议无论如何都不是"专业"或教科书式的处理方法,但它确实派上了用场,人们使用它的次数比他们愿意承认的要多。

编辑:

虽然我有一段时间没有使用MySQL或PHP,但我的理解是最好使用PDO和准备好的语句。通过这种方式,您可以准备语句以重用,绑定参数,然后执行它们并捕获任何错误。

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

也可以使用jQuery中的data函数。总结一下:

<?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模板视图中,因此您不会将逻辑和表示混合在一起。