dポイントプレゼントキャンペーン実施中!

phpを使って、WEBを作っています。だいぶPHPを使えるようになってきて、今が一番楽しいときです。

実は以前から引っかかっていて、解決できないことがありますのでお助けください。

if文などで、条件を満たしたときに別のページに移動したいのですが、その移動のさせ方に下のようなソースを記入しています。
if($row==1){

header("location:********.php");
}
でも、どうもあまり良い方法ではないような気がしています。

(※*****はユーザー名やファイル名です。)
下のようなエラーが表示されました。
Warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/htdocs/******/public_html/******.php:17)

他のページにジャンプするような関数は何かないのでしょうか。
どなたか詳しい方宜しくご指導お願いいたします。

A 回答 (4件)

そのエラーなんですが、



header("Location:xxxxx.hpp");
よりも先に、出力があるので出ています。
print とか、var_dumpとかしてませんか?

また、headerよりも前にrequire or includeしているファイルの
?>の後ろにスペースしていませんか?
これも出力とみなされて、エラーが出ます。

これ以外に処理をかませて自動で飛ばす場合、
javascriptとかで飛ばす方法を使うのが一般的ではないでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

require もechoもどちらもあります^^。
JavaScriptを使うのですね。勉強になりました。

お礼日時:2008/11/12 15:02

多少強引であるかもしれないですが、php.iniの設定で、output_bufferingを



output_buffering = On

と変更したらどうでしょうか?
ほかの回答者のように、ob_start()を使うのも手ですが。
    • good
    • 0
この回答へのお礼

ご教授ありがとうございます。
HTMLの出力を取り除きましたころ、解決いたしました。
ありがとうございました。

お礼日時:2008/11/19 22:22

se-nabeさんがおっしゃっている通り


header()の前に何らかの出力がされているとこのエラーがでます。
ただ、どうしてもリダイレクトの前に表示したい場合もあります。
この場合はob_start()を使ってやると出力の制御ができます。

セッションやクッキーなどを利用する場合も出力より先にしてやる必要がありますがこれを使えば出力があったあとでも利用することができます。
    • good
    • 0
この回答へのお礼

ありがとうございました。
テストのために、途中に確認用にprint文を2箇所ほどいれていましたが、それを削除しましたら上手く動作しました。
require文もあったので、ためしにと思い下の様にしてみました。
ob_start("require");
そして、
header("location:*****.php");
ob_end_flush();

でも、print文をとりましたら、特に何もしなくてもジャンプしましたので、ob_start()は消しました。
ob_start()の使い方は、よく分からないのですが、もし使うとすれば
上のような使い方で正しかったのでしょうか?
とても勉強になるアドバイスありがとうございました。

お礼日時:2008/11/12 16:44

PHPはサーバ側がユーザへ送るhtml(とか)を(ユーザに判らないように「サーバ側で」)変化させるための仕掛け っていう認識は有る?


ユーザ側に送られてから何かやりたいならjavascriptか件のlocation(htmlでもできる従来の方法)になるね。
ユーザの入力(主にsubmit)があってからやってもいいというのなら読み出す物をそもそも変化させれば済むけど質問文だけではやりたいことが掴めないのでなんとも言えない・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!