Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: 177600531 en 17 Diciembre 2010, 04:30 am



Título: Restringir envió de email por usuario
Publicado por: 177600531 en 17 Diciembre 2010, 04:30 am
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:

Código:
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.


Título: Re: Restringir envió de email por usuario
Publicado por: Shell Root en 17 Diciembre 2010, 04:58 am
y... a qué te refieres con "limitar"?


Título: Re: Restringir envió de email por usuario
Publicado por: 177600531 en 17 Diciembre 2010, 16:43 pm
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.


Título: Re: Restringir envió de email por usuario
Publicado por: Shell Root en 17 Diciembre 2010, 19:04 pm
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:

Código
  1. intIDUsuario # Usuario
  2. strFecha # Fecha actual - Día
  3. intContador # Contador de cada mail enviado, para verificar cuando es el limite con el campo siguiente
  4. 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.


Título: Re: Restringir envió de email por usuario
Publicado por: 177600531 en 17 Diciembre 2010, 19:26 pm
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.


Título: Re: Restringir envió de email por usuario
Publicado por: Shell Root en 17 Diciembre 2010, 20:00 pm
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.


Título: Re: Restringir envió de email por usuario
Publicado por: RedZer en 18 Diciembre 2010, 00:03 am
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
Código
  1. id usuario(VARCHAR) fecha(DATE)     cantidad(INT)
  2. 1      RedZer                     2010-12-17         0
  3. 2 elvil                          2010-12-17                 0
  4.  
  5.  
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
Código
  1. <?php
  2. include("conexion.php");
  3. $fecha=date("Y-n-j");
  4. //aqui sacco la cantida de imail que aya enviado el usuario si te das cuenta en la consulta estoy validadno
  5. //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
  6.          conectar();
  7.          $queEmp2 = mysql_query("SELECT cantidad  FROM usuarios where usuario='RedZer' ");
  8.          $rowEmp2 = mysql_fetch_assoc($queEmp2);
  9.          $cantidad=$rowEmp2['cantidad'];
  10.           desconectar();
  11.  
  12.   //de ahi validas si la cantidad que te arojo es menr a 30 metes el codigo que ocupas para enviar email
  13.   if($cantidad <30){
  14.  
  15.   //*******************aki el codigo para enviar emailsclaro despues de las 2 consultas de sql que ago abajo
  16.  
  17.   //con esta con sulta le sumas 1 al campo cantidad cada que envie un email
  18.   conectar();
  19.          $queEmp2 = mysql_query("SELECT cantidad  FROM usuarios where usuario='RedZer' and fecha='$fecha' ");
  20.          $rowEmp2 = mysql_fetch_assoc($queEmp2);
  21.          $suma=$rowEmp2['cantidad']+1;
  22.            desconectar();
  23.  
  24. //aqui modificas el valor que hay en el campo cantidad por el nuevo valor que le estas sumando
  25.   conectar();
  26.   if ($suma!=''){mysql_query("UPDATE usuarios SET cantidad='$suma' where usuario='RedZer' ");}
  27.            desconectar();
  28.                   }//ciero el if de de la comparacion
  29.   //pongo un else para informarle al usuario que ya a enviado 30 emails por el dia de hoy
  30.   else{echo "lo sentimos solo se puede enviar 30 email por dia";}
  31. ?>
  32.  
  33.  
  34.  


Título: Re: Restringir envió de email por usuario
Publicado por: Shell Root en 18 Diciembre 2010, 01:08 am
@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.


Título: Re: Restringir envió de email por usuario
Publicado por: RedZer en 18 Diciembre 2010, 01:48 am
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


Título: Re: Restringir envió de email por usuario
Publicado por: RedZer en 18 Diciembre 2010, 01:50 am
 :silbar:


Título: Re: Restringir envió de email por usuario
Publicado por: 177600531 en 18 Diciembre 2010, 18:04 pm
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.


Título: Re: Restringir envió de email por usuario
Publicado por: RedZer en 18 Diciembre 2010, 18:21 pm

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


Título: Re: Restringir envió de email por usuario
Publicado por: 177600531 en 18 Diciembre 2010, 18:28 pm
Se supone que lo he leído y no lo entiendo si vuelvo a preguntar.


Título: Re: Restringir envió de email por usuario
Publicado por: RedZer en 18 Diciembre 2010, 18:37 pm
en que parte no le entiendes


Título: Re: Restringir envió de email por usuario
Publicado por: 177600531 en 18 Diciembre 2010, 18:38 pm
Y el campo cantidad al día siguiente como se restablece?

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


Título: Re: Restringir envió de email por usuario
Publicado por: RedZer en 18 Diciembre 2010, 19:00 pm
Código
  1. <?php
  2. include("conexion.php");
  3. $fecha=date("Y-n-j");
  4. //aqui sacco la cantida de imail que aya enviado el usuario si te das cuenta en la consulta estoy validadno
  5. //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
  6.          conectar();
  7.          $queEmp2 = mysql_query("SELECT cantidad,fecha  FROM usuarios where usuario='RedZer' ");
  8.          $rowEmp2 = mysql_fetch_assoc($queEmp2);
  9.          $cantidad=$rowEmp2['cantidad'];
  10. $fecha2=$rowEmp2['fecha'];
  11.           desconectar();
  12.  
  13.     if($fecha2==$fecha)
  14.   {
  15.  
  16.   //de ahi validas si la cantidad que te arojo es menr a 30 metes el codigo que ocupas para enviar email
  17.   if($cantidad <35){
  18.  
  19.   //*******************aki el codigo para enviar emailsclaro despues de las 2 consultas de sql que ago abajo
  20.  
  21.   //con esta con sulta le sumas 1 al campo cantidad cada que envie un email
  22.   conectar();
  23.          $queEmp2 = mysql_query("SELECT cantidad  FROM usuarios where usuario='RedZer' and fecha='$fecha' ");
  24.          $rowEmp2 = mysql_fetch_assoc($queEmp2);
  25.          $suma=$rowEmp2['cantidad']+1;
  26.            desconectar();
  27.  
  28. //aqui modificas el valor que hay en el campo cantidad por el nuevo valor que le estas sumando
  29.   conectar();
  30.   if ($suma!=''){mysql_query("UPDATE usuarios SET cantidad='$suma' where usuario='RedZer' ");}
  31.            desconectar();
  32.                   }//ciero el if de de la comparacion
  33.   //pongo un else para informarle al usuario que ya a enviado 30 emails por el dia de hoy
  34.   else{echo "lo sentimos solo se puede enviar 30 email por dia";}
  35.  
  36.   }//cierro el if del la fecha
  37.  
  38.                        else{
  39. conectar();
  40.   if ($fecha2!=''){mysql_query("UPDATE usuarios SET fecha='$fecha' where usuario='RedZer' ");}
  41.            if ($fecha2!=''){mysql_query("UPDATE usuarios SET cantidad='0' where usuario='RedZer' ");}
  42. desconectar();
  43.  
  44.   }
  45. ?>
  46.  
  47.  
  48.  



Título: Re: Restringir envió de email por usuario
Publicado por: Shell Root en 18 Diciembre 2010, 19:19 pm
Podrías hacer algo como esto, -Lo hice de pura memoria, puede estar malo-:
Código
  1. # Se envío el primer correo del día.
  2. $sSQL = "INSERT INTO tblPoC(sID, sDate, [...]) VALUES(1, ".date("d/m/Y")." , [...]);";
  3. $sQuery = mysql_query($sSQL, $sHandle) or die( "<b>Error: </b>".mysql_error()."<br />" );
  4.  
  5. # El campo de fecha es seteado con el valor : 18/12/2010 -Fecha actual del sistema-
  6. # Cada vez que el usuario realiza una acción, -Enviar mail-, se verifica la fecha
  7. # registrada con la fecha del sistema.
  8.  
  9. $sSQL = "SELECT COUNT(sID) FROM tblPoC WHERE sDate = '". date("d/m/Y") ."';";
  10. $sQuery = mysql_query($sSQL, $sHandle) or die( "<b>Error: </b>".mysql_error()."<br />" );
  11. $sCountRows = mysql_num_rows($sQuery);
  12. if( $sCountRows > 0 ){ echo "Puede enviar correo. <br />"; }
  13. else{
  14. echo "La fecha cambio. Reset data!<br />";
  15. $sSQL = "UPDATE FROM tblPoC SET sDate ='".date("d/m/Y")."', sCantidadMails = 0 WHERE sID = 1;";
  16. $sQuery = mysql_query($sSQL, $sHandle) or die( "<b>Error: </b>".mysql_error()."<br />" );
  17. }


Título: Re: Restringir envió de email por usuario
Publicado por: 177600531 en 19 Diciembre 2010, 19:52 pm
Gracias a los dos por los ejemplos, mejor explicación imposible  ;D.