Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP :: array: Работа с "Массивами"

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте
Тема пойдет про комментарии к новостям сайта
сегодня решил перенаписать 1 скрипт, и я увидел как можно сделать "красиво" и "просто"
 
Раньше у меня на странице новостей было так:
1. Подсчитываем кол. ком. к новосте. (в шапке)
2. После новостей мы выводим комментарии (новое соединение).
3. К каждому комментарию выводим иму и аватарку автора (ещё одно соединение).
 
и так через while
 
Но я решил сделать так:
1. Получаем ВСЕ комментарии и вносим их в массив, так-же суммируем 1 из массив. (в шапке)
2. После новости делаем for() и выводим всю информацию с массивов.
3. Получаем аватарку и имя пользователя (если ещё не получили) и записываем данные в массив.
 
Скажите, мой 2 (упрощенный вариант с массивами) будет более выгодней использоваться (в смысле меньше соединений и т.д.)
 
Когда я сделал такой код, у меня получилась ошибка  
 

Код:
Notice: Trying to get property of non-object in D:\***\news.php on line 128
Notice: Trying to get property of non-object in D:\***\news.php on line 129

 
сам код:
 
Шапка

Код:
$comments = 0;
array($array_comments);
 
$con = mysql_query("SELECT `i`, `d`, `a`, `t` FROM `comm` WHERE `s` = '$_GET[id]' ORDER BY `id`");
while($comm = mysql_fetch_object($con))
{
    $array_comments[$comments][0] = $comm->i;
    $array_comments[$comments][1] = $comm->d;
    $array_comments[$comments][2] = $comm->a;
    $array_comments[$comments][3] = $comm->t;
    $array_comments[$comments][4] = 0;
    $array_comments[$comments][5] = "";
    $array_comments[$comments][6] = "";
    $comments++;
}

 
При выводе

Код:
<?php
if($comments)
{
 
for($i = 0; $i < $comments; $i++)
{
    if($array_comments[$i][4] == 0)
    {
        $con = mysql_query("SELECT `l`, `a` FROM `user` WHERE `i` = '". $array_comments[$i][0] ."' LIMIT 1");
        $u = mysql_fetch_object($con);
        
        $array_comments[$i][4] = 1;
        $array_comments[$i][5] = $u->l;
        $array_comments[$i][6] = $u->a;

    }
 
    (тут мы выводим комментарий с HTML)
 }
 
}?>

f($array_comments[$i][4] == 0) - чтоб не дублировать запросы к mysql
т.е. мы проверяем по id если не было запроса делаем и записываем в массив
 
строки с ошибками я выделил

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 19:22 24-08-2013 | Исправлено: Sutar, 19:35 24-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
Trying to get property of non-object

говорит о том, что ссылка не является объектом.
например, если вернулся пустой ответ на запрос.
 

Цитата:
Скажите, мой 2 (упрощенный вариант с массивами) будет более выгодней использоваться (в смысле меньше соединений и т.д.)  

чем меньше, тем лучше. правда зависит от ситуации - если вся информация не "скушает" память целиком.
 


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:31 24-08-2013
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

Цитата:
говорит о том, что ссылка не является объектом.  
например, если вернулся пустой ответ на запрос.

сделал
 

Код:
print_r($array_comments);

 
есть пустые массивы.
как можно сделать чтоб если id пользователя который комментировал уже проверялся в Mysql то его снова не проверяло... а брало уже данные которые получил когда-то
 
ну например идет комментарии по номеру пользователей
 
1 2 1
 
выводим 1, и делаем коннект к бд, записываем имя и аватарку в массив
потом выводим комментарий пользователя 2 тоже коннектим к бд и вносим информацию в массив.
а потом выводим комментарий пользователя 1, но уже не коннектим к бд, а берём информацию с массивов

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 21:05 24-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
есть пустые массивы.  

при чем тут массивы? $u не является объектом.
 

Цитата:
уже проверялся в Mysql то его снова не проверяло... а брало уже данные которые получил когда-то  

создавать массив, где ключом первого уровня будет id пользователя.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:10 24-08-2013
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

Цитата:
создавать массив, где ключом первого уровня будет id пользователя.

не совсем понял как сзделать

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 21:20 24-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
не совсем понял как сзделать

$array['id_пользователя']
тогда любую информацию, относящуюся к пользователю, можно структурировать
$array['id_пользователя']['posts'] = array(1,2,3,4);
$array['id_пользователя']['avatar'] = 'image.jpg';
и так далее


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:27 24-08-2013
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
ага
я примерно понял
но ещё не дошло как это осуществить
 
но такая проблема в 3х массивах информация разная (там текст сообщения и дата публикации) как мне это обойти???

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 21:34 24-08-2013 | Исправлено: Sutar, 21:39 24-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
такая проблема в 3х массивах информация разная (там текст сообщения и дата публикации) как мне это обойти???

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

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:07 24-08-2013
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
если id не совпал, (т.е. мы ещё не получали логин с аватаркой) коннектим к бд и получаем
если есть, просто выводим
 

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 22:22 24-08-2013 | Исправлено: Sutar, 22:34 24-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
Я покажу вам бд  

не надо мне показывать.. я вам подсказал, а вы думайте как вам удобнее будет все реализовать.
 
в зависимости от ситуации и назначения массива - ключом может быть как id пользователя, так и id сообщения.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:27 24-08-2013
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
спасибо))
сделал))

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 22:34 24-08-2013 | Исправлено: Sutar, 22:38 24-08-2013
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP :: array: Работа с "Массивами"


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru