InicioHazlo Tu MismoChat en PHP ( Básico )

Chat en PHP ( Básico )

Hazlo Tu Mismo11/25/2011
Muy buenas Taringueros.



Bienvenido a todo sobre PHP.


Que crearemos ?
Crearemos un sencillo chat, crearemos un inicio de sesion y un registro de usuarios para ponerlo mas interesante, tambien crearemos un rango ( Admin ), un sistema de baneo, un sistema de publicar un mensaje de bienvenida, otorgar privilegios a un usuario ( convertirlo en admin ).El chat estará situado con un iframe, es algo obsoleto pero te servirá para que aprendas mucho. Tambien detectaremos si el usuario esta conectado o desconectado, esto lo interpretaremos con 1 y 0, 1 = Online y 0 = Offline.

Que necesitamos ?
Necesitamos un interpretador de php ( Apache ) y conocimientos basicos de programación. Y si se te facilita un editor de texto avanzado como notepad++, netbeans 7.0, etc.

Bueno manos a la obra !!


Primero que todo aclaro algo si tienes Xampp, debes crear los archivos .php dentro de la carpeta htdocs, si usas appserv guardas los ficheros en la carpeta www para que puedan ser publicados y vistos en la dirección http://localhost/. creamos un archivo llamado index.php, este inicio tendra un formulario de registro en html aquí está:

index.php

<html>
<head>
<title>Registro</title>
</head>
<body>
<h1>Bienvenido</h1>
<form method="POST" action="regis_user.php">
<br>
Nombre<br>
<input type="text" name="nombre" size=20>
<br>
Apellidos
<br>
<input type="text" name="apellidos" size=20>
<br>
Login
<br>
<input type="text" name="login" size=20>
<br>
Password
<br>
<input type="password" name="pass1" size=20>
<br>
Re-Password
<br>
<input type="password" name="pass2" size=20>
<br>
Email
<br>
<input type="text" name="email" size=20>
<br>
<input type="submit" value="Enviar">
<br>
</form>
<label><a href="login.php">Ya estas registrado?</a></label>


Como ven este formulario se esta dirigiendo a un archivo llamado "regis_user.php", este archivo se encargara de inyectar al usuario a la base de datos. PERO QUE ..... NO HEMOS CREADO LA BASE DE DATOS!!, sencillo en tu phpmyadmin crea una base de datos llamada "sistemas" y en sql inserta el siguiente código:

