Тема: php + sql чат

здравствуйте. загорелся идеей написать простенький чат на php.
почему php? удобно, более-менее понятно..
сразу же начал искать готовые скрипты чатов, естесственно их тысячи, и половина не работает.
нашел один, поставил (можете посмотреть тут chat196.vov.ru)
как зайдете - сразу увидите проблемы.

в общем попробую изложить свои желания по чату для дальнейшей их реализации:
1. страница index.php - начальная. на ней должна присутствовать только форма для авторизации (логин/пароль). самой по себе регистрации на сайте не будет - я буду вносить логин и пароль в базу данных, ну и давать их пользователю.
2. сама страница чата. хотелось изначально делать ее фреймами, чтобы реализовать автообновление. но команда "refresh" для фрейма с определенным интервалом - не выход, ибо на мобильных устройствах пропадает набранный текст при обновлении страницы.
3. ну и соответственно должен быть txt файл, в котором будут храниться последние n сообщений.

на данный момент я мучаюсь с базой данных логинов/паролей.
на компьютере установлен денвер.
phpmyadmin работает хорошо, но не понимаю, как)
создал бд, далее видимо нужно создать таблицу с колонками "логин" и "пароль". ну и както ее заполнять - не понимаю как.
пользователи все равны, админа (как и админ-панели) пока не предвидится.

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

2

Re: php + sql чат

кините ссылки на конкретные (!) статьи/видео

http://blog.elfet.ru/jquery/php-ajax-chat/
http://ruseller.com/lessons.php?rub=37&id=607
http://wareznika-net.ru/ajax-web-chat-php-mysql.php

Поисковик выдает море решений по фразе: чат на php + ajax

3

Re: php + sql чат

вопрос стоит в другом: как правильно средствами phpmyadmin создать базу с двумя полями, внести в нее 2-3 человека и вытянуть эту базу с денвера для последующего использования на сервере

4 (изменено: DmitryV, 2011-01-29 18:39:04)

Re: php + sql чат

Создать базу -> создать таблицу -> указать количество столбцов -> присвоить имена им и значения какие нужны, все далее в скриптах подключаться к базе и mysql.

5

Re: php + sql чат

все равно не пойму..
создал бд
создал таблицу посредством sql запроса:

CREATE TABLE users (
login text NOT NULL,
password text NOT NULL
) TYPE=MyISAM;

а дальше? как добавить пользователя в нее?

6

Re: php + sql чат

DimkaDimka сказал:

создал таблицу посредством sql запроса:

Немного измените структуру таблицы, чтобы появилось поле идентификатора id и ограничьте текстовые поля в 100 символов каждое.

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `login` varchar(100) NOT NULL,
  `password` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM ;

В phpMyAdmin пользователя (запись) можно добавить выбрав таблицу users и перейдя во вкладку "Вставить", где надо заполнять только поя login и password, поле id создастся автоматически.

Теперь собственно по чату: ни в коем случае не делайте его с автообновлением фрейма - это будет выглядеть просто жутко. Используйте технологию Ajax, то есть серверную часть на PHP и клиентскую на JavaScript.

Примеры Ajax можно найти здесь AJAX Getting Started.

Как выбрать данные из MySQL с помощью PHP смотрите здесь: mysql_fetch_assoc

7

Re: php + sql чат

спасибо большое
решил проблему так: оставил в таблице users всего два поля: login и password
создал пользователя, проверил коннект php и базы данных - все работет!
в общем проблема такая:
каким образом после авторизации передать &name в chat.php, чтобы дальше сообщения писались от этого &name.
структура чата несколько сложновата и врятли я смогу объяснить все словами, поэтому залил весь архив целиком.
помогите пожалуйста, люди добрые)
проблема, как я понимаю в файле avt.php, конкретно в if.
сам чат: http://www.sendspace.com/file/cooggl

8

Re: php + sql чат

Либо записать логин и пароль пользователя в кукисы и во всех скриптах делать их проверку, либо записать в сессию, что этот посетитель уже вошел.

if (mysql_num_rows($sql) == 1) {
    session_start();
    $_SESSION['login'] = $_POST['login'];
    header('Location: chat.php');
// Это я не понял что такое    echo window.open(V+"chat.php", '_self');

} else {
    echo 'Неправильное имя или пароль';
}

В chat.php пишем сверху.

session_start();
if (!isset($_SESSION['login'])) {
    header('Location: avt.php');
}

9

Re: php + sql чат

спасибо большое)
теперь такая проблема: в окне чата не пишется ник отправителя, пишется только сам текст сообщения.
но, как мне сказали выше, рефреш фрейма - плохое решение, то буду думать что-нибудь про ajax.

10

Re: php + sql чат

