我正在使用PDO,我想从我的成员列表中删除指定的用户。我做了#34;删除"按钮显示在每个用户身上,我希望当我点击任何随机用户时,删除他。这是我第二天试图做到这一点。
我做了这样的事情:
$id = $user->id;
$sql = "DELETE FROM `users` WHERE `id` = :id";
$query = $handler->prepare($sql);
$query->execute(array(":id" => $id));
但这不是一个解决方案,这将删除每个人加入该页面的原因。我想点击"删除"按钮,删除该按钮所在的用户。我希望你理解我,我会告诉你我想要它的画面。
答案 0 :(得分:1)
您应该使用$_POST
全局数组获取要删除的用户ID($_REQUEST
会起作用,但可能会让您面临更大的XSS攻击风险 - 这是因为它也接受GET变量,可以来自你的形式之外)。
我会弄清楚你哪里出错了。
基于您放置的HTML进行用户ID检索。
// This user id can be obtained in two ways as I suggested.
// 1.) $_REQUEST['user_id'] if you pass the data in the href link
// 2.) $_POST['user_id'] if you pass the data as hidden field in form element.
// 3.) Ensure that you get your USER ID correct in that place by echoing the query that you have made in the SQL.
profile.php
<a href="process.php?delete_id=<?php echo $data->id; ?>">DELETE</a>
process.php
<?php
// Ensure DB connectivity in this page. And this code will work fine.
if(isset($_REQUEST['delete_id'])){
$id = $_REQUEST['delete_id'];
$sql = "DELETE FROM `users` WHERE `id` = :id";
$query = $handler->prepare($sql);
$query->execute(array(":id" => $id));
}
?>
答案 1 :(得分:-1)
您的代码存在的一个问题是,您实际上并未将数据绑定到查询中。如果您打算使用PDO,请使用准备好的声明。
我创建了一个基于WHERE
删除行的函数。
<?php
function pdo_delete($MyConnection, $Table, $Where, $bindArray = array(), $Limit = 1) {
$prep = $MyConnection->prepare("DELETE FROM $Table WHERE $Where LIMIT $Limit");
foreach ($bindArray as $key => $value) {
$prep->bindValue(":$key", $value);
}
$prep->execute();
$prep->closeCursor();
}
?>
$ MyConnection存储pdo连接实例
$ Table存储您要定位的表的名称
$ Where存储您要定位的列的名称
$ bindArray将数据绑定到列并选择与
匹配的行$ Limit是您要允许的行数
以下是如何使用此功能的示例。
调用函数
pdo_delete();
调用您的PDO连接
pdo_delete(null); // Replace null with your own pdo connection, in your case $handle
定位表格
pdo_delete(null, 'users');
您想在哪里绑定数据
pdo_delete(null, 'users', 'id = :id');
绑定数据
pdo_delete(null, 'users', 'id = :id', array('id' => $user->id));
如果需要,请添加限制...如果是,请添加另一个逗号并键入要允许的行数。
pdo_delete(null, 'users', 'id = :id', array('id' => $user->id), 2); // Allows 2 columns
您可以更改vars / function_name / etc的名称。
这应该有效,我将它用于我的网站。