php表单提交的时候验证失败,php – Codeigniter – 提交后在验证失败时重新填充表单...

我有一个表单,要求用户输入一些信息.如果他们未能完成所需的字段,则会重新显示该表单;页面顶部通知他们需要哪些字段,我已启用粘性表单(set_value()),因此他们的输入不会丢失.

我正在使用flashdata向用户显示消息(即,如果他们输入的内容已存在于数据库中).

我的表单在我的控制器的索引方法中.

当从我的视图中单击提交时,它会调用我的控制器中的add()方法.

add()方法执行验证,并根据结果提交到数据库或踢回用户以获取更多数据.

关于我这样做的方式,我有几个问题.

1.如果验证失败,我使用$this-> index()返回到我的表单并显示验证错误.如果我尝试使用重定向,我会丢失验证错误和我的$_POST []数据,因此我的粘性表单最终为空白.

2.使用$this-> index()将’add’附加到我的url的末尾

3.使用$this-> index()会导致flashdata出现问题.随机结果.

有任何想法吗?

class Restaurant extends Controller {

function Restaurant() {

parent::Controller();

}

function index() {

// Load libraries and models

$this->load->model('/restaurant/mRestaurantTypes');

$this->load->model('/restaurant/mRestaurant');

$this->load->model('/utilities/mUtilities');

// Get states

$stateSelect = array();

$getStates = $this->mUtilities->getStates();

if($getStates->num_rows() > 0) {

foreach($getStates->result() as $row) {

$stateSelect[$row->abbr] = $row->name;

}

}

// Get restaurant types

$restaurantTypes = array();

$getRestaurantTypes = $this->mRestaurantTypes->getRestaurantTypes();

if($getRestaurantTypes->num_rows() > 0) {

foreach($getRestaurantTypes->result() as $row) {

$restaurantTypes[$row->restaurant_types_id] = $row->type;

}

}

// Create form elements

$data['name'] = array(

'name' => 'name',

'id' => 'name',

'value' => set_value('name'),

'maxlength' => '200',

'size' => '50'

);

$data['address'] = array(

'name' => 'address',

'id' => 'address',

'value' => set_value('address'),

'maxlength' => '200',

'size' => '50'

);

$data['city'] = array(

'name' => 'city',

'id' => 'city',

'value' => set_value('city'),

'maxlength' => '50',

'size' => '25'

);

$data['state'] = $stateSelect;

$data['zip'] = array(

'name' => 'zip',

'id' => 'zip',

'value' => set_value('zip'),

'maxlength' => '10',

'size' => '10'

);

$data['phone'] = array(

'name' => 'phone',

'id' => 'phone',

'value' => set_value('phone'),

'maxlength' => '15',

'size' => '15'

);

$data['url'] = array(

'name' => 'url',

'id' => 'url',

'value' => set_value('url'),

'maxlength' => '255',

'size' => '50'

);

$data['type'] = $restaurantTypes;

$data['tags'] = array(

'name' => 'tags',

'id' => 'tags',

'value' => set_value('tags'),

'maxlength' => '255',

'size' => '50'

);

$data['active'] = array(

'name' => 'active',

'id' => 'active',

'value' => 'Y',

'maxlength' => '1',

'size' => '2'

);

// Set page variables

$data_h['title'] = "Add new restaurant";

// Load views

$this->load->view('/template/header', $data_h);

$this->load->view('/restaurant/index', $data);

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

}

/**

* Add the the new restaurant to the database.

*/

function add() {

// Load libraries and models

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

$this->load->model('/restaurant/mRestaurant');

// Define validation rules

$this->form_validation->set_rules('name', 'Name', 'trim|required|max_length[255]|xss_clean');

$this->form_validation->set_rules('address', 'Address', 'trim|required|max_length[100]|xss_clean');

$this->form_validation->set_rules('city', 'City', 'trim|required|max_length[128]|xss_clean');

//$this->form_validation->set_rules('state', 'State', 'trim|required');

$this->form_validation->set_rules('zip', 'Zip', 'trim|required|max_length[128]|xss_clean');

$this->form_validation->set_rules('phone', 'Phone', 'trim|required|max_length[10]|xss_clean');

$this->form_validation->set_rules('url', 'URL', 'trim|required|max_length[255]|xss_clean');

$this->form_validation->set_rules('tags', 'Tags', 'trim|xss_clean');

// Form validation

if ($this->form_validation->run() == FALSE) {

// On failure

$this->index();

} else {

// On success, prepare the data

$data = array(

'name' => $_POST['name'],

'address' => $_POST['address'],

'city' => $_POST['city'],

'state' => $_POST['state'],

'zip' => $_POST['zip'],

'phone' => $_POST['phone'],

'url' => $_POST['url'],

'type' => $_POST['type'],

'tags' => $_POST['tags'],

'active' => $_POST['active'],

);

// Check if the restaurant already exists

$check = $this->mRestaurant->getRestaurant($data['name'], $data['zip']);

// If no records were returned add the new restaurant

if($check->num_rows() == 0) {

$query = $this->mRestaurant->addRestaurant($data);

if ($query) {

// On success

$this->session->set_flashdata('status', '

Added New Restaurant!
');

} else {

// On failure

$this->session->set_flashdata('status', '

Could not add a new restaurant.
');

}

redirect('restaurant/confirm', 'refresh');

} else {

// Notify the user that the restaurant already exists in the database

$this->session->set_flashdata('status', '

This restaurant already exists in the database.
');

redirect('restaurant/index');

}

}

}

function confirm() {

$data['title'] = "Confirm";

$this->load->view('/template/header');

$this->load->view('/restaurant/confirm', $data);

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

}

}

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值