Php 用数组变量查询数据库

Php 用数组变量查询数据库,php,mysql,sql,Php,Mysql,Sql,我正在为一个运动队做一个页面,教练可以在那里选择他的球队。我想做的是: 1) 打印不同的位置 2) 在位置名称旁指定仅与位置相关的玩家 位置。(即,如果位置名称为侧翼,则只有侧翼应 将显示在下拉菜单中) 我对上述问题的逻辑是: 将位置名称分配给名为$position Loop over array的数组 查询数据库,每个循环后位置具有不同的值 与该位置匹配的选定玩家将被分配到 名为$playerName的数组 打印$position变量 为每个位置创建下拉菜单 赋值 从$playername数

我正在为一个运动队做一个页面,教练可以在那里选择他的球队。我想做的是:

1) 打印不同的位置

2) 在位置名称旁指定仅与位置相关的玩家 位置。(即,如果位置名称为侧翼,则只有侧翼应 将显示在下拉菜单中

我对上述问题的逻辑是:

  • 将位置名称分配给名为$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>';