错误使用CodeIgniter form_validation()函数抛出致命错误

时间:2014-10-02 06:46:31

标签: php html mysql codeigniter

我正在尝试在我的一个视图页面中为输入表单应用CodeIgniter的表单验证功能。在该表格中,所有字段都是必需的。如果所有字段都已成功填写,然后如果用户单击提交按钮,它将重定向到包含条目列表的另一个视图页面。如果任何字段留空,将显示验证消息。

这是我在第一个视图页面中的表单 - employee_add.php

   <div id="content" class="box">
        <form action="<?php echo base_url();?>index.php/employee_adds/insert_employee_db" method="post">
        <?php echo validation_errors(); ?>
            <fieldset>
                <legend id="add_employee_legend">Add New Employee</legend>
                <div>
                    <label id= "emp_id_add_label">Employee ID:</label>
                    <input type="text" name="emp_id" id = "employee_id_add" placeholder="Employee ID"/>
                </div>
                <div>
                    <label id= "emp_name_add_label">Employee Name:</label>
                    <input type="text" name="emp_name" id = "employee_name_add" placeholder="Employee Name"/>
                </div>
                <input type="submit" name="submit" id = "employee_info_submit" value="Send"/>
            </fieldset>    
        </form>

    </div>

这是我的控制器 - employee_adds.php

  <?php
  if ( ! defined('BASEPATH')){ exit('No direct script access allowed');}
  class Employee_adds extends CI_Controller
  {
      function __construct()
     {
         parent::__construct();
         #$this->load->helper('url');
         $this->load->model('employee_model');
     }

     //Show all Employees or validate employees
     public function index()
     {
         $this->load->helper(array('form', 'url'));

         $this->load->library('form_validation');

         $this->form_validation->set_rules('emp_id', 'Employee ID', 'required');
         $this->form_validation->set_rules('emp_name', 'Employee Name', 'required');

         if ($this->form_validation->run() == FALSE)
         {
             $this->load->view('admin_logins/employee_add');
         }
         else
         {
             $data['employee_list'] = $this->employee_model->get_all_employees();
             $this->load->view('admin_logins/employee_list');
         }
     }

     //Insert an employee
     public function insert_employee_db()
     {
         $edata['emp_id'] = $this->input->post('emp_id');
         $edata['emp_name'] = $this->input->post('emp_name');
         $res = $this->employee_model->insert_employee($edata);
         if($res)
         {
             header('location:'.base_url()."index.php/employee/".$this->index());

         }
     }
   }
   ?>

这是名为admin_logins.php的主页的控制器:

<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Admin_logins extends CI_Controller 
{
    function __construct()
    {
        parent::__construct();

    }

    public function index()
    {
        $this->load->view('admin_logins/index');
    }

    function employee()
    {

        $this->load->view('admin_logins/employee_add');

    }
}

这是我的模型 - employee_model.php

 <?php
 class Employee_model extends CI_Model 
 {

    function __construct()
    {
        parent::__construct();
        $this->load->database();
    }   

    //To retrieve all employees
    public function get_all_employees()
    {

        $query = $this->db->get('employee');
        return $query->result();
    }


    //To add a new employee to the database
    public function insert_employee($data)
    {
        return $this->db->insert('employee', $data);

    }

}
?>

另一个名为employee_list.php的视图页面将在其中央div中加载成功条目列表:

<div id="content" class="box">
            <table id = "employee_list_table" width="600">
                <tr>
                    <th scope="col">Employee Id</th>
                    <th scope="col">Employee Name</th>
                </tr>

                <?php foreach ($employee_list as $e_key){ ?>
                <tr>
                    <td><?php echo $e_key->emp_id; ?></td>
                    <td><?php echo $e_key->emp_name; ?></td>
                </tr>
                <?php }?>
            </table>
        </div>

每当我尝试运行employee_add.php视图页面时,都会收到以下错误:

Fatal error: Call to undefined function validation_errors() in C:\wamp\www\CI\application\views\admin_logins\employee_add.php

根据我的猜测,可能是由于以下两个原因之一:

  1. 我的代码设计和布局不正确(视图,控制器和模型中的无组织编码)
  2. 我的代码语法不正确(最有可能是使用表单和表单验证)
  3. 或许,还有其他原因。我只是无法弄清楚为什么,并且在我的代码中 确实发生了错误。

    EDIT-1:根据用户Ghost的解决方案,我已在控制器admin_logins/employee中的admin_logins.php方法中加载了form_validation库。致命的PHP错误消失了,但验证仍然无法正常工作。在我将这些字段保留为空后单击“提交”按钮而不是验证消息时,我收到以下错误消息:

    A Database Error Occurred
    Error Number: 1146
    La table 'ci_test.employee' n'existe pas
    INSERT INTO `employee` (`emp_id`, `emp_name`) VALUES ('', '')
    Filename: C:\wamp\www\CI\system\database\DB_driver.php
    

    我的代码中似乎仍然有更多的语法错误。

1 个答案:

答案 0 :(得分:1)

似乎两者都是:

Employee_adds -> index()Admin_logins ->employee()共享相同的视图文件:

'admin_logins/employee_add'

当您放置<?php echo validation_errors(); ?>触发错误的原因是查看Admin_logins ->employee()

似乎未加载$this->load->library('form_validation');

function employee()
{
    $this->load->view('admin_logins/employee_add');
}

因此,当您访问admin_logins/employee时,它会导致错误,因为验证库尚未初始化。