• ベストアンサー

header("Location: ")でページ移動しない;

<?php $image_no = $_GET['image_no']; if($image_no == ""){ $image_no = 0; } if($image_no == 10){ header("Location: http://www.test/i/"); } ?> <img src="../img/test<?php echo $image_no;?>.jpg"> <?php echo $image_no;?> <br/> <a href="test.php?image_no=<?php echo $image_no + 1;?>">次へ</a> こんなカンジで、『次へ』のリンクをクリックすると、画像が切り替わるものを書いたんですが、$image_no == 10になったら、別のページへジャンプしたいんですが、うまくいきません。 10回目でエラーになってしまいます。 どうやったらうまく違うページへジャンプできるのでしょうか?

  • PHP
  • 回答数4
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.4

そのエラーは、「header の前に 何か出力されちゃってるよエラー」ですので、 何か 出力されていないかご確認ください。 #3さん ご指摘の改行もそうですし、半角スペースなど 目に見えないものでもNGです。 ob_start()を使って回避する方法もありますが、これは根本的な解決ではありません。

maz1105
質問者

お礼

ありがとうございます。 !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> の下に書いていれば、エラーになって当然ですね!できました。本当にありがとうございます。

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

文字コードはUTF? BOMを吐いていたり、いらない改行などはいっているのでは? 当然ながらhttpのヘッダーは文字を送る前に設定する必要があります。

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.2

さっきのアルバムの方ですね。 回答しようかと思ってたら質問が消えてて、吹きました。 > header("Location: http://www.test/i/"); 文法上は問題ないと思います。 どんなエラーが出たのですか?

maz1105
質問者

補足

いかにもさっきのアルバムの人です。 自力でなんとかやったらできました。 せっかく回答していただこうとしたのに、もうしわけありません! 今回の質問は、そのアルバムの続きです Warning: Cannot modify header information - headers already sent by (output started at /home/admin/test.php:10) in /home/admin/test.php on line 29 エラー文をそのまま書きました。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 if($image_no == 10){ header("Location: http://www.test/i/"); exit; } exitを入れてみてください。

maz1105
質問者

補足

ありがとうございます。 さっそくやってみましたが、上の補足同様、エラーがでて、結果は変わりませんでした

関連するQ&A

  • header Locationに関するエラー

    こんにちわ。質問があります。 以下のコードに問題はありますか? "http://xxx.xxx.xxx.html"(仮名)というURLからアクセスした場合は リンク元を表示し、その他からのアクセスの場合は、google.co.jpに飛ぶというプログラムです。 header:Locationの使い方がおかしいらしく、エラーとなってしまいます。 どこに問題がありますでしょうか?ご教示いただけますと大変助かります。 どうぞよろしくお願い申し上げます。 ------------------------------------------------------------- <?php $referer=$_SERVER['HTTP_REFERER']; echo 'referer = '; echo $referer; echo '<br>'; if($referer == "http://xxx.xxx.xxx.html") { echo 'from '; echo $referer; } else { $url="http://www.google.co.jp/"; header("Location: $url"); exit; } ?>

    • ベストアンサー
    • PHP
  • 環境をかえたら header(Location:)に不具合が?

    ローカル環境からWEBサーバに作ったPHPファイルを移動させたのですが、 header(Location:)がうまく動かなくなってしまいました。 アドレスがおかしいのかと思って いくつか試してみたんですが ファイルによってうまく行くのと行かないのがあるようです。 傾向としては $chkに5が入っていたら test.phpに移動する。 if($_SESSION['chk'] != '5'){  header('Location: ./test.php');  exit; } はうまく動くのですが ifでいくつか処理を行ったあとに if(isset($_POST('submit')){  いくつかの処理  header('Location: ./login.php'); } とするとうまく動かないという状態です。 どのようなケースが考えられるでしょうか アドバイスよろしくお願いします。

    • ベストアンサー
    • PHP
  • header(Location: next.php) だとPOSTした値が渡らない?

    文末は(だいぶ端折ってますが), (1) エラーがあればエラー表示, (2) エラーがなければnext.phpに飛ぶ という動作をするのですが, next.php 内に echo $_POST["Name"]; とか echo $_POST["reg"]; とか書いても valueの中身が渡ってきていません. header("Location: next.php"); で飛ばすとだめなのでしょうか. http://oshiete1.goo.ne.jp/qa2706500.html でも,#2さんのアドバイスのようにしようとしましたが, #1さんのご教示のように,セッションを利用するしかないですか? ちょっとセッションで値の渡し方がチンプンカンプンなのですが・・・ <?php session_cache_limiter('none'); session_start(); header("Cache-control:no-cache"); header("Pragma:no-cache"); $errFlg=false; if ( $_POST["reg"] == "" ) $errFlg = true; if ( !$errFlg ) { if ( $_POST["Name"] == "" ) { $errFlg = true; $errStr["Name"] = "未入力"; } } if ( $errFlg ) { ?> <html><body> <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>"> <?= $errStr["Name"] ?></td> <input type="text" name="Name" value="<?php echo $_POST["Name"]; ?>"> <input type="submit" name="reg" value="登録"></td> </form> </body></html> <?php } else { header("Location: next.php"); } ?>

    • ベストアンサー
    • PHP
  • header(Location:~)で$_SESSION[" "]が保持されない。

    自宅サーバー(apache2+php5+mysql5)のlocalhost環境で、 header(Lcation:~)の記述をすると、 セッションが保持されない現象が起きています。 本番環境のレンタルサーバーは、同じ記述で、 しっかりとセッションが保持されます。 この原因は、何でしょうか? php.iniの設定など、何か考えられることがあれば、 是非教えて下さい。 【やりたいこと】 ■a.php **************************************** <?php echo<<<EOD <form method="POST" action="./b.php"> <INPUT type="text" name="test"> <INPUT type="submit" name="Submit" value="確認画面へ"> </form> EOD; ?> ■b.php **************************************** <?php $_SESSION["test"]=$_POST["test"]; header("Location:./c.php"); ?> ■c.php **************************************** <?php echo $_SESSION["test"]; ?> 自宅サーバーだと、 a.phpで入れたデータが、c.phpで表示されません。 レンタルサーバーだと、 セッションが保持され、表示されます。

    • ベストアンサー
    • PHP
  • headerに乱数を仕込みたい

    ランダムに画像を出力するプログラムを書いています。 <img src='test.php' border=0 /> test.php header("Content-Type: image/gif"); header("Expires: Thu, 01 Dec 1994 16:00:00 GMT"); header("Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); 現在は上記のようにheaderが書いてあり、1秒ズレれば別ページとして判断されるようになっているようです。 しかし、 <img src='test.php' border=0 /> <img src='test.php' border=0 /> <img src='test.php' border=0 /> このように、3つHTML上に記述した場合、1秒以内で読み込みが来てしまい同一ファイルと判断される為なのか、全て同じ画像が出てしまいます。 phpが回ればログを書くようにしてみましたが やはり1回しか回っていないようです。 そこで、headerに乱数など必ず変わる値を差し込んで、 別物として読み込ませるような方法はないでしょうか。 もちろん、 <img src='test.php?i=1' border=0 /> <img src='test.php?i=2' border=0 /> <img src='test.php?i=3' border=0 /> このように、HTML側でURLを変えれば別物として読まれますが、この方法はNGです。 あくまでtest.phpのプログラム側でなんとかしたいのです。 宜しくお願い致します。

    • 締切済み
    • PHP
  • 携帯でのheader Locationについて

    携帯を対象としたHPをphpで作成しています。 ファイルから$urlを取得して、 header("Location: $url"); にて、ジャンプさせるのですが、iモードだとうまく$urlのHPにジャンプするのですが、Vodafoneではうまくジャンプできず、エラー画面が表示されてしまいます。 auではまだ試していないので分かりませんが、機種や会社によって上記のようなLocationは使えないのでしょうか? なぜ、うまくジャンプしないのか分かりません。 なんか良い方法・理由を教えてください。よろしくお願い致します。

    • 締切済み
    • PHP
  • header("Location: mailto:

    header("Location: mailto: でメーラを開く時、本文を改行させたらエラーになるのですが、回避する方法はありませんか? <?php // 送信ボタンが押されたら if (isset($_POST["submit"])) { $wk_adrs = "web@test.sakura.ne.jp"; $wk_subject = "サブジェクト"; // これはOK $wk_body = "ボディー"; // これはNG $wk_body = "1行目ボディー".PHP_EOL."2行目ボディー"; // これもG $wk_body = <<< EOM 1行目ボディー 2行目ボディー EOM; // 画面遷移させる $wk_Location="Location: mailto:".$wk_adrs."?subject=".$wk_subject."&body=".$wk_body; header($wk_Location); exit; } ?> 下記のメッセージが出る Warning: Header may not contain more than a single header, new line detected in

    • ベストアンサー
    • PHP
  • phpのheader関数でページ移動させるときについて

    現在、作成しているPHPに、 if($_POST[main]){ header("Location: ./main.html"); } 以上のような方法で、name="main"のボタンが押された時にページを移動する、という動作をさせているPHPファイルがあるのですが、これを <a href="./main.html" target="_top"></a> というような、ターゲットを指定させてページ移動させたいのですが、可能なのでしょうか? フレームなどを利用しているので、その対策を行いたいのです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 【PHP?】header("location : ・・・")が作動しな

    【PHP?】header("location : ・・・")が作動しない PHPに関して質問させていただきます。 -------------------------------------------- <html> <head> <title></title> </head> <body> <?php if($_POST['pay'] == credit) { header("Location : creditinfo.php"); } else { print("ただいま制作中です\n"); } ?> </body> </html> -------------------------------------------- というコーディングを行い、 ・前ページでのpostで[credit]というデータが返ってくると別ページへ移動 ・それ以外のデータが帰ってきたら「ただいま制作中です」というテキストを表示 ということを行いたいのですが、 それを実行すると Warning: Cannot modify header information - headers already sent by (output started at C:・・・.php:6) in C:・・・.php on line 8 というエラーが返ってきてしまい、そのページから先に進めなくなってしまいます。 様々なページで解決方法を探りましたが、解決できずにいます。 ちなみに、elseの方の「ただいま制作中です」は表示できます。 どなたかご教授をお願いします。

    • ベストアンサー
    • PHP
  • header関数でページ移動しない

    現在携帯サイトをPHPで作成しているのですが下記のようなコードを書くと、ページが移動しません。 本来は条件処理をした後で、ページ移動させたい地のですが、 一番シンプルなコードにしてもページが移動してくれません。 ローカルサーバーのVine Linuxでは動作するのですが、 ロリポップ、114090、berrysan.net(http://www.berrysan.net/index.html) などでは動作してくれません。 ---------------- 以下 ページが移動しない --------------- <?php  //サイト設定ファイル読み込み  require_once("./setini.php");  $Url = "http://oshiete.goo.ne.jp/";  header("Location: $Url"); ?> ------------------------------------------------------ ---------------- 以下 ページが移動する ---------------- <?php  //サイト設定ファイル読み込み  //require_once("./setini.php");  $Url = "http://oshiete.goo.ne.jp/";  header("Location: $Url"); ?> ------------------------------------------------------ setini.phpは、下記のようなdefine定義があるだけです。 <?php define("TOP_FILE","./index.php"); : : ?> 何処か使い方がおかしいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう