如何将表单值传递给codeigniter上的模型

时间:2016-06-02 15:08:05

标签: php codeigniter variables

我正在使用codeigniter,我想将值从视图传递给模型,但是当我插入表格时它总是给出0值。

在我的表单视图下面

<div class="content">
  <div class="row">
    <div class="col-sm-6">
      <div class="form-group">
        <label for="firstname">Firstname</label>
        <input type="text" class="form-control" id="firstname" name="firstname" >
      </div>
    </div>
    <div class="col-sm-6">
      <div class="form-group">
        <label for="lastname">Lastname</label>
        <input type="text" class="form-control" id="lastname" name="lastname" value="<?= set_value('lastname') ?>">
      </div>
    </div>
  </div>

  <div class="row">

    <div class="col-sm-6">
      <div class="form-group">
        <label for="street">Address</label>
        <textarea class="form-control" id="address" cols="9" rows="4" name="address"><?= set_value('address') ?></textarea>

      </div>
    </div>
  </div>
  <!-- /.row -->
</div>


<?= anchor('welcome/clear_cart', 'Clear Cart', ['class' => 'btn btn-danger']) ?> 
<?= anchor(base_url(), 'Continue Shopping', ['class' => 'btn btn-primary']) ?> 
<?= anchor('order', 'Check Out', ['class' => 'btn btn-success']) ?>

从这个视图中我想将表单的值传递给&#34; order&#34;控制器。

Bellow my&#34; order&#34;控制器

public function index()
{
    $is_processed = $this->model_orders->process();
    if($is_processed){
        $this->cart->destroy();
        redirect('order/success');
    } else {
        $this->session->set_flashdata('error','Failed to processed your order, please try again!');
        redirect('welcome/cart');
    }
}

然后控制器将值传递给&#34; model_orders-&gt; process()&#34;

下面是model_order函数的代码process()

$data_delivery = array(
    'first_name' => $this->input->post('firstname'),
    'lastname_name' => $this->input->post('lastname'),
    //more
);

$this->db->insert('deliveryorder', $data_delivery);

因此,当我执行insert时,视图中的值不会出现在模型中。 first_name变量有&#39; 0&#39;价值,也是另一个变量。

我怎么能让它有效?所以我可以从表单视图中获取值,而不是从我可以插入到我的表中的模型中获取值?

2 个答案:

答案 0 :(得分:0)

为了让<input>元素显示在$this->input->post()中,您必须实际提交表单。

视图看起来应该更像这样。

<form method="post" accept-charset="utf-8" action="<?= base_url('order'); ?>">
  <div class="content">
    <div class="row">
      <div class="col-sm-6">
        <div class="form-group">
          <label for="firstname">Firstname</label>
          <input type="text" class="form-control" id="firstname" name="firstname" >
        </div>
      </div>
      <div class="col-sm-6">
        <div class="form-group">
          <label for="lastname">Lastname</label>
          <input type="text" class="form-control" id="lastname" name="lastname" value="<?= set_value('lastname') ?>">
        </div>
      </div>
    </div>

    <div class="row">

      <div class="col-sm-6">
        <div class="form-group">
          <label for="street">Address</label>
          <textarea class="form-control" id="address" cols="9" rows="4" name="address"><?= set_value('address') ?></textarea>

        </div>
      </div>
    </div>
  </div>
  <?php
  echo form_submit('submit', 'Check Out', ['class' => 'btn btn-success']);
  echo anchor('welcome/clear_cart', 'Clear Cart', ['class' => 'btn btn-danger']);
  echo anchor(base_url(), 'Continue Shopping', ['class' => 'btn btn-primary']);
  ?>     
</form>

答案 1 :(得分:0)

作为@DFriend已经说过的补充:

如果要将发布的值传递给模型,则必须将它们作为参数添加。

<强>模型

function process($data_delivery){
    $this->db->insert('deliveryorder',$data_delivery);
}

<强>控制器

public function index()
{
    $is_processed = $this->model_orders->process($this->input->post());
    if($is_processed){
        $this->cart->destroy();
        redirect('order/success');
    } else {
        $this->session->set_flashdata('error','Failed to processed your order, please try again!');
        redirect('welcome/cart');
    }
}