Установите переменную сеанса на <a> клик

0

Я пытаюсь сделать ссылку <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-код, это было бы очень полезно, так как я тоже хочу использовать такой метод. Я, вероятно, сделаю отдельную тему, прошу об этом.

  • 0
    Я немного запутался в том, что вы спрашиваете, но я думаю, что переменные сессии, вероятно, облегчили бы это. Вы можете просто отредактировать строку URL, которую вы используете в заголовке
  • 0
    Разве вы не можете просто установить печенье, чтобы сделать это?
Показать ещё 12 комментариев
Теги:

2 ответа

0

Вы можете использовать $ _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";
  • 0
    Проблема здесь в том, что я нажимаю на ссылку, которая ведет меня на страницу, где выполняется этот код. У меня нет способа фактически вставить данные в сессию.
  • 0
    Вы можете добавить любые данные в $ _SESSION, или, если у вас нет необходимости создавать SESSION, вы можете зарегистрировать $ _SESSION после того, как вы это сделали.
Показать ещё 1 комментарий
-2

Если ваша цель - перенаправить на текущую страницу, но удалить строку запроса, вы можете перенаправить на header("Location:?"); что по сути является именно этим. (Технически вы перенаправляетесь на новую строку запроса без значения, отличного от строки запроса, но php просто покажет пустой массив для $_GET который по существу тот же)

Я хотел бы упомянуть дополнительные параметры, такие как переменные из $_SERVER, но у многих из них есть различные проблемы безопасности или другие связанные с ними проблемы. Я только упоминаю об этом, потому что я не предлагаю использовать какие-либо, если это необходимо. Кроме того, это действительно нелегко, чем выше.

  • 1
    Заголовок Location должен быть полным URL. Хотя относительные пути работают в большинстве браузеров, они не соответствуют спецификации.
  • 0
    @Brad Хотя он не соответствует спецификациям, он работает во всех основных браузерах и имеет навсегда (что означает довольно хорошую поддержку для старых браузеров). Даже страница MDN о перенаправлениях показывает примеры относительных URL-адресов и ничего не упоминает о «полном URL-адресе».
Показать ещё 2 комментария

Ещё вопросы

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