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 をデータベースから取得して、セッション変数に保存できます。シャウトが作成されると、シャウト自体と一緒にシャウトを作成した人の user_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 インジェクションが蔓延しています。もちろん、検証してサニタイズします。同様に、mysql_query 関数は PHP 5.5 で非推奨になるため、代わりにmysqli_query 関数を使用してください。さらに良いことに、 PDOを使用できるかどうかを確認してください。:)

于 2013-03-19T11:44:47.540 に答える