【问题标题】:Passing an array from controller to model in codeigniter在codeigniter中将数组从控制器传递到模型
【发布时间】:2012-11-04 01:01:28
【问题描述】:

我试图通过控制器类中的函数传递数组并从模型内部类中的另一个函数中检索它,但无法检索值。请指教。

代码如下。

控制器类代码

 class home extends CI_Controller {

function __construct() {
    parent::__construct();
    $this->load->helper('url');
}

function index() {
    $this->load->view('loginview');
}

function login() {
    $parameters = array(
        '$uname' => $this->input->post('uname'),
        '$passwords' => $this->input->post('password')
    );

    $this->load->model('loginModel');
    $validate = $this->loginModel->validateuser($parameters);

    if(count($validate)== 1){
        echo "Logged in";
    }
    else
    {
        //redirect('home/index');
        echo "dasad";
    }


}

}

模型类代码

class loginModel extends CI_Model {

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

public function validateuser($parameters) {

        $uname = $parameters['uname'];
        $pass = sha1($mem['pass']);



    $query = $this->db->query("select * from user where username = '$uname' and password = '$pass'");
    $result = $query->result_array();
    return $result;

}

}

变量 $uname 和 $pass 是查询数据库时需要获取的两个值。请帮忙

【问题讨论】:

标签: php arrays codeigniter


【解决方案1】:

您的代码中有错误。正确的控制器 login() 方法:

function login() {

    // you don't need '$' sign
    $parameters = array(
        'name' => $this->input->post('uname'),
        'pass' => $this->input->post('password')
    );

    $this->load->model('loginModel');
    $validate = $this->loginModel->validateuser($parameters);

    // stuff..

}

和模型 loginModel() 方法:

public function validateuser($parameters) {

    $uname = $parameters['name'];
    $pass = sha1($parameters['pass']); // and second error was here

    // stuff..

}

【讨论】:

  • owh.... 非常感谢我在控制器的数组键中使用了 $,这是最大的问题再次感谢...
【解决方案2】:

您的数组键字符串在模型和控制器类中是不同的。以下是可能的修复方法。

在控制器中使用这个:

$parameters = array(
        'uname' => $this->input->post('uname'),
        'passwords' => $this->input->post('password')
    );

其次是在你的模型中。使用它来获取参数。

  $uname = $parameters['uname'];
  $pass = sha1($parameters['passwords']);

希望对你有帮助。

【讨论】:

  • 这与传递变量的方式无关。
  • 是的,在数组键中使用 $ 是最大的问题,而且它也不是匹配的,非常感谢您的帮助......
【解决方案3】:

我看到你的答案已经确定,但我只是想给你一个替代方案。它更安全、更短:

控制器:

function login() {

    $this->load->model('loginModel');
    $validate = $this->loginModel->validateuser();

    if($validate ){
        echo "Valid User";
    } else{
        echo "Invalid User";
    }
}

型号:

public function validateuser() {

 $query = $this->db->query("select * from user where username = ? and password = ?",array($this->input->post('uname'),sha1($this->input->post('password'))));
   if($query->num_rows() == 1){
      return true;
   }else{
     return false;
  }

} 

【讨论】:

  • 是的,已经解决了。看起来你的方法比我所做的更好......非常感谢你的建议。
【解决方案4】:

我遇到了同样的问题,显然我发现的唯一方法是在控制器中对数组进行 json_encode() 并在模型中对它们进行 json_decode。它就像我的魅力一样工作。 祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多