我正在尝试在我的一个视图页面中为输入表单应用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
根据我的猜测,可能是由于以下两个原因之一:
或许,还有其他原因。我只是无法弄清楚为什么,并且在我的代码中 确实发生了错误。
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
我的代码中似乎仍然有更多的语法错误。
答案 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
时,它会导致错误,因为验证库尚未初始化。