2012-02-10 27 views
0

我在我的db中有大约10行,其中3个状态==为'Pass'。我在下面的代码中注意到的问题是foreach循环。它不想正常工作。我甚至无法让脚本将jSON数据发送回浏览器,这意味着脚本不会通过foreach语句处理。有人知道如何解决这个问题吗?Codeigniter没有正确地处理一个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; 
      } 
     } 
    } 
+0

你确定你的查询返回任何结果? – Hersha 2012-02-10 15:47:37

+0

现在没有它没有返回任何东西。 – 2012-02-10 15:49:27

回答

3

你呼应JSON在每次循环。这将使这样的事情:

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

这是无效的JSON。

您需要构建一个数组,然后在循环之后使用echo json_encode()(仅一次)。

而且你elseif应该是这样的:

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

是的,我注意到在响应标题时,我用另一种方式编码。谢谢! – 2012-02-10 15:49:09

+0

没问题。 :-) – 2012-02-10 16:08:00

1

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

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

你在你的第二个条件缺$row->status ==的ELSEIF块

+0

好,很酷,谢谢你! – 2012-02-10 15:49:41