Codeigniter Count / If - PullRequest
       1

Codeigniter Count / If

1 голос
/ 05 октября 2010

это занимает слишком много времени, чтобы понять.Я использую Codeigniter для запроса базы данных.Модель делает это

 function currentfunction($id)
{ 
    $query = $this->db->get_where('mytable', array("id =" => $id));

    if($query->num_rows() > 0){
        return $query->result_array();
    }else {
        return false;
    }
}

Контроллер

$this->load->model('Display');
$results = $this->Display->currentfunction($id);
$this->load->view('current_items', array('currentitems' => $results));

Представление

foreach($currentitems as $row){
              echo $row['name']
              ///....do more
              }

работает нормально, ЗА ИСКЛЮЧЕНИЕМ, если строки не возвращаются

затем

Message: Invalid argument supplied for foreach()...

Как мне справиться со сценарием if ... else ...

Я пробовал этот QA , но у меня не работает.PlsHlp.

Ответы [ 3 ]

0 голосов
/ 05 октября 2010

Это потому, что когда вы запускаете код:

$query = $this->db->get_where('mytable', array("id =" => $id));

    if($query->num_rows() > 0){
        return $query->result_array();
    }else {
        return false;
    }

когда нет возвращаемых строк, приведенный выше код работает нормально, он просто не работает в представлении, где вы пытаетесь запустить цикл for. Этот цикл for не должен выполняться, если не возвращены строки. тем не менее вы пытаетесь запустить forloop, даже если нет строк для работы.

Мое предложение - изменить код следующим образом:

$ query = $ this-> db-> get_where ('mytable', array ("id =" => $ id));

if($query->num_rows() > 0){
    return $query->result_array();
}else {
    $noResults = true;
}

в представлении у вас будет что-то подобное перед циклом for:

if($noResults != true){
     foreach($currentitems as $row){
        echo $row['name']
        ///....do more
     } 
}
else{
     //do something 
     echo "No items in database!";

}

Надеюсь, это поможет.

PK

0 голосов
/ 05 октября 2010

Почему бы вам просто не сделать это:

function currentfunction($id)
{ 
    return $this->db->get_where('mytable', array("id =" => $id));
}

В представлении, если нет результатов, будет возвращен пустой массив и foreach не выдаст ошибку:

foreach($currentitems->result_array() as $row)
{
    echo $row['name']
    ///....do more
}

Гораздо чище ИМО.

Если вы хотите показать сообщение об ошибке в своем представлении, вы можете сделать:

if($currentitems->num_rows() > 0)
{
    foreach($currentitems->result_array() as $row)
    {
        echo $row['name']
        ///....do more
    }
}
else
{
    // Error message
}

Это лучше, чем проверка, если естьрезультаты с if / else double , как предлагают халфдан и Паван.

0 голосов
/ 05 октября 2010

Просто сделай:

if(is_array($currentitems)) {
    foreach($currentitems as $row){
              echo $row['name']
              ///....do more
    }
}
else
{
    echo "No items in database!";
}

Вы получаете сообщение об ошибке, поскольку foreach ожидает, что его первый аргумент будет массивом. Если в базе данных нет элементов, ваши функции возвращают false.

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