2017-06-25 122 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個元素。

相關問題