【问题标题】:Populate dropdown from database从数据库填充下拉列表
【发布时间】:2014-12-25 02:32:26
【问题描述】:

我正在尝试使用数据库表中的条目填充下拉选择。
数据库表

TABLE `events` (
    `event_id` INT(11) unsigned NOT NULL AUTO_INCREMENT,
    `event_title` VARCHAR(255) NOT NULL,
    `event_desc` TEXT,
    `event_location` VARCHAR(255) NOT NULL,
    `event_requirements` TEXT DEFAULT NULL,
    `event_date` DATETIME NOT NULL,
 PRIMARY KEY (`event_id`)

代码(在 MVC 架构中):
控制器

function index()
    {
        $overview_model = $this->loadModel('Events');
        $this->view->dog_types = $overview_model->getEventTypes();
        $this->view->render('events/index');
    }

型号

public function getEventTypes()
    {
        $sth = $this->db->prepare("SELECT event_id, event_title FROM events");
        $sth->execute();

        $events = array();

        foreach ($sth->fetchAll() as $event) {
            $events[$event->event_id] = new stdClass();
            $events[$event->event_id]->event_title = $event->event_title;
        }
        return $events;
    }

查看

    <select>
        <?php foreach ($this->events as $event) {
            echo "<option value='" .$event->event_title. "'>" .$event->event_title."</option>";
        }?>
    </select>

错误我得到:

注意:未定义的属性:View::$events

警告:为 foreach() 提供的参数无效

我对这一切真的很陌生,很高兴能得到任何帮助!谢谢!!

【问题讨论】:

    标签: php mysql sql oop


    【解决方案1】:

    错误很明显。你还没有一个名为 $events 的属性。您填充了一个名为

    的属性
    $this->view->dog_types
    

    在您看来,您将能够像这样访问对象:

      <select>
            <?php foreach ($this->dog_types as $event) { //or $events as $event depending what you indexed as
                echo "<option value='" .$event->event_title. "'>" .$event->event_title."</option>";
            }?>
        </select>
    

    【讨论】:

    • 非常感谢!!我看代码很久了,没发现!
    • 你在使用 CI 吗?如果没有,我会改变答案
    • OK 删掉所有 CI 相关的东西
    【解决方案2】:

    首先我想知道您使用的是哪个框架? 出现此错误是因为您尚未将事件传递给各自的视图。 当您当时渲染任何视图时,您必须传递要在视图上使用的变量。根据你的说法

    $this->view->dog_types = $overview_model->getEventTypes();

    这意味着您将事件保存在 dog_types 变量中,并尝试使用 events 访问它。

    【讨论】:

    • 太棒了!谢谢! Mike Miller 已经指出了这一点。我刚刚将 dog_types 更改为控制器中的事件,现在它可以工作了。
    • 我目前无法对您的回复进行投票,因为我没有足够的声誉,但我会尽快!感谢您的帮助!
    猜你喜欢
    • 2011-11-09
    • 2018-10-03
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多