• ベストアンサー

入力フォームの関数の代入について!

お世話になっております。 ふと、疑問に思った事が御座います。 例えば、データベースからプロフィール情報(性別)を抽出したとします。 性別 <option value="<?=$sex?>" selected="selected"><?=$sex?></option> <option value="男性">男性</option> <option value="女性">女性</option> これを見て詳しい方なら笑っていらっしゃる方もいると思います。 男か女かを抽出しているんですけど、抽出したデータが男の場合、セレクトボックスに 「男」「男」「女」 女の場合 「女」「男」「女」 と言うように、<?=$sex?>が入っている分、無駄に一つ多くなってしまいますよね。。。 もちろん、データが空の場合、「白紙」「男」「女」となっているわけなんです。 phpの関数かなんかで定義みたいなものを付ける事は無理ですか・・・ データが男の場合男にセッティングのように・・・ ご教示お願い致します!

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

  • ベストアンサー
  • march4
  • ベストアンサー率50% (12/24)
回答No.1

//---------------------------- 性別 <option value="<?=$sex?>" selected="selected"><?=$sex?></option> <option value="男性">男性</option> <option value="女性">女性</option> //---------------------------- 入力フォームで性別を指定するようなページを作りたいわけですね。 で、初回訪問では、白紙、男、女、となり、これは問題ないわけですよね。 問題なのは、 POSTかGETか分かりませんが、その値を受け取ってきている場合に、 $sexに男、もしくは、女が入っているために、 男、男、女、もしくは、女、男、女という選択肢表示になるのですよね。 (どちらかと言うと、後者の方がイイ感じですね。照) ま、冗談は置いておいて、 いまいち、何をしたいと考えられているのか、分かりませんが、 たぶん、こういうことをしたいんだろう、という勝手な想像で以下、答えますね。 //--------------------------------- echo <<<EOM //性別 <select name='sex'> <option value='0' {$selected0}></option> <option value='1' {$selected1}>男性</option> <option value='2' {$selected2}>女性</option> </select> EOM; //「<<<ヒアドキュメントという技ですが、これはどうでもいいです。 //大事なのは、「<option value=~~~」の所です。 //--------------------------------- まず、上のフォームの形態を基本として、 //以下、POSTとして記述してますが、GETの場合は入れ換えてね。 //ポストで値を受け取れなかったら、白紙へ誘導。 if(isset(!$_POST['sex'])){  $_POST['sex'] = 0; } switch($_POST['sex']){    //男性をセレクト  case 1:  $selected1 = "selected='selected'";  $selected2 = "";  $selected0 = "";  break;  //女性をセレクト  case 2:  $selected1 = "";  $selected2 = "selected='selected'";  $selected0 = "";  break;  //オカマをセレクト(冗談)  default:  $selected1 = "";  $selected2 = "";  $selected0 = "selected='selected'";  break; } という条件分岐を、 フォームの手前でしてやれば、 男性の値を受け取った時には、 男性にセレクト(selected)された状態で、 表示されるようなフォームページが出来上がるかと思います。 また、値を受け取れていない場合(例えば、初回訪問時など)には、 「default:」へ誘導され、 『白紙』がセレクトされる仕組みとなっています。 やりたいことは、こういうことでしょうか? 違ったら、ごめんなさい。笑 また、動くか試してないので、間違っていたらごめんなさい。

iinnffoo
質問者

お礼

お世話になります! お蔭様で完成できました(^^:) 親切に説明頂き有り難う御座います! 言葉でするのは簡単なんですけどいざプログラムになると難しいですね。。。 また一つ勉強させていただきました! ありがとうございます!m(_ _)m

その他の回答 (1)

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.2

これじゃ駄目ですか。   <?php   $sex='女';   $male=$sex=='男'?' selected="selected"':''; $female=$sex=='女'?' selected="selected"':''; print <<<SEL <form> <select name="sex"> <option value="男性"{$male}>男性</option> <option value="女性"{$female}>女性</option> </select> </form> SEL;   ?>

iinnffoo
質問者

お礼

完成できました!(*^-^*) 自分には知らない色々な関数がまだまだあるんですね・・・。 感謝いたします! ご協力有り難う御座いました!

関連するQ&A