php - 无法访问错误登录表单codeigniter
问题描述
我正在创建一个登录表单,我从文档和其他资源中编写了所有内容。Unable to access an error message corresponding to your field name Username.(xss_clean)
当我尝试登录时,我收到一个错误Unable to access an error message corresponding to your field name Password.(xss_clean)
我从 phpMyAdmin 检查了我的数据库,数据库已经存在。我检查了我的数据库连接,它也已连接。我检查了然后表管理员它也在那里并在模型中编码。
你们能帮帮我吗,我在这里做错了什么?
控制器
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class LoginCheck extends CI_Controller {
public function __construct(){
parent::__construct();
$this->load->library('form_validation');
$this->load->database();
$this->load->helper('form');
$this->load->helper('url');
$this->load->model('admin');
}
function index() {
//This method will have the credentials validation
$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');
$this->form_validation->set_error_delimiters('<br /><div class="form-error">', '</span>');
if($this->form_validation->run() == FALSE) {
//Field validation failed. User redirected to login page
$this->load->view('index');
}
else {
//Go to private area
echo "Private area";
//redirect('listing', 'refresh');
}
}
function check_database($password) {
//Field validation succeeded. Validate against database
$username = $this->input->post('username');
//query the database
$result = $this->admin->login($username, $password);
//print_r($result);
if($result) {
$sess_array = array();
foreach($result as $row) {
$sess_array = array(
'id' => $row->id,
'username' => $row->username
);
$this->session->set_userdata('logged_in', $sess_array);
}
return TRUE;
}
else {
$this->form_validation->set_message('check_database', 'Invalid username or password');
return false;
}
}
}
?>
看法
<?php
$attributes = array('class' => 'login100-form validate-form flex-sb flex-w');
echo form_open('index.php/logincheck', $attributes);
?>
<span class="login100-form-title p-b-51">
<img src="<?php echo site_url('login_assets/img/logo.png')?>">
</span>
<div class="wrap-input100 validate-input m-b-16" data-validate = "Username is required">
<?php echo form_error('username'); ?>
<input class="input100" type="text" name="username" value="<?php echo set_value('username'); ?>" placeholder="Username">
<span class="focus-input100"></span>
</div>
<div class="wrap-input100 validate-input m-b-16" data-validate = "Password is required">
<?php echo form_error('password'); ?>
<input class="input100" type="password" name="password" value="<?php echo set_value('password'); ?>" placeholder="Password">
<span class="focus-input100"></span>
</div>
<div class="container-login100-form-btn m-t-17">
<?php
$attributes = array('class' => 'login100-form-btn');
echo form_submit('submit', 'Login', $attributes);
?>
</div>
<?php echo form_close(); ?>
解决方案
看来您最初的验证规则有一个小错误。在 CI 中,最终验证规则不应跟随 pipe |
。在这种情况下,管道只能用作分隔符。
尝试更改验证规则以删除尾随管道:
$this->form_validation->set_rules('username', 'Username', 'rule1|rule2|rule3');
$this->form_validation->set_rules('password', 'Password', 'rule1|rule2');
另外,请注意您的表单指向LoginCheck
该类,但它没有指向任何特定的函数/方法。即使它可能默认为index()
表单应该指向特定的类/方法,所以你应该使用
echo form_open('index.php/logincheck/index', $attributes);
最后,您更新的规则包括xss_clean
,它已从 CI 的表单验证库中删除,并且需要加载安全帮助程序。您可以通过在构造中加载安全帮助程序来解决该错误,但不要忘记 XSS 过滤应该在输出上完成,而不是输入(这就是它从表单验证库中删除的原因)
您可以在此处阅读有关最后一部分的一些信息
推荐阅读
- javascript - 创建人工缩放变换事件
- r - 如何在 ade4 中使用与 sPCA 包相同的包 adespatial
- sql-server - 使用 CASE WHEN 时 ORDER BY 不工作,但没有它工作?
- r - 使用 stargazer 复制专业表
- excel - 比较有问题
- javascript - 在运行的 Node 应用程序上访问 javascript 函数
- c# - Xamarin.Forms 忽略 SSL 错误 Android(自签名)
- .net - 如何设置资源文件中字符串使用的换行符类型?
- html - 如何仅使用 flexbox 制作响应式图像网格?
- git - 如何查看 Git-Stash 中的所有目录/文件?