メールフォーム エラーチェック - PHPプロ!Q&A掲示板

2824

  • 0P

メールフォーム エラーチェック

質問日時 / 2010年7月26日 22:56 (最終編集:7月27日 09:52)    回答数 / 6件

Questioner:  h032313  このエントリーをはてなブックマークに追加 

キーワード / php    メールフォーム    エラーチェック   

現在PHPの勉強をしています。初心者のためご教授いただければと思います。

メールフォームを作成しており、エラーチェックで困っています。
簡単に流れを説明しますとフォーム画面で入力をしてもらったら確認画面へと移行します。
ここでエラーがあった場合、confirm.phpにてエラーチェックをし、form.phpに戻り、エラーがなければ確認画面にて入力した、項目が表示されるようにしたいと思っています。

ソースは下記のとおりになります。

  1. form.php
  2. ---------------------- */
  3. <html>
  4. <body>
  5. <form action="confirm.php" method="post">
  6. 名前:<input type="text" name="name" value="" /<?php echo $errmsg['name'] ;?><br>
  7. 内容:<textarea name="comment" rows="5" cols="40"></textarea><?php echo $errmsg['comment'] ;?><br>
  8. <input type="hidden" name="contact" value="form" />
  9. <input type="submit" name="submit" value="確認" />
  10. </form>
  11.  
  12. </body>
  13. </html>
  14.  
  15. confirm.php
  16. ---------------------- */
  17. <?php
  18. $name     = $_POST['name'];
  19. $comment  = $_POST['comment'];
  20.  
  21. if(isset ($_POST['contact'])) {
  22. $errmsg = array()
  23. if(empty($name)){ 
  24. $errmsg['name'] = '未入力'
  25. } 
  26. if(empty($comment)){ 
  27. $errmsg['comment'] = '未入力'
  28. }
  29.     
  30. if (count($errmsg) != 0) { 
  31. header("Location: form.php")
  32. exit
  33. }
  34. }
  35. ?>
  36.  
  37. <html>
  38. <body>
  39. 名前:<?php echo $name?><br />
  40. 内容:<?php echo $comment?><br />
  41. </body>
  42. </html>

