
ご覧いただきありがとうございました。
初心者です。今まで、form action=" " method="post"によるページ転移してます。
仮に、今、begin.php, a.php, b.php, c.php, end.phpの5つのページがあって、begin.phpから初めて、a.php, b.php, c.phpランダムの順番で転移したあと、最後end.phpに辿り着くのがやりたいことです。
上記を実現する方法がありますか?php, js等と併用するのは無論大丈夫です。
どうぞご指導のほどよろしくお願いします!
No.6
- 回答日時:
>PATH_INFOでやるのなら、具体的にどうやれば良いのですか?
これが一番単純で分かりやすい方法でページ数が増減しても関係ない方法です。私はPerlですので、PHPでも同じ方法で出来ます。
1) hoge というPHPファイルを作成します。拡張子はつけないほうがスマートでしょう。
2) それをサイトの特定のディレクトリに置きます。
.htaccessにて
hogeファイルをPHPとして動作するよう指定する。
index.php をDIRECTORY INDEXに指定する。
これで、hoge/index.htmlまたは、ファイル名指定なしでhogeを要求されると、hogeが実行されて表示される。URL欄は、****/hoge/ または、**/hoge/indexhtmlになる。
4) サブページを隠しフォルダーに入れる。
ここから・・
3) hogeの内容、フローチャート□(処理)、<>判断、○端子
□ 環境変数 PATH_INFOがあれば記憶しておく
□ 環境変数 HTTP_COOKIEを解釈しておく(例 b>d>a>c> )
□ サブフォルダーを開いて、中にあるファイルの一覧を用意する。
<PATH_INFOの値>
├ ○ /a.php、b.php、c.php・・などの場合(例)b.php
│ HTTP_COOKIE が "b>d>a>c>だったら、次はa.php
| リンク文字列を $LINK = '<a href="./a.php">Aに</a>'などにする。
| 開くファイル名を $FILE = b.phpとする。
└-○ それ以外
サブフォルダーのファイル名をランダムに並べる
cookieを作る。
リンク文字を$LINK = '<a href="./b.php">BAに</a>'などにする。
開くファイル名を $FILE = b.phpとする。
□ $Fileをインクルードする。その時にリンク部分は書き換える。
COOKIEの有効期間は、セッション間で良いでしょう。期間を設けても良いかも。
ブラウザのURL欄とページ内リンクには、上記配列(b>d>a>c)の場合、普通に
****hoge/ ないし****hoge/index.php
<a href="b.php">Bへ</a>
↓
****hoge/b.php
<a href="d.php">Dへ</a>
↓
****hoge/d.php
<a href="a.php">Aへ</a>
↓
****hoge/a.php
<a href="c.php">Cへ</a>
となります。
PATH_INFOは動的なサイトの場合、とてもよく利用される手法です。大規模なサイトはほとんどすべてPATH_INFOと考えてよいです。
No.4
- 回答日時:
全然違う質問ということでよろしいですね?
>今までのやり方で$_SESSION['a'] = $_POST['c']となってしまし
フロー上そうはならないでしょう?
ポストで飛んできたデータを継承するだけであれば
if(isset($_POST['a'])) $_SESSION['a']= $_POST['a'];
if(isset($_POST['b'])) $_SESSION['b']= $_POST['b'];
if(isset($_POST['c'])) $_SESSION['c']= $_POST['c'];
のようにしておけばいいのでは?
もしくは前回例示したvisitedのように、追記していくような方法でもよいかと
この回答への補足
ご回答ありがとうございます!
この方法知りませんでした、お陰で一応問題が解決できそうです。
しかし、毎度毎度すいませんが、もしa,b,cだけではなく、結構数の多い場合は、どうすればよろしいですか?全部そのように書くのは確かに問題ないですが、なんだか効率的によくない感じです。
No.3
- 回答日時:
>もっと具体に
では、こんな感じで
formだとちょっとわかりづらいのでアンカーしときます。
formでやるならactionに指定してください
//begin.php
<?PHP
session_start();
unset($_SESSION["visited"]); //セッションvisitedの初期化
$list=array("a.php","b.php","c.php"); //listの初期値
$_SESSION["list"]=$list; //listをとりあえずセッションに保存
$key=mt_rand(0,count($list)-1); //ランダムにファイルを選んで
$href=$list[$key]; //飛び先に指定
?>
<a href="<?PHP print $href;?>">next</a>
//a.php、b.php、c.php・・・とりあえず同じ内容で
<?PHP
session_start();
$list=$_SESSION["list"]; //listを受け取る
$fname=basename($_SERVER["SCRIPT_NAME"]); //自分自身の名前を受け取る
$visited=isset($_SESSION["visited"])?$_SESSION["visited"]:array(); //visitedが空の場合の初期設定
$key=array_search($fname,$visited); //visitedの中に、自分自身がいるかチェックして
if($key!==0 and empty($key)) array_push($visited,$fname); //いなければvisitに追加
$list=array_merge(array_diff($list,$visited)); //listからvisitを除外して
$key=mt_rand(0,count($list)-1); //残ったlistからランダムに選ぶ
$href=count($list)>0? $list[$key]:"end.php"; //listが空ならendにいく
$_SESSION["visited"]=$visited; //visitedは上書きしておく
?>
<a href="<?PHP print $href;?>">next</a><br>
<?PHP
print implode($visited,"->"); //念のため経路表示しときます
?>
この回答への補足
詳しくご指導頂きありがとうございます!
恐れ入りますが、また補足問題があります。
今まで、SESSIONでデータを保存してきました。
a.phpでpostしたあと、b.phpで$_SESSION['a'] = $_POST['a']のやり方で。
しかし、ランダムの順番となったら、例えばcからbに行く時、今までのやり方で$_SESSION['a'] = $_POST['c']となってしまします。この問題を解決する方法はありますか?
No.1
- 回答日時:
単純にPATH_INFOで・・cookieと併用すると効率的かも。
hogeという実行ファイルがあるとする。
PATH_INFO index.htmlまたは、ない時に乱数を作り、順番を作成してcookieを発行する。最初のページ用のリンクを合わせて作る。<a href="./a.html">次ぎ</a>
hoge/a.htmlでcookieを読み、次のリンクを作る。
10行もあればよいかと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
リンク先のURLを隠して画像を表...
-
Excelで、社外秘(閲覧のみ)と...
-
HTMLからフォルダを開きたい
-
URLに「.html」の拡張子がなく...
-
直リンク禁止
-
iPadの標準ブラウザでローカルH...
-
Dreamweaverでページ全体が文字...
-
社内で利用するWebサイトを立ち...
-
どのページもすべて同じURLなの...
-
エクセルのファイルのダウンロ...
-
googleサーチコンソールで、重...
-
フレームの右側を折り返さない...
-
「MicrosoftVisualBasic6.0 行...
-
VBSでhtmlのタイトルを取得したい
-
拡張子htmlの文書を.上書き保存...
-
htmlファイルがソースで表示される
-
表示時に1回だけリロードさせ...
-
ZIPの拡張子のついたURLがダウ...
-
htmlファイルの中にhtmlファイ...
-
画像ボタンにフォーカスさせない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
URLの.aspとは??
-
リンク先のURLを隠して画像を表...
-
.htaccess/特定のファイルだけ...
-
aspxとうい拡張子がASP.netだと...
-
RSS情報を普通のホームページへ...
-
フォームボタン
-
webページをランダムで遷移する...
-
アクセス制限(1日1回)
-
HTMLからフォルダを開きたい
-
Excelで、社外秘(閲覧のみ)と...
-
iPadの標準ブラウザでローカルH...
-
社内で利用するWebサイトを立ち...
-
見れる方・・
-
Webサイトから、txtファイルを...
-
HTMLページが勝手にダウンロー...
-
【HTML】1クリックで複数ファイ...
-
lang 英語と日本語など混ざる時は
-
テキストエディタvscodeでプロ...
-
HTMLで別PCのフォルダを開く
-
、URL化させるにはどうしたらい...
おすすめ情報