26

Re: php + sql чат

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

27

Re: php + sql чат

Поле time обязательно.

Структура таблицы должна быть такой.

CREATE TABLE IF NOT EXISTS `chat` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user` varchar(200) NOT NULL,
  `msg` varchar(200) NOT NULL,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

При структуре выше, можно обойтись таким запросом. Значения полей id и time будут добавлены автоматически. Обратите внимание на функцию addslashes(), без которой одинарная кавычка или обратный слеш в имени или сообщении, сломают работу скрипта.

$sql = "INSERT INTO chat (`user`, `msg`) VALUES ('" . addslashes($user) . "', '" . addslashes($msg) . "')";

28

Re: php + sql чат

Hanut сказал:

Проверьте значения time() и $comment_time. Надо понять что они возвращают. Подозреваю, что проблема в часовых поясах и временном штампе.

исправил таблицу бд, время записывает хорошо, в формате гггг-мм-чч чч:мм:сс
с time() и comment_time() не получается разобраться((

ввожу сообщение, такаю ок - оно сразу появляется. а чужие - нет. может проблема в ежесекундном вызове update.php?

29

Re: php + sql чат

Просто добавьте на время отладки это:

    $comment_time = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
    // Сразу после этой строки блок с парой времени.
    $table .='<li>';
    $table .='<b>'.time().':</b> '.$comment_time.'';
    $table .='</li>';

30 (изменено: DimkaDimka, 2011-03-03 18:10:06)

Re: php + sql чат

Hanut сказал:

Просто добавьте на время отладки это:

    $comment_time = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
    // Сразу после этой строки блок с парой времени.
    $table .='<li>';
    $table .='<b>'.time().':</b> '.$comment_time.'';
    $table .='</li>';

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

хотя секундочку!!!
убрал обратно эти три строчки - и вроде заработало! О____О
сейчас закину на chat196.u-gu.ru/?user=username и попробую еще разок) заходите тоже минут через 5-10)
спасибо)

31

Re: php + sql чат

ничего не понимаю..
на денвере заработало, хотя собстна ничего и не менял, а на хосте - не работает.. О__О
открываю чат с локалхоста в двух вкладках под разными никами. в одной вкладке чтонибудь пишу от ника "111". открываю вторую вкладку - сообшение от ника "111" на экране. все работает. перекинул все дело на хост - и опять не работает!
что за напасть((

32

Re: php + sql чат

судя по всему чудит именно time, т.к. иногда ни с того ни с сего отправляются по два сообщения сразу одинаковых

появилась идея: а если сравнивать не время сообщений, а id? ну тоесть я отправил сообщение, у него допустим айди = 10. проверяем, если в бд есть айди > 10 - пишем их в чат. ну или чуть подкорректировать это сравнение...

может кто поможет?(

33

Re: php + sql чат

К отладочным строкам еще эту добавьте:

$ok = true;

Сперва сделаем, чтобы работало то, что есть, а там поглядим можно ли улучшить.

34

Re: php + sql чат

Hanut сказал:

К отладочным строкам еще эту добавьте:

$ok = true;

Сперва сделаем, чтобы работало то, что есть, а там поглядим можно ли улучшить.

добавил эту строку перед теми тремя отладочными
в результате выдает бесконечное число строк такого формата:

1299180455: 1299168584
1299180455: 1299169016
1299180455: 1299169025
1299180455: 1299169035
1299180455: 1299169039
1299180455: 1299169048
1299180455: 1299169066
1299180456: 1299164682
1299180456: 1299164691
1299180456: 1299164734
1299180456: 1299164751
1299180456: 1299164800
1299180456: 1299164806

судя по всему слева - сумма чисел текущей даты, а справа - добавленного сообщения (должно быть). но почему так быстро меняется сумма в правой колонке?

35

Re: php + sql чат

судя по всему он циклично выдает: слева - столбец текущего времени, справа - время отправки каждого сообщения из бд. делает это все с интервалом в секунду

36

Re: php + sql чат

попробовал сделать это на хосте в интернете (до этого делал на денвере) - ничего вообще не выдает!

37

Re: php + sql чат

В update.php меняем запрос на:

$sql = "SELECT *, UNIX_TIMESTAMP(`time`) AS `u_time` FROM `chat` ORDER BY `id` LIMIT ".$count.", 20";

Следующие две строки убираем.

preg_match('/(.{4})-(.{2})-(.{2}) (.{2}):(.{2}):(.{2})/',$row['time'],$matches);
$comment_time = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);

Эту строку меняем:

if((time() - $comment_time)<2 && $_POST['user']!=$row['user']){
// На эту.
if((time() - $row['u_time']) < 2 && $_POST['user'] != $row['user']) {

38

Re: php + sql чат

сделал

на денвере - все так же стабильно работает
на хосте - все так же стабильно не работает)

39

Re: php + sql чат

может на хосте попросту не работает ajax? поэтому и не может вызвать update.php...

хотя если сделать намеренную ошибку в update.php, то в чате ежесекундно появляется ошибка, что говорит о том, что ajax работает

тогда я совсем ничего не понимаю. как же так? один и тот же чат на денвере работает, а на хосте нет?

40

Re: php + sql чат

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

41

Re: php + sql чат

DimkaDimka сказал:

на хосте - все так же стабильно не работает)

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

42

Re: php + sql чат

DmitryV сказал:

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

бесплатный хостинг на http://guru-host.ru
по возможности конечно позвоню! спасибо)

Hanut сказал:

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

естественно я попробовал эти 4 строки написать в update.php на хосте. в том и дело, что не выводит он значения таймов((

43

Re: php + sql чат

DimkaDimka сказал:

в том и дело, что не выводит он значения таймов

Если не выводит, значит в запросе ошибка. Смотрите логи веб-сервера.

44

Re: php + sql чат

вы не поверите, что произошло!
сегодня с утра покопался в чате, ничего собстна не изменил, оставил как было.
взял ноут, пошел в универ. прихожу, запускаю денвер, открываю чат - и он вообще не работает! ввожу сообщение, жму отправить - оно не появляется! в бд тоже не записывается о___О
пришел домой - сообщения стали заноситься в бд и отображаться на экране! автоапдейт опять не работает!
проверка таймов тоже не идет!
как такое может быть??

залью ка архив с текущими изменениями...

http://www.sendspace.com/file/wpiuv6

45

Re: php + sql чат

Чат переделал и выслал на почтовый адрес.
Архив здесь: http://goo.gl/7UXOQ

46

Re: php + sql чат

Hanut сказал:

Чат переделал и выслал на почтовый адрес.
Архив здесь: http://goo.gl/7UXOQ

спасибо большое! чат и на денвере, и на хостинге работает как часы)
не могли бы написать, что же все таки было не так?

47

Re: php + sql чат

В файле update.php, в запросе неверно добавлялись значения оператора LIMIT. Впрочем, напильником там еще много поработать придется.

48

Re: php + sql чат

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

49

Re: php + sql чат

появился вопрос
разбил я значит div с окном для сообщений и формой отправки на два отдельных дива:

<div id="messages" style="width:550px; float:left; margin:30px; border:1px solid">
        <ol id="update" >
        </ol>
        <div id="flash"></div>

</div>

        <div>
            <form  method="post" name="form" action="">
            <div align="left">
                <table>
                <tr><td>
                <input type='text' class="textbox" name="content" id="content" maxlength="145" />
                </td><td valign="top">
                <input type="submit"  value="Post"  id="post" class="post" name="post"/>
               
                </td></tr>
                </table>             
            </div>
            </form>
           
        </div>


скажите, как сделать автоматический скроллинг вниз, ну допустим с интрвалом в 1 секунду? (потом поставлю при появлении новых сообщений)

50

Re: php + sql чат

С jQuery это будет:

$('#messages').scrollTop(100);

Не забудьте в стиль добавить overflow: auto; чтобы появилась полоса прокрутки.