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
Форумы портала PHP.SU :: Версия для печати :: Вывод количества всех сообщений
Форумы портала PHP.SU » » Вопросы новичков » Вывод количества всех сообщений

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

1. teddy - 08 Мая, 2013 - 13:46:09 - перейти к сообщению
Здравствуйте. Не пойму почему выводится не кол-во записей, а выводится кол-во полей в БД? таблица выглядит так - 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 и по тому, что в переменную, которая содержит ошибку мы не попадаем... где я накосячил? )
2. DelphinPRO - 08 Мая, 2013 - 13:51:09 - перейти к сообщению
getAll возвращает один ряд результата запроса. В этом ряду 4 поля (name,email,msg,ip) вот и показывает 4
3. EuGen - 08 Мая, 2013 - 13:51:37 - перейти к сообщению
Почитайте, что делает 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;
4. DelphinPRO - 08 Мая, 2013 - 13:52:59 - перейти к сообщению
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
5. teddy - 08 Мая, 2013 - 14:11:03 - перейти к сообщению
EuGen
Спасибо за подробное разъяснение, думаю на будущее пригодится, что бы не выбирать лишнее(как я описал ниже, но в данном случае это актуально) а только кол-во сообщений Улыбка

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

Данные нужны все, потому что буду выводить ещё от кого пришло сообщение, с какого айп и т .д т.к это админ-панель, спасибо, ваш вариант именно то, что мне и нужно было, все работает )

 

Powered by ExBB FM 1.0 RC1