web-dev-qa-db-ja.com

<a>リンクをクリックしたときにセッション変数を設定する方法

次のような問題があります...次のような通常のリンクをクリックしたときにセッション変数を設定したいです:

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

私の研究では、PHPはセッション変数を設定するような方法でクリックイベントに追いつくことは不可能であると指摘しているようです。

Ajaxで可能だと思いますが、どうやって?そして、私のリンクはどのように見えるでしょうか?
セッション変数の設定は次のようになります。

$_SESSION['link'] = home;

つまり、HTMLでリンクをクリックするとき、セッション変数を設定する必要があります。
どうすればいいですか?

PS:Ajaxについてはあまり詳しくありませんが、追いつきます。

編集:リンクは同じページを参照しますが、「home.php?link = X」のようなURLも避けたいです。
他の方法で実行できない場合は、残念です。しかし、解決策があることを願っています。
重要:リンクの名前は$_SESSION['link']の値になります

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

たぶんこれはあなたが探しているものですか? (あなたのウェブサイト内で)あなたがから来ている古いリンク/ページを覚えているでしょう。

その部分を各ページの一番上に置きます。

「最新の証拠」にする場合は、別のチェックを追加できます。

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

これにより、ページ自体が記憶されなくなります。

PDATE: @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を使用したくない理由を教えてください。 "セキュリティの強化を検証します。より良いスクリプトであなたを助けることができるかもしれません。

12
SuperSpy

私は同じ問題を抱えていました-ハイパーリンクをクリックして別のページにパラメーターを渡し、値を取得して次のページに移動したかった(パラメーターはURLに格納されているためGETを使用しません).

なぜあなたがこれをしたいのか理解していない人には、答えはユーザーに機密情報を見せたくない、または誰かがGETを編集したくないことです。

インターネットを精査した後、POSTメソッドを使用して通常のハイパーリンクを作成することはできなかったようです。

そして、私はエウレカの瞬間がありました!!!! CSSを使用して送信ボタンを通常のハイパーリンクのように見せてはどうですか? ...渡したい値を隠しフィールドに入れます

私はそれを試してみて、それは動作します。ここに例があります 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;
    }
11
as_bold_as_love

HTMLの場合:

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

次に、PHPで:

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

別のWebページへのリンクですか?その場合、おそらくクエリ文字列に変数を入れて、リンク先のページがロードされるときにセッション変数を設定できます。

したがって、リンクは次のようになります。

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

そして、homgeページはクエリ文字列を解析し、セッション変数を設定します。

2
Brandon