【问题标题】:Codeigniter, password or username incorrect message (database validation)Codeigniter、密码或用户名错误消息(数据库验证)
【发布时间】:2012-08-26 02:41:02
【问题描述】:

问题 1) 我设置了一个注册/登录区域并验证了所有内容(包括空白字段),如果用户名和/或密码不正确,则在显示错误消息时碰壁。目前,如果字段留空,我会收到一条错误消息,但在提交页面时,无论用户详细信息是否正确,都会重定向到“私人页面”。这是我当前的代码:

问题 1(已解决):

控制器:

//This method will have the credentials validation
    public function credentials_validation() {
        $data['error'] ="Invalid Username or Password";
        $this->load->library('form_validation');
        $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|callback_username_check');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_password_check');

          if($this->form_validation->run() == FALSE)
           {
             //Field validation failed.  User redirected to login page
             $this->index();

             }else{
                 $this->load->model('register_model');

                if($query = $this->register_model->validate()) {
                $this->load->model('news_model');

                $data = array('news' => $this->news_model->getArticle());
                $data['title'] = 'Admin | Home';
                $data['heading'] = 'News Articles';
                $data['main_content'] = 'admin/news';
                $this->load->view('include/template', $data);

                }else {
                $this->load->view('login',$data);
                }    

            }
    }

问题 2) 新闻文章页面仅加载 1 篇文章,并且 url 显示类名。

新闻总监:

class News extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('admin/news_model');
    }

    public function index() {
        $data = array('news' => $this->news_model->getArticle());
        $data['title'] = 'Admin | News Home';
        $data['heading'] = 'News Articles';
        $this->load->view('admin/news', $data); 
}

}

新闻模型只是拉取数据库表,全选并按 id 排序并生成数组。任何人都知道为什么这仅显示 1 个结果?我认为它与 foreach 方法有关?

PS,CI 或 php 错误日志中没有显示错误消息!

【问题讨论】:

  • 另外,我认为既然下面的答案解决了原来的问题,你应该接受这个答案并将新问题作为一个单独的问题。对我来说,帮助你是一场游戏,我从中赚取积分。如果我的回答解决了您的问题,但如果您没有将其标记为已回答,那么您就没有让我获得积分……这并没有激励我玩这个“游戏”

标签: php codeigniter login validation


【解决方案1】:

最好的方法是将错误消息存储在一个数组中,例如

$data['error'] ="Invalid Login";

例如在控制器中

if($query = $this->register_model->check_membership()) {
    $data['main_content'] = 'signup_successful';
    $this->load->view('include/template', $data);

}else {
    $data["error"]="Invalid User Id and Password combination";
    $this->load->view('signup',$data);
}

check_membership 函数应该检查登录 id 和密码组合是否正确。

然后在signup查看页面,在顶部放一些类似

if (isset($error)){
    echo "<div class='error'>$error</div>";
}

【讨论】:

  • 我听取了您的建议,这似乎可以使用数组(万岁)。现在,当用户尝试使用不正确的用户名或密码登录时,登录页面上会显示一条错误消息,正确后直接进入管理员新闻页面。然而,另一个问题出现了,只显示 1 篇新闻文章(结果是在数组尝试的对象方法中)而不是显示全部(没有设置限制)并且 url 显示类名“credentials_validation”,有什么想法如何解决这个问题?我会将我的代码添加到我的原始帖子中,现在您可以使用您的方法查看 - 再次感谢您!
  • 试试这个 ($this->db->last_query());在您从模型中调用 select 方法后立即。即 $data = array('news' => $this->news_model->getArticle());回声 ($this->db->last_query());这将向您显示控制器中的 SQL Query 或 enable_profiler 为真(谷歌或检查 CI 文档)。这将告诉您代码在幕后发生了什么。这可能会让您了解为什么您只有一条记录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
相关资源
最近更新 更多