如何为表格中的每一行创建一个删除按钮?

Posted

技术标签:

【中文标题】如何为表格中的每一行创建一个删除按钮?【英文标题】:How to create a delete button for each row in the table? 【发布时间】:2021-09-09 08:56:15 【问题描述】:

我正在尝试编写一个 php 代码来连接并从 mysql 获取数据单元格,并为每一行创建一个删除按钮,因为它像在 mySQL 数据库中一样递增。

请帮我弄清楚我做错了什么?!!

[我的表名是“vf”,它的结构是这样的]

ID     Password1     Password2

[我使用的 PHP 变量在哪里]

$Connect=mysqli_connect($host,$user,$Pass,$db);
$QueryVF = mysqli_query($Connect,'SELECT * from vf');
$ID =$_POST['ID'];
$DelVF = mysqli_query($Connect,'DELETE from vf where ID =$ID');

/* ALSO TRIED This:  $DelVF = mysqli_query($Connect,'TRUNCATE vf'); */

[我的 html 和 PHP 代码]

       
<html>
    <body>             
        <form method="POST">
            <table border="1" class=".input">              <!--vf Table-->
                        <tr>
                                <th>ID</th>
                                <th>Password 1</th>
                                <th>Password 2</th>
                                <th>Drop data</th>
                        </tr>
                            <?php
                                while ( $row = mysqli_fetch_array($QueryVF))
                                echo'<tr>';
                                    echo'<td>'.$row['ID'].'</td>';
                                    echo'<td>'.$row['Password1'].'</td>';
                                    echo'<td>'.$row['Password2'].'</td>';
                                    echo "<td><button type=\"submit\" name=\"Delete\" oneclick=\"$DelVF\">Drop Data</button></td>";
                                        if($_POST['Delete'])
                                            while ($DelVF = mysqli_query($Connect,"'DELETE from vf where ID =$ID'") )
                                            $DelVF;
                                            echo "VF table's row is successfully deleted";
                                                                
                                    echo'</tr>';
                              
                             ?>
                        </table>
        </form>
    </body>
</html>

【问题讨论】:

phpMyAdmin 不是数据库。您从 mySQL 获取数据,而不是 phpMyAdmin。 phpMyAdmin 只是一个可用于管理 mySQL 服务器的应用程序(几个可用的应用程序之一)。 无论如何,您的代码似乎试图删除整个表,而不是特定行。此外,它可能会运行多次,而不是一次,因为您正在循环它。将处理删除的代码移到循环外,并确保表单提交您要删除的行的 ID,以便您可以编写带有合适的 WHERE 子句的 DELETE 查询并将行 ID 作为参数传递。如果你搜索一下,你肯定可以在网上找到很多关于这个基本概念的例子,这是一个常见的要求 P.p.s 请在使用前阅读标签说明 - “加工”标签是指特定工具,而不是一般加工。我会为你删除它和 phpMyAdmin 标签。也请参观一下,以便您充分了解该网站的运作方式 - ***.com/tour 附带说明,您的代码容易受到 SQL 注入的攻击,因为用户变量没有正确转义。永远不要在生产环境中测试你的代码。阅读更多:php.net/manual/en/security.database.sql-injection.php 【参考方案1】:

正如@ADyson 在他们的 cmets 中所分享的,除了 mysqlphpmyadmin 之间的混淆之外,还有一些事情需要解决。

    要删除一行,需要使用DELETEmysql 语句。 TRUNCATE 是错误的,因为它会从表中删除所有行。阅读official documentation了解更多信息。

    POST 数据的管理移到while 循环之外,否则您将多次运行该代码

    您不会以任何方式通过POST 传递ID。一个简单的方法是将value 属性添加到submit 按钮,如下所示:

echo '<button type="submit" name="Delete" value="'.$row['ID'].'">Drop Data</button>';

总体而言,请参阅下面带有 cmets 的完整代码,以指导您了解为什么需要进行更改:

// Manage the POST data at the top of your file
if (isset($_POST['Delete'])) 
    // If you receive the Delete post data, delete it from your table
    $delete = 'DELETE FROM vf WHERE ID = ?';
    $stmt = $Connect->prepare($delete);
    $stmt->bind_param("i", $_POST['Delete']);
    $stmt->execute();

// Run your select AFTER the DELETE, so that you will get the updated table
$QueryVF = mysqli_query($Connect, 'SELECT * from vf');

?>

<html>
    <body>             
        <form method="POST">
            <table border="1">              
                <tr>
                        <th>ID</th>
                        <th>Password 1</th>
                        <th>Password 2</th>
                        <th>Drop data</th>
                </tr>
                    <?php
                    while ($row = mysqli_fetch_array($QueryVF)) 
                        echo'<tr>';
                        echo'<td>'.$row['ID'].'</td>';
                        echo'<td>'.$row['Password1'].'</td>';
                        echo'<td>'.$row['Password2'].'</td>';
                        // Add the ID to the value attribute so that it gets passed via POST
                        echo '<td><button type="submit" name="Delete" value="'.$row['ID'].'">Drop Data</button></td>';
                        echo'</tr>';
                    
                    ?>
            </table>
        </form>
    </body>
</html>

【讨论】:

非常感谢,它可以工作,但我仍在努力学习它是如何工作的。

以上是关于如何为表格中的每一行创建一个删除按钮?的主要内容,如果未能解决你的问题,请参考以下文章

如何为表格的每一行放置一个表格

如何为表格的每一行创建展开/折叠功能?角6

如何为每一行创建 HTML 表格按钮并将第一列的值输入到 Flask 函数进行查询

PHP & CSS:如何为表格的每一行获得悬停效果?

Power Query:如何为列表中的每一行添加列

js 表格的每一行都有一个按钮 点击按钮修改当前行某一列的信息