【问题标题】:Delete mysql row on click点击删除mysql行
【发布时间】:2013-10-19 23:25:59
【问题描述】:

这是链接样式

<a href='del-user.php?id={$row['username']}'>Delete</a>

{$row['username']} 将从 Admin-CMS 用户表中获取用户名字段

现在.....当您单击它时,您会看到以下内容:

del-user.php?id=billy

现在我正在尝试什么

我想阅读链接并删除用户名为 billy 的行

这是我的 del-user.php 文件

<?php
  if($_GET['id'] != ""){
    $userID = $_GET['id'];
    $sql = "DELETE FROM users WHERE username='".$userID."'";
    $query  = mysql_query($sql);
  }
?>

我做错了什么? 顺便说一句,我的数据库设置是

TABLE   is called :     users
COLUMN  is called :     username

【问题讨论】:

  • 您的代码容易受到 XSRF 和 SQL 注入的攻击!

标签: php mysql post sql-delete


【解决方案1】:

首先,ESCAPE YOUR DATA。或者使用准备好的语句。您的代码易受 SQL 注入攻击。

其次,不要使用mysql 库。它们是折旧的。您需要改用mysqli

第三,你的连接指针在哪里?您需要在某处创建一个并将其传递给您的查询函数。

$con = mysqli_connect(...);
$result = mysqli_query($con, $sql);

【讨论】:

  • 我还没来得及保护它.... NEXT 我已经连接了别担心,我首先要如何成功收集数据
  • 很公平。由于您使用GET 执行此操作,您是否确保您的删除完全匹配?我假设你在用户名上运行urlencode
  • 你举了试图删除billy的例子。您确定有与该条目匹配的记录吗?
  • “我还没来得及保护它” ...你以后不保护它。您从一开始就安全地编写它。
【解决方案2】:

我刚刚在服务器上运行了一个测试,尽管我必须进行编辑才能在我的环境中运行,并且它运行正确。

我使用的整个文件是:

<?php
include_once('pre_load.php');
login_required();
$auth = Authentication::instance();
$db   = CDatabase::instance();

if(array_key_exists('id', $_GET) && !in_array($_GET['id'], array(0, ""))
{
    $userID = (is_string($_GET['id']) && ctype_digit($_GET['id'])) ? $_GET['id'] : FALSE ;
    if ($userID)
    {
        $sql    = "DELETE FROM `bans` WHERE `id` ='".$userID."'";
        $query  = $db->execute($sql);
        echo '<p>Row Deleted</p>';
    }
    else
    {
        echo '<p>Invalid ID</p>';
    }
}
?>

这一切都运行正确,这让我想到了这个问题:

这是你的整个文件吗?如果是这样,您如何连接到数据库以启动删除?

代码本身看起来是正确的,我没有发现任何错误,但是您将其发布为文件这一事实质疑是否包含数据库连接。

在该文件中包含数据库连接,如果没有,您的问题就会结束。

如果数据库连接实际上在文件中,请在此处发布,我将进行更多故障排除。

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多