- 締切済み
headerでエラー
お世話になります。 行き詰まってしまいどうにもならないので質問させて下さい。 フォームのテキストボックスが未入力状態で「更新」ボタンを押したとき 更新処理を行わずエラーメッセージの表示等を行うだけで同一画面に留まりたいプログラム「input.php」があります。 <?php require_once("mysql.php"); GET処理 POST処理(※入力チェック OK:更新処理、NG:header使用し別モードで再読込) ?> <html> <head> (中略) フォーム(action="<?=$_SERVER["PHP_SELF"]?>") </html> エラーチェックを<html>より前の部分で行い、不正なら「input.php?err=1」という形でheaderを使った再読込で項目の上にエラーメッセージを表示させたいのですが、うまくいきません。 (※やり方に関してどうしてもこうする必要があるのでご理解下さい) 試しに以下のように書き換えて実行するとこのように表示されます。 「..xxx/mysql.php の 1 行目でヘッダがすでに送信されています。リダイレクトできません。 」 if (!headers_sent($filename, $linenum)) { header("Location: http://$host/input.php?err=1"); exit; } else { echo "$filename の $linenum 行目でヘッダがすでに送信されています。"; exit; } メッセージにある「mysql.php」の1行目は「<?php」だけなので何がいけないのか見当がつきません。 「header」の使用については ・すべての出力の前でなければならない ・読み込みファイルや空白行などにも注意 ということまでは知っているので注意しているつもりなのですが... 何かお気づきの点でもあればご指摘下さい。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
mysql.php ?>の最終行に文字が入っていませんか
お礼
すいません、自己解決しました。 原因はエラーメッセージで指摘されていた1行目への文字混入でした。 なぜわからなかったかというと、このプログラム自体「UTF-8」で作成してアップロードしているのですが、コーディングは「UTF-8」に対応していないエディターの方が使いやすいため、都度作成したら別エディターで変換してアップロードとしていました。 どうもこの過程で問題があったらしく「mysql.php」をUTF-8へ変換してみたら「<?php」の箇所が「?<?php」となって表れました。 サーバーにアップロードするとき文字化けを起こしていたようです。 いくら画面上でロジックを確認してもわからなかったので質問しましたが、原因がこんなところにあって申し訳ありませんでした。
補足
回答ありがとうございます。 文字はないですね。 最終行「?>」で改行するようなミスもしていないのですが... このあといろいろプログラムを変えて試してはいるのですが、すべて同様です。 「mysql.php」はDB接続と問い合わせをまとめたものなので出力するような処理もしてないんです。