Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 2
Регистрация: 13.01.2010
Сообщений: 129

php чат

12.02.2010, 08:04. Показов 3716. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте , нужен совет по написанию чата.В общем есть input, в который вводится текст сообщения
и кнопка отправить.В таблице есть 3 поля:
1ое - from_user(В него вставляется $_SESSION['login']).
2-ое - to_user(ник того, кому отправили сообщение).
3ье поле - само сообщение.
На странице есть список онлайн-юзеров.При нажатии на один из ников он вставляется в поле ввода сообщения, дальше пишем сообщение.Это поле ввода выглядит так:
to [nickname]: сообщение.
Каким способом можно nickname из поля ввода занести в таблицу в поле to_user после нажатия кнопки отправить?Тоесть разбить одно пришедшее из формы сообщение на 2 составляющие(кому отправлено и само сообщение) чтобы внести в базу отдельно сообщение и отдельно ник.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.02.2010, 08:04
Ответы с готовыми решениями:

Чат на PHP
Доброго времени суток! У меня есть чат на PHP, я его вставил в "полную новость", но вот беда, люди, которые читают новость с айди 4 и...

Чат на PHP
Добрый день. Мне необходимо сделать чат на PHP + MySQL + AJAX. В первую очередь хочется научиться делать это самому, поэтому прошу...

Фиксированный чат на php
Доброго времени суток! Я новичок на писаний веб приложений на php. И вот возник такой вопрос нужно сделать как бы сайт когда на него...

14
 Аватар для Krist_ALL
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
12.02.2010, 13:25
PHP
1
2
3
$message = $_POST['text'];
preg_match('#^to\s\[(.*)\]\s#',$message,$n);
$n[1]; //НИК
помоему регулярка верная...
1
Программист
 Аватар для motakuji
107 / 111 / 9
Регистрация: 27.09.2009
Сообщений: 331
12.02.2010, 14:34
PHP
1
2
3
4
5
6
7
8
$string='to [nikname]: bla-bla-bla';
//preg_match('/\[([a-z])+\]/i',$string,$massiv);
//print ($massiv[0]);
$start=strpos($string, '[');
$end=strpos($string, ']');
$leight=$end-$start;
$nikname=substr($string, $start+1, $leight-1);
print $nikname;
можно сделать так,можно регулярным выражением,но я в них не оч силён

Добавлено через 1 час 8 минут
Цитата Сообщение от Krist_ALL Посмотреть сообщение
$message = $_POST['text'];
preg_match('#^to\s\[(.*)\]\s#',$message,$n);
$n[1]; //НИК
помоему регулярка верная...
в конце ненадо пробельный символ ставить,а так правильно.
PHP
1
2
preg_match('#^to\s\[(.*)\]#',$message,$n);
$n[1]; //НИК
2
0 / 0 / 2
Регистрация: 13.01.2010
Сообщений: 129
13.02.2010, 04:42  [ТС]
А можно поподробнее чуть? чёт я не въезжаю в эту функцию.Облазил множество сайтов - везде одно и то же пояснение, описано вообще непонятно.Что за символы? что за что отвечает?
0
Программист
 Аватар для motakuji
107 / 111 / 9
Регистрация: 27.09.2009
Сообщений: 331
13.02.2010, 11:22
эта функция работает с perl-овскими регулярными выражениями.Почитай про герулярные выражения и поймёшь всё
1
0 / 0 / 2
Регистрация: 13.01.2010
Сообщений: 129
13.02.2010, 12:25  [ТС]
Цитата Сообщение от motakuji Посмотреть сообщение
эта функция работает с perl-овскими регулярными выражениями.Почитай про герулярные выражения и поймёшь всё
Нашёл одну статью хорошую, только посмотрев на её размах решил, что лучше воспользуюсь твоим вариантом, ато до вечера сидеть вникать буду)
0
0 / 0 / 2
Регистрация: 13.01.2010
Сообщений: 129
15.02.2010, 14:40  [ТС]
Возник ещё один вопрос.Читал статью по написанию чата, помню что там автор рассказывал, что все сообщения заносятся не в базу, а в текстовый файл.И есть скрипт, который проверяет количество сообщений в этом текстовом файле и удаляет их если накопилось, скажем, больше 30 сообщений.Кто знает как лучше? Чтобы сообщения в базе были или в текстовом файле?
И ещё...подскажите как можно реализовать такое?Есть поле для ввода сообщения, которое находится в отдельном фрейме.И есть фрейм где отображаются сообщения.Каким образом можно заставить тот фрейм, где отображаются сообщения, обновляться после того как в другом фрейме было введено сообщение.И вообще правильно ли это? Всмысле должен ли он полностью обновлятся или вывод сообщений правильнее будет сделать по другому?
0
Программист
 Аватар для motakuji
