За последние 24 часа нас посетили 17778 программистов и 1662 робота. Сейчас ищут 828 программистов ...

онлайн-чат(я вас ещё не задолбал?;)))

Тема в разделе "PHP для новичков", создана пользователем Panich, 15 июл 2011.

  1. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Форма:
    PHP:
    1.  <?php
    2.               include ("bd_chat.php");
    3.               $sql = "SELECT * FROM chat ORDER BY idchat DESC";
    4.               $result8 = mysql_query($sql, $dbchat)or die("Ошибка в запросе: " . mysql_error());
    5.               if (!$result8)
    6.               {
    7.               echo "ошибка - ".mysql_error()."<br>";
    8.               echo $sql;
    9.               exit();
    10.               }
    11.               if (!empty($myrow8['idchat']))
    12.               {
    13.               $loginchat = $myrow8['loginchat'];
    14.               include ("bd.php");
    15.               $sql1 = "SELECT name, fupload FROM users WHERE login='$loginchat'";
    16.               $result9 = mysql_query($sql1, $db)or die("Ошибка в запросе: " . mysql_error());
    17.                  if (!$result9)
    18.                  {
    19.                  echo "ошибка - ".mysql_error()."<br>";
    20.                  echo $sql1;
    21.                  exit();
    22.                  }
    23.                  else{}
    24.                     if ($myrow9['fupload'] =='' or empty($myrow9['fupload']))
    25.                     {
    26.                     $avachat = "../file/avatars/net-avatara.jpg";
    27.                     }
    28.                     else
    29.                     {
    30.                     $avachat = $myrow9['fupload'];
    31.                     }
    32.                     $w_chat = 30;        
    33.                     $w_src_chat = imagesx($avachat);
    34.                     $h_src_chat = imagesy($avachat);
    35.                     $dest_chat = imagecreatetruecolor($w_chat,$w_chat);        
    36.                     if ($w_src_chat>$h_src_chat)
    37.                     {
    38.                     imagecopyresampled($dest_chat, $avachat, 0, 0, round((max($w_src_chat,$h_src_chat)-min($w_src_chat,$h_src_chat))/2), 0, $w_chat, $w_chat, min($w_src_chat,$h_src_chat), min($w_src_chat,$h_src_chat));  
    39.                        if ($w_src_chat<$h_src_chat)
    40.                        {
    41.                        imagecopyresampled($dest_chat, $avachat, 0, 0, 0, 0, $w_chat, $w_chat, min($w_src_chat,$h_src_chat), min($w_src_chat,$h_src_chat));          
    42.                            if ($w_src_chat == $h_src_chat)
    43.                            {
    44.                            imagecopyresampled($dest_chat, $avachat, 0, 0, 0, 0, $w_chat, $w_chat,$w_src_chat, $w_src_chat);
    45.                            }
    46.                            else{}
    47.                         }
    48.                         else{}
    49.                      }
    50.                      else{}
    51.               }  
    52.               else{}
    53.               while ($myrow8 = mysql_fetch_array($result8))
    54.               {
    55.                 if (!empty($myrow8['idchat']))
    56.                 {
    57.                 printf("<table class='' border='1'>
    58.                           <tr>
    59.                             <td>
    60.                             <div class='avachat'>%s</div><div class=''>%s</div><div class=''>%s</div>
    61.                             </td>
    62.                          <tr>
    63.                         </table>", $avachat, $myrow9['name'], $myrow8['textchat']);
    64.                 }
    65.                 else
    66.                 {
    67.                 echo("!");  
    68.                 }
    69.               }
    70.               ?>
    Подключение к базе чата:
    PHP:
    1. <?php
    2.    $dbname="chat";
    3.    $dbhost="localhost";
    4.    $dbuser="panich07";
    5.    $dbpass="070CFItymrf";
    6.    $dbchat = mysql_connect ($dbhost,$dbuser,$dbpass);
    7.    if (!$dbchat)
    8.    {
    9.    exit("Извините за временные неудобства!В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.Попробуйте посетить сайт позднее!");
    10.    }  
    11.    mysql_select_db ("user",$dbchat);
    12.    if (!@mysql_select_db ("user",$dbchat))
    13.    {
    14.    echo("Извините за временные неудобства!В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.Попробуйте посетить сайт позднее!");
    15.    }
    16. ?>
    К базе пользователей:
    PHP:
    1. <?php
    2.    $dbname="users";
    3.    $dbhost="localhost";
    4.    $dbuser="panich07";
    5.    $dbpass="070CFItymrf";
    6.    $db = mysql_connect ($dbhost,$dbuser,$dbpass);
    7.    if (!$db)
    8.    {
    9.    exit("Извините за временные неудобства!В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.Попробуйте посетить сайт позднее!");
    10.    }  
    11.    mysql_select_db ("user",$db);
    12.    if (!@mysql_select_db ("user",$db))
    13.    {
    14.    exit("Извините за временные неудобства!В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.Попробуйте посетить сайт позднее!");
    15.    }
    16. ?>
    База чата:
    [sql]CREATE TABLE IF NOT EXISTS `chat` (
    `idchat` int(255) NOT NULL AUTO_INCREMENT,
    `loginchat` varchar(30) NOT NULL,
    `textchat` varchar(70) NOT NULL,
    `datachat` varchar(20) NOT NULL,
    PRIMARY KEY (`idchat`),
    FULLTEXT KEY `namechat` (`loginchat`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;[/sql]
    С базой юзеров всё в норме,так как на другую страницу всё выводится...
    Суть проблемы:
    В таблице выводится только текст сообщения,который был занесён в базу,а имя и афатарка не выводятся из базы юзеров!Переменной аватарки не присваевается даже изображение "нет-аватара", что бы его уменьшить и вывести в таблице!
     
  2. DuD

    DuD Активный пользователь

    С нами с:
    16 июл 2011
    Сообщения:
    2
    Симпатии:
    0
    Для начала посмотри, в базе то эти поля хоть забываются?

    P.S.
    И разберись в коде, зачем у тебя везде стоит:
    "else {}"

    If и с одним результатом нормально работает)
     
  3. Easy

    Easy Активный пользователь

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    оО на какой форум не приди, везде знакомые авторы вопросов :D

    откуда у вас берётся переменная $myrow8['idchat']?

    зачем такая проверка?
    PHP:
    1. if ($myrow9['fupload'] =='' or empty($myrow9['fupload']))
    empty и так проверяет что строка пустая, оставьте просто
    PHP:
    1. if (empty($myrow9['fupload']))
    откуда берётся $myrow9['fupload']?

    где не выводится аватарка?
    PHP:
    1. while ($myrow8 = mysql_fetch_array($result8))
    2.                {
    3.                  if (!empty($myrow8['idchat']))
    4.                  {
    5.                  printf("<table class='' border='1'>
    6.                           <tr>
    7.                             <td>
    8.                             <div class='avachat'>%s</div><div class=''>%s</div><div class=''>%s</div>
    9.                             </td>
    10.                           <tr>
    11.                         </table>", $avachat, $myrow9['name'], $myrow8['textchat']);
    12.                  }
    13.                  else
    14.                    {
    15.                  echo("!");
    16.                  }
    17.                }
    это вывод разных юзеров с аватаркой? так у вас аватарка один раз присваивается из неизвестного поля $myrow9['fupload']
    цикл хоть 100 раз путь бежит, ава будет везде одна.

    если у вас таблица юзеров отдельно, можно хранить просто id юзера возле каждого сообщения а не ник, и объединять таблицы по user.id
    и в цикле каждому юзеру будет вам отдельная аватарка и ник.
     
  4. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    еб*ть...

    Easy, блин я отправил сообщение и тут ты выше уже написал раньше) чистить не буду я тоже в восторге))
     
  5. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Поля забиваются и всё внорме!Но не работает даже если в ручную переменные вносить туда!
    Эту конструкцию мне на одном форуме подсказали-говорят,что скорость чтения кода браузером увеличивается-видать такой же спец как и я!)))
    Спорить не буду-тут заложал-код переделывал с другой страницы,а убрать не подумал даже!
    Из базы забираю:
    PHP:
    1. $sql1 = "SELECT name, fupload FROM users WHERE login='$loginchat'";
    или не прав я?
    Ава должна здесь выводится:
    HTML:
    1. <div class='avachat'>%s</div>
    А на том форуме не очень отзывчивый народец!Тут ребята более благоразумны и добры к неопытным и начинающим!!!Да и ответов на много больше компитентных,если не брать (в этом случае) последний комент:
    Почему не известние поле?Вот тут уже нужна помощь,что бы разобраться!!!
    Я решил создать отдельную базу,куда будут заноситься переменные из сессии пользователя,который отправляет сообщение!После определённого времени(например кажбые 20 сек.) из базы в онлайне будут выводиться сообщения поочерёдно!
    Кстати,подскажите,есть ли смысл делать такой онлайн-чат с рефрешем на каждые минуты три-или может задолбать пользователя?Есть может другие варианты?
     
  6. Easy

    Easy Активный пользователь

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    ава у вас тут присваивается переменной
    PHP:
    1. if ($myrow9['fupload'] =='' or empty($myrow9['fupload']))
    2.                      {
    3.                      $avachat = "../file/avatars/net-avatara.jpg";
    4.                      }
    5.                      else
    6.                      {
    7.                      $avachat = $myrow9['fupload'];
    8.                      }
    кстати это можно записать одной строкой :)
    PHP:
    1. $avachat =  empty($myrow9['fupload']) ?  "../file/avatars/net-avatara.jpg" : $myrow9['fupload'];
    где то читал что тернарные операторы работают быстрей :)

    Так вот, вы 1 раз присваиваете переменной $avachat путь к файлу, а потом в цикле выводите сообщения пользователей
    PHP:
    1.  while ($myrow8 = mysql_fetch_array($result8))
    но в цукле у вас у всех сообщений получатся одна ава, так как не где в цикле переменная с авой не меняется.

    не слова не понял :)

    сделайте таблицу, вместо ника впишите в таблице чата user_id. а выводите потом так
    вместо этого
    PHP:
    1. $sql = "SELECT * FROM chat ORDER BY idchat DESC";
    как то так
    PHP:
    1. $sql = "SELECT `chat`.*, `users`.`name`, `users`.`fupload` FROM `chat`, `users` WHERE `chat`.`user_id` = `users`.`id` ORDER BY `idchat` DESC";
    вот вам вместо 2з запросов будет один, и хранится будет по id юзера, и ава будет в цикле менятся.

    а по поводу
    я вижу в коде где вы получаете $result8 и $result9
    но откуда берутся $myrow8 и $myrow9 я не вижу
    я так понимаю должно быть выражение что то ттипа
    PHP:
    1. $myrow8 = mysql_fetch_array($result8);
    но его нет.
    я надеюсь это речь не о форуме где мой ник alex....? :D я на любом форуме отзывчивый, если кода не много и вопрос хоть как то можно понять :) а если кода много, то просто лень сидеть читать разбираться.
     
  7. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Вот тут большое спасибо-чем кода меньше-там лучше,а то к концу написания сам не разбирёшься!)))
    Действительно-сейчас перечитал и понял,что здесь тупанул!
    Эту запись не совсем понял,но теперь знаю куда двигаться...спасибо!
    Это факт,но как тогда само сообщение чата выводится!?При всём при этом (даже если предположить,что к каждому сообщению прекрепляется одна и та же ава) почему не прикрепляется изображение:"нет-аватара",уж оно должно же выводиться...!!!???
    Мало на каких форумах оставлял свои сообщения (прозьбы о помощи) и писал вышеупомянутое сообщение не Вам,а как ответ на отречённое высказывание...))))Да и спорить не хочу-за помощь большое СПАСИБО!
    П.С.Что сказете про функцию ресайза мою (в самом первом сообщении)?!Есть недоработки?
     
  8. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Я хотел сделать следующим образом:
    Пользователь зашёл на свою страницу, написал в окне "инпут" сообщение и нажал отправить!Код пхп в это время вынимает из сессий логин пользователя (так как в моём случае он будет индивидуален и повторов быть не может-по мылу сделал). Далее он вынимает из базы юзеров по логину имя и аватарку, из базы чата вытаскивает сообщение и всё это в цикле выводит в браузере!
    Так же всё правильно получилось!?Должно работать?
    П.С. гляньте код ресайза в начале самом обсуждения-если,что не так,то подтолкните куда двигаться...заранее благодарен!