2011-01-31 9 views
10

Mam następujący problem ... Chcę ustawić zmienną sesji po kliknięciu na normalnym łącza, takich jak:Jak ustawić zmienną sesji po kliknięciu <a> odnośnik

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

Moje badania wydaje się wskazywać na to, że PHP nie może dogonić zdarzenia click w taki sposób, że ustawiłoby zmienną sesji.

Uważam, że jest to możliwe z Ajaxem, ale jak? Jak wyglądałby mój link?
Ustawianie zmiennej sesji powinna wyglądać następująco:

$_SESSION['link'] = home; 

Tak w skrócie: po kliknięciu na link w HTML, zmienna sesja musi być ustawiony.
JAK mam to zrobić?

PS: Nie jestem zaznajomiony z Ajaxem, ale nadrobię zaległości.

EDYCJA: Linki będą się odnosić do tej samej strony, a także chcę uniknąć adresów URL takich jak "home.php? Link = X".
Jeśli nie można tego zrobić w inny sposób, szkoda. Ale mam nadzieję, że istnieje rozwiązanie.
Ważne: nazwa linku będzie wartość $_SESSION['link']

+0

Więc jestem zdezorientowany, co dzieje się po kliknięciu łącza ? Czy generuje sesję, a następnie zwraca identyfikator sesji i używa jej w łączu lub po prostu wykonuje połączenie przed uruchomieniem łącza? Wygląda na to, że brutalnie wymuszasz przechwycenie limitu czasu sesji i przekierowanie do zalogowania się? –

+0

Oto scenariusz: Jestem na home.php, kliknę link do home.php. Chcę uchwycić zdarzenie click i zmienić nazwę mojego linku na wartość zmiennej session. Ale ponieważ link jest w HTML, to jest po stronie klienta, a nie po stronie serwera. – Mixxiphoid

+0

HTML spowoduje przeładowanie strony, prawda? Więc możesz go złapać w PHP w taki sposób, w jaki opisuje go @Bandon. – SuperSpy

Odpowiedz

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

może to jest to, czego szukasz? Zapamiętuje stary link/stronę, z której pochodzisz (na twojej stronie internetowej).

Umieść ten element na górze każdej strony.

Jeśli chcesz, aby to odświeżyć dowód "można dodać kolejny czek:

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

To spowoduje, że strona nie pamiętam siebie.

UPDATE: Prawie taka sama jak @Brandon chociaż ... Wystarczy użyć zmiennej php, wiem, że to wygląda jak zagrożenie bezpieczeństwa, ale po zakończeniu poprawna nie jest.

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

PHP:

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

Dlaczego nawet przechowywać dostać się do sesji? Po prostu go używaj. Poinformuj mnie, dlaczego nie chcesz używać GET. «Zatwierdź dla większego bezpieczeństwa. Mogę ci pomóc z lepszym skryptem.

+0

Problem polega na tym, że linki będą odnosić się do strony, na której się znajdują. Więc $ _SESSION ['current'] zawsze będzie home.php. Potrzebuję nazwy linku, aby zmienić moją zmienną sesji. Dzięki za kod :). – Mixxiphoid

+0

Potrzebuję zawartości do wywołania z bazy danych w zależności od zmiennej, a wraz z nią również nazwę łącza. Ze względu na odświeżanie strony, po kliknięciu łącza zmienna musi być zmienną $ _SESSION. – Mixxiphoid

+0

Chcę uniknąć GET, ponieważ nie chcę zepsuć mojego adresu URL i ze względu na niektóre problemy z bezpieczeństwem. Może mogę usunąć GET po użyciu, a następnie odświeżyć stronę ponownie ... Również myślałem, że to będzie możliwe z Ajaxem, ale nie słyszałem tego w odpowiedziach do tej pory ... – Mixxiphoid

2

Czy Twój link do innej strony internetowej? Jeśli tak, być może możesz umieścić zmienną w ciągu zapytania i ustawić zmienną sesji, gdy strona, do której następuje połączenie jest załadowana.

Więc link wygląda następująco:

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

a strona homge będzie analizować ciąg kwerendy i ustawienie zmiennej sesji.

+0

Dziękuję za odpowiedź, ale odnosi się ona do tej samej strony. Sprawię, że moje stanowisko stanie się bardziej jasne. – Mixxiphoid

4

W HTML:

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

Następnie w PHP:

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

Nie będę tego głosował, ale powiem, że go nie polecam. Mimo że działa w nieszkodliwym kodzie, wszystko, co dotyka bazy danych, musi być odpowiednio zabezpieczone, ponieważ klient może wysłać to, co chce, za pomocą tej metody. – Jason

10

Miałem ten sam problem - chciałem przekazać parametr do innej strony klikając hiperłącze i uzyskać wartość, aby przejść do następnej strony (bez użycia GET, ponieważ parametr jest przechowywany w adresie URL).

dla tych, którzy nie rozumieją, dlaczego chcesz to zrobić, odpowiedź brzmi: nie chcesz, aby użytkownik widział poufne informacje lub nie chcesz, aby ktoś edytował GET.

Po przetrząśnięciu Internetu wydawało się, że nie można utworzyć zwykłego hiperłącza przy użyciu metody POST.

A potem miałem moment eureka !!!! dlaczego po prostu nie używać CSS, aby przycisk wysyłania wyglądał jak normalne hiperłącze ??? ... i wpisz wartość, którą chcę przekazać w ukrytym polu

Próbowałem i działa. można zobaczyć exaple tutaj http://paulyouthed.com/test/css-button-that-looks-like-hyperlink.php

kod podstawowy dla postaci to:

<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> 

podstawowym 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; 
    } 
+2

Nie chcesz, aby jedną z tych deklaracji CSS było '# hiperlink-style-button: hover {...}'? –

+0

Ups, niepoprawnie skopiowałem swój CSS do wpisu. Dobrze zauważony –

Powiązane problemy