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

时间:2016-10-18 15:50:09

标签: javascript php jquery mysql ajax

我有这个代码的问题,完整的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注入等修复,稍后,这只是测试

4 个答案:

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

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

答案 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模板视图中,这样就不会将逻辑和表示混合在一起。