1

Тема: Сторінка відгуків! Fatal error: Call to a member function query()

Доброго дня всім форумчанам! Є сторінка відгуків на моєму сайті! Але в файлі shout.php  сталася помилка
Fatal error: Call to a member function query() on a non-object in Z:\home\localhost\345\shout.php on line 50
Ось код цього файлу

<?php
/*** mysql hostname ***/
$hostname = 'localhost';

/*** mysql username ***/
$username = 'root';

/*** mysql password ***/
$password = '';

$dbname = 'yes';

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);

if($_POST['name']) {
    $name       = $_POST['name'];
    $message    = $_POST['message'];
    /*** set all errors to execptions ***/
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $sql = "INSERT INTO shoutbox (date_time, name, message)
            VALUES (NOW(), :name, :message)";
    /*** prepare the statement ***/
    $stmt = $dbh->prepare($sql);

    /*** bind the params ***/
    $stmt->bindParam(':name', $name, PDO::PARAM_STR);
    $stmt->bindParam(':message', $message, PDO::PARAM_STR);

    /*** run the sql statement ***/
    if ($stmt->execute()) {
        populate_shoutbox();
    }
} 
}
catch(PDOException $e) {
    echo $e->getMessage();
}

if($_POST['refresh']) {
    populate_shoutbox();
}


function populate_shoutbox() {
    global $dbh;
    $sql = "select * from shoutbox order by date_time desc limit 10";
    echo '<ul>';
    foreach ($dbh->query($sql) as $row) {
        echo '<li>';
        echo '<span class="date">'.date("d.m.Y H:i", strtotime($row['date_time'])).'</span>';
        echo '<span class="name">'.$row['name'].'</span>';
        echo '<span class="message">'.$row['message'].'</span>';
        echo '</li>';
    }
    echo '</ul>';
}
?>

Здається там все правельно... але всеж помилка виникає!

Re: Сторінка відгуків! Fatal error: Call to a member function query()

Помилка виникає тому, що у функції populate_shoutbox не видно $dbh.

Подякували: Faraon, koala2

3 Востаннє редагувалося koala (03.06.2013 15:33:36)

Re: Сторінка відгуків! Fatal error: Call to a member function query()

Faraon написав:

Здається там все правельно...

1. Що вам здається - ваші особисті проблеми. Тим більше, що навіть слово "правильно" ви пишете неправильно.
2. Вам система прямо каже: ви викликаєте функцію query в чогось, що не є об'єктом. В рядку 50 є такий виклик:
foreach ($dbh->query($sql) as $row) {
Так от, що таке $dbh в тому рядку? Трьома рядками вище заявлено:
global $dbh;
Добре, це глобальна змінна. А тепер вкажіть мені, де саме ця глобальна змінна створюється в вашому файлі?

Подякували: Faraon1

4

Re: Сторінка відгуків! Fatal error: Call to a member function query()

Цей шматок по логіці неправильний зовсім:

    echo '<ul>';
    foreach ($dbh->query($sql) as $row) {
        echo '<li>';
        echo '<span class="date">'.date("d.m.Y H:i", strtotime($row['date_time'])).'</span>';
        echo '<span class="name">'.$row['name'].'</span>';
        echo '<span class="message">'.$row['message'].'</span>';
        echo '</li>';
    }
    echo '</ul>';

Треба так:

$query = $dbh->query($sql);
while ($row = $query->fetch_object()) {
 // ../
}
Подякували: Faraon, koala3

5

Re: Сторінка відгуків! Fatal error: Call to a member function query()

Здається там все правельно... але всеж помилка виникає!

Як любить казати моя дружина:
Ключове слово "Здається"
:D:D:D

Подякували: koala, miroslav.chandler2

6

Re: Сторінка відгуків! Fatal error: Call to a member function query()

Faraon написав:

Z:\home\localhost\345\shout.php

Котеров, нє? ;)

7

Re: Сторінка відгуків! Fatal error: Call to a member function query()

Bartash написав:
Faraon написав:

Z:\home\localhost\345\shout.php

Котеров, нє? ;)

??? Не розумію про що Ви кажете.

8

Re: Сторінка відгуків! Fatal error: Call to a member function query()

Якийсь автор різних текстів, здається.

9

Re: Сторінка відгуків! Fatal error: Call to a member function query()

Invader написав:

Якийсь автор різних текстів, здається.

Навіть не якийсь, а цілком конкретний автор конкретної книги. :)

Faraon написав:

??? Не розумію про що Ви кажете.

У книзі Котерова була така штука - створення віртуального диску під віндою та розміщення там усіх необхідних інструментів. І якраз називався він Z.

10

Re: Сторінка відгуків! Fatal error: Call to a member function query()

@Bartash
Всі москалі люблять команду вінди subst, бо команду mount для посікс-лайк систем їм не дано використовувати.

11

Re: Сторінка відгуків! Fatal error: Call to a member function query()

Очі.завидющі написав:

@Bartash
Всі москалі люблять команду вінди subst, бо команду mount для посікс-лайк систем їм не дано використовувати.

Другий співавтор книги, О. Костарев, пропагандист Лінукса у краю ведмедів.
Та й звідки у вінді взятися mount'у? Хіба що під яким-небудь MSYS'ом. ;)

12

Re: Сторінка відгуків! Fatal error: Call to a member function query()

Bartash написав:
Invader написав:

Якийсь автор різних текстів, здається.

Навіть не якийсь, а цілком конкретний автор конкретної книги. :)

Faraon написав:

??? Не розумію про що Ви кажете.

У книзі Котерова була така штука - створення віртуального диску під віндою та розміщення там усіх необхідних інструментів. І якраз називався він Z.

А... зрозуміло! Ні не Котеров)

13

Re: Сторінка відгуків! Fatal error: Call to a member function query()

У книзі Котерова була така штука - створення віртуального диску під віндою та розміщення там усіх необхідних інструментів. І якраз називався він Z.

Oupen Server теж так робить)

14

Re: Сторінка відгуків! Fatal error: Call to a member function query()

Другий співавтор книги, О. Костарев, пропагандист Лінукса у краю ведмедів.
Та й звідки у вінді взятися mount'у? Хіба що під яким-небудь MSYS'ом. ;)

Я кажу про те саме ;)
Коли я читав книгу про 3д-макс 10 років тому, то там також субст використовували. Насправді NTFS досить потужна файлова система, але москалям не дано вивчити додаткові файлові потоки та символьні/жорсткі посилання. Для них це ще новина - можливості 12 річної давнини для декстопів (Він ХР)!

15

Re: Сторінка відгуків! Fatal error: Call to a member function query()

Очі.завидющі написав:

Коли я читав книгу про 3д-макс 10 років тому, то там також субст використовували. Насправді NTFS досить потужна файлова система, але москалям не дано вивчити додаткові файлові потоки та символьні/жорсткі посилання. Для них це ще новина - можливості 12 річної давнини для декстопів (Він ХР)!

Між іншим, subst має трохи граблів щодо прав юзера. Пам'ятаю, ставив апач на одній хрюшці, де права юзерів хитро задавалися доменними політиками., згідно псалмів Котерова. Не помогло навіть те, що я був локальним адміном у себе на машині: половина важливих файлів (на кшалт httpd.conf) просто не поставилися. 0_о

16

Re: Сторінка відгуків! Fatal error: Call to a member function query()

Права юзера у вінді це сміх і гріх. Я раніше бавився у комп'ютерних клубах, коли все що треба зробив, а час ще залишався, отримуючи доступ до дисків з системними файлами. Щоб потрапити на "прихований" для звичайного користувача розділ треба в баузері використати префікс file://

Подякували: Chemist-i1

Re: Сторінка відгуків! Fatal error: Call to a member function query()

Очі.завидющі написав:

Щоб потрапити на "прихований" для звичайного користувача розділ треба в баузері використати префікс file://

Або зробити так: http://youtu.be/WRSfCi7qKqM :D