【问题标题】:form validation as well as db error表单验证以及数据库错误
【发布时间】:2014-12-10 09:19:23
【问题描述】:

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

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

[控制器:我的博客]

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();

【问题讨论】:

  • 您的用户名表单验证应具有 is_unique 规则中的表名。 is_unique[users.username]

标签: php mysql forms codeigniter validation


【解决方案1】:

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

在您的控制器中更改此行;

    $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 不知道拿什么来比较。

【讨论】:

  • 对不起,我没听懂你。我是stckovrflw 的新手。我如何接受答案??
  • 在这个答案的左边,会有一个小勾。你点击你认为正确的答案。这让遇到同样问题的其他人更容易。
【解决方案2】:

SQL 语句缺少要检查的表和列

SELECT * FROM table WHERE column = 'admin' LIMIT 1

【讨论】:

  • 是的,当我删除表单验证时,它工作正常。我已经在我的模型上指定了表格和所有必要的字段。但是当我应用表单验证时,它会显示这种数据库错误。
  • 猜猜我们需要查看 Form_validation.php 和 DB_driver.php 以提供更多帮助
  • 那些不是自定义文件,它们是 CI 中的默认文件。能否请您通过 myblog 控制器中的 reg() func 和 blogmodel 中的 register() fun。问题似乎就在那里。谢谢你。 :)
【解决方案3】:

SQL 语法不正确。 您不完整的 sql 语句表明您要从包含您的用户名值的 TABLE 中获取 COLUMN VALUE。 所以.include一个适当的列名和表名, 语法:

Select * from table_name where column_name='admin' Limit 1;

【讨论】:

    猜你喜欢
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    相关资源
    最近更新 更多