在codeigniter中显示与表单相同页面的结果,未定义的变量 [英] Display result at same page as form in codeigniter, undefined variable

查看:95
本文介绍了在codeigniter中显示与表单相同页面的结果,未定义的变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我通过预订系统学习codeIgniter。当结果显示在不同的页面上时,它一切都变成了fint,但是当把它放在同一页面(这是我想要的) $ rooms_form_options 和<$ c $

I'm learning codeIgniter by making a booking system. When having the result showing on a different page it all went fint, but when putting it on the same page (which is how I want it) $rooms_form_options and $packages_form_options gets undefined after the form being submitted

<div>
    <?php echo form_label('Conference Room', 'id') ; ?>
    <?php echo form_dropdown('id', $rooms_form_options, set_value('id')); ?>
</div>
<div>
    <?php echo form_label('Package type', 'package_id') ; ?>
    <?php echo form_dropdown('package_id', $packages_form_options, set_value('package_id')); ?>
</div>
<div>
    <?php echo form_label('Antal deltagare', 'number_people') ; ?>
    <?php echo form_input('number_people', set_value('number_people')) ; ?>
</div>

<div>
    <?php echo form_submit('preview', 'Book'); ?>
</div>

<?php echo form_close(); ?>

<?php
if(isset($_POST["preview"])) {
if($messages) {
    echo html_escape($messages);
} else {
?>

<div class="alert alert-success">Number of participants:  <?php echo    html_escape($guests); ?> </div>
<div class="alert alert-success">Room:  <?php echo html_escape($room); ?>   </div>
<div class="alert alert-success">Package:  <?php echo html_escape($package); ?> </div>
<div class="alert alert-success">Price per participant: <?php echo html_escape($price); ?> </div>
<div class="alert alert-success">Total Price: <?php echo html_escape($guests*$price); ?> </div>
<?php } }?>

这是我得到 $ rooms_form_options $ packages_form_options from:

This is where I get $rooms_form_options and $packages_form_options from:

    public function index() {

    $this->load->helper('form');
    $this->load->view('bootstrap/header');

    $this->load->model('Booking_Model');
    $rooms = $this->Booking_Model->get();
    $rooms_form_options = array();


    foreach ($rooms as $id => $room) {
        $rooms_form_options[$id] = $room->title;
    }


    $this->load->model('Package_Model');
    $packages = $this->Package_Model->get();
    $packages_form_options = array();

    foreach ($packages as $id => $package) {
        $packages_form_options[$id] = $package->package_name;
    }

    $this->load->view('booking', array(
        'rooms_form_options' => $rooms_form_options,
        'packages_form_options' => $packages_form_options,
    ));


    $this->load->view('bootstrap/footer');

}

我在方法中处理表单预览,并在此处返回预订页面:

I handle the form in method called preview and here's where I point back to the booking page:

    // load view with people, room and package values
    $this->load->view('bootstrap/header');
    $this->load->view('booking', array(
        'guests' => $guests,
        'room' => $room_title,
        'package' => $package_title,
        'alias' => $package_alias,
        'price' => $price,
        'messages' => $messages,

    ));

如何确保 $ rooms_form_options $ package_form_options 是在表单提交后定义的吗?

How do I make sure that $rooms_form_options and $package_form_options are defined after the form been submitted?

推荐答案

创建另一个单独的方法来填充这些变量:

Create another, separate method to populate these variables:

private function get_options() {

    $this->load->model('Booking_Model');
    $rooms = $this->Booking_Model->get();
    $rooms_form_options = array();

    foreach ($rooms as $id => $room) {
        $rooms_form_options[$id] = $room->title;
    }

    $this->load->model('Package_Model');
    $packages = $this->Package_Model->get();
    $packages_form_options = array();

    foreach ($packages as $id => $package) {
        $packages_form_options[$id] = $package->package_name;
    }

    return array(
        'packages_form_options' => $packages_form_options,
        'rooms_form_options' => $rooms_form_options,
    );
}

整体将如下所示:

public function index() {

    $this->load->helper('form');
    $this->load->view('bootstrap/header');

    $options = $this->get_options();

    $this->load->view('booking', array(
        'guests' => '',
        'room' => '',
        'package' => '',
        'alias' => '',
        'price' => '',
        'messages' => '',
        'rooms_form_options' => $options['packages_form_options'],
        'packages_form_options' => $options['rooms_form_options'],
    ));

    $this->load->view('bootstrap/footer');
}

public function preview() {

    $this->load->helper('form');
    $this->load->view('bootstrap/header');

    $options = $this->get_options();

    $this->load->view('booking', array(
        'guests' => $this->input->post('guests'),
        'room' => $this->input->post('room_title'),
        'package' => $this->input->post('package_title'),
        'alias' => $this->input->post('package_alias'),
        'price' => $this->input->post('price'),
        'messages' => $this->input->post('messages'),
        'rooms_form_options' => $options['packages_form_options'],
        'packages_form_options' => $options['rooms_form_options'],
    ));

    $this->load->view('bootstrap/footer');
}

private function get_options() {

    $this->load->model('Booking_Model');
    $rooms = $this->Booking_Model->get();
    $rooms_form_options = array();

    foreach ($rooms as $id => $room) {
        $rooms_form_options[$id] = $room->title;
    }

    $this->load->model('Package_Model');
    $packages = $this->Package_Model->get();
    $packages_form_options = array();

    foreach ($packages as $id => $package) {
        $packages_form_options[$id] = $package->package_name;
    }

    return array(
        'packages_form_options' => $packages_form_options,
        'rooms_form_options' => $rooms_form_options,
    );
}

这篇关于在codeigniter中显示与表单相同页面的结果,未定义的变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