试图删除表格中显示的数据

时间:2016-01-29 02:05:03

标签: php mysql button delete-row

我能够将数据库中的数据显示在我的网站上,并且我试图删除一行。

现在按钮可以工作,但它会完全删除所有内容,就像您从代码中看到的那样。

我不知道如何将删除按钮分配给我的表中的特定行,它只删除该特定行中的数据。

除此之外,我有一个删除按钮,它位于我的桌子上,并且不知道如何为每个给定的行设置单独的删除按钮。

admin.php(显示我的数据)

<?php

echo "<table style='box'>";
echo "<tr><th>ID</th><th>First Name</th><th>Last Name</th><th>Role</th>
<th>Email</th><th>Username</th><th>Delete</th><th>Amend</th></tr>";

class TableRows extends RecursiveIteratorIterator {

  function __construct($it) {
    parent::__construct($it, self::LEAVES_ONLY);
  }

  function current() {
    return "<td style='box'>" . parent::current(). "</td>";
  }
  function beginChildren(){
    echo "<tr>";
  }

  function endChildren(){
    echo "</tr>";
  }
}

require 'connection.php';

try {
  $stmt = $conn->prepare("SELECT id, FirstName, LastName, Role, Email, Username FROM users");
  $stmt->execute();

  $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

  foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v){
    echo $v;
  }
}
catch (PDOException $e){
  echo "Error: " . $e->getMessage();
}

$conn = null;
?>

<form method="post" action="delete.php">
  <input <input class="btn-default" type="submit" name="login" value="Delete">
</form>

<?php
echo "</table>";

?>

delete.php

<?php
$servername = 'localhost';
$username = 'root';
$pass = 'root';
$database = 'tutor_database';

try {
  $conn = new PDO("mysql:host=$servername;dbname=$database", $username, $pass);
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  //sql to delete record.
  $sql = "DELETE FROM users WHERE id = id";

  $conn->exec($sql);
  echo "Record deleted!";

} catch(PDOException $e) {
  echo $sql . "<br>" . $e->getMessage();
}
$conn = null;

?>

我会展示一张图片,但我没有足够的声誉点来展示它。

3 个答案:

答案 0 :(得分:1)

WHERE语句中的DELETE子句将始终返回true。在每一行,ID始终等于ID。因此,一切都被删除了。您需要传递一个参数来删除脚本以过滤要删除的行。您可以使用get="method"的{​​{1}}隐藏HTML输入值。

然而,关键是如何从网页的选择查询中获取该ID。此外,您需要将输入按钮放在每行的末尾以删除相应行的ID。对于这两个项目,您可能必须返回传统的循环到网页而不是<form>,因为我们需要在表中添加一个未获取的对象(表单删除按钮)。

admin.php (通知表单按钮作为每行的最后一个表格单元格)

RecursiveArrayIterator()

delete.php (请注意$ GET()生成的$ id并在删除查询中使用

...same code as above...

try {
  $stmt = $conn->prepare("SELECT id, FirstName, LastName, Role, Email, Username FROM users");
  $stmt->execute();

  $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

  while($row = $result->fetch()) {  
  ?>
    <tr>    
     <td style="box"> <?php echo $row['id']; ?></td> 
     <td style="box"> <?php echo $row['FirstName']; ?></td> 
     <td style="box"> <?php echo $row['LastName']; ?></td> 
     <td style="box"> <?php echo $row['Role']; ?></td> 
     <td style="box"> <?php echo $row['Email']; ?></td> 
     <td style="box"> <?php echo $row['Username']; ?></td> 
     <td>
       <form method="get" action="delete.php">
           <input type="hidden" name="rowid" value="<?php echo $row['id']; ?>">
           <input class="btn-default" type="submit" name="login" value="Delete">
       </form>
     </td>
   <tr>
  <?php
  }
}
catch (PDOException $e){
     echo "Error: " . $e->getMessage();
}

$conn = null;

答案 1 :(得分:0)

一个问题是您的DELETE语句不包含变量。

//sql to delete record.
$sql = "DELETE FROM users WHERE id = id";

你需要更像的东西:

//sql to delete record.
$sql = "DELETE FROM users WHERE id = " . $id;

其中$ id是使用所选行的ID定义的。

让我们解决另一个&#34;隐藏&#34;问题

  

现在按钮可以正常工作,但它可以完全删除代码中的所有内容。

鉴于您说这会删除所有记录,我猜您的每行的id都是字符串'id'而不是唯一的整数值。

DELETE FROM {table} WHERE id = {number}不会删除所有记录。它只删除与条件匹配的记录。您应该确保在添加行时正确设置idid列应具有以下属性:INT UNSIGNED NOT NULL AUTO_INCREMENT

答案 2 :(得分:0)

试着追随你拥有的东西。你做过之前是否尝试过将id设置为var?

$sql = "DELETE FROM users WHERE id = id";

示例:

$sql = "DELETE FROM users WHERE id = '$id'";