php - 表单验证以及数据库错误

标签 php mysql forms codeigniter validation

我收到表单验证错误以及数据库错误。当我删除表单验证时,数据库查询工作得很好。我不知道错误是什么以及如何解决它。

A PHP Error was encountered

Severity: Notice

Message: Undefined offset: 1

Filename: libraries/Form_validation.php

Line Number: 953

A Database Error Occurred

Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE ` = 'admin' LIMIT 1' at line 2

SELECT * WHERE ` = 'admin' LIMIT 1

Filename: C:\wamp\www\myblog.com\system\database\DB_driver.php

Line Number: 330

[ Controller :我的博客]

class Myblog extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('blogmodel');

        }


    public function login()
    {
        $this->load->view('header');
        $this->load->view('login');
        $this->load->view('footer');
    }
    public function login_check()
    {
        $user=$this->input->post("username");
        $pass=$this->input->post("password");
        $this->form_validation->set_rules('username', 'Username', 'trim|required|is_unique');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');
        if($this->form_validation->run()==true)
        {
            $this->blogmodel->checklogin($user,$pass);
            $this->load->view('header');
            $this->load->view('logsuccess');
            $this->load->view('footer');
        }
        else
        {
        $this->load->view('header');
        $this->load->view('login');
        $this->load->view('footer');
        }
    }

    public function reg()
    {       
        $this->form_validation->set_rules('username', 'Username', 'trim|required|is_unique');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');
        if($this->form_validation->run()==true)
        {   
            $user=$this->input->post("username");
            $pass=$this->input->post("password");
            $this->blogmodel->register($user,$pass);
            $this->load->view('header');
            $this->load->view('regsuccess');
            $this->load->view('footer');
        }

        else
            {
                redirect('myblog/login');           
   }
}





[Model: blogmodel]

class Blogmodel extends CI_Model {

    function __construct() {
        parent::__construct();
    }

    function checklogin($user,$pass)
    {
        $this->db->select('username, password');
        $this->db->from('user');
        $this->db->where('username', $user);
        $this->db->where('password', MD5($pass));
        $this->db->limit(1);

        $query = $this->db->get();
        if($query->num_rows() == 1) { 
            return $query->result(); 
        } else {
            redirect('myblog/login');
        }
    }

    function register($user,$pass)
    {
            $new_member=array(
            'username' => $user,
            'password' => md5($pass),
            'status' =>1
        );
        $insert = $this->db->insert('user', $new_member);
        return $insert;     
    }

[查看:登录]

   echo "<h2>Register</h2>";
   echo validation_errors();
   echo form_open('myblog/reg'); 
   echo form_label("Username: ");
   echo form_input("username");
   ?><br/>
   <?php
   echo form_label("Password:&nbsp;&nbsp;");
   echo form_password("password");
   ?><br/>
   <?php
   echo form_label("Confirm Password:&nbsp;&nbsp;");
   echo form_password("password2");
   ?><br/>
   <?php
   echo form_submit("","Register");
   echo form_close();


   echo "<h2>Login</h2>";
   echo validation_errors();
   echo form_open('myblog/login_check'); 
   echo form_label("Username: ");
   echo form_input("username");
   ?><br/>
   <?php
   echo form_label("Password:&nbsp;&nbsp;");
   echo form_password("password");
   ?><br/>
   <?php
   echo form_submit("","Login");
   echo form_close();

最佳答案

我的猜测是因为您没有在表单验证中设置表格或行。

在 Controller 中更改此行;

    $this->form_validation->set_rules('username', 'Username', 'trim|required|is_unique');

对此;

    $this->form_validation->set_rules('username', 'Username', 'trim|required|is_unique[users.username]');

正如您将看到的,我已将 [users.username] 添加到 is_inque 规则中。没有它,CI 就不知道该与什么进行比较。

关于php - 表单验证以及数据库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27397233/

相关文章:

php - PHP DateTime::createFromFormat() 的多种格式

php - Laravel Eloquent 一对多

mysql - Node.js:无法调用未定义的方法释放(MySql)

mysql - 删除重复条目

php - HTML 表单 slider

forms - 使用formBuilder angular2获取 View 中的字段值

php - 在 Laravel 中覆盖包本地化

javascript - 在另一个Js文件中声明Js文件

mysql - 联系人管理数据库设计的建议

jquery - if 和 else 代码块一起运行