使用同一个mysql查询填充多个下拉列表


Populate more than one drop down using the same mysql query

我有一个表格,里面有很多数字为1-5的投递箱。我可以使用这段代码来填充下拉列表,但我想知道我是否可以只调用数据库一次,而填充所有使用相同数字的下拉列表?

    <?php                         
     $sql = "SELECT * FROM riskNumDrop";
     $result = $conn->query($sql);
     if (!$conn->query($sql)) {
     echo "query failed: (" . $mysqli->errno . ") " . $mysqli->error;
    }
    echo '<select  class="assess" name="precontcons"   style="width:4em">' ;
    while($row = $result->fetch_assoc()){echo '<option value='.   $row['riskNumDrop'] .'>'.$row['riskNumDrop'].'</option>';}
    ?> </select>

因此,理想情况下,我生成一次输出并多次重用它。我猜是一个数组($result已经是了),但我如何从中填充下拉列表?TIA

将其保存为字符串将省去多次循环处理生成相同输出的相同数据的过程。如果这是你想要的,你可以做以下事情。

替换:

echo '<select  class="assess" name="precontcons"   style="width:4em">' ;
while($row = $result->fetch_assoc()){echo '<option value='.   $row['riskNumDrop'] .'>'.$row['riskNumDrop'].'</option>';}
?> </select>

带有:

$drop = '<select  class="assess" name="precontcons"   style="width:4em">' ;
while($row = $result->fetch_assoc()){
  drop .= '<option value='.   $row['riskNumDrop'].'>'.$row['riskNumDrop'].'</option>';
}
$drop .= '</select>';

如果您愿意,可以多次echo $drop


如果出于任何原因,你想要不同的选择属性,你可以保存选项列表,并围绕它打印选择,如下所示:

$dropOptions = "";
while($row = $result->fetch_assoc()){
  $dropOptions .= '<option value='.   $row['riskNumDrop'].'>'.$row['riskNumDrop'].'</option>';
}

然后仅echo '<select class="foo" name="bar">'.$dropOptions.'</select'>

您可以将数据存储到一个数组中,然后通过枚举数组来打印数据。

$risks = array();
// Load values into array.
while ($row = $result->fetch_assoc()) {
    array_push($row['riskNumDrop']);
}

// Drop down #1
echo '<select>';
foreach ($risks as $risk) {
    echo '<option value='. $risk .'>'. $risk .'</option>';
}
echo '</select>';
// Drop down #2
echo '<select>';
foreach ($risks as $risk) {
    echo '<option value='. $risk .'>'. $risk .'</option>';
}
echo '</select>';

只需使用fetch_all方法将结果放入数组即可。它将结果集中的所有行返回到关联数组或数值数组中。你可以用这样的数组做任何你想做的事:

$result = $conn->query('SELECT * FROM riskNumDrop');
if (!$result) {
   echo "query failed: (" . $mysqli->errno . ") " . $mysqli->error;
   exit; // fetch_* functions cannot be called on error (sice $result is false)
}
// get all rows from the result
$rows = $result->fetch_all(MYSQLI_ASSOC);
// output first dropdown...
echo '<select name="dropdown_1">';
foreach ($rows as $row) {
    // options for the first dropdown (same as you did before)
}
echo '</select>';
// output second dropdown...
echo '<select name="dropdown_2">';
foreach ($rows as $row) {
    // options for the second dropdown
}
echo '</select>';