У меня есть следующая проблема … Я хочу установить переменную сеанса при нажатии на обычную ссылку, например:
<a href="home" name="home">home</a>
Мои исследования, похоже, указывают на то, что PHP не может догнать событие click таким образом, что он установит переменную сеанса.
Я считаю, что это возможно с Ajax, но как? И как будет выглядеть моя ссылка?
Установка переменной сеанса должна выглядеть так:
$_SESSION['link'] = home;
Короче говоря: при нажатии на ссылку в HTML должна быть установлена переменная сеанса.
КАК Я собираюсь это сделать?
PS: Я не совсем знаком с Ajax, но я догоню.
EDIT: ссылки будут ссылаться на ту же страницу, также я хочу избежать URL-адресов, таких как «home.php? Link = X».
Если это невозможно сделать иначе, слишком плохо. Но я надеюсь, что есть решение.
Важно: имя ссылки будет значением $_SESSION['link']
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'])
Это сделает страницу не запоминающейся.
UPDATE: почти так же, как @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. «Подтвердите для большей безопасности. Возможно, я помогу вам с лучшим сценарием.
У меня была та же проблема – я хотел передать параметр на другую страницу, нажав гиперссылку и получив значение, чтобы перейти на следующую страницу (без использования GET, потому что параметр хранится в URL-адресе).
тем, кто не понимает, почему вы хотите сделать это, ответ – вы не хотите, чтобы пользователь видел важную информацию, или вы не хотите, чтобы кто-то редактировал GET.
после очистки Интернета казалось, что невозможно сделать нормальную гиперссылку, используя метод POST.
А потом у меня был момент эврики !!!! почему бы просто не использовать CSS, чтобы кнопка отправки выглядела как обычная гиперссылка ??? … и поставьте значение, которое я хочу передать в скрытом поле
Я попробовал, и он работает. вы можете увидеть exapple здесь 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; }
В HTML:
<a href="index.php?link=home" name="home">home</a>
Затем в PHP:
if(isset($_GET['link'])){$_SESSION['link'] = $_GET['link'];}
Ваша ссылка на другую веб-страницу? Если да, возможно, вы могли бы поместить переменную в строку запроса и установить переменную сеанса при загрузке страницы, связанной с ней.
Таким образом, ссылка выглядит так:
<a href="home.php?variable=value" name="home">home</a>
И страница homge будет анализировать строку запроса и устанавливать переменную сеанса.