Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

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 1464x (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 (65)

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

Co konkrétně se ti tam nezdá? Když opominu, že tam používá mysql_, tak na blbnutí pro začátečníky to je docela fajn. SQL injekce tam nemá, je tam nějaký rámec. Já nevím, nepřijde mi to tak hrozné.

Odpovědět  +2 9.6.2015 22:19
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
Richard
Člen
Avatar
Odpovídá na David Čápka
Richard:9.6.2015 22:44

Tak hlavně to mysql_*, to je největší průser (a možná jsem jen detailista a je to jediný průser), spíš jde o tu ideu toho aby se nezapomínalo na staré články jak jsem psal ve třetím odstavci.

Takhle od pohledu mi tam úplně nesedí to jQuery - používá se jen na reload (tzn docela zbytečná věc navíc), kdybychom chtěli ukázat práci s jQuery, zrovna u chatu je padesát super možností, škoda je nevyužít (a škoda tím nevyhodit rámy). Slušelo by tomu trochu sex appealu (nejen v kódu) a hlavně, na to že je to pro začátečníky, je tam dost málo vysvětlující omáčky okolo, sice je to okomentované, jako jako začátečník bych z toho moc moudrý nebyl.

Odpovědět 9.6.2015 22:44
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Richard
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
Matúš Petrofčík
Šéfredaktor
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. ledna 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. ledna 16:55
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 75. Zobrazit vše