Проблема с чатом - дублирующиеся сообщения

Spear

почемучка
Проблема с чатом - дублирующиеся сообщения

Здравствуйте, я делыю чат на РНР + яваскрипт.
Столкнулся с такой проблемой:

механизм такой как и везде: есть скрытый фрейм, который раз в надцать секунд идет на РНР скрипт и забирает сообщения.
Забирает с таким условием:

.... WHERE ..... AND post_time > '".time()."' ...

иногда сообщения пропадают - то есть не забираются, а если задать тайму времени побольше = то сообщения дублируются.

Может быть ктото уже с таким сталкивался, и знает как лучше эту траблу решить?
 

Spear

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


Ещё есть вопросик по чату (очень надеюсь на помощь, сам никак немогу... уже час точно мучаюсь)

нужно в строке $message найти часть сообщения, которая говорит что сообщение послано кому-то конкретному.

То есть:
to[Spear]:
prevate[Spear]:
Если находится первое - присваиваем сообщению статус 2,
если второе - то 3.

Также немогу придумать как сделать, чтобы одно сообщение отправлялось нескольким адресатам (если они указаны).
Ну например:

PHP:
private [butch_rus]: private [BLINK_182]: private [blackleibl]: всем привет
Что бы в таком случае все три пользователя получили приватное сообщение. В регекспах запустался.
 

Кром

Новичок
>в том-то и дело - я незнаю какой условие задать

Подключи логику. Это будет самым правильным решением. Сначала подумать, как разделить сообщения на те, которые уже послали и те которые надо послать. Потом, можно подумать как это сделать на php.

>Что бы в таком случае все три пользователя получили приватное сообщение. В регекспах запустался.

В данном случае можешь искать в строке все подстроки, которые лежат между "private [" и "]:".
 

Spear

почемучка
В данном случае можешь искать в строке все подстроки, которые лежат между "private [" и "]:".
а можно нагядный пример? Буду очень благодарен..
я все никак непому просто проверить - есть ли вообще в сообщении приват для кого-то :(
неполучается.

-~{}~ 27.08.05 01:35:

никак неполучается :(
 

Кром

Новичок
>а можно нагядный пример? Буду очень благодарен..

Пример ты можешь найти сам. В любой статье по регулярным выражениям есть примеры вырезания части строки между определенными символами.
 

Spear

почемучка
В любой статье по регулярным выражениям есть примеры вырезания части строки между определенными символами.
честное слово -искал.
Там ведь проблема в чем (для меня)

нужно из строки
private [test]: private [vasia]: дать понять скрипту, что это приват для двоих,
а из строки
private [test]:private [vasia]: скрипт должен понять, что это приват для человка с логином test]:private [vasia




пс
с первым вопросом (дублирование сообщений) разобрался так:
при логине(авторизации) присваиваю пользователю
$_SESSION['last_receive'] = time()-30;

и потом скрипт выбирает из базы все сообщение, время которых больше чем $_SESSION['last_receive'], а после выборки - $_SESSION['last_receive'] присваивается текущее время. Через 5 секунд (когда скрипт опять идет за сообщениями) опять же берутся все сообщения старше $_SESSION['last_receive'] и самой переменной вновь обновляется время.
Правильно сделал? или можно было легче?
 

Кром

Новичок
нужно из строки
private [test]: private [vasia]: дать понять скрипту, что это приват для двоих,
а из строки
private [test]:private [vasia]: скрипт должен понять, что это приват для человка с логином test]:private [vasia
Не совсем понятно в чем разница, в пробеле, что ли?


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

Spear

почемучка
Не совсем понятно в чем разница, в пробеле, что ли?
честно говоря - незнаю в чем. Просто так сделано на многих форумах (на тех, на которые я равняюсь, например combats.ru и territory.ru). Поэтому мне показалось что раз уже такие интернет-проекты юзают такую схему - значит она удобна для вычисления.

А я до сих пор немогу, блин, регексп написать :(

-~{}~ 28.08.05 18:24:

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

PHP:
	if(preg_match("/private \[[\w\W]\]/i", $setinfo['msg']) AND !preg_match("/private \[".$_SESSION['name']."\]/i", $setinfo['msg']))
	{
		$skipMsg = 1; 
		$MsgStatus = "";
	}
	elseif(preg_match("/private \[".$_SESSION['name']."\]/i", $setinfo['msg']))
	{ 
		$MsgStatus = "private";
	}
-~{}~ 28.08.05 18:28:

и ещё немогу сделать так, чтобы строка
private [nickname]: hello!

превратилась в
<b>private <u>nickname</u></b>
 

Jaizer

Новичок
preg_replace("/^(private\s)([\[\w]+\])$/","<b>\1<u>\2</u></b>",$string)
Вроде так, но мог ошибиться.... Не проверял...
 

Spear

почемучка
Спасибо,
впринципе работает, только почему то вместо \1 и \2 появляются знаки "". Что бы это могло быть такое?
 

Spear

почемучка
че-то странный глюк:

такой регексп работает:
PHP:
$setinfo['msg'] = preg_replace("/(private\s[)([\w\W]*)(])/","<b>\1<u>\2</u></b>",$setinfo['msg']);
НО он изменяет значения \1 и \2 на знак .
Что-то в РНр может глючит?

А вообще,
RegExp1
RegExp2
я по этим статьям регексп и осваивал :)

-~{}~ 29.08.05 17:47:

блин фигня какая-то.
Непойму.
Регексп правильный - но почему то нужный текст заменяется на нечитабельный символ . Причем не по символу на букву текста, а просто \1 на  и \2 
 
Сверху