2017-04-22 128 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; 
相关问题