【问题标题】:Codeigniniter insert data through models and controllerCodeigniniter 通过模型和控制器插入数据
【发布时间】:2017-11-16 01:29:49
【问题描述】:

控制器我有 form_ctrl 代码如下

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class form_ctrl extends CI_Controller {

    public function index()
    {
        //$this->load->view('welcome_message');
             $this->load->helper(array('form', 'url'));
             $this->load->library('form_validation');

                //$this->form_validation->set_rules('name', 'Username', 'required');
              $this->form_validation->set_rules('name', 'name','required|min_length[5]|max_length[12]');
                $this->form_validation->set_rules('pass', 'Password', 'required',
                        array('required' => 'You must provide a %s.')
                );
                $this->form_validation->set_rules('email', 'Email', 'required');
                $this->form_validation->set_rules('mobile', 'Mobile', 'required');
                $this->form_validation->set_rules('address', 'Address','required|min_length[5]');

                if ($this->form_validation->run() == FALSE)
                {
                        $this->load->view('table');
                }
                else
                {
                        $this->load->view('results');
                        $name=$this->input->post('name');
                        $pass=$this->input->post('pass');
                        $email=$this->input->post('email');
                        $mobile=$this->input->post('mobile');
            $address=$this->input->post('address');
                             $data = array(
                                           'name' =>$name ,
                                           'pass' => $pass,
                                           'email' => $email,
                                           'mobile' => $mobile,
                       'address' => $address
                                           );
                            $this->db->insert('form', $data);

                                       }
        }
}

查看我有result.php代码

 <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
    <?php echo validation_errors(); ?>
    <?php echo form_open(); ?>
    <table >
    <tr>
        <td colspan=2 align="center"><h3>User Details</h3></td>
    </tr>
    <tr>
        <td>
            <?php echo form_label('Name'); ?>
        </td>
        <td>
            <?php echo form_input(array('id' => 'name', 'name' => 'name')); ?>
        </td>
    </tr>
    <tr>
        <td>
            <?php echo form_label('Pass'); ?>
        </td>
        <td>
            <?php echo form_password(array('id' => 'pass', 'name' => 'pass')); ?>
        </td>
    </tr>
    <tr>
        <td><?php echo form_label('Email'); ?>
    </td>
    <td><?php echo form_input(array('id' => 'email', 'name' => 'email')); ?></td>
    </tr>
    <tr>
        <td><?php echo form_label('Mobile'); ?>
    </td>
        <td><?php echo form_input(array('id' => 'mobile', 'name' => 'mobile')); ?>
    </td>
    </tr>
    <tr>
        <td><?php echo form_label('Address'); ?>
    </td>
        <td><?php echo form_input(array('id' => 'address', 'name' => 'address')); ?>
    </td>
    </tr>
    <tr>
        <td colspan="2" align="center"><?php echo form_submit(array('id' => 'submit', 'value' => 'Submit')); ?>
    </td>
    </tr>
    <?php echo form_close(); ?>
    </table>
    </body>
    </html>

在这段代码中,我想包含模型来插入数据而不是控制器。

代码可以正常工作以将数据插入数据库,但我希望通过模型而不是来自控制器。我尝试了很多次,但都没有得到理想的结果。

【问题讨论】:

  • 这不是它的工作方式,您必须在控制器中加载模型,然后传递参数/数据以将其 MVC 模式保存在 DB 中,您必须像这样坚持下去

标签: codeigniter


【解决方案1】:

commonModel.php

class CommonModel extends CI_Model {

    function __construct() { 
        parent::__construct (); 
    }

    public function insert($tableName,$data){

       return $this->db->insert($tableName, $data);

    }
}

像这样替换你的控制器代码

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class form_ctrl extends CI_Controller {

    public function index()
    {
        //$this->load->view('welcome_message');
             $this->load->helper(array('form', 'url'));
             $this->load->library('form_validation');
             $this->load->model('commonModel');

                //$this->form_validation->set_rules('name', 'Username', 'required');
              $this->form_validation->set_rules('name', 'name','required|min_length[5]|max_length[12]');
                $this->form_validation->set_rules('pass', 'Password', 'required',
                        array('required' => 'You must provide a %s.')
                );
                $this->form_validation->set_rules('email', 'Email', 'required');
                $this->form_validation->set_rules('mobile', 'Mobile', 'required');
                $this->form_validation->set_rules('address', 'Address','required|min_length[5]');

                if ($this->form_validation->run() == FALSE)
                {
                        $this->load->view('table');
                }
                else
                {
                        $this->load->view('results');
                        $name=$this->input->post('name');
                        $pass=$this->input->post('pass');
                        $email=$this->input->post('email');
                        $mobile=$this->input->post('mobile');
            $address=$this->input->post('address');
                             $data = array(
                                           'name' =>$name ,
                                           'pass' => $pass,
                                           'email' => $email,
                                           'mobile' => $mobile,
                       'address' => $address
                                           );
                            $this->commonModel->insert('form', $data);


                                       }
        }
}

【讨论】:

  • 现在出现此错误:遇到错误无法找到您指定的模型:data_model
  • 您是否在application/models/commonModel.php 路径中创建了commonModel.php 文件?
  • 如果是公开的,请提供data_model代码。 @Gaurav
  • Data_model和文件名Data_model.php给它
  • 我的模型在这里: db->insert($data); } } ?>