107 / 111 / 9
Регистрация: 27.09.2009
Сообщений: 331
15.02.2010, 15:05
по мне,так лучше база данных. С ней удобней работать,чем с файлами. Да и функциональность.Замучаешься с этими файлами работать.
1
0 / 0 / 2
Регистрация: 13.01.2010
Сообщений: 129
16.02.2010, 08:14  [ТС]
Насчёт обновления фрейма немного разобрался, сделал функцию по нажатию кнопки
JavaScript
1
2
3
4
function reload_func()
{
window.parent.messages.location.reload();
}
Только вот не всегда работает как надо, так как функция запускается сразу после нажатия кнопки 'отправить сообщение', а сообщения в базу добавляются спустя какие-то милисекунды.То есть функция обновляет фрейм сразу, но последнее сообщение в этом фрейме не выводится.Знает кто каким образом это можно исправить? Ато если я в php чтото шарю, то в js вообще практически полный ноль, а тем более когда речь заходит о взаимодействии php и js, то вообще страшно становится))
Тоесть принцип я понимаю, что обновить фрейм надо после того как сообщение занеслось в базу, но как это прописать не знаю...
0
16 / 16 / 0
Регистрация: 27.12.2009
Сообщений: 90
16.02.2010, 09:25
Мне кажется, что достаточно указать в коде после query header(location) (мануал: http://www.php.su/functions/?header ) на страничку с чатом. Да, будет медленно и некрасиво (страничка обновится), но альтернатива - только аякс. Еще вариант: отдельный фрейм с формой ввода сообщения и отдельный фрейм с чатом.
0
0 / 0 / 2
Регистрация: 13.01.2010
Сообщений: 129
16.02.2010, 09:35  [ТС]
Цитата Сообщение от Aego Посмотреть сообщение
Еще вариант: отдельный фрейм с формой ввода сообщения и отдельный фрейм с чатом.
так у меня так и есть. Поле для ввода сообщения и кнопка отправить - в одном фрейме, а вывод сообщений - в другом.Просто я не знаю как сделать так, чтобы функция обновления фрейма с сообщениями запускалась не после того, как я нажимаю кнопку send (она заносить сообщение в базу и запускает функцию), а после того как сообщение занеслось в базу.
0
16 / 16 / 0
Регистрация: 27.12.2009
Сообщений: 90
16.02.2010, 16:49
не совсем понимаю, что нужно. Попробуйте проверить, выполнился ли запрос в базу (mysql_query с insert into, если не ошибаюсь, возвращает 1 при успешном выполнении запроса). То есть:
PHP
1
2
3
4
if($query)
{
refresh_page();
}
0
0 / 0 / 2
Регистрация: 13.01.2010
Сообщений: 129
16.02.2010, 17:01  [ТС]
Цитата Сообщение от Aego Посмотреть сообщение
не совсем понимаю, что нужно. Попробуйте проверить, выполнился ли запрос в базу (mysql_query с insert into, если не ошибаюсь, возвращает 1 при успешном выполнении запроса). То есть:
PHP
1
2
3
4
if($query)
{
refresh_page();
}
Запрос то выполняется.Дело в том, что одна и та же кнопка выполняет 2е задачи.Она вставляет в базу новое сообщение и вызывает функцию, которая обновляет фрейм с выводом сообщений из базы(для того, чтобы после отправки нового сообщения, это сообщение сразу можно было увидеть в чате).Но дело в том, что функция срабатывает когда-как.Иногда она обновляет окно с сообщениями до того, как новое сообщение вставилось в базу.Тоесть фактически сообщение есть в базе, но не всегда его можно увидеть в чате сразу после нажатия кнопки, тоесть приходится ждать пока чат обновится автоматом(раз в 15сек) либо приходиться снова нажимать на кнопку, чтобы функция обновления снова сработала.Тоесть мне надо сделать чтобы страница обновлялась не сразу, а только после того, как сообщение занеслось в базу.А вот как это с помощью js сделать я не знаю.
0
16 / 16 / 0
Регистрация: 27.12.2009
Сообщений: 90
16.02.2010, 17:05
Используйте то, что я указал ранее. Тело условного оператора не выполнится пока запрос не будет выполнен. На JS точно можно сделать гораздо удобнее, но тут я не советник, да и подфорум не располагает.
1
Программист
 Аватар для motakuji
107 / 111 / 9
Регистрация: 27.09.2009
Сообщений: 331
11.06.2010, 10:43
zemelea, Вообще советую отправку и приём сообщений делать на js т.к. это будет удобнее для пользователя,нежели каждый раз перезагружать страничку. С помощью jQuery это очень легко сделать. У него есть метод Ajax с различными параметрами. Там можно посадить обработчики на события перед отправкой,после получения ответа,в следствии ошибки при отправке запроса. Я им очень часто пользуюсь. Прогугли и посмотри примеры. С сервера можно отдавать данные в формате json . Это будет намного быстрее работать,чем хмл,или хтмл.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.06.2010, 10:43
Помогаю со студенческими работами здесь

Чат на php из интернета
Скачал чат на php из интернета, а когда я поднял его через xampp - а он выдают вот такую ошибку, при этом не работает вход сам в чат. ...

Нужен php чат!
Помогите,делаю одну вещь,и нужен php чат с такими требованиями: 1)Чат на php,но без mysql базы,но если будет будет отвечать остальным...

Как создать чат на php?
Как создать чат на php. Дайте кто-нибудь пособие или программы

Не работает чат (PHP+Ajax)
Не работает простейший чат на PHP и Ajax. Суть проблемы - не работают PHP-функции Send() и Load(). Версия PHP - 7. На PHP 5 все работает. ...

Php + jquery + mysqli чат
Хочу создать на сайте раздел онлайн чатов, где каждый сможет создать свою "беседу". Никак не пойму с чего начать и какую структура для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru