2013-03-19 167 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

相关问题