Script PHP para eventos
6 seguidores
Hola,
estoy buscando un script PHP para listar eventos en web.
Necesito una cosa muy sencilla, un administrador donde pueda dar de alta los eventos y que luego se puedan mostrar en forma de lista en una página web. Me gustaría que automáticamente se borraran una vez vencida la fecha.
He encontrado scripts bastante ajustados a lo que necesito, pero todos son demasiado complejos, incluyen calendarios. almacenaje de eventos y muchas cosas más.
Me podeis ayudar? Gracias.
iboff
tienes mysql?¿?
blasco
iboff
tienes mysql?¿?
Sí. Lo tengo.
Siento el retraso en la respuesta, he he... estaba de vacaciones.
blasco
Como ha pasado algun tiempo y no he obtenido respuesta, y viendo que el foro se ha ido poblando de nuevos cracks de todos los campos que quizás no vieron mi pregunta, me contesto a mi mismo para volver a preguntar y así resituar mi cuestión otra vez al principio de la lista.
Se trataría, simplemente, de un script PHP que permitiera a unos miembros registrados dar de alta eventos para mostrarlos en una <em>home page</em>. El sistema tendría que encargarse de eliminar los eventos de la base de datos el día siguiente de su caducidad.
Muchas gracias.
meddle
tienes accesso al cron? (tareas programadas en el servidor)
blasco
sí, lo tengo, lo tengo!
:)
blasco
por cierto, de lo que no tengo ni idea es de php...
He buscado en lugares como Hotscripts algun script parecido a lo que yo busco, pero ya sea por culpa de mi incompetencia con el inglés o de mi incompatibilidad con la informática, no he conseguido encontrar nada ajustado a mis necesidades. Todo es demasiado complejo... con calendarios y cosas así... y yo solo quiero una lista del tipo:
Lunes 25 de diciembre
NAVIDAD
Lugar: Todo el mundo
Hora: Todo el día
Precio: Ya te lo encontrarás el dia 5 con la VISA
Organiza: Coca Cola
También me serviría que la lista mostrara sólo la fecha y la actividad y que haciendo clic en ella se abriera una ventana con toda la información.
Y con esto, me parece que ya acabo mi lista de peticiones.
Ahora a esperar los Reyes Magos.
xoan
no hace falta mantener ningun proceso para borrar datos pasados de una bd... simplemente haciendo el query al principio del archivo para ver que registros tienes la fecha pasada y borrarlos antes de mostralos en pantalla te vale. me explico:
la tabla tendria esta estructura (mas o menos):
<code>CREATE TABLE `eventos` (
`id` int(11) NOT NULL auto_increment,
`fecha` int(11) NOT NULL default '0',
`evento` varchar(255) NOT NULL default '',
`lugar` varchar(255) NOT NULL default '',
`precio` decimal(10, 2),
`organizacion` varchar(255) NOT NULL default '0'
)</code>
para mostrar los datos, simplemente hariamos esto (luego tu puedes modificar las sentencias echo agregando el codigo HTML)
<code><?
//datos de conexion
$host = "localhost"; //normalmente es localhost; sino, cambialo
$user = ""; //tu nombre de usuario
$pass = ""; //tu clave de acceso
$dbname = ""; //el nombre de tu db
$conecta = mysql_connect($host, $user, $pass);
mysql_select_db($dbname, $conecta);
//borramos los eventos pasados
$query = "DELETE FROM `eventos` WHERE `fecha`>'" . time() . "'";
mysql_query($query);
//ahora, con la tabla actualizada, seleccionamos
$query = "SELECT * FROM `eventos`";
$resp = mysql_query($query);
//por si no hay registros (todo es posible)
if (mysql_num_rows($resp) == 0) {
echo "No hay eventos por ahora...";
}
//si nos devuelve alguna/s fila/s, la/s mostramo/s
else {
while ($datos = mysql_fetch_array($resp)) {
$textoDia = array("Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado");
$textoMes = array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
$dia = date("w", $datos[fecha]);
$mes = date("n", $datos[fecha]);
echo $textoDia[$dia] . " " . $date("j", $datos[fecha] . " de " . $textoMes[$mes] . "<br>"
. $datos[evento] . "<br>
Lugar: " . $datos[lugar] . "<br>
Hora: " . date("H:i", $datos[fecha]) . "<br>
Precio: " . number_format($a ,2 , "," , ".") . "?<br>
Organiza: " . $datos[organizacion] . "<hr>";
}
}
mysql_free_result($resp);
mysql_close($conecta);
?></code>
ahora, la pagina de administracion seria un formulario con una sentencia SQL para insertar los datos (con una clave, por si las moscas...):
<code><?
//datos de conexion (los mismo que antes)
$host = "localhost";
$user = "";
$pass = "";
$dbname = "";
$conecta = mysql_connect($host, $user, $pass);
mysql_select_db($dbname, $conecta);
$contrasena = "lo_que_quieras";
if (isset($_POST[acceso]) && $_POST[acceso] == $contrasena){
$fecha = explode("/", $_POST[fecha]);
$hora = explode(":", $_POST[hora]);
$fechaUnix = mktime($hora[0], $hora[1], "0", $fecha[1], $fecha[0], fecha[2]);
$query = "INSERT INTO `eventos` VALUES ('', '" . $fechaUnix . "', '" . $_POST[evento] . "', '" . $POST[lugar] . "', '" . $_POST[precio] . "', '" . $POST[organizacion] . "')";
mysql_query($query);
}
mysql_free_result($resp);
mysql_close($conecta);
?>
<form action="<?=$PHP_SELF?>" method="POST">
<input type="hidden" name="acceso" value="<?=$contrasena?>">
fecha:<br><input type="text" name="fecha"><br>
hora:<br><input type="text" name="hora"><br>
evento:<br><input type="text" name="evento"><br>
lugar:<input type="text" name="lugar"><br>
precio:<br><input type="text" name="precio"><br>
organiza:<br><input type="text" name="organizacion"><br>
contraseña:<br><input type="password" name="acceso">
<input type="submit" name="enviar" value "enviar">
</form></code>
lo unico que tienes que respetar es el formato para insertar la fecha, la hora y el precio:
Fecha: dia/mes/año (en formato numerico)
Hora: hora:minutos (tb en formato numerico)
Precio: parteEntera.parteDecimal(*)
es lo mas conveniente, ya que asi luego puedes darle el formato de salida que quieras (en el precio es bastante interesante, porque tu lo introduces en euros y luego puedes pasarlo a la moneda que quieras)
lo mas probable es que tenga algun fallo, ya que lo acabo de hacer <em>sobre la marcha</em>; si es asi, no tienes mas que volver a preguntar.
(*)Es la primera vez que trato con campos numericos donde se almacenan numeros de coma flotante, asi que a lo mejor esta mal definido el campo en la tabla de la db y la forma de especificar el valor, pero si tengo un rato libre lo miro, vale?
xoan
ouch! me acabo de ver dos fallos:
en la linea <em>echo $textoDia[$dia] . " " . $date("j", $datos[fecha] . " de " . $textoMes[$mes] . "<br>"</em> tienes que poner echo $textoDia[$dia] . " " . $date("j", $datos[fecha]) . " de " . $textoMes[$mes - 1] . "<br>"
prueba a crear la tabla e insertar algun registro de prueba, para ver si funciona; si te da algun error y no lo sabes arreglar, postea aqui el texto que te aparece con el tipo de error y la linea en la que ocurre ;-)
blasco
w|six-nine,
casi no he entendido nada :), pero te juro que no voy a parar de romperme la cabeza hasta conseguir que funcione.
Muchísimas, muchísimas gracias.
Lo que yo quería era saber si había algun script ya hecho en hotscripts o en alguna web parecida, pero tu te lo has currado de maravilla.
Gracias de nuevo.
xoan
je! gracias. tampoco es para tanto, al final cuqlquier archivo en php que consulte una base de datos y muestre los registros de una manera ordenada se basa en lo mismo; es como un simple script de noticias.
bueno, y la pagina para administrarlo tambien, lo que pasa que en este caso, al tener que transformar la fecha y la hora a formato UNIX, hay que tratarla un poco antes de insertarla en la bd, pero por lo demas, es un simple formulario y un quiery para insertar.
supongo que las tablas las sabes crear con phpMyAdmin, no? simplemente lo abres y en la pestaña SQL pegas el primer codigo que te puse y le das a continuar. luego los dos siguientes codigos van en dos archivos distinto (los dos con extension .php); el primero de ellos lo puedes colocar en cualquier parte de tu web, donde quieras que te muestre los eventos; y el segundo te recomiendo que lo pongas como un archivo (que se llamaria p.ej. adminEventos.php) y un enlace hacia el en tu web, ya que no pasa nada aunque alguien lo consiga abrir porque para insertar eventos debes poner la contraseña :)
Surt
Bueno, como el script dew|six-nine esta de maravilla yo voy a explicarlo para profanos:
El codigo crea con una sentencia SQL una tabla con campos id (automaticamente se incrementa), fecha, evento, etc....
Con eso tienes una tabla en la base de datos para almacenar los eventos.
En el codigo de mostrar los eventos primero has de rellenar las variables con sus valores (base de datos, usuario, password, etc..)
Luego conecta a la bbdd (mysql_select_db($dbname, $conecta); )
En //borramos los eventos pasados se encarga de comprobar todos aquellos que sobrepasaron la fecha limite y los borra de la bbdd (Aqui puedes decir que les actualice un campo, ej: caducado con el fin de mantenerlos en la base de datos por un futuro pero tambien poder ocultarlos.
Despues de tener la tablalimpia de caducados los elige todos (todos los registros de la tabla eventos
($query = "SELECT * FROM `eventos`";
$resp = mysql_query($query); )
Te muestra un mensaje si no hay ninguno (detallazo), y si no simplemente te hace un echo de cada uno de los campos (los saca por pantalla) habiendo previamente definido un formato para cada uno. ej:
while ($datos = mysql_fetch_array($resp))
Mientras haya lineas de campos coge una linea de campos.
Asi las procesa todas.
$textoMes = array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
(un array con los nombres de los meses...mes 1 Enero, mes 2 Febrero...)
$mes = date("n", $datos[fecha]);
( en variable $mes te pone (gracias a "n" el mes sin 0 inicial) sacado de la fecha que viene en la fila de resultado de la consulta a bbdd: $datos[fecha])
$textoMes[$mes]
(Coge el nombre de mes correspondiente a el numero sacado de la base de datos, campo fecha, parte mes)
Y asi con todos.
Luego se acuerda de limpiar laconsulta y cerrar la bbdd.
LA pagina de administrador es un formulario que al enviar rellena con sentencias sql la base de datos.
xoan
muy buena la explicacion, si señor!!!
y realmente, lo que dices al principio de crear otro campo que se llamaria caducado, y podria ser de tipo ENUM('0', '1') DEFAULT '0'; esta muy bien pensado; asi a la hora de hacer la actualizacion, simplemente cambiariamos el valor de ese campo a 1 para los evento caducados
<code>//caducamos los eventos pasados
$query = "UPDATE `eventos` SET `caducado`='1' WHERE `fecha`>" . time() . "'";
mysql_query($query);
</code>
mostrando luego aquellos cuyo valor de dicho campo fuese '0';
<code>$query = "SELECT * FROM `eventos` WHERE `caducado`='0'";
$resp = mysql_query($query);
/*
continuariamos comprobando
existencia de registros y mostrnadolos
------------------------------------------------*/
</code>
esto esta muy bien, ya que a lo mejor en otro sitio de la web (baul de los recuerdos) te puede interesar mostrar la info de los eventos pasados p.ej. no?
jeje... ;) me agradan este tipo de cosas :D un saludo.
hartum
una pregunta, no te serviria el kddomatic?
blasco
Muchas gracias a todos por las respuestas y por el script. Fantástico!