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

解決済みの質問

PHPを勉強しながらメールフォームの作成をしています。

PHPを勉強しながらメールフォームの作成をしています。
PHPは初心者です。

ご質問なのですが、メールフォームでinput type="hidden"で値の受け渡しをしたいと思っています。
SESSIONなどありますが、こちらはのちのち勉強していきます。
まずメールフォームから確認画面を表示する流れにしていきたいのですが、ここでご質問があります。

ソースは下記のとおりになります。
<!-- index.php -->
<form action="comfirm.php" method="post">
<dl>
<dt>名前</dt>
<dd><input type="text" name="name" value="" /></dd>
<dt>性別</dt>
<dd>
<input type="radio" name="sex" value="男" />男
<input type="radio" name="sex" value="女" />女
</dd>
<dt>カテゴリ</dt>
<dd>
<select name="category">
<option value="サッカー">サッカー</option>
<option value="野球">野球</option>
<option value="バスケ">バスケ</option>
<option value="バレー">バレー</option>
</select>
</dd>
</dl>
<input type="hidden" name="contact" value="form" />
<input type="submit" value="送信" />
</form>
としており、

<!-- comfirm.php -->
<?php
$name = $_POST['name'];
$sex = $_POST['sex'];
$category = $_POST['category'];
?>
<html>
<body>
<dl>
<dt>名前</dt>
<dd><?php echo $name; ?></dd>
<dt>性別</dt>
<dd><?php echo $sex; ?></dd>
<dt>カテゴリ</dt>
<dd><?php echo $category; ?></dd>
</dl>
</body>
</html>
となっております。
ここでconfirm.phpに渡る際ににエラー表示をしたいのですが、記述の仕方がどうもわかりません・・・
confirm.phpに渡るときに名前が記入されていなかったらindex.phpに名前が記入されていませんと表示させたいのですがどなたかご教授いただけませんでしょうか?

初心者のため、わからないことがあると思いますが、いろいろと教えていただけたら幸いです。

宜しくお願いいたします。

投稿日時 - 2010-07-13 22:58:01

QNo.6036551

すぐに回答ほしいです

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

手法はいくつかありますが、
confirm.phpの最初のところで、POSTされてきた値が不正だったら、
<?php

if(不正だったら){
//エラーを表示する処理
exit();
}

?>
とすれば、エラー表示でプログラムが終了します。
以下にHTMLが書いてあっても、exitまでしか表示されなくなります。
エラーを表示する処理の中に、「戻るボタンで戻ってください」といった文言でも書いておけば、
ユーザはブラウザの戻るボタンで戻ると思います。

もしくは、エラー表示+index.phpで書いたHTMLと同等のものをそこに書いてやれば、index.phpに戻ったように表示されます。

いかがでしょうか。

投稿日時 - 2010-07-14 03:12:23

お礼

お忙しい中、ご回答有難う御座います。

戻るボタンでユーザが戻るのではなくindex.phpのサブミットをクリックした時点で表示をされるようにしたいのですが、下記のNO.1さんのおっしゃるとおりJavascriptを使用しないとダメでしょうか?

投稿日時 - 2010-07-14 08:27:07

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

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

回答(4)

ANo.4

Javascriptで実装した場合でも、結局JavascriptをOffにされた場合に、正しく動作出来ないので、PHP側での処理は必須と思います。


結局、効率は悪いですが、confirm.phpの方には、if文で振り分けて、二種類のHTMLを記述する必要があります。


----confirm.php--------
<?php

if(不正な値があった場合){
//この中に、index.phpと同じ内容(+エラーメッセージ)のHTMLを記述する。
?>
<html>
<body>
<div>不正な文字がありました。</div>
<input type="text" name="name" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES)?>" />
・・・・・・・
</body>
</html>
<?php

}else{

//この中に、確認画面のHTMLを記述する。
?>
<html>
確認画面ですよ
・・・・・・・・・・・
</html>
<?php
}

?>


こんな感じで。
もし、index.phpと同じ記述を何度もすることに疑問があるのであれば、試行錯誤してみてください。
godcaseさんの書いたように、全部index.php内で処理する方法もあります。

投稿日時 - 2010-07-15 01:19:17

ANo.3

confirm.phpにエラー表示じゃなく、index.phpにエラー表示?
参考にしたサイトがJavascを使ってたらJavascで作ったらいいのに。

無理やりだけどindex.phpで。
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
質問文内のconfirm.phpの部分+#2の方のエラー表示
}else {
質問文内のindex.phpの部分
}

素直にJavascでやったら?

投稿日時 - 2010-07-14 17:27:14

ANo.1

comfirm.phpにPOSTで渡してからなら普通に$nameなどのチェックする値が空かどうかのチェックをすれば良いだけ。
if文くらい分かるよな?
comfirm.phpにデータが渡される前にチェックをしたければindex.phpの段階でJavaScriptでチェック処理をする。
それよりindex.phpはPHPにしておく必要はあるのか?そのソースならhtmlで十分だろ。

投稿日時 - 2010-07-14 01:31:18

お礼

お忙しい中、ご回答有難う御座います。

if文もかねて今勉強しております。
やはりJavascriptを使わないとダメなんでしょうか?
Javascriptは全然勉強をしていなかったため、わからず困っています・・・

投稿日時 - 2010-07-14 08:23:31

あなたにオススメの質問