
ご覧いただきありがとうございました。
初心者です。今まで、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で質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP WordpressのPHPを安全に編集する方法 1 2022/08/04 01:43
- PHP PHP ページング データベース 1 2022/06/16 10:30
- その他(プログラミング・Web制作) .htaccessファイルの修正がこれで問題ないかどうか 1 2022/04/21 08:42
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- MySQL MySQL,JavaScript,PHPコードの結果を表示する方法を教えてください。 1 2023/02/13 17:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
URLの.aspとは??
-
アクセス制限(1日1回)
-
HTMLからフォルダを開きたい
-
Excelで、社外秘(閲覧のみ)と...
-
Webサイトから、txtファイルを...
-
iPadの標準ブラウザでローカルH...
-
一つのリンクに複数のURLを指定
-
borderでa:hover下線表示させる...
-
ソースの追加行数と変更行数
-
lang 英語と日本語など混ざる時は
-
見れる方・・
-
httpdで接続が拒否される
-
イラストレーターのaiファイル...
-
テキストエディタ grepの機能...
-
1つ下の階層のフォルダに相対...
-
テキストエディタvscodeでプロ...
-
スクロールできない
-
リンク先からリンク元の、同じ...
-
メールに添付されたhtmlファイ...
-
HTMLで画像を表示させたいです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
URLの.aspとは??
-
リンク先のURLを隠して画像を表...
-
初めてのSSIで外部から・・・。
-
webページをランダムで遷移する...
-
まさに、このOKWebの過去の質問...
-
http://someserver/file.txt?va...
-
ホームページのコメント欄の作...
-
.html?date=2012-02-05のような
-
SSIを使わずにhtmlのテキスト部...
-
軽く制限のあるホームページの作成
-
HTMLの特別な記述方法について
-
処理終了後にフレームの更新
-
xx.cgi?/***のリダイレクトを行...
-
アクセス制限(1日1回)
-
PHPとCSSでwebsaitを作っている...
-
更新しやすいホームページ
-
HTMLからPHP呼び出し【ギブアッ...
-
html css phpが実行可能なツー...
-
なぜ拡張子が「Default.aspx」...
-
RSS情報を普通のホームページへ...
おすすめ情報