質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.36%

SelectBoxのselected

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,551

score 493

やりたいこと

DBから引っ張ってきたデータを修正用のフォームに反映させ、セレクトボックスで修正する。
その際に、項目が当然出るのはもちろんだけど、そのデータでselectedしておきたい。

現在のコード(おおまかに)

[index.php]
<form action="" method="POST">
// 検索条件の選択
</form>
<div id="result">
<?php update_select() ?>
[controller.php]
function update_select() {
$id = $_POST['id'];
$row = update_select_db();
$name = $row['name'];
$dakoku_id = $row['dakoku_id'];
$dakoku = $row['dakoku'];
$timedate = $row['timedate'];
echo "<table>"
// <thead>部分は省略します
echo "<tbody><tr><td>" . $name . "</td>
<td>" . $dakoku . "</td></tr></tbody></table>";


DBの部分は要らないですかね?
情報自体は引っ張ってきているので、表示方法の部分での質問になりますので、、、

その他情報

dakoku_id = 1~9のidと出勤などの名称を登録したテーブル(A)から抜き出しています。
dakoku = テーブル(B)から抜き出しています。当然これだけの結果なら1~9のいずれかが入っています。
上記をINNER JOINでdakoku_id = dakokuで結合して抽出しています。

最終的にやりたい形

<select name="update_dakoku">
<option></option> // 空白を一応
<option value="1">出勤</option>
<option value="2">退勤</option>
<option value="3">休憩入</option>
<option value="4">休憩戻</option>
<option value="5">○○</option>
<option value="6">××</option>
<option value="7">△△</option>
<option value="8">□□</option>
<option value="9">@@</option>
</select>

<!-- で、例えば、抽出したデータが
dakoku_id = 3
dakoku = 休憩入だったら -->

<select name="update_dakoku">
<option></option> // 空白を一応
<option value="1">出勤</option>
<option value="2">退勤</option>
<option value="3" selected>休憩入</option> <!-- データに合わせてselected -->
<option value="4">休憩戻</option>
<option value="5">○○</option>
<option value="6">××</option>
<option value="7">△△</option>
<option value="8">□□</option>
<option value="9">@@</option>
</select>

controller.phpの$dakokuの部分をこのような感じで表示させたいのですが、どのようにしたら簡単でしょうか?
そこはそこで関数にするほうが見やすいかもしれないので、そこはそこでfunction化はできます。

最後に

効率などの問題的に、これでは効率が悪いかもしれませんが、現在ゴリゴリ書くけど処理を分けてみるというところに重点を置いているので、このような感じになっております。
処理分けに関しては今回は質問ではありません。

結果

どうも、書き方の問題かもしれませんが、回答いただきました部分で変更してみたところ、どうもうまくいきませんでした。。。。
とりあえず、dakokuマスターのテーブルを引っ張ってくれば、selectBoxは作成できました。
それからのselectedですが、がりがり書いて、非効率かとは思いますが、、、

if (dakoku_id == em_id) {
print("<option value=\"$em_id\" selected>$dakoku_name</option>");
} else {
print("<option value=\"$em_id\">$dakoku_name</option>");
}


というので、動作しました。。。

回答いただきまして、大変ありがとうございます!
教えていただいた書き方については、またいろいろ書いてみて動作等確認して行こうと思います。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

表示方法の部分だけの回答です。

<?php
function update_select() {
    $row = update_select_db();
    $dakoku_id = $row['dakoku_id'];
?>
<select name="update_dakoku">
    <option></option>
    <?php foreach ($DAKOKU_MASTER as $MM): ?>
        <option value="<?= $MM['id'] ?>" <?= ($dakoku_id == $MM['id']) ? 'selected' : '' ?>><?= $MM['label'] ?></option>
    <?php endforeach; ?>
</select>
<?php
}
?>

明確な回答を得たい場合、最低限以下を全て満たすようにしてください。
これらの情報は回答者にはわからず、想像で答えるしかなくなってしまいます。

  1. 現状どんなソースで
  2. どんな結果になっていて
  3. どう変更・修正したいか(どんな結果を期待しているか)
  4. エラーが出ている場合は、エラー内容
  5. DBのデータを扱う場合、SELECTで取得したデータ構造がどうなっているか。=> var_dump($db_data);の出力結果

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/25 09:02

    回答ありがとうございました!
    質問内容に不備がたくさんあり大変申し訳ありませんでした!
    以後気をつけてまとめてから質問できるようにしたいと思います。

    キャンセル

0

こんな感じ? (変数名は適当です)

$str = '';
foreach ($data_ar as $data) {
  if ($data['val'] == $current) ? ' selected' : '';
  $str .= '<option value="' . $data['val'] . '"' . $sel . '>' . $data['txt'] . '</option>' . "\n";
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/25 09:03

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

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.36%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る