0

我有一个显示来自 MySQL 表的数据的 PHP 表单。每一行显然都有不同的数据,我想做的是有一个下拉列表,显示与每行中的数据条目相关的数据。

例如,假设我有两张桌子。Fruit 和 Fruit_Colors,如下:

在此处输入图像描述 在此处输入图像描述

因此,如果我的 PHP 表单显示如下,名为 fruits 的 MySQL 数据将在 Fruit 列中显示数据。然后根据字段“Fruit”中的 PHP 表单输出值从 Fruit_Colors 表中获取颜色。所以每一行的下拉列表会有所不同。

在此处输入图像描述

我的 PHP 表格语法是:

<table id="hor-minimalist-a">
    <tr>
        <th>ID</th>
        <th>Fruit</th>
        <th>Color</th>
        </tr>
<? while($row = $fruits->fetch(PDO::FETCH_ASSOC)) { ?>
    <tr>
        <td><? echo $row['id']; ?></td>
        <td><? echo $row['fruit']; ?></td>
        <td><SELECT NAME="fruitcolor" id="fruitcolor">
            <OPTION VALUE=0 >
             *// what goes here???*
            </option>
            </SELECT> 
        </td>
    </tr>
<? } ?>
</table>

任何建议我如何完成这项工作将不胜感激。请记住,该表最多可以有 50 行,因此需要一种将“fruit”值传递给下拉列表的动态方式。

我知道的下拉列表人口的语法是:

    function fruitcolor_dropdown($db)  
  {    
    $result = $db->query("select color from Fruit_Color where Fruit=*'outputted value'*"); 
    return $result; 
  } 
  $colors= fruitcolor_dropdown($db); 
  while($row = $colors->fetch(PDO::FETCH_ASSOC)) {
  $color=$row["color"];
  $optionsfruitcolors.="<OPTION VALUE=\"$color\">".$color; 
  }

建议一如既往地受到赞赏。谢谢并恭祝安康。

4

3 回答 3

1

看一下这个。我们创建一个函数来生成下拉选项。它接受 DB 和 fruit 作为参数 --> 循环并生成 DOM --> 将其输出到浏览器。

PHP 函数

function getColors($db, $fruit)
{
    $result = $db->query(
            sprintf("select color from Fruit_Color where Fruit = '%s'",
                    $fruit
            )
    );

    $output = '';
    while($row = $result->fetch(PDO::FETCH_ASSOC))
    {
        $output .= sprintf(
                '<option value="%s">%s</option>', 
                $row['color'], 
                $row['color']
        );
    }

    return $output;
}

模板

<? while($row = $fruits->fetch(PDO::FETCH_ASSOC)) { ?>
    <tr>
        <td><? echo $row['id']; ?></td>
        <td><? echo $row['fruit']; ?></td>
        <td><SELECT NAME="fruitcolor" id="fruitcolor">
             <?php echo getColors($db, $row['fruit']); ?>
            </SELECT> 
        </td>
    </tr>
<? } ?>
于 2013-01-03T13:06:19.753 回答
1

当您可以在单个查询中执行两次连接和触发查询时,这将是一个坏主意 - 您可以查看演示

$query = "select f.*,group_concat(color SEPARATOR '|') as fcolor from fruit F Left join fruit_color fc using (fruit) group by fc.fruit";

上面将是您的查询,您将按如下方式循环它:

<? while($row = $fruits->fetch(PDO::FETCH_ASSOC)) { ?>
    <tr>
        <td><? echo $row['id']; ?></td>
        <td><? echo $row['fruit']; ?></td>
        <td><SELECT NAME="fruitcolor" id="fruitcolor">
            <OPTION VALUE=0 >
             <?php 
               $array = explode("|", $fcolor);
               $count = count($array);
               for($loop=0;$loop<$count;$loop) {
                 echo "<option>".$array[$loop]."</option>";
               }                                       
              ?>
            </option>
            </SELECT> 
        </td>
    </tr>
<? } ?>
于 2013-01-03T13:10:40.737 回答
0

在选择框中使用它

function fruitcolor_dropdown($db)  
{    
   $result = $db->query("select color from Fruit_Color where Fruit=*'outputted value'*"); 
   return $result;
   while($row = $colors->fetch(PDO::FETCH_ASSOC)) {
      $color=$row["color"];
      $optionsfruitcolors.="<OPTION VALUE=\"$color\">".$color; 
   }  
} 
<select name="fruitcolor" id="fruitcolor">
   <?php  $colors= fruitcolor_dropdown($db); ?> 
</select>
于 2013-01-03T13:02:36.233 回答