@IT-Programmer

Почему не работает?

Нужно чтобы пользователь мог удалять только свои посты.
Что-то не так с условиями проверки не могу понять что именно,
$_COOKIE['id'] - id пользователя;
$_COOKIE['status']==0 - Пользователь;
$_COOKIE['status']==2 - Модератор;
$_COOKIE['status']==1 - Администратор;
$Query = mysql_num_rows(mysql_query("SELECT * FROM posts WHERE PosterId=".$_COOKIE['id']));
  if($Query==0 && ($_COOKIE['status']==0 || $_COOKIE['status']==2)){
    print('error');
  }elseif($_COOKIE['status']==1 || $Query==1){
    mysql_query("DELETE FROM posts WHERE Id=".$_POST['DelId']);
  }
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 1
be_a_dancer
@be_a_dancer
Backend/Fullstack Developer
1) Хранить уровни доступа в куках - добровольно подставить свой сайт под взлом - храните их в базе данных и всегда сверяйте.
2) Используйте подготовленные запросы в PDO - данный код подвержен SQL инъекции.
3) Выкиньте первое условие - метод должен вернуть ошибку в любом случае, кроме ситуации, когда ID человека совпадает с ID автора поста.
4) Расширение mysql давно признано deprecated. Используйте PDO или mysqli.

$userId = $_COOKIE['id'];
$postId = $_POST['delId'];
$status = $_COOKIE['status'];

$query = mysql_query("SELECT * FROM posts WHERE post_id=" . $postId . " AND author_id=" . $userId);
$rowsCount = mysql_num_rows($query);

if (!$rowsCount == 0 || $status == 1) {
    $deleteQuery = mysql_query("DELETE FROM posts WHERE post_id=" . $postId);
} else {
    print ("error");
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы