【问题标题】:model return value in codeignitercodeigniter 中的模型返回值
【发布时间】:2013-03-05 21:25:31
【问题描述】:

我将模型的返回值存储在$result

$result = $this->absensi_m->absensi();

根据我在absensi() 函数中返回的内容,$result 的值将是以下之一:

  • 错误
  • 'sudah absen'(字符串)
  • 1(表示成功)

然后我尝试使用echo $result; 查看$result 值,它返回1

但是,当我尝试使用 $result 进行某些验证时,我遇到了一个奇怪的错误:

        if($result == FALSE)
            $data['result'] = 'Anda Belum Terdaftar, Silahkan Daftar Dahulu :D';
        else if($result == 'sudah absen')
            $data['result'] = 'Anda Sudah Absen Hari Ini :D';
        else 
            $data['result'] = 'Selamat Datang, '.$this->input->post('txtNama').'! ^^';

虽然$result 的值为1,但第二个if ($result == 'sudah absen') 总是返回TRUE

这是怎么回事?谢谢 :D

这是我模型中的absensi() 函数:

public function absensi() {
        $nama = $this->input->post('txtNama');
        $tanggal = date('Y-m-d', now());

        $this->db->select('umat_id');
        $terdaftar = $this->db->get_where('msumat', array('nama' => $nama));

        $row = $terdaftar->row_array();
        $sudah_absen = $this->db->get_where('msabsensi', array('umat_id' => $row['umat_id'], 'absensi_tanggal' => $tanggal));

        if($terdaftar->num_rows() != 0 && $sudah_absen->num_rows() == 0)
        {
            $data_umat = array(
            'umat_id' => $row['umat_id'],
            'status' => 'H',
            'absensi_tanggal' => date('Y-m-d')
            );

            return $this->db->insert('msabsensi', $data_umat);
        }
        else if($sudah_absen->num_rows() != 0)
            return 'sudah absen';
        else
            return FALSE;
    }

答案: 我会在这里回答,因为你可能对很多 cmets/conversation 感到困惑。

我通过使用var_dump()echo 意识到发生了什么(感谢下面的两个答案):

$result = $this->absensi_m->absensi();
var_dump($result);
echo $result;

var_dump() 返回 bool(true)echo 返回 1。这意味着发生此问题是因为我认为 $result 的值为 1(整数),而实际值为 TRUE(布尔)。

结论是:使用 TRUE(bool) 值回显一个变量将得到 1(integer),因此请使用 var_dump() 而不是 echo

【问题讨论】:

标签: php codeigniter


【解决方案1】:

你确定这正在发生吗?你确定$result=1

我很难相信。这是您的代码的fiddle 输出

您的函数返回 true 而不是 1

你应该添加else if($result === 'sudah absen')来严格检查结果。

【讨论】:

  • 你认为这是因为我得到的值 (1) 不是来自'return 1;'但是来自codeigniter(来自'$this->idb->insert()')?是的,我很确定,如果您愿意,我可以提供屏幕截图和完整代码:D
  • @ro ko 这不是一个修复 $result === 'sudah absen' 它与 $result == 'sudah absen' 完全一样,是认真的;)
  • @donotusetabtodigitthisnick 认真的?? php.net/manual/en/language.operators.comparison.php
  • 谢谢:D,但是为什么当我使用 echo $result; 时,出现的值是 1,而不是 TRUE?
  • @BlazeTama 这取决于您的 absensi() 方法返回的内容
【解决方案2】:

首先你不能返回:

return $this->db->insert('msabsensi', $data_umat);

这样做:

 $this->db->insert('msabsensi', $data_umat);
 return ...-> 1 or true or what you need

那么你应该这样做:

if(!$result){
            $data['result'] = 'Anda Belum Terdaftar, Silahkan Daftar Dahulu :D';
        }
    if($result == 'sudah absen'){
            $data['result'] = 'Anda Sudah Absen Hari Ini :D';
         }
       if($result && $result !== 'sudah absen'){
            $data['result'] = 'Selamat Datang, '.$this->input->post('txtNama').'! ^^';
          }

然后使用var_dump(); 来检查结果是什么:

var_dump($result);

【讨论】:

  • 不,我正在添加评论。其实我喜欢你的发型(y)。您所做的与他所做的完全相同,添加大括号并没有太大帮助。检查 !$result 或 FALSE 两者是否相同
  • 它不是我,我赞成它:D 是的,我知道这样的事情会起作用(玩 if 位置,我只需要切换 2nd 和 3rd),但我想要的是解释发生了什么。谢谢:D
  • @ro ko 更好地检查我的答案我更正了整个如果 sintaxt 也
  • @BlazeTama 我需要你的方法 ansensi() 请
  • @BlazeTama 是我,他指的是我 :) 不确定它是如何工作的,但你没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
相关资源
最近更新 更多