[英]codeigniter form_open() not working for login page
我对我的代码有疑问和麻烦,我正在通过codeigniter框架进行登录,但是登录时遇到问题,当我以登录形式输入user \\ password时,它再次返回同一登录页面,而不是移至Home1类。 我的猜测是这个问题是由于登录页面表单中的form_open('index.php / welcome / login')导致的,我不确定登录的方式如何,
下面两个是我的控制器课程,
public function login() //this used for login
{
$this->load->view('login');
$this->m_user->user_login();
}
public function home1()//this will be redirecting class
{
$this->load->view('home1');
}
这是模特
public function index()
{
if(($this->session->userdata('email')!=""))
{
$this->welcome();
}
else
{
$data['title']='Home';
$this->load->view('login',$data);
}
}
function user_login()
{
$user_email=$this->input->post('user_email');
$user_password=md5($this->input->post('user_password'));
$this->db->where('user_email',$user_email);
$this->db->where('user_password',$user_password);
$query=$this->db->get('ca_user');
if($query->num_rows()>0)
{
foreach($query->result() as $rows)
{
//add all data to session
$_userdata = array(
'user_id' => $rows->user_id,
'user_firstname' => $rows->user_firstname,
'user_lastname' => $rows->user_lastname,
'user_email' => $rows->user_email,
'logged_in' => TRUE,
);
}
$this->session->set_userdata($_userdata);
redirect('home1','refresh');
return true;
}
return false;
redirect('signup','refresh');
}
这是登录页面
<?php echo validation_errors('<p class="error">'); ?>
<?php echo form_open('index.php/welcome/login'); ?>
<input type="text" placeholder="Username" class="input-field form-control user" name="username" value="<?php echo set_value('user_email');?>" />
<input type="password" placeholder="Password" class="input-field form-control password" name="password" value="<?php echo set_value('user_password');?>" />
<button type="submit" class="btn btn-login ladda-button" data-style="expand-left" name="submit"><span class="ladda-label">login</span></button>
<?php echo form_close(); ?>
首先,您无法从模型中加载视图。 通常,模型是您的逻辑所在。 到目前为止,我将为您提供使用MVC在CI中进行登录的基本示例。
您的模型:
class Login extends CI_Model
{
// validation setting
public function LoginRules()
{
# code...
$login_user = [
[
'field' => 'email',
'label' => 'Email Adress',
'rules' => 'required'
],
[
'field' => 'password',
'label' => 'Password',
'rules' => 'required'
]
];
return $this->form_validation->set_rules($login_user);
}
// validation method
public function validate()
{
if ($this->LoginRules())
{
if ($this->form_validation->run())
{
# code...
return TRUE;
}
else
{
return FALSE;
}
}
}
//Check the user data in database
public function CheckUser()
{
$query = $this->db->where('email', $this->input->post('email'))
->where('password', $this->input->post('password'))
->limit(1)
->get('your table name');
foreach ($query->result() as $result) ;
if ($query->num_rows() == 1)
{
$userData = [
'email' => $pengguna->email,
'username' => $pengguna->username,
'login' => TRUE
];
$this->session->set_userdata($userData);
return TRUE;
}
else
{
return FALSE;
}
}
//logout function
public function destroy()
{
$this->session->unset_userdata(
[
'username' => '',
'email' => '',
'login' => FALSE,
]
);
$this->session->sess_destroy();
}
}
然后您的控制器:
public function UserLogSuccess()
{
if ($this->session->userdata('login') == FALSE)
{
//flash msg data for login failure
$data = [
'msg' => 'Must login'
];
$this->session->set_flashdata('msg', $data);
//redirect user back to login form
redirect('login');
}
else
{
// give access
$data = [
'uname' => $this->session->userdata('username'),
'email' => $this->session->userdata('email')
];
$this->load->view('user/index', $data);
}
}
最小登录形式:
<div>
<?php
if (!empty($this->session->flashdata('msg')))
{
// you may ignore this
foreach ($this->session->flashdata('msg') as $key => $message)
{
echo $message['access_tanpa_login'];
}
}
echo form_open('login', ['class' => 'form', 'method' => 'POST']);
?>
<fieldset>
<label>Username</label>
<input type="text" name="email" class="form-control">
<?php echo form_error('email', '<span class="error">', '</span>'); ?>
</fieldset>
<fieldset>
<label>Password</label>
<input type="password" name="password" class="form-control">
<?php echo form_error('password', '<span class="error">', '</span>'); ?>
</fieldset>
<fieldset>
<input type="submit" value="Login" class="form-button">
</fieldset>
</form>
</div>
加法:在控制器上验证用户的样本
public function MyLoginProceed()
{
if ($this->login->validate())
{
//load the validation model
if ($this->login->CheckUser())
{
// if TRUE, then redirect
redirect('any/where/you/like');
}
else
{
// Login Fail, set flash msg here
$data = ['msg' => 'Fail'];
$this->session->set_flashdata('msg', $data);
// Redirect back to login
redirect('login');
}
}
}
编辑直到适合您的需要。 这只是示例的基本方法,不是干净的或防弹的。 学习目的。
form_open('index.php / welcome / login')的实际作用是为您生成一个html表单打开标记。
例如:form_open('index.php / welcome / login'); 会生成> /index.php/welcome/login“>,如果CSRF设置为true,则会生成一个包含CSRF cookie代码的隐藏输入。
因此,在页面加载时,右键单击页面并查看源,查看是否生成了表单html标记。 如果已生成,则表示form_open正在工作。
我这边的一个建议-查看您的代码,看来您没有正确遵循模型视图控制器框架。 尝试只访问model中的数据库,然后在controller中进行重定向。 获取控制器中变量的输入,并将其作为参数发送给模型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.