Jednoduchý chat v PHP

PHP Ostatní Jednoduchý chat v PHP

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V tomto tutoriálu si ukážeme jak si vytvořit jednoduchý chat v PHP.

Potřebujeme nějaký kvalitní webhosting, ne Endoru – ta to má zakázáno, ne Webzdarma nebo IC – ti mají děsně pomalou databázi

Takže, chat si uděláme do framesetu.

Připravíme si databázi.

Vytvořte si tabulku, např. "chat", se sloupci

  • ID - typ INT a zaškrtneme AUTO_INCREMENT
  • jmeno - typ TEXT, porovnání utf8_bin
  • zprava - typ TEXT, porovnání utf8_bin
  • cas - typ DATETIME

Vytvoříme si 7 souborů.

  1. databaze.php
  2. index.php
  3. chat_type.php
  4. chat_screen.php
  5. messages.php
  6. messages.js
  7. msg_write.php

Do souboru databaze.php si uložíme údaje do databáze, např.

<?php
if(!mysql_connect("kam","uzivatel","heslo")) // Připojí se k databázi
{die("Nepodařilo se připojit k databázi");} // pokud selže připojení, vyhodí chybu

if(!mysql_select_db("databaze")) // vybere databázi
{die("Nepodařilo se vybrat databázi");} // pokud selže výběr databáze, vyhodí chybu

mysql_query("SET NAMES `utf-8`");  // nastaví kódování UTF
?>

Do souboru index.php napíšeme

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Chat</title>
</head>
<frameset rows="*, 100" cols="*">
<frame src="chat_screen.php" name="chat-screen">
<frame src="chat_type.php" name="chat-type">
</frameset>
</html>

Jdeme dál, do souboru chat_screen.php. Zde se budou zobrazovat zprávy. Soubor vypadá takto:

<script type="text/javascript" src="messages.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div id="messages"></div>

Soubor chat_type.php slouží k zápisu zprávy. Vložíme:

<?php session_start(); //použijeme pro uložení jména ?>
<br><br>
<form action="msg_write.php" method="post">
<input type="text" name="jmeno" <?php if(isset($_SESSION['jmeno'])){echo('value="' . $_SESSION["jmeno"] . '" ');} ?> > <input type="text" name="zprava"><input type="submit" value="Pošli !">
</form>

Nyní vkládání zprávy do databáze. Do souboru msg_write.php si vložíme:

<?php
session_start(); // Slouží pro uložení jména
include('databaze.php'); // includuje soubor s údaji do databáze
$jmeno = mysql_real_escape_string($_POST['jmeno']); // Ochrana proti SQL injekci
$zprava = mysql_real_escape_string($_POST['zprava']);

if($jmeno != "" || $zprava != "") // Pokud jméno a zpráva něco obsahuje (není prázdné)
{
mysql_query("INSERT INTO `chat`(`jmeno`, `zprava`,`cas`) VALUES ('$jmeno','$zprava',Now())"); // Vloží do databáze... vkládáme pouze do jméno, zpráva a datum, ID se vloží samo
$_SESSION['jmeno'] = $jmeno; // Nastaví jméno
header("Location: chat_type.php"); // Vrátí se zpět k psaní zprávy
}
else // Pokud je něco prázdné
{
header("Location: chat_type.php"); // Vrátí se zpět k psaní zprávy
}
?>

Nyní zobrazování zpráv. Do souboru messages.php vložíme:

<?php
include('databaze.php'); // Includuje údaje pro připojení k DB

$vyber = mysql_query("SELECT * FROM `chat` ORDER BY `cas` DESC"); // Vybere z tabulky chat, seřazeno podle času
while($radek = mysql_fetch_assoc($vyber)) // Dokud není na konci, vybírá zprávy
{
echo htmlspecialchars($radek['cas'] . " ~ " . $radek['jmeno'] . " ~ " . $radek['zprava']); echo("<br><br>"); // Vypíše zprávy, htmlspecialchars zakazuje HTML
}
?>

Aktualizaci zpráv uděláme pomocí JavaScriptu, přesněji technologií AJAX. Do souboru messages.js vložíme:

function getMessages(letter) {
     var div = $("#messages");
     $.get('messages.php', function(data) {
               div.html(data);
          });
}

setInterval(getMessages, 2000);

