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

MiniChat con PHP/MySQL/AJAX v2.0

Estas en el tema de MiniChat con PHP/MySQL/AJAX v2.0 en el foro de Frameworks JS en Foros del Web. Hola a todos bueno pues aqui tengo la version 2.0 del minichat hecho con PHP y AJAX pero esta vez usando bases de datos. En ...

  #1 (permalink)  
Antiguo 22/09/2007, 07:48
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 9 meses
Puntos: 62
MiniChat con PHP/MySQL/AJAX v2.0

Hola a todos bueno pues aqui tengo la version 2.0 del minichat hecho con PHP y AJAX pero esta vez usando bases de datos. En mi caso he usado MySQL. Otra de la diferencia es que no carga todo el rato los resultados sino que utilizo una variable oculta con el valor del md5 de la suma de id+comentario+fecha del ultimo comentario y si este es diferente pues lo actualiza, pero mejor vemos el ejemplo ;)

Licencia: LGPL

http://www.gnu.org/licenses/lgpl.html

connect.php
Código PHP:
<?php
/*
Esta es la estructura de la tabla
create table chat( id int(5), comentario text, fecha text, primary key(id));
*/
function Conecta()
 {
  
$nombreddbb="Aqui el nombre de la bases de datos";
  if(!(
$link=mysql_connect("localhost","usuario","password")))
   {
    echo 
"Error al conectar con la base de datos.";
    exit();
   }
  if(!
mysql_select_db($nombreddbb,$link))
   {
    echo 
"Error al elegir la base de datos.";
    exit();
   }
   return 
$link;
 }
$link=Conecta();
?>
index.php
Código PHP:
<?php
include("connect.php");
//
if($_GET["Enviar"]=="si")
 {
  
$max="select max(id) from chat";
  
$max=mysql_query($max);
  
$max=mysql_result($max,0,0)+1;
  
$fecha=date("Y/m/d - H:i:s");
  
//
  
$insert="insert into chat values(".$max.",'".htmlentities(utf8_decode($_REQUEST["comentario"]))."','".$fecha."')";
  if(
trim($_REQUEST["comentario"])!=NULL)
   {
    
$insert=mysql_query($insert);
   }
  exit();
 }
elseif(
$_GET["Leer"]=="si")
 {
  
header("Cache-Control: no-store, no-cache, must-revalidate");
  
$select="select * from chat order by id desc limit 0,10";
  
$select=mysql_query($select);
  while(
$row mysql_fetch_array($select))
   {
    if(
$row["comentario"]!=NULL)
     {
        echo 
"<strong>".$row["fecha"]."</strong> - ".$row["comentario"]."<br />";
     }
   }
  exit();
 }
elseif(
$_GET["Hash"]=="si")
 {
  
header("Cache-Control: no-store, no-cache, must-revalidate");
  
$max="select max(id) from chat";
  
$max=mysql_query($max);
  
$max=mysql_result($max,0,0);
  
//
  
$select="select * from chat where id=".$max." limit 1";
  
$select=mysql_query($select);
  
//
  
$id=mysql_result($select,0,"id");
  
$comentario=mysql_result($select,0,"comentario");
  
$fecha=mysql_result($select,0,"fecha");
  
//
  
$hash=$id.$comentario.$fecha;
  if(
$hash==NULL)
   {
    echo 
"vacio";
   }
  else
   {
    
$hash=md5($id.$comentario.$fecha);
    echo 
$hash;
   }
  exit();
 }
?>
Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>MiniChat :)</title>
<script type="text/javascript" src="ajax.js"></script>
<script type="text/javascript"> 
setInterval("fajax3()",5000);
</script>
</head>
<body>
<input type="text" id="comentario" size="50" maxlength="50" />
<input type="button" value="bota" onclick="fajax()" />
<div id="chat">
</div>
<input type="hidden" id="id_hash" value="" />
<script type="text/javascript">
    document.getElementById('comentario').value="";
    document.getElementById('comentario').focus();
 fajax3();
</script>
</body>
</html> 
ajax.js
Código:
function ajaxFunction()
  {
  var xmlHttp;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    return xmlHttp;
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      return xmlHttp;
      }
    catch (e)
      {
      try
        {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        return xmlHttp;
        }
      catch (e)
        {
        alert("Your browser does not support AJAX!");
        return false;
        }
      }
    }
  }
function fajax()
{
    var comentario; 
    comentario = document.getElementById('comentario').value;
    var ajax;
    ajax = new ajaxFunction();

    ajax.open("POST","?Enviar=si",true);
    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    ajax.send("comentario="+comentario);

    document.getElementById('comentario').value="";
    document.getElementById('comentario').focus();
    fajax3();
}
function fajax2()
 {
    var ajax;
    ajax=new ajaxFunction();
    ajax.onreadystatechange=function()
      {
      if(ajax.readyState==4)
        {
        document.getElementById('chat').innerHTML=ajax.responseText;
        }
      }
    ajax.open("GET","?Leer=si",true);
    ajax.send(null);    
 } 
