我有一个下拉列表脚本,在该脚本中从数据库中填充它。我正在尝试在列表中显示名称,但实际值是名称的ID。我认为最好显示我的代码来解释我正在尝试做的事情:
mysql_connect('localhost', 'user', 'pw');
mysql_select_db ("db");
$sqlId = "SELECT id FROM materials";
$sql = "SELECT name FROM materials";
$result = mysql_query($sql);
$resultId = mysql_query($sqlId);
echo "<td><select name='materials'>";
while ($row = mysql_fetch_array($result) && $row2 = mysql_fetch_array($resultId))
{
echo "<option value='" . $row2['id'] . "'>" .
$row['name'] . "</option>";
}
echo "</select></td></tr> ";
每次运行此操作时,都不会填充下拉列表。我做错了什么?
答案 0 :(得分:1)
我修改了你的代码,现在这应该可行。
mysql_connect('localhost', 'user', 'pw');
mysql_select_db ("db");
$sql = "SELECT id, name FROM materials";
$result = mysql_query($sql);
echo "<td><select name='materials'>";
while($row = mysql_fetch_assoc($result)) {
echo "<option value='" . $row['id'] . "'>" . $row['name'] . "</option>";
}
echo "</select></td></tr> ";
祝你好运! : - )
答案 1 :(得分:0)
我改变了
&安培;&安培;
在条件下到“AND”并且它起作用。
答案 2 :(得分:0)
您的代码对operator precedence做出了错误的假设。
以下是您的while语句的评估方式..
while ($row = (mysql_fetch_array($result) && ($row2 = mysql_fetch_array($resultId))) )
添加的括号显示PHP评估循环语句的顺序。 $row
永远不会保存一个值数组,而是赋予它一个布尔值。
这是一个更简单的例子:
var_dump( $x = 1 && $y = 2 ); // outputs bool(true)
var_dump( $x ); // outputs bool(true)
var_dump( $y ); // outputs int(2)
要解决此问题,您应该将代码重写为while (($row = mysql_fetch_array($result)) && ($row2 = mysql_fetch_array($resultId)))
,或者像您一样,使用and
运算符(优先级较低)。