Aplicativo de chat de grupo online usando PHP
Pré-requisitos:
Conhecimento técnico:
- HTML
- CSS
- Javascript (básico)
- PHP (conectividade de banco de dados)
- Consultas SQL
Softwares a serem instalados:
- Servidor XAMPP: Este é um software livre que contém o servidor web Apache, sistema de gerenciamento de banco de dados para MySQL (ou MariaDB). Ele pode ser baixado gratuitamente no site oficial .
- phpmyadmin: É um software livre e de código aberto para administrar MySQL e MariaDB. Você pode baixá-lo do site oficial . O arquivo zip baixado deve ser colado no seguinte local.
C: \ xampp \ htdocs </ strong
- Descompactar o arquivo em qualquer outro lugar não funcionará bem. Basta descompactar o conteúdo que é suficiente.
- Editor de texto: qualquer editor de texto como o Notepad ++ ou o Notepad comum é suficiente para implementar isso.
- Navegador: Qualquer JavaScript habilitado será suficiente para executar o código.
O aplicativo de chat em grupo: Este é um aplicativo de chat em grupo simples para demonstrar a ideia daquele que você vê no WhatsApp messenger com o servidor localhost. Vários usuários podem vir e compartilhar suas opiniões aqui. O banco de dados MySQL armazena os bate-papos e os recupera de forma eficaz. Para implementar este aplicativo com sucesso, temos que construir CSS e JavaScript para estilizar a IU, parte HTML para renderizá-la, código PHP para armazenar e recuperar do banco de dados. Este aplicativo conterá dois campos: nome de usuário e mensagem de texto. As mensagens do usuário que enviar mensagens primeiro serão alinhadas à direita da sala de chat e as mensagens dos demais à esquerda. Vejamos a implementação.
CSS: coloque sob a tag de estilo ou em um arquivo de folha de estilo externo e vincule-o. Este arquivo CSS compreende os estilos para a sala de chat, as mensagens de texto e os balões de chat.
<style>
*{
box-sizing:border-box;
}
body{
background-color:#abd9e9;
font-family:Arial;
}
#container{
width:500px;
height:700px;
background:white;
margin:0 auto;
font-size:0;
border-radius:5px;
overflow:hidden;
}
main{
width:500px;
height:700px;
display:inline-block;
font-size:15px;
vertical-align:top;
}
main header{
height:100px;
padding:30px 20px 30px 40px;
background-color:#622569;
}
main header > *{
display:inline-block;
vertical-align:top;
}
main header img:first-child{
width:24px;
margin-top:8px;
}
main header img:last-child{
width:24px;
margin-top:8px;
}
main header div{
margin-left:90px;
margin-right:90px;
}
main header h2{
font-size:25px;
margin-top:5px;
text-align:center;
color:#FFFFFF;
}
main .inner_div{
padding-left:0;
margin:0;
list-style-type:none;
position:relative;
overflow:auto;
height:500px;
background-image:url(
https://media.geeksforgeeks.org/wp-content/cdn-uploads/20200911064223/bg.jpg);
background-position:center;
background-repeat:no-repeat;
background-size:cover;
position: relative;
border-top:2px solid #fff;
border-bottom:2px solid #fff;
}
main .triangle{
width: 0;
height: 0;
border-style: solid;
border-width: 0 8px 8px 8px;
border-color: transparent
transparent #58b666 transparent;
margin-left:20px;
clear:both;
}
main .message{
padding:10px;
color:#000;
margin-left:15px;
background-color:#58b666;
line-height:20px;
max-width:90%;
display:inline-block;
text-align:left;
border-radius:5px;
clear:both;
}
main .triangle1{
width: 0;
height: 0;
border-style: solid;
border-width: 0 8px 8px 8px;
border-color: transparent
transparent #6fbced transparent;
margin-right:20px;
float:right;
clear:both;
}
main .message1{
padding:10px;
color:#000;
margin-right:15px;
background-color:#6fbced;
line-height:20px;
max-width:90%;
display:inline-block;
text-align:left;
border-radius:5px;
float:right;
clear:both;
}
main .triangle2{
width: 0;
height: 0;
border-style: solid;
border-width: 0 8px 8px 8px;
border-color: transparent
transparent #58b666 transparent;
margin-left:20px;
clear:both
}
main .message2{
padding:10px;
color:#000;
margin-left:15px;
background-color:#58b666;
line-height:20px;
max-width:90%;
display:inline-block;
text-align:left;
border-radius:5px;
clear:both
}
main footer{
height:150px;
padding:20px 30px 10px 20px;
background-color:#622569;
}
main footer .input1{
resize:none;
border:100%;
display:block;
width:120%;
height:55px;
border-radius:3px;
padding:20px;
font-size:13px;
margin-bottom:13px;
}
main footer textarea{
resize:none;
border:100%;
display:block;
width:140%;
height:55px;
border-radius:3px;
padding:20px;
font-size:13px;
margin-bottom:13px;
margin-left:20px;
}
main footer .input2{
resize:none;
border:100%;
display:block;
width:40%;
height:55px;
border-radius:3px;
padding:20px;
font-size:13px;
margin-bottom:13px;
margin-left:100px;
color:white;
text-align:center;
background-color:black;
border: 2px solid white;
}
}
main footer textarea::placeholder{
color:#ddd;
}
</style>
Criação do banco de dados: Abra o painel de controle XAMPP em seu PC, clique no botão Iniciar para Apache e MySQL. Esta etapa é muito importante para criar um banco de dados e também para executar o aplicativo. Abra o navegador (principalmente Internet Explorer). Na barra de pesquisa, digite a linha fornecida abaixo.
localhost / phpmyadmin
Isso abrirá uma guia onde você pode criar um banco de dados. Para este aplicativo, um banco de dados denominado chat_app é criado. Uma tabela chamada chats com os campos “uname”, “msg”, “dt” é criada. Aqui, "uname" é do tipo varchar e denota o nome do usuário, a "msg" também é do tipo varchar e denota a mensagem enviada e "dt" denota data e hora (definida como tipo varchar para fins de formatação), objeto para armazenar a hora em que a mensagem foi enviada.
Código PHP para armazenamento no banco de dados MySQL: Para inserir os chats toda vez que um usuário pressionar o botão “enviar”, escreva este código antes da tag HTML inicial. Tente a conexão do servidor MySQL. Assumindo que você está executando o servidor MySQL com configuração padrão (usuário 'root' sem senha).
<?php
if (isset($_POST['submit'])){
$link = mysqli_connect("localhost",
"root", "", "chat_app");
// Check connection
if($link === false){
die("ERROR: Could not connect. "
. mysqli_connect_error());
}
// Escape user inputs for security
$un= mysqli_real_escape_string(
$link, $_REQUEST['uname']);
$m = mysqli_real_escape_string(
$link, $_REQUEST['msg']);
date_default_timezone_set('Asia/Kolkata');
$ts=date('y-m-d h:ia');
// Attempt insert query execution
$sql = "INSERT INTO chats (uname, msg, dt)
VALUES ('$un', '$m', '$ts')";
if(mysqli_query($link, $sql)){
;
} else{
echo "ERROR: Message not sent!!!";
}
// Close connection
mysqli_close($link);
}
?>
Código PHP e HTML para buscar e alinhar mensagens na sala de bate-papo: neste aplicativo de bate-papo, o bate-papo do primeiro usuário é alinhado ao lado direito. Se a próxima mensagem também for do mesmo usuário, ela também será alinhada ao lado direito da sala de chat. Se a mensagem for de qualquer outro usuário, essa mensagem será alinhada à esquerda. A função PHP para fazer isso é fornecida abaixo. Uma vez que a ação a ser realizada usando a função PHP está gravada no mesmo arquivo, na tag <form> , a ação é definida com o nome do mesmo arquivo. (Group_chat.php)
<body onload="show_func()">
<div id="container">
<main>
<header>
<img src="https://s3-us-west-2.amazonaws.com/
s.cdpn.io/1940306/ico_star.png" alt="">
<div>
<h2>GROUP CHAT</h2>
</div>
<img src="https://s3-us-west-2.amazonaws.com/
s.cdpn.io/1940306/ico_star.png" alt="">
</header>
<script>
function show_func(){
var element = document.getElementById("chathist");
element.scrollTop = element.scrollHeight;
}
</script>
<form id="myform" action="Group_chat.php" method="POST" >
<div class="inner_div" id="chathist">
<?php
$host = "localhost";
$user = "root";
$pass = "";
$db_name = "chat_app";
$con = new mysqli($host, $user, $pass, $db_name);
$query = "SELECT * FROM chats";
$run = $con->query($query);
$i=0;
while($row = $run->fetch_array()) :
if($i==0){
$i=5;
$first=$row;
?>
<div id="triangle1" class="triangle1"></div>
<div id="message1" class="message1">
<span style="color:white;float:right;">
<?php echo $row['msg']; ?>
</span> <br/>
<div>
<span style="color:black;float:left;
font-size:10px;clear:both;">
<?php echo $row['uname']; ?>, <?php echo $row['dt']; ?>
</span>
</div>
</div>
<br/><br/>
<?php
}
else
{
if($row['uname']!=$first['uname'])
{
?>
<div id="triangle" class="triangle"></div>
<div id="message" class="message">
<span style="color:white;float:left;">
<?php echo $row['msg']; ?></span> <br/>
<div>
<span style="color:black;float:right;
font-size:10px;clear:both;">
<?php echo $row['uname']; ?>,
<?php echo $row['dt']; ?>
</span>
</div>
</div>
<br/><br/>
<?php
}
else
{
?>
<div id="triangle1" class="triangle1"></div>
<div id="message1" class="message1">
<span style="color:white;float:right;">
<?php echo $row['msg']; ?></span> <br/>
<div>
<span style="color:black;float:left;
font-size:10px;clear:both;">
<?php echo $row['uname']; ?>,
<?php echo $row['dt']; ?>
</span>
</div>
</div>
<br/><br/>
<?php
}
}
endwhile; ?>
</div>
<footer>
<table>
<tr>
<th>
<input class="input1" type="text" id="uname"
name="uname" placeholder="From"></input>
</th>
<th>
<textarea id="msg" name="msg" rows='3'
cols='50' placeholder="Type your message">
</textarea>
</th>
<th>
<input class="input2" type="submit" id="submit"
name="submit" value="send"></input>
</th>
</tr>
</table>
</footer>
</form>
</main>
</div>
</body>
Agora as partes CSS, JavaScript, PHP e HTML estão juntas e todo o código é fornecido abaixo. Ele é salvo como Group_chat.php
<?php
if (isset($_POST['submit'])){
/* Attempt MySQL server connection. Assuming
you are running MySQL server with default
setting (user 'root' with no password) */
$link = mysqli_connect("localhost",
"root", "", "chat_app");
// Check connection
if($link === false){
die("ERROR: Could not connect. "
. mysqli_connect_error());
}
// Escape user inputs for security
$un= mysqli_real_escape_string(
$link, $_REQUEST['uname']);
$m = mysqli_real_escape_string(
$link, $_REQUEST['msg']);
date_default_timezone_set('Asia/Kolkata');
$ts=date('y-m-d h:ia');
// Attempt insert query execution
$sql = "INSERT INTO chats (uname, msg, dt)
VALUES ('$un', '$m', '$ts')";
if(mysqli_query($link, $sql)){
;
} else{
echo "ERROR: Message not sent!!!";
}
// Close connection
mysqli_close($link);
}
?>
<html>
<head>
<style>
*{
box-sizing:border-box;
}
body{
background-color:#abd9e9;
font-family:Arial;
}
#container{
width:500px;
height:700px;
background:white;
margin:0 auto;
font-size:0;
border-radius:5px;
overflow:hidden;
}
main{
width:500px;
height:700px;
display:inline-block;
font-size:15px;
vertical-align:top;
}
main header{
height:100px;
padding:30px 20px 30px 40px;
background-color:#622569;
}
main header > *{
display:inline-block;
vertical-align:top;
}
main header img:first-child{
width:24px;
margin-top:8px;
}
main header img:last-child{
width:24px;
margin-top:8px;
}
main header div{
margin-left:90px;
margin-right:90px;
}
main header h2{
font-size:25px;
margin-top:5px;
text-align:center;
color:#FFFFFF;
}
main .inner_div{
padding-left:0;
margin:0;
list-style-type:none;
position:relative;
overflow:auto;
height:500px;
background-image:url(
https://media.geeksforgeeks.org/wp-content/cdn-uploads/20200911064223/bg.jpg);
background-position:center;
background-repeat:no-repeat;
background-size:cover;
position: relative;
border-top:2px solid #fff;
border-bottom:2px solid #fff;
}
main .triangle{
width: 0;
height: 0;
border-style: solid;
border-width: 0 8px 8px 8px;
border-color: transparent transparent
#58b666 transparent;
margin-left:20px;
clear:both;
}
main .message{
padding:10px;
color:#000;
margin-left:15px;
background-color:#58b666;
line-height:20px;
max-width:90%;
display:inline-block;
text-align:left;
border-radius:5px;
clear:both;
}
main .triangle1{
width: 0;
height: 0;
border-style: solid;
border-width: 0 8px 8px 8px;
border-color: transparent
transparent #6fbced transparent;
margin-right:20px;
float:right;
clear:both;
}
main .message1{
padding:10px;
color:#000;
margin-right:15px;
background-color:#6fbced;
line-height:20px;
max-width:90%;
display:inline-block;
text-align:left;
border-radius:5px;
float:right;
clear:both;
}
main footer{
height:150px;
padding:20px 30px 10px 20px;
background-color:#622569;
}
main footer .input1{
resize:none;
border:100%;
display:block;
width:120%;
height:55px;
border-radius:3px;
padding:20px;
font-size:13px;
margin-bottom:13px;
}
main footer textarea{
resize:none;
border:100%;
display:block;
width:140%;
height:55px;
border-radius:3px;
padding:20px;
font-size:13px;
margin-bottom:13px;
margin-left:20px;
}
main footer .input2{
resize:none;
border:100%;
display:block;
width:40%;
height:55px;
border-radius:3px;
padding:20px;
font-size:13px;
margin-bottom:13px;
margin-left:100px;
color:white;
text-align:center;
background-color:black;
border: 2px solid white;
}
}
main footer textarea::placeholder{
color:#ddd;
}
</style>
<body onload="show_func()">
<div id="container">
<main>
<header>
<img src="https://s3-us-west-2.amazonaws.com/
s.cdpn.io/1940306/ico_star.png" alt="">
<div>
<h2>GROUP CHAT</h2>
</div>
<img src="https://s3-us-west-2.amazonaws.com/
s.cdpn.io/1940306/ico_star.png" alt="">
</header>
<script>
function show_func(){
var element = document.getElementById("chathist");
element.scrollTop = element.scrollHeight;
}
</script>
<form id="myform" action="Group_chat.php" method="POST" >
<div class="inner_div" id="chathist">
<?php
$host = "localhost";
$user = "root";
$pass = "";
$db_name = "chat_app";
$con = new mysqli($host, $user, $pass, $db_name);
$query = "SELECT * FROM chats";
$run = $con->query($query);
$i=0;
while($row = $run->fetch_array()) :
if($i==0){
$i=5;
$first=$row;
?>
<div id="triangle1" class="triangle1"></div>
<div id="message1" class="message1">
<span style="color:white;float:right;">
<?php echo $row['msg']; ?></span> <br/>
<div>
<span style="color:black;float:left;
font-size:10px;clear:both;">
<?php echo $row['uname']; ?>,
<?php echo $row['dt']; ?>
</span>
</div>
</div>
<br/><br/>
<?php
}
else
{
if($row['uname']!=$first['uname'])
{
?>
<div id="triangle" class="triangle"></div>
<div id="message" class="message">
<span style="color:white;float:left;">
<?php echo $row['msg']; ?>
</span> <br/>
<div>
<span style="color:black;float:right;
font-size:10px;clear:both;">
<?php echo $row['uname']; ?>,
<?php echo $row['dt']; ?>
</span>
</div>
</div>
<br/><br/>
<?php
}
else
{
?>
<div id="triangle1" class="triangle1"></div>
<div id="message1" class="message1">
<span style="color:white;float:right;">
<?php echo $row['msg']; ?>
</span> <br/>
<div>
<span style="color:black;float:left;
font-size:10px;clear:both;">
<?php echo $row['uname']; ?>,
<?php echo $row['dt']; ?>
</span>
</div>
</div>
<br/><br/>
<?php
}
}
endwhile;
?>
</div>
<footer>
<table>
<tr>
<th>
<input class="input1" type="text"
id="uname" name="uname"
placeholder="From">
</th>
<th>
<textarea id="msg" name="msg"
rows='3' cols='50'
placeholder="Type your message">
</textarea></th>
<th>
<input class="input2" type="submit"
id="submit" name="submit" value="send">
</th>
</tr>
</table>
</footer>
</form>
</main>
</div>
</body>
</html>
Etapas para executar o código:
- Salve o arquivo acima como Group_chat.php dentro de uma nova pasta em C: \ xampp \ htdocs . Por exemplo, coloquei o arquivo dentro da pasta chamada “myfiles” dentro da pasta htdocs .
- Antes de executar o aplicativo, crie um banco de dados seguindo as etapas fornecidas acima. Nomeie o banco de dados como chat_app . Nomeie a tabela como bate-papos .
- Verifique o painel de controle do XAMPP para garantir se o Apache e o MySQL estão em execução.
- Abra o navegador e digite localhost / myfiles . O índice desse diretório será aberto. Clique em Group_chat.php .
- Comece a enviar mensagens e veja o resultado
Saída:
Sala de chat vazia
usuário 1: Steve digita a mensagem e clica em enviar
Mensagem adicionada à sala de chat
outra mensagem de Steve
Ria digita sua segunda mensagem
mensagem adicionada ao chat
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva