我正在尝试将mysql数据项用于选择组合框。它基本上运行良好,但问题是当有多个组合框时,它对服务器负载很大,因为添加每个组合框需要花费很多时间。我想找出一个更好的方法。可能会将日期拉入一个仅用于会话的数组并将其放在组合框中。逻辑基本上是一个报价单,其中约3500个项目将显示为下拉列表,用户将选择然后输入价格和其他详细信息。用户动态添加或删除行。我目前正在使用以下代码: -
<?php
$con = mysql_connect('blah blah blah');
if (!$con) {
die ('Could not connect: ' . mysql_error());}
$db = mysql_select_db('blah',$con);
$extract1 = mysql_query("query") OR die (mysql_error());
$numrows1 = mysql_num_rows($extract1);
echo "<select name='itemname' title='select Item Name'>";
echo "
<option>Select Item Description</option>
";
while ($row1=mysql_fetch_assoc($extract1))
{
$ic=$row1['ItemName'];
echo "
<option>$ic</option>
";
}
echo "</select>";
mysql_close($con);
?>
首先,Don't use mysql_*
functions in new code。他们不再维持and are officially deprecated。看看red box?了解prepared statements,并使用PDO或MySQLi - this article将帮助您决定哪个。如果你选择PDO,here is a good tutorial。
<?php
$con = mysql_connect('blah blah blah') or die(mysql_error());
$db = mysql_select_db('blah',$con) or die(mysql_error());
$result = mysql_query("query MAYBE NARROW DOWN TO MORE RELEVANT RESULT SET") or die (mysql_error());
$option = '<select size="1" name="optionBox">';
if(mysql_num_rows($result)>=1){
while ($row=mysql_fetch_assoc($result)){
$option .="<option selected value=\"".$row['ItemName']."\">".$row['ItemName']."</option>\n";
}
}else{
$option .='<option selected value="0">No items to list</option>';
}
$option .='</select>';
echo $option;
mysql_close($con);
?>
不要在你的while语句中回显你的选项:
$ic[]=$row1['ItemName'];
然后在页面上任何位置的while循环之外:
foreach($ic as $i){
echo "<option>".$i."</option>";
}
是的,如果您的数据不经常更改,那么将数据放入会话中的数组并从那里进行渲染可能是个好主意。根据数据更改的频率,您可以将其呈现为非会话数据元素(例如,文件系统上的文件)并从那里填充组合框(或者只是渲染所有选择)进入该文件中的组合框元素,并直接使用该数据);当然,这取决于数据更新的频率。