如何使html选择框默认为最新的数据库条目

时间:2012-08-23 13:38:25

标签: php mysql sql

我有一个html选择框,由db中的数组填充。此表中的所有数据包括它在数据库中写入新表的选择框以及当前日期。当用户返回到类时,我希望选择框默认为用户提交的最后一个条目,无论是前一天还是前一周。我可以得到非常接近我需要它的查询,但我真的不知道从哪里开始传递到选择框。

这是我的选择框,来自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会更好的东西吗?

好的,这是我的变量,根据类,客户和订单输入最后一个动作。

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

这是我的查询,它根据MAX(日期)

返回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”。

3 个答案:

答案 0 :(得分:2)

如果你有

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

何时选择“B”你会做

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

因此,您需要做的就是获得您想要的最后一个值,然后对于每个输出,如果值是您想要的值,则添加“selected = ...”部分。

(编辑设定选定的值)

答案 1 :(得分:1)

好的,为了论证,我们假设您将最新的选择存储在$recent_movement中。只需将该变量的值与选项的值进行比较,并将匹配选项设置为“selected”:

<?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; ?>

答案 2 :(得分:0)

确定。您将回声分割为标记所在的位置。 然后,您遍历它们,当您到达想要设置为默认值的那个时,只需设置

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

这样,此选项将成为进入页面时的默认选项。 这将适用于您的情况。


我不建议使用echo来构建您的页面。您应该依赖应用程序中的模板引擎。我推荐Twig Template Engine