【解决方案2】:
   class form_ctrl extends CI_Controller {

        public function index()
        {
            //$this->load->view('welcome_message');
                 $this->load->helper(array('form', 'url'));
                 $this->load->library('form_validation');

                    //$this->form_validation->set_rules('name', 'Username', 'required');
                  $this->form_validation->set_rules('name', 'name','required|min_length[5]|max_length[12]');
                    $this->form_validation->set_rules('pass', 'Password', 'required',
                            array('required' => 'You must provide a %s.')
                    );
                    $this->form_validation->set_rules('email', 'Email', 'required');
                    $this->form_validation->set_rules('mobile', 'Mobile', 'required');
                    $this->form_validation->set_rules('address', 'Address','required|min_length[5]');

                    if ($this->form_validation->run() == FALSE)
                    {
                            $this->load->view('table');
                    }
                    else
                    {
                            $this->load->view('results');
                            $name=$this->input->post('name');
                            $pass=$this->input->post('pass');
                            $email=$this->input->post('email');
                            $mobile=$this->input->post('mobile');
                $address=$this->input->post('address');
                                 $data = array(
                                               'name' =>$name ,
                                               'pass' => $pass,
                                               'email' => $email,
                                               'mobile' => $mobile,
                           'address' => $address
                                               );
$this->load->model ( 'user_model' );

                                $this->user_model->insert('form', $data);

                                           }
            }
    }

型号

class User_model extends CI_Model 
{
public function insert($table,$data)
    {

        $this->db->insert ( $table, $data );


    }
}

【讨论】:

  • 现在出现此错误::An Error Was Encountered 无法找到您指定的模型:data_model
【解决方案3】:
class form_ctrl extends CI_Controller {
        public function index(){
                 $this->load->helper(array('form', 'url'));
                 $this->load->library('form_validation');
                 $this->form_validation->set_rules('name', 'name','required|min_length[5]|max_length[12]');
                 $this->form_validation->set_rules('pass', 'Password', 'required',
                            array('required' => 'You must provide a %s.')
                    );
                 $this->form_validation->set_rules('email', 'Email', 'required');
                 $this->form_validation->set_rules('mobile', 'Mobile', 'required');
                 $this->form_validation->set_rules('address', 'Address','required|min_length[5]');

                    if ($this->form_validation->run() == FALSE)
                    {
                            $this->load->view('table');
                    }
                    else
                    {
                            $data = $this->input->post();
                            $this->load->view('results',$data);
                            $this->load->model ( 'user_model' );
                            $this->user_model->insert('form', $this->input->post());

                    }
            }
    }

您的模型如下所示。

 public function insert($table, $data) {
        $param = array(
            'name' => $data['name'],
            'pass' => $data['pass'],
            'email' => $data['email'],
            'mobile' => $data['mobile'],
            'address' => $data['address']
        );
        $this->db->insert($table, $param);
    }

您的控制器部分重量轻且代码较少始终是最佳实践。

【讨论】:

  • 感谢 shyam,如果我想将 $data 发送到新的视图文件,我有 results.php 如何发送这些数据以在该文件上发送
  • 因此您可以在第二个参数中加载视图时传递此数组。 $this-&gt;load-&gt;view('result',$array)
【解决方案4】:
**controller**

$postData = $_POST;
$result = $this->batch->addBatch($postData);

**Batch Model**

class Batch_model extends MY_Model {

    public function __construct() {
        parent::__construct();
    }

 function addBatch($postData) {
        $this->_table = TBL_BATCH;
        $result = $this->add($postData);
        return $result;
    }
}



**My Model**
public $_table;
public $_fields;
public $_where;
protected $_except_fields = array();
protected $soft_delete = TRUE;

function add($PostData) {

        $postArray = $this->getDatabseFields($PostData);
        $query = $this->db->insert($this->_table, $postArray);

        if ($this->db->affected_rows() > 0)
            return $this->db->insert_id();
        else
            return '';
    }

protected function getDatabseFields($postData, $tableName = '') {
        if (empty($tableName))
            $tableName = $this->_table;

        $table_fields = $this->getFields($tableName);

        $final = array_intersect_key($postData, $table_fields);

        return $final;
    }

【讨论】:

  • 这不是上述问题的答案@komal
  • 我只是建议他也可以这样实现。
【解决方案5】:
    Controller I have form_ctrl code is below

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');

    class form_ctrl extends CI_Controller {

        public function index()
        {
            //$this->load->view('welcome_message');
                 $this->load->helper(array('form', 'url'));
                 $this->load->library('form_validation');

                    //$this->form_validation->set_rules('name', 'Username', 'required');
                  $this->form_validation->set_rules('name', 'name','required|min_length[5]|max_length[12]');
                    $this->form_validation->set_rules('pass', 'Password', 'required',
                            array('required' => 'You must provide a %s.')
                    );
                    $this->form_validation->set_rules('email', 'Email', 'required');
                    $this->form_validation->set_rules('mobile', 'Mobile', 'required');
                    $this->form_validation->set_rules('address', 'Address','required|min_length[5]');

                    if ($this->form_validation->run() == FALSE)
                    {
                            $this->load->view('table');
                    }
                    else
                    {
                            $this->load->view('results');
                            $name=$this->input->post('name');
                            $pass=$this->input->post('pass');
                            $email=$this->input->post('email');
                            $mobile=$this->input->post('mobile');
                $address=$this->input->post('address');
                                 $data = array(
                                               'name' =>$name ,
                                               'pass' => $pass,
                                               'email' => $email,
                                               'mobile' => $mobile,
                           'address' => $address
                                               );
                     $this->your_model->insert_data($data)



                                           }
            }
    }

这是你的模型your_model.......

class your_model 扩展 CI_Model {

 function insert_data($data) {
       $this->db->insert('your_table', $data);

    }

}

** 您必须将your_model 加载到控制器或自动加载中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多