con*_*men 5 validation codeigniter
我使用CI创建了一个表单,并有一个原生的form_validation()库来验证每个字段输入,我使用jQuery post来回调输入以检查每个字段是否有效,如果我希望每个错误填充到每个字段form_error()旁边场而不是validation_errors()?
请参考以下内容:
视图:
<script>
$("#btnregister").click(function() {
var parameters = $("#reg_form").serialize();
$.post(baseurl+'pages/registration', parameters, function(data) {
if(data == "ok") {
//show success message
}else{
$("#error").html(data);
}
}, "html");
});
</script>
<div id="error"></div>
<form id="reg_form" method="post">
<p>
<label for="reg_username">Username</label><br />
<input type="text" id="reg_username" name="reg_username" value="<?php echo set_value('reg_username'); ?>">
<?php echo form_error('reg_username'); ?>
</p>
<p>
<label for="reg_email">Email</label><br />
<input type="text" id="reg_email" name="reg_email" value="<?php echo set_value('reg_email'); ?>">
<?php echo form_error('reg_email'); ?>
</p>
<p><input type="button" id="btnregister" value="Register"></p>
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
控制器:
public function registration(){
$this->load->library('form_validation');
$this->form_validation->set_rules('reg_username', 'Username', 'trim|required|min_length[4]|max_length[15]|xss_clean|is_unique[users.username]');
$this->form_validation->set_rules('reg_email', 'Email', 'trim|required|valid_email|is_unique[users.email]');
if($this->form_validation->run() == FALSE){
echo validation_errors();
}else{
// insert to db
echo "ok";
}
}
Run Code Online (Sandbox Code Playgroud)
感谢帮助.
Wes*_*rch 10
你必须建立自己的错误数组.如果我们可以访问Form_validation会很好,$_error_array但不幸的是它protected并没有访问方法.
我要更改控制器以输出json响应以使其更容易:
public function registration()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('reg_username', 'Username', 'trim|required|min_length[4]|max_length[15]|xss_clean|is_unique[users.username]');
$this->form_validation->set_rules('reg_email', 'Email', 'trim|required|valid_email|is_unique[users.email]');
if ($this->form_validation->run())
{
$response['status'] = TRUE;
}
else
{
$errors = array();
// Loop through $_POST and get the keys
foreach ($this->input->post() as $key => $value)
{
// Add the error message for this field
$errors[$key] = form_error($key);
}
$response['errors'] = array_filter($errors); // Some might be empty
$response['status'] = FALSE;
}
// You can use the Output class here too
header('Content-type: application/json');
exit(json_encode($response));
}
Run Code Online (Sandbox Code Playgroud)
现在你的ajax成功回调可以读取响应的status和errors键.您可以循环data.errors并将每个添加到输入字段:
$("#reg_form").submit(function() {
var form = $(this);
$.post(baseurl+'pages/registration', form.serialize(), function(data) {
if (data.status == true) {
//show success message
}else{
$.each(data.errors, function(key, val) {
$('[name="'+ key +'"]', form).after(val);
});?
}
}, "json");
});
Run Code Online (Sandbox Code Playgroud)
另一种简单的方法是将表单发布到自身,并让您的ajax响应重新加载整个表单 - 这样消息和验证过滤器将由服务器端处理.