请帮帮我。
我正在尝试使用 codeIgniter 创建登录系统。但我仍然无法通过登录表单,即使值是 true,例如数据库中的值。请帮我解决并找出问题所在。
这是数据库结构。用户名:jeff_way 密码:jeff_way(注意:使用 md5 加密)
这是登录 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。这是图片:
但是当我尝试在登录时使用 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/