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>