【问题标题】:Echo delete link into php回声删除链接到php
【发布时间】:2016-07-18 09:30:40
【问题描述】:

我有一个关于 php 中的删除功能的问题。 考虑 PHP 我是这方面的真正菜鸟。

我想在一个 php 循环中创建一个删除链接。

这是我的家.php:

while($row = $result->fetch_assoc()) {
    echo "<tr>";
    echo "<td class='info-item'>".$row["userID"]."</td>";
    echo "<td class='info-item'>".$row["userName"]." </td>";
    echo "<td class='info-item'>".$row["userLast"]."</td>";
    echo "<td class='info-item'>".$row["userDegree"]."</td>";
    echo "<td class='info-item'>".$row["userOrganization"]."</td>";
    echo "<td class='info-item'>".$row["userIndustry"]."</td>";
    echo "<td class='info-item'>".$row["userAddress-1"]."</td>";
    echo "<td class='info-item'>".$row["userAddress-1"]."</td>";
    echo "<td class='info-item'><a href='$delete'>Link</a></td>";
}

这一行:

echo "<td class='info-item'><a href='$delete'>Link</a></td>";

不工作。

对于$delete,我在我的脚本之上使用它:

$delete = "delete.php";

delete.php 看起来像这样。

ob_start();
include("dbconfig.php");
if(isset($_GET['userID'])!="") {
    $delete=$_GET['userID'];
    $delete=mysql_query("DELETE FROM tbl_users WHERE userID='$delete'");
    if($delete)
        header("Location:index.php");
    else
        echo mysql_error();
}
ob_end_flush();

但是对于删除我单击的某个 id 似乎没有任何反应。

请帮忙。

【问题讨论】:

  • 这段代码的 HTML 输出是什么?它会给你一个表格视图。你能显示 HTML 输出吗?
  • 嗯,您似乎没有在$delete 变量中设置ID 或将其传递给链接?你需要做类似$delete = 'delete.php?userID=' . $userID;

标签: php


【解决方案1】:

您的删除不起作用,因为它是多余的和静态的。您应该通过(至少)将用户 ID 附加到 delete.php 来使其成为动态的。这个id 然后将用于确定要删除的记录...

    <?php
        while($row = $result->fetch_assoc()) {
            // GENERATE AN ID BASED URL FOR THE DELETE
            // THIS WOULD READ SOMETHING LIKE: "delete?id=1" 
            // AND THE ID WOULD BE UNIQUE ACROSS EACH ROW....
            // YOU CAN THEN USE THE ID ($_GET['userID'] TO DETERMINE WHICH USER
            // ADD userId WHICH RECORD YOU HAVE TO DELETE....
            $delete = "delete.php?userID="  . $row["userID"];
            echo "<tr>";
            echo "<td class='info-item'>"   . $row["userID"]            . "</td>";
            echo "<td class='info-item'>"   . $row["userName"]          . " </td>";
            echo "<td class='info-item'>"   . $row["userLast"]          . "</td>";
            echo "<td class='info-item'>"   . $row["userDegree"]        . "</td>";
            echo "<td class='info-item'>"   . $row["userOrganization"]  . "</td>";
            echo "<td class='info-item'>"   . $row["userIndustry"]      . "</td>";
            echo "<td class='info-item'>"   . $row["userAddress-1"]     . "</td>";
            echo "<td class='info-item'>"   . $row["userAddress-1"]     . "</td>";
            echo "<td class='info-item'><a href='{$delete}' >Delete User</a></td>";
        }

PHP:

    <?php

        // USING PDO...
        //DATABASE CONNECTION CONFIGURATION:
        defined("HOST")         or define("HOST",           "localhost");
        defined("DBASE")        or define("DBASE",          "yourDB");
        defined("USER")         or define("USER",           "root");
        defined("PASS")         or define("PASS",           "root");

        ob_start();
        if(isset($_GET['userID'])!="") {
            $userID         = $_GET['userID'];
            try {
                $dbh        = new PDO('mysql:host='.HOST.';dbname='. DBASE,USER,PASS);
                $dbh->setAttribute(PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

                $query      = "DELETE FROM `tbl_users` WHERE userID='{$userID}'";
                $stmt       = $dbh->prepare($query);
                $deleteOK   = $stmt->execute();

                if ($deleteOK) {
                    header("Location:index.php");
                }

            }catch(PDOException $e){
                throw new Exception($e->getMessage());
            }
        }
        ob_end_flush();

【讨论】:

  • 伴侣为什么不使用正确的语法?你编辑了三次。 1. 没有= 符号。 2. id 应该是 userID
  • 它仍然没有从数据库中删除它。
  • @Dionoh 问题出在 $_GET['userID'] 变量上。之前,它是 $_GET['userId']。现在,它已经改变了......如果你仍然想尝试,你可以再试一次......
  • @Poiz 现在它说:没有选择数据库
  • @Poiz 这是delete.php的吗?
【解决方案2】:

您应该在链接中包含用户 ID:

echo "<td class='info-item'><a href='$delete?userID={$row["userID"]}'>Link</a></td>";

此外,您的代码容易受到 SQL 注入并使用 mysql_* 函数,这些函数将来将不再支持。用 mysqli 或 PDO 类中的函数替换它们。

【讨论】:

    【解决方案3】:

    当您将控件发送到另一个页面时,$delete 变量将不会被传递。所以最好使用查询字符串。我最好的解决方案是:

    • 从数据库中获取 ID。
    • 将 ID 附加到链接中。
    • 使用$_GET获取记录的查询字符串。

    home.php代码:

    echo "<td class='info-item'><a href='{$delete}?userID=".$row["userID"]."'>Link</a></td>";
    

    现在主要是delete.php:

    $delete = $_GET["userID"];
    

    注意:您的代码有很多漏洞。不要使用 mysql_* 函数,因为它们已被弃用。

    【讨论】:

    • 我在我的屏幕上看到了这个No database selected
    【解决方案4】:

    您没有发送userID 与您的网址,请在此处更改。

    echo "<td class='info-item'><a href='$delete?userID=".$row["userID"]."'>Link</a></td>";
    

    header 之后也使用 exit

    header("Location:index.php");
    exit;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2013-06-03
      • 1970-01-01
      相关资源
      最近更新 更多