Как установить переменную сеанса при нажатии ссылки
У меня есть следующая проблема... Я хочу установить переменную сеанса при нажатии на обычную ссылку, например:
<a href="home" name="home">home</a>
Мои исследования, похоже, указывают на то, что PHP не может догнать событие click таким образом, что он установит переменную сеанса.
Я считаю, что это возможно с Ajax, но как? И как будет выглядеть моя ссылка?
Установка переменной сеанса должна выглядеть так:
$_SESSION['link'] = home;
Итак, кратко: при нажатии на ссылку в HTML должна быть установлена переменная сессии.
КАК Я собираюсь это сделать?
PS: Я не совсем знаком с Ajax, но я догоню.
EDIT: ссылки будут ссылаться на одну и ту же страницу, также я хочу избежать URL-адресов, таких как "home.php? link = X".
Если это невозможно сделать иначе, слишком плохо. Но я надеюсь, что есть решение.
Важно: имя ссылки будет значением $_SESSION['link']
Ответы
Ответ 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 будет анализировать строку запроса и устанавливать переменную сеанса.