在codeigniter中将数组从控制器传递到模型

Posted

技术标签:

【中文标题】在codeigniter中将数组从控制器传递到模型【英文标题】:Passing an array from controller to model in 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 是查询数据库时需要获取的两个值。请帮忙

【问题讨论】:

Pass an array from controller to model in 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。它就像我的魅力一样工作。 祝你好运!

【讨论】:

以上是关于在codeigniter中将数组从控制器传递到模型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Codeigniter 中将值从视图传递到模型

如何在 Codeigniter 中将变量从一个控制器传递到另一个控制器

模型数组的 Codeigniter 错误

如何将结果从模型传递到 CodeIgniter 中的控制器?

在 ASP.Net MVC 5 中将 javascript 数组从视图传递到控制器

在 codeigniter 中,如何将数组值从控制器传递到同一视图页面?