2010-06-24 54 views
0

我正在codeigniter网站上工作,客户已要求隐藏数据表中的价格列,除非用户输入正确的密码(他们会给出正确的密码通过电话向客户提供)。Codeigniter - 如何显示通过ajax输入密码后的信息

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

我可以通过AJAX实现吗?即出现一个对话框,用户输入密码,发送一个请求并添加一个包含价格的新表格?

我是Codeigniter的新手,但我每天都在学习,请有人指点我的方向?

感谢 丹

回答

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

你可以通过AJAX实现它:它的工作是这样的:

1)用户在框中输入密码,然后点击按钮

2)点击事件上按钮触发以下内容:

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'); 
0

这个问题对于特定的语言或框架确实很少,但更多的是关于如何最好地解决问题。这种情况下的问题是仅在正确输入密码的情况下显示一列。所以首先你需要有一个允许网站用户输入密码的方法。如何做到这一点再次是毫不相关的,它可能是一个页面上的表单,或者它可能是一个单独的页面。

一旦提交密码并发现密码正确,就需要为用户创建一个会话。这个会话基本上会告诉页面是否显示该列。

您可能不想完全依赖ajax方法,就好像用户禁用JavaScript一样,他们将永远无法看到该列,而只能使用JavaScript来增强网站的可用性。

0

阿贾克斯只是意味着你的登录控制器将返回一些机器可读(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的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的,道场,原型等库,它会提供一个对话框。