2013-03-19 138 views
0

我已經與這個問題鬥爭了幾個小時。我有這個方法我的模型(笨):1和'1'之間的PHP差異

public function get_umat($kelas1 = 0, $kelas2 = 0) { 
    $this->db->select('*'); 
    $this->db->from('msumat'); 
    $this->db->join('mskelas', 'msumat.kelas_id = mskelas.kelas_id'); 

    if($kelas1 != 0) 
    { 
     echo $kelas1; 
     var_dump($kelas1); 
     $this->db->where('mskelas.kelas_id', $kelas1); 
    } 
    else if($kelas2 !=0) 
    { 
     echo '2'; 
     $this->db->where('mskelas.kelas_id', $kelas2); 
    } 
    else if($kelas1 != 0 && $kelas2 !=0) 
    { 
     echo '3'; 
     $this->db->where('mskelas.kelas_id BETWEEN $kelas1 AND $kelas2'); 
    } 

    return $this->db->get(); 
} 

編輯: 的一個工作是在這行代碼(從上面取):

$this->db->where('mskelas.kelas_id', $kelas1); 

不是工作時,我在我的控制器中調用此方法,如下所示:

$this->backend_m->get_umat($_POST['ddl_kelas1'], $_POST['ddl_kelas1']); 

我得到 '1'(字符串)當我vardump的($_POST['ddl_kelas1']

然後我嘗試變化控制器的參數,但它仍然工作:

$this->backend_m->get_umat(1, $_POST['ddl_kelas1']); 

拼命,我試着直接在模型中改變參數,它的工作原理

public function get_umat($kelas1 = 1, $kelas2 = 0) 

這裏發生了什麼?我認爲它與1(int)和'1'(字符串)的區別有關。謝謝:D

編輯2: 經過一些實驗,我認爲變量類型不是這裏的問題。那是因爲: 我試圖做這在我的控制器

 if(isset($_POST['btnSearch'])) 
    { 
     $test = (int)$_POST['ddl_kelas1']; 
     $this->backend_m->get_umat($_POST['ddl_kelas1'] , $_POST['ddl_kelas1']); 
    } 

這在我的模型:

if((int)$kelas1 != 0) 
    { 
     echo $kelas1; 
     var_dump($kelas1); 
     $this->db->where('mskelas.kelas_id', $kelas1); 
    } 

什麼,我得到的是,該$kelas1現在已經是一個整數,但代碼仍然是而不是工作。我認爲它有東西在HTML做$_POSTselect,或別的東西:d

然而,這個代碼仍然可以正常使用(就像上面,我手動更改的參數設置爲1(整數)):

public function get_umat($kelas1 = 1, $kelas2 = 0) 

這是我的全部控制器代碼:

public function index() { 
    //table  
    $data_umat = $this->backend_m->get_umat()->result(); 

    $this->table->set_heading(
     'No', 
     'Nama', 
     'Kelas', 
     'Alamat', 
     'Sekolah', 
     'Nomor Telepon', 
     'Keterangan'   
    ); 

    $table_template = array('table_open' => '<table border="1" id="custom_table">'); 
    $this->table->set_template($table_template); 

    $no = 1; 
    foreach($data_umat as $list_temp) 
    { 
     $this->table->add_row(
      $no++, 
      $list_temp->nama, 
      $list_temp->kelas, 
      $list_temp->alamat, 
      $list_temp->sekolah, 
      $list_temp->no_tlpn, 
      $list_temp->keterangan 
     ); 
    } 

    $data_kelas = $this->backend_m->get_kelas()->result(); 

    $data['list_kelas'][0] = 'Pilih Kelas'; 

    foreach($data_kelas as $row) 
    { 
     $data['list_kelas'][$row->kelas_id] = $row->kelas; 
    } 

    $data['table'] = $this->table->generate(); 

    $this->load->view('backend/home_v', $data); 


     if(isset($_POST['btnSearch'])) 
    { 
     //$test = (int)$_POST['ddl_kelas1']; 
     $test = (int)$this->input->post('ddl_kelas1'); 
     $this->backend_m->get_umat($test , $_POST['ddl_kelas1'], $_POST['txtNama']); 
    } 

} 

相當混亂,咩?

簡單的答案對於那些有同樣的問題 使用$_POST$this->input->post()模型,在控制器不。所以我們不要必須調用模型的方法。

+0

「不工作」是什麼意思?描述*發生的事情和你的期望。 – deceze 2013-03-19 14:19:14

+0

1可以代表一個整數,'1'代表一個varchar – 2013-03-19 14:19:15

+0

編輯,謝謝:D – 2013-03-19 14:22:52

回答

1

仔細檢查表達在你的if語句:

if((int)$kelas1 != 0) 
{...} 
else if((int)$kelas2 !=0) 
{...} 
else if((int)$kelas1 != 0 && (int)$kelas2 !=0) 
{...} 

添加(int)以確保將整數與整數(或字符串與字符串)進行比較。同樣的想法適用於構建SQL語句。

調試策略 嘗試以下思路的一種或多種:

(1)確保整數被傳遞到您的get_mat功能:

public function get_umat((int)$kelas1 = 0, (int)$kelas2 = 0) {...) 

(2)確保在通過硬編碼值get_umat作品時:

get_umat(0,0); 
get_umat(1,0); 
get_umat(0,1); 
get_umat(1,1); 

在每種情況下,請檢查以確保選擇了正確的WHERE子句。

ALSO:回顯您的SQL語句並仔細檢查它的語法。嘗試是這樣的:

$the_sql_query_string = $this->db->last_query(); 

和回聲在$the_sql_query_string

---------------碼建議/外觀----------- -------------------------------------------------- -------------------

我對代碼提出了一些建議。請輸入$kelas1$kelas2的一些實際值,並確保您的輸出看起來正確。

public function index() { 
    // Select all or filtered set of records  
    if(isset($this->input->post('btnSearch')) 
    { 
     //$test = (int)$_POST['ddl_kelas1']; 
     //$test = (int)$this->input->post('ddl_kelas1'); 

     $kelas1 = 101; // put in a relevant id 
     $kelas2 = 201; // put in a second relevant id 

     // In term, try the following: 
     $this->backend_m->get_umat($kelas1,$kelas2); 
    } 

    $data_umat = $this->backend_m->get_umat()->result(); 

    $this->table->set_heading(
     'No', 
     'Nama', 
     'Kelas', 
     'Alamat', 
     'Sekolah', 
     'Nomor Telepon', 
     'Keterangan'   
    ); 

    $table_template = array('table_open' => '<table border="1" id="custom_table">'); 
    $this->table->set_template($table_template); 

    $no = 1; 
    foreach($data_umat as $list_temp) 
    { 
     $this->table->add_row(
      $no++, 
      $list_temp->nama, 
      $list_temp->kelas, 
      $list_temp->alamat, 
      $list_temp->sekolah, 
      $list_temp->no_tlpn, 
      $list_temp->keterangan 
     ); 
    } 

    $data_kelas = $this->backend_m->get_kelas()->result(); 

    $data['list_kelas'][0] = 'Pilih Kelas'; 

    foreach($data_kelas as $row) 
    { 
     $data['list_kelas'][$row->kelas_id] = $row->kelas; 
    } 

    $data['table'] = $this->table->generate(); 

    $this->load->view('backend/home_v', $data); 


    // This will not do anything since you have already rendered the page 
    // This should be at the top of the code 
    /* 
    if(isset($_POST['btnSearch'])) 
    { 
     //$test = (int)$_POST['ddl_kelas1']; 
     $test = (int)$this->input->post('ddl_kelas1'); 
     $this->backend_m->get_umat($test , $_POST['ddl_kelas1'], $_POST['txtNama']); 
    } 
    */ 

} 
+0

感謝您的幫助:D,它仍然無法正常工作。 sql需要int,而我的變量總是字符串...我試圖投它,但不工作:D – 2013-03-20 10:42:20

+0

請參閱我編輯的問題:D – 2013-03-20 10:57:35

+0

我更新了我的文章,提供了更多的想法。 – 2013-03-20 11:15:39

1

將您的變量作爲整數進行投射。

$this->backend_m->get_umat((int)$_POST['ddl_kelas1'], (int)$_POST['ddl_kelas1']); 
+0

嗯,可讀... ;-) – DaveRandom 2013-03-19 14:21:46

+0

感謝您的幫助,但它不是wprking。請看我編輯的問題。謝謝:D – 2013-03-19 14:24:39

+0

@BlazeTama,'var_dump($ kelas1);'給你什麼? – Starx 2013-03-19 15:43:35

1

你會選擇一個密鑰與字符串相匹配的數據,試圖強制轉換值以得到正確的數據:

public function get_umat($kelas1 = 0, $kelas2 = 0) { 
    $kelas1 = (int)$kelas1; 
    $kelas2 = (int)$kelas2; 
    $this->db->select('*'); 
    $this->db->from('msumat'); 
    $this->db->join('mskelas', 'msumat.kelas_id = mskelas.kelas_id'); 

    if($kelas1 != 0) 
    { 
     echo $kelas1; 
     var_dump($kelas1); 
     $this->db->where('mskelas.kelas_id', $kelas1); 
    } 
    else if($kelas2 !=0) 
    { 
     echo '2'; 
     $this->db->where('mskelas.kelas_id', $kelas2); 
    } 
    else if($kelas1 != 0 && $kelas2 !=0) 
    { 
     echo '3'; 
     $this->db->where('mskelas.kelas_id BETWEEN $kelas1 AND $kelas2'); 
    } 

    return $this->db->get(); 
} 
+0

感謝您的幫助,但它不是wprking。請看我編輯的問題。感謝:D – 2013-03-19 14:25:21

相關問題