2013-03-19 2 views
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.

+1

Ваш код уязвим для [SQL injection] (http://en.wikipedia.org/wiki/SQL_injection). – PeeHaa

+0

вам нужен внешний ключ в таблице криков, чтобы привязывать сообщения определенным пользователям. – Pete

+0

@PeeHaa Спасибо, я собираюсь взглянуть на это. –

ответ

1

вы можете сделать это с помощью session

проверки, если пользователь вошел в систему или нет. если вошли в систему, то удалить сообщение

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

магазин userId в таблице и обновить запрос на удаление, как это ...

$sql="DELETE FROM shouts WHERE id='$id' and userId = '$_SESSION[user]'"; 
+0

Спасибо, но я использую сеанс сейчас, но ваш код не работает, я все еще могу удалить все сообщения. –

+0

@BrunoChavez хранить идентификатор пользователя в таблице. например, если вы добавляете элемент, а затем сохраняете своего пользователя id, а затем обновите свой запрос на удаление, как в моем ответе –

+0

создайте столбец 'userId' в таблице' shouts', а затем просто сохраните UserId в нем, например, если вы добавили что-то, а затем сохраните свой идентификатор, а затем укажите свой идентификатор сеанса в запросе удаления. это будет работать –

0

Перед удалением убедитесь, что вошедший пользователь является владельцем конкретного сообщения.

Напишите выборный запрос с идентификатором сообщения и идентификатором владельца. Если он возвращает true, разрешите ему удалить сообщение, иначе не разрешайте.

0

У вас нет $ _SESSION ['id']? И у вас есть этот идентификатор пользователя, связанный в таблице криков, так что вы знаете, кто кричит, правильно?

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

Вы должны treatthe входы, хотя.

+0

Catita Спасибо, но что такое user_id = '$ _ SESSION [' id ']' –

0

использовать этот вид запроса, здесь он удалит только вход в систему пользователя.

$sql="DELETE FROM shouts WHERE id='$id' and user_id = '$loggedin_session_id'"; 
+0

Спасибо, но что такое user_id = '$ loggedin_session_id'" –

+0

@BrunoChavez ' $ loggedin_session_id' является вашим идентификатором пользователя loggedin –

0

Я хотел бы предложить, что после того как пользователь Зарегистрировавшись, вы назначаете им уникальный идентификатор (или пусть база данных делает это с автоматическим приращением) и сохранит его в базе данных. Затем, когда они входят в систему, вы можете вытащить этот user_id из базы данных и сохранить его в переменной сеанса. Когда создаются крики, вы сохраняете user_id человека, который создал крик вместе с самим криком в таблице криков базы данных. Когда пользователь пытается удалить крик, сначала проверяйте, чтобы удостовериться, что этот крик принадлежит им, прежде чем разрешить им удалить его.

Пример:

<?php 

//when user logs in 
$email = 'exampl[email protected]'; 
$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 functions. Еще лучше, посмотрите, можете ли вы использовать PDO. :)

+0

Спасибо, я собираюсь взглянуть на это ... –

Смежные вопросы