Foros del Web » Programando para Internet » Javascript » Frameworks JS »

[APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios online)

Estas en el tema de [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios online) en el foro de Frameworks JS en Foros del Web. Hola, Hice muchos foros con ajax y php, y este es el mejor que e echo. Tiene: Lista de usuario conectado en la sala. Distintas ...

  #1 (permalink)  
Antiguo 07/12/2008, 16:54
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 6 meses
Puntos: 101
[APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios online)

Hola,
Hice muchos foros con ajax y php, y este es el mejor que e echo.
Tiene:
  • Lista de usuario conectado en la sala.
  • Distintas salas
  • Configuraciones
  • BBcodes
  • Echo en AJAX
Este es la base que hice, que de este cree mejores. No tiene mucha seguridad. Y es libre de uso.
chat.php
Código PHP:
<?php
///////////////////////////////////////////////////////////////////
// CREADO POR PATO12 DE FOROSDELWEB.COM
// WWW.HALFMUSIC.COM.AR
///////////////////////////////////////////////////////////////////
if($_POST){
$sala="General";
include(
'config.php');
$user=addslashes($_POST['nick']);
$n=mysql_num_rows(mysql_query("SELECT * FROM online WHERE user='".$user."'"));
if(
$n==0){
$campos=array('time','user','sala');
$datos=array(  (time())+$seg_inac,$user,$sala);
$c=implode(',',$campos);
$d='\''.implode("','",$datos).'\'';
$sSQL=sprintf("INSERT INTO %s (%s) VALUES (%s)","online",$c,$d);
$query mysql_query($sSQL);
}else{
$key="";
for(
$i=0;$i<=10;$i++)
$key.=rand(0,9);
$user=$user."(".$key.")";
$nn=mysql_num_rows(mysql_query("SELECT * FROM online WHERE user='".$user."'"));
if(
$nn==0){
$campos=array('time','user','sala');
$datos=array(  (time())+$seg_inac,$user,$sala);
$c=implode(',',$campos);
$d='\''.implode("','",$datos).'\'';
$sSQL=sprintf("INSERT INTO %s (%s) VALUES (%s)","online",$c,$d);
$query mysql_query($sSQL);
}else{
die(
"El nick ya existe.");
}
}
?>
<script type="text/javascript">
<!--
var segundos=3;
var user="<?=stripslashes($user)?>";
var sala="general";
var acSegMill=(segundos==0 || segundos>10)? 1000 : segundos*1000;
-->
</script>
<script type="text/javascript" src="chat.js"></script>
<style type="text/css">
<!--
#coment_tr {
    background-color: #FFFFFF;
    border-top-width: 2px;
    border-right-width: 1px;
    border-bottom-width: 1px;
    border-left-width: 2px;
    border-top-style: solid;
    border-right-style: solid;
    border-bottom-style: solid;
    border-left-style: solid;
    border-top-color: #000000;
    border-right-color: #666666;
    border-bottom-color: #666666;
    border-left-color: #000000;
    padding: 3px;
    height: 198px;
    width: auto;
    display: block;
    overflow: auto;
}
.date_envi {
    background-color: #EEEEEE;
    margin-top: 3px;
    margin-right: 3px;
    margin-bottom: 1px;
    margin-left: 3px;
    padding-top: 3px;
    padding-right: 3px;
    padding-bottom: 1px;
    padding-left: 3px;
    border-right-width: 1px;
    border-bottom-width: 1px;
    border-left-width: 1px;
    border-right-style: solid;
    border-bottom-style: solid;
    border-left-style: solid;
    border-right-color: #000000;
    border-bottom-color: #000000;
    border-left-color: #000000;
}
.botom {
    color: #000000;
    background-color: #FFFFFF;
    border: 1px solid #999999;
    height: 20px;
    width: 100px;
}
.tabs {
    background-color: #FFFFFF;
    float: left;
    height: auto;
    width: 98px;
    display: block;
    cursor: pointer;
    text-align: center;
    padding-bottom: 4px;
    margin-bottom: 4px;
}
.tabs_ac {
    background-color: #E4E5E5;
    float: left;
    height: auto;
    width: 98px;
    display: block;
    cursor: pointer;
    text-align: center;
    text-decoration: underline;
    background-position: top;
    margin-bottom: 4px;
    padding-bottom: 4px;
}
#mensaje {
    background-color: #FFFFFF;
    padding: 5px;
    border: 1px solid #000000;
}
#config {
    color: #000000;
    background-color: #EEEEEE;
    margin: 1px;
    padding: 1px;
    height: auto;
    width: 100px;
    border: 1px solid #000000;
    position: relative;
    visibility: hidden;
}
.sala {
    color: #000000;
    background-color: #EEEEEE;
    height: auto;
    width: auto;
    cursor: pointer;
    display: block;
    margin-right: 2px;
    padding-right: 3px;
    text-align: center;
    margin-bottom: 2px;
    padding-top: 2px;
    padding-bottom: 2px;
}
.sala_ac {
    color: #000000;
    background-color: #F3F3F3;
    height: auto;
    width: auto;
    cursor: pointer;
    display: block;
    margin-right: 2px;
    padding-right: 3px;
    text-align: center;
    margin-bottom: 2px;
    padding-top: 2px;
    padding-bottom: 2px;
    font-weight: bold;
}
.table {
    border: 1px solid #000000;
}
#usuarios {
    overflow: auto;
    height: 270px;
    width: auto;
}
.cargando {
    background-color: #FF0000;
    height: auto;
    width: 100px;
    position: absolute;
    left: 0px;
    top: 0px;
    clip: rect(0px,auto,auto,0px);
    visibility: visible;
    padding-right: 3px;
    padding-top: 2px;
    padding-bottom: 4px;
    padding-left: 5px;
}
#bbcode {
    position:relative;
    border: thin solid #333333;
    background-color: #EEEEEE;
    visibility: hidden;
    margin: 1px;
    padding: 1px;
    height: auto;
    width: 100px;
}
-->
</style>
<div class="cargando" id="cargando"><strong>Cargando...</strong></div>
<div id="box" style="visibility:hidden;">
<table width="904" id="chat-tr-ct" border="0" align="center" cellpadding="0" cellspacing="0" class="table">
  <tr>
    <td width="702" height="198" valign="top"><div id="coment_tr">&nbsp;Presione conectar para entrar al chat. </div></td>
    <td width="200" rowspan="2" valign="top">
    <table border="0" cellpadding="0" cellspacing="0">
    <tr>
    <td>
    <div class="tabs_ac" id="users">Usuarios</div>
    <div class="tabs" id="salas">Salas</div>
    </td>
    </tr>
    <tr>
    <td>
    <div id="usuarios" style="display:block;"></div>

<div id="sala" style="visibility:; display:none; overflow:auto; height:270px;">
<div class="sala_ac" sala="General">General</div>
<div class="sala" sala="Entretenimiento">Entretenimiento</div>
<div class="sala" sala="Cine">Cine</div>
<div class="sala" sala="Chistes">Chistes</div>
<div class="sala" sala="Otros">Otros</div>
</div>
    </td>
    </tr>
    </table>
    </td>
  </tr>
  <tr>
    <td bgcolor="#CCCCCC" class="date_envi"><div align="center">
      <textarea name="mensaje"  tabindex="1" rows="4" disabled="disabled" id="mensaje" style="width:694px;" onkeypress="return envAUT(event);"></textarea><br />
      <input name="enviar" onClick="enviarGET($('mensaje'));" type="button" class="botom" id="enviar" value="Enviar" disabled="disabled">
       <input name="icono" type="button" class="botom" onClick="verGET('bbcode');" id="icono" value="BBcode"> 
       <input name="conf" type="button" class="botom" onClick="verGET('config');" id="conf" value="Configurar"> 
       <input name="conection" onClick="conectarGET(this);" type="button" class="botom" id="conection" value="Conectar">
       <br />
<font id="nik"><strong>Nick: </strong></font> | <strong>Sala: </strong> <font id="salaET"><?=$sala?></font><div id="result"></div>
    </div></td>
  </tr>
</table>
<div style="position:absolute; left:81px; top:276px;">
<div id="config"><div style="background-color:#CCCCCC">Configurar</div>
  Actualizar cada: 
  <br />
  <select name="seg_act" onchange="actualizarTime(this.value);">
    <option value="1">1 segundo</option>
    <option value="2">2 segundo</option>
    <option value="3">3 segundo</option>
    <option value="4">4 segundo</option>
    <option value="5">5 segundo</option>
    <option value="6">6 segundo</option>
    <option value="7">7 segundo</option>
    <option value="8">8 segundo</option>
    <option value="9">9 segundo</option>
  </select>
  <br />
  <input name="cerrar-c" type="button" class="botom" id="cerrar-c" onclick="cerrarGET('config');" value=" - Cerrar -" />
</div>
</div>
<div style="position:absolute; left:81px; top:8px;">
<div align="center" id="bbcode">
    <div style="background-color:#CCCCCC;">BBcode</div>
  <div id="menu-td-edit">
  <a href="javascript:b();"><strong>B</strong></a>
  <a href="javascript:it();"><i>I</i></a>
  <a href="javascript:u();"><u>U</u></a>
  <br />
  <a href="javascript:colo();">Color</a>
  <a href="javascript:imagen();">Imagen</a>
  <a href="javascript:escribir_web();">URL</a>
  </div>
    <input name="cerrar" type="button" class="botom" id="cerrar" onclick="cerrarGET('bbcode');" value=" - Cerrar -" />
</div>
</div>
</div>
<?php
}else{
?>
<form name="form1" method="post" action="">
  Tu nick: <br>
  <input name="nick" type="text" id="nick">
  <br>
  <input type="submit" name="Submit" value="Entrar al chat">
</form> 
<?php
}
?>
Continua...
__________________
Half Music - www.halfmusic.com
  #2 (permalink)  
Antiguo 07/12/2008, 16:56
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 6 meses
Puntos: 101
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

