Codeigniter неправильно обрабатывает цикл foreach - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть около 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 ]

3 голосов
/ 10 февраля 2012

Вы повторяете JSON в каждой итерации цикла. Это сделает что-то вроде этого:

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

Это не допустимый JSON.

Вам нужно построить массив, а затем echo json_encode() (только один раз) после цикла.

Также ваш elseif должен быть таким:

elseif ($row->status == "Fail" || $row->status == "Pending")
1 голос
/ 10 февраля 2012

Замените elseif ($row->status == "Fail" || "Pending") { на

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

Вы пропустили $row->status == во втором состоянии блока elseif

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...