Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.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 使用<;显示数据库中的数据;optgroup>;及<;选项>;标签_Php_Html_Database - Fatal编程技术网

Php 使用<;显示数据库中的数据;optgroup>;及<;选项>;标签

Php 使用<;显示数据库中的数据;optgroup>;及<;选项>;标签,php,html,database,Php,Html,Database,我试图获得的主要目标是,从数据库中正确显示数据,让我尝试用代码进行解释 这是我目前的表单代码: <form action="" id="omnivaform" onsubmit="nextStep();" method="post"> <input type="hidden" name="choose_omniva" />

我试图获得的主要目标是,从数据库中正确显示数据,让我尝试用代码进行解释

这是我目前的表单代码:

<form action="" id="omnivaform" onsubmit="nextStep();" method="post">
        <input type="hidden" name="choose_omniva" />
        <div id="OmnivaSelector">
            <?php
            $omniva_variants_query = $db_link->prepare('SELECT COUNT(*) FROM `omniva` ORDER BY `region` ASC;');
            $omniva_variants_query->execute();
            if( $omniva_variants_query->fetchColumn() == 1)
            {
                $omniva_variants_query = $db_link->prepare('SELECT * FROM `omniva`ORDER BY `region` ASC;');
                $omniva_variants_query->execute();
                
                $omniva_variant_record = $omniva_variants_query->fetch();
                ?>
                <select id="omniva_selector" name="omniva_variant" style="display:none">
                    <option value="<?php echo $omniva_variant_record["id"]; ?>"><?php echo $omniva_variant_record["region"]; ?></option>
                </select>
                <?php
            }
            else
            {
                $omniva_variants_query = $db_link->prepare('SELECT * FROM `omniva` ORDER BY `region` ASC;');
                $omniva_variants_query->execute();
                ?>
                <div class="panel panel-primary">
                    <div class="panel-heading">Choose your Omniva</div>
                    <div class="panel-body">
                          <div class="form-group">
                            <select id="omniva_variant_selector" class="form-control" />
                            <?php
                            while( $omniva_variant_record = $omniva_variants_query->fetch() )
                            {
                                ?>
<optgroup label="<?php echo $omniva_variant_record["region"]; ?>">
<option><?php echo $omniva_variant_record["name"]; ?></option>
                                                            </optgroup>
                                <?php
                            }
                            ?>
                            </select>
                          </div>
                    </div>
                </div>
                <?php
            }
            ?>
        </div>
        </script>
    </form>
但我需要这个下拉列表如下所示:

Region 1
  address 1
  address 2

Region 2
  address 1

Region 3
  address 1
  address 2
  address 3

Region 4
  address 1

如果一个区域有多个地址,则这些地址显示在这些区域下

请不要评判代码,我知道这不是完美的,但除了下拉菜单,一切都正常

这里有两幅图片解释了它现在的样子和它应该是什么样子


谢谢大家对我的帮助!HTML

 <optgroup label="<?php echo $omniva_variant_record["region"]; ?>">
 <?php while( $omniva_variant_record = $omniva_variants_query->fetchAll() ): ?>     
     <option><?php echo $omniva_variant_record["name"]; ?></option>
 <?php endwhile; ?>
 </optgroup>
这将首先获取唯一的
区域
s,然后对于返回的每一行,它将获取
名称
,其
区域
$outgroup\u record['region']的值匹配。然后继续在
标记中输出结果。根据需要修改查询

<form action="" id="omnivaform" onsubmit="nextStep();" method="post">
    <input type="hidden" name="choose_omniva" />
    <div id="OmnivaSelector">
        <?php
        $omniva_variants_query = $db_link->prepare('SELECT COUNT(*) FROM `omniva` ORDER BY `region` ASC;');
        $omniva_variants_query->execute();
        if ($omniva_variants_query->fetchColumn() == 1) {
            $omniva_variants_query = $db_link->prepare('SELECT * FROM `omniva`ORDER BY `region` ASC;');
            $omniva_variants_query->execute();

            $omniva_variant_record = $omniva_variants_query->fetch();
        ?>
            <select id="omniva_selector" name="omniva_variant" style="display:none">
                <option value="<?php echo $omniva_variant_record["id"]; ?>"><?php echo $omniva_variant_record["region"]; ?></option>
            </select>
        <?php
        } else { ?>
            <div class="panel panel-primary">
                <div class="panel-heading">Choose your Omniva</div>
                <div class="panel-body">
                    <div class="form-group">
                        <select id="omniva_variant_selector" class="form-control" />
                        <?php
                         $outgroup = $db_link->prepare('SELECT * FROM `omniva` ORDER BY `region` ASC;');
                         $outgroup->execute();
                        while ($outgroup_record = $outgroup->fetch()) {
                        ?>
                            <optgroup label="<?php echo $outgroup_record["region"]; ?>">
                            <?php   
                            $address_options = $db_link->prepare('SELECT * FROM `omniva` ORDER BY `address` ASC;');
                            $address_options->execute();
                                while ($address_options_records = $address_options->fetch()) { ?>

                                <option><?php echo $address_options_records["name"]; ?></option>
                                <?php } ?>
                            </optgroup>
                        <?php
                        }
                        ?>
                        </select>
                    </div>
                </div>
            </div>
        <?php
        }
        ?>
    </div>
    </script>
</form>
这将首先获取唯一的
区域
s,然后对于返回的每一行,它将获取
名称
,其
区域
$outgroup\u record['region']的值匹配。然后继续在
标记中输出结果。根据需要修改查询。


<form action="" id="omnivaform" onsubmit="nextStep();" method="post">
    <input type="hidden" name="choose_omniva" />
    <div id="OmnivaSelector">
        <?php
        $omniva_variants_query = $db_link->prepare('SELECT COUNT(*) FROM `omniva` ORDER BY `region` ASC;');
        $omniva_variants_query->execute();
        if ($omniva_variants_query->fetchColumn() == 1) {
            $omniva_variants_query = $db_link->prepare('SELECT * FROM `omniva`ORDER BY `region` ASC;');
            $omniva_variants_query->execute();

            $omniva_variant_record = $omniva_variants_query->fetch();
        ?>
            <select id="omniva_selector" name="omniva_variant" style="display:none">
                <option value="<?php echo $omniva_variant_record["id"]; ?>"><?php echo $omniva_variant_record["region"]; ?></option>
            </select>
        <?php
        } else { ?>
            <div class="panel panel-primary">
                <div class="panel-heading">Choose your Omniva</div>
                <div class="panel-body">
                    <div class="form-group">
                        <select id="omniva_variant_selector" class="form-control" />
                        <?php
                         $outgroup = $db_link->prepare('SELECT * FROM `omniva` ORDER BY `region` ASC;');
                         $outgroup->execute();
                        while ($outgroup_record = $outgroup->fetch()) {
                        ?>
                            <optgroup label="<?php echo $outgroup_record["region"]; ?>">
                            <?php   
                            $address_options = $db_link->prepare('SELECT * FROM `omniva` ORDER BY `address` ASC;');
                            $address_options->execute();
                                while ($address_options_records = $address_options->fetch()) { ?>

                                <option><?php echo $address_options_records["name"]; ?></option>
                                <?php } ?>
                            </optgroup>
                        <?php
                        }
                        ?>
                        </select>
                    </div>
                </div>
            </div>
        <?php
        }
        ?>
    </div>
    </script>
</form>



