0

到目前为止我有这个代码:这个表单是在查询循环期间生成的

 while ($row = mysql_fetch_assoc($result)) {
  echo "<tr>";
  echo "<td>" . $row['name'] . "</td>";
  echo "<td>" . $row['age'] . "</td>";
  echo "<td>" . $row['breed'] . "</td>";
  if($row['neuteredOspayed']=="1"){
  echo "<td>" . "neutered" . "</td>";
  }else
  echo "<td>" . "spayed". "</td>";
  echo "<td>" . $row['priceFee'] . "</td>";
  if($row['housebroken']=="1"){
  echo "<td>" . "yes" . "</td>";
  }else
  echo "<td>" . "no". "</td>";
  if($row['goodwithdogs']=="1"){
  echo "<td>" . "yes" . "</td>";
  }else
  echo "<td>" . "no". "</td>";
  if($row['goodwithcats']=="1"){
  echo "<td>" . "yes" . "</td>";
  }else
  echo "<td>" . "no". "</td>";
  echo "<td>" . $row['status'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

现在,有没有办法在每个结果旁边放置一个“删除”链接?例如在状态字段旁边?这是它的样子:在此处输入图像描述

要删除它,我想我需要以某种方式发现记录。我需要的是取动物的名字。例如,如何从表中获取值“Sparky”并将其分配给变量?如果我有名字,我将能够进行检查并运行查询,女巫将删除记录。

4

8 回答 8

2

您将不得不使用 Javascript 和 AJAX。

基本上,您需要在单元格中放置一个按钮,每行一个,当单击它时,通过 AJAX 将要删除的记录的 id 传递回 PHP 脚本,然后从数据库中删除记录。它还应该在单击时隐藏该行。

我建议使用 jQuery 的.ajax(),因为原始 XHR 充其量是痛苦的。

仅使用 PHP 无法做到这一点,因为 HTTP 是无状态的。加载网页后,HTML 和 PHP 部分就完成并修复了。您必须使用 Javascript 来发出连续的请求。

或者,正如 bcmcfc 指出的那样,您也可以只拥有一个指向脚本的超链接,该脚本将从您的数据库中删除一条记录。

于 2012-09-07T11:12:43.203 回答
2

在你的 while 循环中你需要这样的东西:

echo '<td><a href="path/to/delete.php?name='.$row['name'].'">Delete</a></td>';

使用表的主键会比名称更好 - 名称在数据库中是唯一的吗?假设有一个PK,它被称为id

echo '<td><a href="path/to/delete.php?id='.$row['id'].'">Delete</a></td>';
于 2012-09-07T11:13:54.243 回答
2

php 只是用于页面生成,一旦你生成了那个表,你就不能修改它。但是,您可以发出新的 get 请求,指定带有要删除的行名的参数,但是您必须更改服务器 php 代码以考虑此参数。

根据我的说法,最好的方法是使用 javascript:为每一行分配一个 td id,然后编写一个简单的函数来删除该行。

于 2012-09-07T11:15:46.567 回答
1

您必须提交表单并执行此操作....

<input type="submit" name="submit" value="Delete" />

提交后,表单将重定向到某个页面。在该页面中,您获得了所有发布的值。因为您可以使用记录 ID 删除记录,否则您可以使用相应记录的名称。

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

                         (or)

$query = "DELETE FROM table_name WHERE id='$_POST['id']'";

执行此操作后,您必须将 URL 重定向到该页面。

                          (or)

<a href="delete.php?id='.$row['id'].'">Delete</a>

在这个文件中,你必须这样写......

$id = $_REQUEST['id'];
$query = "DELETE FROM table_name WHERE id='$id'";
于 2012-09-07T11:17:36.870 回答
1
//Add this form before the end of the while loop

    <form action="#" method="post">
    <input type="hidden" name="name" value="<?php echo $row['name']?>">
    <input type="submit" name="delete" value="delete">
    </form>

//Add this at the end of the coding

<?php

    if(isset($_POST['delete']))
    {
    //database connection
    $sql="DELETE FROM `table_name` WHERE `name`='{$_POST['name']}'";
    $queryEXE=mysql_query($sql);
    }

?>
于 2012-09-07T11:37:25.110 回答
0

您为每个<tr>s 添加一个“elemID”属性,并为每一行添加一个新类(例如, elem+ the id):

<tr elemId="12" class="elem12">...</tr>

然后,对于 Delete 链接,您使用 AJAX 调用从 DB 中删除行的页面,将 elemID 作为参数传递给此函数:

function deleteRow(thisElemID) {
 $.ajax({
  url: yourURL,
  data: {'elemID', thisElemID },
  success: function() {
       $('.elem'+thisElemID).remove();
  }
 });
}

更多关于 $.ajax的信息

于 2012-09-07T11:15:15.313 回答
0

在表格中创建另一个单元格并调用该按钮的 ajax onclik。在您的 ajax 调用中删除特定行

于 2012-09-07T11:17:20.167 回答
0

对每一行使用“删除”表单。

最好的方法是为每一行添加一个带有提交按钮的表单。每个表单都有一个隐藏字段,其中包含要删除的记录的 ID(或名称,如果必须)。将表单的方法设置为“发布”。

原因:

  • 删除链接 (a href) 可以很容易地被索引和添加书签。您不希望每次 Google 路过或用户浏览其历史记录时都删除宠物。
  • method='get' 形式还可以使 url 被添加书签和/或显示在历史记录中。带有表单的方法完全可以在没有 Javascript 的情况下工作。

除此之外,

  • 任何解决方案(包括表单和链接)都可以轻松地“升级”为使用 Ajax 的解决方案以获得更好的用户体验,但这始终是额外的且没有核心功能。
  • 如果您愿意,您可以设置提交按钮的样式,使其看起来像一个链接。
  • 如果您实施此解决方案,请使用post-redirect-get 模式。

也就是说,假设您要实际从数据库中删除记录。如果您只想更改 HTML,则 Javascript 解决方案会更有意义。

于 2012-09-07T11:22:03.407 回答