Перед созданием самого чата нужно создать базу данных "messages_db" и таблицу "messages" на Вашем сервере.
Поля таблицы "messages":
Теперь можно приступить к самому программированию.
Подключаемся к db (создаём файл db.php):
Выводить существующие сообщения и отправлять новые будем из index.php Для вывода используем table, для ввода form c ajax запросом, вместо стандартного редиректа.
Для ввода новых сообщений используем Ajax. Создадим файл script.js:
Форма создана, сообщение отправляется - осталось принять и сохранить данные. Создаём файл post-message.php:
В такой чат Ваше сообщение будет добавляться сразу.
Но если кто-то другой напишет в него сообщение, то у Вас оно отобразится только после перезагрузки страницы.
Будет отлично, если Вы добавите возможность видеть новые сообщения сразу (для самостоятельной тренировки).
p.s. Урок и так получился нагруженный. Весь код - проверен и работоспособен.
Спасибо за внимание.
- id - INTEGER index autoincrement (индекс с автоинкрементом),
- author - TEXT,
- message - TEXT
1 2 3 4 5 6 7 | CREATE TABLE messages ( id INT PRIMARY KEY AUTO_INCREMENT, author TEXT, message TEXT ); CREATE UNIQUE INDEX messages_id_uindex ON messages (id); |
1 2 3 4 5 6 7 8 9 | <?php //db.php function db() { $dsn = "mysql:dbname=messages_db;host=127.0.0.1;port=3306" ; $user = "root" ; $password = "" ; return new \PDO( $dsn , $user , $password ); } ?> |
Выводить существующие сообщения и отправлять новые будем из index.php Для вывода используем table, для ввода form c ajax запросом, вместо стандартного редиректа.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <? php //index.php require __DIR__ . '/db.php'; $ pdo = db (); //Текст запроса для получения всех сообщений $ query = 'SELECT * FROM `messages`' ; ?> < table id = "messages" > <? php //Получение всех сообщений и вывод в цикле ?> <? php foreach ($pdo->query($query) as $message) { ?> < tr > < td ><? php echo $message['author']; ?></ td > < td ><? php echo $message['message']; ?></ td > </ tr > <? php } ?> </ table > < form id = 'post-message' action = "post-message.php" method = "post" > < label >Введите Ваше имя: </ label > < input type = "text" name = "author" >< br > < label >Введите сообщение: </ label > < input type = "text" name = "message" >< br > < input type = "submit" value = "Отправить" >< input type = "reset" > </ form > < script src = "script.js" ></ script > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //script.js $( "#post-message" ).on( "submit" , function ( event ) { event.preventDefault(); var form = this ; $.ajax({ url: $(form).attr( "action" ), data: $(form).serialize(), method: "POST" , success: function () { $( "#messages" ).append( "<tr><td>" + $(form).find( "input[name=author]" ).val() + "</td><td>" + $(form).find( "input[name=message]" ).val() + "</td></tr>" ); $(form).find( "input[name=author]" ).val( "" ); $(form).find( "input[name=message]" ).val( "" ); } }); }); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php //post-message.php if (isset( $_REQUEST [ "author" ]) && isset( $_REQUEST [ "message" ]) ){ require __DIR__ . '/db.php' ; $pdo = db(); $sql = "INSERT INTO messages (author, message) VALUES (:author, :message)" ; $messageSvr = $pdo ->prepare( $sql ); $messageSvr ->bindParam( ':author' , $_REQUEST [ "author" ]); $messageSvr ->bindParam( ':message' , $_REQUEST [ "message" ]); if (! $messageSvr ->execute()) { throw new \Exception( "Cannot save message" ); } } else { throw new \Exception( "There is no author or message" ); } |