你只需要将optgroup从循环中移出,这样它就不会重复SimpleThack并回答@Shakel Ahmad,但当我将optgroup移至外部while循环时,我只会得到没有区域的所有地址,只工作,这就是itOkey,在这种情况下,你需要完全更改逻辑,您需要主查询来获取optgroup,然后在循环中添加其他查询,该查询将搜索选项并打印选项请检查答案,我将更改您的查询,请根据您的需要进行修改,我只是给您一个想法,希望这能起作用,你只需要将optgroup从循环中移出,这样它就不会重复SimpleThak并回答@Shakel Ahmad,但当我将optgroup移至外部while循环时,我只会得到所有没有区域的地址,只起作用,这就是itOkey,在这种情况下,你需要完全更改逻辑,您需要主查询来获取optgroup,然后在循环中添加其他查询,该查询将搜索选项并打印选项请检查答案,我会更改您的查询,请根据您的需要进行修改,我只是给您一个想法,希望这会行得通谢谢您的时间并回答@ghoshriju33,正如我在其他答案中提到的,我只得到没有区域的地址,fetchAll()也不工作。当我使用fetchAll()时,我什么也得不到,但是使用fetch()我只得到地址您可以提供
var\u dump
$omniva\u variants\u query->fetch()
$omniva\u variants\u query->fetchAll()
@埃迪杰斯马inovskis@ghoshriju32当我使用
$omniva_variants\u query->fetch()
时,我得到
bool(false)
,但当我使用
$omniva_variants\u query->fetchAll()
时,我得到
数组(0){}
@EdijsMaļinovskis尝试使用
fetchAll(PDO::fetch ASSOC)
,看看它是否有效不幸的是,没有改变。使用
fetchAll(PDO::FETCH_ASSOC)
没有区域和地址。使用
fetch(PDO::fetch_ASSOC)
没有区域,但有所有地址感谢您的时间,并回答@ghoshriju33正如我在其他答案中提到的,我只得到没有区域的地址,fetchAll()也不起作用。当我使用fetchAll()时,我什么也得不到,但是使用fetch()我只得到地址您可以提供
var\u dump
$omniva\u variants\u query->fetch()
$omniva\u variants\u query->fetchAll()
@埃迪杰斯马inovskis@ghoshriju32当我使用
$omniva_variants\u query->fetch()
时,我得到
bool(false)
,但当我使用
$omniva_variants\u query->fetchAll()
时,我得到
数组(0){}
@EdijsMaļinovskis尝试使用
fetchAll(PDO::fetch ASSOC)
,看看它是否有效不幸的是,没有改变。使用
fetchAll(PDO::FETCH_ASSOC)
没有区域和地址。使用
fetch(PDO::fetch_ASSOC)
无区域,但具有所有地址
<form action="" id="omnivaform" onsubmit="nextStep();" method="post">
    <input type="hidden" name="choose_omniva" />
    <div id="OmnivaSelector">
        <?php
        $omniva_variants_query = $db_link->prepare('SELECT COUNT(*) FROM `omniva` ORDER BY `region` ASC;');
        $omniva_variants_query->execute();
        if ($omniva_variants_query->fetchColumn() == 1) {
            $omniva_variants_query = $db_link->prepare('SELECT * FROM `omniva`ORDER BY `region` ASC;');
            $omniva_variants_query->execute();

            $omniva_variant_record = $omniva_variants_query->fetch();
        ?>
            <select id="omniva_selector" name="omniva_variant" style="display:none">
                <option value="<?php echo $omniva_variant_record["id"]; ?>"><?php echo $omniva_variant_record["region"]; ?></option>
            </select>
        <?php
        } else { ?>
            <div class="panel panel-primary">
                <div class="panel-heading">Choose your Omniva</div>
                <div class="panel-body">
                    <div class="form-group">
                        <select id="omniva_variant_selector" class="form-control" />
                        <?php
                         $outgroup = $db_link->prepare('SELECT * FROM `omniva` ORDER BY `region` ASC;');
                         $outgroup->execute();
                        while ($outgroup_record = $outgroup->fetch()) {
                        ?>
                            <optgroup label="<?php echo $outgroup_record["region"]; ?>">
                            <?php   
                            $address_options = $db_link->prepare('SELECT * FROM `omniva` ORDER BY `address` ASC;');
                            $address_options->execute();
                                while ($address_options_records = $address_options->fetch()) { ?>

                                <option><?php echo $address_options_records["name"]; ?></option>
                                <?php } ?>
                            </optgroup>
                        <?php
                        }
                        ?>
                        </select>
                    </div>
                </div>
            </div>
        <?php
        }
        ?>
    </div>
    </script>
</form>