PHPフォームのラジオボタンの処理について - PHPプロ!Q&A掲示板

3558

  • 募集中!! 500P

PHPフォームのラジオボタンの処理について

質問日時 / 2012年1月27日 23:26    回答数 / 3件

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

キーワード / フォーム    ラジオボタン    メール   

ラジオボタンでの処理でうまく入力ページから完了→メールへ送るまでの流れで正しく処理されず困っております。大変申し訳ありませんが、ご教授いただきたくお願いいたします。

■以下のページ構成となります。
・form1.php →入力ページ
・form2.php →確認ページ
・form3.php →完了ページ
・form1_view.php →入力ページのテンプレート
・form2_view.php →確認ページのテンプレート
・form3_view.php →完了ページのテンプレート

■ラジオボタンで「区分(kubn)」の項目を作成し、「個人(pr)」「法人(co)」のいずれかを選択させる内容です。

■form1.php
  1. <?php
  2. // セッション開始
  3. session_start();
  4. // セッションIDを変更
  5. session_regenerate_id(TRUE);
  6.  
  7. //必要なファイルを読み込み
  8. require '../../libs/functions.php';
  9.  
  10. //テンプレートに渡す変数の初期化
  11. $data = array();
  12.  
  13. //テンプレートに渡す変数の表示
  14. $data['kubn'] = isset($_SESSION['kubn']) ? $_SESSION['kubn'] : NULL;
  15.  
  16. //テンプレートの表示
  17. display('form1_view.php' , $data);
  18.  
  19. $data = array();
  20. ?>

■form1_view.php
  1. <div id="form">
  2.             <?php if (isset($error)) : ?>
  3.             <?php foreach ($error as $val)?>
  4.             <font color="red"><?php echo $val?></font><br />
  5.             <?php endforeach?>
  6.             <?php endif?>
  7.             
  8.             <form action="../php/form2.php" method="post">
  9.             <dl class="clearfix mailform">
  10.             <dt>お問い合わせ区分:</dt>
  11.             <dd>
  12.             <?php
  13.       $prv = '個人';
  14.       $cop = '法人';
  15.       $kubn = array('1''2');
  16.       
  17.       echo ' <label><input type="radio" name="kubn" value="' . $kubn[1] . '" />'
  18.       . $prv . '</label>' . "\n" ;
  19.       echo ' <label><input type="radio" name="kubn" value="' . $kubn[2] . '" />'
  20.       . $cop . '</label>' . "\n" ;
  21.        ?>
  22.             </dd>
  23.             </dl>
  24.             <p>
  25.             <input type="submit" value="確認画面へ" />
  26.             </p>
  27.             <input type="hidden" name="ticket" value="<?php echo $ticket?>" />
  28.             </form>
  29.             </div>

■form2.php

  1. <?php
  2.  
  3. // セッション開始
  4. session_start();
  5. // セッションIDを変更
  6. session_regenerate_id(TRUE);
  7.  
  8. //必要なファイルを読み込み
  9. require '../../libs/functions.php';
  10.  
  11. //POSTされたデータをチェック
  12. $_POST = checkInput ($_POST);
  13.  
  14. //変数にPOSTされたデータを代入
  15. $kubn = isset($_POST['kubn'])   ? $_POST['kubn']    :NULL;
  16.  
  17. //POSTされたデータを整形
  18. $kubn = trim($kubn);
  19.  
  20. //エラーチェックを保存する配列の初期化
  21. $error = array();
  22.  
  23. //必須項目のチェック
  24. if ($kubn == '') {
  25.   $error[] = '区分は必須項目です。';
  26.   }
  27.  
  28. //エラー数を確認
  29. if (count($error) > 0) {
  30.   //エラーがある場合は、入力フォームを表示
  31.   $data = array();
  32.   $data['error']    = $error;
  33.   $kubn['error']    = $kubn;
  34.   $data['ticket']   = $ticket;
  35.   display('form1_view.php'$data);
  36. }
  37. else {  //エラーが0の場合
  38.  
  39. //POSTされたデータをセッション変数に保存
  40. $_SESSION['kubn']     = $kubn;
  41.  
  42. //確認画面を表示
  43. $data = array();
  44. $data['kubn'] = $kubn;
  45. $data['ticket'] =$ticket ;
  46. display('form2_view.php' , $data);
  47. }
  48.     
  49. //テンプレートの表示
  50. display('../php/form2_view.php' , $data);
  51.  
  52. ?>

■form2_view.php

  1. <div id="form">
  2.             <?php if (isset($error)) : ?>
  3.             <?php foreach ($error as $val)?>
  4.             <font color="red"><?php echo $val?></font><br />
  5.             <?php endforeach?>
  6.             <?php endif?>
  7.             
  8.             <form action="../php/form2.php" method="post">
  9.             <dl class="clearfix mailform">
  10.             <dt>お問い合わせ区分:</dt>
  11.             <dd>
  12.             <?php
  13.       $prv = '個人';
  14.       $cop = '法人';
  15.       $kubn = array('1''2');
  16.       
  17.       echo $prv ;
  18.       echo $cop ; 
  19.       ?>
  20.             </dd>
  21.             </dl>
  22.             <div>
  23.             <form action="form1.php" method="post">
  24.             <p><input type="submit" value="入力画面に戻る" /></p>
  25.             </form>
  26.             <form action="form3.php" method="post" class="spacer">
  27.             <input type="hidden" name="ticket" value="<?php echo $ticket?>" />
  28.             <p><input type="submit" value="送信する" /></p>
  29.             </form>
  30.             </div>

