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

Форум PHP

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

 

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

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

тема: Вывод данных из базы данных
 
 автор: zorg84   (10.08.2011 в 13:57)   письмо автору
 
 

Почему выводится аватар того кто зашел под своим логином на всех сообщениях если они были написаны другими пользователями. Как это исправить


<?php
// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
session_start();

require_once (
"../blocks/bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь 
if (isset($_GET['id'])) {$id =$_GET['id']; } //id "хозяина" странички
else
{ exit(
"Вы зашил на страницу без параметра!");} //если не указали id, то выдаем ошибку
if (!preg_match("|^[\d]+$|"$id)) {
exit(
"<p>Неверный формат запроса! Проверьте URL</p>");//если id не число, то выдаем ошибку
}

if (!empty(
$_SESSION['login']) and !empty($_SESSION['password']))
{
//если существует логин и пароль в сессиях, то проверяем, действительны ли они
$login $_SESSION['login'];
$password $_SESSION['password'];
$result2 mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db); 
$myrow2 mysql_fetch_array($result2); 
if (empty(
$myrow2['id']))
   {
   
//Если не действительны (может мы удалили этого пользователя из базы за плохое поведение)
    
exit("Вход на эту страницу разрешен только зарегистрированным пользователям!");
   }
}
else {
//Проверяем, зарегистрирован ли вошедший
exit("Вход на эту страницу разрешен только зарегистрированным пользователям!"); }
$result mysql_query("SELECT * FROM users WHERE id='$id'",$db); 
$myrow mysql_fetch_array($result);//Извлекаем все данные пользователя с данным id

if (empty($myrow['login'])) { exit("Пользователя не существует! Возможно он был удален.");} //если такого не существует

?>
<?php
//require_once ("../inc/categories.php"); 
?>
<?php 
require_once ("blocks/bd.php");
if (isset(
$_GET['cat'])) {$cat $_GET['cat']; }
if (!isset(
$cat)) {$cat 1;}
/* Проверяем, является ли переменная числом */
if (!preg_match("|^[\d]+$|"$cat)) {
exit (
"<p>Неверный формат запроса! Проверьте URL!");
}
$result mysql_query("SELECT * FROM categories WHERE id='$cat'",$db);
if (!
$result)
{
echo 
"<p>Запрос на выборку данных из базы не прошел. <br> <strong>Код ошибки:</strong></p>";
exit(
mysql_error());
}
if (
mysql_num_rows($result) > 0)
{
$myrow55 mysql_fetch_array($result); 
}
else
{
echo 
"<p>Информация по запросу не может быть извлечена в таблице нет записей.</p>";
exit();
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title><? echo $myrow["title"]; ?></title>
<meta name="description" content="<? echo $myrow["meta_d"]; ?>">
<meta name="keywords" content="<? echo $myrow["meta_k"]; ?>">
<![endif]-->
</head>

<h2>Пользователь "<?php echo $myrow['login']; ?>"</h2>


<?php
//print <<<HERE
//|<a href='page.php?id=$myrow[id]'>Моя страница</a>|<a href='index.php'>Главная страница</a>|<a href='all_users.php'>Список пользователей</a>|<a href='exit.php'>Выход</a><br><br>
//HERE;
//выше вывели меню

if ($myrow['login'] == $login) {
//Если страничка принадлежит вошедшему, то предлагаем изменить данные и выводим личные сообщения

print <<<HERE

<form action='update_user.php' method='post'>
Ваш логин <strong>
$myrow[login]</strong>. Изменить логин:<br>
<input name='login' type='text'>
<input type='submit' name='submit' value='изменить'>
</form>
<br>

<form action='update_user.php' method='post'>
Изменить пароль:<br>
<input name='password' type='password'>
<input type='submit' name='submit' value='изменить'>
</form>
<br>

<form action='update_user.php' method='post' enctype='multipart/form-data'>

Изображение должно быть формата jpg, gif или png. Изменить аватар:<br>
<input type="FILE" name="fupload">
<input type='submit' name='submit' value='изменить'><br>
Ваш аватар:<br>
<img alt='аватар' src='
$myrow[avatar]'>
</form>
<br>

<form action='post.php' method='post'>
<br>
<h2>Отправить Ваше сообщение:</h2>
<textarea cols='43' rows='4' name='text'></textarea><br>
<input type='hidden' name='poluchatel' value='
$myrow[login]'>
<input type='hidden' name='id' value='
$myrow[id]'>
<input type='submit' name='submit' value='Отправить'>
</form>    


<h1>сообщение</h1>

HERE;
// ORDER BY id DESC",$db);
$tmp mysql_query("SELECT * FROM messages WHERE poluchatel='$login'ORDER BY id DESC",$db); 
$messages mysql_fetch_array($tmp);//извлекаем сообщения пользователя, сортируем по идентификатору в обратном порядке, т.е. самые новые сообщения будут вверху

if (!empty($messages['id'])) {
do 
//выводим все сообщения в цикле
  
{
$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));

                    }
                    else {
                    
//если сообщений не найдено
                    
echo "Сообщений нет";
                    }
}

else
{

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$tmp mysql_query("SELECT * FROM messages WHERE poluchatel='$login'ORDER BY id DESC",$db); 
$messages mysql_fetch_array($tmp);//извлекаем сообщения пользователя, сортируем по идентификатору в обратном порядке, т.е. самые новые сообщения будут вверху
$author $messages['author'];

//если страничка чужая, то выводим только некторые данные и форму для отправки личных сообщений
$result1 mysql_query("SELECT avatar,id FROM users WHERE login='$author'",$db); //извлекаем аватар автора
$myrow1 mysql_fetch_array($result1);
if (!empty(
$myrow1['avatar'])) {//если такового нет, то выводим стандартный(может этого пользователя уже давно удалили)
$avatar1 $myrow1['avatar'];
}
else {
$avatar "../avatars/net-avatara.jpg";}


print <<<HERE
<img alt='аватар' src='$myrow[avatar]'><br>
<form action='post.php' method='post'>
<br>
<h2>Отправить Ваше сообщение:</h2>
<textarea cols='43' rows='4' name='text'></textarea><br>
<input type='hidden' name='poluchatel' value='
$myrow[login]'>
<input type='hidden' name='id' value='
$myrow[id]'>
<input type='submit' name='submit' value='Отправить'>
</form>
HERE;

$result3 mysql_query ("SELECT * FROM  messages WHERE post='$id'ORDER BY id DESC",$db);
if (
mysql_num_rows($result3) > 0)
{
$myrow3 mysql_fetch_array($result3);
do 
{
printf ("<div class='post_div'><p class='post_comment_add'></a>Комментарий добавил(а): <strong><a href='page.php?id=%s'>%s</a></strong> <br>Дата: <strong>%s</strong></p><a href='page.php?id=%s'><img alt='аватар' src='%s'></a>
<p>%s</p></div>"
,$myrow1['id'],$myrow3["author"], $myrow3["date"], $myrow1['id'], $avatar1$myrow3["text"]);
}
while (
$myrow3 mysql_fetch_array($result3));
}


}

?>

</body>
</html>
<?php require_once ("../blocks/footer.php");?>


Базы

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

CREATE TABLE IF NOT EXISTS `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  DEFAULT CHARSET=utf8 AUTO_INCREMENT=71 ;




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

CREATE TABLE IF NOT EXISTS `messages` (
  `id` int(9) NOT NULL AUTO_INCREMENT,
  `post` varchar(5) CHARACTER SET cp1250 NOT NULL,
  `author` varchar(15) NOT NULL DEFAULT '',
  `poluchatel` varchar(15) NOT NULL DEFAULT '',
  `date` date NOT NULL DEFAULT '0000-00-00',
  `text` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=154 ;







  Ответить  
 
 автор: Lotanaen   (10.08.2011 в 16:59)   письмо автору
 
   для: zorg84   (10.08.2011 в 13:57)
 

А в таблицу сообщений правильно все пишется?
ЗЫ: как то у вас запросы к БД в цикле делаются - это не хорошо... да и в таблице БД автора и получателя лучше айдишники юзеров писать, а не логины.

  Ответить  
 
 автор: zorg84   (10.08.2011 в 17:37)   письмо автору
 
   для: Lotanaen   (10.08.2011 в 16:59)
 

В таблице сообщений правильно всё пишется

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

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