2017-04-22 129 views
0

我一直在尋找類似的答案,但似乎我找不到任何類似的東西。使用數據庫結果填充第一個dropmenu,第一個dropmenu值填充第二個

我在MySQL DB中有兩個表。 UserTeam。每個用戶都在特定的團隊中。

問題是我想填充兩個下拉列表。第一個下拉菜單應該檢索所有可用的隊伍。第二個下拉框應根據用戶在第一個下拉列表中選擇的組來填充數據。因此,例如,如果用戶選擇團隊A,則第二個下拉列表應填充在團隊A下分配的用戶。

$sql = "SELECT teamID FROM team"; 
$result = mysql_query($sql); 

echo "<select name='team'>"; 
    while ($row = mysql_fetch_array($result)) { 
     echo "<option value='".$row['teamID']."'>".$row['teamID']."</option>"; 
    } 
echo "</select>"; 
+0

是羣體動態?它說'團隊'。是一個團隊嗎?你能夠使用JQuery嗎? – Vbudo

+0

Hi @Vbudo。團隊[我將它稱爲團隊]是一個表格,其中包含teamID和團隊。是的,我可以使用JQuery,但我仍然是綠色的。 – justinc

回答

0
echo "<select name='team' id='firstSelect'>"; 
while ($row = mysql_fetch_array($result)) { 
    echo "<option value='" . $row['teamID'] ."'>" . $row['teamID'] ." 
         </option>"; 
         } 
         echo "</select>"; 
echo '<div id="secondSelect">new form or select will go here</div>'; 

Jquery的

$('#firstSelect').on('change', function(){ 
    var teamId= $(this).val(); 
     $.post('yourPHPscript.php', 
     { 
     'teamId' : teamId 
     }, 
     function (response, status) { 
      //response is the form or select generated from firstSelect 
      document.getElementById('secondSelect').value= response; 
      // or $('#secondSelect').html(response); 
          }); // end post 
}); // end function 

在yourPHPscript.php採取在變量和回聲的select(我建議一種形式),它使用firstSelect數據。當它回顯時,它會顯示在第二個div中。我希望我沒有太多錯別字。

+0

,你可以進一步解釋這部分'在你的PHP腳本.php採取變量和回聲選擇(我建議一種形式),使用firstSelect數據。當它得到迴應時,它會顯示在第二個div' – justinc

0

你需要做一些重新配置,以滿足您的表數據,並輸出偏好,但這是我的服務器/數據庫工作方法......

<!DOCTYPE html> 
<html> 
<head> 
<meta charset=utf-8 /> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
</head> 
<body> 
<?php 
if(!$con=mysqli_connect("host","user","pass","db")){ 
    echo "Failed to connect to MySQL: ",mysqli_connect_error(); 
}else{ 
    $include_empty_teams_query="SELECT T.id AS `Tid`,T.name AS `Tname`,P.id AS `Pid`,P.name AS `Pname` FROM Teams T LEFT JOIN Players P ON T.id=P.teamid GROUP BY T.id,P.id HAVING P.id IS NOT NULL ORDER BY T.name,P.name;"; 
    $exclude_empty_teams_query="SELECT T.id AS `Tid`,T.name AS `Tname`,P.id AS `Pid`,P.name AS `Pname` FROM Teams T LEFT JOIN Players P ON T.id=P.teamid GROUP BY T.id,P.id HAVING P.id IS NOT NULL ORDER BY T.name,P.name;"; 
    if($result=mysqli_query($con,$include_empty_teams_query)){ 
     if(mysqli_num_rows($result)){ 
      $select1="<select name=\"team\"><option value=\"0\">All</option>"; 
      $select2="<select name=\"player\"></select>"; 
      $last_team=NULL; 
       while($row=mysqli_fetch_assoc($result)){ 
        $data[]=$row; 
        if($row["Tname"]!=$last_team){ 
         if($row["Pid"]===NULL){ 
          $select1.="<option disabled>{$row["Tname"]}</option>"; 
         }else{ 
          $select1.="<option value=\"{$row["Tid"]}\">{$row["Tname"]}</option>"; 
         } 
        } 
        $last_team=$row["Tname"]; 
       } 
      $select1.="</select>"; 
      echo $select1," ",$select2; 
      mysqli_free_result($result); 
     }else{ 
      echo "Query Logic Error"; 
     } 
    }else{ 
     echo "Query Syntax Error: ",mysqli_error($con); 
    } 
} 
?> 
</body> 
<script> 
var json=<?=json_encode($data)?>; // cache for future referencing 
$('[name="team"]').on('change',function(e){ 
    var selVal=$(this).find(":selected").val(); 
    if($(this).val()!=0){ // filter json 
     var newOptions=$(json).filter(function(i,sub){return sub.Tid==selVal}); 
    }else{ 
     var newOptions=json; 
    } 
    var $select2=$('[name="player"]'); 
     $select2.empty(); // remove old options 
     $.each(newOptions,function(i,sub){ 
      $select2.append($("<option></option>").attr("value",sub.Pid).text(sub.Pname)); 
     }); 
}).change(); // trigger change() onload 
</script> 
</html> 

