- 締切済み
PHPファイルのアンカーリンク
PHPファイルのURLにアンカーリンクをつけているのですが、ページは表示されますが、アンカーリンクの指定の場所へ飛びません。表示後、F5キーを押してもダメで、エンターキーを押すと飛びます。 仕様ですが、あるページ内に複数のテキストリンクがあり、そのテキストリンクをクリックすると、一度ログイン画面に移動します。 ID・パスワードを入力してログインボタンを押すと、元のページに戻ります。 この時にアンカーリンクでクリックしたテキストリンクの場所に表示位置を移動したいのですが、なぜか移動ができません。 念のため、PHPファイルではなく、htmlファイルで試してみたのですが、こちらは飛びました。 なぜPHPだとだめなのか調べてみたのですが原因がわかりません。 ちなみに元のページのURLは参照渡しです。 たぶん本来ならcookieやセッションで対応するのかと思うのですが、まだ知識や経験が足りずこのような方法をとっています。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- shimix
- ベストアンサー率54% (865/1590)
>上記のソースを試してみたのですが、ダメでした。 これでダメですか?同じソースですからサーバからのレスポンスは同じですよね。 お使いのブラウザは何でしょうか?こちらではIE11でもFirefox(31.0)でもOpera(23.0)でもChrome(36.0.1985.125 m)でも問題なく遷移します。
- shimix
- ベストアンサー率54% (865/1590)
>header("Location: ".$prev_page); の代わりに、die($prev_page); などとして $prev_page の内容は確認されていますよね? こちらではどうやっても再現出来ません。 たとえば、下記のようなソースではどうなりますか? <?php if (isset($_GET['prev_page'])) { header('Location: ' . $_GET['prev_page']); exit; } ?> <div style="height:200px">dummy</div> <div style="height:200px">dummy</div> <div style="height:200px">dummy</div> <div style="height:200px">dummy</div> <div style="height:200px">dummy</div> <div style="height:200px">dummy</div> <div style="height:200px">dummy</div> <div id="no99" style="height:200px"><a href='http://localhost/test.php?prev_page=http://localhost/test.php%23no99'>テキストリンク</a></div> <div style="height:200px">dummy</div> <div style="height:200px">dummy</div> <div style="height:200px">dummy</div> <div style="height:200px">dummy</div> <div style="height:200px">dummy</div> <div style="height:200px">dummy</div> <div style="height:200px">dummy</div>
補足
早速のお返事ありがとうございます。 上記のソースを試してみたのですが、ダメでした。 一応ログイン画面移り、チェックがあって元のページに戻るのですが、その時のURLはアンカーポイントが付いた状態にはなっているんです。 なので、URLの参照渡しは問題ないと思うのですが、ページのTOPからアンカーポイントがあるところに移らず、表示の更新をしてもダメで、 URL欄にカーソルを置き、エンターキーを押すと移ります。 ちなみにアンカーポイントは「name」「id」両方いれてます。
- shimix
- ベストアンサー率54% (865/1590)
すでに指摘がありますが、どのようなソースを書いているのか提示してください(現象が確認できる可能な限り短いソース=ミニマムソースで)。 手元で下記のソースで試した限りでは問題があるようには思えません。 test.html <div id="no1" style="height:200px"><a href="test.php?1">1</a></div> <div id="no2" style="height:200px"><a href="test.php?2">2</a></div> <div id="no3" style="height:200px"><a href="test.php?3">3</a></div> <div id="no4" style="height:200px"><a href="test.php?4">4</a></div> <div id="no5" style="height:200px"><a href="test.php?5">5</a></div> <div id="no6" style="height:200px"><a href="test.php?6">6</a></div> <div id="no7" style="height:200px"><a href="test.php?7">7</a></div> <div id="no8" style="height:200px"><a href="test.php?8">8</a></div> <div id="no9" style="height:200px"><a href="test.php?9">9</a></div> <div id="no10" style="height:200px"><a href="test.php?10">10</a></div> test.php <?php if ($_POST) { // (必要なチェックを行う) header('Location: http://localhost/test.html#no' . $_POST['no']); exit; } ?> <form action="" method="post"> <input type="hidden" name="no" value="<?= $_SERVER['QUERY_STRING']; ?>"> userid:<input type="text" name="userid"><br> password:<input type="password" name="pwd"><br> <input type="submit"> </form> (テストスクリプトのため最低限のチェックも省いています)
補足
回答ありがとうございます。 ご指摘のとおりソースを入れ忘れてました。 元のページがzzz.phpで、login.php(ログインページ)がリンク先です。 zzz.phpに以下のリンクがあります <a href='http://www.abc.com/login.php?prev_page=http://www.abc.com/zzz.php%23ancer'>テキストリンク</a> 戻る処理はLocationヘッダです。 login.php内では、「http://www.abc.com/zzz.php%23ancer」を[$prev_page]にいれてます。 header("Location: ".$prev_page); ただこの仕様でzzz.phpをzzzhtmlにすると問題なく飛びます。 よろしくお願いします。
- agunuz
- ベストアンサー率65% (288/438)
>ID・パスワードを入力してログインボタンを押すと、元のページに戻ります。 「戻る」のはLocationヘッダか何かで戻しているのでしょうか。それともanchor要素を返してそれをクリックしてもらっているのでしょうか。そのあたりをどうやっているのか(1行もソースがないので)推測不可能です。 もしLocationヘッダであれば、fragmentはNGだった気がします。「Locationヘッダ fragment」で検索すれば検証された方のサイトがHitするハズです。 (例) http://marucc.hatenablog.com/entry/20080207/1202386973
補足
回答ありがとうございます。 ご指摘のとおりソースを入れ忘れてました。 元のページがzzz.phpで、login.php(ログインページ)がリンク先です。 zzz.phpに以下のリンクがあります <a href='http://www.abc.com/login.php?prev_page=http://www.abc.com/zzz.php%23ancer'>テキストリンク</a> 戻る処理はLocationヘッダです。 login.php内では、「http://www.abc.com/zzz.php%23ancer」を[$prev_page]にいれてます。 header("Location: ".$prev_page); ただこの仕様でzzz.phpをzzzhtmlにすると問題なく飛びます。 よろしくお願いします。
補足
返事が遅くなってすみません。 ありがとうございます。 IE10、Firefox(31.0)、Chrome(36.0.1985.125 m)です。 後日、他のPCでも動作確認してみます。