【问题标题】:How to delete specific rows with php in a table如何用php删除表中的特定行
【发布时间】:2018-12-05 14:08:54
【问题描述】:

我想知道是否可以使用表上的按钮从数据库中删除该特定行。 这是一个例子:

<thead>
   <tr>
      <th>Identity</th>
      <th>Name</th>
      <th>Stuff</th>
      <th>Action(Delete)</th>
   </tr>
</thead>
<tbody>
   <?php
      $con=mysqli_connect("","","","");
      // Check connection
      if (mysqli_connect_errno())
      {
      echo "Error " . mysqli_connect_error();
      } 

      $result = mysqli_query($con,"SELECT * FROM sm_admins");

      while($row = mysqli_fetch_array($result))
      {
      echo "<tr>";
      echo "<td>" . $row['identity'] . "</td>";
      echo "<td>" . $row['name'] . "</td>";
                                          switch ($row['level']) {
                                              case "hello" : echo "<td>Nice Try</td>";
                                                  break;
                                              case "bye" : echo "<td>Row in a row</td>";
                                                  break;
                                              case "Cake" : echo "<td>Lemon</td>";
                                                  break;
                                              case "ao" : echo "<td>Key</td>";
                                                  break;
                                              case "as" : echo "<td>Charger</td>";
                                                  break;

                                          echo "<td> <button class='btn btn-red btn-icon-only' onclick='deleterow(" . $row['identity'] . ")> <i class='fa fa-times'></i> </button></td>";
                                        }
      echo "</tr>";
      }
      echo "</table>";

      mysqli_close($con);
      ?>

例如,我在数据库中有 2 行,这会在 HTML 表上创建 2 个不同的行,我想知道是否可以使用 HTML 上每一行末尾的按钮从数据库中删除特定行页面

【问题讨论】:

    标签: php html mysql sql phpmyadmin


    【解决方案1】:

    执行此操作的方法是使用page.sql 文件添加特定的SQL 代码,即adddrop table

    例如,任何按钮onclick 可以将您重定向到下面的页面,然后立即重定向回主页。然后,您可以为每一行创建一个特殊页面,并为删除行创建一个单独的 SQL 页面。祝你好运!

    name_of_whatever.sql

    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
    
    --
    -- Database: `database_name`
    --
    
    -- --------------------------------------------------------
    
    --
    -- Table structure for table `table_name`
    --
    
    CREATE TABLE IF NOT EXISTS `table_name` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `word` varchar(50) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
    
    --
    -- Dumping data for table `table_name`
    --
    
    INSERT INTO `table_name` (`id`, `word`,) VALUES
    (1, 'hello');
    
    -- --------------------------------------------------------

    【讨论】:

      【解决方案2】:

      有许多可行的方法。我能想到的在您的代码之上构建的最简单的代码是这样的:

      <script>
      function deleterow(rowid)
      {
        var f = document.forms['theform'];
        f.rowid.value = rowid;
        f.submit();
      }
      </script>
      <form name="theform" method="post">
      <input type="hidden" name="rowid"/>
      <input type="hidden" name="action" value="deleterow"/>
      </form>
      

      然后在您的 PHP 后端代码中检查 $_POST["action"] 中的“deleterow”并执行 SQL 删除从 $_POST["rowid"] 获取值 - 确保正确转义它以避免 SQL 注入。

      避免重新加载页面和重新呈现 HTML 的更优雅的方法是向后端发出 AJAX 调用,但这需要更多的工作。如果这是一个简单的应用程序,页面上的行数永远不会超过 100 行,并且不会被超过几个用户使用,那么它可能比它的价值更麻烦。

      确保您了解 PHP 如何与 HTML/Javascript 交互。 PHP 在服务器上执行。呈现 HTML 并在客户端上执行 Javascript。当您编写 PHP 时,您正在做的是将 HTML/Javascript 发送到客户端以呈现/执行。然后当您的客户端提交表单时,在服务器上执行 PHP 以处理提交。与数据库对话的是服务器上的 PHP。所以在你的 PHP 代码中你应该有这样的东西:

      function handle_action()
      {
        $action = isset($_POST["action"]) ? $_POST["action"] : "";
        switch ($_POST["action"])
        {
          case "deleterow":
            handle_delete();
            load_data();
            break;
          default:
            load_data();
        }
      }
      
      function handle_delete()
      {
        $rowid = isset($_POST["rowid"]) ? $_POST["rowid"] : "";
        if (!$rowid) return;
        mysqli_query("delete from sms_admins where identity = '".
      mysqli_escape_string($rowid)."'");
      }
      
      function load_data()
      {
        // put everything in your example here except for mysqli_connect
      }
      
      $con=mysqli_connect("","","","");
       // Check connection
      if (mysqli_connect_errno())
      {
          echo "Error " . mysqli_connect_error();
      }
      
      handle_action(); 
      

      【讨论】:

      • 您能在此处添加一个 php mysqldump 或其他东西的示例吗?
      • 您不需要使用 mysqldump,只需像您在示例代码中使用的那样使用 mysqli_query,除了它应该是 delete 而不是 select。
      猜你喜欢
      • 2014-11-24
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多