【问题标题】:Want to delete user in database in table PHP想要删除表 PHP 中数据库中的用户
【发布时间】:2012-09-06 08:35:25
【问题描述】:

我有一个表格,里面填满了我的数据库中的数据,我希望它旁边有一个按钮,以便每个特定用户删除该用户。但是我该怎么做呢?

代码如下:

<?php               
    include '../includes/db_connect.php';

    $sql = "SELECT * FROM `users`";
    $result = mysql_query($sql, $connection) or die ("Failed to excecute the query $sql on $connection");
?>
<table border=1>
    <tr>
        <th>
        Access lvl
        </th>
        <th>
        Username
        </th>
        <th>
        Email
        </th>
    </tr>
<?php
    while($row = mysql_fetch_array($result))
    {
        echo "</td><td>";
        echo $row['access'];
        echo "</td><td>";
        echo $row['username'];
        echo "</td><td>";
        echo $row['email'];
        echo "</td></tr>";
    }
    echo "</table>";
?>

【问题讨论】:

  • 您在行中放置一个带有提交按钮的表单,该按钮将该用户的用户 ID 发布到脚本,然后该脚本将删除该用户并将您重定向回上面显示的脚本。
  • 所有这些答案都太可怕了,这让我很难过。我相信我的个人信息是由这些人编写的网站。 :(
  • 如果您得到了答案并且它有效,请不要忘记点击该答案旁边的复选图标来接受它!

标签: php javascript mysql html


【解决方案1】:

我经常这样做并使用 jQuery。我使用以下内容:

HTML:

<table>
....
<tr>
    <td><span class="delete">Delete me!</span></td>
</tr>
</table>

jQuery:

$(document).on("click", ".delete", function(event)
{
    var sData = "?id=" + $(this).data("id");
    $.ajax({
        url: "pages/delete_script.php",
        type: "POST",
        data: sData,
        success: function(sResult)
        {
            // Process the data you got back from the delete script
            // For example removing the row if successfully deleted:
            if(sResult == "OK")
            {
                $(this).closest("tr").remove();
            }
        },
        statusCode: 
        {
            404: function() 
            {
                alert("page not found");
            }
        }
    });
});

on() 用于动态元素(我在该页面上使用 AJAX 进行所有操作)。然后我将需要发送的数据以正确的格式放入并执行 AJAX 请求。在 PHP 文件中可能是这样的:

if($_SERVER['REQUEST_METHOD'] == "POST")
{
    if(isset($_POST['id'])
    {
        mysql_query(
            sprintf('DELETE FROM `table` WHERE `id` = %d', $_POST['id'])
        );
    }
}

当然建议使用更多检查以确保删除正确的检查。

【讨论】:

  • @Gordon 感谢您的编辑。我总是忘记这一点。幸运的是,我目前只有个人项目,所以没有人可以弄乱我的数据。
【解决方案2】:

让按钮重定向到如下网址:example.com/user.php?delete=[id]

然后用 $row['id'] 填充 [id]。现在,当您捕获参数 $_GET['delete'] 时,您将获得一个 ID。现在您可以简单地将其放入 MYSQL 中的 DELETE 函数中。

注意:

  • 确保您为此操作设置了安全级别
  • 确保在此 GET 中不允许使用字符串
  • 确保使用 mysql_real_escape_string() !!

【讨论】:

  • 您想为此使用 POST。不是得到。 GET 应该是幂等且安全的。此外,当您的 example.com/user.php?delete=[id] URLs 索引您的网站时,爬虫程序可能会删除您的所有用户
  • @Gordon 再次阅读。确保您设置了安全级别。我认为投反对票不是正确的选择。既然这是一个有用的答案,现在他可以从两个中选择一个。或者使用 POST,或者使用 GET。
  • @Gordon 同样,爬虫永远不会到达这里,因为如果你是一个优秀的程序员,你会在你的元数据中将机器人设置为“nofollow”。因此,用于索引的爬虫永远不会进入该页面。还强烈建议将其设置为 nofollow 以获得更好的 SEO 评分。
  • @Gordon 为什么他不能设置安全级别?他当然可以!他只需要确保某人已登录,具有一定的安全级别并被允许使用该操作。您永远不会有“公共”删除操作。它总是被某种身份验证组件锁定。如果没有,您的网站无论如何都是易受攻击的。
  • 他无法在 POST 和 GET 之间进行选择,因为它们具有不同的语义。 In particular, the convention has been established that the GET and HEAD methods SHOULD NOT have the significance of taking an action other than retrieval.。正确的方法是 DELETE,但由于 HTML form methods only have to support POST and GET,POST 是正确的使用方法。
【解决方案3】:

我会将其移至 AJAX 函数,通过 onClick 或 data-id="" 将变量传递给 JavaScript 函数并使用 jquery $('element').data('id');收集 id 并将其发送到另一个静态 php 文件。

如前所述,您需要在将任何用户数据提交到 SQL 之前检查并清理已传递到文件的数据:

  • 使用 post 作为 AJAX 方法
  • filter_var($var, FILTER_VALIDATE_INT)
  • mysql_real_escape_string

这对于用户体验来说会感觉更好,并且还消除了蜘蛛触发操作的一些风险。如果您对安全性不感兴趣,人们仍然可以破解它,但这会使它变得更加困难,并且如果您向 SQL 添加一个状态列而不是删除您只需更改其状态的行,您就可以轻松地带来数据如果你被黑了就回来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多