Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вывод количества всех сообщений

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
teddy
Отправлено: 08 Мая, 2013 - 13:46:09
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Здравствуйте. Не пойму почему выводится не кол-во записей, а выводится кол-во полей в БД? таблица выглядит так - name,email,msg,ip. Всегда показывает так - Всего сообщений: 4 независимо от того, добавлял ли я новое сообщение или нет. Цифра неизменна... Помогите кто может, Вот отрывок из кода:

PHP:
скопировать код в буфер обмена
  1. class MyGbook implements IGbook{
  2. //тут другие методы
  3.  
  4. //метод на выборку данных
  5. function getAll() {
  6.  
  7. $sql = mysql_query("SELECT name,email,msg,ip FROM msgss ORDER BY id DESC");
  8. $row = mysql_fetch_assoc($sql);
  9. return $row;
  10.  
  11. }
  12. $gbook = new MyGbook();
  13.  
  14. //Обработка полученных данных(файл отдельный).
  15. $result = $gbook->getAll();
  16. if(!is_array($result)){$error = "Произошла ошибка";}
  17. else{
  18. echo "Всего сообщений: ".count($result);
  19. }



Массив получаю, это видно по var_dump и по тому, что в переменную, которая содержит ошибку мы не попадаем... где я накосячил? )
 
 Top
DelphinPRO
Отправлено: 08 Мая, 2013 - 13:51:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




getAll возвращает один ряд результата запроса. В этом ряду 4 поля (name,email,msg,ip) вот и показывает 4


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
EuGen Администратор
Отправлено: 08 Мая, 2013 - 13:51:37
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Почитайте, что делает mysql_fetch_assoc - она ведь выдаёт строку результата. И почитайте, что делает count, которая считает число элементов массива.
Вы выбираете набор полей, потом выбираете первую строку, затем считаете число элементов. Логично, что это число будет равно числу полей в выбранной строке.
Для подсчёта желаемого количества используйте что-либо наподобие:
PHP:
скопировать код в буфер обмена
  1. $sql = mysql_query("SELECT COUNT(1) FROM msgss");
  2. $row = mysql_fetch_row($sql);
  3. return $row[0];

и, разумеется,
PHP:
скопировать код в буфер обмена
  1. echo "Всего сообщений: ".$result;


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DelphinPRO
Отправлено: 08 Мая, 2013 - 13:52:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. function getAll() {
  2.    $sql = mysql_query("SELECT name,email,msg,ip FROM msgss ORDER BY id DESC");
  3.  
  4.    $result = array();
  5.    while($row = mysql_fetch_assoc($sql)){
  6.       $result[] = $row;
  7.    }
  8.    
  9.    return $result;
  10. }


такой вариант возвращает все данные (если вы их собираетесь использовать)
Если нужно только количество (без вывода самих данных), то лучше SELECT COUNT() ... как показал EuGen

(Отредактировано автором: 08 Мая, 2013 - 13:55:31)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
teddy
Отправлено: 08 Мая, 2013 - 14:11:03
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




EuGen
Спасибо за подробное разъяснение, думаю на будущее пригодится, что бы не выбирать лишнее(как я описал ниже, но в данном случае это актуально) а только кол-во сообщений Улыбка

DelphinPRO пишет:
такой вариант возвращает все данные (если вы их собираетесь использовать)
Если нужно только количество (без вывода самих данных), то лучше SELECT COUNT() ... как показал EuGen

Данные нужны все, потому что буду выводить ещё от кого пришло сообщение, с какого айп и т .д т.к это админ-панель, спасибо, ваш вариант именно то, что мне и нужно было, все работает )
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB