【问题标题】:Display and Delete data from database显示和删除数据库中的数据
【发布时间】:2013-10-13 18:41:23
【问题描述】:

我是 PHP 新手,只想制作一个基本页面,我可以在其中查看数据库中的所有用户并删除它们。我已经走了这么远,但它一直告诉我我有一个我有和未定义的索引:user_id,虽然它告诉我它已经删除了它没有删除任何内容的字段。这是我的代码:

<?php include_once "includes/scripts.php"; ?>
<?php include_once "includes/connect.php";?>
<?php include_once "includes/cms_page_security.php";?>
<div id="cms_container"><br>
    <br>
    <h1>MANAGE USERS<img src="images/three_column_grid_line.png" alt="line"></h1>
    <p class="logout_btn"><a href="admin_cms.php">Back</a></p>
<?php
$tbl="users"; // Table name 
$sql = "SELECT * FROM $tbl";
$result = mysql_query($sql, $connect);
while($rows = mysql_fetch_array($result)){
?>
<?php
echo $rows['user_id'];
echo $rows['user_name'];
echo $rows['user_password'];  
?> 
<a href="delete_user.php?id= <? echo $rows['user_id']; ?>">delete</a>
<?php
}
?>
<?php
mysql_close();
?>
</div><!--cms_container-->
</body>
</html>

它应该链接到的页面会删除查询:

<?php include_once "includes/connect.php";?>
<?php
    $tbl="users"; 
    $user_id= $_GET ['user_id'];
    $sql="DELETE FROM $tbl WHERE user_id = '$user_id'";
    $result = mysql_query($sql, $connect);
    if($result){
        echo "Deleted Successfully";
        echo "<BR>";
        echo "<a href='delete.php'>Back to main page</a>";
    }else {
        echo "ERROR";
    }
    ?> 
<?php
mysql_close();
?>

【问题讨论】:

  • 危险:您使用的是an obsolete database API,应该使用modern replacement。您也容易受到SQL injection attacks的影响,现代 API 可以让您更轻松地从 defend 中获得。
  • $connect 在你的delete.php 中在哪里
  • @Quentin 我只是好奇,你有一些 Danger 模板吗?
  • 只有一个。 W3Schools 有很多问题要回答。
  • 喜欢生吃$_GET参数,如果你不正确地逃避它,你很容易受到sql注入

标签: php mysql


【解决方案1】:

在 delete_user.php 中你必须得到 user_id

$user_id= $_GET ['id'];

因为在您的&lt;a href="delete_user.php?id= &lt;? echo $rows['user_id']; ?&gt;"&gt;delete&lt;/a&gt; 链接中,GET 变量是“id”,而不是“user_id”

【讨论】:

    【解决方案2】:

    您确实应该改用 PDO。 问题在于您传递的信息。

    链接:&lt;a href="delete_user.php?id= &lt;? echo $rows['user_id']; ?&gt;"&gt;delete&lt;/a&gt; 正在寻找“id”,但您稍后会寻找“user_id”

    如果您将其更改为&lt;a href="delete_user.php?user_id=&lt;? echo $rows['user_id']; ?&gt;"&gt;delete&lt;/a&gt;,它应该可以工作。

    我仍然强烈建议您改用 PDO,它更安全且更易于使用。

    PDO 删除示例

     public function deleteUser($username, $user_id){
    
        if($this->isAdmin($username) == true){
    
            $query = $this->db->prepare('DELETE FROM users WHERE user_id = ?');
            $query->bindValue(1, $user_id);
    
            try{
                $query->execute();
            }catch(PDOException $e){
                die($e->getMessage());
            }
        }else{
            return false;
        }
    }
    

    我正在运行额外检查以确保请求删除的人是管理员成员,但您应该能够看到结构

    【讨论】:

      【解决方案3】:

      除了其他答案:

      如果未启用 php 短标签,此行可能是致命错误:

      <a href="delete_user.php?id= <? echo $rows['user_id']; ?>">delete</a>
      

      php 手册说:

      *PHP 还允许使用短标签 &lt;??&gt; (不鼓励这样做,因为它们只有在启用时才可用 short_open_tag php.ini 配置文件指令,或者如果配置了 PHP 使用 --enable-short-tags 选项。* http://php.net/manual/en/language.basic-syntax.phptags.php

      【讨论】:

        【解决方案4】:

        即使更改零行,SQL 查询也会成功。在生成 HTML (id= &lt;?) 时,您在用户 ID 前加上空格,因此您不会匹配任何行(因为 "1" 不会与 " 1" 匹配)。

        【讨论】:

          【解决方案5】:

          您在哪里创建“删除”链接

          <a href="delete_user.php?id= <? echo $rows['user_id']; ?>">delete</a>
          

          您正在创建一个“id”变量,但稍后您会查找“user_id”。

          将链接更改为

          <a href="delete_user.php?user_id=<? echo $rows['user_id']; ?>">delete</a>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-16
            • 1970-01-01
            • 1970-01-01
            • 2011-11-29
            • 1970-01-01
            相关资源
            最近更新 更多