Mensaje de Alerta con Fechas de Vencimiento en PHP

Me gustaría saber como puedo hacerle para poner una alerta de vencimiento en php, ya que estoy haciendo un sistema de administración de dominios y pues necesito que me avise que faltan 30 y 15 días para que se venza el plazo del dominio. Esta es la tabla que uso en mi base de datos:

CREATE TABLE IF NOT EXISTS `dominios` (
`Dominio` varchar(50) NOT NULL,
`Usuario` varchar(25) NOT NULL,
`Password` varchar(25) NOT NULL,
`Contacto` varchar(60) NOT NULL,
`Telefono_contacto` varchar(25) NOT NULL,
`Email` varchar(50) NOT NULL,
`Hosting_ns1` varchar(60) NOT NULL,
`Hosting_ns2` varchar(60) NOT NULL,
`fecha_alta_dominio` date NOT NULL,
`fecha_vencimiento_dominio` date NOT NULL,
PRIMARY KEY (`dominio`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Ejemplo: ingreso www.dominio.com con fecha de alta 26/02/2014 y fecha de vencimiento 26/02/2015 y 30 días antes me debe de avisar que esta por vencer.

Si pudiera ayudarme se lo agradecería mucho.

1 respuesta

Respuesta
1

Haz una consulta con sql de la siguiente forma

select * from dominios
where fecha_vencimiento = date_sub(curdate(), interval 30 days)

Con eso tendrás la lista de dominios que vencerá en exactos 30 días (si deseas que sean 15 cambias la sentencia del where a los días que necesites).

Ya después depende de ti como deseas confeccionar la alerta (correo, mensaje en el sitio etc)

para mostrar los datos en una tabla he realizado la consulta que me proporcionaste pero me salto este error:

el código que he utilizado para mostrar los datos fue este:

<?php
$select = "select * from dominios where fecha_vencimiento= date_sub(curdate(), interval 30 days)";
$dominio = mysql_query($select, $con);
echo "<center> <table border = 0 width = 550>";
echo "<tr> <td> Dominio</td>
<td> Usuario </td>
<td> Fecha Vencimiento </td> </tr>";
for ($la = 0; $la < mysql_num_rows($dominio); $la++)//linea 60
{
$nombre1 = mysql_result($dominio, $la,"dominio");
$usuario1 = mysql_result($dominio, $la,"usuario");
$fecha_vencimiento1 = mysql_result($dominio, $la,"fecha_vencimiento");
echo "<tr> <td> $nombre1 </td>
<td> <center> $usuario1 </td>
<td> <center> $fecha_vencimiento1 </td> </tr>";
}
echo "</table> </center>";
?>

Soy nuevo en esto de programar, una disculpa si el código esta un poco desordenado y de antemano muchas gracias por la ayuda.

¿Cuál sería el error que arroja? No lo veo en el sitio

Este es el error, una disculpa olvide ponerlo

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given on line 60

Agrega esta linea bajo

$dominio = mysql_query($select, $con);

echo mysql_errno($con) . ": " . mysql_error($con). "\n";

Y veamos la razón de porque no se ejecutó la consulta

Esto es lo que arrojo:

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'days)' at line 1

Se me "pasó" una "es" la palabra en al query es DAY no "days"

La query queda así

select * from dominios where fecha_vencimiento= date_sub(curdate(), interval 30 day)

ya no me arroja ningún error de sintaxis, gracias.
pero no me muestra ningún resultado tengo de ejemplo un dominio con fecha de alta el día 26 de febrero del 2013 y vence el 20 de marzo del 2014 y por lo que yo entiendo debería aparecer dentro de la tabla, tal vez lo estoy haciendo mal o lo estoy entendiendo mal.

La consulta te mostraría los que en especifico cumplen 30 días. Si quieres las que estén en el rango entre 30 y 1 días tienes que cambiar la consulta en el where

where fecha_vencimiento between date_sub(curdate(), interval 30 day) and curdate()

por lo que entiendo de la consulta:

select * from dominios
where fecha_vencimiento between date_sub(curdate(), interval 30 day) and curdate()

fecha_vencimiento = 2014/03/20

curdate() = 2014/02/28

el date_sub le restara 30 días a la fecha actual por lo que me arrojaría 2014/01/28

después compara la fecha 2014/01/28 con la actual 2014/02/28 y me arrojara los resultados que encuentre.

no seria mejor con date_add? o estoy entendiendo mal los conceptos?

Tienes toda la razón!

Son días hacia adelante!

Perdona mi error

ya lo intente con date_add y en teoría quedaría así:

select * from dominios where fecha_vencimiento between date_add(curdate(), interval 30 day) and curdate()"

y con los datos del ejemplo:

fecha_vencimiento = 2014/03/20
curdate() = 2014/02/28
el date_add le agregara 30 días a la fecha actual por lo que me arrojaría 2014/03/28
después compara la fecha 2014/03/28 con la actual 2014/02/28 y me arrojaría la fecha 2014/03/20 ya que se encuentra dentro de los dos parámetros que comparara el between, pero aun así no me lo muestra. Estoy omitiendo algo? algún consejo?

Haz esto y verifica la respuesta directamente en la base de datos

select * from dominios where fecha_vencimiento between curdate() and date_add(curdate(), interval 30 day)

Si funciono con esa consulta, Muchísimas Gracias por la ayuda :D

Genial, disculpa los problemas de mis errores.

Recuerda cerrar la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas