Anda di halaman 1dari 5

PHP/MySQL - Chat

: (ajevremovic@singidunum.ac.rs)

1.

(, . chat). ( Poruka)
:
ID -
Autor -
IP -
Vreme -
Sadrzaj -
-
.
.

5
(
).

2.
HTML/PHP :
prijava.html ( )
prijava.php ( )
index.php ( )
dodavanje.php ( index.php
)
. index.php
dodavanje.php prijava.html
.
3.

. SQL :
CREATE TABLE Poruka (
ID int unsigned NOT NULL auto_increment,
Autor varchar(255) default NULL,
IP varchar(255) default NULL,
Vreme int(10) unsigned default NULL,
Sadrzaj text,
PRIMARY KEY (`ID`)
);

prijava.html
HTML prijava.php:
<html>
<head>
<title>Formular za prijavljivanje</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
@import url("prijava.css");
</style>
</head>
<body>
<form action="prijava.php" method="post">
Nadimak: <input type="text" name="Autor" />
<hr />
<button type="submit">Prijavljivanje</button>
</form>
</body>
</html>

prijava.php ,
index.php.

prijava.html. prijava.php :
<?php
// Pristup sesijskoj memoriji (promenljiva $_SESSION)
session_start();

// Provera nadimka i smestanje u sesiju ili povratak na formular


$Autor = trim(@$_REQUEST['Autor']);
if ($Autor != '')
{
$_SESSION['Autor'] = $Autor;
die(header('Location: index.php'));
}
else
{
die(header('Location: prijava.html'));
}

?>

index.php -
.
20 , .
ID Vreme.
dodavanje.php.
. index.php :
<?php
// Pristup sesijskoj memoriji (promenljiva $_SESSION)
session_start();
// Provera da li je korisnik prijavljen
if (!isset($_SESSION['Autor'])) die(header('Location: prijava.html'));
?>
<html>
<head>
<title>askanje</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
@import url("index.css");
</style>
<script type="text/javascript">
// Stranica se automatski osvezava na svake 3 sekunde ukoliko nema unosa
setTimeout("Osvezavanje();",5000);
function Osvezavanje()
{
var Unos = document.getElementById('Sadrzaj').value;
if (Unos.length == 0) location.reload(true);
}
</script>
</head>
<body onload="document.getElementById('Sadrzaj').focus();">

<!-- Ovo je deo za prikazivanje poruka -->


<div id="Poruke">
<?php
// Povezivanje na server BP
$DB = mysql_connect('192.168.55.231', 'korisnik', 'lozinka');
if (!$DB) die('Problem sa povezivanjem na server BP.');

// Izbor radne BP
if (!mysql_select_db('chat')) die('Problem sa izborom radne BP.');

// Ucitavanje poslednjih 20 poruka u redosledu po kome su postavljane


$Upit = 'select * from Poruka where ID > (select max(ID) from Poruka)-20 order by ID asc;';
$Rezultat = mysql_query($Upit, $DB);
if (mysql_error($DB)) die(mysql_error($DB));

// Prikazivanje poruka
while ($Poruka = mysql_fetch_object($Rezultat))
{
echo "<div class='Poruka' title='IP: {$Poruka->IP}'>\n";
echo " <span class='Autor'>{$Poruka->Autor}</span>\n";
echo " <span class='Vreme'>[".date('H:i:s', $Poruka->Vreme)."]</span>\n";
echo " <span class='Sadrzaj'>{$Poruka->Sadrzaj}</span>\n";
echo "</div>\n";
}
?>
</div>

<hr />

<!-- Ovo je formular za dodavanje poruka -->


<form action="dodavanje.php" method="post">
<?php echo $_SESSION['Autor']; ?>: <input type="text" name="Sadrzaj" id="Sadrzaj" />
<button type="submit">Dodavanje</button>
</form>

</body>
</html>
JavaScript :
1. .

( onload body).
2. Osvezavanje.
, ,
.
.
dodavanje.php . IP
$_SERVER.
index.php. :
<?php
// Pristup sesijskoj memoriji (promenljiva $_SESSION)
session_start();

// Provera da li je korisnik prijavljen


if (!isset($_SESSION['Autor'])) die(header('Location: prijava.html'));

// Provera da li je korisnik uneo poruku


if (trim(@$_REQUEST['Sadrzaj']) == '') die(header('Location: index.php'));

// Povezivanje na server BP
$DB = mysql_connect('192.168.55.231', 'korisnik', 'lozinka');
if (!$DB) die('Problem sa povezivanjem na server BP.');

// Izbor radne BP
if (!mysql_select_db('chat')) die('Problem sa izborom radne BP.');

// Normalizacija ulaznih podataka


$Autor = mysql_real_escape_string($_SESSION['Autor']);
$IP = $_SERVER['REMOTE_ADDR'];
$Vreme = time();
$Sadrzaj = mysql_real_escape_string(trim($_REQUEST['Sadrzaj']));

// Formiranje upita i dodavanje poruke


$Upit = "insert into Poruka (Autor, IP, Vreme, Sadrzaj) values ('$Autor', '$IP', '$Vreme',
'$Sadrzaj');";
$Rezultat = mysql_query($Upit, $DB);
if (mysql_error($DB)) die(mysql_error($DB));

// Preusmeravanje korisnika na index.php


die(header('Location: index.php'));
?>

(prijava.html) (index.php)
prijava.css index.css. prijava.css :
*
{
font-family: Verdana;
font-size: 12px;
}

form
{
width: 600px;
margin-top: 100px;
margin-bottom: 100px;
margin-left: auto;
margin-right: auto;
border: 20px solid #CCC;
padding: 30px;
text-align: right;
}

index.css :
*
{
font-family: Verdana;
font-size: 12px;
}

div#Poruke
{
width: 600px;
height: 400px;
margin: 10px;
margin-left: auto;
margin-right: auto;
overflow-y: scroll;
}

div.Poruka span.Autor { font-weight: bold; }

form
{
width: 600px;
height: 300px;
margin: 10px;
margin-left: auto;
margin-right: auto;
}

input { width: 400px; }