[英]Dynamic Optgroup in PHP
這是我當前使用的SQL表,用於獲取PHP下拉列表的數據。 這樣做的主要目的是將其變成一個下拉菜單,該下拉菜單具有一個optgroup及其下面的成員,依此類推...
+-----------+------------+-----------+ | GroupName | MemberName | ValueName | +-----------+------------+-----------+ | 1st Team | Joe Bob | Joe | | 1st Team | Catherine | Kat | | 2nd Team | Tommy | Tom | | 3rd Team | John Razks | John | +-----------+------------+-----------+ Table name: Members
基本上,最終的結果是下面的代碼。 這將是一個名為“ 1st Team”的optgroup的下拉列表,其成員如下。 代表二隊和三隊等等。
<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>
我根本不怎么做。 我看過其他人的示例,但不確定如何執行此步驟。
這不是最優雅的方法,但是您可以用這種方式建立您的組,它的工作是檢查組的名稱,並在每次名稱更改時將其更改為新的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>';
首先從數據庫中獲取所有記錄。 創建一個以鍵作為組名的數組。 循環新數組以生成所需的輸出。
// 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>";
}
}
我尚未對此進行測試,但是可以肯定會有所幫助。 您可以進行改進。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.