【问题标题】:Delete MySQL row from PHP while loop从 PHP while 循环中删除 MySQL 行
【发布时间】:2015-12-03 04:01:08
【问题描述】:

我有一个 while 循环在表中显示我的数据库列和行。

我想创建一个可以删除特定 MySQL 行的按钮,但不幸的是,我无法选择必须删除哪些行,因为我使用“while 循环”以 HTML 格式显示我的数据库内容。

提供图片以便更好地理解我想要做什么:
是的,我希望在单击绿色按钮时 - 发送 MySQL 查询以删除该行(存在于我的数据库中)。

提供代码:

<?php
//CONECT TO MYSQL
include 'database.php';

//GET VALUES
        $sql = "SELECT * FROM amountcontainer";
        $result = $conn->query($sql);


        if ($result->num_rows > 0) 
        {
            //Table headlines - NOT A PHP
            echo "<table class='moneytable'>
                    <tr>
                        <th style='background-color: #2d323a; color: white;'>Date</th>
                        <th style='background-color: #2d323a; color: white;'>Amount</th>
                        <th style='background-color: #2d323a; color: white;'>Reason</th>
                    </tr>";

            // output data of each row
            while($row = $result->fetch_assoc()) 
            {

                //RED //Make statement of amount red if it has a " - "
                if(strpos($row['amount'],'-') !== false)
                {

                    echo 
                    "
                        <tr>
                            <th style='font-weight: normal;background-color: #ff9999;' class='row-time'>" . $row['time'] . "</th>
                            <th style='font-weight: normal;background-color: #ff9999;' class='row-amount'>" . $row['amount'] . "</th>
                            <th style='font-weight: normal;background-color: #ff9999;' class='row-reason'>" . $row['reason'] . "</th>
                        </tr>

                    ";

                }

                //NORMAL //Make statement of amount normal if it doesn't have a " - "
                else
                {
                    echo 
                    "
                        <tr>
                            <th style='font-weight: normal;' class='row-time'>" . $row['time'] . "</th>
                            <th style='font-weight: normal;' class='row-amount'>" . $row['amount'] . "</th>
                            <th style='font-weight: normal;' class='row-reason'>" . $row['reason'] . "</th>
                        </tr>

                    ";

                }


            }
            echo "</table>";
        } 

        else 
        {
            echo "0 results";
        }

【问题讨论】:

  • 表上是否有可以引用来删除行的主索引或唯一键?
  • 我没有。我也想这样做,但不知道怎么做。

标签: php mysql


【解决方案1】:

首先,表头只使用&lt;th&gt; 元素。对于实际的数据单元格,请使用 &lt;td&gt; 元素。

要允许删除单个数据库行,您可以在表中包含链接。在创建表格行的循环中:

                    <tr>
                        <td>" . $row['time'] . "</td>
                        <td>" . $row['amount'] . "</td>
                        <td>" . $row['reason'] . "</td>
                        <td><a href='?deleteId=$row[keyID]'>Delete</a></td> 
                    </tr>

在这种情况下,选择“删除”链接时,它会使用$ _get变量调用相同的脚本:您可以测试的“dellesid”,您可以测试,如果找到,请执行删除行。您还可以将表格嵌入到 html 表单中,并在每行的一个单元格中添加一个提交按钮,并将提交的值设置为要删除的行 id。

【讨论】:

  • 正如@Ohgodwhy 提到的,您需要一个表的主键。几乎无一例外,数据库中的每个表都应该有一个主键。
  • 我认为这可能是答案。我怎样才能用这个“GET”方法调用函数呢?我刚刚测试了它,我看到它标记了我的行,太棒了!
  • 在示例中,表的主键是表中的“keyID”,您需要具有表示表中行的唯一标识符的列。当您单击链接时,它将调用相同的页面,但带有 url 参数。你可以像这样测试它: if($_GET['deletedId']) { $sql = "DELETE FROM MyTable WHERE keyID = '$_GET[deletedId]' ";
  • 还仅供参考,在删除语句中使用 $_GET 变量之前使用准备好的语句或至少 mysqli_real_escape_string 以防止 SQL 注入。祝你好运!
  • 当我把它放在代码上时,它说“注意:未定义的索引:deleteId”。编辑:我错了,对不起。会告诉你发生了什么!
【解决方案2】:

这听起来像是一个 ajax 的地方。这是一个粗略的例子,可能会给你一个很好的起点。

<?php
while($row = $result->fetch_assoc()) {
    $isNegative = strpos($row['amount'],'-') !== false;

    echo "<tr class='record' data-id=\"{$row["id"]}\">";
    //Use ternary operator & css classes
    echo "<td class='standard-record ".$isNegative ? "color-red" : "" ."''>{$row["record"]}</td>";
    echo "</tr>";
}
?>
<script>
    $(".record").click(function(){
        var request = {
            id: $(this).data("id")
        };
        $.post( "delete-record.php", request, function(data){
            $(this).remove();
        });
    });
</script>

【讨论】:

    【解决方案3】:

    改变这个

    if(strpos($row['amount'],'-') !== false) # wrong way
    

    到这里

    if($row['amount'] < 0) # detecting negative numbers
    

    【讨论】:

      【解决方案4】:

      你需要添加一个额外的

      <th style='font-weight: normal;' class='row-reason'><a class="crossBtn" href="?del_id=".$row['id'].">&nbsp;</a></th>
      

      并获取 del_id 并删除此特定记录。

      【讨论】:

        猜你喜欢
        • 2017-09-12
        • 2011-11-30
        • 1970-01-01
        • 2018-05-06
        • 2019-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-27
        相关资源
        最近更新 更多