私はいくつかのPHPコードで少しのジレンマを持っています。私が取り組んでいるサイトには「前のページに戻る」オプションがあり、ブラウザの戻るボタンのように動作するようにしたいと思います。現状では、$ _SESSION変数を使用して、現在のページと前のページを追跡しています。私は変数を "リフレッシュプルーフ"して、前と現在のページが同じになることはありません。PHPを実行中:リンクがクリックされたことを検出
現在の実装では、1ページに移動して「register.php」と言ってから「forgot.php」に移動すると、前のページは「register.php」になります。良い。しかし、「前のページに戻る」をクリックすると、前のページが "forgot.php"となって "register.php"に戻り、2ページ分のループが戻ってきます。
変数を追跡するのに役立つSplQueueを実装しようとしました。最後のページをリンクとして表示するために、リンクでdequeue()関数を使用してみました。この問題は、デキューが実際に呼び出されたときに要素が消えるため、リフレッシュするとその要素はキューになくなり、リンクが変更されます。私はデキューを呼び出す関数を "リフレッシュプルーフ"することでこれを修正しました。これは、私が望むように動作します。この問題は現在、フォワードリンクされています。自分自身を別のページに誘導すると、古いリンクが情報をデキューしないようにします。
例: 私はregister.phpにあり、前のページは "forgot.php"です。 「前のページに戻る」リンクは正確に "forgot.php"が指示するページであることを示していますが、今はキューに入っていないので、別のページに行くと "profile.php"と言って戻るボタンを "register.php"に戻すと、もう一度 "前のページに戻る"を押すと、あなたが行くページとして "forgot.php"が表示されなくなります。
私の質問は、リンクがクリックされている間は実際にその関数を呼び出さずにPHP関数を呼び出すことができるということです。 JavaScript関数へのリンクポイントを試してみましたが、JS関数は自分のキューが空であることを教えていますが、これはまったく間違っています。
補足として、ページはHTMLとPHPが混在しています。 HTMLが私に供給されています。フィールドに機能を追加したり、データベースからデータを取得するためにPHPを追加しています。私はHTMLリンクをエコーするためにPHPを使用しても問題はありません。もしそれがHTMLで小さな<?php someCode(); ?>
で実行できるのであれば、それも問題ありません。
私はあなたの時間をお手伝いしてくれてありがとう。
EDIT:
だから試してみて、ビットを明確にする、私は現在、ユーザーがすでに彼らはそれらを訪問するようになっていたページを追跡している構造を有しています。それはページのミニ履歴を作成します。
<a href="somelink">Back To Previous Page</a>
そして、私はそれはあなたの履歴に応じて変化しますので、「somelink」は何であるかを知らない:私の問題は、私は、このようなコードを持っているということです。 、私は上記のような何かをした場合、関数はページが表示されているように実行するので、それは難しい再びarray_pop()
またはdequeue()
を使用しますが、することができますされ
<a href="<?php someFunction() ?>">Back To Previous Page</a>
:私は、私のような何かを行うことができます知っていますPHPは、ページが表示されるとすぐに実行されます。私が探しているのは、「前のページに戻る」リンクがクリックされている場合にのみ、リンクを表示して履歴から削除する方法です。今のところ、私は$_SESSION
に配列を格納しています。これは配列であるため、配列の最後の要素をリンクとして表示できるので、実際の問題は要素を取り除く方法を見つけることですリンクがクリックされたときの配列
EDIT 2:
私は、インターネットを精練し、PHPファイルを呼び出すためにAJAXとJavaScriptを使用して時に決定されました。これは、私が変数からarray_pop
を制御できるように、私が持っているリンクをonClickしてくれます。
私のAJAXは実際に何か悲しいことをしているとは思わないので、私が使っているコードは以下の通りです。
<script src="js/jquery-1.4.2.min.js" type="text/javascript">
function dequeue()
{
$.ajax({
type: "POST",
url: "common.php",
data: {action: "rem"},
success: function(output) {
alert(output);
}
});
}
</script>
とPHPは、私の知る限り、これは私が「戻るをクリックしていない限り、私はセッション変数に歴史へのリンクを追加することができます
switch($_POST['action'])
{
case "rem":
array_pop($_SESSION['links']);
break;
default:
if(isset($_SESSION['current']) && $_SESSION['current'] != $_SERVER['REQUEST_URI'])
{
array_push($_SESSION['links'], $_SESSION['current']);
}
$_SESSION['current'] = $_SERVER['REQUEST_URI'];
break;
}
ですそのリンクには「rem」コードが付いているので、「前のページ」のリンクをクリックします。私はまた、$_SESSION['current'] = $_SERVER['REQUEST_URI'];
の疑いがあり、どこに置くべきかを知っています。
私は問題をかなり得ていませんが、タイトルは面白いです。 PHPは、リンクがクリックされたときにのみ実行されます(または、あなたが管理するリクエストを開始するJSコードがいくつかあります)。 – NullUserException
@ NullUserExceptionええ、PHPはリンクがクリックされたときに実行されますが、特定の関数を実行して別のページにリダイレクトする方法が必要でした。リンクがクリックされると、そのページに行き、すべてのリンクで使用される特定の機能を実行します。しかし、以下の解決策は、機能が実行される必要性を取り除きます – Serneum
私は嘘をつきました。リンクがクリックされたかどうかを検出する別の方法がない限り、関数は依然として必要なように見えます。 – Serneum