DimkaDimka сказал:

в окне чата не пишется ник отправителя, пишется только сам текст сообщения.

Логин будет в переменной $_SESSION['login'], ничто не мешает его использовать.

11

Re: php + sql чат

Hanut, спасибо большое) внес коррективы и все заработало)
а над чем мне теперь заниматься: оптимизация, ajax или защита?
просто с ajaxом вообще никогда не имел дел..

12

Re: php + sql чат

DimkaDimka сказал:

а над чем мне теперь заниматься: оптимизация, ajax или защита?

Лучше сделайте хранение сообщений в базе данных, а не в текстовом файле.

Оптимизация и защита - это уже на ваше усмотрение. По Ajax я уже ссылки давал, но можете поискать статьи по-русски.

13

Re: php + sql чат

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

14

Re: php + sql чат

DimkaDimka сказал:

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

Я не представляю как это обновление будет выглядеть. Это же перезагрузка фрейма со всеми вытекающими. Не думаю, что вы найдете такой чат вообще, у которого будет перезагружаться фрейм.

15

Re: php + sql чат

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

16

Re: php + sql чат

DimkaDimka сказал:

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

Если вы хотите чему-то научиться, то лучше написать все самому с нуля. Если вам нужен чат для сайта, то ищите готовые варианты. Практически для любой CMS есть модуль чата.

17

Re: php + sql чат

мне нужен закрытый чат для себя)

18

Re: php + sql чат

давно здесь не был, учеба.. ну да ладно. начну по порядку
понял, что чат надо писать на php + ajax
пробовал несколько найденных в сети вариантов чатов и остановился на одном
вот он, поставил на бесплатный хост: www.chat196.u-gu.ru/?user=YOURNAME
проблема в том, что не работает автообновление((
архив с чатом: http://www.sendspace.com/file/01ygqp

19

Re: php + sql чат

Возмите не глючный проект - http://blog.elfet.ru/jquery/php-ajax-chat/

20

Re: php + sql чат

Логика автообновления чата на JavaScript следующая:
1) Устанавливается таймер на автоматический запрос серверу с временем последнего сообщения.
2) На сервере делается запрос в БД и если есть сообщения с временем большим, чем полученное, то отсылаем данные скрипту. Если в БД новых сообщений не было, то ничего не возвращаем.
3) Опять запускаем таймер автообновления на JavaScript.

21

Re: php + sql чат

DmitryV сказал:

Возмите не глючный проект - http://blog.elfet.ru/jquery/php-ajax-chat/

Если пройдете по этой ссылке, то увидите, что предпоследний комментарий - мой)
не работал он у меня, забросил..

Hanut, если вам не очень лениво, не могли бы вы скачать выложенный ранее мною архив?
как я понял, файл update.php и отвечает за автообновление?
не могли бы вы исправить ошибку в нем, если таковая есть? ну или комментариев в этот файл понатыкать, чтоб сам разбирался?
был бы очень признателен

22

Re: php + sql чат

Автообновление конкретно этого скрипта работает: http://www.chat196.u-gu.ru/?user=YOURNAME

В коде я ошибок не вижу. На всякий случай просто покажу кусок кода, который за это отвечает:
index.php

        $('body').everyTime('1s','timer1',function(){ // Обновлять каждую секунду '1s'.
            $.ajax({
                url:'update.php',
                dataType:'html',
                data: '<?php echo "user=".$user;?>',
                type:'POST',
                success: function(data){
                    if(data!=0){
                        $('ol#update').append(data);
                    }
                }
            });
        });

23

Re: php + sql чат

так не работает же автообновление...
Я сообщение ввожу, жму отправить, у меня это сообщение появляется. А новые сообщения от других пользователей - нет. Вот и думаю, чего же делать...

24

Re: php + sql чат

Думаю проблема в файле update.php:

// Регулярное выражение разбирает дату и время на составные части.
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]);
// Теперь идет проверка текущего времени и $comment_time; если значение меньше двух секунд и пользователь отличается от текущего, то идет отправка данных.
if((time() - $comment_time)<2 && $_POST['user']!=$row['user']){

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

25

Re: php + sql чат

код этого чата нашел я в интернете, поставил на денвер, и он не заработал. проблема была видимо вот в чем: таблица в бд имеет три поля - айди, никнейм и сообщения.
в файле chatajax.php была такая строка:
$sql = "INSERT INTO chat (`id`, `user`, `msg`,`time`) VALUES (NULL, '".$user."', '".$msg."',CURRENT_TIMESTAMP);";
судя по всему он отправлял в бд 4 поля, хотя в ней всего три. ну этот тайм я удалил - и все заработало.
соответственно вопрос: может так же нужно избавиться от тайма в файле update.php?