php - 登录页面在 codeigniter 中不起作用

标签 php mysql twitter-bootstrap codeigniter frameworks

请帮帮我。

我正在尝试使用 codeIgniter 创建登录系统。但我仍然无法通过登录表单,即使值是 true,例如数据库中的值。请帮我解决并找出问题所在。

这是数据库结构。用户名:jeff_way 密码:jeff_way(注意:使用 md5 加密)

Database structure

这是登录 Controller

<?php session_start();

class Login extends CI_Controller{

function index()
{

    /*$data['main_content']='tampilan';*/
    $this->load->view('tampilan');

}


function validate_credentials()
{
    var_dump(session_id('is_logged_in'));
    var_dump($_POST);

    $this->load->model('membership_model');
    $query = $this->membership_model->validate();

    if($query)
    {
        $data = array(
            'username' => $this->input->post('username'),
            'is_logged_in' =>true   
        );

        $this->session->set_userdata($data);
        redirect('site/members_area');

    }
    else
    {
        $this->index();
    }

}

这是模型:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Membership_model extends CI_Model{

    function validate()
    {
        $this->db->where('username',$this->input->post('username'));
        $this->db->where('password',md5($this->input->post('password')));
        $query = $this->db->get('membership');

        if($query->num_rows() ==1)
        {
            return true;

        }
    }

这是登录表单 View :

<div class="input-group container-fluid jumbotron shadow">
    <h2>Login Fool</h2>
    <?php echo form_open('login/validate_credentials');?>
    <?php echo form_input(['name'=>'username', 'class'=>'form-control jarak','placeholder'=>'Username']);?>
    <?php echo form_password(['name'=>'password', 'class'=>'form-control jarak','placeholder'=>'Password']);?>
    <?php echo form_submit(['class'=>'btn btn-default jarak','value'=>'Login']);?>
    <?php echo anchor('login/sign_up','Create Account',array('class'=>'btn btn-info jarak'));?>

    <?php form_close();?>

每次我尝试登录时,页面总是发送到 Controller login/validate_credentrial。这是图片:

enter image description here

但是当我尝试在登录时使用 var_dump($_POST) 时,它会发送值。

请帮帮我。谢谢

最佳答案

您看到 /login/validate_credentials 的原因是您告诉它这样做。

如果你想像这个......你最初通过 /login 显示表单。

当您提交表单时,它会调用(转到)在您的表单操作中定义的 url/login/validate_credentials。

如果登录凭据与您的数据库不匹配,即失败,则会导致 validate_credentials() 方法调用 $this->index,这只会重新显示表单。它不会改变 url。 因此,生成的 url 将保留为 /login/validate_credentials

如果您希望看到/login 作为 url,那么您需要执行 redirect('login'); 来代替。

关于 validate() 函数的注释 关于模型方法 validate()... 如果您要返回一个值,您的函数应该在所有条件下始终返回一个值。

所以你应该有类似...

function validate()
{
    $this->db->where('username', $this->input->post('username'));
    $this->db->where('password', md5($this->input->post('password')));
    $query = $this->db->get('membership');

    if($query->num_rows == 1)
    {
        return TRUE; 
    }

    return FALSE;  // else we need to specifically return FALSE 

}

更新:添加了调试代码

function validate() {
    $this->db->where('username', $this->input->post('username'));
    $this->db->where('password', md5($this->input->post('password')));
    $query = $this->db->get('membership');

    echo $this->db->last_query(); // DEBUG the SQL
    echo $query->num_rows;  // DEBUG how many rows

    if ($query->num_rows == 1) {
        return TRUE;
    }

    return FALSE;
}

你从上面得到了什么调试信息?

关于php - 登录页面在 codeigniter 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45099244/

相关文章:

php - facebook登录将代码作为查询字符串中的变量返回

mysql - 使用 Powershell 获取 MySQL 数据

html - 类输入组在 Firefox 和 IE 中不显示占位符或接受输入

css - Bootstrap 行扩展到包含列之外

node.js - 使用 Connect-flash 和 Jade 的警报消息

php - 如何只选择前 5 个结果然后显示更多.. 选项?

php - 一个事务,三个独立的数据库

php - 插入新行,更新旧行 : how?

MySQL 返回的值与提供的示例代码中的最大值不同

php - 如果增加和减少数量,我如何计算数量?