chat.js
Código HTML:
function actualizarTime(time){
	acSegMill=((time)*1000);
	alert("Se actualizara cada "+(time)+" segundos.");
}
function $(id){ 
    return document.getElementById(id);     
}
function replace_s(texto,s1,s2){
	return texto.split(s1).join(s2);
}
function addEvent(obj, evType, fn, useCapture){   
 if (obj.addEventListener){ 
   	 obj.addEventListener(evType, fn, useCapture); 
     
  } else if (obj.attachEvent){ 
      obj[fn+evType]=fn; 
    	obj[fn+evType+'n']=function(){obj[fn+evType](window.event);} 
   		 obj.attachEvent("on"+evType, obj[fn+evType+'n']); 
    
  } else { 
 	  obj['on'+evType]=fn; 
  } 
} 
function removeEvent(obj, evType, fn, useCapture){ 
  if (obj.removeEventListener){ 
    obj.removeEventListener(evType, fn, useCapture); 
  } else if (obj.detachEvent){ 
    obj.detachEvent("on"+evType, obj[fn+evType+'n']); 
    obj[fn+evType+'n']=null; 
  } else { 
    obj['on'+evType]=function(){}; 
  } 
} 

function stopEvent(e) { 
    if (!e) e = window.event; 
    if (e.stopPropagation) { 
        e.stopPropagation(); 
    } else { 
        e.cancelBubble = true; 
    } 
} 
function cancelEvent(e) { 
    if (!e) e = window.event; 
    if (e.preventDefault) { 
        e.preventDefault(); 
    } else { 
        e.returnValue = false; 
    } 
} 



function getNextHighestDepth(){ 
    var tCol=document.getElementsByTagName('*'); 
    var z=0; 
        for(var i=0;i<tCol.length;i++){ 
            if(tCol[i].style.zIndex>z){ 
                z=tCol[i].style.zIndex; 
            } 
             
        } 
    return ++z; 
} 
arrastrable={};

function mover(e){
    arrastrable.c2x=e.clientX;
    arrastrable.c2y=e.clientY;
    this.style.left=arrastrable.c2x-arrastrable.c1x+arrastrable.o1x+'px';
    this.style.top=arrastrable.c2y-arrastrable.c1y+arrastrable.o1y+'px';
    cancelEvent(e);
    stopEvent(e);
}

function detener(){
    removeEvent(this, 'mousemove', mover, false);
    removeEvent(this, 'mouseup', detener, false);
}

function i(e){
    if(this.position!="relative"||!this.style.position){
        this.style.position="relative";
        this.style.cssFloat="none";
        this.style.zIndex=getNextHighestDepth();
    }
    arrastrable.c1x=e.clientX;
    arrastrable.c1y=e.clientY;
    arrastrable.o1x=!isNaN(parseInt(this.style.left))?parseInt(this.style.left):0;
    arrastrable.o1y=!isNaN(parseInt(this.style.top))?parseInt(this.style.top):0;
    addEvent(this, 'mousemove',mover, false);
    addEvent(this, 'mouseup',detener, false);
    addEvent(this, 'mouseout',detener, false);
    cancelEvent(e);
    stopEvent(e);
}

function makeDraggable(){
    for(var j=0;j<arguments.length;j++){
        $(arguments[j]).style.cursor='move';
        addEvent($(arguments[j]), 'mousedown',i, false);
    }
}
navHover = function() {
	var lis = document.getElementById("menu-h").getElementsByTagName("LI");
	for (var i=0; i<lis.length; i++) {
		lis[i].onmouseover=function() {
			this.className+=" iehover";
		}
		lis[i].onmouseout=function() {
			this.className=this.className.replace(new RegExp(" iehover\\b"), "");
		}
	}
}
function set_opacity(div, val) { 
  if (typeof div.filters!='undefined') { 
    val *= 100; 
    try { 
      div.filters.item("DXImageTransform.Microsoft.Alpha").opacity = val; 
    } catch (e) {  
     div.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity='+val+')'; 
    } 
  } else { 
    div.style.opacity = val; 
    div.style.MozOpacity = val;  
  } 
} 
var transicion=function(inicio,fin,segundos){ 
    var _this=this; 
    this.test=0; 
    if(_this.intervalo)clearInterval(_this.intervalo); 
    if(this.val && Math.abs(fin-_this.val)<0.01)return; 
    this.val=!this.val?inicio<1?inicio+.0001:inicio:this.val; 
    set_opacity(this, this.val); 
    this.pasos=(fin-inicio)/100; 
    this.pausa=segundos*10; 
    this.intervalo=setInterval( 
    function(){ 
        if(_this.test>99 || Math.abs(fin-_this.val)<0.01){ 
          clearInterval(_this.intervalo); 
          
        } 
        _this.test++; 
        _this.val=_this.val+_this.pasos; 
        if(_this.val<=.01)  
            _this.style.visibility='hidden'; 
        else 
            _this.style.visibility='visible'; 
        set_opacity(_this, _this.val); 
    },this.pausa); 
} 
function verGET(e,t,c){
if(!c){ 
	if(!t)
	t=1;
    var obj=document.getElementById(e); 
    transicion.call(obj,0,1,t); 
	obj.style.zIndex=getNextHighestDepth();
}else{
 	$(e).style.visibility='visible'; 
} 
}
function cerrarGET(e,t,c){ 
if(!c){ 
	if(!t)
	t=1;
	var obj=document.getElementById(e); 
    transicion.call(obj,1,0,t); 
}else{
	 $(e).style.visibility='hidden'; 
} 
} 
	 function getXMLHttpRequest(){
                var aVersions = [ "MSXML2.XMLHttp.5.0",
                        "MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0",
                        "MSXML2.XMLHttp","Microsoft.XMLHttp"
                ];

                if (window.XMLHttpRequest){
                        // para IE7, Mozilla, Safari, etc: que usen el objeto nativo
                        return new XMLHttpRequest();
                }else if (window.ActiveXObject){
                        // de lo contrario utilizar el control ActiveX para IE5.x y IE6.x
                        for (var i = 0; i < aVersions.length; i++) {
                                try {
                                    var oXmlHttp = new ActiveXObject(aVersions[i]);
                                    return oXmlHttp;
                                }catch (error) {
                                //no necesitamos hacer nada especial
                                }
                    }
                }
        }
