Я пытаюсь сделать ссылку <a>
которая запускает PHP-код на следующей странице. Я попытался использовать переменные $ _GET для этого, но я хочу также удалить эту переменную после этого, так как я автоматически ссылаюсь на перенаправленную страницу с header()
. Кажется, что нет никаких возможных способов сделать это, не перенаправляя пользователя на одну страницу в одиночку, но дело в том, что ожидается, что они будут перенаправлены на страницу, на которой они были ранее. Сохранение переменных $ _GET приводит к бесконечному циклу перенаправления.
В общем, я хочу избежать использования $ _GET, поскольку его можно злоупотреблять в контексте, в котором я его использую. Однако любые другие обходные решения были бы весьма признательны. В основном я просто пытаюсь использовать ссылку <a>
для удаления записи из базы данных MySQL.
Здесь PHP, который обрабатывает переменную.
if (isset($_GET['rm'])) # 'rm' contains the uuid of the entry to be deleted.
{
$uuid = $_GET['rm'];
unset($_GET['rm']); # Didn't expect this to work, of course it didn't remove the variable from the URL.
$query = "DELETE FROM posts WHERE uuid = '$uuid'";
$result = $mysqli->query($query);
header("Location: " . $_SERVER['REQUEST_URI']);
exit();
}
EDIT: Я понимаю теперь, что я дико усложнил мое объяснение здесь. Основная цель заключалась в том, чтобы сделать щелчок <a>
link триггерного PHP-кода с переменной, специфичной для ссылки. (Каждая ссылка является кнопкой удаления в сообщении, и каждый пост имеет UUID)
Если есть способ альтернативно запускать javascript-код, это было бы очень полезно, так как я тоже хочу использовать такой метод. Я, вероятно, сделаю отдельную тему, прошу об этом.
Вы можете использовать $ _SESSION для удаления переменной после, например
if (isset($_SESSION['rm'])) # 'rm' contains the uuid of the entry to be deleted.
{
$uuid = $_SESSION['rm'];
unset($_SESSION['rm']); # Didn't expect this to work, of course it didn't remove the variable from the URL.
$query = "DELETE FROM posts WHERE uuid = '$uuid'";
$result = $mysqli->query($query);
header("Location: " . $_SERVER['REQUEST_URI']);
exit();
}
учтите, что вы зарегистрировали значение следующей формы.
$_SESSION['rm'] = "My value";
Если ваша цель - перенаправить на текущую страницу, но удалить строку запроса, вы можете перенаправить на header("Location:?");
что по сути является именно этим. (Технически вы перенаправляетесь на новую строку запроса без значения, отличного от строки запроса, но php просто покажет пустой массив для $_GET
который по существу тот же)
Я хотел бы упомянуть дополнительные параметры, такие как переменные из $_SERVER
, но у многих из них есть различные проблемы безопасности или другие связанные с ними проблемы. Я только упоминаю об этом, потому что я не предлагаю использовать какие-либо, если это необходимо. Кроме того, это действительно нелегко, чем выше.
Location
должен быть полным URL. Хотя относительные пути работают в большинстве браузеров, они не соответствуют спецификации.