Вход в Tutis: Foreach не работает

Я начал использовать скрипт Tutis для входа. Я внес некоторые изменения, но следующее дает мне ошибки:

Я хочу перечислить всех зарегистрированных пользователей, но цикл по каждому элементу не работает.

Я создал новую функцию в member.class.php:

// Registered Users
public function rusers() 
{
    global $database;

    $notice = new notice;
    $users = $database->query('SELECT id, username, date FROM users');

    $return_form = 1;

    $user = "<table>"
          . "<tr>"
          . "<td>ID</td>"
          . "<td>UserName</td>"
          . "<td>Date</td>"
          . "</tr>";

    // Function in the database.class.php
    $result = $database->foreachloop($users); 

    foreach ($result as $row)
    {
        $user.= "<tr><td>".$row['id']."</td>";
        $user.= "<td>".$row['username']."</td><td>".$row['date']."</td></tr>";
    }
    $user.= "</table>"; 

    /* Combine Data */
    $data = "";

    /* Do we need the login form? */
    if ($return_form == 1) 
    {
        $data .= $user;
    }

    /* Return data */
    return $notice->report() . $data;
}

И добавил функцию foreachloop() в файл database.class.php.

public function foreachloop($result)
{
    return $this->statement->fetch(PDO::FETCH_ASSOC);
}

Но я получаю следующую длинную ошибку:

*Warning: Illegal string offset 'id' in C:\wamp\www\loginoop3\assets\member.class.php on line 996
Warning: Illegal string offset 'username' in C:\wamp\www\loginoop3\assets\member.class.php on line 997
Warning: Illegal string offset 'date' in C:\wamp\www\loginoop3\assets\member.class.php on line 997
Warning: Illegal string offset 'id' in C:\wamp\www\loginoop3\assets\member.class.php on line 996
Warning: Illegal string offset 'username' in C:\wamp\www\loginoop3\assets\member.class.php on line 997
Warning: Illegal string offset 'date' in C:\wamp\www\loginoop3\assets\member.class.php on line 997*

И вывод:

*ID UserName Date
t   t        t
2   2        2*

Здесь цифра 2 означает идентификатор пользователя, а буква «t» - это «тестовое» имя пользователя, но показывает только первую букву... И показывает только одного пользователя, но есть и другие пользователи.

Я не знаю, что случилось. Есть ли у кого-нибудь предложение?

Этот логин использует OOP PDO. И я попытался внести эти изменения с помощью rowCount(), поскольку в файле database.class.php появилась новая функция со следующим содержимым:

public function affected($result)
{
    return $this->statement->rowCount();
} 

person Gery    schedule 23.10.2012    source источник
comment
выгрузить результат и посмотреть, что вы получите обратно. это говорит о том, что эти индексы не существуют в массиве.   -  person Willem Ellis    schedule 23.10.2012
comment
var_dump ($ результат); ВЫВОД: массив (размер = 3) 'id' => int 2 'username' => строка 'test' (длина = 5) 'date' => строка '2012-10-10' (длина = 10)   -  person Gery    schedule 23.10.2012


Ответы (2)


Таким образом, результат не является массивом массивов, это всего лишь один уровень глубины. Вот почему это не работает:

foreach ($result as $row)
{
    $user.= "<tr><td>".$row['id']."</td>";
    $user.= "<td>".$row['username']."</td><td>".$row['date']."</td></tr>";
}

$result['username'] будет работать нормально. Вам не нужен foreach. Имеет ли это смысл?

person Willem Ellis    schedule 23.10.2012
comment
Но $result['username'] выводит только одно имя пользователя, но я хочу распечатать имя ВСЕХ зарегистрированных пользователей, поэтому мне нужен цикл - person Gery; 23.10.2012
comment
если я перейду к этому: public function foreachloop($result){ return array($this-›statement-›fetch(PDO::FETCH_ASSOC)); } (добавить массив() ), чем я тоже получаю только одну строку, но она распечатывает ОК, тест имени пользователя - person Gery; 23.10.2012
comment
Почему это только один уровень глубины? Как получить все данные? - person Gery; 24.10.2012
comment
Привет, @Gery, тебе удалось найти решение? У меня аналогичный вопрос - не могли бы вы поделиться, если бы вы решили это? - person user961627; 28.11.2012

пользователю 961627 (оригинальная функция от создателя tutis login):

Функция в member.class.php:

/**
 * list_users
 *
 * Returns a list of users that are registerd
 */
public function list_users() {
    global $database;

    $users = $database->query('SELECT id, username, date FROM users', null, "fetchAll");

    $data = "<table>
<tr>
    <td>ID</td>
    <td>Username</td>
    <td>Registered</td>
</tr>";

    foreach ($users as $row) {
        $data.= "<tr><td>".$row['id']."</td>";
        $data.= "<td>".$row['username']."</td><td>".$row['date']."</td></tr>";
    }

    $data.= "</table>"; 

    /* Return data */
    return $data;
}

Вызовите его, используя:

echo $member->list_users();
person Gery    schedule 03.12.2012