Заполнить выпадающий из базы данных PHP

0

Я вижу, что это было задано несколько раз, но, следуя всем другим нитям, я ничуть не стал. Я пытаюсь заполнить выпадающее меню из базы данных, но я продолжаю получать пустоту. Я клянусь, что это потому, что я ошибаюсь.

<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>';
}
}

?>

Спасибо!

Теги:
database

2 ответа

1
Лучший ответ

В соответствии с руководством 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>';

Это скажет вам, что возвращается из вашей базы данных, и если ваши данные/запрос неверны.

  • 1
    Горячая чертовски! это сработало! так что я могу использовать это как учебный опыт, а не кормить ложкой, не могли бы вы объяснить, что я сделал не так? примечание: я думаю, что вы пропустили некоторые апострофы в области 'option value', чтобы отделить php.
  • 0
    =) Рад, если бы я точно знал, ха-ха. Я думаю, что это просто пропал я в mysqli. Проверьте: php.net/manual/en/function.mysql-fetch-assoc.php И обратите внимание на большое красное предупреждение, что оно устарело в PHP 5.5.0 ... так что вам не нужны строки отладки?
Показать ещё 1 комментарий
1

Потребовалось немного времени, чтобы написать, но простой класс, подобный приведенному ниже, упростил бы все создание избранных меню - просто введите разные параметры и выйдет из другого меню. Наиболее распространенное использование 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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню