Codeigniter没有正确处理foreach循环

时间:2012-02-10 15:45:21

标签: php codeigniter

我的数据库中有大约10行,其中3行的状态==为'通过'。我在下面的代码中注意到的问题是使用foreach循环。它不想正常工作。我甚至无法让脚本将jSON数据发送回浏览器,这意味着脚本没有处理过foreach语句。有人知道如何解决这个问题吗?

public function logsig() {
        header('Content-type:application/json');
        $postedUser = $this->input->post('username');
        $password = $this->input->post('password');
        $hashedPass = $this->encrypt->sha1($password);
        $query = $this->db->query("SELECT * FROM users WHERE username = '{$postedUser}' AND password = '{$hashedPass}'");
        foreach ($query->result() as $row) {
            if ($row->status == "Pass") {
                if ($query->num_rows() > 0) {
                    $this->session->set_userdata('logged', "1");
                    $this->session->set_userdata("username", "{$postedUser}");
                    echo json_encode(array('session_state' => true));
                } else {
                    echo json_encode(array('session_state' => false));
                }
            } elseif ($row->status == "Fail" || "Pending") {
                exit;
            }
        }
    }

2 个答案:

答案 0 :(得分:3)

您在循环的每次迭代中回显JSON。这将是这样的:

{"session_state": true}{"session_state": false}

这是无效的JSON。

你需要在循环之后构建一个数组,然后echo json_encode()(只需一次)。

此外,elseif应该是这样的:

elseif ($row->status == "Fail" || $row->status == "Pending")

答案 1 :(得分:1)

elseif ($row->status == "Fail" || "Pending") {替换为

elseif ($row->status == "Fail" || $row->status == "Pending") {

你在elseif块

的第二个条件中缺少$row->status ==