CREATE TABLE `bienvenida` (
   `mensaje` varchar(400) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


CREATE TABLE `mensajes` (
  `id` int(2) NOT NULL auto_increment,
  `alias` varchar(20) NOT NULL,
  `mensaje` varchar(120) NOT NULL,
  `ip` varchar(20) NOT NULL,
  `fecha` varchar(20) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=24 ;

CREATE TABLE `usuarios` (
  `id` int(4) NOT NULL auto_increment,
  `nombre` text,
  `apellidos` text,
  `login` varchar(40) NOT NULL,
  `password` varchar(80) NOT NULL,
  `email` text,
  `estado` int(11) NOT NULL default '0',
  `banned` int(11) NOT NULL default '0',
  `rango` int(11) NOT NULL default '0',
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;


Perfecto!!! ahora si podremos continuar con nuestro chat, en que íbamos?...... ah si "regis_user.php" este se encargara de inyectar en la base de datos los datos puestos por el usuario en el formulario anterior. el codigo de este archivo es el siguiente:

regis_user.php:
<?php
include("config.php");
$nombre htmlspecialchars(trim($_POST['nombre']));
$apell htmlspecialchars(trim($_POST['apellidos']));
$login htmlspecialchars(trim($_POST['login']));
$pass1 trim($_POST['pass1']);
$pass2 trim($_POST['pass2']);
$email htmlspecialchars(trim($_POST['email']));
$link mysql_connect($datos[0],$datos[1],$datos[2]);
$query sprintf("SELECT login FROM usuarios WHERE usuarios.login='%s'",
mysql_real_escape_string($login));
$result mysql_db_query($datos[3],$query,$link);
if(
mysql_num_rows($result)){
    echo 
"usuario ya existente, porfavor intentalo de nuevo.";
} else {
mysql_free_result($result);
if(
$pass1 != $pass2){
echo 
"Los passwords deben coincidir, por favor intentalo de nuevo.";
} else {
$pass1 sha1(md5($pass1));
$query sprintf("INSERT INTO usuarios (nombre, apellidos, login, password, email) VALUES ('%s','%s','%s','%s','%s')",
mysql_real_escape_string($nombre) , mysql_real_escape_string($apell),
mysql_real_escape_string($login) , mysql_real_escape_string($pass1),
mysql_real_escape_string($email));
$result mysql_db_query($datos[3],$query,$link);
if(
mysql_affected_rows()){
echo 
"usuario introducido correctamente.<br>";
echo 
"<a href='login.php'>Iniciar Sesi&oacute;n</a>";
} else {
echo 
"Error introduciendo el usuario";
}
}
}
?>


Pero como ven estamos incluyendo un archivo llamado "config.php" este se encarga de la contraseña, el nombre de usuario y el nombre de la base de datos, el codigo es el siguiente :

config.php

<?php
$datos 
= array('0' => 'localhost',
              
'1' => 'root',
              
'2' => 'password',
              
'3' => 'sistemas');
?>



Bien ahora creamos el archivo que permitira que si una persona ya esta registrada pueda ingresar al chat, llamaremos este archivo "login.php" y el codigo será el siguiente.

login.php

<?php
session_start
();
if(isset(
$SESSION)){
header("Location:usuarios.php");
} else {
?>
<h1>Identificacion</h1>
<form action="inicio_sesion.php" method="post">
login:
<br>
<input type="text" name="login">
<br>
Password:
<br>
<input type="password" name="pass">
<br>
<input type="submit" value="Ingresar">
</form>
<label><a href="index.php">Deseas registrarte?</a></label>
<?php
}
?>


Bien anteriormente en "login.php" vemos que es un formulario de ingreso pero tenemos un condicional (if) este lo que hace es verificar si la persona que ingrese a esta seccion esta logeada o no, si lo esta lo mandara a la zona de usuarios y si no lo esta pedira que por favor se identifique.

Bien ahora crearemos otro archivo llamado "inicio_sesion.php" este lo que hará es verificar si el usuario esta registrado en la base de datos y si lo esta su sesion estara iniciada, el codigo de este archivo es :

inicio_sesion.php

<?php
session_start
();
include(
"config.php");
$login htmlspecialchars(trim($_POST['login']));
$pass sha1(md5(trim($_POST['pass'])));
$link mysql_connect($datos[0],$datos[1],$datos[2]);
$query sprintf("SELECT nombre,apellidos,login,password,email FROM usuarios WHERE login='%s'and password='%s'",
mysql_real_escape_string($login), mysql_real_escape_string($pass));
$result mysql_db_query($datos[3],$query,$link);
if(
mysql_num_rows($result)){
$array mysql_fetch_array($result);
$_SESSION["login"] = $array["login"];
$_SESSION["nombre"] = $array["nombre"];
$_SESSION["apellidos"] = $array["apellidos"];
$_SESSION["email"] = $array["email"];
header("Location:user.php");
} else {
echo 
"Login o password incorrectos.";
}

?>



Ahora crearemos la pagina principal que contendrá todo, esta pagina la llamo "user.php" esta pagina tendra todo el chat y si es administrador un pequeño panel administrativo,, tambien enviara a la base de datos un 1 para indicar que el usuario esta conectado. El código de este archivo es :

user.php

<?php
session_start
();
include(
"config.php");
mysql_connect($datos[0],$datos[1],$datos[2]);
mysql_select_db($datos[3]);
$bd "SELECT banned FROM usuarios WHERE login='".$_SESSION['login']."'";
$rank "SELECT rango FROM usuarios WHERE login='".$_SESSION['login']."'";
$res mysql_query($rank);
$rango mysql_fetch_array($res);
$result mysql_query($bd);
$ban mysql_fetch_array($result);
if(
$ban["banned"] == 0){
if(!isset(
$_SESSION)){
header("Location:login.php");
} else {
echo 
"";
echo 
"<h1>Pagina Principal</h1>";
echo 
"Bienvenido a la zona de usuarios :<strong>";
echo 
$_SESSION["nombre"]." ".$_SESSION["apellidos"]."<br>";
echo 
"</strong> Has ingresado con el nick : <strong> ";
echo 
$_SESSION["login"];
echo 
"</strong><br>";
echo 
"<a href='logout.php'>Cerrar Sesion</a>";
echo 
"";
}
$sql "UPDATE usuarios SET estado=1 WHERE login='".$_SESSION['login']."'";
mysql_query($sql);
?>
<title>Bienvenido</title>
<table width="400" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="400"><iframe src="mensajes.php" width="700" height="300" scrolling="no"></iframe></td>
</tr>
<tr>
<td align="center"><form id="form1" name="form1" method="post" action="ejecutar.php">
<label></label>
<label></label>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<label>
<?php $alias $_SESSION['login']; echo $alias." dice :"?>
</label></td>
<td bgcolor="#FFFFFF">Mensaje<br>
    <script>
    contenido_textarea = ""
    num_caracteres_permitidos = 100
    
    function valida_longitud(){
        num_caracteres = document.forms[0].mensaje.value.length 

   if (num_caracteres > num_caracteres_permitidos){ 
      document.forms[0].mensaje.value = contenido_textarea 
   }else{ 
      contenido_textarea = document.forms[0].mensaje.value    
   } 

   if (num_caracteres >= num_caracteres_permitidos){ 
      document.forms[0].caracteres.style.color="#ff0000"; 
   }else{ 
      document.forms[0].caracteres.style.color="#000000"; 
   } 

   cuenta() 

function cuenta(){ 
   document.forms[0].caracteres.value=document.forms[0].mensaje.value.length 

    
    </script>
<textarea name="mensaje" cols="40" rows="5" onKeyDown="valida_longitud()" onKeyUp="valida_longitud()"></textarea>
<br> <input type="text" name=caracteres size=4><br>
<input type="submit" name="submit" value="Enviar">
</td>
</tr>
</table>
</form></td>
</tr>
</table>
<?php
if($rango['rango'] >= 5){
echo 
"Panel Administrativo.<br>";
echo 
"Que deseas realizar?<br>";
?>
<i>Recuerda escribir todo con exactitud.<br></i>
<form method="post">
<select name="sel">
<option selected>Elejir</option>
<option>Banear una cuenta</option>
<option>Dar rango</option>
<option>Cambiar mensaje de bienvenida</option>
</select><br>
Nick :<input type="text" name="nick" size="10"><br>
Valor :<input type="text" name="valor" size="10"><br>
<input type="submit" value="Realizar"><br>
<?php
$nick 
$_POST['nick'];
$valor $_POST['valor'];
$sel $_POST['sel'];
switch(
$sel){
case(
"Banear una cuenta"):
$sql "UPDATE usuarios SET banned='".$valor."' WHERE login='".$nick."'";
mysql_query($sql);
echo 
"El usuario ".$nick." ah sido baneado con exito.";
break;
case(
"Dar rango"):
$sql "UPDATE usuarios SET rango='".$valor."' WHERE login='".$nick."'";
mysql_query($sql);
echo 
"El usuario ".$nick." se le ah asignado nivel ".$valor;
break;
case(
"Cambiar mensaje de bienvenida"):
$sql "UPDATE bienvenida SET mensaje='".$valor."'"
mysql_query($sql);
echo 
"Mensaje de bienvenida cambiado a <font color='green'>".$valor."</font>.";
break;
default:
echo 
"Selecciona porfavor";
}
echo 
"</form>";
}
?>
<?php
}else{
    echo 
"La cuenta ah sido baneada por motivos de seguridad.<a href='index.php'>Regresar</a>";
}
?>



Ahora creamos otro archivo llamado "ejecutar.php" este se encarga de recibir los mensajes que los usuarios envien y guardarlos en una base de datos eh aquí el código:

ejecutar.php

<?php
session_start
();
$mensaje=$_POST['mensaje'];
$alias $_SESSION['login'];
$ip=$_SERVER['REMOTE_ADDR'];
$fecha=date("H-i-s");
if(
$alias!="" and $mensaje!="") {
mysql_connect("localhost","root","28927420");
mysql_select_db("sistemas");
mysql_query("insert into mensajes(alias,mensaje,ip,fecha) values('$alias','$mensaje','$ip','$fecha')");
$conteo=mysql_query("select count(*) from mensajes group by fecha");
$primero=mysql_query("select min(id) from mensajes");
$repri=mysql_result($primero,0);
$registros=mysql_num_rows($conteo);
if(
$registros>15) {
mysql_query("delete from mensajes where id=$repri");
}
}
header("Location:user.php");
?>




Ahora crearemos un archivo que se llame "mensajes.php" este se encarga de llamar de la base de datos los mensajes que los usuarios envían y los imprime. el código aquí:

mensajes.php

<?php
session_start
();
include(
"config.php");
mysql_connect($datos[0],$datos[1],$datos[2]);
mysql_select_db($datos[3]);
header('refresh:2; url=mensajes.php');
?>
<link href="estilo.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
body {
    background-color: #CDC1C5;
}
-->
</style><table width="202" border="0" cellspacing="0" cellpadding="0">
Sala principal...             
                
<?php
$sql 
"SELECT * FROM bienvenida";
$query mysql_query($sql);
$bnv mysql_fetch_array($query);
echo 
"<font color='red'>".$bnv[0]." </FONT>--<font color='green'> ".$_SESSION['login']."</font>";
?>
<hr>
  <tr>
    <td width="202">
   <?php
                $rank 
"SELECT rango FROM usuarios WHERE login='".$_SESSION['login']."'";
                
$res mysql_query($rank);
                
$rango mysql_fetch_array($res);
        
$re=mysql_query("select * from mensajes order by id desc");
                
        while(
$f=mysql_fetch_array($re)){
                
        echo 
"<scpan class='fecha'></span>".$f['fecha']."  <span class='usuario'>".$f['alias']."</span>:   <span class='mensaje'>".htmlentities($f['mensaje'])."</span><br>";
        
                }
                
        
?></td>
  </tr>
</table>



Le daré un poquito de diseño con css, la verdad soy muy malo cuando se trata de diseño asi que por eso es algo muy sencillo el archivo css se llamara "estilo.css" y su código es:

estilo.css

.fecha {
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
color: #000000;
}
.mensaje {
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
color: #000000;
}
.usuario {
font-family: Arial,Helvetica, sans-serif;
font-size: 11px;
color: #000000;
font-weight: bold;
}
.fechagm {
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
color: #FF0000;
}
.mensajegm {
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
color: orange;
}
.usuariogm {
font-family: Arial,Helvetica, sans-serif;
font-size: 11px;
color: #3D9140;
font-weight: bold;
}



Bien ahora para terminar crearemos el ultimo archivo y es el que hará que el usuario destruya su sesion y mande a la base de datos que esta desconectado(0 = offline), este archivo lo llamo "logout.php" y su código es :

logout.php

<?php
session_start
();
if(!isset(
$_SESSION)){
header("Location:login.php");
} else {
include(
"config.php");
mysql_connect($datos[0],$datos[1],$datos[2]);
$db mysql_select_db($datos[3]);
$sql "UPDATE usuarios SET estado=0 WHERE login='".$_SESSION['login']."'";
mysql_query($sql);
session_unset();
session_destroy();
echo 
"<center>La sesion ah sido cerrada con exito, si deseas identificarte entra <a href='login.php'>AQUI</a>";
echo 
"</center>";
}
?>


Bueno eso es todo, como saben cualquier duda o sugerencia bien y pueden hacermelo saber por comentarios, mensajes no respondo. Muchas gracias por su atención y esperen mas muy pronto .
UN EJEMPLO AQUI





JuLiAnChz
Datos archivados del Taringa! original
88puntos
3,934visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
0visitas
0comentarios
Dar puntos:

Posts Relacionados

Dejá tu comentario

0/2000

No hay comentarios nuevos todavía

Autor del Post

J
JuLiAnChz🇦🇷
Usuario
Puntos0
Posts6
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.