How to Easily Make Chat application with PHP + SQL
Today I will tell you about creating simple Chat application using our existing login system. This will useful and most simple solution. We will able to chat with our logged members. We will use database to store messages.
Here is a sample:
So download the example files and lets start coding!
Step 1. HTML
As usual, we start with the HTML.
This main chat window.
index.html
<frameset rows="65%,35%" framespacing="1" frameborder="yes" border="1" bordercolor="#FF0000">
<frame src="messages.php" name="main_frame">
<frame src="main.php" name="login_frame" scrolling="no" noresize target="middle">
</frameset>This is login form code.
login_form.html
<link type="text/css" rel="stylesheet" href="styles.css" /> <form class="login_form" method="post" action="main.php"> <div>Username: <input type="text" name="username" /></div> <div>Password: <input type="password" name="password" /></div> <div><input type="submit" value="Login" name="Login" /></div> </form> <div>You can use username "User1" or "User2" or "User3" and password "qwerty" to login in system</div>
Here are new 3 template files to chat (2 to messages box and 1 to send message form):
chat_begin.html
<link type="text/css" rel="stylesheet" href="styles.css" /> <div class="chat_main"> <h3>Chat</h3>
chat_end.html
</div>
chat_input.html
<link type="text/css" rel="stylesheet" href="styles.css" /> <form class="submit_form" method="post" action="main.php"> <div><input type="text" name="s_message" /><input type="submit" value="Say" name="s_say" /></div> </form> <div>You can type anything in chat</div>
Step 2. CSS
Here are used CSS styles.
styles.css
.login_form {
border: 1px solid #AAA;
padding:10px;
}
h3 {margin-top:3px;}
.chat_main {
border:1px solid #AAA;
-moz-box-shadow:0 0 10px #ccc;
-webkit-box-shadow: 0 0 10px #ccc;
width:350px;
padding:10px;
background:#f3f3f3;
}
.message {
border:1px solid #AAA;
margin:4px;
padding:5px;
-moz-border-radius:7px;
-webkit-border-radius:7px;
background:#ffffff;
}
.textf {
-moz-box-shadow:0 0 10px #CCCCCC;
-webkit-box-shadow:0 0 10px #CCCCCC;
border:1px solid #CCCCCC;
height:40px;
}
.submit {
-moz-border-radius:7px;
-webkit-border-radius:7px;
background:#F3F3F3;
border:1px solid #CCCCCC;
font-size:16px;
font-weight:bold;
height:35px;
margin-left:10px;
padding:5px;
}
.message span {
font-size:10px;
color:#888;
margin-left:10px;
}
.submit_form {
margin:10px 0px;
}Step 3. SQL
We will need to execute next SQL in our database.
CREATE TABLE `s_chat_messages` ( `id` INT(11) NOT NULL AUTO_INCREMENT , `user` VARCHAR(255) NOT NULL , `message` VARCHAR(255) NOT NULL , `when` INT(11) NOT NULL , PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Step 4. PHP
As you remember – we had ready easy authentication system. I moved it to external library file (inc/login.inc.php). This will useful for us – now code more structured and it comfortable to use in different places of code.
After I created new library to work with chat (inc/chat.inc.php). This class have next functions:
acceptMessages – function accept sent messages and store it in DB table
getMessages – return list of last 15 messages
After I created 2 last files: messages.php and main.php. First file used to draw list of messages. It have autoupdate each 5 second (I thing this is enough to our chat). Second draw login form and input field of chat. Where we due logged able to post text in chat.
Ok, here are all used PHP files:
main.php
<?php
// set error reporting level
if (version_compare(phpversion(), "5.3.0", ">=") == 1)
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
else
error_reporting(E_ALL & ~E_NOTICE);
require_once('inc/login.inc.php');
require_once('inc/chat.inc.php');
// initialization of login system and generation code
$oSimpleLoginSystem = new SimpleLoginSystem();
$oSimpleChat = new SimpleChat();
// draw login box
echo $oSimpleLoginSystem->getLoginBox();
// draw chat application
$sChatResult = 'Need login before using';
if ($_COOKIE['member_name'] && $_COOKIE['member_pass']) {
if ($oSimpleLoginSystem->check_login($_COOKIE['member_name'], $_COOKIE['member_pass'])) {
$sChatResult = $oSimpleChat->acceptMessages();
}
}
echo $sChatResult;
?>messages.php
<meta http-equiv="refresh" content="5">
<?php
require_once('inc/chat.inc.php');
$oSimpleChat = new SimpleChat();
echo $oSimpleChat->getMessages();
?>inc/chat.inc.php
<?php
// simple chat class
class SimpleChat {
// DB variables
var $sDbName;
var $sDbUser;
var $sDbPass;
// constructor
function SimpleChat() {
//mysql_connect("localhost","username","password");
$this->sDbName = 'database_name';
$this->sDbUser = 'username';
$this->sDbPass = 'password';
}
// adding to DB table posted message
function acceptMessages() {
if ($_COOKIE['member_name']) {
if(isset($_POST['s_say']) && $_POST['s_message']) {
$sUsername = $_COOKIE['member_name'];
//the host, name, and password for your mysql
$vLink = mysql_connect("localhost", $this->sDbUser, $this->sDbPass);
//select the database
mysql_select_db($this->sDbName);
$sMessage = mysql_real_escape_string($_POST['s_message']);
if ($sMessage != '') {
mysql_query("INSERT INTO `s_chat_messages` SET `user`='{$sUsername}', `message`='{$sMessage}', `when`=UNIX_TIMESTAMP()");
}
mysql_close($vLink);
}
}
ob_start();
require_once('chat_input.html');
$sShoutboxForm = ob_get_clean();
return $sShoutboxForm;
}
function getMessages() {
$vLink = mysql_connect("localhost", $this->sDbUser, $this->sDbPass);
//select the database
mysql_select_db($this->sDbName);
//returning the last 15 messages
$vRes = mysql_query("SELECT * FROM `s_chat_messages` ORDER BY `id` ASC LIMIT 15");
$sMessages = '';
// collecting list of messages
if ($vRes) {
while($aMessages = mysql_fetch_array($vRes)) {
$sWhen = date("H:i:s", $aMessages['when']);
$sMessages .= '<div class="message">' . $aMessages['user'] . ': ' . $aMessages['message'] . '<span>(' . $sWhen . ')</span></div>';
}
} else {
$sMessages = 'DB error, create SQL table before';
}
mysql_close($vLink);
ob_start();
require_once('chat_begin.html');
echo $sMessages;
require_once('chat_end.html');
return ob_get_clean();
}
}
?>
inc/login.inc.php
<?
// class SimpleLoginSystem
class SimpleLoginSystem {
// variables
var $aExistedMembers; // Existed members array
// constructor
function SimpleLoginSystem() {
$this->aExistedMembers = array(
'User1' => 'd8578edf8458ce06fbc5bb76a58c5ca4',
'User2' => 'd8578edf8458ce06fbc5bb76a58c5ca4',
'User3' => 'd8578edf8458ce06fbc5bb76a58c5ca4'
);
}
function getLoginBox() {
ob_start();
require_once('login_form.html');
$sLoginForm = ob_get_clean();
$sLogoutForm = '<a href="'.$_SERVER['PHP_SELF'].'?logout=1">logout</a>';
if ((int)$_REQUEST['logout'] == 1) {
if (isset($_COOKIE['member_name']) && isset($_COOKIE['member_pass']))
$this->simple_logout();
}
if ($_REQUEST['username'] && $_REQUEST['password']) {
if ($this->check_login($_REQUEST['username'], MD5($_REQUEST['password']))) {
$this->simple_login($_REQUEST['username'], $_REQUEST['password']);
return 'Hello ' . $_REQUEST['username'] . '! ' . $sLogoutForm;
} else {
return 'Username or Password is incorrect' . $sLoginForm;
}
} else {
if ($_COOKIE['member_name'] && $_COOKIE['member_pass']) {
if ($this->check_login($_COOKIE['member_name'], $_COOKIE['member_pass'])) {
return 'Hello ' . $_COOKIE['member_name'] . '! ' . $sLogoutForm;
}
}
return $sLoginForm;
}
}
function simple_login($sName, $sPass) {
$this->simple_logout();
$sMd5Password = MD5($sPass);
$iCookieTime = time() + 24*60*60*30;
setcookie("member_name", $sName, $iCookieTime, '/');
$_COOKIE['member_name'] = $sName;
setcookie("member_pass", $sMd5Password, $iCookieTime, '/');
$_COOKIE['member_pass'] = $sMd5Password;
}
function simple_logout() {
setcookie('member_name', '', time() - 96 * 3600, '/');
setcookie('member_pass', '', time() - 96 * 3600, '/');
unset($_COOKIE['member_name']);
unset($_COOKIE['member_pass']);
}
function check_login($sName, $sPass) {
return ($this->aExistedMembers[$sName] == $sPass);
}
}
?>
View Live Demo of our sample
Conclusion
I described how to make easy chat application based on PHP and MySQL. You can use this material to create own scripts into your startups. Good luck!
| I am web developer with huge experience (in web languages and even in system languages). Also I am the founder of current website (and several another). I like to write blogs about web development/design. Feel free to Follow us on Twitter: tweetmeme_screen_name='AramisGC'; | If you Enjoyed our article don't forget to Share the love with your friends. |


…. so if you want your blog subscribers to contact you about something or anything…. put in your very own “Chat Room”…. a great tutorial for adding one to your own blog, very cool !!
Hi thanks for your help, I used the code and every thing seems ok except that in this way two users can have a same user_name or name in your s_members table because the primary key is id. also we cannot have primary key (id, name) because the id differes for every user but they may have same names. I am doing this for my project and I am really in hurry, I do not know what to do. please help me. Thanks.
I found that we can use unique keys, they work almost like primary keys. if you add the below code at the end of the code for your s_members table :
UNIQUE name (name)
the users cannot have same user names.
Hello, thanks for informative comment,
yes, you can (and this will better) to keep your members in own SQL table (as example `s_members`). And of course name of user (Nickname field) should be unique. In this case you will able easy to separate content. So, each user will have own ID (unsigned, auto_increment PRIMARY KEY). And you will able to link this ID with any content. As example chat message owner ID. In current article I using name of member, but you can use ID too (even will better).
Thank u very much for this application…… it works perfect 4 me.
i need code for timer
can u please
Timer for what?
hi.. i’m beginner to learn chat application.. now, im using wamp server as my localhost.. but still cannot run and error.. please help me
Yes, sure, just tell us which error you got (no need show real url – but you can show error itself)
HI,i get this error yet I have the class SimpleLoginSystem in login.inc.php
Fatal error: Class ‘SimpleLoginSystem’ not found in D:\wamp\www\source\main.php on line 17
What do i do
Firstly make sure that you have this file:
D:\wamp\www\source\inc\login.inc.php
just because this file already have class SimpleLoginSystem
.. try to re-link this from another place as example
i only skimmed, and new at coding as everyone here is…
however, im wondering about custom colors etc… is this possible with this example?
thank you for your tutorial
2 no name
Of course possible. Look to my CSS file
That was nice application ………
But I need something that looks like Facebook chat….
Please send the code to my mail
Thanks in advance
2 sairam
I see, but, this can be like custom work, or you asking me to prepare one of next my posts about creating similar chats as facebook have?
It’s a nice php chat example. Good Job!
Awesome stuff.
I had a question is this chat application works on word press . Because i had a word press site for my friends. Please replay me. Am bit worry to work with database.
2 Hypertargeting
Don`t worry – it can be Any script. I don`t making tutorials for some particular scripts, this is for everything
Hey man this is very impressive id like to refference this in a current academic project iam working on hope thats okay. thanks
How are you. I created all these files and tried to run them. Am using a xampp database. Am having a problem such that when I try to run the main.php file, after login in with the username and password, am getting these error messages:
Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\My Site\Web Page\Another\main.php:9) in C:\xampp\htdocs\My Site\Web Page\Another\login.inc.php on line 125
Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\My Site\Web Page\Another\main.php:9) in C:\xampp\htdocs\My Site\Web Page\Another\login.inc.php on line 127
Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\My Site\Web Page\Another\main.php:9) in C:\xampp\htdocs\My Site\Web Page\Another\login.inc.php on line 111
Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\My Site\Web Page\Another\main.php:9) in C:\xampp\htdocs\My Site\Web Page\Another\login.inc.php on line 115. he t
When I check in my database, am seeing nothing in the table s_chat_messages. Where did I go wrong. Will appreciate very much if i get a response from you. Thank you.
2 Biggy
Hello, thanks, we are fine. By the way, why
inc\login.inc.php
contain >125 lines in your version? By default it contain only 72 lines. Check – maybe you Printing some empty row in these places?
Thanks Admin for the effort you made trying to solve my problem. I deleted all the empty lines in my php and html documents, but the following errors are still coming out.
Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\My Site\Web Page\Another\main.php:8) in C:\xampp\htdocs\My Site\Web Page\Another\login.inc.php on line 56
Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\My Site\Web Page\Another\main.php:8) in C:\xampp\htdocs\My Site\Web Page\Another\login.inc.php on line 57
Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\My Site\Web Page\Another\main.php:8) in C:\xampp\htdocs\My Site\Web Page\Another\login.inc.php on line 50
Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\My Site\Web Page\Another\main.php:8) in C:\xampp\htdocs\My Site\Web Page\Another\login.inc.php on line 52.
Am currently working on a project that is due very soon. Will be happy to receive ideas on how to deal with this. Thank you
what of having a moderator to chatting with logged user
Hi ,Plz tell me how to add this into blogger?
2 rithi,
You can create separated page with chat application, or embed this into any your existed pages.
Nice source of information………………
But there is a problem in script……….it is XSS-able.
Anyone can easy XSS attack on this script.
Hello Saleem,
What do you mean – ‘xss-able’ ?
acceptMessages can accept custom-made scripts? You always can enhance this function if need (add extra protection methods)
Hi moses,
In this case you have to create own necessary functional to moderate messages (maybe using some special member with extra possibilities)
Hello Biggy,
Sorry for long response. You always can ask me by PM (email) in our case. Or, try to understand (or tell here) what you have at your line 52?
Do you know how I could add the following features:
*Registration
*Make your own chat box
*Ranking system
*Private messages
*Avatars
*Profiles
*Banning system
PLEASE get back to me on this. Email me. darrendude104@gmail.com
Thanks for your comment Darren,
I will try to organize my time and start new thread of articles regarding creating powerful chat system
Fatal error: Class ‘SimpleLoginSystem’ not found in C:\wamp\www\source\main.php on line 17 …..What do i do
I CANT THE CODE..PLS SOMEONE HELP ME…I AM NEW WEB DEVELOPER…..PLS MAIL ME COMPLETE CODE
Hi,
Complete code always here: http://www.script-tutorials.com/demos/6/source.zip
Make sure that you have inc\chat.inc.php file in your ‘www’
Awesome coding.By this coding i create the chatting facility.thanks a lot