2016-05-01 3 views
1

У меня есть форма с несколькими коробочными коробками, в которых есть цифры 1-5. Я могу использовать этот код для заполнения раскрывающегося списка, но задавался вопросом, могу ли я как-то просто вызвать вызов в db один раз, но заполнить все выпадающие списки, которые используют одни и те же номера?Заполнение нескольких выпадающих данных одним и тем же запросом 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> 

В идеале, я генерирую выход один раз и повторно его многократно. Im угадывая массив (который $ result уже есть), но как я могу заполнить выпадающее из него? TIA

+0

Вы выполняете запрос дважды в своем коде. Если у вас нет особых причин для этого, вы определенно не должны этого делать. –

+0

Я не уверен, что я следую @DawidFerenczy, когда вы говорите, что код выполняется дважды. Вы имеете в виду в приведенном выше коде или в скрипте, если Im вызывает одну и ту же информацию более одного раза? Я понимаю, если вы имеете в виду в 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>'; 
Смежные вопросы