За последние 24 часа нас посетили 16704 программиста и 1694 робота. Сейчас ищет 891 программист ...

Онлайн чат и еже с ним!

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

  1. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Это файл который выводит поля чата в браузер пользователя!
    PHP:
    1. <?php
    2.               include ("bd_chat.php");
    3.               include ("bd.php");
    4.               $sql = "SELECT `chat`.*, `users`.`name`, `users`.`fupload` FROM `chat`, `users` WHERE `chat`.`user_id` = `users`.`id` ORDER BY `idchat` DESC";
    5.               $result8 = mysql_query($sql, $dbchat)or die("Ошибка в запросе: " . mysql_error());
    6.               $result9 = mysql_query($sql, $db)or die("Ошибка в запросе: " . mysql_error());
    7.                  if ((!$result8) or (!$result9))
    8.                  {
    9.                  echo "ошибка - ".mysql_error()."<br>";
    10.                  echo $sql;
    11.                  exit();
    12.                  }
    13.               $myrow8 = mysql_fetch_array($result8);
    14.               $myrow9 = mysql_fetch_array($result9);
    15.               if (!empty($myrow8['idchat']))
    16.               {
    17.               $massage = $myrow8['massage'];
    18.                     if (empty($myrow9['fupload']))
    19.                     {
    20.                     $avachat = "../file/avatars/net-avatara.jpg";
    21.                     }
    22.                     else
    23.                     {
    24.                     $avachat = $myrow9['fupload'];
    25.                     }
    26.                     $w_chat = 30;        
    27.                     $w_src_chat = imagesx($avachat);
    28.                     $h_src_chat = imagesy($avachat);
    29.                     $dest_chat = imagecreatetruecolor($w_chat,$w_chat);        
    30.                     if ($w_src_chat>$h_src_chat)
    31.                     {
    32.                     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));  
    33.                        if ($w_src_chat<$h_src_chat)
    34.                        {
    35.                        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));          
    36.                            if ($w_src_chat == $h_src_chat)
    37.                            {
    38.                            imagecopyresampled($dest_chat, $avachat, 0, 0, 0, 0, $w_chat, $w_chat,$w_src_chat, $w_src_chat);
    39.                            }
    40.                         }
    41.                      }
    42.               }  
    43.               while ($myrow8 = mysql_fetch_array($result8))
    44.               {
    45.                  if (!empty($myrow9['id']))
    46.                  {
    47.                  printf("<table class='' border='1'>
    48.                           <tr>
    49.                             <td>
    50.                             <div class='avachat'>%s</div><div class=''>%s</div><div class=''>%s</div>
    51.                             </td>
    52.                          <tr>
    53.                         </table>", $avachat, $myrow9['name'], $massage);
    54.                  }
    55.                  else
    56.                  {
    57.                  echo("Напиши сообщение !");  
    58.                  }
    59.               }
    60.               ?>
    Это обработчик введённых данных:
    PHP:
    1. <?php
    2.   include ("bd_chat.php");
    3.   if(isset($_POST['massage']))
    4.   {
    5.   $massage = mysql_real_escape_string($_POST['massage']);
    6.   $massage = stripslashes($massage);
    7.   $massage = htmlspecialchars($massage);
    8.   $message=str_replace("<", "&lt;", $message);
    9.   $message=str_replace(">", "&gt;", $message);
    10.   $message=str_replace("\r\n", " ", $message);
    11.   $message=str_replace("\r", "", $message);
    12.   $message=str_replace("\n", "", $message);
    13.   $message=str_replace("|", "_", $message);
    14.      if (($massage == '') or empty($massage))
    15.      {
    16.      unset($massage);
    17.      }
    18.   }
    19.   if (strlen($massage) > 70)
    20.   {      
    21.   die ("Текст не должен превышать 70 символов!");            
    22.   }
    23.   if (!empty($_SESSION['login']) and !empty($_SESSION['pass']))            
    24.   {                      
    25.   $login = mysql_real_escape_string($_SESSION['login']);            
    26.   $pass = mysql_real_escape_string($_SESSION['pass']);  
    27.   include ("bd.php");      
    28.   $result2 = mysql_query("SELECT id FROM users WHERE login='$login' AND pass='$pass'",$db);  
    29.   $myrow2 = mysql_fetch_array ($result2);  
    30.      if (empty($myrow2['id']))
    31.      {              
    32.      exit("Вход на эту страницу разрешен только зарегистрированным пользователям!");              
    33.      }  
    34.      if (!preg_match("|^[\d]+$|", $id))    
    35.      {            
    36.      exit("<p>Неверный формат запроса! Проверьте URL</p>");          
    37.      }          
    38.   }            
    39.   else
    40.   {                      
    41.   exit("Вход на эту страницу разрешен только зарегистрированным пользователям!");
    42.   }  
    43.   $user_id = $id;
    44.   }
    45.   $result4 = sprintf("INSERT INTO chat (massage, user_id) VALUES ('%s','$s');", mysql_real_escape_string(strip_tags($massage)), $user_id);
    46.   $res = @mysql_query($result4);
    47.   if(!$res)
    48.   {
    49.   die("Error: ".mysql_error());
    50.   }
    51.   else
    52.   {
    53.   return $res;
    54.   }
    55.   if ($result4 == 'TRUE')
    56.   {
    57.   header("Location: [url=http://localhost/znakomstva/page_user.php]http://localhost/znakomstva/page_user.php[/url]");  
    58.   }
    59.   else
    60.   {  
    61.   exit ("При отправке Вашего сообщения возникли проблемы.Обратитесь в службу поддержки по адресу [email=bvstrechi@list.ru]bvstrechi@list.ru[/email]");
    62.   }
    63. ?>
    Не обессудте-я только учусь! :oops:
    Вопросы:
    1. Выдаёт такие ошибки:
    Код (Text):
    1. Warning: imagesx(): supplied argument is not a valid Image resource in Z:\home\localhost\www\......
    2. Warning: imagesy(): supplied argument is not a valid Image resource in Z:\home\localhost\www\......
    Понимаю в чём смысл (примерно!!!),но поделать ничего не могу!Гугл спросил,но он в конкретеке молчит как партизан(даже иголки под ногти и раскалённый утюг на грудь не помогли) :D !
    2.Хочу сделать так,что бы выводились только десять очередных сообщений на страницу,потом проходит пять минут и происходит рефреш страницы.При этом уже показанные сообщения удаляются на всегда,а выводятся очередные десять!Помогите в этом плане-как реализовать!?Не прошу написать код (заранее перестраховываюсь от гневных сообщений более опытных товарищей по цеху),а хоть натолкните,пару строчик кода (может быть), а дальше сам додумаю (надеюсь)! :roll:
    3.Прошу натолкнуть по какому принцыпу осуществлять выборку из базы?Как будет php понимать что мне нужны очередные 10 строк сообщений с выборкой из базы юзеров,по их конкретным id?
    4.Думаю реализовать таким образом,что бы эти десять сообщений выводились в окошке определённого размера (с прокруткой оно должно быть).Это с помощью CSS делать,какие свойства?
     
  2. Easy

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

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    я особо не работал с изображениями, но
    говорит о том, что переданная в функцию переменная не является правильным ресурсом изображения.
    http://php.net/manual/ru/function.imagesx.html
    посмотрев описание можно увидеть что параметр функции resource $image а не string $filename
    следовательно вам нужно не путь передавать а ресурс
    сомтрите те функции который возвращают ресурс, например
    http://www.php.net/manual/ru/function.i ... omjpeg.php
     
  3. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Ага!Спасибо!Буду пробовать.И действительно,передаю ссылку на изображение ведь...
    А есть ещё предложения по остальным вопросам?
    Понимаю,что накатал много текста и большенству программистов не интересно читать столько строк для помощи,но призываю всех к ответу!...а точнее помощи!)))
     
  4. Easy

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

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    [css]overflow[/css]

    по поводу 10 сообщений и рефреша раз в 5 минут - это уже не чат получается :)

    не совсем понятна мысль... а что будет если юзер сам обновит страницу? а не дождётся авторефреша.
     
  5. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Про overflow почитал-всё понял!
    Бли-и-и-и-ин!А вот про это не подумал совсем,и действительно...(((А можно,что бы код фиксировал время вывода сообщений,потом проверял сколько прошло времени и если он видит,что прошло пять минут,то производил рефреш с очередной десяткой!?
    Пример:http://www.24open.ru/users/online/там с правой стороны есть как бы чат,только я хочу,что бы он ещё и обновлялся тем способом как ранее написал!Или это сильно будет грузить страницу-нет смысла?
     
  6. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    А что это получается!Человек написал сообщение,оно высветилось (как его очередь подошла) и все его увидели,заценили,так сказать?Аль нет?
     
  7. Easy

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

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    раз в 5 минут это сильно нагрузит?) сомневаюсь...

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

    сдлайте просто последние 10 сообщений и всё, зачем вам время, а если не кто не писал за 5 минут? голый чат будет - некрасиво.

    вообще сделайте на аяксе подгрузку, зачем перезагружать страницу?

    отправляйте просто ID последнего выведенного сообщения раз в 20 секунд например, и если есть новые выводите их.
     
  8. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Загнали меня в тупик!!!Знал бы прикуп-жил бы в Сочи!)))
    Я не умею на аяксе программировать (мой недостаток-каюсь) и от сюда понятия как отправлять id каждого последнего сообщения...(((А главное куда отправлять!?Можно больше физики в этом вопросе обьяснить!?Заранее благодарен,сансей)))
     
  9. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Всё приходит с опытом-представляете,я даже не подумал о подобных вариантах!Но у меня же на будущем сайте будут только активные пользователи,которые днём и ночью будут в чат стросить сообщения без усталости и мозолей на пальцах!)))
    Хочу всё как в этом чате,только писать в том же окне где и выводитятся сообщения и обновления постоянные!Как вот выборку делать правильно и порядок вывода-вот дилема!
     
  10. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    1. Выдаёт такие ошибки: Код:
    Warning: imagesx(): supplied argument is not a valid Image resource in Z:\home\localhost\www\......
    Warning: imagesy(): supplied argument is not a valid Image resource in Z:\home\localhost\www\......

    Есть варианты в помощи!?
    А про чат:может кто-нибудь хоть кусочеГ кода кинет,а я додумаю!?