将相同的PHP源分配给不同的select元素
我试图使用mysql select查询的结果填充两个select框。我运行一次查询,并使用输出变量循环并相应地设置select标记的选项。问题是,第一个选择框按预期填充,但第二个没有。它仍然是空的。这是我的密码将相同的PHP源分配给不同的select元素,php,mysql,Php,Mysql,我试图使用mysql select查询的结果填充两个select框。我运行一次查询,并使用输出变量循环并相应地设置select标记的选项。问题是,第一个选择框按预期填充,但第二个没有。它仍然是空的。这是我的密码 <?php $con = mysql_connect('localhost','root','') or die('Could Not Connect'.mysql_error()); mysql_select_db('irctc', $con)or di
<?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>
来源
:-
选择源站
目的地
:-
选择目的站
您需要在呈现第二个选择框之前重新运行查询,或者首先将其结果缓存在数组中。使用mysql_fetch_*后,它已被读取,您需要倒带光标或重新开始/
此外,远离mysql,改用PDO或mysqli。在开始再次迭代结果之前,需要将数据指针“倒带”回起始位置。使用mysql\u data\u seek(0)代码>为此,在构建“目的地”之前:
选择目的站
也不要使用mysql。切换到mysqli\uuu
或PDO
。这将有助于您将代码从视图中分离出来,并使用任何类型的模板引擎(如Smarty
)当您进入第二个选择框时,所有记录都已被提取,因此不会发生任何事情
您应该做的是在启动html代码之前将所有记录提取到数组中
然后在html代码中使用foreach语句在数组上循环。将数据库结果存储在数组中,以便可以多次使用:
$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;
}
几乎是复制品
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);