Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: AVATAR
 
 автор: uvajs   (20.07.2010 в 20:13)   письмо автору
 
 

Здравствуйте! такой вопрос: есть комментарий на сайте и мне нужно вытащить аватар автора есть пользователь, его аватар и текст комментарий, и все нормально выводится кроме аватра...
подскажите пожалуйста, как вывести соответствующий аватар

вот код странички:



echo "<p class='post_comment'>Комментарии:</p>";    

$result3 = mysql_query ("SELECT * FROM comments WHERE post='$id' ORDER BY id DESC",$db);
if (mysql_num_rows($result3) > 0)
{
$myrow3 = mysql_fetch_array($result3);

do 
{
$result4 = mysql_query("SELECT avatar,id FROM users WHERE login='$author'",$db); //извлекаем аватар автора
$myrow4 = mysql_fetch_array($result4);

if (!empty($myrow4['avatar'])) {//если такового нет, то выводим стандартный(может этого пользователя уже давно удалили)
$avatar = $myrow4['avatar'];
}
else {$avatar = "avatars/net-avatara.jpg";}

  printf("<div class='content_comm'><table>
         <tr>
         <td width='113' rowspan='2' ><img  class='avatar_comm2' alt='аватар' src='%s' style='margin-left:12px;'></a></td>
         <td  class='comment_content'><p class='post_comment_add'>Автор: %s <span class='aut_comm'>(%s)</span></td>
         </tr>
         <tr>
         <td class='comment_content2'><p>%s</p></td>
         </tr>
         </table></div><br>",$avatar, $myrow3["author"], $myrow3["date"], $myrow3["text"]);
        
}
while ($myrow3 = mysql_fetch_array($result3));


}

  Ответить  
 
 автор: Slo_Nik   (20.07.2010 в 20:55)   письмо автору
 
   для: uvajs   (20.07.2010 в 20:13)
 

в начале скрипта установите уровень ошибок error_reporting(E_ALL);
уберите цикл do{....]while() и используйте просто while()
В закрыли тег </a>, а где Вы его открыли?

  Ответить  
 
 автор: uvajs   (21.07.2010 в 13:30)   письмо автору
 
   для: Slo_Nik   (20.07.2010 в 20:55)
 

Подправьте под пожалуйста, я не так силен в php

  Ответить  
 
 автор: mihdan   (21.07.2010 в 14:00)   письмо автору
 
   для: uvajs   (21.07.2010 в 13:30)
 

Зачем тогда вам делать то, что вы не понимаете?

  Ответить  
 
 автор: uvajs   (21.07.2010 в 14:03)   письмо автору
 
   для: mihdan   (21.07.2010 в 14:00)
 

ну я посмотрю, и постараюсь разобраться

  Ответить  
 
 автор: psychomc   (21.07.2010 в 17:25)   письмо автору
 
   для: uvajs   (20.07.2010 в 20:13)
 

кто хоть первоисточник?

  Ответить  
 
 автор: uvajs   (21.07.2010 в 17:30)   письмо автору
 
   для: psychomc   (21.07.2010 в 17:25)
 

я

  Ответить  
 
 автор: Гавриленко Дмитрий   (21.07.2010 в 18:26)   письмо автору
 
   для: uvajs   (21.07.2010 в 17:30)
 

И в чем проблема? Код в норме, что не так? Именно аватар не выводит? А выводит net-avatar?

  Ответить  
 
 автор: uvajs   (21.07.2010 в 20:26)   письмо автору
 
   для: Гавриленко Дмитрий   (21.07.2010 в 18:26)
 

выводится стандартный аватар, хотя пользователь имеет свой... в чем может быть причина?

  Ответить  
 
 автор: Гавриленко Дмитрий   (22.07.2010 в 15:24)   письмо автору
 
   для: uvajs   (21.07.2010 в 20:26)
 

>выводится стандартный аватар, хотя пользователь имеет свой... в чем может быть причина?

Ну значит в базе аватара нет... Проверь еще раз

  Ответить  
 
 автор: uvajs   (22.07.2010 в 16:12)   письмо автору
 
   для: Гавриленко Дмитрий   (22.07.2010 в 15:24)
 

>Ну значит в базе аватара нет... Проверь еще раз

Аватар в базе есть

  Ответить  
 
 автор: Лена   (22.07.2010 в 17:17)   письмо автору
 
   для: uvajs   (22.07.2010 в 16:12)
 

В базе прописан путь к этому аватару?
Т.е. $myrow4['avatar'] должно быть = "avatars/название аватара"

После этой строки $avatar = $myrow4['avatar'];
сделайте print $avatar; - само значение выводится?
Прежде всего вам нужно локализовать проблему, т.е. найти место в скрипте, где теряется значение аватара.

И в папке avatars есть файл аватара? И проверьте, какие стоят права на папку.

  Ответить  
 
 автор: uvajs   (22.07.2010 в 17:35)   письмо автору
 
   для: Лена   (22.07.2010 в 17:17)
 

>В базе прописан путь к этому аватару?
>Т.е. $myrow4['avatar'] должно быть = "avatars/название аватара"
>
>После этой строки $avatar = $myrow4['avatar'];
>сделайте print $avatar; - само значение выводится?
>Прежде всего вам нужно локализовать проблему, т.е. найти место в скрипте, где теряется значение аватара.
>
>И в папке avatars есть файл аватара? И проверьте, какие стоят права на папку.

Да, имеется в базе такой путь (avatars/1279445029.jpg), print $avatar; выводит такой путь avatars/net-avatara.jpg а в таком варианте выводится стандартный аватар <img src="$avatar" width="80" height="80">. в папке avatars есть 2 аватра, один стандартный 2 аватар пользователя.

  Ответить  
 
 автор: psychomc   (22.07.2010 в 17:43)   письмо автору
 
   для: uvajs   (22.07.2010 в 17:35)
 

"avatars/1279445029.jpg"

а зачем в базе хранить лишние данные?

  Ответить  
 
 автор: uvajs   (22.07.2010 в 17:51)   письмо автору
 
   для: psychomc   (22.07.2010 в 17:43)
 

>а зачем в базе хранить лишние данные?
почему лишние?

  Ответить  
 
 автор: Slo_Nik   (22.07.2010 в 18:24)   письмо автору
 
   для: uvajs   (22.07.2010 в 17:51)
 

имя директории зачем хранить? просто имя файла и всё.
Вы выставили уровень ошибок? сделайте проверку наличия файла функцией file_exists()

  Ответить  
 
 автор: uvajs   (22.07.2010 в 22:10)   письмо автору
 
   для: Slo_Nik   (22.07.2010 в 18:24)
 

>имя директории зачем хранить? просто имя файла и всё.
>Вы выставили уровень ошибок? сделайте проверку наличия файла функцией file_exists()

Какая разница, вы хотите сказать, что аватар не выводится из-за этого?

  Ответить  
 
 автор: neadekvat   (22.07.2010 в 23:02)   письмо автору
 
   для: uvajs   (22.07.2010 в 22:10)
 

А если вы решите сменить директорию? А если вы решите как-то обработать файлы или еще что-нибудь?
Вообще, вам стоит почитать литературу про проектирование баз данных.

  Ответить  
 
 автор: Лена   (22.07.2010 в 22:15)   письмо автору
 
   для: uvajs   (22.07.2010 в 17:35)
 

>Да, имеется в базе такой путь (avatars/1279445029.jpg), print $avatar; выводит такой путь avatars/net-avatara.jpg а в таком варианте выводится стандартный аватар <img src="$avatar" width="80" height="80">. в папке avatars есть 2 аватра, один стандартный 2 аватар пользователя.

Не может такого быть. Что-то вы не то тут пишете...
Если в базе лежит avatars/1279445029.jpg и вы делаете запрос к базе, который вытягивает этот аватар, ничего кроме этого аватара вытянуться не может(если, конечно, правильно составлен запрос).
А у вас, вы пишете, выводится avatars/net-avatara.jpg, которого в базе нет.
Приведите, пожалуйста, структуру и содержание таблицы, откуда вы тянете аватар.

И вместо вот этого:
$result4 = mysql_query("SELECT avatar,id FROM users WHERE login='$author'",$db);

Пропишите это:
$r = "SELECT avatar,id FROM users WHERE login='$author'";
print $r;
$result4 = mysql_query($r);

Что на экране?

  Ответить  
 
 автор: neadekvat   (22.07.2010 в 23:01)   письмо автору
 
   для: Лена   (22.07.2010 в 22:15)
 

> print $r;
Только с третьего раза правильно прочитал.
Нельзя же так переменные называть :)

  Ответить  
 
 автор: Лена   (23.07.2010 в 00:03)   письмо автору
 
   для: neadekvat   (22.07.2010 в 23:01)
 

почему нельзя? :)) я когда маленькие куски тестирую, у меня вообще везде $a,$b и $c :)

  Ответить  
 
 автор: neadekvat   (23.07.2010 в 00:17)   письмо автору
 
   для: Лена   (23.07.2010 в 00:03)
 

Конкретно print $r читается как print_r, ну, по крайней у меня так))

  Ответить  
 
 автор: uvajs   (22.07.2010 в 23:11)   письмо автору
 
   для: Лена   (22.07.2010 в 22:15)
 

>Что на экране?
выводится
SELECT avatar,id FROM users WHERE login=''


Дамп базы:


-- 
-- Структура таблицы `users`
-- 

CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `login` varchar(15) NOT NULL default '',
  `password` varchar(255) NOT NULL default '',
  `avatar` varchar(255) NOT NULL default '',
  `email` varchar(255) NOT NULL default '',
  `activation` int(1) NOT NULL default '0',
  `date` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=57 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=57 ;

-- 
-- Дамп данных таблицы `users`
-- 

INSERT INTO `users` VALUES (56, 'engelz', '40849a9959d13130776bbc1c4df60569b3p 6f', 'avatars/1279445029.jpg', 'web--master@bk.ru', 1, '2010-07-18 13:23:10');
INSERT INTO `users` VALUES (55, 'admin', '40849a9959d13130776bbc1c4df60569b3p 6f', 'avatars/1279442044.jpg', 'web--master@bk.ru', 1, '2010-07-17 23:42:00');
 


и код для вывода комм.


echo "<p class='post_comment'>Комментарии:</p>";    

$result3 = mysql_query ("SELECT * FROM comments WHERE post='$id' ORDER BY id DESC",$db);
if (mysql_num_rows($result3) > 0)
{
$myrow3 = mysql_fetch_array($result3);

do 
{
$result4 = mysql_query("SELECT avatar,id FROM users WHERE login='$author'",$db); //извлекаем аватар автора
$myrow4 = mysql_fetch_array($result4);

if (!empty($myrow4['avatar'])) {//если такового нет, то выводим стандартный(может этого пользователя уже давно удалили)
$avatar = $myrow4['avatar'];
}
else {$avatar = "avatars/net-avatara.jpg";}

  printf("<div class='content_comm'><table>
         <tr>
         <td width='113' rowspan='2' ><img  class='avatar_comm' alt='аватар' src='%s' style='margin-left:12px;'></td>
         <td  class='comment_content'><p class='post_comment_add'>Автор: <strong>%s</strong> &nbsp;<span class='aut_comm'>(%s)</span></td>
         </tr>
         <tr>
         <td class='comment_content2'><p>%s</p></td>
         </tr>
         </table></div><br>",$avatar, $myrow3["author"], $myrow3["date"], $myrow3["text"]);
        
}
while ($myrow3 = mysql_fetch_array($result3));

  Ответить  
 
 автор: neadekvat   (22.07.2010 в 23:14)   письмо автору
 
   для: uvajs   (22.07.2010 в 23:11)
 

SELECT avatar,id FROM users WHERE login=''
И что, вас не смущает, какой логиин запрашивается из базы?
Вы точно поставили уровень ошибок в E_ALL?

  Ответить  
 
 автор: Лена   (23.07.2010 в 00:06)   письмо автору
 
   для: uvajs   (22.07.2010 в 23:11)
 

Переменная $author не определена.
Где у вас в скрипте $author ='uvajs'; - или вместо uvajs друой логин? У вас по идее должно быть:
$author ='engelz'; или
$author ='admin';

  Ответить  
 
 автор: Slo_Nik   (23.07.2010 в 00:29)   письмо автору
 
   для: uvajs   (22.07.2010 в 23:11)
 

теперь расскажите как Вы получаете переменную $author ?

если Вы выставили уровень ошибок, то я думаю Вам должно быть выдано предупреждение, что переменная $author не определена...

  Ответить  
 
 автор: uvajs   (23.07.2010 в 00:44)   письмо автору
 
   для: Slo_Nik   (23.07.2010 в 00:29)
 

>теперь расскажите как Вы получаете переменную $author ?
а где ее определить?

  Ответить  
 
 автор: neadekvat   (23.07.2010 в 00:49)   письмо автору
 
   для: uvajs   (23.07.2010 в 00:44)
 

Странный вопрос. Вы же подставляете ее в запрос. Как вы можете задавать этот встречный вопрос?

  Ответить  
 
 автор: uvajs   (23.07.2010 в 01:34)   письмо автору
 
   для: neadekvat   (23.07.2010 в 00:49)
 

>Странный вопрос. Вы же подставляете ее в запрос. Как вы можете задавать этот встречный вопрос?

я взял этот кусок кода из другого файла, но там он работает

вот отсюда


$author = $messages['author'];
$result4 = mysql_query("SELECT avatar,id FROM users WHERE login='$author'",$db); //извлекаем аватар автора
$myrow4 = mysql_fetch_array($result4);

if (!empty($myrow4['avatar'])) {//если такового нет, то выводим стандартный(может этого пользователя уже давно удалили)
$avatar = $myrow4['avatar'];
}
else {$avatar = "avatars/net-avatara.jpg";}

  printf("
  <table>
  <tr>
  <td><a href='page.php?id=%s'><img alt='аватар' src='%s'></a></td>
  
  <td>Автор: <a href='page.php?id=%s'>%s</a><br>
      Дата: %s<br>
      Сообщение:<br>
     %s<br>
     <a href='drop_post.php?id=%s'>Удалить</a>
  
  </td>  
  </tr>
  </table><br>
  ",$myrow4['id'],$avatar,$myrow4['id'],$author,$messages['date'],$messages['text'],$messages['id']);
  //выводим само сообщение
  }
  while($messages = mysql_fetch_array($tmp));

  Ответить  
 
 автор: Slo_Nik   (23.07.2010 в 01:42)   письмо автору
 
   для: uvajs   (23.07.2010 в 01:34)
 

и будет работать, ведь искомая переменная определена перед запросом, а у Вас она откуда берётся?!

Подставте в запрос не переменную $author , а имя которое у Вас в базе хранится 'engelz' и посмотрите, что будет, появится аватар или нет?

  Ответить  
 
 автор: uvajs   (23.07.2010 в 01:55)   письмо автору
 
   для: Slo_Nik   (23.07.2010 в 01:42)
 

>и будет работать, ведь искомая переменная определена перед запросом, а у Вас она откуда берётся?!
я вытаскиваю ее из таблицы comments $myrow3["author"] > правда, мне самому кажется это странно...подскажите как правильно сделать?

  Ответить  
 
 автор: Slo_Nik   (23.07.2010 в 02:04)   письмо автору
 
   для: uvajs   (23.07.2010 в 01:55)
 

>я вытаскиваю ее из таблицы comments $myrow3["author"] > правда, мне самому кажется это странно...подскажите как

А посмотреть на тот код, окуда выдрали кусок и немного подумать?

если Вы вывели запрос в окно браузера и Вам показало, что ".... WHERE `login` =' ' ..." , значит переменная $author пустая , а если так, то как в запросе будет выполнено условие выборки из базы?

  Ответить  
 
 автор: uvajs   (23.07.2010 в 01:59)   письмо автору
 
   для: Slo_Nik   (23.07.2010 в 01:42)
 

>Подставте в запрос не переменную $author , а имя которое у Вас в базе хранится 'engelz' и посмотрите, что будет, появится аватар или нет?

выводится аватар, правда по всем комм. один аватар...

  Ответить  
 
 автор: Slo_Nik   (23.07.2010 в 02:05)   письмо автору
 
   для: uvajs   (23.07.2010 в 01:59)
 

ну всё правильно. и будет один и тот же выводится, так как имя используете одно и то же

  Ответить  
 
 автор: uvajs   (23.07.2010 в 02:06)   письмо автору
 
   для: Slo_Nik   (23.07.2010 в 02:05)
 

>ну всё правильно. и будет один и тот же выводится, так как имя используете одно и то же

нет, у меня 2 пользователя admin и engelz и по всем комм. выводится аватар engelz
$result4 = mysql_query("SELECT avatar,id FROM users WHERE login='engelz'",$db);

  Ответить  
 
 автор: Slo_Nik   (23.07.2010 в 02:09)   письмо автору
 
   для: uvajs   (23.07.2010 в 02:06)
 

да хоть 22 пользователя в базе!
Используете Вы только один логин, поэтому выводится аватар будет тот, который принадлежит этому логину...

  Ответить  
 
 автор: uvajs   (23.07.2010 в 02:09)   письмо автору
 
   для: Slo_Nik   (23.07.2010 в 02:05)
 

>ну всё правильно. и будет один и тот же выводится, так как имя используете одно и то же

а как выводить соответствующий аватар пользователя?

  Ответить  
 
 автор: Slo_Nik   (23.07.2010 в 02:12)   письмо автору
 
   для: uvajs   (23.07.2010 в 02:09)
 

инициализировать переменную $author , присвоить переменной соответствующее значение и всё...

  Ответить  
 
 автор: uvajs   (23.07.2010 в 02:22)   письмо автору
 
   для: Slo_Nik   (23.07.2010 в 02:12)
 

>инициализировать переменную $author , присвоить переменной соответствующее значение и всё...

присвоил перемен. $author = $result3['author']; все равно нет результата. пожалуйста подправьте код

  Ответить  
 
 автор: uvajs   (23.07.2010 в 02:45)   письмо автору
 
   для: uvajs   (23.07.2010 в 02:22)
 

Все заработало!!!! Спасибо всем кто помог!!!!

  Ответить  
 
 автор: Slo_Nik   (23.07.2010 в 01:18)   письмо автору
 
   для: uvajs   (23.07.2010 в 00:44)
 

Так раскройте тайну появления переменной $author !!!
Откуда Вы её берёте?
Вам предупреждение было выдано о том, что переменная не определена?

  Ответить  
 
 автор: psychomc   (23.07.2010 в 14:42)   письмо автору
 
   для: Slo_Nik   (23.07.2010 в 01:18)
 

сразу видно что первоисточник сам автор, как он и писал...

  Ответить  
 
 автор: Slo_Nik   (23.07.2010 в 15:11)   письмо автору
 
   для: psychomc   (23.07.2010 в 14:42)
 

Да нет, первоисточник не известен, сам автор написал, что скопировал участок кода и перенёс в свой файл.
И автор не вникнув как работает у источника, сразу кинулся переделывать код под себя...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования