将相同的PHP源分配给不同的选择元素

时间:2012-09-01 19:16:52

标签: php mysql

我正在尝试使用mysql select查询的结果填充两个选择框。我运行一次查询并使用输出变量循环并相应地设置select标签的选项。问题是,第一个选择框按预期填充,但第二个不填充。它仍然是空的。继承我的代码

    <?php

    $con = mysql_connect('localhost','root','') or die('Could Not Connect'.mysql_error());
    mysql_select_db('irctc', $con)or die('Could Not Select'.mysql_error());;
    $result = mysql_query("select * from stationcodes", $con)or die('Could not select'.mysql_error());
    ?>
    <html>
    <head>
    </head>
    <body>
        <table>
            <tr>
                <td>Source</td>
                <td>:-</td>
                <td><select id='src'>
                    <option value=''>Select Source Station</option>
                    <?php  while($row = mysql_fetch_array($result))
                    { ?>
                        <option value='<?php echo $row['StationCode']; ?>'><?php echo $row['StationName']; ?></option>
                    <?php } ?>
                    </select>
                </td>
            </tr>
            <tr>
                <td>Destination</td>
                <td>:-</td>
                <td><select id='dst'>
                    <option value=''>Select Destination Station</option>
                    <?php  while($row = mysql_fetch_array($result))
                    { ?>
                        <option value='<?php echo $row['StationCode']; ?>'><?php echo $row['StationName']; ?></option>
                    <?php } ?>
                    </select>
                </td>
            </tr>
        </table>
    </body>
    </html>

4 个答案:

答案 0 :(得分:0)

您需要在呈现第二个选择框之前重新运行查询,或者首先将其结果缓存在数组中。一旦你使用mysql_fetch_ *它已被读取,你需要回放光标或只是重新开始/

此外,请远离mysql_ *并改为使用PDO或mysqli。

答案 1 :(得分:0)

在开始再次迭代结果之前,您需要将数据指针“倒回”到开头。在构建“目的地”之前,请使用mysql_data_seek(0);执行此操作:

            <td><select id='dst'>
                <option value=''>Select Destination Station</option>
                <?php  mysql_data_seek(0);         // reset data pointer to 1st row
                       while($row = mysql_fetch_array($result))
                { ?>
                    <option value='<?php echo $row['StationCode']; ?>'><?php echo $row['StationName']; ?></option>
                <?php } ?>
                </select>
            </td>

另请勿使用mysql_。切换到mysqli_PDO。它会帮助将代码与视图分开并使用任何类型的模板引擎(例如Smarty

答案 2 :(得分:0)

当你到达第二个选择框时,所有记录都已被提取,因此不会发生任何事情。

你应该做的是在启动html代码之前将al记录提取到数组中。

然后在html代码中使用foreach语句循环遍历数组。

答案 3 :(得分:0)

将数据库结果存储在一个数组中,以便您可以多次使用它:

$records = array();
while ($row = mysql_fetch_array($result)) $records[] = $row;

为避免多次编写相同的算法,请定义一个您调用的函数,例如:

function select($attrs, $options, $selected=null) {
    $ret = '<select';
    if (is_array($attrs)) {
        foreach ($attrs as $name => $val) {
            $ret .= ' '.htmlspecialchars($name).'="'.htmlspecialchars($value);
        }
    }
    $ret .= '>';
    foreach ($options as $option) {
        $ret .= '<option';
        if (isset($option['value'])) {
            $ret .= ' value="'.htmlspecialchars($option['value']).'"';
            if ($selected === $option['value']) {
                $ret .= ' selected="selected"';
            }
        }
        $ret .= '>';
        if (isset($option['label'])) {
            $ret .= htmlspecialchars($option['label']);
        }
        $ret .= '</option>';
    }
    $ret .= '</select>';
    return $ret;
}

然后您需要做的就是使用不同的参数调用此函数:

$options = array();
while ($row = mysql_fetch_array($result)) {
    $options[] = array(
        'value' => $row['StationCode'],
        'label' => $row['StationName']
    }
}

$srcOptions = array_merge(array(array('label'=>'Select Source Station')), $options);
echo select(array('id'=>'src'), $srcOptions);

$dstOptions = array_merge(array(array('label'=>'Select Destination Station')), $options);
echo select(array('id'=>'dst'), $dstOptions);