function ir(url,par,d,p,t,c,cc,ccc,f,call,ft){
	var ajax = getXMLHttpRequest();
	ajax.open(p,url,true);
	ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
	ajax.onreadystatechange  = respuesta;
	ajax.send(par);                
		function respuesta(){
		if (ajax.readyState==4){
		if (ajax.status==200){
			if(!ft)
			document.getElementById(d).innerHTML=ajax.responseText;
			verGET(d);
			if(f)
			call;
			if(cc)
			cerrarGET(ccc);
				}
			}else{
		if(t)
		document.getElementById(d).innerHTML=c;
			}
	}
}
function actualizarList(){
	location.href = "#ultimo";
	$('mensaje').focus();
}
function verificarPOST(){
	verifict=setTimeout(
		function(){
			ir('inter.php','r='+Math.random()+'&t=ver&sala='+sala,'coment_tr','POST',false,null,null,null,true,actualizarList());
			verificarPOST();
		}
	,acSegMill);
}
function verUsGET(){
	verifict2=setTimeout(
		function(){
		ir('inter.php','r='+Math.random()+'&t=user&sala='+sala+'&user='+user,'usuarios','POST',false);
		verUsGET();
		}
	,acSegMill);
}
function conectarGET(_this){
	if(_this.value=="Conectar"){
		html('usuarios','<p>&nbsp;</p> <p>&nbsp;</p> <p align="center">Cargando...</p>');
		$('mensaje').disabled = this.checked;
		$('enviar').disabled = this.checked;
		_this.value="Desconectar";
		cerrarGET('coment_tr');
		verGET('cargando',true);
		verGET('sala');
		ir('inter.php','r='+Math.random()+'&t=ver&sala='+sala,'coment_tr','POST',false,null,true,'cargando',true,actualizarList());
		verificarPOST();
		verGET('cargando',true);
		ir('inter.php','r='+Math.random()+'&t=user&sala='+sala,'usuarios','POST',false,null,true,'cargando',true,verUsGET());
		ir('inter.php','r='+Math.random()+'&t=conectar&name='+user+'&sala='+sala,null,'POST',false,null,true,'cargando',false,null,true);
	}else{
		$('mensaje').disabled = !this.checked;
		$('enviar').disabled = !this.checked;
		ir('inter.php','r='+Math.random()+'&t=desconectar&user='+user,null,'POST',false,null,true,'cargando',false,null,true);
		_this.value="Conectar";
		document.getElementById('coment_tr').innerHTML='<strong>[Desconectado]</strong> OFF';
		cerrarGET('cargando');
		cerrarGET('usuarios');
		cerrarGET('sala');
		verGET('coment_tr');
		clearTimeout(verifict);
		clearTimeout(verifict2);
	}
}

function enviarGET(_this){
	text=_this.value;
	if(replace_s(text,' ','')!=""){
		_this.value='';
		ir('inter.php','r='+Math.random()+'&t=insert&name='+user+'&cont='+text+'&sala='+sala,null,'POST',false,null,true,'cargando',false,null						,true);
		}else{
		alert('Escriba algo.');	
	}
}
// CONTINUA EL CODIGO
Continua el codigo....
__________________
Half Music - www.halfmusic.com
  #3 (permalink)  
Antiguo 07/12/2008, 16:58
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 6 meses
Puntos: 101
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

chat.js (continuación)
Código HTML:
	flag=0;
