0

データベースからの配列が取り込まれるhtml選択ボックスがあります。現在の日付とともにデータベース内の新しいテーブルに書き込まれた選択ボックスを含む、このテーブル内のすべてのデータ。ユーザーがクラスに戻ったときに、選択ボックスを、ユーザーが前日または 1 週間前に送信した最後のエントリにデフォルト設定する必要があります。必要な場所にかなり近いクエリを取得できますが、それを選択ボックスに渡す限り、どこから始めればよいかわかりません。

これは、php からのエコーである私の選択ボックスです。

    <td>
              <select name="movement[]" width=200>
              <option>Select...</option>
              <option>'. ($wc['mv_00']). '</option>
              <option>'. ($wc['mv_01']). '</option>
              <option>'. ($wc['mv_02']). '</option>
              <option>'. ($wc['mv_03']). '</option>
              <option>'. ($wc['mv_04']). '</option>
        </select></td>

これは、エコーアウトされる配列全体のコードです。

    if(empty($workout_class) === false)
{   
foreach($workout_class as $wc){
if ($wc['pagenum'] !== $pagenum) continue 1;

    echo '<tr>
        <td><input type="hidden" name="client_id[]" value="'.($wc['client_id']).'">
        <input type="hidden" name="first_name[]" value="'.($wc['first_name']).'">'. ($wc['first_name']).'
        <span><input type="hidden" name="nickname[]" value="'.($wc['nickname']).'">('. ($wc['nickname']).')</span>
        <span><input type="hidden" name="last_name[]" value="'.($wc['last_name']).'">'. ($wc['last_name']).'</span>
        </td>
              <td><input type="hidden" name="order[]" value="'.($wc['order']).'">'. ($wc['order']). '</td>
              <td>
              <select name="movement[]" width=200>
              <option>Select...</option>
              <option>'. ($wc['mv_00']). '</option>
              <option>'. ($wc['mv_01']). '</option>
              <option>'. ($wc['mv_02']). '</option>
              <option>'. ($wc['mv_03']). '</option>
              <option>'. ($wc['mv_04']). '</option>
        </select></td>
        <td><input type="hidden" name="rep_set_sec[]" value="'.($wc['rep_set_sec']).'">'. ($wc['rep_set_sec']). '</td>
        <td><input type="hidden" name="rest[]" value="'.($wc['rest']).'">'. ($wc['rest']). '</td>
        <td>00</td>
        </tr>';    
   } // foreach($data_array

これはphpで行うことができますか、それともjsの方が良いでしょうか?

OK、クラス、クライアント、注文に基づいて入力された最後の動きを取得する変数は次のとおりです。

    $recent_movement = recent_movement($class_id, $client_id, $order);

これは、MAX(date) に基づいて db からの動きの配列を返す私のクエリです。

function recent_movement($class_id, $client_id, $order){
    $class_id = (int)$class_id;
    $client_id = (int)$client_id;

$query = mysql_query("SELECT `movement` FROM `completed_movements` WHERE `class_id` = '$class_id' AND `client_id` = '$client_id' AND `order` = '$order' AND
`date` = (SELECT MAX(`date`) FROM `completed_movements` WHERE `order` = '$order')");

$last_movement = mysql_fetch_array($query);

return $last_movement['movement'];

}

これは、私の $recent_movement が返すものに基づいて select="selected" を設定するように選択メニューに指示する方法がわからない場所です。

4

3 に答える 3

2

もしあなたが持っていたら

<option>A</option>
<option>B</option>
<option>C</option>

「B」を選ぶときはどうしますか

<option>A</option>
<option selected="selected">B</option>
<option>C</option>

結果として、必要な最後の値を取得するだけで済み、出力ごとに、その値が必要な値である場合は、「selected = ...」部分を追加します。

(selected の値を selected に設定するように編集)

于 2012-08-23T13:45:43.383 に答える
1

OK、議論のために、最新の選択をに保存するとします$recent_movement。その変数の値をオプションの値と比較し、一致するオプションを「選択済み」に設定するだけです。

<?php
.
.
.
echo '...

    <option' . ($ws['mv_00'] == $recent_movement ? ' selected="selected"' : "") . '>'. ($wc['mv_00']). '</option>
    <option' . ($ws['mv_01'] == $recent_movement ? ' selected="selected"' : "") . '>'. ($wc['mv_01']). '</option>
    <option' . ($ws['mv_02'] == $recent_movement ? ' selected="selected"' : "") . '>'. ($wc['mv_02']). '</option>
    <option' . ($ws['mv_03'] == $recent_movement ? ' selected="selected"' : "") . '>'. ($wc['mv_03']). '</option>
    <option' . ($ws['mv_04'] == $recent_movement ? ' selected="selected"' : "") . '>'. ($wc['mv_04']). '</option>

...';

カウンター付きのループを実装することで、これを単純化することもできます。

<?php

$options = "";
for($i = 0; $i <= 4; $i++) {
    $options .= '<option' . ($ws['mv_0' . $i] == $recent_movement ? ' selected="selected"' : "") . '>'. ($wc['mv_0' . $i]). '</option>';
}

アップデート:

これが私自身のコードだったとしたら、私はいくつかの小さな変更を加えていただろう。その巨大なエコーの代わりに、私はPHPモードを終了し、ストレートHTMLを使用していました。ループ文字列コンストラクター(上記に投稿)も使用しますoptions

<?php
foreach ($workout_class as $wc) :
    if ($wc['pagenum'] !== $pagenum) continue 1;

    $options = "";

    for ($i = 0; $i <= 4; $i++) {
        $options .= '<option' . ($ws['mv_0' . $i] == $recent_movement ? ' selected="selected"' : "") . '>' . ($wc['mv_0' . $i]) . '</option>';
    }
    ?>
    <tr>
        <td><input type="hidden" name="client_id[]" value="<?= $wc['client_id'] ?>">
            <input type="hidden" name="first_name[]" value="<?= $wc['first_name'] ?>"><?= $wc['first_name'] ?>
            <span><input type="hidden" name="nickname[]" value="<?= $wc['nickname'] ?>">(<?= $wc['nickname'] ?>)</span>
            <span><input type="hidden" name="last_name[]" value="<?= $wc['last_name'] ?>"><?= $wc['last_name'] ?></span>
        </td>
        <td><input type="hidden" name="order[]" value="<?= $wc['order'] ?>"><?= $wc['order'] ?></td>
        <td>
            <select name="movement[]" width=200>
                <option>Select...</option>
                <?= $options ?>
            </select></td>
        <td><input type="hidden" name="rep_set_sec[]" value="<?= $wc['rep_set_sec'] ?>"><?= $wc['rep_set_sec'] ?></td>
        <td><input type="hidden" name="rest[]" value="<?= $wc['rest'] ?>"><?= $wc['rest'] ?></td>
        <td>00</td>
    </tr>
<?php endforeach; ?>
于 2012-08-23T15:45:00.777 に答える
0

Ok。タグがある場所でエコーを分割します。次に、それらを繰り返し処理し、デフォルトとして設定したいものに到達したら、単に設定します

<option selected="selected" value="value">Option</option>

このようにして、このオプションはページに入るときのデフォルトのオプションになります。これはあなたの場合に機能します。


ページの作成に echo を使用することはお勧めしません。代わりに、アプリケーションのテンプレート エンジンに依存する必要があります。Twig Template Engineをお勧めします。

于 2012-08-23T13:46:59.780 に答える