Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:从MYSQL数据库创建多个选择下拉列表?_Php_Mysql - Fatal编程技术网

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

PHP:从MYSQL数据库创建多个选择下拉列表?,php,mysql,Php,Mysql,我正在尝试使用PHP从mysql数据库创建多个下拉列表 基本上,下拉列表所需的所有数据都位于mysql数据库中的一个表中,并位于不同的列中 为了解释这一点,以下是mysql中的情况: 表名称:drop\u选项 表结构: id sub_cat_name op_name op_value 1 apple colour red 2 apple colour yellow 3 apple colour green

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

基本上,下拉列表所需的所有数据都位于mysql数据库中的一个表中,并位于不同的列中

为了解释这一点,以下是mysql中的情况:

表名称:drop\u选项

表结构:

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>
但在我下面的代码中,它会为每个结果创建一个select,并在不同的select中分离选项

例如:

<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 ='';
}
有人能就这个问题提出建议吗

任何帮助都将不胜感激

提前谢谢

编辑:

请尝试以下查询:

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>';
}
你应该试试这个: 我在下面设置了两个if条件

一,$在while循环之外为op_name分配一个值,以确保在$op_name与上一个相同时不会启动新的下拉选择。 2. $首先确保在每个下拉实例之后关闭下拉列表和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>';

这段代码应该可以正常工作,但万一不行,请共享您的输出,我会稍微调整一下,以确保它能满足您的需要。

这将创建一个选择菜单,但它只会在选择菜单中放置一个选项。否,它将检查$op_名称是否与以前相同,并将$op_值作为选项放在当前的select中。这发生在else部分。是的,我理解,但当我测试它时,它会将一个选项放在select菜单中,将其余选项放在它之外。您可以在此处共享生成的html吗?
$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>';