Динамическая Optgroup в PHP

Это моя текущая таблица SQL, которую я использую для захвата данных для моего раскрывающегося списка php. Основная цель этого - превратить это в раскрывающийся список, в котором есть группа opt с членами ниже и так далее ...

+-----------+------------+-----------+
| GroupName | MemberName | ValueName |
+-----------+------------+-----------+
| 1st Team  | Joe Bob    | Joe       |
| 1st Team  | Catherine  | Kat       |
| 2nd Team  | Tommy      | Tom       |
| 3rd Team  | John Razks | John      |
+-----------+------------+-----------+
 Table name: Members

В основном в конечном итоге такой код приведен ниже. Это будет выпадающий список с optgroup под названием «1-я команда» и будет иметь членов ниже ect. для 2-й команды и 3-й команды и так далее.

<optgroup class="1st Team">
  <option value="Joe">Joe Bob</option>
  <option value="Kat">Catherine</option>
</optgroup>
<optgroup class="2nd Team">
  <option value="Tom">Tommy</option>
</optgroup>
<optgroup class="3rd Team">
  <option value="John">John Razks</option>
</optgroup> 

Прямо сейчас, вот как я получаю информацию из таблицы SQL. Это прекрасно работает, но если я хочу добавить новое имя GroupName, мне придется добавить новый код на мою главную страницу, и я не хочу этого делать.

Попытайтесь сделать его динамичным, поэтому, если таблица SQL будет обновлена ??с новым именем GroupName, в раскрывающемся списке появится новый класс optgroup, а участники будут ниже.

<optgroup class="1st Team">
		<?php
			$conn = mysqli_connect("#connect_to_sql");

			if(!$conn){
				die("Connection Failed".myslqi_connect_error());
			}
				$result = mysqli_query($conn, "SELECT distinct MemberName from Members where GroupName = "1st Team" order by MemberName ASC");
				while ($row = mysqli_fetch_assoc($result)){
				unset($membername, $groupname);
				$groupname = $row['GroupName'];
				$membername = $row['MemberName'];
				echo '<option value="'.$membername.'">'.$membername.'</option>';
			}
		?>	
</optgroup>

Я вообще не уверен, что делать. Я посмотрел на примеры других людей, но не уверен, как подойти к этому шагу.

php,mysqli,dynamic,drop-down-menu,optgroup,

0

Ответов: 2


1

Сначала получите все записи из базы данных. создайте массив с ключами как имя группы. Запустите новый массив, чтобы создать желаемый результат.

// query to get all records from database table
$result = mysqli_query($conn, "SELECT distinct MemberName,GroupName,ValueName from Members order by MemberName ASC");
while ($row = mysqli_fetch_assoc($result)){
    // generate an array with keys as group name
    $array[$row['GroupName']][] = $row;
}

// loop the array to create optgroup
foreach($array as $key=>$value){
    // check if its an array
    if(is_array($value)){
        // create optgroup for each groupname
        echo "<optgroup class='".$key."'>";
        foreach($value as $k=>$v){
            echo "<option value='".$v['membername']."'>'".$v['membername']."'</option>";
        }
        echo "</optgroup>";
    }
}

Я не проверял это, но уверен, что это поможет вам. И вы можете сделать улучшения.


1

Это не самый изящный способ, но вы можете создать свою группу таким образом, то, что он делает, - это проверить имя группы и изменить ее на новую optgroup каждый раз, когда имя изменится, $ first var просто там, t добавить закрывающий тег в первый раз.

Я уверен, что вы можете улучшить это, но это должно вас заставить.

Он действительно полагается на последовательное соглашение об именах для имени группы, так как я говорю, я уверен, что вы можете улучшить его. Я также не включил проверки подключения, как вы это делали в своем примере

$result = mysqli_query($conn, "SELECT * FROM Members ORDER BY GroupName");
$groupName = '';
$first = true;
echo '<select>';
while ($row = mysqli_fetch_assoc($result)){
    if ($row['GroupName'] != $groupName) {
        $groupName = $row['GroupName']; // Just set the new group name
        if (!$first) { // Add a closing tag when we change the group, but only if we're not in the first loop
            echo '</optgroup>';
        } else {
            $first = false; // Make sure we don't close the tag first time, but do after the first loop
        }
        echo '<optgroup label="' . $groupName . '">';
    }
    // We want to echo the options every loop so it's outside the if condition
    echo '<option value="' . $row['MemberName'] . '">' . $row['ValueName'] . '</option>';
}
echo '</select>';
PHP, MySQLi, динамичный, выпадающее меню, OPTGROUP,
Похожие вопросы