としております。
if (count($errmsg) != 0) { 
header("Location: form.php"); 
exit;
上記のようにするとエラーチェックの表示がされません。

require(form.php);にするとform.phpが表示されるのですがURLを見るとconfirm.phpの状態になっております。
header("Location: form.php");を使用してのエラーチェックをしたいのですが、どのように記述したらよろしいのでしょうか?
上記の内容でどなたかご教授いただけないでしょうか?

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

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01shimixこの意見は質問者によって削除されました。
┣A02moetenh032313さんこんにちは。 >>CODE if (count($errm
┣A03shimixheaderで遷移するのであれば、QueryStringで渡すかCoo
┃┗A03-1h032313お忙しい中、ご教授有難う御座います。 また、レスの
┣A04yuukiこんにちは h032313さんはconfirm.phpに書いてある。
┃┗A04-1h032313こんばんわ。 お忙しい中ご返信有難う御座います。
┗A05win_phpセッションをつかえばいいのでは? $_SESSION['ERR

回答一覧

並び替え:

A01
answerershimix [7月27日 06:50]

この意見は質問者によって削除されました。

ツリーへ TOPへ

A02
answerermoeten [7月27日 10:06]

h032313さんこんにちは。

  1. if (count($errmsg) != 0) { 
  2.   header("Location: form.php"); 
  3.   exit
  4. }

の部分を

  1. if (count($errmsg) != 0) { 
  2.   var_dump( $_POST );
  3.   var_dump( $errmsg );
  4.   //header("Location: form.php"); 
  5.   exit
  6. }

っとすればとりあえずエラーメッセージが閲覧できるかと思います。

あと、form.phpへ直接ブラウザからアクセスすればrequire(form.php);は必要ないかと思います。

この意見に回答する

ツリーへ TOPへ

A03
answerershimix [7月27日 10:17] (最終編集:7月27日 10:33)

headerで遷移するのであれば、QueryStringで渡すかCookieを使って渡すか・・くらいしかないと思います。

confirm.phpでエラーメッセージの配列の数をチェックする直前で
  1. SetCookie('ErrName', $errmsg['name']);
  2. SetCookie('ErrComment', $errmsg['comment']);
としておいて、form.phpの先頭で
  1. <?php
  2. if (isset($_COOKIE['ErrName'])) { $errmsg['name'] = $_COOKIE['ErrName']}
  3. if (isset($_COOKIE['ErrComment'])) { $errmsg['comment'] = $_COOKIE['ErrComment']}
  4. ?>
で取り出せばいいんじゃないかと思います。



(以下蛇足)
エラーでない(入力された)項目まで再入力になりますので、POSTされた値を初期値にセットした方がいいんじゃないですかね。そこまで考えるとform.phpに戻さずにconfirm.phpでフォーム表示にする(もしくはform.phpとcomnfirm.phpを同一スクリプトにしてしまう)方がベターじゃないでしょうか?前のレス(requireでURLが変わらなくてもいいんじゃない?って書いた記憶があります)は削除されてしまったようなので、そういう手法はお気に召さないのでしょうけど。

#まぁ、気に入らないからって回答を削除するのもどーかなとは思いますけどね・・

この意見に回答する

ツリーへ TOPへ

A03-1
replyerh032313 [7月27日 22:13]

お忙しい中、ご教授有難う御座います。
また、レスの削除大変申し訳ありません。

ミスで削除してしまいました。

色々と有難う御座います。
$_COOKIEもいずれは勉強しようと思っていました。
いくつか本を読んでいたのですが、このような使い方があるとは思いませんでした。

有難う御座います。

この意見に回答する

ツリーへ TOPへ

A04
answereryuuki [7月27日 11:57] (最終編集:7月27日 12:06)

こんにちは
h032313さんはconfirm.phpに書いてある。
$errmsg['name'] = '未入力'; 
などの変数をform.phpで使えると思っているみたいですね。

$errmsg等の普通の変数は基本、同一スクリプト内でしか使えません。
別のスクリプトに値を渡す場合は主にPOSTがGETを使用します。

header("Location: form.php"); 
ではform.phpにリダイレクトするだけなので何も値を渡していないんです。

h032313さんのイメージ通りに動かすのであれば

  1. header("Location: form.php?errmsg_name=".$errmsg['name']."&errmsg_comment=".$errmsg['comment']);

とリダイレクトの際にエラーメッセージをGET変数に渡してやって、
form.phpの最初に

  1. <?php
  2. if(isset ($_GET['errmsg_name']) ){
  3.   $errmsg['name'] = $_GET['errmsg_name'];
  4. }
  5. if(isset ($_GET['errmsg_comment']) ){
  6.   $errmsg['comment'] = $_GET['errmsg_comment'];  
  7. }
  8. ?>
という記述を追加すればいいかなと思います。
しかしこのやり方は全くスマートではないので、そこら辺はこれから身につけてください。

この意見に回答する

ツリーへ TOPへ

A04-1
replyerh032313 [7月27日 22:09]

こんばんわ。
お忙しい中ご返信有難う御座います。

GETを使用してのエラーチェックになりますか・・・
いずれはGETも使いこなせればと思いますが、今は色々と調べながらやっているためわけがわからなくなっています。

でも本当にご教授いただき有難う御座います。
今後参考にさせていただきます。

この意見に回答する

ツリーへ TOPへ

A05
answererwin_php [8月6日 18:45] (最終編集:8月16日 19:47)

セッションをつかえばいいのでは?

$_SESSION['ERROR'] = array();

if(empty($name)){
$_SESSION['ERROR']['name'] = "名前が入力されていません!";
}

if(empty($comment)){
$_SESSION[ERROR']['comment'] = "コメントが入力されていません!";
}

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)