【问题标题】:Codeigniter - How to reveal info after is password entered via ajaxCodeigniter - 如何在通过 ajax 输入密码后显示信息
【发布时间】:2010-06-24 13:04:01
【问题描述】:

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

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

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

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

谢谢 丹

【问题讨论】:

    标签: php ajax codeigniter


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      您可以通过 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');  
      

      【讨论】:

        【解决方案3】:

        这个问题实际上与特定的语言或框架关系不大,而更多的是关于如何最好地解决问题。这种情况下的问题是仅在正确输入密码时才显示一列。因此,首先您需要有一种方法允许网站用户输入密码。这是如何完成的同样无关紧要,它可能是页面上的一个表单,也可能是一个单独的页面。

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

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

        【讨论】:

          【解决方案4】:

          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 用于 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 sn-p 返回,并通过它直接插入到 DOM 或 json/xml 循环中。

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

          【讨论】:

            猜你喜欢
            • 2015-04-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-30
            • 2013-08-08
            • 2011-04-29
            • 2014-09-24
            • 1970-01-01
            相关资源
            最近更新 更多