function fajax3()
 {
    var ajax;
    ajax=new ajaxFunction();
    var hashviejo;
    hashviejo=document.getElementById('id_hash').value;
    ajax.onreadystatechange=function()
      {
      if(ajax.readyState==4)
        {
	if(hashviejo!=ajax.responseText && ajax.responseText!='vacio')
	 {
		document.getElementById('id_hash').value=ajax.responseText;
		fajax2();		
	 }        
        }
      }
    ajax.open("GET","?Hash=si",true);
    ajax.send(null);
 }
Tranquilos que lo he probado en IE tambien ;)

Podeis ver el ejemplo en:

http://zital.no-ip.org/txat/

no me lo peteis ;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan

Última edición por ZiTAL; 02/11/2007 a las 16:05
  #2 (permalink)  
Antiguo 22/09/2007, 08:41
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 3 meses
Puntos: 8
Re: MiniChat con PHP/MySQL/AJAX v2.0

Muy bueno zital, estoy con él pero no se porque no me funciona, se queda igual simplemente. Voy a seguir probando.
  #3 (permalink)  
Antiguo 22/09/2007, 11:25
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 9 meses
Puntos: 62
Re: MiniChat con PHP/MySQL/AJAX v2.0

Bueno tenia un pequeño error y es que si estaba vacio lo enviaba lo edito!!!

Para cambiar la frecuencia de la actualizacion cambiamos:

setIntervarl: que esta en milisegundos, en este ejemplo esta cada 5 segundos (5000)

y si quereis cambiar la cantidad de mensajes cambiais la select por:

0,10 son los primeros 10, si ponemos 0,20 seras los 20 primeros ;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #4 (permalink)  
Antiguo 23/09/2007, 04:07
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 9 meses
Puntos: 62
Re: MiniChat con PHP/MySQL/AJAX v2.0

Bueno si no consigues hacerlo funcionar pon el codigo y te podremos ayudar ;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #5 (permalink)  
Antiguo 24/09/2007, 07:19
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 3 meses
Puntos: 8
Re: MiniChat con PHP/MySQL/AJAX v2.0

Bueno aquí pongo mi código, que viene a ser el mismo casi:

Principal.html
Código HTML:
<html>
<head>
<title>MiniChat :)</title>
<script type="text/javascript" src="ajax.js"></script>
<script type="text/javascript"> 
setInterval("fajax3()",1000);
</script>
</head>
<body>
<input type="text" id="comentario" size="50" maxlength="50" />
<input type="button" value="bota" onClick="fajax()" />
<div id="chat">
</div>
<input type="hidden" id="id_hash" value="" />
<script type="text/javascript">
    document.getElementById('comentario').value="";
    document.getElementById('comentario').focus();
 fajax3();
</script>
</body>
</html> 


index.php
Código PHP:
<?php
include("connect.php");
//
if($_GET["Enviar"]=="si")
 {
  
$max="select max(id)+1 from chat2";
  
$max=mysql_query($max);
  
$max=mysql_result($max,0,0);
  
$fecha=date("Y/m/d - H:i:s");
  
//
  
$insert="insert into chat2 values(".$max.",'".$_REQUEST["comentario"]."','".$fecha."')";
  echo 
$insert;
  
$insert=mysql_query($insert);
  exit();
 }
elseif(
$_GET["Leer"]=="si")
 {
  
header("Cache-Control: no-store, no-cache, must-revalidate");
  
$select="select * from chat2 order by id desc limit 0,10";
  
$select=mysql_query($select);
  while(
$row mysql_fetch_array($select))
   {
    if(
$row["comentario"]!=NULL)
     {
        echo 
"<strong>".$row["fecha"]."</strong> - ".$row["comentario"]."<br />";
     }
   }
  exit();
 }
elseif(
$_GET["Hash"]=="si")
 {
  
header("Cache-Control: no-store, no-cache, must-revalidate");
  
$max="select max(id) from chat2";
  
$max=mysql_query($max);
  
$max=mysql_result($max,0,0);
  
//
  
$select="select * from chat2 where id=".$max." limit 1";
  
$select=mysql_query($select);
  
//
  
$id=mysql_result($select,0,"id");
  
$comentario=mysql_result($select,0,"comentario");
  
$fecha=mysql_result($select,0,"fecha");
  
//
  
$hash=$id.$comentario.$fecha;
  if(
$hash==NULL)
   {
    echo 
"vacio";
   }
  else
   {
    
$hash=md5($id.$comentario.$fecha);
    echo 
$hash;
   }
  exit();
 }
?>


ajax.js

Cambiadas ?Enviar=si por index.php?Enviar=si i POST por post
Código:
function ajaxFunction01()
  {
  var xmlHttp;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    return xmlHttp;
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      return xmlHttp;
      }
    catch (e)
      {
      try
        {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        return xmlHttp;
        }
      catch (e)
        {
        alert("Your browser does not support AJAX!");
        return false;
        }
      }
    }
  }
function ajaxFunction02()
  {
  var xmlHttp;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    return xmlHttp;
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      return xmlHttp;
      }
    catch (e)
      {
      try
        {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        return xmlHttp;
        }
      catch (e)
        {
        alert("Your browser does not support AJAX!");
        return false;
        }
      }
    }
  } 
function ajaxFunction03()
  {
  var xmlHttp;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    return xmlHttp;
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      return xmlHttp;
      }
    catch (e)
      {
      try
        {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        return xmlHttp;
        }
      catch (e)
        {
        alert("Your browser does not support AJAX!");
        return false;
        }
      }
    }
  }
function fajax()
{
    var comentario; 
    comentario = document.getElementById('comentario').value;
    var ajax;
    ajax = ajaxFunction01();

    ajax.open("post","index.php?Enviar=si",true);
    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    ajax.send("comentario="+comentario);

    document.getElementById('comentario').value="";
    document.getElementById('comentario').focus();
    fajax3();
}
function fajax2()
 {
    var ajax;
    ajax=ajaxFunction02();
    ajax.onreadystatechange=function()
      {
      if(ajax.readyState==4)
        {
        document.getElementById('chat').innerHTML=ajax.responseText;
        }
      }
    ajax.open("get","index.php?Leer=si",true);
    ajax.send(null);    
 } 
function fajax3()
 {
    var ajax;
    ajax=ajaxFunction03();
    var hashviejo;
    hashviejo=document.getElementById('id_hash').value;
    ajax.onreadystatechange=function()
      {
      if(ajax.readyState==4)
        {
	if(hashviejo!=ajax.responseText && ajax.responseText!='vacio')
	 {
		document.getElementById('id_hash').value=ajax.responseText;
		fajax2();		
	 }        
        }
      }
    ajax.open("get","index.php?Hash=si",true);
    ajax.send(null);
 }
connect.php
Código PHP:
<?php
/*
Esta es la estructura de la tabla
create table chat( id int(5), comentario text, fecha text, primary key(id));
*/
function Conecta()
 {
     
$dbhost 'localhost';  //nombre de host (suele ser 'localhost')
     
$nombreddbb='minombre';
     
$dbuser 'miuser';  //usuario de la base de datos
     
$dbpasswd 'mipass';  //contraseña ...
   
  
if(!($link=mysql_connect($dbhost,$dbuser,$dbpasswd)))
   {
    echo 
"Error al conectar con la base de datos.";
    exit();
   }
  if(!
mysql_select_db($nombreddbb,$link))
   {
    echo 
"Error al elegir la base de datos.";
    exit();
   }
   return 
$link;
 }
$link=Conecta();
?>



A veces el chat me lanza este error cuando refresca:

Warning: Cannot modify header information - headers already sent by (output started at /home/misite/public_html/chat2/connect.php:26) in /home/misite/public_html/chat2/index.php on line 18

Última edición por AbdelioR; 24/09/2007 a las 07:26
  #6 (permalink)  
Antiguo 24/09/2007, 08:20
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 9 meses
Puntos: 62
Re: MiniChat con PHP/MySQL/AJAX v2.0

quita el

echo $insert; en el index.php

y en connect.php tienes una linea en blanco despues del texto, suprimela.

mirate otra vez el primer post ya que lo edite ;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #7 (permalink)  
Antiguo 24/09/2007, 09:05
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 3 meses
Puntos: 8
Re: MiniChat con PHP/MySQL/AJAX v2.0

Vale, ahora si que va, perfecto tanto en ff como en ie.

Muchas gracias ZiTaL, muy buen aporte. Voy a mirar de modificarlo un poco para que tenga alguna cosilla más.

Muchas gracias.


PD: no se si viste mi post sobre enviar un sonido a la web con ajax también cuando se enviara el formulario. Si sabes del tema podriías comentar si es posible o no?
  #8 (permalink)  
Antiguo 24/09/2007, 10:07
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 9 meses
Puntos: 62
Re: MiniChat con PHP/MySQL/AJAX v2.0

el problema de los sonidos es el siguiente:

tienen que ser en formatos wav o midi en cuanto a javascript.

Otra opcion es crear un flash que emita el sonido.

Preguntale a google lo siguiente:


reproducir sonido javascript

a ver que te cuenta ;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #9 (permalink)  
Antiguo 24/09/2007, 10:30
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 3 meses
Puntos: 8
Re: MiniChat con PHP/MySQL/AJAX v2.0

Ya pero a mi me gustaria que el sonido se ejecutara para todos los usuarios. Es decir, que al enviar un usuario un mensaje en el chat, los demás navegantes además de recibir el mensaje instantaneamente (ajax) también escuchara en sonido.
  #10 (permalink)  
Antiguo 25/09/2007, 01:22
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 9 meses
Puntos: 62
Re: MiniChat con PHP/MySQL/AJAX v2.0

pero eso es facil solo tendrias que poner el codigo en fajax2 que es el que recarga el chat, lo que nececitas es el codigo del sonido.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #11 (permalink)  
Antiguo 25/09/2007, 04:35
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 3 meses
Puntos: 8
Re: MiniChat con PHP/MySQL/AJAX v2.0

Sip, ya imaginaba que iria en la función de recarga. El problema es que no he encontrado nada de ejecución de sonidos ni con ajax ni con comet como comentaba otro usuario. :/
  #12 (permalink)  
Antiguo 25/09/2007, 05:04
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 9 meses
Puntos: 62
Re: MiniChat con PHP/MySQL/AJAX v2.0

tienes que buscar referente a javascript.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #13 (permalink)  
Antiguo 25/09/2007, 05:15
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 3 meses
Puntos: 8
Re: MiniChat con PHP/MySQL/AJAX v2.0

Ams, ejecutando el script javascript en la función ajax funcionaria? es que no me aclaro.

He encontrado esto por ejemplo:

Código:
<script>
<!--

function playSound() {
  document.all.sound.src = "url del sonido"
}
-->
</script>
Te refieres a esto? y luego mezclarlo con ajax?
  #14 (permalink)  
Antiguo 25/09/2007, 07:15
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 9 meses
Puntos: 62
Re: MiniChat con PHP/MySQL/AJAX v2.0

en este link:
http://www.phon.ucl.ac.uk/home/mark/audio/play.htm

la cuarta opcion creo que es la mas optima para esto ;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #15 (permalink)  
Antiguo 25/09/2007, 07:42
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 3 meses
Puntos: 8
Re: MiniChat con PHP/MySQL/AJAX v2.0

Perfecto! ya funciona creo, aunque hay un par de cosillas.

En IE me dice que presione la barra espaciadora o control para activar el embed del sonido :S.

La otra cosa es que al cargar el chat por primera vez también se reproduce el sonido.

El codigo queda asi:

Código:
function EvalSound(soundobj) {
  var thissound=document.getElementById(soundobj);
  thissound.Play();
}

function fajax2()
 {
    var ajax;
    ajax=ajaxFunction02();
    ajax.onreadystatechange=function()
      {
      if(ajax.readyState==4)
        {
        document.getElementById('chat').innerHTML=ajax.responseText;
        }
      }
	EvalSound('sound1')
    ajax.open("get","index.php?Leer=si",true);
    ajax.send(null);    
 }
y en el html:

Código HTML:
<embed src="../audio/light.wav" autostart=false width=0 height=0 id="sound1"
enablejavascript="true"> 

PD: A ti tu versión te carga siempre al cargar la página de nuevo? a mi hay veces que la div no se abre y no muestra los mensajes.

Última edición por AbdelioR; 25/09/2007 a las 10:08
  #16 (permalink)  
Antiguo 26/09/2007, 00:00
 
Fecha de Ingreso: febrero-2007
Mensajes: 70
Antigüedad: 17 años, 10 meses
Puntos: 1
Re: MiniChat con PHP/MySQL/AJAX v2.0

yo quiero hacer un tagboard lateral para una aplicación web que estoy realizando... en mi caso el usuario solo tendría que ingresar el mensaje a públicar ya que el nombre de usuario lo tomaría desde la variable de sesion, para evitar así el mal uso del servicio ya que quedaría registrado siempre quien es la persona que escribió el mensaje.
por supuesto para entrar al sitio hay que poner login y password y en ese momento se captura el login en una variable de sesion..

la tabla de la base de datos es asi:
----------------------------------------------------
id_mensaje (autoincrement)
nombre_curso (clave foranea)
fecha_mensaje
mensaje
login_rte
-------------------------------------------------------
bueno cabe aclarar que el sistema es una plataforma de educación... el usuario al entrar veria solo los mensajes del curso al que pertenece... por ejemplo yo entro y estoy en 4B (igual hay una variable de sesion con este dato) en el tagboard aparecen solo los mensajes en que
NOMBRE_CURSO = 4B

eso no es pa nada del otro mundo... ahora si no es mucha molestia te agradecería mucho me explicaras un poco tu codigo ya que es casi lo que necesito

yo pondria los mensajes dentro de un text area en la orilla derecha de la pagina..
por ejemplo para que usas el 'id_hash'????

igual estoy cansado y mañana lo miro mejor....
lo otro hay alguna forma de que cada mensaje aparesca con un color de fondo diferente?? para saber donde empieza uno y termina el otro???

bueno gracias por el codigo... lo mmiro con mas calma en la mañana y te posteo lo que resulta

Cita:
elseif($_GET["Hash"]=="si")
{
header("Cache-Control: no-store, no-cache, must-revalidate");
$max="select max(id) from chat";
$max=mysql_query($max);
$max=mysql_result($max,0,0);
//
$select="select * from chat where id=".$max." limit 1";
$select=mysql_query($select);
//
$id=mysql_result($select,0,"id");
$comentario=mysql_result($select,0,"comentario");
$fecha=mysql_result($select,0,"fecha");
//
$hash=$id.$comentario.$fecha;
if($hash==NULL)
{
echo "vacio";
}
else
{
$hash=md5($id.$comentario.$fecha);
echo $hash;
}
esa es la parte que no entiendo.... especificamente

Última edición por mreyesb; 26/09/2007 a las 00:07
  #17 (permalink)  
Antiguo 26/09/2007, 07:10
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 9 meses
Puntos: 62
Re: MiniChat con PHP/MySQL/AJAX v2.0

Hola el id_hash lo utilizo para comprobar si se ha metido algun registro nuevo, si se ha metido uno nuevo llama a la funcion de refrescar el chat, si no se ha introducido nada se deja como esta.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #18 (permalink)  
Antiguo 26/09/2007, 10:17
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 3 meses
Puntos: 8
Re: MiniChat con PHP/MySQL/AJAX v2.0

Bueno, no consigo ver porque el sonido se oye más de una vez a veces, y porque el chat otras veces no se muestra.

Aquí está mi ejemplo:

Ejemplo

Como podreis comprobar, a veces suena más de una vez, y al cargar el chat también suena :/
  #19 (permalink)  
Antiguo 27/09/2007, 11:50
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 3 meses
Puntos: 8
Re: MiniChat con PHP/MySQL/AJAX v2.0

Nadie ve donde puede estar el error? :(
  #20 (permalink)  
Antiguo 27/09/2007, 13:34
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 9 meses
Puntos: 62
Re: MiniChat con PHP/MySQL/AJAX v2.0

hombre es que tienes que poner el codigo. Por lo que veo el sonido debe de ir dentro de body, tienes idea de xhtml/javascript/php?
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #21 (permalink)  
Antiguo 27/09/2007, 13:43
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 3 meses
Puntos: 8
Re: MiniChat con PHP/MySQL/AJAX v2.0

Ups, no se que hacia fuera del body. Pues en php me defiendo, en lo otro menos ya... (era una pregunta irónica?)

El código es este:


principal.html
Código HTML:
<body style="font-size:10px; font-family:Verdana, Arial, Helvetica, sans-serif;"> 
<embed src="light.wav" autostart=false width=0 height=0 id="sound1" enablejavascript="true" >
  <div id="chat" style="border:1px solid #990000; width:150px;"></div> 
...
...
...
...

ajax.js
Código:
...
...

function EvalSound(soundobj) {
  var thissound=document.getElementById(soundobj);
  thissound.Play();
}

function fajax2()
 {
    var ajax;
    ajax=ajaxFunction02();
    ajax.onreadystatechange=function()
      {
      if(ajax.readyState==4)
        {
        document.getElementById('chat').innerHTML=ajax.responseText;	
        }
      }
	EvalSound('sound1');
    ajax.open("get","index.php?Leer=si",true);
    ajax.send(null);    
 } 

...
...
  #22 (permalink)  
Antiguo 27/09/2007, 13:50
 
Fecha de Ingreso: septiembre-2007
Mensajes: 19
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: MiniChat con PHP/MySQL/AJAX v2.0

que bueno este hilo y cuanto se aprende. en cuanto pueda lo fusilo. por cierto ZITAL que significa Euskerie ahuen eta bijotzan ?
  #23 (permalink)  
Antiguo 28/09/2007, 02:15
 
Fecha de Ingreso: febrero-2007
Mensajes: 70
Antigüedad: 17 años, 10 meses
Puntos: 1
Re: MiniChat con PHP/MySQL/AJAX v2.0

Holas,
tengo un problema... logro guardar mensajes en la base de datos pero no los logro ver... me sale este error en la parte donde deberían aparecer los monsajes posteados:

Warning: Cannot modify header information - headers already sent by

bueno tambien se por que aparece... lo que pasa es que yo junto con la conección a la base e datos inicio sesion con "session_start();" y eso envía la cabeceras... pero no puedo quitar eso de mi aplicación por que requiero de las variables de sesion para el ingreso a la paginas... ahora no se como arreglarlo, por que si quito estas lineas del codigo php:

header("Cache-Control: no-store, no-cache, must-revalidate");

simplemente no me muestra nada, el div donde deverían aparecer los mensajes posteados sale vacia... y si coloco esas lineas aparece el warning y queda ahí..

como decia antes.. al escribir un mensaje y apretar el boton lo guarda sin problemas en la base de datos, el drama es para mostar lo que se postió...

agradesco de antemano su ayuda....
saludos.
  #24 (permalink)  
Antiguo 28/09/2007, 02:21
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 9 meses
Puntos: 62
Re: MiniChat con PHP/MySQL/AJAX v2.0

Para AbdelioR: A veces tengo la sensacion de que no entendeis nada del codigo, por eso te lo pregunto.

Para mreyesb:

ese problema esta solucionado mas arriba y es por las lineas en blanco despues de ?> al finalizar de escribir el archivo.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #25 (permalink)  
Antiguo 28/09/2007, 02:32
 
Fecha de Ingreso: febrero-2007
Mensajes: 70
Antigüedad: 17 años, 10 meses
Puntos: 1
Re: MiniChat con PHP/MySQL/AJAX v2.0

holas, gracias por responder...

no es eso.... por que eliminé todas las lineas en blanco... tu no crees que sea por el session start()?? creo que esa funcion envia datos al header pero obligatoriamente se tiene que declarar antes que todo... haber voy a postear los codigos..
  #26 (permalink)  
Antiguo 28/09/2007, 02:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 70
Antigüedad: 17 años, 10 meses
Puntos: 1
Re: MiniChat con PHP/MySQL/AJAX v2.0

AVISOS.PHP
Código PHP:
<?php
include("incal/sec.php");
$usuario $_SESSION["s_login"];
$curso $_SESSION["s_curso"]; 
if(
$_GET["Enviar"]=="si")
 {
  
$fecha=date("Y/m/d - H:i:s");
  
$aviso=addslashes(trim(utf8_decode($_REQUEST["comentario"])));
  
//
  
$insert="insert into avisos (nombre_curso,fecha_aviso,aviso,login_rte) values ('$curso','$fecha','$aviso','$usuario')";
  if(
$aviso!=NULL)
   {
    
$insert=mysql_query($insert);
    }
  exit();
 }
elseif(
$_GET["Leer"]=="si")
 {
  
header("Cache-Control: no-store, no-cache, must-revalidate");
  
$select="select * FROM avisos WHERE nombre_curso = '$curso' order by id_aviso desc limit 0,10";
  
$select=mysql_query($select);
  while(
$row mysql_fetch_array($select))
   {
    if(
$row["aviso"]!=NULL)
     {
         echo 
"<strong>".$row["fecha_aviso"]."</strong> - ".$row["aviso"]."<br />";
     }
   }
  exit();
 }
elseif(
$_GET["Hash"]=="si")
 {
  
header("Cache-Control: no-store, no-cache, must-revalidate");
  
$max="select max(id_aviso) from avisos WHERE nombre_curso = '$curso'";
  
$max=mysql_query($max);
  
$max=mysql_result($max,0,0);
  
//
  
$select="select * from avisos where id_aviso = '$max' limit 1";
  
$select=mysql_query($select);
  
//
  
$id=mysql_result($select,0,"id_aviso");
  
$comentario=mysql_result($select,0,"aviso");
  
$fecha=mysql_result($select,0,"fecha_aviso");
  
//
  
$hash=$id.$comentario.$fecha;
  if(
$hash==NULL)
   {
    echo 
"vacio";
   }
  else
   {
    
$hash=md5($id.$comentario.$fecha);
    echo 
$hash;
   }
  exit();
 }
?>
SEC:PHP
Código PHP:
<?php
session_start
(); 
if (
$_SESSION["s_tipo"] != "AL") {   //esto no se ejecuta ya que hago un ingreso 
    
header("Location: ../index.php");     //valido... esto es en caso de que no se
    
exit();                                                 //ingrese login y pass
}
$dbhost='xxxxxxx';
$dbusername='xxxxx';
$dbuserpass='xxxxx';
$dbname='xxxxxx';
mysql_connect ($dbhost$dbusername$dbuserpass);
mysql_select_db($dbname) or die('Cannot select database');
?>
HTML:
Código:
<div id="avisoscont">
</div>
		
<input type="text" id="comentario" size="50" maxlength="200" />
<div id="boton1">
<button onClick="fajax()" type="button" class="btnform">Publicar</button>
</div>
<input type="hidden" id="id_hash" value="" />

<script type="text/javascript">
    document.getElementById('comentario').value="";
    document.getElementById('comentario').focus();
 	fajax3();
</script>
AJAX:
Código:
function ajaxFunction01()
  {
  var xmlHttp;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    return xmlHttp;
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      return xmlHttp;
      }
    catch (e)
      {
      try
        {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        return xmlHttp;
        }
      catch (e)
        {
        alert("Su browser no soporta AJAX!");
        return false;
        }
      }
    }
  }