function addTex(let){
	var forms="mensaje";
	var story = $(forms).value;
	if(let=="BACK"){
		story=story.substring(0, story.length-1);
		$(forms).value=story;
		$(forms).focus();
	}else if(flag==1){
		story+=let.toUpperCase();
		flag=0;
		$(forms).value=story;
		$(forms).focus();
	}else{
story+=let;
flag=0;
$(forms).value=story;
$(forms).focus();
}
}
function capIt(){
flag=1;
}
// BBcodes
function escribir_web(){
title = prompt('Titulo:',"");
if(title!=null){
web = prompt('Direcion web:',"http://");
if(web=="http://" || web==null){
alert('No as escrito una direccion valida.');
}else{
addTex('[url='+web+']'+title+'[/url]');
}
}
}
function b(){
texto = prompt('Texto en negritas:',"");
if(texto==null || texto==""){
		alert("Nada");
		}
else{
addTex('[b]'+texto+'[/b]');
}
}
function it(){
texto = prompt('Texto:',"");
if(texto==null || texto==""){
		alert("Nada");
		}
else{
addTex('[i]'+texto+'[/i]');
}
}
function u(){
texto = prompt('Texto subrayado:',"");
if(texto==null || texto==""){
		alert("Nada");
		}
else{
addTex('[u]'+texto+'[/u]');
}
}
function imagen(){
image = prompt('Direcion de la imagen:',"http://");
if(image==null || image==""){
		alert("Nada");
		}
else{
addTex('[img]'+image+'[/img]');
}
}
function colo(){
	texto = prompt('Texto:',"");
		if(texto==null || texto==""){
		alert("Nada");
		}
else{
color = prompt('Color:  (Ej.: red,blue o puede ser html)',"");
if(color==null || color==""){
}else{
addTex('[color='+color+']'+texto+'[/color]');
}
}
}
/////////////////////////////////////////////////
function html(d,t){
	$(d).innerHTML=t;
}
function restartClass(){
var lis = document.getElementById("sala").getElementsByTagName("div");
		for (i=0; i<lis.length; i++) {
			lis[i].className = "sala";
		}
}
function selecSala(){
	var lis = document.getElementById("sala").getElementsByTagName("div");
	for (i=0; i<lis.length; i++) {
		lis[i].onclick=function() {
			restartClass();
			this.className="sala_ac";
			sala=this.getAttribute('sala');
			verGET('cargando');
			ir('inter.php','r='+Math.random()+'&t=ver&sala='+sala,'coment_tr','POST',false,null,true,'cargando',true,actualizarList());
			ir('inter.php','r='+Math.random()+'&t=user&sala='+sala,'usuarios','POST',false,null,true,'cargando');
			ir('inter.php','r='+Math.random()+'&t=conectar&name='+user+'&sala='+sala,null,'POST',false,null,true,'cargando',false,null,true);
			html('salaET',sala);
		}
	}
}
function envAUT(e) { 
tecla = (document.all) ? e.keyCode :e.which; 
	if(tecla==13 && !e.shiftKey){
	enviarGET($('mensaje'));
	return false;
	}
return true;
}
function verSalGET(){
	$('users').className="tabs";
	$('salas').className="tabs_ac";
	$('sala').style.display="block";
	$('usuarios').style.display="none";
}
function verUGET(){
	$('users').className="tabs_ac";
	$('salas').className="tabs";
	$('usuarios').style.display="block";
	$('sala').style.display="none";
}
window.onload=function(){
makeDraggable('bbcode'); 
makeDraggable('config'); 
$('mensaje').disabled = !this.checked;
$('enviar').disabled = !this.checked;
$('nik').innerHTML=" <strong>Nick: </strong>"+user;
addEvent($('users'),'click',verUGET,false);
addEvent($('salas'),'click',verSalGET,false);
selecSala();
verGET('box');
cerrarGET('cargando');
}
config.php
Código PHP:
<?php
$seg_inac
=50;// Segundos que si el usuario no hace nada, se lo considera incativo
$bd_servidor "localhost";
$bd_usuario "root";
$bd_contrasenya "clave";
$bd_bdname "BD";
$con = @mysql_connect($bd_servidor,$bd_usuario,$bd_contrasenya);
$bd_conect=@mysql_select_db($bd_bdname,$con);
if(!
$con || !$bd_conect){
exit(
'Servidor no disponible, disculpe las molestias.');
}
?>
Tablas:
Código:
CREATE TABLE `contenido` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `cont` longtext NOT NULL,
  `fecha` varchar(100) NOT NULL,
  `sala` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=136 ;


CREATE TABLE `online` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `time` varchar(100) NOT NULL,
  `user` varchar(100) NOT NULL,
  `sala` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=173 ;
Continua...
__________________
Half Music - www.halfmusic.com
  #4 (permalink)  
Antiguo 07/12/2008, 16:59
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 6 meses
Puntos: 101
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

