【问题标题】:Delete record from database using AJAX使用 AJAX 从数据库中删除记录
【发布时间】:2018-03-16 00:11:11
【问题描述】:

我有一个显示数据库数据的 PHP 文件。我使用while() 来显示每条记录。

我的 PHP 文件:

<?php

    $flightTicketsSQL = "SELECT * FROM `flightbookings` WHERE username='$user' AND cancelled='no'";
    $flightTicketsQuery = $conn->query($flightTicketsSQL);

    while($flightTicketsRow = $flightTicketsQuery->fetch_assoc()) { ?>

    <tr>
        <td class="tableElementTags text-center"><?php echo $flightTicketsRow["bookingID"]; ?></td>
        <td class="tableElementTags text-center"><?php echo $flightTicketsRow["origin"]; ?></td>
        <td class="tableElementTags text-center"><?php echo $flightTicketsRow["destination"]; ?></td>
        <td class="tableElementTags text-center"><?php echo $flightTicketsRow["date"]; ?></td>
        <td class="tableElementTags text-center"><?php echo $flightTicketsRow["mode"]; ?></td>
        <td class="text-center"><span class="fa fa-remove tableElementTags pullSpan" id="deleteAccount"></span></td>
    </tr>

<?php } ?>

如果用户点击最后一个 &lt;td&gt;(带有 Font Awesome 图标的那个),我希望从数据库中删除具有特定 bookingID 的记录。

为此,我需要使用 jQuery .val() 识别值

我的 JS 文件:

var id = $("**WHAT DO I PUT HERE ?**").val();

    $('#deleteAccount').click(function() {
        $.ajax({
            type: "POST",
            url: 'cancelTicket.php',
            data: { bookingID : id },
            success : function() {
                alert("Cancelled");
            }
        });
    });

我的 cancel.php 文件:

<?php

    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "database";

    $conn = new mysqli($servername, $username, $password, $dbname);

    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    $user = $_SESSION["username"];
    $id = $_POST["bookingID"];


    $cancelFlightBookingsSQL = "UPDATE `flightbookings` SET cancelled='yes' WHERE bookingID='$id'";
    $cancelFlightBookingsQuery = $conn->query($cancelFlightBookingsSQL);

我的问题是如何让 jQuery 识别用户想要取消的预订?我的意思是如何为&lt;td&gt; 分配一个id,以便我可以在JS 中检索它的值。

我知道我无法正确地提出这个问题。对此感到抱歉。

谢谢

【问题讨论】:

  • 实际被点击的id="deleteAccount" 元素在哪里?
  • 1.您没有 #deleteAccount 元素。 2. 确保您没有在每一行上重复 id。 3.使用this引用从按钮点击处理程序中获取id以获取被点击的元素
  • @David 它将在&lt;span class="fa fa-remove tableElementTags pullSpan"&gt;&lt;/span&gt; 中。我没有添加它。我将编辑问题并添加它。
  • 哪个td 持有应该在请求中发送的值?
  • @Samuel 不要那样做。 on* 属性是一种应该避免的反模式。使用不显眼的事件处理程序。

标签: php jquery mysql ajax


【解决方案1】:

这里有几个问题。首先,您需要为span 使用class 而不是id,否则它将被您的PHP 循环复制到DOM 中,这将导致无效的HMTL 破坏您的点击事件处理程序。

完成后,您需要在点击处理程序设置id 变量值,以便您可以找到与被点击元素相关的td。你可以这样做:

<!-- repeated throughout your while loop -->
<td class="text-center">
  <span class="fa fa-remove tableElementTags pullSpan deleteAccount"></span>
</td>
$('.deleteAccount').click(function() {
  var id = $(this).closest('tr').find('td:first').text().trim();

  $.ajax({
    type: "POST",
    url: 'cancelTicket.php',
    data: {
      bookingID: id
    },
    success: function() {
      alert("Cancelled");
    }
  });
});

【讨论】:

  • 谢谢。我会试一试,然后告诉你。
  • 您能否提供更多信息,因为这还不足以进行调试。控制台中是否有任何错误?您是否在 document.ready 事件处理程序中运行 jQuery 代码?
  • 没有错误。没有。代码只是没有运行。数据库中的数据未更新。
  • 如果您检查控制台的网络选项卡,您能看到正在发出的请求吗?如果有,响应文本和状态码是什么?
  • 对不起,如果我是哑巴,但网络标签在哪里?我对这些东西非常陌生。
【解决方案2】:

从被点击的元素:

$('#deleteAccount').click(function() {

您可以浏览 DOM 以找到所需的元素。首先,向该目标元素添加一个类:

<td class="tableElementTags text-center bookingID"><?php echo $flightTicketsRow["bookingID"]; ?></td>

接下来,还将 Booking ID 值放入数据属性中,以便于编程访问(个人偏好,因为文本内容等内容很容易更改):

<td class="tableElementTags text-center bookingID" data-booking="<?php echo $flightTicketsRow["bookingID"]; ?>"><?php echo $flightTicketsRow["bookingID"]; ?></td>

现在,您可以在单击处理程序中将 DOM 向上导航到最近的公共父元素,然后返回到具有所需数据的目标元素。像这样的:

$('#deleteAccount').click(function() {
    var id = $(this).closest('tr').find('.bookingID').data('booking');
    // the rest of your click handler
});

【讨论】:

  • 谢谢。我会试一试,然后告诉你。
猜你喜欢
  • 2010-11-18
  • 2013-10-13
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 2011-07-12
  • 2016-12-10
相关资源
最近更新 更多