PHPのセレクトボックスの初期値の設定方法

このQ&Aのポイント
  • PHPのセレクトボックスで初期値を設定する方法について解説します。
  • 配列を使用してセレクトボックスの値を指定し、条件に応じて初期値を設定することができます。
  • 具体的なコード例を示しながら、初期値の設定方法について詳しく説明します。
回答を見る
  • ベストアンサー

PHPのセレクトボックスの初期値について

phpのセレクトボックスの値を配列で指定したのですが初期値の表示がうまくいきません。 以下は現在のソースです。 $start_time[$j]はDBの取得値で取得配列と表示配列が一致するものを初期表示する というコードが以下になります $time_array = array( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" ); for( $a=0; $a < count( $time_array ); $a++){ $selectedStartTime =($time_array[$a] == $start_time[$j])?" selected":""; $startTimeSelectBox .= "\t<option value=\"{$time_array[$a]}\"{$selectedStartTime}>{$time_array[$a]}</option>\n"; } 疑問点ですが別条件で(たとえば$start_time[$j]にデータが0の時)配列の指定した値を選択したいです。 下記のようにそれぞれのvalue値の時に条件を指定すればできるのですが配列の時には どのように初期値を設定すればいいかわかりません。        <option value="0" <?php if($start_time[$j] == "0") { echo "selected"; } ?>> 0 <option value="1" <?php if($start_time[$j] == "1") { echo "selected"; } ?>> 1</option> <option value="2" <?php if($start_time[$j] == "2") { echo "selected"; } ?>> 2</option>         ・         ・         ・         ・ 条件を指定したときに初期値を設定したいです。どのように実装すればいいでしょうか。 よろしくいお願いします。

  • PHP
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
回答No.4

> 初期値が取得できたときはその初期値と一致した配列の値を表示する、、、 > 初期値が取得できなかった場合は配列の決まった値を初期表示する、というようなことがしたいのです つまり$start_time[$j]の値が取得できない場合ということですよね? それなら$start_time[$j]が取得できなかった場合のコードを書けば済むだけだと思いますが。 例えばPHPは緩いですから、取得できなかったら意図的に$start_time[$j]を作り上げてしまえば、後のコードも変更する必要ありませんよね。

k-karasu
質問者

お礼

回答ありがとうございます。 なるほど、そのような方法があったわけですね。 取得比較したときに一致しなければ・・・という使い方ができることで後述も変更なくいけました。 ありがとうございました。。

その他の回答 (3)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

初期値は$start_time[$j]で与えられているんですよね。それで <option value="0" <?php if($start_time[$j] == "0") { echo "selected"; } ?>> 0 では問題なくて、 $selectedStartTime =($time_array[$a] == $start_time[$j])?" selected":""; $startTimeSelectBox .= "\t<option value=\"{$time_array[$a]}\"{$selectedStartTime}>{$time_array[$a]}</option>\n"; だとダメということですか?下記のソースで試しましたが、問題なく動作します。原因は別の部分じゃないですかね。少なくとも提示されたソースだけからは再現不可能ですので・・・ (テストスクリプト) <select> <?php $time_array = array( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" ); $j = 0; $start_time[$j] = "21"; // selectedにする値 $startTimeSelectBox = ''; for( $a=0; $a < count( $time_array ); $a++){ $selectedStartTime =($time_array[$a] == $start_time[$j])?" selected":""; $startTimeSelectBox .= "\t<option value=\"{$time_array[$a]}\"{$selectedStartTime}>{$time_array[$a]}</option>\n"; } print $startTimeSelectBox; ?> </select>

k-karasu
質問者

お礼

回答ありがとうございます。 取れたときと取れなかった時で値を別に指定して処理をすることでうまくいきました。

k-karasu
質問者

補足

回答ありがとうございます。 すみません、提示したソースが不足していました。 配列の方も動作するんですけど配列の方は初期値と一致した配列の文字を表示するのみなんですが        <option value="0" <?php if($start_time[$j] == "0") { echo "selected"; } ?>> 0 <option value="1" <?php if($start_time[$j] == "1") { echo "selected"; } ?>> 1</option> <option value="2" <?php if($start_time[$j] == "2") { echo "selected"; } ?>> 2</option> <option value="10" <?php if($start_time[$j] == "10") { echo "selected"; } if($start_time[$j] == "0" ){ echo "selected";} ?>> 10</option> のように初期値が0の時とかに配列の決まった値を指定したいのです。 for( $a=0; $a < count( $time_array ); $a++){ $selectedStartTime =($time_array[$a] == $start_time[$j])?" selected":""; if ($start_time[$j] == "0"){$selectedStartTime = ($time_array[0])?" selected":""; } $startTimeSelectBox .= "\t<option value=\"{$time_array[$a]}\"{$selectedStartTime}>{$time_array[$a]}</option>\n"; } 今こんな風に書いているのですが配列の最後の値がvalue値に代入されてしまいます。 初期値が取れたとき、取れなかった時を実装したいということです。 長々と失礼しました。よろしくお願いします

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

参考にどうぞ http://www.phppro.jp/qa/4388

k-karasu
質問者

お礼

参考にさせていただきました。 ありがとうございます。

k-karasu
質問者

補足

回答ありがとうございます。 参考にさせていただきます。

回答No.1

何がしたいのがよくわかりませんが、上のコードで済むのでは。 結局PHP上の添字$jの値が0=HTML上のvalueが0、1は1、2は2なんですよね。

k-karasu
質問者

お礼

回答ありがとうございます。

k-karasu
質問者

補足

回答ありがとうございます。 あっています。 言葉だけで説明は難しいのですが、 初期値が取得できたときはその初期値と一致した配列の値を表示する、、、 初期値が取得できなかった場合は配列の決まった値を初期表示する、というようなことがしたいのです よろしくお願いします。