繪製輸出([默認/ onload事件]和[珍珠果醬選擇):

enter image description hereenter image description here

輸出源碼:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset=utf-8 /> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
</head> 
<body> 
<select name="team"><option value="0">All</option><option value="2">49'ers</option><option value="3">Pearl Jam</option><option value="5">Trump</option><option value="1">Yankees</option></select> <select name="player"></select></body> 
<script> 
var json=[{"Tid":"2","Tname":"49'ers","Pid":"4","Pname":"Jerry Rice"},{"Tid":"2","Tname":"49'ers","Pid":"3","Pname":"Joe Montana"},{"Tid":"3","Tname":"Pearl Jam","Pid":"5","Pname":"Eddie Vedder"},{"Tid":"3","Tname":"Pearl Jam","Pid":"6","Pname":"Jeff Ament"},{"Tid":"3","Tname":"Pearl Jam","Pid":"9","Pname":"Matt Cameron"},{"Tid":"3","Tname":"Pearl Jam","Pid":"8","Pname":"Mike McCready"},{"Tid":"3","Tname":"Pearl Jam","Pid":"7","Pname":"Stone Gossard"},{"Tid":"5","Tname":"Trump","Pid":"10","Pname":"Donald Trump"},{"Tid":"1","Tname":"Yankees","Pid":"2","Pname":"Babe Ruth"},{"Tid":"1","Tname":"Yankees","Pid":"1","Pname":"Mickey Mantle"}]; // cache for future referencing 
$('[name="team"]').on('change',function(e){ 
    var selVal=$(this).find(":selected").val(); 
    if($(this).val()!=0){ // filter json 
     var newOptions=$(json).filter(function(i,sub){return sub.Tid==selVal}); 
    }else{ 
     var newOptions=json; 
    } 
    var $select2=$('[name="player"]'); 
     $select2.empty(); // remove old options 
     $.each(newOptions,function(i,sub){ 
      $select2.append($("<option></option>").attr("value",sub.Pid).text(sub.Pname)); 
     }); 
}).change(); 
</script> 
</html> 

我的代碼的優點是:

  • 沒有Ajax調用。這意味着沒有不必要的服務器負載來自用戶的多個團隊更改。數據庫被查詢一次,所有數據都存儲在一個javascript變量中。
  • 我已刪除舊的mysql_函數,並實現了mysqli_函數來使您的過程現代化。
  • 我已經聲明瞭兩個單獨的查詢,但只在我的文章中使用一個。這使您可以決定是否希望將球隊納入您的第一個下拉菜單中,這些球隊沒有球員。
  • 我使用mysqli_fetch_assoc()而不是mysqli_fetch_array(),因爲我不使用它提供的數字鍵。
  • 如果您包含無玩家團隊,則會顯示團隊名稱,但會顯示disabled屬性,因此無法選擇 - 這是故意的UX功能。
  • 我用<?=?>作爲速記回顯$data這個PHP值json_encode()左右。
  • 我在我的jquery onchange函數的末尾使用.change(),以便在頁面加載時觸發該函數。

數據庫表中使用:

CREATE TABLE `Teams` (
    `id` int(10) NOT NULL, 
    `name` varchar(100) NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

INSERT INTO `Teams` (`id`, `name`) VALUES 
(1, 'Yankees'), 
(2, '49\'ers'), 
(3, 'Pearl Jam'), 
(4, 'Empty Team'), 
(5, 'Trump'); 

ALTER TABLE `Teams` 
    ADD PRIMARY KEY (`id`); 

ALTER TABLE `Teams` 
    MODIFY `id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6; 

CREATE TABLE `Players` (
    `id` int(10) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    `teamid` int(10) NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

INSERT INTO `Players` (`id`, `name`, `teamid`) VALUES 
(1, 'Mickey Mantle', 1), 
(2, 'Babe Ruth', 1), 
(3, 'Joe Montana', 2), 
(4, 'Jerry Rice', 2), 
(5, 'Eddie Vedder', 3), 
(6, 'Jeff Ament', 3), 
(7, 'Stone Gossard', 3), 
(8, 'Mike McCready', 3), 
(9, 'Matt Cameron', 3), 
(10, 'Donald Trump', 5); 

ALTER TABLE `Players` 
    ADD PRIMARY KEY (`id`); 

ALTER TABLE `Players` 
    MODIFY `id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11; 
相關問題