プロが教える店舗&オフィスのセキュリティ対策術

はじめて投稿させていただきます。
お力添えいただければ幸いです。

ホームページでメールフォームを設置しています。
php5.3で問題なく動作していました。
同じフォームを違うホームページにも使おうとソースをコピペしたのですが、正しく表示されません。
何度も確認したのですが、元データとの差異は発見できず、どうしたものかと途方に暮れていたのですが、phpのバージョンが違うことに気が付きました。

プログラムは「入力画面」「確認画面」「送信完了のお知らせ画面」の3段構成になっていて、エラーが出るのは「確認画面」です。
そのプログラムの部分のコードは以下の通りです。


<form action="submit.php" method="POST">

<?
if ($_SERVER["REQUEST_METHOD"] == "POST") {
foreach($_POST as $k => $v){
if (get_magic_quotes_gpc()) {
$v = stripslashes($v);
}
$v = htmlspecialchars($v);
$$k = $v;
}
}
else {
exit();
}

$ErrFlg = 0;
if ($name == "") {
echo "<p>お名前を入力してください。";
$ErrFlg = 1;
}
if ($email == "") {
echo "<p>メールアドレスを入力してください。";
$ErrFlg = 1;
}
if ($_POST["email1"] != $_POST["email2"]) {
echo "<li>メールアドレスに誤りがあります。</li>";
$ErrFlg = 1;
}

if (!$ErrFlg) {
?>

<dl>
<dd>お名前</dd>
<dt><?=$_POST['name']?></dt>

<dd>eメール</dd>
<dt><?=$_POST['email1']?></dt>

<dd>メッセージ</dd>
<dt><?=$_POST['message']?></dt>
</dl>

<input type="submit" value="送信">

<? } ?>
<input type="hidden" name="name" value="<?= $_POST['name'] ?>">
<input type="hidden" name="email" value="<?= $_POST['email1'] ?>">
<input type="hidden" name="message" value="<?= $_POST['message'] ?>">

</form>

上記コードで、php5.4では不具合がでてしまう箇所、もしくはそもそも…など、何かお分かりになる方がいらっしゃいましたら是非ともご教授のほど、よろしくお願いいたします。

A 回答 (1件)

あてずっぽなので合ってないとは思いますが


php.iniでshort_open_tag がおかしかったりしません?

http://php.net/manual/ja/ini.core.php

ちなみにご提示の
foreach($_POST as $k => $v){
if (get_magic_quotes_gpc()) {
$v = stripslashes($v);
}
$v = htmlspecialchars($v);
$$k = $v;
}
}
は、あまりEXTRACTと同じであまりお勧めできない書式です
外部から受けたデータを変数名として使うのはかなり危険です
nameやemailなど変数名が決めうちなのですからめんどくさがらず
$list=array("name","email")などを提示して、ループ処理をしてください

また確認画面でhiddenでデータを渡すのは今となってはあまり使わない手法ですね
入力→確認→実行 間の受け渡しはできるかぎりセッションを利用してください
    • good
    • 1
この回答へのお礼

助かりました

ご回答ありがとうございました。
そしてご指摘の通り、short_open_tagが無効になっており、
それを有効にすることで解決いたしました。

また、回答後半でお教えいただいた内容は私にはちょっと
難しいのですが、勉強して適切なプログラムを書けるように
精進いたします。

どうもありがとうございました!

お礼日時:2015/10/02 15:22

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