1

我有一个问题,我不能阻止登录用户删除其他用户的帖子吗?现在在我的代码中,我可以删除所有用户的帖子,但我希望只能删除我的帖子(登录的用户帖子)。有人可以在正确的方向上帮助我如何做到这一点吗?

<div class="deletebtn"><a href="../delete/delete.php?id=' . $row['id'] . '"class=\"icon-2 info-tooltip\">Delete post</a></div>



$id=$_GET['id'];

$sql="DELETE FROM shouts WHERE id='$id'";
$result=mysql_query($sql);

if($result)
{
    echo('<div class="deletedpost">You have deleted a post. <a href="../pages/content.php">Tillbaka till Bloggen</a></div>');
}
else 
{
    echo "Something went wrong";
}
mysql_close();  

我在一个文件中使用 href,链接到另一个使用 Sql 代码的文件。

4

5 回答 5

1

你可以通过 session

检查用户是否登录。如果登录则删除帖子

if(isset($_SESSION['user']))
{
    //delete post
}

存储userId在您的表中并像这样更新您的删除查询......

$sql="DELETE FROM shouts WHERE id='$id' and userId = '$_SESSION[user]'";
于 2013-03-19T10:03:12.320 回答
0

在删除之前检查登录用户是否是特定帖子的所有者。

使用帖子 ID 和所有者 ID 编写一个选择查询。如果返回 true,则允许他删除帖子,否则不允许。

于 2013-03-19T10:02:00.123 回答
0

你没有 $_SESSION['id'] 之类的吗?而且您确实在喊叫表中关联了该用户 ID,所以您知道谁在喊叫,对吗?

DELETE FROM shouts WHERE id='$id' AND user_id='$_SESSION['id']'

不过,您应该处理输入。

于 2013-03-19T10:02:09.150 回答
0

使用这种查询,这里它只会删除登录用户的帖子。

$sql="DELETE FROM shouts WHERE id='$id' and user_id = '$loggedin_session_id'";
于 2013-03-19T10:02:48.710 回答
0

我建议在用户注册时,为他们分配一个唯一的 ID(或让数据库自动递增)并将其保存在数据库中。然后,每当他们登录时,您都可以从数据库中提取该 user_id 并将其存储在会话变量中。创建呼喊时,您将创建呼喊的人的用户 ID 与呼喊本身一起存储在数据库的呼喊表中。当用户尝试删除喊叫时,您首先检查以确保该喊叫属于他们,然后才允许他们删除它。

一个例子:

<?php

//when user logs in
$email = 'example@example.com';
$password = 'default';
$sql = "SELECT id FROM user_table WHERE email = '$email' AND password = '$password'";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
$_SESSION['user_id'] = $row['id'] //'id' is the user's id; assign it to the session variable

//user creates the shout
$user_id = $_SESSION['user_id']; //get the user_id from the logged-in user
$shout = $_POST['shout'];
$sql = "INSERT INTO shout_table (user_id, shout) VALUES ('$user_id','$shout')"; //store user id alongside the shout for future queries
mysql_query($sql);

//user about to delete the shout
$id = $_GET['id'];
$user_id = $_SESSION['user_id'];
//the sql to check in the shout_table to see if the shout they are deleting belongs to them
$sql = "SELECT * FROM shout_table WHERE user_id = '$user_id' AND id = '$id'";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);

if ($row)
{
    //everything is alright; this user can delete the shout, so prepare the DELETE query to do so
}
else
{
    //the user is not allowed to delete the shout because it's not theirs; tell them so with an echo or whatever you're using for error handling
}

?>

上面的示例充斥着 SQL 注入。当然,验证和消毒。同样,从 PHP 5.5 起 mysql_query 函数将被弃用,因此请掌握使用mysqli_query 函数的窍门。更好的是,看看你是否可以使用PDO。:)

于 2013-03-19T11:44:47.540 回答