Comunidad PHPeros
Lenguajes => PHP => Mensaje iniciado por: -Pituko- en 07 de Marzo de 2012, 22:56:34 pm
-
Sencillo sistema de alertas en vivo
Bueno, 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 :D):
<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 ;).
-
Si mal no recuerdo, esta era la duda de un usuarios ya hace unos meses atrás.
Si se vuelve a pasar por el foro, espero que se de cuenta que su duda ya se encuentra resuelta.
Saludos y gracias.
-
Si mal no recuerdo, esta era la duda de un usuarios ya hace unos meses atrás.
Si se vuelve a pasar por el foro, espero que se de cuenta que su duda ya se encuentra resuelta.
Saludos y gracias.
¿Por que crees que lo subí?, gracias por el comentario.
-
Un aporte buenísimo ^^
Gracias Pituko, creo que además es posible que le saque partido, no como sistema de alertas, pero supongo que podré adaptarlo ¿no?.
Buenisisisisisisisisisiisisiimo xd
-
Con esto no se supone que se estaría cargando el archivo alertas.php cada rato?
-
Con esto no se supone que se estaría cargando el archivo alertas.php cada rato?
Si, pero dependiendo que quieras hacer sirve o no...
Una idea que me ha dado entre este tema y otro... para saber quien está online en tiempo real en mi web lo que puedes hacer es poner un div o iframe oculto que no se vea nada de nada, y ahí cargar una página para que a cada rato actualize la base de datos... Eso no lo había pensado hasta que lo vi... Ver el foro también inspira y más en estos tiempos de crisis, en los que yo por lo menos no estoy para tirar nada.. xdddddddd
-
Si, pero dependiendo que quieras hacer sirve o no...
Una idea que me ha dado entre este tema y otro... para saber quien está online en tiempo real en mi web lo que puedes hacer es poner un div o iframe oculto que no se vea nada de nada, y ahí cargar una página para que a cada rato actualize la base de datos... Eso no lo había pensado hasta que lo vi... Ver el foro también inspira y más en estos tiempos de crisis, en los que yo por lo menos no estoy para tirar nada.. xdddddddd
En ese caso estarías consumiendo ancho de banda, algo que sería un desperdicio si tienes limitada aunque todas te ofrecen ilimitado ahora. Creo que lo mejor sería hacer la llamada cada 3 minutos o al menos cada minuto asi no desperdicias tanto.
-
En ese caso estarías consumiendo ancho de banda, algo que sería un desperdicio si tienes limitada aunque todas te ofrecen ilimitado ahora. Creo que lo mejor sería hacer la llamada cada 3 minutos o al menos cada minuto asi no desperdicias tanto.
Un tagboard consume aun mas...
-
En ese caso estarías consumiendo ancho de banda, algo que sería un desperdicio si tienes limitada aunque todas te ofrecen ilimitado ahora. Creo que lo mejor sería hacer la llamada cada 3 minutos o al menos cada minuto asi no desperdicias tanto.
Hombre lo haría para que recargarse cada 45 segundos o así, y lo que recargaría sería un simple codigo php... vamos un update en mysql que no consume tanto como un tagboard, por poner el ejemplo que puso Joaquín xdd
-
Hombre lo haría para que recargarse cada 45 segundos o así, y lo que recargaría sería un simple codigo php... vamos un update en mysql que no consume tanto como un tagboard, por poner el ejemplo que puso Joaquín xdd
La consulta es del lado del servidor, por eso no tenemos mucho problema. El problema viene de que se tiene que cargar el archivo como tal (Lado cliente) en un intervalo muy corto.
Cada carga consume la transferencia del cliente sin que el lo sepa, cosa que no sabemos si es limitada o no.
Saludos.
-
¿Es esta librería?
<script language="JavaScript" src="js/jquery-1.5.1.min.js"></script>
<script language="JavaScript" src="js/jquery-ui-1.8.13.custom.min.js"></script>
De ser esa, a mi no me aparece la alerta. Haber si me podrías ayudar. Gracias.
-
La consulta es del lado del servidor, por eso no tenemos mucho problema. El problema viene de que se tiene que cargar el archivo como tal (Lado cliente) en un intervalo muy corto.
Cada carga consume la transferencia del cliente sin que el lo sepa, cosa que no sabemos si es limitada o no.
Saludos.
Muy cierto, habia olvidado la transferencia limitada del cliente, por ejemplo un movil conectado a su red 3g que visita nuestra web estaría cargando el archivo cada rato de un sistema de alertas en vivo en el que deseguro enviarán una alerta cada semana, sigo opinando por el bien del que implemente este script en su sitio, ponga un intervalo mayor a 30s.
Y si el tagboard consume mucho mas xd
-
A mi sigue sin aparecerme la alerta. Le agregué la librería y no me aparece en pantalla lo que escribo.
Esta es la librería que le agregué.
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
// cargamos la librería jQuery
google.load("jquery", "1.3.2", {uncompressed:true});
</script>
Saludos.
-
En ese caso estarías consumiendo ancho de banda, algo que sería un desperdicio si tienes limitada aunque todas te ofrecen ilimitado ahora. Creo que lo mejor sería hacer la llamada cada 3 minutos o al menos cada minuto asi no desperdicias tanto.
No es por molestar, pero hice cálculos y gasta alrededor de 3MB en un día aproximadamente (si la consola de Chrome no me engaña :D). No creo que sea mucho, ni se desperdicie tanto.
A mi sigue sin aparecerme la alerta. Le agregué la librería y no me aparece en pantalla lo que escribo.
Esta es la librería que le agregué.
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
// cargamos la librería jQuery
google.load("jquery", "1.3.2", {uncompressed:true});
</script>
Saludos.
Utiliza la librería de la dirección:
http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
Un aporte buenísimo ^^
Gracias Pituko, creo que además es posible que le saque partido, no como sistema de alertas, pero supongo que podré adaptarlo ¿no?.
Buenisisisisisisisisisiisisiimo xd
Lo puedes adaptar a lo que quieras :). Gracias por el comentario ;).
-
Buen aporte ;)
-
No es por molestar, pero hice cálculos y gasta alrededor de 3MB en un día aproximadamente (si la consola de Chrome no me engaña :D). No creo que sea mucho, ni se desperdicie tanto.
Utiliza la librería de la dirección:
http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
Lo puedes adaptar a lo que quieras :). Gracias por el comentario ;).
Pituko, es mejor siempre que se use la versión mas reciente, en jQuery es la 1.7.
Saludos.
-
Pituko, es mejor siempre que se use la versión mas reciente, en jQuery es la 1.7.
Saludos.
La tome del código fuente de jQuery.com.
PD: Si sólo vas a usar las alertas, usa cualquiera con soporte load.
-
Buen aporte, pero creo que deberías crear una clase para que quede todo en el mismo archivo y luego que sólo se incluya la clase y que se llame a la función estáticamente ( alerta::mostrar(id) /**/ alerta::borrar(id) ) para que sea más portable (que quede claro que no me gusta POO ni mucho menos, pero así se hace mucho más portable y reutilizable ;) )
PD: K+
-
No quiero ser pesado pero a mi no me funciona. Y ya dije que se ve que tiene buena pinta. ¿Alguien lo ha probado y le funciona?
-
Auida, no se publica la alerta, y no se mucho si me pueden ayudar.
-
B
Auida, no se publica la alerta, y no se mucho si me pueden ayudar.
¿Ya revisaste la conexión Mysql? ¿Ya incluiste jquery? ¿Ya revisaste el JS con la consola webkit (chrome)?
-
de verdad me recuerda al sistema implementado en el chat de facebook
-
de verdad me recuerda al sistema implementado en el chat de facebook
Claro... como Facebook invento Ajax...
-
Claro... como Facebook invento Ajax...
Reportado al moderador jajajaja XDXDXD
Solo fue un comentario. la verdad si es ingenioso
-
¿Por qué a mi no me funciona chicos? ¿Alguién me ayuda?
-
¿Por qué a mi no me funciona chicos? ¿Alguién me ayuda?
¿Incluiste jQuery?
-
¿Incluiste jQuery?
Sí... Pero de todas formas... ¿Podrías poner los SRC tipo http://jquery.com/ui.2.3...? Si lo pones todos me harías un gran favor. Gracias. Quiero probar si funciona tu script. De ser así lo implementaré en un trabajo. Gracias nuevamente.
-
aún no anda con esa libreria:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<div id="alertas">
<?php include("alertas.php"); ?>
</div>
<script>
function conn() {
$("#alertas").load("alertas.php");
}
setInterval("conn()", 100);
</script>
-
aún no anda con esa libreria:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<div id="alertas">
<?php include("alertas.php"); ?>
</div>
<script>
function conn() {
$("#alertas").load("alertas.php");
}
setInterval("conn()", 100);
</script>
Ten en cuenta que estas usando la versión 1.4.2 de jQuery, la cual, hoy en día, ya existe la 1.8.0
-
A mi ni siquiera me muestra el formulario de envio del archivo de alertas.php, y no me marca error, a que se debe? saludos