2012-02-10 14 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

+0

いいえ、今は何も返されていません。 –

答えて

3

が欠落しています。これは次のようになります:

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

これは有効なJSONではありません。

ループを作成した後、ループの後にecho json_encode()(1回だけ)を作成する必要があります。

また、あなたのelseifはこのようになります。

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

ええ、私はそれが別の方法でコード化された応答ヘッダーに気づいた。ありがとう! –

+0

問題ありません。 :-) –

1

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

elseif ($row->status == "Fail" || "Pending") {を交換してくださいあなたは、ループの各反復でJSONをエコーし​​ているELSEIFブロックのあなたの第二の条件で$row->status ==

+0

よかった、ありがとう! –

関連する問題