私はウェブサイトを作成していますが、機能の 1 つは、ユーザーがウェブサイトにアクセスしてからアクセスしたページをユーザーに表示する側にあり、それらの名前のいずれかをクリックして、そのページに戻ることができます。私はそれを機能させていますが、特定のページに戻ると、もう一度クリックすると、繰り返しページが書き出されます。たとえば、main01 から main10 までの 10 ページがあるとします。ユーザーはページ main05 に到達し、main03 に戻りたいと判断し、履歴リストで main03 をクリックしてそこに問題なく移動し、続行したいと判断して「続行」をクリックすると、ページ main04 に移動します。大丈夫。しかし、履歴リストは次のようになります。
main01
main02
main03
main04
main05
main03
main04
だから私がやろうとしたことは、訪問したページがすでに配列に追加されているかどうかを確認するメソッドを作成することです。そうでない場合は、正しいリンクをエコーします。しかし、今試してみると、最後にアクセスしたページが表示され、ページを変更するたびに上書きされます。これが私のコードです:
if($_POST['visited']){
$_SESSION['visitedpages'][$_SESSION['i']] = $_POST['visited'];
$_SESSION['i']++;
echo "<pre>";
print_r($_SESSION['visitedpages']);
echo "</pre>";
}
if($_SESSION['visitedpages']){
$a_length = count($_SESSION['visitedpages']);
for($x = 0; $x < $a_length; $x++){
$name = $_SESSION['visitedpages'][$x];
$exists = checkifexists($name, $a_length);
if(!$exists){
echo "<a href=\"$name.php\">$name</a><br />";
}
else{
echo "";
}
}
}
function checkifexists($name, $a_length){
for($z = 0; $z < $a_length;$z++){
$existingname = $_SESSION['visitedpages'][$z-1];
if($name === $existingname) {
return true;
}
}
return false;
}
どうすればこれを正しく機能させることができますか? どんな助けでも大歓迎です。
編集:実際には、リンクとして書き込まれるときではなく、配列に書き込まれるときに存在するかどうかを確認することで、機能しているように見えます。ただし、リンクをクリックしてページにアクセスするたびに (たとえば、main05 から main03)、main03 に移動しますが、履歴リストは表示されません。これに関する入力はありますか?
EDIT2:あなたの提案に従ってin_arrayを使用して変更し、適切に表示されますが、まだ重複がリストされています。これが私が使用しているコードです:
if(in_array($_POSTED['visited'],$_SESSION['visitedpages'])){
echo "";
}
else{
$_SESSION['visitedpages'][$_SESSION['i']] = $_POST['visited'];
$_SESSION['i']++;
echo "<pre>";
print_r($_SESSION['visitedpages']);
echo "</pre>";
$arrayinit = true;
}
以前のページにアクセスするたびに、配列は次のようになります。
Array
(
[0] => main01
[1] => main02
[2] => main03
[3] => main04
[4] => main03
)