php - Codeigniter 表单发布数据为空
问题描述
我一直在尝试在 xampp 本地设置现有的 CI 3.1 项目。数据库已连接且网站已加载,但登录/注册/表单无法正常工作。
经过详细检查,发现表格没有在帖子数据中发送。帖子对象为空。
下面是代码。
登录视图
<!-- language-all: lang-php-->
<form id="app-form" class="card auth_form" method="post" action="<?php echo site_url('auth/login/') ?>">
<div class="header">
<img class="logo" src="<?php echo base_url() ?>assets/images/logo.svg" alt="">
<h5>Log in</h5>
</div>
<div class="body">
<div class="input-group mb-3">
<input type="text" class="form-control" placeholder="Email" name="email" value="" required>
<div class="input-group-append">
<span class="input-group-text"><i class="zmdi zmdi-account-circle"></i></span>
</div>
</div>
<div class="input-group mb-3">
<input type="password" class="form-control" placeholder="Password" name="password" value="" required>
<div class="input-group-append">
<span class="input-group-text"><a href="<?php echo site_url('/auth/forgotpassword') ?>" class="forgot" title="Forgot Password"><i class="zmdi zmdi-lock"></i></a></span>
</div>
</div>
<!--<div class="checkbox">
<input id="remember_me" type="checkbox">
<label for="remember_me">Remember Me</label>
</div>-->
<input type="hidden" name="<?=$this->security->get_csrf_token_name()?>" value="<?=$this->security->get_csrf_hash()?>" >
<button class="btn btn-primary btn-block waves-effect waves-light ladda-button" data-style="expand-right">SIGN IN</button>
<div class="signin_with mt-3">
<p class="mb-0"><a href="<?php echo site_url('/auth/signup') ?>" title="Sign Up">Sign Up</a></p>
<p class="mb-0">or <a href="<?php echo site_url('/auth/forgotpassword') ?>" title="Sign Up">Forgot Password?</a></p>
<!--<button class="btn btn-primary btn-icon btn-icon-mini btn-round facebook"><i class="zmdi zmdi-facebook"></i></button>
<button class="btn btn-primary btn-icon btn-icon-mini btn-round twitter"><i class="zmdi zmdi-twitter"></i></button>
<button class="btn btn-primary btn-icon btn-icon-mini btn-round google"><i class="zmdi zmdi-google-plus"></i></button>-->
</div>
</div>
</form>
认证控制器
public function login()
{
$response = array('type'=>'', 'page'=>'', 'message'=>'');
// Load the model
$this->load->model('AuthModel');
// Validate the user can login
$result = $this->AuthModel->validate();
var_dump($_POST);
// Now we verify the result
if(!$result){
$response['type'] = 'error';
$response['message'] = 'Invalid username and/or password.';
}else{
$response['type'] = 'redirect';
$response['page'] = site_url().'RecordVerify/lists';
$response['message'] = 'Login successful';
}
echo json_encode($response);
}
身份验证
public function validate()
{
// grab user input
$email = $this->security->xss_clean($this->input->post('email'));
$password = $this->security->xss_clean($this->input->post('password'));
// Prep the query
$this->db->select("users.*,user_roles.role_name");
$this->db->from('users');
$this->db->join('user_roles', 'users.role = user_roles.URID');
$this->db->where('users.email', $email);
//$this->db->where('users.user_password', password_verify($password,'user_password'));
$this->db->where('users.status', 1);
$query = $this->db->get();
// Let's check if there are any results
if ($query->num_rows() != 0) {
// If there is a user, then create session data
$row = $query->row();
$thehashvalue= hash('sha256', $row->salt . hash('sha256', $password) );
if($row->password == $thehashvalue)
{
$data = array(
'user_id' => $row->id,
'first_name' => $row->first_name,
'last_name' => $row->last_name,
'full_name' => $row->first_name.' '.$row->last_name,
'email' => $row->email,
'user_role_id' => $row->role,
'user_role_name' => $row->role_name,
'user_report' => $row->report,
'validated' => true
);
$this->session->set_userdata($data);
return true;
}else{
return false;
}
} else {
// If the previous process did not validate
// then return false.
return false;
}
}
解决方案
尝试先获取输入,然后将其传递给模型...在您的控制器 Auth/login 中输入此代码
$email = $this->security->xss_clean($this->input->post('email')); $password = $this->security->xss_clean($this->input->post('password'));
然后通过调用将其传递给您的模型身份验证/验证
$result = $this->AuthModel->validate($email, $password);
代码应该是这样的......
授权控制器
public function login()
{
$email = $this->security->xss_clean($this->input->post('email'));
$password = $this->security->xss_clean($this->input->post('password'));
$response = array('type'=>'', 'page'=>'', 'message'=>'');
// Load the model
$this->load->model('AuthModel');
// Validate the user can login
$result = $this->AuthModel->validate($email, $password);
var_dump($_POST);
// Now we verify the result
if(!$result){
$response['type'] = 'error';
$response['message'] = 'Invalid username and/or password.';
}else{
$response['type'] = 'redirect';
$response['page'] = site_url().'RecordVerify/lists';
$response['message'] = 'Login successful';
}
echo json_encode($response);
}
授权模型
public function validate($email, $password)
{
// Prep the query
$this->db->select("users.*,user_roles.role_name");
$this->db->from('users');
$this->db->join('user_roles', 'users.role = user_roles.URID');
$this->db->where('users.email', $email);
//$this->db->where('users.user_password', password_verify($password,'user_password'));
$this->db->where('users.status', 1);
$query = $this->db->get();
// Let's check if there are any results
if ($query->num_rows() != 0) {
// If there is a user, then create session data
$row = $query->row();
$thehashvalue= hash('sha256', $row->salt . hash('sha256', $password) );
if($row->password == $thehashvalue)
{
$data = array(
'user_id' => $row->id,
'first_name' => $row->first_name,
'last_name' => $row->last_name,
'full_name' => $row->first_name.' '.$row->last_name,
'email' => $row->email,
'user_role_id' => $row->role,
'user_role_name' => $row->role_name,
'user_report' => $row->report,
'validated' => true
);
$this->session->set_userdata($data);
return true;
}else{
return false;
}
} else {
// If the previous process did not validate
// then return false.
return false;
}
}
推荐阅读
- linux - 在 WSL 2 上使用 Ansible 通过 snap 安装 microk8s
- angular - 在 Ionic 5 中使用 Capacitor 实现 Google Analytics
- leaflet - 将一个多边形的数据复制粘贴到另一个,LEAFLET
- c++ - 使用预增量的 expession 中的意外输出
- javascript - keyup 更新列表
- android - 是否可以检查源代码是否与 App 版本匹配?
- python - 在 python 中嵌入不和谐的问题,在命令提示符或不和谐上没有响应
- css - 将 div 放在另一个 div 的底部
- php - 为什么 php 扩展由 apache 提供,而具有专有扩展的 php 文件由 FPM/FastCGI 提供?
- python - 从包含字典和子列表的列表中搜索并创建一个新列表