関連するQ&A

  • phpのセレクトボックスの配列について

    お世話になっています。 PHPのセレクトボックスの設定でわからないことがあります。 一度質問させていただいたのですが連なる点でわからないとこが出たので質問させていただきます。 不明点は3つあります。 1.セレクトボックスの値を配列で設定する 配列で設定しておけばその配列を複数使用しても参照配列さえメンテすればいいと思うので配列を想定しています 2.配列で設定したときのセレクトボックスの初期値について セレクトボックスの値をベタ書きしている場合は単にselectedすればいいと思うのですが配列の場合厳密なselectedの方法が不明です 3.配列での選択値をPOSTした場合 3つめが最もはまっています以下のソースだと選択値が配列の値が表示されますし、初期値も表示できていますが POSTした値がまともに渡されていません POST先でDB処理を想定しているのですがdate型だとすべて[00:00:00]になってしまいます。 配列を使用しないパターンだと1.2.3全てうまくいくのですがメンテナンスがしづらいので配列で指定したいです 何か、良い方法があればご教授ください //配列の値 $time = array( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" ); $minute = array ("00", "15", "30", "45"); for( $a=0; $a < count( $time_array ); $a++){ $selectedStartTime =($time_array[$a] == $start_time[$j])?" selected":""; $startTimeSelectBox .= "\t<option value=\"{$time_array[$a]}\"{$selectedStartTime}>{$time_array[$a]}</option>\n"; } for($a=0; $a < count($minute_array); $a++){ $selectedStartMinute =($start_minute[$j] == $minute_array[$a])?" selected":""; $startMinuteSelectBox .="\<option value=\"{$minute_array[$a]} \"{$selectedStartMinute}>{$minute_array[$a]}</option>\n"; } <td><select name="start_time<?php echo $day ?>" onblur = "func()"> <?php echo $startTimeSelectBox ?> </select> : <select name="start_minute<?php echo $day ?>" onblur = "func()"> <?php echo $startMinuteSelectBox ?> </select> </td> かなり詰まっています。よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP

    PHPで無駄なコーディングをしない為、ループでまわしたいのですが関数が入り、ややこしくなっています。どうしたらいいですか? <select name="nminute"> <option value="0" <?php if(strstr($nminute,'0')) echo"selected"; ?>>0</option> <option value="1" <?php if(strstr($nminute,'1')) echo"selected"; ?>>1</option> <option value="2" <?php if(strstr($nminute,'2')) echo"selected"; ?>>2</option> <option value="3" <?php if(strstr($nminute,'3')) echo"selected"; ?>>3</option> <option value="4" <?php if(strstr($nminute,'4')) echo"selected"; ?>>4</option> <option value="5" <?php if(strstr($nminute,'5')) echo"selected"; ?>>5</option> <option value="6" <?php if(strstr($nminute,'6')) echo"selected"; ?>>6</option> <option value="7" <?php if(strstr($nminute,'7')) echo"selected"; ?>>7</option> <option value="8" <?php if(strstr($nminute,'8')) echo"selected"; ?>>8</option> <option value="9" <?php

    • ベストアンサー
    • PHP
  • phpでのセレクトボックスの値を配列で指定

    セレクトボックスの値をループで繰り返してvalueを設定しているのですがvalueの数が多くなればかなり見づらく 修正もしにくいのでvalue値を配列などで指定したいと思っています。 その場合、どのようにしてvalue値に配列を設定すればよろしいのでしょうか。 また配列でvalueを設定した場合[selected]などで初期値を設定する方法も分からなかったので 何かわかりやすくかつ少ない行数で胥吏できる方法があればご教授お願いします。 <?php for ($data = 1; $data < 5; $data++) { ?> <tr><td> <select name="test<?php echo $data?>"> <option value=1>1 <option value=2>2 <option value=3>3 <option value=4>4 <option value=5>5 <option value=6>6 <option value=7>7 <option value=8>8 <option value=9>9 <option value=10>10 </select> <?php } ?> ※option valueが20とか30とかになるとかなり見づらい処理かなと思います。 配列を変えるだけでいいようにしたいです。

    • 締切済み
    • PHP
  • PHP

    HTML文ですが、これをPHPでループで回して無駄なコーディングを直したい。 どうしたらいいですか? <select name="nhour"> <option value="0" <?php if($nhour == '0') echo"selected"; ?>>0</option> <option value="1" <?php if($nhour == '1') echo"selected"; ?>>1</option> <option value="2" <?php if($nhour == '2') echo"selected"; ?>>2</option> <option value="3" <?php if($nhour == '3') echo"selected"; ?>>3</option> <option value="4" <?php if($nhour == '4') echo"selected"; ?>>4</option> <option value="5" <?php if($nhour == '5') echo"selected"; ?>>5</option> </select>

    • ベストアンサー
    • PHP
  • phpで作る親子のコンボボックスについて

    phpだけでコンボボックスを作りたいのですが良い方法が見つかりません。 javascriptを使う方法は下記サイトに方法が載っているのでわかるのですが、 http://phpjavascriptroom.com/exp.php?f=include/js/selectoption/pulldown.inc&ttl=%E9%80%A3%E5%8B%95%E3%83%97%E3%83%AB%E3%83%80%E3%82%A6%E3%83%B3 post関数を使えば良いと思いますが、ページの移動なく、クリックイベントを条件分岐できないかと思案中です。助言をお願いします。 <?php $titles = array('さんぷる','サンプル'); $example = array('1', '2'); echo '<select name="test">'; foreach ($titles as $key => $sample) { if ($ibanners == $ibanner) { echo '<option name="' . $example[0] . '" value="' . $example[0] . '" selected="selected">' . $sample . '</option>'; } else { echo '<option name="' . $example[1] . '" value="' . $example[1] . '">' . $sample . '</option>'; } } echo '</select>'; $momo = array('さっかー','やきゅう','ばすけ','ごるふ'); $tetsu = array('サッカー','ヤキュウ','バスケ','ゴルフ'); echo '<select name="saikoro">'; foreach($momo as $bonbi) { if ($GODbonbi == $bonbi) { echo '<option name="カテゴリ01" value="' . $bonbi . '" selected="selected">' . $bonbi . '</option>'; } else { echo '<option name="カテゴリ01" value="' . $bonbi . '">' . $bonbi . '</option>'; } } foreach($tetsu as $bonbi) { if ($GODbonbi == $bonbi) { echo '<option name="カテゴリ02" value="' . $bonbi . '" selected="selected">' . $bonbi . '</option>'; } else { echo '<option name="カテゴリ02" value="' . $bonbi . '">' . $bonbi . '</option>'; } } echo '</select>'; ?>

    • ベストアンサー
    • PHP
  • セレクトボックスの選択を保持したい。入力フォーム。

    セレクトボックスの選択を保持したい。入力フォーム。PHP 送付画像のような、セレクトボックスの「時間指定1」で選択したい時間をセレクトボックスから選んで、確認画面へのボタンをクリックすると、「時間指定1」にまた、戻ってしまいます。ここのセレクトボックスの選択をキープしたいのですが、どうコードを書けば良いのかわかりません 提示したコードにもあるように 参考書に書いてあったのですが、セレクトボックスの選択をキープするプログラミングコードを以下のようにすれば良いと。そのまま書いてみたのですが、確認画面へのボタンをクリックすると、やはり「時間指定1」に戻ってしまいます。 <option value="10:00~11:00"><?php if(isset($timehh1) && $timehh1==="10:00~11:00") { echo "selected" ;} ?>>10:00~11:00</option> どこが間違っているのでしょうか? コードを教えて頂けないでしょうかいただけないでしょうか?よろしくお願いいたします。困っています。 以下書いたコードになります。 <?php session_start(); $errors = array(); if(isset($_POST['submit'])) { $time4 =$_POST['time4']; $timehh1 =$_POST['timehh1']; if($time4 === "") { $errors['time4'] ="第1希望:※月と日付を選択してください。 "; } if($timehh1 === "") { $errors['timehh1'] ="第1希望:※時間指定1を選択してください。 "; } if(count($errors) === 0) { $_SESSION['time4'] = $time4; $_SESSION['timehh1'] = $timehh1; } if(isset($_GET['action']) && $_GET['action'] === 'edit'){ $time4 = $_SESSION['time4']; $timehh1 = $_SESSION['timehh1']; } ?> <!DOCTYPE html> <html> <head> <meta content="text/html; charset=utf-8"/> <?php echo "<ul>";foreach($errors as $value) { echo "<li>"; echo $value; echo "</li>"; } echo "</ul>"; ?> </head> <body> <form action ="form1.php" method ="post"> <td class="b">第1希望:<span class="fontS">※</span></td> <input type="date" id="input_date1" class="cal lt_004 hasDatepicker" name="time4" value="<?php if(isset($time4)){ echo $time4; } ?>"/></td > <select id="input_time1" name="timehh1"> <option value="">時間指定1</option> <option value="10:00~11:00"><?php if(isset($timehh1) && $timehh1==="10:00~11:00") { echo "selected" ;} ?>>10:00~11:00</option> <option value="11:00~12:00"><?php if(isset($timehh1) && $timehh1==="11:00~12:00") { echo "selected" ;} ?>>11:00~12:00</option> </select > <input type ="submit" name ="submit"value="確認画面へ"/> </form> </body></html>

    • ベストアンサー
    • PHP
  • phpでのセレクトボックスからの受け渡しについて

    phpにおいての、セレクトボックスにより選択させたデータの受け渡しについて、どなかか教えてください。 授業評価アンケートのデータ収集システムを卒研で開発しています。 その中の一部で、 年度・学年・クラス を各々セレクトボックスにて選択させるページがあります。 仮にpage1.htmlとし、以下にその一部を示します。 <FORM method="post" action="page2.php" enctype="application/x-www-form-urlencoded"> <P> 年度: <SELECT name="nendo"> <OPTION value="1">2006</OPTION> <OPTION value="2">2007</OPTION> <OPTION value="3">2008</OPTION> <OPTION value="4">2009</OPTION> <OPTION value="5">2010</OPTION> <OPTION value="6" selected>2011</OPTION> <OPTION value="7">2012</OPTION> </SELECT> 学年: <SELECT name="gakunen"> <OPTION value="1">1年</OPTION> <OPTION value="2">2年</OPTION> <OPTION value="3">3年</OPTION> <OPTION value="4">4年</OPTION> </SELECT> クラス: <SELECT name="class"> <OPTION value="1">1組</OPTION> <OPTION value="2">2組</OPTION> <OPTION value="3">3組</OPTION> <OPTION value="4">4組</OPTION> <!-- --> </SELECT> </P> <P><INPUT type="submit" value="科目選択へ"> <INPUT type="reset" value="取り消す"></P> 次のページ(page2.php)では 科目・分類 を各々セレクトボックスにて選択させるページを用意します。 その際に、科目・分類の各々のセレクトボックスの上に、 前ページ(page1.php)にて選択された値(valueではなく文字列(2008,1年))を表示します。 年度:~~ 学年:~~ クラス:~~ これについては以下の方法で成功しました。 年度:<? echo $_POST["nendo"]+2005?> 年 学年:<? if ($_POST["gakunen"] == "1"){ echo "1年"; } else if ($_POST["gakunen"] == "2"){ echo "2年"; } else if ($_POST["gakunen"] == "3"){ echo "3年"; } else if ($_POST["gakunen"] == "4"){ echo "4年"; } ?> クラスについても同様の手法。 ここからが本題です。 page1.html→page2.php に受け渡した年度・学年・クラスのデータを page2.php→page3.php にも同じように、年度:~~・・・と表示させたいのですが、わかりません。 hiddenというのを使うのでしょうか。 調べても、このパターンのように1ページまたいでのデータの受け渡し方法がよくわかりません。 他の方法もあるのでしょうか。 どなたか具体的に教えてください!

    • 締切済み
    • PHP
  • セレクト文

    下記のセレクト文に配列をセットしたいのですが、”onchange”を使った2段階?にするとエラーになってしまいます。 <html> <head> <body> <?php $selected[] = array(); unset($selected); $selected[$***[ "t" ][ "VALUE" = "SELECTED"; print("<select name=\"t\" onchange="if(t.value==1){s1.style.display='inline';s2.style.display='none'; }else{s1.style.display='none';s2.style.display='inline';}">") print("<option selected> print("<option value=1>1  print("<option value=2>2 print("<</select> $selected[] = array(); unset($selected); $selected[$***[ "s1" ][ "VALUE" ]] = "SELECTED"; print("<select name=\"s1\" style=display:none>") print("<option value=a>a") print("<option value=aa>aa") print("</select>") $selected[] = array(); unset($selected); $selected[$***[ "s2" ][ "VALUE" ]] = "SELECTED"; <select name=\"s2\" style=display:none>") <option value=b>b") <option value=bb>bb") print("</select>") ?> </body> </head> </html> よろしくお願いします。

    • 締切済み
    • PHP
  • PHPでセレクトメニュー

    こんにちは。 PHPでDBから読み込んだ値によってセレクトメニュー、selected のタグが付く場所を変えたいんですが、自分の知識だけだと長文になってしまい短くできないものか悩んでます。 例えば値が1-3で、対応する値がA-Cだとすると、 <select name="menu"> <option value="1" selected>A</option> <option value="2">B</option> <option value="3">C</option> </select> で、データを受け取った値によって selectedの位置を"2"の後、"3"後に変更したいです。 自分で書くと <?php if ( $row["menu_c"] == 1){ <option value="1" selected>A</option> <option value="2">B</option> <option value="3">C</option> }elseif( $row["menu_c"] == 2){ <option value="1">A</option> <option value="2" selected>B</option> <option value="3">C</option> ・・・ <option value="3" selected>C</option> } ?> のようになり、項目数分だけ毎回書き足す事になってしまします。 お分かりになる方ご教授頂けないでしょうか。

    • ベストアンサー
    • PHP
  • 表示の仕方を教えてください!

    最初から鹿児島県が表示されるようにするには if ($ken == "") { echo "<option value=\"\" selected>----</option>"; } else { echo "<option value=\"\">----</option>"; } の-----部分はどうarray文から取り込めばいいのですか?? よろしくお願いします。 現在は下記のようになってます。 ----todoufuken.php------------------------ <?php $todofuken = array( 1 => array("hokkaido","北海道"), 2 => array("tokyo","東京都"), 3 => array("kagoshima","鹿児島県") ); ?> ------------------------------------------- ----ken_select.php------------------------- <?php include('todoufuken.php'); ?> <SELECT size=1 name=ken> <?php if ($ken == "") { echo "<option value=\"\" selected>----</option>"; } else { echo "<option value=\"\">----</option>"; } while ( list(,$p_todofuken) = each( $todofuken ) ) { list(,$p_kenname) = $p_todofuken; if ($p_kenname == $ken) { echo "<option selected>$p_kenname</option>"; } else { echo "<option>$p_kenname</option>"; } } ?> </SELECT>

    • ベストアンサー
    • PHP

専門家に質問してみよう