2000 je čas aktualizace v milisekundách, příliš malé hodnoty budou zatěžovat server.


 

Stáhnout

Staženo 1527x (2.56 kB)
Aplikace je včetně zdrojových kódů v jazyce php

 

 

Článek pro vás napsal Daniel Vítek
Avatar
Jak se ti líbí článek?
5 hlasů
Primárně PHP programátor, rád si hraje s Arduinem a píše články do sekce Batch.
Aktivity (1)

 

 

Komentáře
Zobrazit starší komentáře (67)

Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:9.6.2015 22:58

Mně tenhle nepřijde tak hrozný. Až se tu ty hlavní seriály dopíší (to by mělo být do konce roku), tak budu dělat nějakou revizi. Také zde chci udělat možnost "Navrhnout úpravu", zatím do těchto funkcí příliš neinvestujeme vývojový čas, materiály jsou tu v porovnání se zbytkem českého internetu v podstatě úplně nové :)

Odpovědět  +2 9.6.2015 22:58
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Vojtěch Jedlička:9.3.2016 21:25

U toho ajaxu, pochopil jsem správně ze to vola ten soubor messages.php a to co ten soubor vypíše hodí do toho divu?

 
Odpovědět  +1 9.3.2016 21:25
Avatar
Šimon Rataj
Člen
Avatar
Šimon Rataj:2.6.2016 19:05

V PHP 7 už je rozšíření MySQL original API vymazáno, teď je lepší přejít na mysqli či PDO.

Editováno 2.6.2016 19:05
 
Odpovědět  +1 2.6.2016 19:05
Avatar
Odpovídá na Šimon Rataj
Matúš Petrofčík:2.6.2016 19:30

Ja by šiel určite do PDO.

Odpovědět  +1 2.6.2016 19:30
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Šimon Rataj
Člen
Avatar
Odpovídá na Matúš Petrofčík
Šimon Rataj:3.6.2016 16:21

Já pracuji na projektu SimonMySQL, je to podobné jako PDO, ale na ovládání dat s tabulky nepotřebuješ SQL. ;-)

 
Odpovědět 3.6.2016 16:21
Avatar
Matúš Priezvisko:6.7.2016 20:14

Dobrý deň, vedeli by ste mi niekto poradiť? Spravil som si tabulku na http://localhost/phpmyadmin/ ale neviem ako to pripojiť, vždy mi vypíše iba: Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:\xampp\htdoc­s\chat\databa­ze.php:2 Stack trace: #0 C:\xampp\htdoc­s\chat\messages­.php(2): include() #1 {main} thrown in C:\xampp\htdoc­s\chat\databa­ze.php on line 2. Zmenil som meno a aj heslo...ak mi niekto vie poradiť, ocenil by som to, ďakujem.

Editováno 6.7.2016 20:15
 
Odpovědět 6.7.2016 20:14
Avatar
Petr Linhart
Člen
Avatar
Odpovídá na Matúš Priezvisko
Petr Linhart:20.8.2016 1:06

Ahoj,
podívej se do php info jestli máš k dispozici MySql extension. Pokud máš verzi php > 5.5.x pak máš k dispozici pouze MySqli a PDO.

Zkus tedy opravit připojení na databázi na
if(!mysqli_con­nect("localhos­t","uzivatel","hes­lo"))

 
Odpovědět 20.8.2016 1:06
Avatar
Bart
Člen
Avatar
Bart:12.1.2017 16:55

Ahoj ... nepřemýšlel jsi o tutorialu na chat ve kterém se dají posílat soukromé zprávy?

 
Odpovědět  +1 12.1.2017 16:55
Avatar
Káťa Fialová:8.8.2017 13:59

Ahoj, jsem začátečnice :) dělala jsem chat podle tohoto návodu, ale sekla jsem se s touhle chybou: ( ! ) Warning: mysqli_fetch_as­soc() expects parameter 1 to be mysqli_result, null given in C:\wamp64\www\mes­sages.php....5 line
A s touhle:( ! ) Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\wamp64\www\mes­sages.php on line 4. Poradíte prosím?

 
Odpovědět 8.8.2017 13:59
Avatar
Odpovídá na Káťa Fialová
Káťa Fialová:8.8.2017 17:37

Už mi to nehází žádnou chybu, ale furt to nic nedělá..

 
Odpovědět 8.8.2017 17:37
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 77. Zobrazit vše