みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

swich文を使ったメールフォームの作成について。

<?php


// Error indicate.
$error_msg = '未入力...';

/*--- Form mode ---*/
$mode = isset($_POST["mode"]) ? htmlspecialchars($_POST["mode"]) : "input";

/*--- 入力項目 ---*/
$mail = (isset($_POST["mail"]) && $_POST["mail"]!=$error_msg) ? htmlspecialchars($_POST["mail"]) : "";


switch ($mode)
{
/*--- 入力画面 ---*/
case 'input':

echo'
<html>
<body>
<form enctype="multipart/form-data" action="inquiry.php" method="post">
<input type="hidden" name="mode" value="check" />

<div>* メールアドレス<input name="mail" type="text" value="'.$mail.'" size="" /></div>

<div><input type="submit" value="確認する" /></div>
</form>
</body>
</html>
';

break;

/*--- 入力チェック画面 ---*/
case 'check':

//-----------------------------------------
// 入力チェック。
//-----------------------------------------
//User Mail.
if ($mail == "") {//未入力処理。
$mail ='<font color="red">'.$error_msg.'</font>';
$error = 1;
} else if ( ereg("^[^@]+@[^.]+\..+", $mail) == false ){//書式処理。
$mail ='メールアドレスの書式が正しくありません。';
$error = 1;
} else {
$mail = $_POST["mail"];
}

if ($mail != "") {// 全角を半角に。
$mail = mb_convert_kana($_POST["mail"], "a", "utf-8");
}

echo'
<html>
<body>
<h1>ご入力内容をご確認してください。</h1>

<div>* メールアドレス<br />'.$mail.'</div>

';

/*--- 未入力画面 ---*/
if($error == 1) {
echo'
<div>
<form action="inquiry.php" method="post">
<input type="hidden" name="mode" value="input" />
<input type="hidden" name="mail" value="'.$mail.'" />
<input type="submit" value="戻る" />
</form>
</div>
</body>
</html>
';
}

/*--- 送信可能画面 ---*/
if($error == 0) {
echo'
<form action="inquiry.php" method="post">
<input type="hidden" name="mode" value="send" />
<input type="hidden" name="mail" value="'.$mail.'" />
<input type="submit" value="送信" />
</form>
<form action="inquiry.php" method="post">
<input type="hidden" name="mail" value="'.$mail.'" />
<input type="submit" value="戻る">
</form>
</body>
</html>
';
}

/*--- 送信画面 --*/
case 'send':

}

/*
swich文を中心にメールフォームを作っています。
入力画面で「$mail」には、入力内容、未入力の場合、エラー文が代入されます。
再び、入力画面に戻ると、当然ですが、入力欄には、エラー文が表示されてしまいます。
$mailを空にして入力画面に戻せば良いのですが、正しい入力や多少のミス入力した場合等、
ユーザが入力した値を、入力欄に戻したいと思っています。
どのような処理をすれば良いのでしょうか?
皆様、ご回答の方、どうぞよろしくお願いいたします。

投稿日時 - 2011-05-29 12:11:32

QNo.6771639

すぐに回答ほしいです

質問者が選んだベストアンサー

ロジックとテンプレートは別けて書いた方がプログラムが見やすくなって、デバッグや改修が簡単になります。
MVCを意識して書いた方がPHPも使い易くなっていいですよ。

<?php
// Error indicate.
$error_msg = '';

/*--- Form mode ---*/
$mode = isset($_POST["mode"]) ? htmlspecialchars($_POST["mode"]) : "input";

/*--- 入力項目 ---*/
$mail = (isset($_POST["mail"])) ? htmlspecialchars($_POST["mail"]) : "";


switch ($mode) {
/*--- 入力画面 ---*/
case 'input':

?>
<html>
<body>
<form enctype="multipart/form-data" action="inquiry.php" method="post">
<input type="hidden" name="mode" value="check" />

<div>* メールアドレス<input name="mail" type="text" value="'.$mail.'" size="" /></div>

<div><input type="submit" value="確認する" /></div>
</form>
</body>
</html>
<?php
break;

/*--- 入力チェック画面 ---*/
case 'check':
//-----------------------------------------
// 入力チェック。
//-----------------------------------------
//User Mail.
if ($mail == "") { //未入力処理。
$error_msg ='<font color="red">未入力...</font>';
} else if ( ereg("^[^@]+@[^.]+\..+", $mail) == false ) { //書式処理。
$error_msg ='メールアドレスの書式が正しくありません。';
}

if ($mail != "") { // 全角を半角に。
$mail = mb_convert_kana($_POST["mail"], "a", "utf-8");
}

?>
<html>
<body>
<h1>ご入力内容をご確認してください。</h1>

<div>* メールアドレス<br /><?php echo $mail; ?></div>

<?php

/*--- 未入力画面 ---*/
if ($error_msg != '') {
?>
<div>
<?php echo $error_msg; ?><br />
<form action="inquiry.php" method="post">
<input type="hidden" name="mode" value="input" />
<input type="hidden" name="mail" value="<?php echo $mail; ?>" />
<input type="submit" value="戻る" />
</form>
</div>
</body>
</html>
<?php
}

/*--- 送信可能画面 ---*/
} else {
?>
<form action="inquiry.php" method="post">
<input type="hidden" name="mode" value="send" />
<input type="hidden" name="mail" value="<?php echo $mail; ?>" />
<input type="submit" value="送信" />
</form>
<form action="inquiry.php" method="post">
<input type="hidden" name="mail" value="<?php echo $mail; ?>" />
<input type="submit" value="戻る">
</form>
</body>
</html>
<?php
}

/*--- 送信画面 --*/
case 'send':

}
?>

投稿日時 - 2011-05-30 23:15:48

お礼

長文の回答を頂きありがとうございます。たしかに分かりやすいですね。

投稿日時 - 2011-06-02 14:05:29

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

エラーメッセージと本文を分けるのが一番早いのではないかと思います。

投稿日時 - 2011-05-29 13:03:37

お礼

回答ありがとうございます。
出来ればPGを書いていただければと思いました。

投稿日時 - 2011-05-30 22:26:27

あなたにオススメの質問