inter.php
Código PHP:
<?php
include('config.php');// Incluimos las configuraciones
if($_POST){
if(
$_POST['t']=="user"){
$user=array();
$in=0;
$ac=0;
$Sqll mysql_query("SELECT * FROM online WHERE sala='".$_POST['sala']."'",$con) or die(mysql_error()); 
while(
$datmysql_fetch_array($Sqll)){
$use=stripslashes($dat['user']);
$time=$dat['time'];
if(
abs(time()-$time)<(200+$seg_inac)){
if(
$time>time()){
$ac++;
$user[]='<strong>'.$use.'</strong>';
}else{
$in++;
$user[]='<i>'.$use.'</i>';
}
}else{
if(
$use!=$_POST['user']){
$consulta "DELETE FROM online WHERE id ='".$dat['id']."'";
$resultado mysql_query($consulta) or die(mysql_error());
}
}
}
if(empty(
$user))
echo 
"No hay usuarios conectados.";
else{
$user[]="<hr />Hay ".$ac." usuarios activos y ".$in." inactivos.(".($ac+$in).")";
echo 
implode('<br />',$user);

}
}elseif(
$_POST['t']=="conectar"){
$name=$_POST['name'];
$sala=$_POST['sala'];
$n=mysql_num_rows(mysql_query("SELECT * FROM online WHERE user='".$name."'"));
if(
$n==0){
$campos=array('time','user','sala');
$datos=array(  (time())+$seg_inac,$name,$sala);
$c=implode(',',$campos);
$d='\''.implode("','",$datos).'\'';
$sSQL=sprintf("INSERT INTO %s (%s) VALUES (%s)","online",$c,$d);
$query mysql_query($sSQL);
}elseif(
$n==1){
$consulta "Update online set time='".(time()+$seg_inac)."', sala='".$sala."' WHERE user ='".$name."'";
@
$resultado mysql_query($consulta) or die(mysql_error());
}
}elseif(
$_POST['t']=="desconectar"){
$consulta "DELETE FROM online WHERE user ='".$_POST['user']."'";
$resultado mysql_query($consulta) or die(mysql_error());
}elseif(
$_POST['t']=="ver"){
$post=array();
$Sqll = @mysql_query("SELECT * FROM contenido WHERE sala='".$_POST['sala']."' ORDER BY id ASC",$con) or die(mysql_error()); 
while(
$datmysql_fetch_array($Sqll)){
$mensaje=stripslashes($dat['cont']);
$mensaje str_replace("[b]","<b>",$mensaje) ; $mensaje str_replace("[/b]","</b>",$mensaje) ;
$mensaje str_replace("[img]","<img src=\"",$mensaje) ; $mensaje str_replace("[/img]","\" border=\"0\" onerror=this.onerror='this.src=\'\';'>",$mensaje) ;
$mensaje preg_replace("/\[color=((#)?[0-9a-z]+)\]/i","<font color=\"\\1\">",$mensaje) ; $mensaje str_replace("[/color]","</font>",$mensaje) ;
$mensaje preg_replace("/\[color=((#)?[0-9a-z]+)\]/i","<font color=\"\\1\">",$mensaje) ; $mensaje str_replace("[/color]","</font>",$mensaje) ;
$mensaje preg_replace("/\[url\](www\..+)\[\/url\]/i","<a href=\"http://\\1\" target=\"_blank\">\\1</a>",$mensaje) ;
$mensaje preg_replace("/\[url\](.+)\[\/url\]/i","<a href=\"\\1\" target=\"_blank\">\\1</a>",$mensaje) ;
$mensaje preg_replace("/\[url=(www\..+)\](.+)\[\/url\]/i","<a href=\"http://\\1\" target=\"_blank\">\\2</a>",$mensaje) ;
$mensaje preg_replace("/\[url=(.+)\](.+)\[\/url\]/i","<a href=\"\\1\" target=\"_blank\">\\2</a>",$mensaje) ;
$mensaje str_replace("[i]","<i>",$mensaje) ; $mensaje str_replace("[/i]","</i>",$mensaje) ;
$mensaje str_replace("[u]","<u>",$mensaje) ; $mensaje str_replace("[/u]","</u>",$mensaje) ;
$post[]='<strong>'.$dat['name'].':</strong> '.$mensaje;
}
if(!empty(
$post))
echo 
implode('<br>',$post);
else
echo 
"No hay comentarios.";
echo 
'<div id="ultimo"></div>';
}elseif(
$_POST['t']=="insert"){
$name=$_POST['name'];
$fecha=@date('d-m-Y');
$sala=$_POST['sala'];
$cont=nl2br(addslashes(strip_tags($_POST['cont'])));
$campos=array('name','fecha','cont','sala');
$datos=array( $name$fecha ,$cont$sala);
$c=implode(',',$campos);
$d='\''.implode("','",$datos).'\'';
$sSQL=sprintf("INSERT INTO %s (%s) VALUES (%s)","contenido",$c,$d);
$query mysql_query($sSQL);
$n=mysql_num_rows(mysql_query("SELECT * FROM online WHERE user='".$name."'"));
if(
$n==0){
$campos=array('time','user','sala');
$datos=array(  (time())+$seg_inac,$name,$sala);
$c=implode(',',$campos);
$d='\''.implode("','",$datos).'\'';
$sSQL=sprintf("INSERT INTO %s (%s) VALUES (%s)","online",$c,$d);
$query mysql_query($sSQL);
}elseif(
$n==1){
$consulta "Update online set time='".(time()+$seg_inac)."', sala='".$_POST['sala']."' WHERE user ='".$name."'";
@
$resultado mysql_query($consulta) or die(mysql_error());
}
}
}
?>
El chat anda bien, lo prove en Mozilla Firefox 3 y IE7
Gracias
Salu2
__________________
Half Music - www.halfmusic.com
  #5 (permalink)  
Antiguo 08/12/2008, 10:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Tema trasladado a AJAX.
  #6 (permalink)  
Antiguo 08/12/2008, 12:11
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 6 meses
Puntos: 101
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Hola eddwinpaz,
Tu aporte de tu chat me dio la idea de dar este chat.
Tengo mucho mas, con Jquery, con cuentas y con fotos.
Gracias
Salu2
PD: No sabia que tenia que ir en el foro de AJAX
__________________
Half Music - www.halfmusic.com
  #7 (permalink)  
Antiguo 08/12/2008, 12:14
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 5 meses
Puntos: 25
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Cita:
Iniciado por pato12 Ver Mensaje
Hola eddwinpaz,
Tu aporte de tu chat me dio la idea de dar este chat.
Tengo mucho mas, con Jquery, con cuentas y con fotos.
Gracias
Salu2
PD: No sabia que tenia que ir en el foro de AJAX
Bueno Me alegra que haya hecho un pequeño cambio en las iniciativas en este foro. Bueno sigue adelante. Yo he tenido muchos request de caracteristicas en mi correo electronico y dejame decirte que la gente lo pide y lo tendra... pero mi vision es hacer un Clon de Gmail el Chat Ojo. y como cuando se muestre la nueva version de mi chat podran ver muchas caracteristicas identicas a este chat.. por que se preguntaran ? bueno eso es debido a que el Chat de Gmail es un chat unico y deja mucho que pensar para aplicarlo en un sistema de empresas donde requieren mucha comunicacion.. saludos.
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #8 (permalink)  
Antiguo 09/12/2008, 17:11
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 6 meses
Puntos: 101
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Hola,
Aquí les traigo una muestra de mi chat:
http://www.halfmusic.com.ar/chat/chat.php
Gracias
Salu2
PD: Tiene algunas modificaciones, como un WHERE fecha='".date("d-m-Y")."' al mostrar los comentarios,
__________________
Half Music - www.halfmusic.com
  #9 (permalink)  
Antiguo 09/12/2008, 18:07
Avatar de karlic0s  
Fecha de Ingreso: abril-2007
Ubicación: Cartagena (Murcia)
Mensajes: 241
Antigüedad: 17 años
Puntos: 18
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Enhorabuena pato12!! es impresionante!! ahora mensajes privados entre usuarios y ya tremendisimo!!
  #10 (permalink)  
Antiguo 30/03/2009, 01:19
 
Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Hola, me gusta el chat que has hecho, lo he estado probando y hay una cosa que no se como lo haces.

Tienes 3 ficheros en Config, Chat y Inter. Como haces desde Chat para llamara a Inter? Config si he visto que hay includes pero de Inter no. Muchas Gracias
  #11 (permalink)  
Antiguo 30/03/2009, 08:46
 
Fecha de Ingreso: diciembre-2008
Mensajes: 118
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

probado con IE7 de pasado y presenta un fallo, cada vez ke refresca, en el input de texto para enviar mensaje se pone el puntero al inicio, por lo demas muy bien
  #12 (permalink)  
Antiguo 03/05/2009, 21:51
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Muy bueno tu aporte gracias
  #13 (permalink)  
Antiguo 03/05/2009, 22:09
Avatar de julita_punch  
Fecha de Ingreso: abril-2007
Ubicación: Lima - Peru
Mensajes: 505
Antigüedad: 17 años
Puntos: 4
De acuerdo Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Cita:
Iniciado por Kristt Ver Mensaje
probado con IE7 de pasado y presenta un fallo, cada vez ke refresca, en el input de texto para enviar mensaje se pone el puntero al inicio, por lo demas muy bien
pero en firefox y en safari corre muy bien ¡¡¡


gracias ¡¡¡
__________________
Julita Borda Hokama
a lo mejor esto ayuda
  #14 (permalink)  
Antiguo 30/07/2009, 02:33
(Desactivado)
 
Fecha de Ingreso: marzo-2008
Mensajes: 641
Antigüedad: 16 años, 1 mes
Puntos: 7
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Un pedazo de chat!

Eres 1 crack!
  #15 (permalink)  
Antiguo 21/10/2009, 11:12
 
Fecha de Ingreso: agosto-2009
Ubicación: 9 de Julio
Mensajes: 6
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Muy bueno, gracias
  #16 (permalink)  
Antiguo 26/10/2009, 11:19
Avatar de almagropaco_  
Fecha de Ingreso: marzo-2008
Ubicación: Mar del Plata
Mensajes: 854
Antigüedad: 16 años, 1 mes
Puntos: 25
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Buenisimo, muchas gracias por el aporte.
  #17 (permalink)  
Antiguo 26/10/2009, 16:03
 
Fecha de Ingreso: octubre-2009
Mensajes: 104
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

no podria poner un link para descargarlo completo con todo lo que lleva el mismo... seria mucho mejor para los interesados....

Saludos
  #18 (permalink)  
