使用数组变量查询数据库

时间:2013-09-28 06:00:52

标签: php mysql sql

我在一个运动队的页面上工作,教练可以选择他的球队。我想做的是:

1)打印不同的位置

2)在位置名称旁边分配,只与球员相关的球员     位置。 (,即如果职位名称是侧翼,只有侧翼应该     显示在下拉菜单中

我对上述问题的逻辑是:

  • 将位置名称分配给名为$ position Loop over array

  • 的数组
  • 查询数据库,每个循环后位置具有不同的值。

  • 匹配该位置的所选玩家被分配到       数组名为$ playerName

  • 打印$ position变量

  • 为每个职位创建下拉菜单

  • 分配价值       从$ playername数组到下拉列表中的选项元素       菜单。

  • 现在下拉菜单应该有不同的位置,       在他们旁边,包含与位置相关的玩家名称。

  

//创建位置数组

$position = array(
    "THP",
    "HKR",
    "LH",
    "LK4",
    "LK5",
    "FLH"
);
echo '<form name="slectPlayers" method="post">';
foreach ($position as $pposition) {
    $result = mysql_query("SELECT `player_id`,`name`,`surname` FROM `player_info` WHERE `position` = '$pposition'") or die(mysql_error());
    while ($row = mysql_fetch_array($result)) { //create arrays
        $id[]             = $row['player_id'];
        $playerName[]     = $row['name'];
        $playerLastName[] = $row['surname'];
        // print position and open select element
        foreach ($position as $playerPosition) {
            print $playerPosition;
            echo '<select>';
            foreach ($playerName as $name) { //assign playername to position element
                echo '<option>' . $name;
                '</option>';
                echo '</select>';
                echo '<br />';
            } //close assign player nae to position loop
        } //end print position and open select loop
    } //end while  loop
} //end opening for each loop
echo '</form>';

不幸的是,我的逻辑错误或我的代码不正确。这是我得到的输出:(注意只有名称Tendai显示在所有下拉菜单中,没有其他名称出现) enter image description here

如果有人能指出我正确的方向,那么整个上午如果一直在与这个人挣扎,我们将不胜感激

(请注意,上面的图片不包含真实姓名,只是一个虚构的数据库)

2 个答案:

答案 0 :(得分:0)

你可以这样做。逻辑是不同的

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);
}

答案 1 :(得分:0)

在原始代码中,您可以删除foreach循环中的两个while循环。使用$pposition代替$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>';