0

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

这是我的选择框,它是来自 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);

这是我的查询,它根据 MA​​X(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 = ...”部分。

(编辑以将选定的值设置为选定的)

于 2012-08-23T13:45:43.383 回答
1

好的,为了论证,假设您将最新选择存储在$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

行。你在标签所在的地方分割你的回声。然后,您遍历它们,当您到达您希望设置为默认值的那个时,您只需设置

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

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


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

于 2012-08-23T13:46:59.780 回答