■form3.php

  1. <?php
  2.  
  3. // セッション開始
  4. session_start();
  5.  
  6. //必要な関数を読み込む
  7. require '../../libs/functions.php';
  8.  
  9. //POSTされたデータをチェック
  10. $_POST = checkInput($_POST);
  11.  
  12. //固定トークンを確認
  13. if (isset($_POST['ticket']$_SESSION['ticket'])) {
  14.   $ticket = $_POST['ticket'];
  15.   if ($ticket !== $_SESSION['ticket']) {
  16.     die('不正アクセスの疑いがあります。');
  17.     }
  18. } else {
  19.     die('不正アクセスの疑いがあります。');
  20. }
  21.  
  22. //変数にセッション変数を代入
  23. $kubn = $_SESSION['kubn'];
  24.  
  25. //メールの宛先
  26. $mailTo = '(メールアドレスを指定)';
  27. //return-Pathに指定するメールアドレス
  28. $returnMail = '(メールアドレスを指定)';
  29. //mbstringの日本語設定を行う
  30. mb_language('ja');
  31. mb_internal_encoding('UTF-8');
  32.  
  33. //fromヘッダーを作成
  34. $header = 'From: ' . mb_encode_mimeheader($name) . ' <' . $email . '>'
  35.  
  36. //メールの送信。セーフモードがオンの場合は第5引数が使えない
  37. if (ini_get('safe_mode')) {
  38.   $result = mb_send_mail($mailTo$subject$body$header);
  39. } else {
  40.   $result = mb_send_mail($mailTo$subject$body$header'-f' . $returnMail);
  41. }
  42.  
  43. //送信結果をお知らせする変数を初期化
  44. $_message = '';
  45. //メール送信の結果判定
  46. if ($result) {
  47.   $message = '送信完了!';
  48.   //セッション変数を破棄
  49.   $_SESSION = array();
  50.   session_destroy();
  51. } else {
  52.   $message = '送信できませんでした';
  53. }
  54.  
  55. $data = array();
  56. $data['message'] = $message;
  57. display('form3_view.php'$data);
  58.  
  59. ?>

■form3_view.php
  1. <dl class="clearfix mailform">
  2. <p class="app msg"><?php echo $message?></p>
  3.             </dl>
  4.       </div>

以上となります。アドバイスいただきたく何卒よろしくお願いいたします。


ツリー一覧

┗A01shimixform1_view.phpで、 >>CODE $kubn = array('1', '2'
 ┗A01-1ogms0418いただいたアドバイスから、 form2_view.php(確認ペ
  ┗A01-1-1shimix>form2_view.php(確認ページ)で、数値"1""2"と出力

回答一覧

並び替え:

A01
answerershimix [1月28日 01:25] (最終編集:1月28日 01:26)

form1_view.phpで、
  1. $kubn = array('1', '2');
としているのに
  1. echo ' <label><input type="radio" name="kubn" value="' . $kubn[1] . '" />' . $prv . '</label>' . "\n" ;
  2. echo ' <label><input type="radio" name="kubn" value="' . $kubn[2] . '" />' . $cop . '</label>' . "\n" ;
と、$kubn[1]、$kubn[2]を使っていますよね。

$kubn = array(1=>'1', 2=>'2'); にするか、使う側で$kubn[0]、$kubn[1]にするかですよね(後者の方が普通でしょうか・・・)。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerogms0418 [1月29日 11:45]

いただいたアドバイスから、
form2_view.php(確認ページ)で、数値"1""2"と出力されてしまいます。
”個人””法人”と出力されるようにしたいのですが…

また、form3_view.phpとform3.phpも同じ処理になるかと思いますが、最終的にメールで送信される内容も数値ではなく、”法人””個人”で出力されるようにできればと思います。
できましたらアドバイスいただきたくお願いいたします。
すみませんが、よろしくお願いいたします。

この意見に回答する

ツリーへ TOPへ

A01-1-1 参考になった
replyershimix [1月29日 19:48]

>form2_view.php(確認ページ)で、数値"1""2"と出力されてしまいます。
>”個人””法人”と出力されるようにしたいのですが…

受け取ったスクリプトでも

$kubn = array(1=>'1', 2=>'2'); 

としておいて、数値1,2を添え字にして表示することになります。



というか(根本的なことでが)いっそのこと
  1. echo '<label><input type="radio" name="kubn" value="個人" />個人</label>' . PHP_EOL ;
  2. echo '<label><input type="radio" name="kubn" value="法人" />法人</label>' . PHP_EOL ;
じゃダメなんですかね?

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

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