Я построил список ссылок на основе массива из запроса select.
Связывание со страницей, о которой идет речь, отлично работает, но я добавил ссылку для каждого, чтобы удалить эту страницу. Единственная проблема: мне интересно, как передать идентификатор страницы данной страницы в запрос, который удаляет (деактивирует) страницу.
Я строю свои ссылки на страницы следующим образом:
<?php foreach($result as $page): ?>
<div class="col-lg-3 col-sm-6 d-flex" style="padding-bottom: 20px;">
<div class="card text-center flex-fill">
<h2><?php echo $page["title"] ?></h2>
<p><?php echo $page["Name"]?></p>
<a target="_blank" href="showpage.php?pageid=<?php echo $page['id'] ?>">View Page</a>
<a href="">Edit Page</a>
<a href="">Delete Page</a> <!--this is where I need to pass $page['id'] and use it in the query below-->
</div>
</div>
<?php endforeach?>
Запрос на удаление/деактивацию:
$deletePage = "
UPDATE pages
set active = 0
where id = /*this is page ID from previous link*/
";
$performDelete = $mysqlConn->query($deletePage);
Какова наилучшая практика для меня передать pageID ссылки в этот запрос?
Вы переносите целевую страницу через URL-адрес на первой странице, поэтому она будет доступна на второй странице через $_GET
, поэтому стандартная структура будет:
$deletePage = "UPDATE pages set active=0 where id=$_GET['pageid']";
Однако обратите внимание, что вышеприведенное открыто для атак; для пользователя просто изменить значение в своей адресной строке и, таким образом, обновить неверную строку. Фактически, с небольшим количеством SQL-инъекций, даже пользователь может полностью удалить всю вашу базу данных с помощью вышеуказанного PHP/SQL.
Лучший способ избежать этого - это параметризованные запросы (я предполагаю, что MySQLi в следующем):
$stmt = $mysqlConn->prepare("UPDATE pages set active=0 where id=?");
$stmt->bind_param('i', $_GET['pageid']);
$stmt->execute();
Обратите внимание, что вы по-прежнему хотите убедиться, что пользователь, просматривающий страницу, имеет право сделать команду UPDATE
, скорее всего, проверив против их $_SESSION
.
?pageid
а не page_id
.
Передайте его по ссылке и перейдите на вторую страницу, используя $ _GET ['id']
<a href="deletepage.php/id?$page['id']">Delete Page</a>