2017-06-25 127 views
-1

我只想将使用$ this-> input-> post() 获取输入的变量传递给Modal中的函数。如何将变量从控制器传递到模型

我的型号功能是

function get_name($email) { 
    //$email = $this->input->post('email'); 
    $this->db->select('first_name'); 
    $this->db->where('email', $email); 
    $query = $this->db->get('sign_up'); 
    return $query->row()->first_name; 
} 

作为回报我想FIRST_NAME从功能

回答

1

First of all & All above.. User Input Must Be Pass Through Proper Validation & Sanitization

,您可以使用以下控制器&型号举例,让您的结果。

用户控制器:

<?php 
// No direct Script execution 
defined('BASEPATH') or exit('No direct script access allowed'); 
/** 
* My User Controller 
* 
* Always make Controller Slim & Model Fat :) 
*/ 
class User extends CI_Controller 
{ 
    /** 
    * Class Constructor 
    */ 
    public function __construct() 
    { 
     // call parent constructor 
     parent::__construct(); 
     // load your User_model 
     $this->load->model('User_model'); 
    } 

    /** 
    * If method calling by Via Via... 
    * @return [type] [description] 
    */ 
    public function validate_post(){ 
     // get email from POST 
     $email = $this->input->post('email', true); 
     // call another method 
     $this->get_name($email); 
    } 

    /** 
    * Get User First Name by Email ID 
    * @return [type] [description] 
    */ 
    public function get_name($email) 
    { 
     // if user has session email 
     if ($this->session->userdata('email')) {    
      // call model method to get first name 
      $first_name = $this->User_model->get_name($email); 

      // check what model returns 
      if ($first_name === false) { 
       // no record found 
       show_error('Data error: Supplied email not in record.'); 
      } elseif ($first_name === null) { 
       // invalid email format 
       show_error('Validation error: Email is not valid.'); 
      } else { 
       // Yes! you made it 
       $this->display('Welcome Back !!! '.$first_name); 
      } 
     } else { 
      // user not login, show them login page 
      redirect('/'); 
     } 
    } 
} 

/* End of file User.php */ 
/* Location: ./application/controllers/User.php */ 

User_model型号:

<?php 
// No direct script execution 
defined('BASEPATH') or exit('No direct script access allowed'); 
/** 
* Class User_model to handle all user related information from MySQL 
*/ 
class User_model extends CI_Model 
{ 
    /** 
    * MySQL table which contains all data about users 
    * @var string 
    */ 
    protected $table = 'sign_up'; 

    /** 
    * Returns, User First Name by Email ID 
    * @param [type] $email_addres [description] 
    * @return [type] [description] 
    */ 
    public function get_name($email_addres) 
    { 

     // validate email 
     if (filter_var($email_addres, FILTER_VALIDATE_EMAIL)) { 
      // desire column from table 
      $this->db->select('first_name'); 
      // where clause 
      $this->db->where('email_addres', $email_addres); 
      // mysql table 
      $query = $this->db->get($this->table); 

      // if record exist 
      if ($query->num_rows() > 0) { 
       // row, will return first result only, no matter if multiple record exist 
       $ret = $query->row(); 
       // return first row, firs_name value 
       return $ret->first_name; 
      } else { 
       // error 
       return false; 
      } 
     } else { 
      // validation error 
      return null; 
     } 
    } 
} 

/* End of file User_model.php */ 
/* Location: ./application/models/User_model.php */ 
+0

的屏幕截图我完成了所有这些 –

+0

@AmaanIqbal,你确定..?你在POST中得到正确的电子邮件,你确定你有在MySQL表中的电子邮件匹配记录,你确定你的查询被创建好,你确定当你干运行你的查询在phpmyadmin你得到的数据,你确定你的表列结构是否正确...?你确定你打的是正确的桌子..你确定你的模型函数被调用.. ?? –

+0

它返回'验证错误:电子邮件无效。 ' –

0

如果我理解正确的返回,要在表中查找“sign_up”中的“FIRST_NAME” ,其中“电子邮件”= $电子邮件。您是否尝试过这种方法:

$this->db->select("first_name"); 
$this->db->from("sign_up"); 
$this->db->where("email", $email); 
$result = $this->db->get()->row(); 
1

请检查下面提到的解决方案。

function get_name($email) { 
    $this->db->select('first_name'); 
    $this->db->where('email', $email); 
    $query = $this->db->get('sign_up'); 
    $ret = $query->row(); 
    return $ret->first_name; 
} 

让我知道它是否无效。现在

+0

检查您是否获得'$ email'的价值。如果你的价值超过了你的表格 –

0

你应该从模型传递变量来控制,而不是来回m控制器到模型(对于这个例子。因为你从数据库中提取数据,你应该使用模型来完成)。我认为你应该在开始编码之前理解MVC逻辑。

型号:

public function get_name() 
{ 
    $email = $this->input->post('email', true); 

    $query = $this->db->get_where('sign_up', ['email' => $email])->row('first_name'); 
    return $query; 
} 

控制器:

public function some_function_name() 
{ 
    $this->load->model('Your_model_name'); 
    $some_variable = $this->Your_model_name->get_name(); 
} 

注意:如果你不使用PHP7,使用array()而不是括号。

+0

但函数get_name() –

+0

没有返回所以,你发布什么?如果你不这样做,你什么都得不到。 –

+0

我发现我的错误。我将表单提交给控制器中的其他功能,然后重定向到我所需的功能。因此这些值在所需的函数中没有被访问。 –

0

请尝试下面的代码来获得的第一个名字:

function get_name($email) { 
    $firstName = ""; 
    $this->db->select("first_name"); 
    $this->db->from("sign_up"); 
    $this->db->where("email", $email); 
    $query = $this->db->get(); 
    $result = $query->result_array(); 
    if(!empty($result)){ 
    $firstName = $result[0]['first_name']; 
    } 
    return $firstName; 
} 

在上面的函数,如果第一个名字是存在,那么这将是获取和字符串格式发送到控制器。

请注意,如果有很多行,那么它也会从结果的第一行读取数据,因为我已经把它的第0个元素。

相关问题