Bry*_*ynJ 32 php forms validation codeigniter
我意识到这个请求违反了CI文档中提供的示例(建议单独的'成功'页面视图),但我希望在成功提交表单后重新使用给定的表单视图 - 显示成功消息然后显示空白表格.我尝试了几种方法未成功清除验证设置值(取消设置$_POST,将规则/字段设置为空数组并重新运行验证).
我可以重定向到同一页面,但是我必须设置一个会话变量来显示成功消息 - 这是一个混乱的方法.
任何想法如何最好地实现上述目标?
Tee*_*eej 36
重定向到自己.这样,没有提交任何提交...这也为您提供了一种显示flash_data的方法.
$this->load->library('form_validation');
$this->form_validation->set_rules('firstname', 'First Name', 'required');
$this->form_validation->set_rules('surname', 'Sur Name', 'required');
if ($this->form_validation->run() === TRUE)
{
// save data
$this->session->set_flashdata('message', 'New Contact has been added');
redirect(current_url());
}
$this->load->view('contacts/add', $this->data);
Run Code Online (Sandbox Code Playgroud)
小智 12
另一个解决方案,扩展库CI_Form_validation.该属性$_field_data受到保护,因此我们可以访问它:
class MY_Form_validation extends CI_Form_validation {
public function __construct()
{
parent::__construct();
}
public function clear_field_data() {
$this->_field_data = array();
return $this;
}
}
Run Code Online (Sandbox Code Playgroud)
并调用新方法.这样,您可以在不在会话中存储数据的情况下传递数据.
class Item extends Controller
{
function Item()
{
parent::Controller();
}
function add()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('name', 'name', 'required');
$success = false;
if ($this->form_validation->run())
{
$success = true;
$this->form_validation->clear_field_data();
}
$this->load->view('item/add', array('success' => $success));
}
}
Run Code Online (Sandbox Code Playgroud)
将TRUE/FALSE变量传递给有条件地设置表单值的视图.
控制器
if($this->form_validation->run())
{
$data['reset'] = TRUE;
}
else
{
$data['reset'] = FALSE:
}
$this->load->view("form", $data);
Run Code Online (Sandbox Code Playgroud)
风景:
<input type="text" name="email" value="<?php echo ($reset) ? "" : set_value('email'); ?>" />
<input type="text" name="first_name" value="<?php echo ($reset) ? "" : set_value('first_name'); ?>" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39324 次 |
| 最近记录: |