Ir al contenido principal

Chat con AJAX - PHP - MySQL - JavaScript

A continuación se explica el código necesario para crear un chat básico con AJAX, PHP y MySQL.

Se utiliza una tabla creada en MySQL llamada mensaje que posee los campos id (autoincrement), usuario (varchar) y contenido (text).

El archivo index.html contiene la interfaz gráfica (cajas de texto, boton) y el código CSS. Se importa el archivo ajax.js que contiene el objeto XMLHttpRequest que me permite intercambiar datos de forma asíncrona con el servidor. Esto significa que es posible para actualizar partes de una página web, sin volver a cargar toda la página.

Además contiene dos funciones javascript:

1) mostrar: Esta función se ejecuta cada 3 segundos (setInterval(mostrar,3000)) y muestra en el div con id historial los mensajes almacenados en la base de datos a través del archivo mensajes.php que hace una consulta SQL.

2) agregar: Esta función captura el usuario y mensaje ingresado, los valores los almaceno en las variables usuario y cont y se los envío al arhivo proceso.php para que a través del método POST las capture y las inserte a la base de datos.

Código:

Archivo index.html

<!DOCTYPE html>
<html>
<head>

<style>

#historial{
border:1px solid gray;
width:325px;
height:400px;
overflow:auto;
}

fieldset{
width:300px;
}

</style>

<script src="ajax.js"></script>
<script>

function mostrar()
{
loadDoc(null,"mensajes.php",function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("historial").innerHTML=xmlhttp.responseText;
}
});
}

setInterval(mostrar,3000);

function agregar()
{
var u=document.getElementById('nombre').value;
var c=document.getElementById('contenido').value;

if(u!="" && c!=""){
loadDoc("usuario="+u+"&cont="+c,"proceso.php",function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("historial").innerHTML=xmlhttp.responseText;
}
});

}else{ alert("No deje campos vacios"); }

}
</script>
</head>

<body>

<h1>CHAT-AJAX</h1>

<hr />

<div id="historial"><img src="ajax-loader.gif" /></div>
<fieldset>
<legend>Chat:</legend>
<input type="text" id="nombre" placeholder="usuario" /><br />
<textarea id="contenido" placeholder="mensaje"></textarea><br />
<button onclick="agregar()">Ok</button>
</fieldset>

<hr />

Creado por: http://codigojerry.blogspot.com/

</body>

</html>

Archivo ajax.js

var xmlhttp;
function loadDoc(string,url,cfunc)
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=cfunc;
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(string);
}

Archivo mensajes.php

<?php

$con=mysqli_connect("localhost","root","","chatajax");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM mensajes");

while($row = mysqli_fetch_array($result))
{
echo "<b>".$row['usuario']."</b>: ".$row['contenido'];
echo "<hr>";
}

mysqli_close($con);

?>

Archivo procesar.php

<?php
$con=mysqli_connect("localhost","root","","chatajax");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql="INSERT INTO mensajes (usuario, contenido) VALUES ('".$_POST['usuario']."','".$_POST['cont']."')";

if (!mysqli_query($con,$sql)){
die('Error: ' . mysqli_error($con));
}

//respuesta
$result = mysqli_query($con,"SELECT * FROM mensajes");
while($row = mysqli_fetch_array($result))
{
echo "<b>".$row['usuario']."</b>: ".$row['contenido'];
echo "<hr>";
}

mysqli_close($con);
?>

Descargar

Funcionamiento

Comentarios

  1. Esta Bueno, seria bueno ponerle los usuarios que estan conectados y un login y pass

    ResponderBorrar
  2. una pregunta por que aqui me sale error

    Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\xampp6\htdocs\whats\mensajes.php on line 12

    ResponderBorrar

Publicar un comentario

Entradas más populares de este blog

Buscador en tiempo real con AJAX, PHP y MySQL

Buscador realizado en HTML utilizando como lenguaje de programación PHP , la tecnología AJAX y a MySQL como motor de base de datos.

Funciones (subprocesos) en PSeInt

A partir de la version 20121010 (10/Octubre/2012) PSeInt permite la posibilidad de definir funciones al que el creador del mismo bautizó como subprocesos , en este tutorial explicaremos brevemente cómo se tratan dichas funciones. Para empezar una función no es más que un bloque de código con un determinado fin o propósito, podemos definir más de una y nos permiten ahorrar líneas código si nuestros programas son muy extensos o hay codificación redundante.

Convertir un decimal a binario en PSeInt

Utilizaremos el siguiente método para convertir números decimales a binarios (números que se sólo se componen de unos y ceros). El método es sencillo, consiste en dividir el número decimal entre dos, despues su cociente entre el mismo número y así sucesivamente hasta que finalmente el cociente (que se convierte en un divisor) sea igual a uno. Despúes organizamos los residuos desde el último al primero para obtener el número binario que buscamos.