我正在使用Codeigniter框架来创建我的Web应用程序。
我有一个登录表单供用户输入他们的用户名和密码以及记住我复选框。在用户提交表单后,它使用jQuery ajax提交表单并将发布数据发送到登录控制器提交功能以进行数据检查和操作。运行提交函数后,如果用户已登录,则返回JSON数组。如果用户成功登录,则他/她将被发送到仪表板,如果他们未成功登录,则会显示错误消息每个用户输入都会向未通过CI表单验证规则的规则显示相应的消息。
截至目前,它显示一条消息,指出它没有通过验证,但我遇到了如何显示未在用户输入框下传递的验证规则的问题。
<div style="display:none" id="message_container"><button type="button" class="close" data-dismiss="alert">×</button></div>
<div class="login_container">
<?php $attributes = array('id' => 'login_form', 'class' => 'form-horizontal'); ?>
<?php echo form_open('login/submit', $attributes); ?>
<div class="form-row row-fluid">
<div class="spa12">
<div class="row-fluid">
<?php $attributes = array('class' => 'form_label span12'); ?>
<?php echo form_label('Username<span class="icon16 icomoon-icon-user-3 right gray marginR10"></span>', 'username', $attributes); ?>
<?php $attributes = array('name' => 'username', 'id' => 'username', 'value' => '', 'class' => 'span12 text valid'); ?>
<?php echo form_input($attributes); ?>
</div>
</div>
</div>
<div class="form-row row-fluid">
<div class="span12">
<div class="row-fluid">
<?php $attributes = array('class' => 'form_label span12'); ?>
<?php echo form_label('Password<span class="icon16 icomoon-icon-locked right gray marginR10"></span><span class="forgot"><a href="#">Forgot your password?</a></span>', 'password', $attributes); ?>
<?php $attributes = array('name' => 'password', 'id' => 'password', 'value' => '', 'class' => 'span12 password'); ?>
<?php echo form_password($attributes); ?>
</div>
</div>
</div>
<div class="form-row row-fluid">
<div class="span12">
<div class="row-fluid">
<div class="form-actions">
<div class="span12 controls">
<input type="checkbox" id="keepLoged" value="Value" class="styled" name="logged" />Keep me logged in
<button type="submit" class="btn btn-info right" id="loginBtn">
<span class="icon16 icomoon-icon-enter white"></span>
Login
</button>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
public function submit()
{
$output_status = 'Notice';
$output_title = 'Not Processed';
$output_message = 'The request was unprocessed!';
$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|callback_check_username');
$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean');
$this->form_validation->set_rules('remember', 'Remember Me', 'trim|xss_clean|integer');
if ($this->form_validation->run() == TRUE)
{
}
else
{
$output_status = 'Error';
$output_title = 'Form Not Validated';
$output_message = 'The form did not validate successfully!';
}
echo json_encode(array('output_status' => $output_status, 'output_title' => $output_title, 'output_message' => $output_message));
}
public function check_username($str)
{
if (preg_match('#[0-9]#', $str) && preg_match('#[a-z]#', $str))
{
return TRUE;
}
$this->form_validation->set_message('check_username', 'This is not have an accepted value!');
return FALSE;
}
编辑:
“error_messages”:{“username”:“这是没有可接受的值!”}}
由于我是通过jQuery ajax函数提交此表单的,我正在试图弄清楚我将如何制作我的if语句。考虑到我将有多个输入必须放在每个文本字段下,除非有更好的想法。
答案 0 :(得分:1)
如果您要做的只是将错误消息字符串附加到$output_message
,您可以执行此操作:
$output_message = 'The form did not validate successfully! Errors: ' . $this->form_validation->error_string();
您可以使用以下方式设置自定义错误消息:
$this->form_validation->set_message('username', 'Invalid Username');
根据您的评论进行编辑,如果您要发回错误消息,请尝试使用以下内容:
echo json_encode(array('output_status' => $output_status, 'output_title' => $output_title, 'output_message' => $output_message, 'error_messages' => $this->form_validation->error_array()));
要显示这些错误消息,我会在你的html中添加占位符并在那里附加消息
CodeIgniters Form Validation Library Source:
/**
* Get Array of Error Messages
*
* Returns the error messages as an array
*
* @return array
*/
public function error_array()
{
return $this->_error_array;
}
所以这似乎是Version 3.0
中的新增内容,所以现在你可以通过在application/libraries/
中添加一个文件并将其命名为MY_Form_validation.php
来扩展表单验证库。在里面放置这个:
class MY_Form_validation extends CI_Form_validation {
public function __construct()
{
parent::__construct();
}
/**
* Get Array of Error Messages
*
* Returns the error messages as an array
*
* @return array
*/
public function error_array()
{
return $this->_error_array;
}
}