Выполняет обновление MySQL на основе переданной переменной из ссылки?

0

Я построил список ссылок на основе массива из запроса 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 ссылки в этот запрос?

  • 0
    «Что для меня является наилучшей практикой, чтобы передать pageID ссылки в этот запрос?» - A: используйте подготовленное утверждение, если вы об этом. Вопрос немного неясен для меня, хотя относительно того, что вы хотите сделать здесь. Вы хотите сохранить что-нибудь, но использовать это позже, если это необходимо? Если это так, то установите логический флаг в другом столбце, связанном с ним, возможно, даже придется использовать реляционную таблицу. Если я не ответил на то, что вы спрашиваете, вам, возможно, придется уточнить.
  • 0
    Определенно, поэтому я не хочу удалять запись, поэтому я просто устанавливаю активный столбец равным 0. Все, что я пытаюсь сделать, это позволить пользователю подтвердить удаление, выполнить удаление / деактивацию, а затем обновить страница с небольшим тостом / предупреждением, что она была удалена
Показать ещё 5 комментариев
Теги:

2 ответа

3
Лучший ответ

Вы переносите целевую страницу через 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.

  • 0
    Они используют ?pageid а не page_id .
  • 0
    Спасибо, это имеет смысл, но сработает ли это, если я просто хочу обновить страницу? Я собираюсь спросить пользователя, уверены ли они, что хотят удалить, и если это так, выполните удаление и обновите текущую страницу с предупреждением, что она была удалена.
Показать ещё 2 комментария
-1

Передайте его по ссылке и перейдите на вторую страницу, используя $ _GET ['id']

<a href="deletepage.php/id?$page['id']">Delete Page</a>
  • 1
    Это не совсем ответ, но я не передаю его по ссылке. Ссылка выше идет на «Просмотр страницы». Если щелкнуть ссылку Удалить страницу, я хочу передать идентификатор, выполнить удаление и обновить страницу
  • 1
    Хорошо, но не создавайте представление, просто создайте имя контроллера deletepage.php и напишите последнюю строку в заголовке этой страницы ("location: firtspage.php");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню