Re: php + sql чат
Проще создать 1 поле в таблице ещё а не удалять строки в скриптах. так как из названия поля видно что там время создания сообщения заноситься, что может быть полезным.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форум PHP-MyAdmin.RU → Курилка → php + sql чат
Проще создать 1 поле в таблице ещё а не удалять строки в скриптах. так как из названия поля видно что там время создания сообщения заноситься, что может быть полезным.
Поле 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) . "')";
Проверьте значения time() и $comment_time. Надо понять что они возвращают. Подозреваю, что проблема в часовых поясах и временном штампе.
исправил таблицу бд, время записывает хорошо, в формате гггг-мм-чч чч:мм:сс
с time() и comment_time() не получается разобраться((
ввожу сообщение, такаю ок - оно сразу появляется. а чужие - нет. может проблема в ежесекундном вызове update.php?
Просто добавьте на время отладки это:
$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>';
Просто добавьте на время отладки это:
$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)
спасибо)
ничего не понимаю..
на денвере заработало, хотя собстна ничего и не менял, а на хосте - не работает.. О__О
открываю чат с локалхоста в двух вкладках под разными никами. в одной вкладке чтонибудь пишу от ника "111". открываю вторую вкладку - сообшение от ника "111" на экране. все работает. перекинул все дело на хост - и опять не работает!
что за напасть((
судя по всему чудит именно time, т.к. иногда ни с того ни с сего отправляются по два сообщения сразу одинаковых
появилась идея: а если сравнивать не время сообщений, а id? ну тоесть я отправил сообщение, у него допустим айди = 10. проверяем, если в бд есть айди > 10 - пишем их в чат. ну или чуть подкорректировать это сравнение...
может кто поможет?(
К отладочным строкам еще эту добавьте:
$ok = true;
Сперва сделаем, чтобы работало то, что есть, а там поглядим можно ли улучшить.
К отладочным строкам еще эту добавьте:
$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
судя по всему слева - сумма чисел текущей даты, а справа - добавленного сообщения (должно быть). но почему так быстро меняется сумма в правой колонке?
судя по всему он циклично выдает: слева - столбец текущего времени, справа - время отправки каждого сообщения из бд. делает это все с интервалом в секунду
попробовал сделать это на хосте в интернете (до этого делал на денвере) - ничего вообще не выдает!
В 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']) {
сделал
на денвере - все так же стабильно работает
на хосте - все так же стабильно не работает)
может на хосте попросту не работает ajax? поэтому и не может вызвать update.php...
хотя если сделать намеренную ошибку в update.php, то в чате ежесекундно появляется ошибка, что говорит о том, что ajax работает
тогда я совсем ничего не понимаю. как же так? один и тот же чат на денвере работает, а на хосте нет?
Я бы посмотрел на хост такой, если что завтра позвоните в скайп, он на моей страничке домашней, попробую разобраться в чем проблема на хосте.
на хосте - все так же стабильно не работает)
Ищите ошибки в логах веб сервера, либо смотрите значения переменных. Я выше уже указывал как можно проверить значения переменных, которые сравниваются в условии.
Я бы посмотрел на хост такой, если что завтра позвоните в скайп, он на моей страничке домашней, попробую разобраться в чем проблема на хосте.
бесплатный хостинг на http://guru-host.ru
по возможности конечно позвоню! спасибо)
Я выше уже указывал как можно проверить значения переменных, которые сравниваются в условии.
естественно я попробовал эти 4 строки написать в update.php на хосте. в том и дело, что не выводит он значения таймов((
в том и дело, что не выводит он значения таймов
Если не выводит, значит в запросе ошибка. Смотрите логи веб-сервера.
вы не поверите, что произошло!
сегодня с утра покопался в чате, ничего собстна не изменил, оставил как было.
взял ноут, пошел в универ. прихожу, запускаю денвер, открываю чат - и он вообще не работает! ввожу сообщение, жму отправить - оно не появляется! в бд тоже не записывается о___О
пришел домой - сообщения стали заноситься в бд и отображаться на экране! автоапдейт опять не работает!
проверка таймов тоже не идет!
как такое может быть??
залью ка архив с текущими изменениями...
Чат переделал и выслал на почтовый адрес.
Архив здесь: http://goo.gl/7UXOQ
Чат переделал и выслал на почтовый адрес.
Архив здесь: http://goo.gl/7UXOQ
спасибо большое! чат и на денвере, и на хостинге работает как часы)
не могли бы написать, что же все таки было не так?
В файле update.php, в запросе неверно добавлялись значения оператора LIMIT. Впрочем, напильником там еще много поработать придется.
ясно. пока вроде все идет хорошо.
добавил время отправки сообщений
далее хочу поставить чат, так сказать, в рамки) чтоб не уезжал вниз.. вот думаю..
появился вопрос
разбил я значит 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 секунду? (потом поставлю при появлении новых сообщений)
С jQuery это будет:
$('#messages').scrollTop(100);
Не забудьте в стиль добавить overflow: auto; чтобы появилась полоса прокрутки.
Форум PHP-MyAdmin.RU → Курилка → php + sql чат
Форум работает на PunBB, при поддержке Informer Technologies, Inc
Currently installed 7 official extensions. Copyright © 2003–2009 PunBB.