【问题标题】:Delete li entry in database with PHP用PHP删除数据库中的li条目
【发布时间】:2016-12-30 15:41:12
【问题描述】:

我正在开发一个网站,用户可以在该网站上输入他欠朋友的钱。在一个页面上,用户可以看到他到目前为止所做的所有条目,并且应该能够删除它们。所有条目都插入数据库中。对于此概览页面,我使用以下结构:

<ul class="list-group">
    <?php 
    $isEmpty = true;
    while ($data = mysql_fetch_array($res)) {
        if ($data['isDebt'] == 0) {
            $isEmpty = false; ?>
            <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" autocomplete="off">
                <li class="list-group-item" name="Debt_ID" value="<?php echo $data['Debt_ID'] ?>"><span class="badge"><?php echo $data['value']; ?></span><?php echo $data['name']; ?>
                    <button name="delete" type="submit" id="delete" class="btn btn-xs btn-danger pull-right">
                        <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>&nbsp;
                    </button>
                </li>
            </form>
  <?php }
    } 
    if ($isEmpty) { ?>
        <li class="list-group-item">No debt!</li>    
    <?php 
    } ?>
</ul>

一个债务条目具有以下值:

  • Debt_ID(数字)
  • 名称(如“杰克的披萨”)
  • 价值(价格。例如“10”)

每个 li 元素的按钮应通过 Debt_ID 删除 DB 中的条目。到目前为止,我使用了以下 SQL 语句:

DELETE FROM Debt WHERE Debt_ID='$debt_ID';

在 PHP 中它看起来像这样:

if (isset($_GET['delete'])) {
    $debt_ID = trim($_POST['Debt_ID']);
    $res = mysql_query("DELETE FROM Debt WHERE Debt_ID='$debt_ID';");

    if ($res) {
        $errTyp = "success";
        $errMSG = "Successfully deleted";
    } else {
        $errTyp = "danger";
        $errMSG = "Error occured";
    }
 }

我现在的问题是我无法获得我在li 元素中使用 PHP 输入的 Debt_ID。有谁知道更好的方法或我做错了什么? 我正在使用 Cloud9 进行开发,因此如果有兴趣我可以邀请其他人。

【问题讨论】:

  • 使用债务 ID 创建 input type=hidden
  • &lt;li&gt; 不是输入。如果您要使用类似的东西,请使用隐藏输入。
  • 这里也没有 jquery/ajax,所以如果它们没有错误或导致您犯的语法错误,那么应该删除这些标签。
  • @u_mulder 我们的 cmets 就像,相隔 2 秒。 GMTA 我猜 lol 我在打字的时候没有看到你的。但是,是的,这就是这里的解决方案。
  • 如何从输入字段中检索 ID?

标签: php jquery html mysql ajax


【解决方案1】:

当您加载所有债务时,您可以使用select 语句执行此操作并循环遍历结果集。在循环中,您可以将 id 放入每个 li 元素的隐藏输入中:

$sql = "SELECT debt_id, name, value FROM debts WHERE user_id = " . $user_id;
$result = $conn -> query($sql);

if ($result -> num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo '<li>
                  <span>' . $row["name"] . '</span>
                  <span>' . $row["value"] . '</span>
                  <input type="hidden" value="' . $row['debt_id'] . ' name="id-to-delete">
              </li>';
    }
} else {
    echo "no results";
}

delete.php 文件应包含:

<?php  
    if (isset($_POST['id-to-delete'])) {
        $idToDelete = $_POST['id-to-delete'];

        // sql to delete a record
        $sql = 'DELETE FROM debts WHERE debt_id=' . $idToDelete;

        if ($conn->query($sql)) {
            echo "Record deleted successfully";
        } else {
            echo "Error deleting record: " . $conn->error;
        }
    }
?>

【讨论】:

    【解决方案2】:

    在表单元素之后简单地添加

    <input type="hidden" name="Debt_ID" value="<?php echo $data['Debt_ID'] ?>">
    

    然后从 li 元素中删除相同的信息。

    提交表单时,带有 name 属性的输入元素会被传递到下一页。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 2014-11-18
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      相关资源
      最近更新 更多