[英]Populate Drop Down from Database PHP
我看到有人问过几次了,但是按照所有其他线程进行,我一无所获。 我正在尝试从数据库中填充一个下拉列表,但是我一直得到一个空白的下拉列表。我发誓一定是因为我犯了一个简单的错误。
<select name="Verb List">
<?php fillVerblist($dbc); ?>
</select>
<?php
function fillVerblist($dbc) {
mysqli_query($dbc, 'SET NAMES UTF8');
$sql = mysqli_query($dbc, "SELECT * FROM verblist WHERE form = 'F'");
while ($row = mysql_fetch_assoc($sql)){
echo' <option value="verblist">'.$row['specificColumn'].'</option>';
}
}
?>
谢谢!
根据PHP手册 : mysql_fetch_assoc()
在PHP 5.5.0中已弃用,因此请使用mysqli_fetch_assoc()
如果希望每个选项值都与显示的文本匹配,请执行以下操作:
while ($row = mysqli_fetch_assoc($sql)){
echo' <option value="'.$row['specificColumn'].'">'.$row['specificColumn'].'</option>';
}
如DontPanic在评论中所述,您也可以省略value属性,文本将用作值。
要调试空白,请选择将其进一步放入while循环内:
echo '<pre>';
echo $row;
echo '</pre>';
这将告诉您从数据库返回的内容以及数据/查询是否不正确。
花了一点时间来编写,但是像下面这样的简单类将简化选择菜单的整个创建过程-只需输入不同的参数,然后弹出不同的菜单即可。 DOMDocument
的最常见用法是解析文档-是XML还是HTML,但是它的方法非常适合即时生成内容-在这种情况下,简单的选择菜单在DOM中在技术上是正确的。
<?php
class selectmenu{
private $dbo;
private $name;
private $sql;
public function __construct( $dbo, $name, $sql ){
$this->dbo=$dbo;
$this->name=$name;
$this->sql=$sql;
}
public function create(){
$result=$this->dbo->query( $this->sql );
if( $result ){
$dom=new DOMDocument;
$select=$dom->createElement('select');
$dom->appendChild( $select );
$attr=$dom->createAttribute( 'name' );
$attr->value=$this->name;
$select->appendChild( $attr );
while( $rs = $result->fetch_object() ){
/*
The option value is the ID and the innerHTML is
whatever column name is designated as `value` in the
query. The names of these are fairly arbitary - you
could call them anything really in the query but change
the field here( ie: $rs->value to $rs->somecolumn )
*/
$option=$dom->createElement('option');
$option->nodeValue=$rs->value;
$attr=$dom->createAttribute( 'value' );
$attr->value=$rs->id;
$option->appendChild( $attr );
$select->appendChild( $option );
}
return $dom->saveHTML();
}
return 'error';
}
}
要使用该类,您需要执行以下操作。
$dbhost = 'localhost';
$dbuser = 'root';
$dbpwd = 'xxx';
$dbname = 'xxx';
$db=new mysqli( $dbhost, $dbuser, $dbpwd, $dbname );
/* the column `Name` is aliased as `value` */
$sql_city="select `id`, `Name` as 'value' from `city` limit 20;";
$name_city='city';
/* note column aliases !! */
$sql_country="select `code` as 'id', `Region` as 'value' from `country` limit 20;";
$name_country='country';
$obj=new selectmenu( $db, $name_city, $sql_city );
$city=$obj->create();
$obj=new selectmenu( $db, $name_country, $sql_country );
$country=$obj->create();
echo $city, $country;
?>
PDO可以实现相同的想法,但是方法需要适当地更改。
更明确地针对原始问题
$sql="SELECT `col` as 'id', `othercol` as 'value' FROM verblist WHERE form = 'F'";
$name='verblist';
$obj=new selectmenu( $dbc, $name, $sql );
$menu=$obj->create();
echo $menu;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.