Заполните выбор с записями базы данных oo способом

0

Моя таблица базы данных

TABLE 'dog_types' (
    'dog_type_id' int(11)
    'dog_type_name' varchar(64)  

Я хотел бы сделать записи dog_type_name доступными в меню выбора.

Моя попытка

Class Sell {
    public static function getAllDogTypes() 
    {
    $database = DatabaseFactory::getFactory()->getConnection();
    $sql = "SELECT dog_type_name FROM dog_types";
    $query = $database->prepare($sql);
    $query->execute(array());

    // fetchAll() is the PDO method that gets all result rows
    return $query->fetchAll();
}

public static function viewSelect($name = "select") {

   $html = "<select name='$name'>\n";
   foreach ($query as $key => $val) {
       $html .= "<option value='$key'>$val</option>\n";
   }
   $html .= "</select>\n";
   return $html;
   }
}

<?php echo Sell::viewSelect(); ?>

Мой вывод

<select>            
    Notice: Undefined variable: query  
    Warning: Invalid argument supplied for foreach()          
</select>

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

С предложениями noob мой код выглядит так:

public static function getAllDogTypes() 
{
    $database = DatabaseFactory::getFactory()->getConnection();

    $sql = "SELECT * FROM dog_types";
    $query = $database->prepare($sql);
    $query->execute(array());

    // fetchAll() is the PDO method that gets all result rows
    return $query->fetchAll();
}

public static function viewSelect($name = "select") {
    $query=Sell::getAllDogTypes();

    $html = "<select name='$name'>\n";
    foreach ($query as $key => $val) {
        $html .= "<option value='$key'>$val</option>\n";
    }
    $html .= "</select>\n";
    return $html;
}

<?php echo Sell::viewSelect(); ?>

var_dump по запросу показывает записи в базе данных:

Dog_type: array(8) { [0]=> object(stdClass)#8 (2) { ["dog_type_id"]=> string(1) "1" ["dog_type_name"]=> string(13) "Affenpinscher" } [1]=> object(stdClass)#9 (2) { ["dog_type_id"]=> string(1) "2" ["dog_type_name"]=> string(12) "Afghan Hound" } [2]=> object(stdClass)#10 (2) { ["dog_type_id"]=> string(1) "3" ["dog_type_name"]=> string(4) "Aidi" } [3]=> object(stdClass)#11 (2) { ["dog_type_id"]=> string(1) "4" ["dog_type_name"]=> string(16) "Airedale Terrier" } [4]=> object(stdClass)#12 (2) { ["dog_type_id"]=> string(1) "5" ["dog_type_name"]=> string(6) "Akbash" } [5]=> object(stdClass)#13 (2) { ["dog_type_id"]=> string(1) "6" ["dog_type_name"]=> string(5) "Akita" } [6]=> object(stdClass)#14 (2) { ["dog_type_id"]=> string(1) "7" ["dog_type_name"]=> string(13) "Alano Espanol" } [7]=> object(stdClass)#15 (2) { ["dog_type_id"]=> string(1) "8" ["dog_type_name"]=> string(16) "Alaskan Klee Kai" } } 

Сообщения об ошибках

Примечание. Неопределенная переменная: запрос
Обрезаемая фатальная ошибка: объект класса stdClass не может быть преобразован в строку

  • 0
    Это потому, что вы не передаете переменную $query в функцию viewSelect . Это определено в getAllDogTypes но не в viewSelect
  • 0
    Ага! Спасибо! Как мне передать переменную $ query?
Теги:
database
foreach
oop

2 ответа

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

добавьте эту строку в начало второй функции:

$ Запрос = Продажа :: getAllDogTypes(); // получаем значение $ query из функции getAlldogTypes, которая присутствует в этом классе.

$ query возвращает массив объектов, поэтому вам нужен вложенный цикл foreach

$html = "<select name='$name'>\n";
foreach ($query as $obj) {
  foreach ($obj as $key=>$val)
    $html .= "<option value='$key'>$val</option>\n";
 }
}
$html .= "</select>\n";
return $html;

}

  • 0
    Я получаю эту ошибку: Использование $ this, когда не в контексте объекта в
  • 0
    Теперь я получаю это: Catchable фатальная ошибка: объект класса stdClass не может быть преобразован в строку
Показать ещё 4 комментария
1

в первую очередь изменить

public static function viewSelect($name = "select",$query="") {
$sql = "SELECT dog_type_id,dog_type_name FROM dog_types";

Потому что вы должны передать dog_type_id в значениях опций.

Первый звонок

 <?php $query=Self::getAllDogTypes(); ?>

Затем позвоните

 <?php echo Self::viewSelect($query); ?>
  • 0
    Я получаю эту ошибку: указан неверный аргумент для foreach () Мой foreach выглядит так: foreach ($ query as $ key => $ val) {
  • 0
    По какой-то причине я получаю эту ошибку: Неопределенная переменная: запрос

Ещё вопросы

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