Bueno llevo comiéndome el coco durante todo el día pensando y buscando como limitar el envió de emails en mi pagina web por usuario. Ejemplo:
Usuario: Pepe – 30 Emails al día.
Usuario: Pepito – 100 Emails al día.
Agradecería que me echarais una mano ya no se qué hacer.
Gracias de antemano.
y... a qué te refieres con "limitar"?
No sé si me he explicado bien, yo tengo la base de datos con los usuarios registrados, cada uno tiene acceso a un formulario donde puede enviar emails a lo bestia, pues lo que quiero hacer yo es permitir un numero de envíos máximos por día y por usuario. Como en el ejemplo anterior que el usuario pepe tenía acceso a un número de 30 emails al día y pepito a 100. Así evito que me saturen el servidor.
No se me da muy bien el análisis de bases de datos, pero... podrías crear una tabla que esté enlazada con la de usuarios, en donde contenga campos como:
intIDUsuario # Usuario
strFecha # Fecha actual - Día
intContador # Contador de cada mail enviado, para verificar cuando es el limite con el campo siguiente
intcantidadLimite # Cantidad de mails que puede enviar el usuario
Ahora sólo es cuestion de qué: cada vez que el usuario envie un mail, se auto-incremente el campo intContador, y verificar si es menor al campo intcantidadLimite.
Tengo un lio por aquí que asusta, no tendrás un pequeño ejemplo? Y con el campo strFecha que hacemos porque al siguiente día se tiene que restablecer el campo intContador... bueno tengo un lio que a ver como lo resuelvo, gracias.
Es que no se que es lo que realmente estáis haciendo, lo digo por ejemplo, si necesitas llevar algún tipo de registro de cada usuario por día, para ver cuantos mail enviaron en determinada fecha.
Y el strFecha es para eso, cuando se envia el primer mail del día se ingresa la fecha y cada vez que se envía un mail se verifica la fecha si es igual a la que se ingreso la primera vez, el contador auto-incrementa en 1 de lo contrarío, el contador se re-establece.
mira camrada la idea es esta tu lo que deceas es limitar a un usuario para que no envie muchos emails por dia vea bueno ahi te va mi idea esperemos le agarres la onda
ise la siguiente tabla
id usuario(varchar) fecha(date) cantidad(int)
1 RedZer 2010-12-17 0
2 elvil 2010-12-17 0
los campos fecha,cantidad seran importantes para realizar lo que deceas yo al campo fecha le di el valor directamente pero tu lo que debes de hacer para que coga la fecha y la inserte en su respectivo campo es que cuando el usuario mande un email por primera vez en el dia en el apartado que ocupas para enviar emails ahi mismo insertar una consulta para sacr el valor del campo cantidad y verificar si esta en cero si es asi insertas la fecha del dia de lo contrario si no es igual a cero entonces empiesas amodificar el valor del campo cantidad como en el siguiente codigo
<?php
include("conexion.php");
$fecha=date("Y-n-j");
//aqui sacco la cantida de imail que aya enviado el usuario si te das cuenta en la consulta estoy validadno
//con el nombre de usuario RedZer en mi caso tu puedes ponerle otra variable ahi en donde estes guardando tu nombre de usuarios por ejmplo algo asi $usuario=elvil
conectar();
$queEmp2 = mysql_query("SELECT cantidad FROM usuarios where usuario='RedZer' ");
$rowEmp2 = mysql_fetch_assoc($queEmp2);
$cantidad=$rowEmp2['cantidad'];
desconectar();
//de ahi validas si la cantidad que te arojo es menr a 30 metes el codigo que ocupas para enviar email
if($cantidad <30){
//*******************aki el codigo para enviar emailsclaro despues de las 2 consultas de sql que ago abajo
//con esta con sulta le sumas 1 al campo cantidad cada que envie un email
conectar();
$queEmp2 = mysql_query("SELECT cantidad FROM usuarios where usuario='RedZer' and fecha='$fecha' ");
$rowEmp2 = mysql_fetch_assoc($queEmp2);
$suma=$rowEmp2['cantidad']+1;
desconectar();
//aqui modificas el valor que hay en el campo cantidad por el nuevo valor que le estas sumando
conectar();
if ($suma!=''){mysql_query("UPDATE usuarios SET cantidad='$suma' where usuario='RedZer' ");}
desconectar();
}//ciero el if de de la comparacion
//pongo un else para informarle al usuario que ya a enviado 30 emails por el dia de hoy
else{echo "lo sentimos solo se puede enviar 30 email por dia";}
?>
@RedZer, pero sí para el usuario con ID 1, se requiere que sólo envíe 20 mail y para el usuario con ID 2 un total de 100, deberìas de meterle un campo con ese limite para cada usuario.
soy elvil solo me cambie mi nombre de usuario :silbar: es que el de elvil era de otra persona que lo ocupa en otro foro :silbar: y fue el que se me ocurrio cuando me registre aqui pero este ya es mio mio esperemos que no aya otro igual
y tomando lo que tu dices lo puede hacer asi que agregue otro campo el cual cuando ingrese un nuevo usuario el como administrador por decirlo asi decida cuantos emails podra enviar ese nuevo usuario, y apartir de ahi empezar a estar comparando ese campo cada que se envie un email
:silbar:
Gracias por contestar, he entendido gran parte de lo que me querías decir, he implementado tu code y funciona perfectamente el problema es que al segundo día tengo que restablecer el campo cantidad a 0 y estoy hecho un lio con la fecha soy muy malo en esto de mysql.
Cita de: RedZer en 18 Diciembre 2010, 00:03 AM
yo al campo fecha le di el valor directamente pero tu lo que debes de hacer para que coga la fecha y la inserte en su respectivo campo es que cuando el usuario mande un email por primera vez en el dia en el apartado que ocupas para enviar emails ahi mismo insertar una consulta para sacr el valor del campo cantidad y verificar si esta en cero si es asi insertas la fecha del dia de lo contrario si no es igual a cero entonces empiesas amodificar el valor del campo cantidad
lee esto
Se supone que lo he leído y no lo entiendo si vuelvo a preguntar.
en que parte no le entiendes
Y el campo cantidad al día siguiente como se restablece?
Cita de: RedZer en 18 Diciembre 2010, 00:03 AM
verificar si esta en cero si es asi insertas la fecha del dia de lo contrario si no es igual a cero entonces empiesas amodificar el valor del campo cantidad como en el siguiente codigo
<?php
include("conexion.php");
$fecha=date("Y-n-j");
//aqui sacco la cantida de imail que aya enviado el usuario si te das cuenta en la consulta estoy validadno
//con el nombre de usuario RedZer en mi caso tu puedes ponerle otra variable ahi en donde estes guardando tu nombre de usuarios por ejmplo algo asi $usuario=elvil
conectar();
$queEmp2 = mysql_query("SELECT cantidad,fecha FROM usuarios where usuario='RedZer' ");
$rowEmp2 = mysql_fetch_assoc($queEmp2);
$cantidad=$rowEmp2['cantidad'];
$fecha2=$rowEmp2['fecha'];
desconectar();
if($fecha2==$fecha)
{
//de ahi validas si la cantidad que te arojo es menr a 30 metes el codigo que ocupas para enviar email
if($cantidad <35){
//*******************aki el codigo para enviar emailsclaro despues de las 2 consultas de sql que ago abajo
//con esta con sulta le sumas 1 al campo cantidad cada que envie un email
conectar();
$queEmp2 = mysql_query("SELECT cantidad FROM usuarios where usuario='RedZer' and fecha='$fecha' ");
$rowEmp2 = mysql_fetch_assoc($queEmp2);
$suma=$rowEmp2['cantidad']+1;
desconectar();
//aqui modificas el valor que hay en el campo cantidad por el nuevo valor que le estas sumando
conectar();
if ($suma!=''){mysql_query("UPDATE usuarios SET cantidad='$suma' where usuario='RedZer' ");}
desconectar();
}//ciero el if de de la comparacion
//pongo un else para informarle al usuario que ya a enviado 30 emails por el dia de hoy
else{echo "lo sentimos solo se puede enviar 30 email por dia";}
}//cierro el if del la fecha
else{
conectar();
if ($fecha2!=''){mysql_query("UPDATE usuarios SET fecha='$fecha' where usuario='RedZer' ");}
if ($fecha2!=''){mysql_query("UPDATE usuarios SET cantidad='0' where usuario='RedZer' ");}
desconectar();
}
?>
Podrías hacer algo como esto, -Lo hice de pura memoria, puede estar malo-:
# Se envío el primer correo del día.
$sSQL = "INSERT INTO tblPoC(sID, sDate, [...]) VALUES(1, ".date("d/m/Y")." , [...]);";
$sQuery = mysql_query($sSQL, $sHandle) or die( "<b>Error: </b>".mysql_error()."<br />" );
# El campo de fecha es seteado con el valor : 18/12/2010 -Fecha actual del sistema-
# Cada vez que el usuario realiza una acción, -Enviar mail-, se verifica la fecha
# registrada con la fecha del sistema.
$sSQL = "SELECT COUNT(sID) FROM tblPoC WHERE sDate = '". date("d/m/Y") ."';";
$sQuery = mysql_query($sSQL, $sHandle) or die( "<b>Error: </b>".mysql_error()."<br />" );
$sCountRows = mysql_num_rows($sQuery);
if( $sCountRows > 0 ){ echo "Puede enviar correo. <br />"; }
else{
echo "La fecha cambio. Reset data!<br />";
$sSQL = "UPDATE FROM tblPoC SET sDate ='".date("d/m/Y")."', sCantidadMails = 0 WHERE sID = 1;";
$sQuery = mysql_query($sSQL, $sHandle) or die( "<b>Error: </b>".mysql_error()."<br />" );
}
Gracias a los dos por los ejemplos, mejor explicación imposible ;D.