Подтвердить что ты не робот

Как установить переменную сеанса при нажатии ссылки

У меня есть следующая проблема... Я хочу установить переменную сеанса при нажатии на обычную ссылку, например:

<a href="home" name="home">home</a>

Мои исследования, похоже, указывают на то, что PHP не может догнать событие click таким образом, что он установит переменную сеанса.

Я считаю, что это возможно с Ajax, но как? И как будет выглядеть моя ссылка?
Установка переменной сеанса должна выглядеть так:

$_SESSION['link'] = home;

Итак, кратко: при нажатии на ссылку в HTML должна быть установлена ​​переменная сессии.
КАК Я собираюсь это сделать?

PS: Я не совсем знаком с Ajax, но я догоню.

EDIT: ссылки будут ссылаться на одну и ту же страницу, также я хочу избежать URL-адресов, таких как "home.php? link = X".
Если это невозможно сделать иначе, слишком плохо. Но я надеюсь, что есть решение.
Важно: имя ссылки будет значением $_SESSION['link']

4b9b3361

Ответ 1

    session_start();
    if(isset($_SESSION['current'])){
         $_SESSION['oldlink']=$_SESSION['current'];
    }else{
         $_SESSION['oldlink']='no previous page';
    }
    $_SESSION['current']=$_SERVER['PHP_SELF'];

Возможно, это то, что вы ищете? Он будет помнить старую ссылку/страницу, с которой вы пришли (на своем веб-сайте).

Поместите эту часть поверх каждой страницы.

Если вы хотите сделать это "refresh proof", вы можете добавить еще одну проверку:

   if(isset($_SESSION['current']) && $_SESSION['current']!=$_SERVER['PHP_SELF'])

Это приведет к тому, что страница не запомнит себя.

ОБНОВЛЕНИЕ: Почти то же, что и @Brandon, хотя... Просто используйте переменную php, я знаю, что это выглядит как риск для безопасности, но когда все сделано правильно, это не так.

 <a href="home.php?a=register">Register Now!</a>

PHP:

 if(isset($_GET['a']) /*you can validate the link here*/){
    $_SESSION['link']=$_GET['a'];
 }

Почему даже хранить GET в сеансе? Просто используйте его. Скажите, пожалуйста, почему вы не хотите использовать GET. "Подтвердите для большей безопасности. Я, может быть, могу помочь вам с лучшим script.

Ответ 2

У меня была та же проблема - я хотел передать параметр на другую страницу, нажав гиперссылку и получив значение, чтобы перейти на следующую страницу (без использования GET, потому что параметр хранится в URL-адресе).

тем, кто не понимает, почему вы хотите сделать это, ответ - вы не хотите, чтобы пользователь видел важную информацию, или вы не хотите, чтобы кто-то редактировал GET.

после очистки Интернета казалось, что невозможно сделать нормальную гиперссылку, используя метод POST.

А потом у меня был момент эврики!!!! почему бы просто не использовать CSS, чтобы кнопка отправки выглядела как обычная гиперссылка???... и поставьте значение, которое я хочу передать в скрытом поле

Я попробовал, и он работает. вы можете увидеть exaple здесь http://paulyouthed.com/test/css-button-that-looks-like-hyperlink.php

базовый код для формы:

    <form enctype="multipart/form-data" action="page-to-pass-to.php" method="post">
                        <input type="hidden" name="post-variable-name" value="value-you-want-pass"/>
                        <input type="submit" name="whatever" value="text-to-display" id="hyperlink-style-button"/>
                </form>

базовый css:

    #hyperlink-style-button{
      background:none;
      border:0;
      color:#666;
      text-decoration:underline;
    }

    #hyperlink-style-button:hover{
      background:none;
      border:0;
      color:#666;
      text-decoration:none;
      cursor:pointer;
      cursor:hand;
    }

Ответ 3

В HTML:

<a href="index.php?link=home" name="home">home</a>

Затем в PHP:

if(isset($_GET['link'])){$_SESSION['link'] = $_GET['link'];}

Ответ 4

Является ли ваша ссылка на другую веб-страницу? Если это так, возможно, вы можете поместить переменную в строку запроса и установить переменную сеанса при загрузке страницы, связанной с ней.

Итак, ссылка выглядит так:

<a href="home.php?variable=value" name="home">home</a>

И страница homge будет анализировать строку запроса и устанавливать переменную сеанса.