繁体   English   中英

从数据库PHP填充下拉列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM