1

我正在使用 Codeigniter 框架来创建我的 Web 应用程序。

我有一个登录表单供用户输入他们的用户名和密码以及一个记住我的复选框。用户提交表单后,它使用 jQuery ajax 提交表单并将发布数据发送到登录控制器提交函数以进行数据检查和操作。运行提交函数后,如果用户已登录,则返回 JSON 数组。如果用户成功登录,他/她将被发送到仪表板,如果他们未成功登录,则会显示一条错误消息并在下方每个用户输入都会向未通过 CI 表单验证规则的规则显示相应的消息。

截至目前,它显示一条消息,说它没有通过验证,但我在弄清楚如何显示在用户输入框下没有通过的验证规则时遇到了问题。

<div style="display:none"  id="message_container"><button type="button" class="close" data-dismiss="alert">&times;</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 语句。考虑到除非有更好的主意,否则我将在每个文本字段下放置多个输入。

4

1 回答 1

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 表单验证库源码

/**
 * 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;
    }
} 
于 2012-12-19T21:13:52.463 回答