2016-05-01 125 views
1

我有一些數字爲1-5的下拉框。我可以使用此代碼來填充下拉列表,但想知道是否可以以某種方式只調用一次數據庫,但填充所有使用相同數字的下拉列表?使用相同的mysql查詢填充多個下拉列表

<?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> 

So理想情況下,我生成一次輸出並重復使用它多次。我猜數組($結果已經是),但我如何填充從它的下拉? TIA

+0

你在你的代碼中執行兩次查詢。如果你沒有什麼特別的理由這樣做,你肯定不應該那樣做。 –

+0

當你說代碼執行兩次時,我不確定遵循@DawidFerenczy。你的意思是在上面的代碼中還是在腳本中,如果我多次調用相同的信息?我明白你的意思是在scropt中,但如果你的意思是在上面的代碼中,你能解釋一下嗎?我可以在第二行看到它的執行結果放在數組$ result中,但是很遺憾看到它在其他地方再次執行。很高興被證明是錯誤的,因爲我都希望我的代碼更清潔。 –

+0

你沒有看到你正在調用'$ conn-> query($ sql)'兩次?它甚至連續兩行。第一次執行查詢並將返回值賦給變量'$ result'時,第二次執行相同的查詢並僅在條件中測試返回值而不分配它。 –

回答

1

保存爲字符串可以節省處理必須循環通過相同的數據多次生成相同的輸出。如果這是你想要的,你可以做以下事情。

替換:

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'>

+0

這隻允許他輸出兩個*相同的*下拉菜單,但不能使用相同的數據輸出兩個下拉菜單。 –

+0

我不知道他想要什麼,也不知道我在猜測它,但他應該理解這個區別。 –

+0

無論如何,我不認爲他想要相同的下拉菜單,因爲我不知道具有這種形式(具有相同的命名/標識的表單元素)的目的是什麼。但是,正如我寫的那樣,我只是想幫助他理解它。 –

0

您可以將數據存儲到數組中,然後通過枚舉數組來打印數據。

$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>'; 
-1

簡單地得到將結果轉換爲使用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>';