Php 用数组变量查询数据库
我正在为一个运动队做一个页面,教练可以在那里选择他的球队。我想做的是: 1) 打印不同的位置 2) 在位置名称旁指定仅与位置相关的玩家 位置。(即,如果位置名称为侧翼,则只有侧翼应 将显示在下拉菜单中) 我对上述问题的逻辑是:Php 用数组变量查询数据库,php,mysql,sql,Php,Mysql,Sql,我正在为一个运动队做一个页面,教练可以在那里选择他的球队。我想做的是: 1) 打印不同的位置 2) 在位置名称旁指定仅与位置相关的玩家 位置。(即,如果位置名称为侧翼,则只有侧翼应 将显示在下拉菜单中) 我对上述问题的逻辑是: 将位置名称分配给名为$position Loop over array的数组 查询数据库,每个循环后位置具有不同的值 与该位置匹配的选定玩家将被分配到 名为$playerName的数组 打印$position变量 为每个位置创建下拉菜单 赋值 从$playername数
- 将位置名称分配给名为$position Loop over array的数组
- 查询数据库,每个循环后位置具有不同的值
- 与该位置匹配的选定玩家将被分配到 名为$playerName的数组
- 打印$position变量
- 为每个位置创建下拉菜单
- 赋值 从$playername数组到下拉列表中的option元素 菜单
- 现在应该有不同的位置和下拉菜单, 旁边,包含与位置相关的球员姓名
$position=array(
“THP”,
“HKR”,
“LH”,
“LK4”,
“LK5”,
“FLH”
);
回声';
foreach($position作为$position){
$result=mysql\u query(“从`player\u info`中选择`player\u id`、`name`、`name`,其中`position`='$position'))或die(mysql\u error());
而($row=mysql\u fetch\u array($result)){//create array
$id[]=$row['player_id'];
$playerName[]=$row['name'];
$playerLastName[]=$row['LastName'];
//打印位置并打开选择元素
foreach($playerPosition作为$playerPosition的位置){
打印$playerPosition;
回声';
foreach($playerName as$name){//将playerName分配给position元素
回显“”。$name;
'';
回声';
回声“
”;
}//关闭将玩家nae分配到位置循环
}//结束打印位置并打开选择循环
}//在循环结束时结束
}//每个回路的末端开口
回声';
不幸的是,要么我的逻辑是错误的,要么我的代码是错误的。这是我得到的输出:(注意,所有下拉菜单中只显示名称Tendai,没有其他名称出现)
如果我整个上午都在为这件事苦苦挣扎,如果有人能给我指出正确的方向,我将不胜感激
(请修改者注意,上面的图片不包含真实姓名,只是一个虚构的数据库)您可以这样做。逻辑有所不同
function get_players_by_position($position)
{
$query = "SELECT
`player_id`,
`name`,
`surname`
FROM `player_info`
WHERE `position` = $position
ORDER BY name ";
$result = mysql_query($query);
$data = array();
while ($row = mysql_fetch_array($result)) {
$data[] = $row;
}
return $data;
}
foreach($position as $pposition){
$data = get_players_by_position($pposition);
echo $pposition;
echo '<select>';
foreach($data as $row){
echo '<option '.$row['id'].'>' . $row['name'].'</option>';
}
echo '</select>';
echo '<br />';
unset($data);
}
函数按位置获取玩家($position)
{
$query=“选择
`玩家id`,
`名称`,
`姓`
来自“玩家信息”`
其中`position`=$position
按名称排序”;
$result=mysql\u query($query);
$data=array();
而($row=mysql\u fetch\u数组($result)){
$data[]=$row;
}
返回$data;
}
foreach($position作为$position){
$data=按位置获取玩家($position);
呼应预设;
回声';
foreach($行数据){
回显'.$row['name'].';
}
回声';
回声“
”;
未结算(数据);
}
在原始代码中,您可以删除while
循环中的两个foreach
循环。使用$position
代替$playerPosition
,您的代码应该可以正常工作。以下是您的代码,以及我建议的更改,以您的过程风格:
$position = array(
"THP",
"HKR",
"LH",
"LK4",
"LK5",
"FLH"
);
echo '<form name="selectPlayers" method="post">';
foreach ($position as $pposition) {
$result = mysql_query("SELECT `player_id`,`name`,`surname` FROM `player_info`
WHERE `position` = '$pposition'") or die(mysql_error());
echo '<select name="'. $pposition . '">';
while ($row = mysql_fetch_array($result)) {
print $pposition;
echo '<option value="' . $row['player_id'] . '">'.
$row['name'] .' '. $row['surname'].
'</option>';
} //end while loop
echo '</select>';
echo '<br />';
} //end opening for each loop
echo '</form>';
$position=array(
“THP”,
“HKR”,
“LH”,
“LK4”,
“LK5”,
“FLH”
);
回声';
foreach($position作为$position){
$result=mysql\u query(“从`player\u info`中选择`player\u id`、`name`、`name`”
其中'position`='$position')或die(mysql_error());
回声';
while($row=mysql\u fetch\u数组($result)){
打印$pposition;
回显“”。
$row['name'].'.$row['LANSAME']。
'';
}//在循环结束时结束
回声';
回声“
”;
}//每个回路的末端开口
回声';
谢谢您的回答,但我在两个循环中使用$position变量,因为我需要它的值两次……这有意义吗?还是我这样做是不对的?@TimothyCoetzee看到了编辑后的答案
$position = array(
"THP",
"HKR",
"LH",
"LK4",
"LK5",
"FLH"
);
echo '<form name="selectPlayers" method="post">';
foreach ($position as $pposition) {
$result = mysql_query("SELECT `player_id`,`name`,`surname` FROM `player_info`
WHERE `position` = '$pposition'") or die(mysql_error());
echo '<select name="'. $pposition . '">';
while ($row = mysql_fetch_array($result)) {
print $pposition;
echo '<option value="' . $row['player_id'] . '">'.
$row['name'] .' '. $row['surname'].
'</option>';
} //end while loop
echo '</select>';
echo '<br />';
} //end opening for each loop
echo '</form>';