Есть следующий код, задача которого удалить данные из бд. Сейчас все данные удаляются при переходе по ссылке localhost/?id=666. Понимаю что это говнокод, и не понимаю как можно сделать правильно. Направьте пожалуйста)
public $id;
public function __construct() {
$this->id = $_GET['id'];
}
public function delete() {
$dbh = Db::getConnect();
$sth = $dbh->prepare("DELETE FROM posts WHERE id = '$this->id'");
$sth->execute();
}
И html ссылка:
<a href="<?php echo '?id='.$post['id'] ?>" name="id">del</a>
В целом другого особо не дано.
Есть два варианта:
1) Это просто по ссылке
2) Через форму, в которой можно еще передать csrf токен.
(Добавлено: через форму более правильный вариант чем через ссылку; методы DELETE или POST, не GET)
Главное, чтобы данный функционал был закрыт от пользователей, которым он не должен быть доступен. Если, например всего один админ на сайте, и других пользователей не предполагается - то достаточно обычной авторизации.
Если есть несколько ролей - то разделение по ролям.
В общем основной посыл - так удалять это нормально, главное защитить от внешнего посягательства.
Единственная серьезная логическая ошибка - вы делаете подготовленный запрос, но пихаете в него сырые данные. Это бессмыслица. Надо подготавливать запрос с плейсхолдером, а потом сетить параметры.
Примерно как то так:
$dbh->prepare("DELETE FROM posts WHERE id = ?");
$dbh->bind_param("d", $this->id);
https://www.php.net/manual/ru/mysqli-stmt.prepare.php
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Необходимо на получить время полуночи текущей даты (например, 1812
Мне нужно чтобы удалялись изображения из папки uploadНапример если у пользователя в бд сохранено имя изображения (Esfejih
В woocommerce на странице корзины используются эти шорткоды: