PHP:从MYSQL数据库创建多个选择下拉列表?

时间:2015-09-28 13:30:43

标签: php mysql

我尝试使用PHP从mysql数据库创建多个下拉列表。

基本上,下拉列表所需的所有数据都在mysql数据库和不同列中的一个表中。

解释一下,这就是它在mysql中的样子:

表名:drop_options

表格结构:

id  sub_cat_name  op_name  op_value
1   apple         colour     red
2   apple         colour     yellow
3   apple         colour     green
4   apple         size       small
5   apple         size       big
6   apple         size       medium

etc etc....

所以我需要创建这样的下拉选项:

<select name="colour">
<option>red</option>
<option>yellow</option>
<option>green</option>
</select>


<select name="size">
<option>small/option>
<option>medium</option>
<option>big</option>
</select>

但是我的代码如下所示,它会为每个结果创建1个选择,并将选项分成不同的选项!

示例如下:

<select name="size">
<option>small/option>
</select>

<select name="size">
<option>medium</option>
</select>

<select name="size">
<option>big</option>
</select>

这是我的代码:

$drops ="";

$sql44 ="SELECT * FROM drop_options WHERE sub_cat_name='$currentproduct'";

$query44 = mysqli_query($db_conx, $sql44);
$productCount44 = mysqli_num_rows($query44); // count the output amount
if ($productCount44 > 0) {
    while($row44 = mysqli_fetch_array($query44, MYSQLI_ASSOC)){ 
             $op_name = $row44["op_name"];
             $op_value = $row44["op_value"];



             /*foreach($op_value as $opval){
                 $dropsv ='<option>'.$op_value.'</option>';
             }*/

             $drops .='<div class="col-md-3 col-xs-12">
                <p class="margin-bottom-zero">'.$op_name.'</p>
                <select name="'.$op_name.'" class="selectpicker">

                <option>Select</option>
                <option>'.$op_value.'</option>
                </select>
            </div>';

    }
} else {
    $drops ='';
}

有人可以就此问题提出建议吗?

任何帮助都将不胜感激。

提前致谢

编辑:

<div class="col-md-3 col-xs-12">
                <p class="margin-bottom-zero">Material</p>
                <select name="Material" class="selectpicker">
                <option>Select</option>
                <option>450gsm silk</option></select></div><option>350gsm silk</option>           
        </div>
    </div>
</div>

2 个答案:

答案 0 :(得分:1)

你应该试试这个: 我在下面放了两个if条件。

1。)$op_name在while循环之外分配了一个值,以确保select与最后一个相同时不会启动新的下拉列表$op_name。 2.)$first确保我们在每个下拉列表实例后关闭下拉列表和div标签。

$drops ="";

$sql44 ="SELECT * FROM drop_options WHERE sub_cat_name='$currentproduct'";

$query44 = mysqli_query($db_conx, $sql44);
$productCount44 = mysqli_num_rows($query44); // count the output amount
if ($productCount44 > 0) 
{
    $op_name = '';
    $first = 0;

    while($row44 = mysqli_fetch_array($query44, MYSQLI_ASSOC))
    {


            $op_value = $row44["op_value"];

            if($op_name != $row44["op_name"])
            {
                if($first)
                {
                    $drops .='</select></div>';
                }

                $op_name = $row44["op_name"];

                $drops .='<div class="col-md-3 col-xs-12">
                <p class="margin-bottom-zero">'.$op_name.'</p>
                <select name="'.$op_name.'" class="selectpicker">
                <option>Select</option>
                <option>'.$op_value.'</option>';
            }
            else
            {
                $drops .= '<option>'.$op_value.'</option>';
            }

            $first = 1;
    }
} 
else 
{
    $drops ='';
}
$drops .='</select></div>';

此代码应该可以正常工作,但万一它不会分享您的输出,我会稍微调整一下以确保它能满足您的需求。

答案 1 :(得分:0)

尝试此查询:

SELECT sub_cat_name, op_name, GROUP_CONCAT(op_value)
FROM drop_options
WHERE sub_cat_name='$currentproduct'
GROUP BY sub_cat_name, op_name

并且foreach循环:

foreach (explode(',', $op_value) as $select_value) {
   echo '<option>'.$select_value.'</option>';
}