• 締切済み

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」の使用については  ・すべての出力の前でなければならない  ・読み込みファイルや空白行などにも注意 ということまでは知っているので注意しているつもりなのですが... 何かお気づきの点でもあればご指摘下さい。 よろしくお願いします。

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

みんなの回答

noname#33959
noname#33959
回答No.1

mysql.php ?>の最終行に文字が入っていませんか

mapple55
質問者

お礼

すいません、自己解決しました。 原因はエラーメッセージで指摘されていた1行目への文字混入でした。 なぜわからなかったかというと、このプログラム自体「UTF-8」で作成してアップロードしているのですが、コーディングは「UTF-8」に対応していないエディターの方が使いやすいため、都度作成したら別エディターで変換してアップロードとしていました。 どうもこの過程で問題があったらしく「mysql.php」をUTF-8へ変換してみたら「<?php」の箇所が「?<?php」となって表れました。 サーバーにアップロードするとき文字化けを起こしていたようです。 いくら画面上でロジックを確認してもわからなかったので質問しましたが、原因がこんなところにあって申し訳ありませんでした。

mapple55
質問者

補足

回答ありがとうございます。 文字はないですね。 最終行「?>」で改行するようなミスもしていないのですが... このあといろいろプログラムを変えて試してはいるのですが、すべて同様です。 「mysql.php」はDB接続と問い合わせをまとめたものなので出力するような処理もしてないんです。

関連するQ&A

  • HEADERについて

    無知でお恥ずかしいのですが、PHPで出力する際 header("Content-Type: text/html;charset=EUC-JP"); などと最初にヘッダーを出力すると思うのですが、例えばtest.phpが以下のようになっていた場合でもPHPでヘッダーを出力する必要があるのでしょうか? test.php ※1<?php header("Content-Type: text/html;charset=EUC-JP"); ?> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="TEXT/HTML; CHARSET=EUC-JP"> <TITLE></TITLE></HEAD> <BODY> TEST <?php echo $test; ?> </BODY> </HTML> 参考書などを見てみると「全ての出力の前に記述する必要がある」と書いてあるだけで、書かずとも正常に表示されますし、仮に文字化けしても <META HTTP-EQUIV="Content-Type" CONTENT="TEXT/HTML; CHARSET=EUC-JP"> と追加すれば文字化けも解決するので、疑問は感じつつも思い出したときにPHPにもヘッダを記述するようにしていたのですが、少しづつPHPを勉強しやれる事が増えてくる内に、記述してあるものと記述して無いものが混在してきて気持ち悪く感じてきました。 皆さんはどのようにされていますか? ※他サイトで配布されているPHPスクリプトなども見てみたのですが、毎回記述している方、一切記述していない方それぞれでした。 あと、全く違う質問ですが、MYSQL接続中にエラー処理でexit;する場合、exit;する前にMYSQL接続を切断する必要ってあるのでしょうか?

    • ベストアンサー
    • PHP
  • headerについて

    <?php header("Location:x.php?y=1"); exit; ?> はOKですが <?php $_GET['xx']; header("Location:x.php?y=1"); exit; ?> はだめです エラーメッセージは Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/z.php:2) in /var/www/html/z.php on line 3 $_GET['xx']や$_POST['xx']などをheaderの前に置けないと非常に困ります (上はテスト用PHPです) どうしたらいいでしょうか?

    • ベストアンサー
    • PHP
  • 下記のコードなのですが「C:\Hoge.php の 1 行目でヘッダが

    下記のコードなのですが「C:\Hoge.php の 1 行目でヘッダがすでに送信されています。リダイレクトできません。代わりにこの リンク をクリックしてください。 」になります。 何故 1行目「<?php」がヘッダとして送信されたと認識されるのでしょうか? C:\Hoge.php ------------- <?php if ( !headers_sent( $filename, $linenum ) ) { header( "Location: ./TOP.php" ); exit; } else { echo "$filename の $linenum 行目でヘッダがすでに送信されています。\n" . "リダイレクトできません。代わりにこの <a "."href=\"./TOP.php \">リンク</a> をクリックしてください。\n"; exit; } ?> ------------- 環境 Windows XPにXAMPP v1.7.3を導入しています。 XAMPP v1.7.3 Apache/2.2.14 (Win32) PHP/5.3.1 mod_apreq2-20090110/2.7.1

    • ベストアンサー
    • PHP
  • header関数が使えない

    <html> <head> </head> <body> <?php header("Location: http://www.php.net/"); exit; ?> </body> </html> のように、単にheader関数を試したら Warning: Cannot add header information - headers already sent by (output started at /home/***/index.php:5) in /home/***/index.php on line 6 のようなエラーがでました。header関数が使えないようなのですが、これはどこの設定を直せば解決できるのでしょうか? 普通に、phpinfo.phpは表示できるので、phpそのものは使えています。 Apache/1.3.26 PHP 4.2.2

    • ベストアンサー
    • 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
  • VBに関するエラー

    Option Explicit Private CN As New ADODB.Connection Private RSOUT, RSOUT2, RSOUT3 As New ADODB.Recordset Private mysql1, mysql2,mysql3 As String ------------------------------------------------ Private Sub CMD_Action_Click() On Error GoTo err_form_load CN.Open "PROVIDER=MSDASQL;dsn=TYO;uid=;pwd=;" mysql3 = "SELECT Tabel1.A,Tabel1.B sum(mysql3.Tabel1.A) as C, sum(Tabel1.B) as D From Tabel1" RSOUT3.Open mysql3, CN, adOpenStatic mysql2 = "SELECT RSOUT3.C , RSOUT3.D From RSOUT3" RSOUT2.Open mysql2, CN, adOpenStatic FileName = "C:\表.csv" Open FileName For Output As #1 '出力分 省略 Close #1 MsgBox "出力完了しました。", vbOKOnly, Title:="知らせ" Exit Sub err_form_load: MsgBox (Err.Number & Chr(13) & Err.Description) Exit Sub End Sub ------------------------------------------------- 質問:mysql2のところに、mysql3のrecordを利用したいですが、そのままRSOUT3.recordをmysql2に利用すると、”オブジェクトが必要”のエラーメッセージが出た。どこ間違いましたか?  よろしくお願いいたします。

  • 環境をかえたら 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
  • $_REQUESTの値を保存する方法

    データを更新する画面を作成しています。 HTML・PHP・MYSQLを使用。 1本目のPHPはコードを入力し、 フォーム内のSUBMITボタンで、次のPHPを呼び出します。 ================================================ a.php <?php 入力チェック エラーがないとき header(省略. "/b.php?CODE=" . ($_REQUEST["CODE"])); exit(); ?> <form action="a.php" method="post"> <input type="text" name="code"> <input type="submit" name="submit" value="登録"> </form> とあって、入力チェックでエラーがなければ 別のPHPに入力したコードをパラメーターとして 持って移動。 ================================================= b.php <?php $code = $_REQUEST[CODE]; このフォームのエラーチェック エラーがないとき header(省略. "/a.php); exit(); ?> <form action="b.php" method="post"> <table> <tr><td><?php echo($code); ?></td></tr> <tr><td><input type="text"></td></tr> </table> <input type="submit" name="submit" value="更新"> </form> 受け取ったコードに対する情報を入力し、 更新ボタンを押す⇒エラーがなければデータを更新、もとの画面に。 最初にb.phpを表示したときは、$codeに値が入っていて、画面にコードが表示されますが、 更新ボタンを押して、画面にエラーがあるとき、 エラーチェックをして画面表示をすると、$codeの値が消えてしまいます。 この値を残す方法を探しています。 $_REQUESTの値を残す、もしくは、他のプログラムから パラメーターを取得し使用する方法を どなたか、教えてください!

    • ベストアンサー
    • PHP
  • headerでエラー(CGI版のPHP)

    アイルのホスティングサービス上で応募フォームの PGを作成しています。 仕様としては 1.ユーザーが入力 2.送信 3.空白チェックなどして問題があれば1に戻る 4.問題がなければ入力項目の確認画面へ飛ばす という感じですが、現在は仕様の4で困っています。 普通に各種入力チェックをクリアーしたらheader Location: URLで飛ばすだけなのですが、以下の エラーが表示されます。 Cannot add header information - headers already sent by ・<HTML>が始まる前にコードを入れてます。 ・on start()も入れてみましたが、結果は同じです。 ・権限の方も確認しました。 さらに、 #!/usr/local/bin/php <? header("Location: URL"); exit; ?> というheaderのみ実行させるコードでも同様の エラーが発生しました。 モジュール版では同様のエラーが確認できません でした。 もしかしたら基本的なことなのかもしれませんが、 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPの syntax error について

    PHPのコードを書いて、添付のスクリーンショットのようなエラーが出てきます。 コードは次のようなもので、HTML文書のフォームから送られてきた名前のファイルを消去するものです。 <body> <?php $FileName=$_POST["deleteFileName"]; $FileName="C:\xampp\htdocs\".$FileName; echo $FileName ; unlink($FileName); //echo "<form id='next' method='post' action='QAgmeOver.php' >"; //echo "<input type='submit' value='call QAgameOver' >"; //echo "</form>"; ?> <!-- <script type="text/JavaScript"> window.document.getElementById("next").submit(); </script> --> </body> 問題の line 18 というのは次の行です。 //echo "<form id='next' method='post' action='QAgmeOver.php' >"; unexpected T_STRING というのは、何か文字列の書き方に問題があるということらしいのですが、何をどうやって見てもエラーが消えないのでコメントアウトしてみましたが、それでも同じエラーメッセージが出てきます。 どうすればこのエラーが出なくなるのか、詳しい方がいらっしゃいましたら教えてください。お願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう