Удаление сообщений форума - PullRequest
       2

Удаление сообщений форума

0 голосов
/ 03 августа 2011

У меня есть таблица со следующими полями: wall_posts, group_id, id и user_id.

Wall_posts - это записи пользователя, group_id импортируется из другой таблицы и является просто уникальным идентификатором группы, id - это простопростой счетчик, и user_id получает идентификатор пользователя из сеанса.

Мой код избавляется от всех wall_posts, если вы нажимаете кнопку удаления, сравнивая идентификатор пользователя с пользователем в сеансе.Я пытаюсь найти способ удалить отдельные сообщения, а не все сообщения пользователя.

Вот код:

if (isset($_POST['delete'])) {
    $current_user = $_SESSION['user_id'];
    $result = mysql_query("SELECT * FROM group_posts");
    while ($user_id = mysql_fetch_array($result)) {
        $id = $user_id['user_id'];
    }
    if ($current_user == $id) {
        mysql_query("DELETE FROM group_posts WHERE $current_user = $id") or die(mysql_error());
    }
}

Как привязать кнопку удаления к индивидуальномусообщения вместо удаления всех сообщений, сделанных пользователем, который в данный момент находится в сеансе?

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

Ваш SQL-запрос выше не имеет смысла - оператор WHERE должен иметь форму WHERE column_name = value.

Предполагая, что id является первичным ключом для group_posts, так как вы отображаете сообщениясоздайте ссылку для каждого сообщения, созданного автором, например, <a href="delete.php?delete=3">Delete This Post</a> для сообщения с id 3. Затем вы сделаете запрос, подобный следующему:

DELETE FROM group_posts WHERE id = postIdValueHere

Используя шаблон кода, который вы использовали выше:

if (isset($_POST['delete']) && $_POST['delete'] > 0) {
$current_user = $_SESSION['user_id'];
$post_id = (int) $_POST['delete'];

if ($current_user == $id) {
    mysql_query("DELETE FROM group_posts WHERE id = $post_id AND user_id = $id") or die(mysql_error());
}

Этот запрос гарантирует, что могут быть удалены только сообщения с заданным идентификатором, созданные текущим автором.

Это отвечает на ваш вопрос?

Один развы освоитесь с SQL, вам также может понадобиться использовать подготовленные операторы с mysqli или PDO .Это поможет вашему коду быть чистым и безопасным.

0 голосов
/ 03 августа 2011

Я предполагаю, что ваши кнопки удаления - это простые ссылки.Ваши ссылки должны содержать всю информацию, чтобы удалить сообщение.Одним из способов было бы передать идентификатор записи в виде переменной GET (например, link = "myurl.com/posts/delete?id = #").

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

$user_id = $_SESSION['user_id'];
$post_id = (int) $_GET['id'];
if(canDelete($user_id, $post_id))
{
    // assuming post_id is unique for every post
    $sql = sprintf("DELETE FROM group_posts WHERE id = %d", $post_id);
    mysql_query($sql);
}

Конечно, вам придется реализовать canDelete($user_id) самостоятельно.

Кстати, "DELETE FROM group_posts WHERE $current_user = $id" всегда удаляет каждую запись в вашей таблице.Сначала вы сравниваете, если $current_user равно $id, и если они действительно совпадают, ваш запрос будет выглядеть примерно так: WHERE 1 = 1.Я думаю, что вы имеете в виду "DELETE FROM group_posts WHERE user_id = '$id'"

РЕДАКТИРОВАТЬ : Кажется, вы хотите использовать ajax для удаления ваших сообщений.Я рекомендую использовать jQuery или любую другую надлежащую инфраструктуру javascript, поскольку это экономит ваше время.Вот ссылка из документации jQuery, описывающая , как сделать ajax-вызов на сервер и аналогичный вопрос , чтобы помочь вам лучше понять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...