- ベストアンサー
さくらスタンダードで動かない。
- さくらレンタルサーバのスタンダードプランに移動してから、enter.phpが正しく動作しなくなりました。
- 入力エラーの確認はできるが、入力フォームが表示されず画面が切り替わらない問題が発生しています。
- mail.phpのURLを直接入力すると正しく表示されますが、問題の原因がわかりません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
さっきの回答に書けばよかった。連投すみません。 問題の切り分けとして、header関数一行だけのスクリプト書いて 動くかどうか試してみてください。
その他の回答 (2)
- bm_hiro
- ベストアンサー率51% (200/388)
> さくらレンタルサーバのスタンダードプランに移動してから正しく動作しなくなりました。 との事でしたので、前の所では動いていたんだろうな~と思い、深く考えていませんでしたが、header()の前に何か出力されていちゃいけないんじゃなかったんでしたっけ? 空白一個でも改行一つでもBOMでも。 http://php.net/manual/ja/function.header.php
補足
bm_hiroさん ご回答、ありがとうございました。
- bm_hiro
- ベストアンサー率51% (200/388)
とりあえず、解決になっていませんので聞き流しでお願いします。 そちらの説明とソースをざ~っと読んだだけですが、現象から判断するに「header('Location: http://www.example.com/contact/mail.php');」で、コケてるんじゃないかな~。と思いました。 俺なら とりあえず 試しにリダイレクトさせずに 何か テキトーにprint させるだけとかにしてみて どうなるかを見ます。 > (データはenter.phpからmail.phpにちゃんと送られているようです。)。 データそのものは セッションに入れてるみたいですから、URL直打ちでも ちゃんと動作してくれるんでしょうね。と推測。 さくらレンタルサーバの事を知らないので、これ以上は にんともかんとも。
お礼
補足部分がないので、お礼部分に補足します。 どうやら、header関数がうまく動いていないようです。 enter.phpを下記のコードに変更しましたが、だめです。 <?php session_start(); ?> <?php if (isset($_POST['confirm'])) { $isErr = false; if (strlen(trim($_POST['inquiry'])) == 0) { $isErr = true; $error_inquiry = '内容を入力してください。'; } if (!$isErr) { $_SESSION['input_data'] = $_POST; $input_data = $_POST; header('Location: http://www.example.com/contact/mail.php'); exit; } else { $input_data = $_POST; } } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> </head> <body> <form action="enter.php" method="post"> <table> <?php if (isset($error_inquiry)) { echo $error_inquiry;} ?> <tr> <td> * </td> <td> 内容 </td> <td> <textarea name="inquiry" cols="35" rows="20"><?php echo htmlspecialchars($input_data['inquiry'], ENT_QUOTES, 'UTF-8') ?></textarea> </td> </tr> <tr> <td colspan="3"> <div> <input type="submit" name="confirm" value="確認画面へ進む"> </div> </td> </tr> </table> </form> </body> </html>
補足
bm_hiroさん ご回答、ありがとうございました。 >現象から判断するに「header('Location: http://www.example.com/contact/mail.php');」 >で、コケてるんじゃないかな~。と思いました。 そのようです。 「確認画面へ進む」ボタンをクリックすると、mail.phpへ飛ばず、header関数のある位置でページのコードが切れた状態でenter.phpが再び表示されてしまいます。 ためしに、header関数が含まれている「<?php」から「?>」まで全体を <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> より上へ記述してみましたが、改善されませんでした。 どなたか、理由がお分かりの方、いますか? ついでにmail.phpの仮コードも記載しておきます。 <mail.phpコード> <?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> </head> <body> <?php if (!isset($_SESSION['input_data'])) { echo('再度入力画面からやり直してください。'); echo('</body></html>'); exit; } else { $input_data = $_SESSION['input_data']; } ?> <form action="mail.php" method="post"> <table> <tr> <td> * </td> <td> 内容 </td> <td> <?php echo nl2br(htmlspecialchars($input_data['inquiry'], ENT_QUOTES, 'UTF-8')); ?> </td> </tr> <tr> <td colspan="3"> <div> <input type="submit" name="back" value="戻る"> </div> </td> </tr> </table> </form> </body> </html>
お礼
bm_hiroさん ご回答、ありがとうございました。 解決しました。 php.iniの「output_buffering」が「Off」だったので、「On」に変更するだけで解決しました。元々、コードには何の問題も無かったと言うことです。