Antiguo 29/10/2009, 11:57
(Desactivado)
 
Fecha de Ingreso: marzo-2008
Mensajes: 641
Antigüedad: 16 años, 1 mes
Puntos: 7
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Cita:
Iniciado por fcmonier85 Ver Mensaje
no podria poner un link para descargarlo completo con todo lo que lleva el mismo... seria mucho mejor para los interesados....

Saludos
Si es copiar y pegar... ¿Qué más pedir?... es un gran chat
  #19 (permalink)  
Antiguo 14/11/2009, 11:46
 
Fecha de Ingreso: agosto-2009
Mensajes: 59
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Grandioso! de verdad está buenisimo el codigo y funciona a la perfección, pero es cierto lo que pasa con IE, cada vez que recarga la página el puntero va al principio. estoy implementando este chat en una web y la mayoria usa IE, habrá alguna forma de que suceda esto?? desde ya muchas gracias, pato12 naguara de pana te la comiste.
  #20 (permalink)  
Antiguo 17/11/2009, 16:56
 
Fecha de Ingreso: noviembre-2009
Mensajes: 18
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Excelente, lo pude hacer.
Pero, no se puede arreglar el input de texto? Porque cuando estoy escribiendo el puntero se va al inicio, como ya dijeron. Uso el IE.
  #21 (permalink)  
Antiguo 19/11/2009, 03:41
 
Fecha de Ingreso: junio-2006
Ubicación: Antofagasta
Mensajes: 216
Antigüedad: 17 años, 10 meses
Puntos: 7
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

excelente aporte, lo estoy probando y me ha gustado mucho.

Felicitaciones Pato12 y gracias por compartirlo.
  #22 (permalink)  
Antiguo 02/12/2009, 19:06
Avatar de el_guiye  
Fecha de Ingreso: septiembre-2008
Mensajes: 3
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Gracias por el aporte, un lujo la verdad.

Un muy buen aporte como para que alguien los use de base para extenderlo. Gracias de nuevo.
  #23 (permalink)  
Antiguo 07/12/2009, 13:59
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Muy muy bueno che, pinta grosso
Te hago una pregnuta: no se hace medio pesado con bases de datos?? Yo hice uno estos dias con archivos de texto! Intente hacerlo con bases y no me gustaba....

Muy bueno che!
  #24 (permalink)  
Antiguo 07/12/2009, 14:06
Avatar de jempmx28  
Fecha de Ingreso: marzo-2009
Mensajes: 16
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Excelente Aporte, para lo que mencionan cada vez que escriben, solo es crear una funcion donde si en el textArea hay actividad no actualize ese campo, hasta que haya enviado la peticion es sencillo.

saludos!
  #25 (permalink)  
Antiguo 07/04/2010, 16:09
 
Fecha de Ingreso: marzo-2010
Mensajes: 7
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

mi duda es como crear la basedatos
  #26 (permalink)  
Antiguo 21/05/2010, 13:28
Avatar de andreshenao  
Fecha de Ingreso: enero-2009
Ubicación: Medellìn
Mensajes: 417
Antigüedad: 15 años, 3 meses
Puntos: 7
De acuerdo Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

VFelicitaciones por el aporte ufffff
  #27 (permalink)  
Antiguo 23/07/2010, 11:15
 
Fecha de Ingreso: julio-2010
Mensajes: 523
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

hola muy buen trabajo pero me pregunto si este chat es privado, osea te muestra a los tus amigo conectados y tu seleccionas con quien quieres conversar y te abre una ventana nueva donde chateas con ese otro usuario???
  #28 (permalink)  
Antiguo 13/08/2010, 23:42
Avatar de waldragon  
Fecha de Ingreso: mayo-2010
Mensajes: 735
Antigüedad: 13 años, 10 meses
Puntos: 55
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

Cita:
Iniciado por jempmx28 Ver Mensaje
Excelente Aporte, para lo que mencionan cada vez que escriben, solo es crear una funcion donde si en el textArea hay actividad no actualize ese campo, hasta que haya enviado la peticion es sencillo.

saludos!
y podrias decirnos como se crea esa funcion? seria de mucha ayuda, gracias.
muy bueno el chat.
  #29 (permalink)  
Antiguo 14/08/2010, 08:03
Avatar de mandrake88  
Fecha de Ingreso: septiembre-2009
Mensajes: 328
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

estas usando en las querys sql la variable post directamente!! esta bien que no le hayas puesto seguridad, pero esto ya es abrirse de gambas xD al menos valida las vars antes de usarlas para consultas
  #30 (permalink)  
Antiguo 17/09/2010, 21:57
 
Fecha de Ingreso: julio-2010
Mensajes: 523
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: [APORTE]Crear un chat con php+ajax, (con salas y muestra los usuarios onli

hola..pato12 me pudes enviar por favor....los chats que dices.....con fotos y cuentas........para verlos y probarlos....estoy aprendiendo php ......y quiero aprenderlo al maximo........:) mi correo es spirron20@hotm......
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 10 personas




La zona horaria es GMT -6. Ahora son las 12:50.