プロが教えるわが家の防犯対策術!

現在、作成しているサイトに問い合わせフォームを設けています。
検索して出てきたPHPのコードをそのままお借りしました。

エラー画面(氏名やメアド、内容が記述されていない場合など)のフッターは別に用意したfooter.phpを埋め込んで表示させたいのですが、上手く表示されません。フッターは表示されず空白のままです。エラーコードなども表示されていません。
以前は普通にフッターも表示されていたのですが、少しコードをイジってしまったら表示されなくなってしまいました。

問い合わせフォームに記述漏れが無く、正常に送信された時も同じように埋め込んだフッターを表示させているのですが、こちらは正常に表示されます。

どこを変更すると正常にフッターが表示されるようになるでしょうか?
ご存知の方いらっしゃいましたらご教示ください。
よろしくお願いします。

<?php
//--------件名
define("SUBJECT","お問い合わせフォームより");
//--------受け取りメアド
define("MAILTO","info@○○.com");
//--------文字コード
define("CODE","UTF-8");
//--------ホームURL
$homeurl='http://○○.com/';
//--------入力チェック
function check(){
global $_POST;
if($_POST['name']==""){ error("氏名/ニックネームが入力されていません。");}
if(!$_POST['mailadd']){ error("メールアドレス(返信用)が入力されていません。");}
if($_POST['contents']==""){ error("内容が入力されていません。");}
}
//--------メール送信
function sendmail(){
global $_POST;
$agent = getenv("HTTP_USER_AGENT");
$host = getenv("REMOTE_HOST");
$addr = getenv("REMOTE_ADDR");
if($host=="" || $host==$addr){ $host = @gethostbyaddr($addr);}
$date = gmdate("Y/m/d H:i:s (D)",time()+9-60-60);
$mailbody = <<<EOM
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ お問い合わせフォームより
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□送信者氏名:${_POST['name']}
□メールアドレス:${_POST['mailadd']}
□内容:
${_POST['contents']}
------------------------------------------------------------------------------------------
投稿時間:$date
投稿者のIPアドレス:$addr
投稿者のホスト名:$host
投稿者のブラウザ:$agent
------------------------------------------------------------------------------------------
EOM;
mb_language("Ja");
mb_internal_encoding(CODE);
$sub = mb_convert_encoding(SUBJECT,CODE);
$headers ="From: ".$_POST['mailadd']."\r\n";
//$mailbody = stripslashes($mailbody);
$rcode = @mb_send_mail(MAILTO,$sub,$mailbody,$headers);
if(!$rcode){ error("メール送信エラー");}
}
//--------最後のメッセージ
function finish_html(){
echo <<<EOM

<p class="txt">お問い合わせを受け付けました。ありがとうございました。</p><br>
<p class="txt"><INPUT type="button" name="close" value="戻る" onClick="location.href='http://○○.com/contact.html'" class="button"></p><br clear="all">
EOM;
}
//--------エラー処理
function error($msg){
echo <<<EOM

<p class="txt"><font color="red">$msg</font></p><br>
<p class="txt"><INPUT type="button" name="close" value="戻る" onClick="history.back(); return false;" class="button"></p><br clear="all">
</div>
<div id="s_main-bottom"></div>
</div>
</div>
<?php include('footer.php'); ?>
</div>

</body>
</html>
EOM;
exit();
}
//--------メイン処理
if ($_POST['submit']) {
check();
sendmail();
finish_html();
}
?>
</div>
<div id="s_main-bottom"></div>
</div>
</div>
<?php include('footer.php'); ?>
</div>

A 回答 (2件)

単純に2回に分ければいいと思いますけど・・・



function error($msg){
echo <<<EOM

<p class="txt"><font color="red">$msg</font></p><br>
<p class="txt"><INPUT type="button" name="close" value="戻る" onClick="history.back(); return false;" class="button"></p><br clear="all">
</div>
<div id="s_main-bottom"></div>
</div>
</div>
EOM;

include('footer.php');

echo <<<EOM
</div>

</body>
</html>
EOM;
exit();
}
    • good
    • 0
この回答へのお礼

agunuzさん

再度回答ありがとうございます。

ご教示頂いた様に修正しましたら無事フッターが表示されるようになりました。

助かりました。ありがとうございました。

お礼日時:2014/06/27 06:57

error()を呼び出したときに



function error($msg){
echo <<<EOM

このechoはEOMまでをまとめて処理します。なので途中に

<?php include('footer.php'); ?>

phpのコードがあっても「そのまま」ブラウザに返されます。変数の展開だけはされますが、phpコードは無視されます。ブラウザの返っているhtmlソースを確認してみてください。



なお、

global $_POST;

スーパーグローバル変数をglobal宣言する必要はありません。

この回答への補足

agunuzさん

回答ありがとうございます。

ブラウザでソースを確認してみたところ確かに「<?php include('footer.php'); ?>」がそのまま排出されていました。

エラー処理内でfooter.phpを埋め込まず、エラーなしで正常に処理された時と同じように一番下にあるfooter.phpを埋め込む事は可能でしょうか?
EOM内のfooter.phpを削除して試してみたのですが、一番下のコードは処理してくれませんでした。

よろしくお願いします。

function error($msg){
echo <<<EOM
<p class="txt"><font color="red">$msg</font></p><br>
<p class="txt"><INPUT type="button" name="close" value="戻る" onClick="history.back(); return false;" class="button"></p><br clear="all">
EOM;
exit();
}

補足日時:2014/06/26 00:23
    • good
    • 0

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