【问题标题】:Using AJAX request with CodeIgniter forms将 AJAX 请求与 CodeIgniter 表单一起使用
【发布时间】:2013-06-17 06:05:01
【问题描述】:

我在结合 CodeIgniter 和 AJAX 时遇到了麻烦。我有一个注册表单。我想要的是,当用户单击我主页上的注册按钮时,他会在弹出窗口中获得一个注册表单。如果他在表单中输入错误的详细信息,他会在弹出窗口中提示您的详细信息无效,他不能被重定向到新页面以显示错误。所以我使用 bpopup 使我的表单弹出和 ajax 请求,但我无法执行 form_validation,我有点困惑。如果用户未通过表单验证,则会向用户提醒 HTML 文档,因为正在加载视图。如果我不加载视图,它将不会显示登录页面。如果我将直接加载视图,我将如何显示用户个人错误,例如密码必须是 6 个字符长。这是我的代码:

我的登录视图:

<html>
<head>
<title>Sign In</title>
<script type="text/javascript">
     var frm = $('form');
     frm.submit(function () {
     $("#status").empty();
     $.ajax({
        type: frm.attr('method'),
        url: frm.attr('action'),
        data: frm.serialize(),
        success: function (data) {
            if (data == "invalid") {
              $('#status').html("Invalid Login Details");
            }
            else if(data == "valid")
            {
                $('#status').html("Login successful");
                setTimeout(function(){
                    location.reload();
                },600);
            }
            else
            {
                $('#status').html("Your Account is not Activated");
            }
        }
    });
    return false;
});
</script>
</head>
<body>
<div class="Header">
    <h3>Sign In </h3>
</div>
<div id="status"></div>
<div class="main">
    <?php echo form_open('xyz/signin'); //Renders the form element and adds extra functionality like Adds a hidden CSFR prevention field.?> 
    <h5>Email</h5>  // For the time being I have remove echo form_error.
    <input type="text" name="email"  value="<?php echo set_value('email'); ?>" size="25"/>
    <h5>Password *</h5> // For the time being I have remove echo form_error.
    <input type="password" name="password" size="25"/>
    <div><input type="submit" value="Submit" "/></div>
    </form>
</div>

</body>
</html>

这是我 xyz 控制器的登录功能:

public function signin()
{
  $this->load->helper(array('form','url'));
  $this->load->library('form_validation');
  $config = array(
array(
'field' => 'email',
'label' => 'Email Address',
'rules' => 'trim|required|valid_email|xss_clean'
),
array(
'field' => 'password',
'label' => 'Password',
'rules' => 'trim|required|xss_clean'
)
  );
  $this->form_validation->set_rules($config);
if($this->form_validation->run() == FALSE)  /
{
    $this->load->view('pinflag/login.php');
}
else                               //format of form is correct
{   
    $email = $this->input->post('email');
    $password = md5($this->input->post('password'));
    $data = array(
        'email' => $email,
        'password' => $password
        );
    $result = $this->user_model->get_users($data);
    if($result->num_rows == 1)   //login details are correct
    {
        $result = $result->result_array();
        if($result[0]['status'] == 0)
        {
            echo "notActivated";

        }
        else
        {
        $this->session->set_userdata('id',$result[0]['id']);
        $this->session->set_userdata('name',$result[0]['fname']);
            echo "valid";
        }
            }
            else        //when user enter invalid login details
    {
        echo "invalid";
    }

}
}

抱歉,当我在这里粘贴代码时,缩进搞砸了。

【问题讨论】:

  • 我只需要帮助,我应该如何使用 CodeIgniter 处理弹出的所有请求。

标签: php ajax codeigniter validation


【解决方案1】:

我不知道你的流行音乐是怎么来的,但是尝试错误和成功消息

$this->session->set_flashdata("msg","<span class='m_error'>".$this->lang->line('global_insert_error')."</span>");

在您的页面被加载之前。

并在您的登录视图中查看任何部分

if($this->session->flashdata('msg'))
{
   echo $this->session->flashdata('msg');
}

【讨论】:

  • 我在控制器中有一个登录功能,它加载登录视图。现在我的问题是,如果我加载 this->load->view('login') ,那么每次用户点击提交。它将再次加载视图。如何避免这个问题?我只想让我的登录页面加载一次,然后发出 AJAX 请求以检查登录详细信息。我应该做单独的功能,一个显示视图,另一个检查细节吗?对于弹出窗口,我使用了 bpopup,它只是加载您在弹出窗口中提供的 url
  • 检查登录是否成功重定向到另一个页面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
相关资源
最近更新 更多