function ajaxFunction02()
  {
  var xmlHttp;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    return xmlHttp;
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      return xmlHttp;
      }
    catch (e)
      {
      try
        {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        return xmlHttp;
        }
      catch (e)
        {
        alert("Su browser no soporta AJAX!");
        return false;
        }
      }
    }
  } 
function ajaxFunction03()
  {
  var xmlHttp;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    return xmlHttp;
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      return xmlHttp;
      }
    catch (e)
      {
      try
        {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        return xmlHttp;
        }
      catch (e)
        {
        alert("Su browser no soporta AJAX!");
        return false;
        }
      }
    }
  }
function fajax()
{
    var comentario; 
    comentario = document.getElementById('comentario').value;
    var ajax;
    ajax = ajaxFunction01();
	ajax.open("POST","avisos.php?Enviar=si",true);
    ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	ajax.send("comentario="+comentario);
    document.getElementById('comentario').value="";
    document.getElementById('comentario').focus();
    fajax3();
	
}
function fajax2()
 {
    var ajax;
    ajax=ajaxFunction02();
	ajax.onreadystatechange=function()
      {
      if(ajax.readyState==4)
        {
        document.getElementById('avisoscont').innerHTML=ajax.responseText;
        }
      }
    ajax.open("GET","avisos.php?Leer=si",true);
    ajax.send(null);    
 } 
function fajax3()
 {
    var ajax;
    ajax=ajaxFunction03();
    var hashviejo;
    hashviejo=document.getElementById('id_hash').value;
    ajax.onreadystatechange=function()
      {
      if(ajax.readyState==4)
        {
	if(hashviejo!=ajax.responseText && ajax.responseText!='vacio')
	 {
		document.getElementById('id_hash').value=ajax.responseText;
		fajax2();		
	 }        
     }
    }
    ajax.open("GET","avisos.php?Hash=si",true);
    ajax.send(null);
 }

estructura tabla de la base datos:
id_aviso (primaria int autoincrement)
nombre_curso (foranea)
fecha_aviso
aviso
login_rte

ahora ya no me muestra el error algo moví ya a esta hora no se que.... pero sigue sin mostrar nada.. bueno ahí dejo los codigos haber si me pueden ayudar
saludos

ps: perdon por el doble post

Última edición por mreyesb; 28/09/2007 a las 03:41
  #27 (permalink)  
Antiguo 01/10/2007, 14:09
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 3 meses
Puntos: 8
Re: MiniChat con PHP/MySQL/AJAX v2.0

Murió el post.
  #28 (permalink)  
Antiguo 01/10/2007, 14:41
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 9 meses
Puntos: 62
Re: MiniChat con PHP/MySQL/AJAX v2.0

Para mreyesb, ahi no creo que puedas poner el session_start() ya que al llamar mediante ajax a esa misma pagina te ejecutara otra vez el codigo de session_start(), lo tendras que poner despues de todas las if's. En mi caso encima de:

index.php
Código PHP:
...
  else
   {
    
$hash=md5($id.$comentario.$fecha);
    echo 
$hash;
   }
  exit();
 }
session_start();
?> 
asi sabes que solo lo ejecutara cuando cargue el HTML ;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #29 (permalink)  
Antiguo 02/10/2007, 02:51
 
Fecha de Ingreso: febrero-2007
Mensajes: 70
Antigüedad: 17 años, 10 meses
Puntos: 1
Re: MiniChat con PHP/MySQL/AJAX v2.0

Hola
se me ocurrio la brillante idea de revisar el log de errores de php y tenía el siguiente error:

[28-Sep-2007 05:16:29] PHP Warning: mysql_result() [<a href='function.mysql-result'>function.mysql-result</a>]: Unable to jump to row 0 on MySQL result index 4 in C:\wamp\www\sanandresDef22\alumnos\avisos.php on line 41
[28-Sep-2007 05:16:29] PHP Warning: mysql_result() [<a href='function.mysql-result'>function.mysql-result</a>]: Unable to jump to row 0 on MySQL result index 4 in C:\wamp\www\sanandresDef22\alumnos\avisos.php on line 42
[28-Sep-2007 05:16:29] PHP Warning: mysql_result() [<a href='function.mysql-result'>function.mysql-result</a>]: Unable to jump to row 0 on MySQL result index 4 in C:\wamp\www\sanandresDef22\alumnos\avisos.php on line 43

por algún motivo la función mysql_result no funcionaba en esta parte:

Código PHP:
$id=mysql_result($select,0,"id_aviso");    //linea41
$comentario=mysql_result($select,0,"aviso");   //linea42
$fecha=mysql_result($select,0,"fecha_aviso");    //linea 43 
así que cambie esto que estaba en tu codigo:

Código PHP:
$max="select max(id_aviso) from avisos WHERE nombre_curso = '$curso'"
  
$max=mysql_query($max); 
  
$max=mysql_result($max,0,0); 
  
// 
  
$select="select * from avisos where id_aviso = '$max' limit 1"
  
$select=mysql_query($select); 
  
// 
  
$id=mysql_result($select,0,"id_aviso"); 
  
$comentario=mysql_result($select,0,"aviso"); 
  
$fecha=mysql_result($select,0,"fecha_aviso"); 
POR ESTO OTRO, que, segun yo es lo mismo
Código PHP:
$max="select max(id_aviso) from avisos WHERE nombre_curso = '$curso'";
  
$max=mysql_query($max);
  
$max=mysql_result($max,0,0);
  
//
  
$select="select * from avisos where id_aviso = '$max' limit 1";
  
$select=mysql_query($select);
  
$select=mysql_fetch_array($select);   //agregué esta linea
  //
  
$id=$select['id_aviso'];                        //cambie acá
  
$comentario=$select['aviso'];              //cambie acá
  
$fecha=$select['fecha_aviso'];            //cambie acá
  // 
Bueno ahora el log de errores de php no muestra absolutamente nada cuando corro el programa, ni errores de header, ni ningún otro error, pero sigue sin mostrar los mensajes... como te decía antes, los guarda en la base de datos sin problemas, pero no los muestra.... mañana voy a meterle mano al ajax.. haber si lo consigo arreglar con lo poco que se sobre eso...

disculpa mi ignoracia al respecto pero me salta una duda... yo he hecho algunos cosas con ajax y en esta parte:

Código:
function fajax3()
 {
    var ajax;
    ajax=ajaxFunction03();
    var hashviejo;
    hashviejo=document.getElementById('id_hash').value;
    ajax.onreadystatechange=function()
      {
      if(ajax.readyState==4)
        {
	if(hashviejo!=ajax.responseText && ajax.responseText!='vacio')
	 {
		document.getElementById('id_hash').value=ajax.responseText;
		fajax2();		
	 }        
     }
    }
    ajax.open("GET","avisos.php?Hash=si",true);
    ajax.send(null);
 }
esto:
ajax.open("GET","avisos.php?Hash=si",true);
ajax.send(null);

no debería ir antes de:
document.getElementById('id_hash').value=ajax.resp onseText;
?????????????????
te pregunto por lo que me salto la duda.. en otros que he hecho yo por lo menos ha sido asi...

saludos

Última edición por mreyesb; 02/10/2007 a las 03:01
  #30 (permalink)  
Antiguo 03/10/2007, 16:36
 
Fecha de Ingreso: febrero-2007
Mensajes: 70
Antigüedad: 17 años, 10 meses
Puntos: 1
Re: MiniChat con PHP/MySQL/AJAX v2.0

Funcionó... el problema estaba en php no en ajax... te explico:
por algún motivo este código no funcionaba:
Código PHP:
$select "select * FROM avisos WHERE nombre_curso = '$curso' order by id_aviso desc limit 0,10";
  
$select mysql_query($select);
  while(
$row mysql_fetch_array($select))
   {
    if(
$row["aviso"]!=NULL)
     {
         echo 
"<strong>".$row["login_rte"]."</strong> - ".$row["aviso"]."<br />";
     }
   }
  exit();
 } 
lo cambie por este
Código PHP:
$select "select fecha_aviso, aviso, login_rte FROM avisos WHERE nombre_curso = '$curso' order by id_aviso desc limit 0,10";
  
$select mysql_query($select);
  while(
$row mysql_fetch_array($select))
   {
    if(
$row["aviso"]!=NULL)
     {
         echo 
"<strong>".$row["login_rte"]."</strong> - ".$row["aviso"]."<br />";
     }
   }
  exit();
 } 
el select * no funciona por algún motivo que no he descubierto aún.. si tu sabes te agradesería me informaras.. pero eso ya es mas un problema de php, por que si coloco la consulta con select * en phpmyadmin si funciona... bueno al final
CHAT FUNCIONANDO CON PHP, MYSQL, SESIONES y AJAX.... te dejo una captura de pantalla para que lo veas..

http://img340.imageshack.us/img340/5...sdelwebmp1.jpg


Si te das cuenta no hay que poner el nombre de usuario, ya que al enviar un mensaje ese dato es obtenido desde una variable de sesion, por lo que el usuario solo debe escribir el mensaje y presionar el boton publicar, asi tambien se evita el mal uso del chat ya que siempre quedará el nombre del usuario que escribió el mensaje, y no se tiene la posibilidad de inventar nick para decir alguna estupidez....
Saludos y gracias por toda la ayuda

Última edición por mreyesb; 03/10/2007 a las 21:28
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 2 personas




La zona horaria es GMT -6. Ahora son las 02:07.