Menu

POSTで受けたデータを戻す

2015年8月26日00:17  投稿者 : PINION

form

今回は、コンタクトフォームなど、フォームからPHPで受け取ったデータを、元のフォームパーツの中身に戻して表示させる方法です。

受け取ったデータを、ただ記録したり、メールで送ったりするだけであれば、わざわざそんな事をする必要はありません。
しかし、例えば必須項目をチェックして未入力な場合に、すでに入力されている項目を返してやるなんて事をする場合に必要になって来ますよね。
一つ入力漏れがあったから、すべての項目を入力し直し…なんて事になったら、面倒で利用するのをやめてしまうかもしれません。

方法はいくつもあります。
簡単なのは、フォームとは別にフォーム内のinput や textareaなどのデータを持っておく方法。

$frm_list = array(
   'name1' => 'text',
   'name2' => 'textarea',
   'name3' => 'radio'
);

なんて形でデータを持っておいて、フォームのほうはvalueを設定せずに、最後にnameを設定するというルールで作って、$form という変数にフォーム全体を読み込んでおく。

foreach($frm_list as $name => $frm_parts){
   foreach($_POST as $key => $value){
      if($key == $name){
         $sarch = 'name="' . $name . '"';
         switch($frm_parts){
            case 'text':
               $form = str_replace($sarch , $sarch . ' value="' . $value . '"', $frm);
               break;
            case 'textarea':
               $form = str_replace($sarch . '>' , $sarch . '>' . $value , $frm);
               break;
            case 'radio':
               $form = str_replace('value="' . $value . '"' , 'value="' . $value . '" checked="checked"' , $frm);
               break;
         }
   }
}

ってな感じで、差し込んでやると、反映させる事が出来ます。
このままでは checkbox や select なんかには対応出来ないのですが、複数選択に対応させようとすると、そこでもう一回foreachなんかで回してやる必要がありますね。

これはあくまで一例であり、やり方は色々です。
今回のように、別にデータを持って置くのではなく、出来上がったフォームを読み込んで、自動的にnameとタイプを抽出する方法もあるでしょう。
これなら、処理部分を一度作ってしまえばフォームだけ変更して、いくらでも使いまわしが出来ます。最初に面倒臭い事をやってしまえば、あとが楽だという事ですね。

ちなみに、当サイトのコンタクトフォームは、上記のどちらでもありません。
最初のフォームパーツの配列を、もう少し細かく設定しておいて、そこからフォームそのものを自動生成していて、POSTデータがあればフォーム生成段階で値も差し込んでいます。

やり方は色々ありますので、どれが一番使い勝手が良いか、いろいろ試してみるのが良いと思います。

コメントを残す

メールアドレスが公開されることはありません。

コメントフィード

トラックバックURL : http://www.mp-create.com/18.html/trackback

PHP & MySQLトップ