【问题标题】:How to remove HTML row and delete entry from MySQL database using AJAX?如何使用 AJAX 从 MySQL 数据库中删除 HTML 行并删除条目?
【发布时间】:2016-08-11 19:54:33
【问题描述】:

我目前正在使用 HTML、PHP、Javascript 和 AJAX 的组合来创建 HTML,从 MySQL 数据库中的表中填充它,然后在表中添加一个内部以删除行,并从 MySQL 数据库中删除该条目。这是我目前拥有的:

<?php

echo '<table id="tag_table" border=1>
      <tr>
      <th>Tags</th>
      <th>Delete Tag</th>
      </tr>';

$iter = 0;

$rows = $statement->fetchAll(PDO::FETCH_ASSOC);

foreach($rows as $row) {
    echo "<tr id=" . $iter . "\">";
    echo "<td>" . $row['name'] . "</td>";

    echo "<td>";
    echo "<button id=\"delete\">Delete</button>";

    echo "</td> </tr>";    
}

?>

现在我想做的是向删除按钮添加 .click() 功能,但我被卡住了,因为我想使用以下 Javascript 删除该行:

function deleteTag(btn) {  
  var row = btn.parentNode.parentNode;
  row.parentNode.removeChild(row);
}

但我还需要删除 MySQL 数据库中的相应条目,需要 PHP(我不能在 javascript 文件中使用它)。如果有人对如何完成这些事情有可能的解决方案或想法,我将不胜感激。

感谢您的帮助。

编辑 1. 我的 PHP 代码:

<?php
  $db = new PDO('my info here bla bla bla');

  $query = "DELETE FROM Tags WHERE name=" . $_POST['name'];

  $db->exec($query);

  $db = null;
?>

【问题讨论】:

  • 首先您要修复标记。您正在添加多个具有相同 id 值的元素,这是无效的。除此之外,您要问的基本上是如何使用 AJAX。您没有“在 JavaScript 中使用 PHP”,而是向服务器上的 PHP 脚本发出 AJAX 请求,该脚本将从数据库中删除。有许多 AJAX 教程可以帮助您入门。你用 jQuery 标记了这个问题,它有很多简单的 AJAX 操作的例子。
  • 您已经命名了您的解决方案 (AJAX),或者如果您使用纯 js,只需使用 XMLHttpRequest。被调用的 PHP 代码只需要向 MySQL 服务器发送一条 SQL 语句。 XMLHttpRequest 示例:w3schools.com/ajax/ajax_php.asp SQL/PHP 示例:w3schools.com/php/php_mysql_delete.asp

标签: php jquery html mysql ajax


【解决方案1】:

您可以将按钮标签中的onclick=? 属性与您的JS 函数结合使用:onclick=removeTag(this)

<?php

echo "
  <table class="tag_table" border=1>
    <tr>
      <th>Tags</th>
      <th>Delete Tag</th>
    </tr>";

$iter = 0;

$rows = $statement->fetchAll(PDO::FETCH_ASSOC);

foreach($rows as $row)
{
  echo "<tr class=" . $iter . ">";
  echo "<td>" . $row['name'] . "</td>";

  echo "<td>";
  echo "<button onclick=\"deleteTag(this)\" class=\"delete\">Delete</button>";

  echo "</td></tr>";
}

?>

JS:

function deleteTag(btn) {
  // select the row that's concerned
  var row = btn.parentNode.parentNode;

  // select the name of this row
  var name = row.children[0].textContent;

  // remove the row on client side
  row.parentNode.removeChild(row);

  // AJAX call to remove the row server side
  $.ajax({
    url: 'removeRow.php', // this is the target PHP file
    type: "GET",
    data: ({
      name: name
    }),
    success: function(data) {
      // the following will be executed when the request has been completed
      alert('Entry has been deleted successfully!');
    }
  });

}

PHP:诀窍是您需要使用 $_REQUEST['...'] 检索 AJAX 发送的变量 而不是使用 $_GET['...']$_POST['...']

<?php

if($_REQUEST['name']) {

// if the variable has been successfully received
  $name = $_REQUEST['name'];

  $db = new PDO('my info here bla bla bla');

  $query = $db->prepare("DELETE FROM Tags WHERE name = :name");

  $query->execute(array('name' => $name));

  unset($db, $query)

}

【讨论】:

  • 非常感谢,这对我很有帮助。现在我在 PHP 部分遇到了一些麻烦。当我删除一行时,我会收到成功警报,但该行不会删除服务器端。我刚刚用我的 PHP 代码编辑了我的帖子。
  • 我已经用 PHP 代码编辑了我的答案。我正在使用 $_REQUEST['...'] 并为 PDO 查询准备语句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 2019-08-12
  • 2011-02-07
  • 1970-01-01
  • 2015-11-20
  • 2011-02-21
相关资源
最近更新 更多