Заполнение нескольких раскрывающихся списков с помощью одного запроса mysqli_fetch_array () к MySQL в Stack Overflow

У меня возникли проблемы с заполнением нескольких раскрывающихся списков. Мне нужно сделать это с помощью одного запроса к БД, и возможно ли это сделать в течение одного цикла while?
Вот код. Заполняется только первый выпадающий список (Player). Таблица базы данных (playerDB) имеет 2 столбца — Player и Game. и соответствующие выпадающие должны быть заполнены

 <form name="form1" action="" method="post">
<fieldset>
<legend>Selecting report</legend>
<p>
<?php
$connect = mysqli_connect('localhost','root','','mydatabase');

if(mysqli_connect_errno($connect))
{
echo 'Failed to connect';
}
else{
echo '';
}

if (!$res=mysqli_query($connect, "SELECT * from playerDB")){
echo ("Error description: "  .mysqli_error($connect));
}
?>

<label>Select Player</label>
<select>
<?php
while($row=mysqli_fetch_array($res))
{
?>
<option> <?php echo $row["Player"]; ?> </option
<?php
}
?>
</select>

<label>Select Game</label>
<select id = "myGameList">
<?php
while($row=mysqli_fetch_array($res))
{
?>
<option> <?php echo $row["Game"]; ?> </option>
<?php
}
?>
</select>

Любая помощь будет оценена, спасибо!

1

Решение

1. Вместо того, чтобы использовать while() чтобы заполнить поля выбора, попробуйте сохранить записи в массиве, а затем использовать этот массив столько раз, сколько вы хотите.

2. Также попробуйте выбрать только те столбцы, которые вам действительно нужны в дальнейшем. Это сделает запрос легче, а массив записей — легче.

Делай как ниже: —

<?php
$connect = mysqli_connect('localhost','root','','mydatabase');

if(mysqli_connect_errno($connect))
{
echo 'Failed to connect';
}
else{
if (!$res=mysqli_query($connect, "SELECT Player,Game from playerDB")){ // get that much column only which you want not all
echo ("Error description: "  .mysqli_error($connect));
}
}
$data = []; //create array
while($row=mysqli_fetch_array($res))
{
$data['Player'][] = $row["Player"]; //assign values to array
$data['Game'][] = $row["Game"];//assign values to array
}
?><form name="form1" action="" method="post">
<fieldset>
<legend>Selecting report</legend>
<label>Select Player</label>
<select>
<?php
foreach ($data['Player'] as $player){//use array as many times you want
?>
<option> <?php echo $player; ?> </option
<?php
}
?>
</select>
<label>Select Game</label>
<select id = "myGameList">
<?php
foreach ($data['Game'] as $game){//use array as many times you want
?>
<option> <?php echo $game; ?> </option>
<?php
}
?>
</select>
1

Другие решения

Вы можете использовать mysqli_fetch_all функция.

$connect = mysqli_connect('localhost','root','','mydatabase');

if(mysqli_connect_errno($connect))
{
echo 'Failed to connect';
}

if (!$res=mysqli_query($connect, "SELECT * from playerDB")){
echo ("Error description: "  .mysqli_error($connect));
}

$rows = mysqli_fetch_all($res);

Теперь вы можете использовать $rows в вашем foreach

foreach ($rows as $row) {
echo $row['Player'];
}

foreach ($rows as $row) {
echo $row['Game'];
}
1

Вы уже используете один запрос (что хорошо). Причина, по которой заполняется только один из ваших раскрывающихся списков, заключается в том, что mysqli_fetch_array всегда перемещает указатель результата ($ res) вперед и автоматически не сбрасывается. Посмотрите на код ниже. Это должно решить вашу проблему, а также прояснить некоторые ваши сомнения.

<form name="form1" action="" method="post">
<fieldset>
<legend>Selecting report</legend>
<p>
<?php
$connect = mysqli_connect('localhost','root','','mydatabase');

if(mysqli_connect_errno($connect))
{
echo 'Failed to connect';
}
else{
echo '';
}

// Single DB query. This is good.
// You could also use "SELECT Player, Game FROM playerDB"// This is generally recommended over * because in real-life databases the number of columns in the table can be huge.
// You should only pick the columns that you need.
if (!$res=mysqli_query($connect, "SELECT * from playerDB")){
echo ("Error description: "  .mysqli_error($connect));
}

$player_options = "";
$game_options = "";

// Single loop per row. Update the HTML into PHP variables here and then latur re-use these option variables to generate your dropdown(s)
while($row=mysqli_fetch_array($res))
{
$player_options .= "<option>".$row["Player"]."</option>";
$game_options .= "<option>".$row["Game"]."</option>";
}
?>

<label>Select Player</label>
<select>
<?php echo $player_options; ?>
</select>

<label>Select Game</label>
<select id = "myGameList">
<?php echo $game_options; ?>
</select>
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector