Sencillo sistema de alertas en vivoBueno, creo que no es la gran cosa ni nada y de hecho es sencillo de hacer; aunque creo que puede ser de utilida. Éste consiste en que tu envías una alerta e "instantáneamente" llega a quien esté en el siio web sin tener que actualizar, además cuenta con autoborrado de los mensajes que ya no se van a leer por nadie más y el registro de alertas vistas.
Tiene un intervalo de actualización de entre 0.1 segundos pero siempre hay una demora que pede ser de hasta 2 segundos. Consta de tan sólo 2 archivos,
alertas.php y el archivo donde se visualizan las alertas.
alertas.php:<?php
$datos = array(
"server" => "",
"user" => "",
"pass" => "",
"database" => ""
);
//NO TOCAR DESDE ESTE PUNTO SI NO SABES PHP//
$datos['conexion'] = mysql_connect($datos['server'], $datos['user'], $datos['pass'])or die("No se ha podido conectar al servidor MySQL.");
mysql_select_db($datos['database'], $datos['conexion'])or die("La base de datos no existe.");
if(!isset($_GET['subir'])) {
$con = mysql_query("SELECT * FROM alertas");
while($m = mysql_fetch_array($con)) {
$tiempo = time() - $m['time'];
$lsk = mysql_query("SELECT * FROM vistas WHERE idalert = ".$m['id']." AND ip = '".$_SERVER['REMOTE_ADDR']."'");
if($tiempo < 60) {
if(mysql_num_rows($lsk) == 0) {
echo "<script> \n";
echo " alert(\"".htmlspecialshars($m['texto'])."\");";
echo "\n</script>\n";
mysql_query("INSERT INTO vistas (idalert, ip) VALUES (".$m['id'].", '".$_SERVER['REMOTE_ADDR']."')");
}
} else {
mysql_query("DELETE FROM alertas WHERE id = '".$m['id']."'");
mysql_query("DELETE FROM vistas WHERE idalert = '".$m['id']."'");
}
}
} else {
if(!isset($_POST['enviar'])) {
?>
<form action="" method="post">
<textarea id="texto" name="texto"></textarea><br />
<input type="submit" id="enviar" name="enviar" />
</form>
<?php
} else {
if(!empty($_POST['texto'])) {
mysql_query("INSERT INTO alertas (texto, time) VALUES ('".$_POST['texto']."', '".time()."')");
echo "Alerta enviada";
} else {
echo "Llena el campo de texto";
}
}
}
?>
Código de visualización (ahora verán que sencillo
):<div id="alertas">
<?php include("alertas.php"); ?>
</div>
<script>
function conn() {
$("#alertas").load("alertas.php");
}
setInterval("conn()", 100);
</script>
Estructura SQL:CREATE TABLE alertas (
id int(20) NOT NULL AUTO_INCREMENT,
texto varchar(500) NOT NULL,
`time` int(10) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE vistas (
id int(50) NOT NULL AUTO_INCREMENT,
idalert int(20) NOT NULL,
ip varchar(12) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Las alertas se muestran si el usuario visita el sitio web por un intervalo de 60 segundos desde que la alerta fue enviada, esto se puede modificar en la siguiente línea:
if($tiempo < 60) {
¡No me funciona! ¿Qué hago?Deberías fijarte si tienes incluido en el archivo donde se visualizan las alertas la librería jQuery, si no lo tienes pues agrégala. No recomiendo la última versión porque agregas peso adicional que no es necesario, utiliza la mas vieja que puedas que contenga la función .load() (Desconozco cuál es)
¿Cómo puedo enviar alguna alerta?Pues de forma muy sencilla, solo visita /alertas.php?subir
¿Por qué los caracteres acentuados no se visualizan?Supongo que son problemas de la codificación del archivo del jQuery, para mostrar los caracteres del español necesita tener la codificación ISO-8859-1 -Europa Occidental-, o usar ñ á etc., pero alert() muestra solo texto (es decir, te mostrara
Hola amigos, ¿Cómo están? por ejemplo).
No es el mejor script y tiene varios problemas pero estos los pueden modificar ustedes si es que lo desean, lo mio es tan sólo un aporte.
Bueno, eso es todo, supongo que ya no cabe más información respecto a esto

.