Codeigniter - 如何通过ajax输入密码后显示信息

时间:2010-06-24 13:04:02

标签: php ajax codeigniter

我正在开发一个codeigniter网站,客户已请求数据表中的价格列隐藏在视图中,除非用户输入正确的密码(他们将通过电话向客户提供)。

显而易见的方法是让用户登录,然后显示包含价格的新表/页面。

我可以通过AJAX以某种方式实现这一点吗?,即出现一个对话框,用户输入密码,发送请求并加载新表加价?

我是Codeigniter的新秀,但我每天都在学习,请有人指出我正确的方向吗?

由于 丹

4 个答案:

答案 0 :(得分:2)

实际上它并不是真正的代码点火器问题,更多的是javascript。在ci中添加一个控制器函数,你可以通过ajax调用它(强烈推荐像jquery这样的javascript框架)。

为了简单起见,您可以将密码添加到请求中。控制器功能检查密码,如果正确,它会回复价格。

javascript代码可能看起来像这样:

$.ajax({
type: "POST",
url: 'controller/function',
data: {'password': $('#password').attr(value)},
success: function(data){
    $('#price').html(data);
},
});

答案 1 :(得分:1)

你可以通过ajax实现它:它可以像这样工作:

1。)用户在框中输入密码并单击按钮

2。)按钮上的Click事件触发以下内容:

var xmlhttp =  new XMLHttpRequest();

xmlhttp.open('POST', 'getPrices.php', true);


xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4) {
        if (xmlhttp.readState == 200)
            putPricesIntable(xmlhttp.responseXML)
    }
}

xmlhttp.send('password=' + 'password');  

答案 2 :(得分:0)

这个问题与特定的语言或框架关系不大,更多的是如何最好地解决问题。此情况下的问题是仅在正确输入密码时才显示列。首先,您需要有一种方法允许网站用户输入密码。如何做到这一点再次相当无关,它可能是页面上的一个表单,或者它可能是一个单独的页面。

提交密码并发现密码正确后,需要为用户创建会话。此会话基本上将告诉页面是否显示列。

您可能不希望完全依赖ajax方法,就好像用户禁用了JavaScript,然后他们永远无法看到该列,而只是使用JavaScript来增强网站的可用性。

答案 3 :(得分:0)

Ajax只是意味着您的登录控制器将返回机器可读的内容(json / xml)而不是html。

您的控制器实际上只需要设置会话变量。

class Login extends Controller {

    function __construct() {
          parent::Controller();
          $this->load->model('user_m');
    }

    function json_login() {
        $user = $this->user_m->get_user($_POST['username']);
        if($user->password == md5($_POST['password'])) {
            $this->session->set_userdata('username',$user->username);
            print json_encode($this->user);
        }
        else {
            print json_encode(FALSE);
        }
        return;
    }

   function logout() {
       $this->session->destroy();
       redirect('/theloginpage');
   }
}

假设您正在使用jquery for javascript,ajax调用可能会像这样:

$('#login_form').submit(function(event) {
     event.preventDefault();
     $.ajax({
         type:"POST",
         data:$(this).serialize(),
         dataType:"json",
         url:"/login/json_login",
         success: function(data) {
             if(data['username'] != null) { 
                 $(this).append('<p>You are now logged in</p>');
                 reload_table_data(); 
             }
             else if(data == flase){
                 $(this).append('<p>Fail whale, wrong username or password</p>');
             }

         }
     });

}

现在,在显示数据时,检查会话中是否设置了“用户名”。另外,不要忘记创建一个破坏会话的注销方法。您可以将表数据作为html片段返回,并将其直接插入到DOM或json / xml循环中。

登录表单可以显示在页面的任何位置,并且有大量用于jquery,dojo,prototype等的库,它们将提供一个对话框。