Nuevas caracteristicas:
- Añadido campo nombre.
- Añadido sonido al registrarse nuevos mensajes.
- El nombre se guarda en una cookie para que al volver a ingresar en el chat se mantenga.
Arreglos:
- Repeticiones de los mensajes.
Licencia: LGPL http://www.gnu.org/licenses/lgpl.html
Codigo:
index.php
Código PHP:
<?php
function Connect($host,$user,$passwd,$db)
{
if(!($link=mysql_connect($host,$user,$passwd)))
{
echo "Error connecting to DDBB.";
exit();
}
if(!mysql_select_db($db,$link))
{
echo "Error in DDBB selection.";
exit();
}
return $link;
}
function maxId()
{
$select="select max(id) from chat";
$select=mysql_query($select);
return mysql_result($select,0,0);
@mysql_free_result($select);
}
$link=Connect("host","usuario","password","DB_name");
// sending comments
if($_GET["Write"]=="yes")
{
$max=maxId()+1;
$date=mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y"));
$name=htmlentities(utf8_decode($_REQUEST["name"]));
$comment=htmlentities(utf8_decode($_REQUEST["comment"]));
//
$insert="insert into chat values(".$max.",'".$name."','".$comment."',".$date.")";
if(trim($_REQUEST["name"])!=NULL && trim($_REQUEST["comment"])!=NULL)
{
$insert=mysql_query($insert);
}
mysql_close($link);
exit();
}
// reading comments
elseif($_GET["Read"]=="yes")
{
header("Cache-Control: no-store, no-cache, must-revalidate");
$max=maxId();
if($max<50)
{
$max=0;
}
else
{
$max=$max-50;
}
$select="select id,nombre,comentario,data from chat order by id asc limit ".$max.",50";
$select=mysql_query($select);
while($row = @mysql_fetch_array($select))
{
if($row["id"]!=NULL)
{
$date=date("Y/m/d - H:i:s",$row["data"]);
echo "<span id=".$row["id"]."><strong>".$date." - ".utf8_encode($row["nombre"]).":</strong> ".utf8_encode($row["comentario"])."</span><br />";
}
}
@mysql_free_result($select);
mysql_close($link);
exit();
}
// reading last comments
elseif($_GET["ReadLast"]=="yes" && $_GET["id"]!=NULL)
{
header("Cache-Control: no-store, no-cache, must-revalidate");
$id=$_GET["id"];
$max=maxId();
//
$limit1=$id;
$limit2=$max-$id;
//
$select="select id,nombre,comentario,data from chat order by id asc limit ".$limit1.",".$limit2;
$select=mysql_query($select);
while($row = @mysql_fetch_array($select))
{
if($row["id"]!=NULL)
{
$date=date("Y/m/d - H:i:s",$row["data"]);
echo "<span id=".$row["id"]."><strong>".$date." - ".utf8_encode($row["nombre"]).":</strong> ".utf8_encode($row["comentario"])."</span><br />";
}
}
@mysql_free_result($select);
mysql_close($link);
exit();
}
// get the last ID
elseif($_GET["MaxId"]=="yes" && $_GET["id"]!=NULL)
{
header("Cache-Control: no-store, no-cache, must-revalidate");
$id=$_GET["id"];
$max=maxId();
echo $max;
@mysql_free_result($select);
mysql_close($link);
exit();
}
elseif($_GET["SetCookie"]=="yes" && $_GET["name"]!=NULL)
{
header("Cache-Control: no-store, no-cache, must-revalidate");
$domain="zital.no-ip.org";
$expire=time()+(86400*30); // 30 days
$name=htmlentities(utf8_decode($_GET["name"]));
setcookie('zitalk',$name,$expire,'/',$domain,0);
exit();
}
// Si hay cookie al coger foco por primera vez no se debe de borrar el campo ;)
if(trim($_COOKIE["zitalk"])!=NULL)
{
$cookiename=$_COOKIE["zitalk"];
$firstname='false';
}
else
{
$cookiename="Nombre...";
$firstname='true';
}
?>
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="application/xhtml+xml; charset=iso-8859-1;"/> <title>AJAX Chat</title> <style type="text/css"> body { background-color: #C0C0C0; color: #000000; font-size: 13px; } input { font-size: 12px; } #chat { border: 1px solid #000000; background-color: #F0F0F0; height: 200px; width: 800px; overflow: auto; padding: 8px; } </style> <script type="text/javascript" src="js/ajax.js"></script> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/color.js"></script> <script type="text/javascript" src="js/soundmanager2.js"></script> <script type="text/javascript"> // cada 2,5 segundos se verifican nuevas entradas en la bbdd setInterval("ajaxLasId()",1500); // activamos sonido soundManager.onload = function() { soundManager.createSound('mySound','sound/bonk.mp3'); } </script> </head> <body> <div> <h1>ZiTALK Ajax Chat v2.2</h1> <img src="img/loading.gif" style="display:none" alt="loading..."/> <p> <input type="text" id="nombre" size="15" maxlength="15" value="<?php echo $cookiename; ?>" onkeydown="pulse(this,event)"/> <input type="text" id="comentario" size="100" maxlength="100" value="Comentario..." onkeydown="pulse(this,event)"/> </p> </div> <div id="chat"> </div> <div> <a href="http://www.forosdelweb.com/f77/zitalk-version-2-1-beta-litle-ajax-chat-545601/">Codigo fuente</a> <br /> Licencia LGPL: <a href="http://www.gnu.org/licenses/lgpl.html">http://www.gnu.org/licenses/lgpl.html</a> <br /> e-mail: zitalman[@]gmail.com <br /><br /> <h2>Version 2.2</h2> Features: <ol> <li>Añadido sonido al registrarse nuevos mensajes.</li> <li>Añadido campo nombre.</li> <li>El nombre se guarda en una cookie para que al volver a ingresar en el chat se mantenga.</li> <li>Funciona en: firefox, konqueror, internet explorer, opera.</li> </ol> Bug fixes: <ol> <li>Corregido reperición de los mensajes.</li> </ol> <br /> <h2>Librerias externas usadas:</h2> <ol> <li><a href="js/jquery.js">jquery v1.1</a> url: <a href="http://www.jquery.com">http://www.jquery.com</a> Solamente usada para animaciones.</li> <li><a href="js/color.js">plugin color jquery.</a></li> <li><a href="js/soundmanager2.js">soundmanager2, sonido con flash</a> url: <a href="http://www.schillmania.com/projects/soundmanager2/">http://www.schillmania.com/projects/soundmanager2/</a></li> </ol> </div> <script type="text/javascript"> <?php echo "var firstname=".$firstname.";"; ?> ajaxRead(); document.getElementById("nombre").focus(); </script> </body> </html>