Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/10/2010, 16:50
kadas99
 
Fecha de Ingreso: julio-2009
Ubicación: Argentina!
Mensajes: 324
Antigüedad: 14 años, 9 meses
Puntos: 4
Dates y errores de fechas en BD

Buenas tardes chicos! como les va? Espero que bien?

bueno, paso a comentarles mi problema.

El tema es que como me gusta tener controlada las cosas, en mi bd llevo un control de todos los emails que se envian los usuarios, en esta base, guardo la fecha (dia y hora) entre otras cosas, pero el problema viene cuando alguien de otro lugar (Pais) con diferente zona horaria envia algun email, ¿porque? porque me guarda la fecha que el tiene en su computadora, por lo cual me esta generando un par de errores, ya que como habran visto en otro post, hago un envio de email automatico cada hora (El cual me resulta necesario hacer), y por ende necesito saber la hora REAL u OFICIAL. Por ejemplo: en la bd tengo emails que se enviaron a las 14 horas, entonces a las 15 horas debo volver a enviar, pero si un usuario entra dede otro pais y envia emails, se guarda la fecha del usuario (Ej: 10hs) entonces se me arma el quilombooo!

ajaja

les muestro de que se trata todo esto

Esto es basicamente el archivo1.php

Selecciono el ultimo email enviado con el asunto de invitacion:
Código PHP:
$sql="SELECT MAX(clave) FROM `email` WHERE asunto='Invitacion' ORDER BY clave DESC";
$res=mysql_query($sql) or die (mysql_error());
$ultimo=mysql_fetch_array($res);
echo
"<br />Clave del ultimo email de invitacion: ".$ultimo['0']."<br />";
$last=$ultimo['0']; 
luego busco la fecha de ese mensaje
Código PHP:
$sql2="SELECT fecha FROM `email` WHERE clave=$last";
$res2=mysql_query($sql2) or die(mysql_error());
$ultimo2=mysql_fetch_array($res2);
echo 
"Fecha del ultimo email de invitacion: "$ultimo2['fecha']."<br/>";
$fecha1=$ultimo2['fecha']; 

Luego busco el ultimo email con cualquier asunto
Código PHP:
$sql3="SELECT MAX(clave) FROM `email` ORDER BY clave DESC";
$res3=mysql_query($sql3) or die (mysql_query());
$ultimo3=mysql_fetch_array($res3);

echo 
"Clave del ultimo email general: ".$ultimo3['0']."<br />";
$last2=$ultimo3['0']; 
y aqui la fecha del mismo
Código PHP:
$sql4="SELECT fecha FROM `email` WHERE clave=$last2";
$res4=mysql_query($sql4) or die(mysql_error());
$ultimo4=mysql_fetch_array($res4);

echo 
"Fecha del ultimo email general: "$ultimo4['fecha']."<br/>";
$fecha2=$ultimo4['fecha']; 

pongo la fecha1 en formato mktime()
$fecha1 es la hora el ultimo email con motivo invitar usuarios

Código PHP:
$dia1=$fecha1['0'].$fecha1['1'];
$mes1=$fecha1['3'].$fecha1['4'];
$anio1=$fecha1['6'].$fecha1['7'].$fecha1['8'].$fecha1['9'];
$hora1=$fecha1['11'].$fecha1['12'];
$minutos1=$fecha1['14'].$fecha1['15'];
echo 
"Fecha 1 es la del email con asunto invitar usuarios: ".$dia1."/".$mes1."/".$anio1." ".$hora1.":".$minutos1."<br/>";
$algo1=mktime($hora1,$minutos1,"00",$mes1,$dia1,$anio1);
echo 
"Fecha 1 en mktime(): ".$algo1."<br>"
pongo la fecha2 en formato mktime()
//$fecha2 es la hora el ultimo email general
Código PHP:
$dia2=$fecha2['0'].$fecha2['1'];
$mes2=$fecha2['3'].$fecha2['4'];
$anio2=$fecha2['6'].$fecha2['7'].$fecha2['8'].$fecha2['9'];
$hora2=$fecha2['11'].$fecha2['12'];
$minutos2=$fecha2['14'].$fecha2['15'];

echo 
"Fecha 2 es la del ultimo email general: ".$dia2."/".$mes2."/".$anio2." ".$hora2.":".$minutos2."<br/>";
$algo2=mktime($hora2,$minutos2,"00",$mes2,$dia2,$anio2);
echo 
"Fecha 2 en mktime(): ".$algo2

luego saco la hora actual y la transformo a mktime()
Código PHP:
$fecha3=date("d/m/Y H:i");
echo 
"<br />Hora actual: ".$fecha3;

$dia3=$fecha3['0'].$fecha3['1'];
$mes3=$fecha3['3'].$fecha3['4'];
$anio3=$fecha3['6'].$fecha3['7'].$fecha3['8'].$fecha3['9'];
$hora3=$fecha3['11'].$fecha3['12'];
$minutos3=$fecha3['14'].$fecha3['15'];

$fechamktime3=mktime($hora3,$minutos3,"00",$mes3,$dia3,$anio3);
echo 
"<br />Hora actual en mktime() ".$fechamktime3
Le resto 1 hora a la actual
Código PHP:
$fechamktime4=mktime($hora3-"1",$minutos3-"1","00",$mes3,$dia3,$anio3);
echo 
"<br />Hora actual menos 1 hora ".$fechamktime4;
echo 
"<br />".date("d/m/Y H:i"$fechamktime4); 
Controlo si paso mas de 1 hora
Código PHP:
$total=$fechamktime3-$algo1;
echo 
"<br />TOTAL: ".$total;
if(
$total >= "3660"){
echo 
"<br />Paso mas de 1 hora"
Buscaos el total de emails enviados desde $last (Ultimo email para invitar usuarios) y $last2 (ultimo email enviado general)
Código PHP:
$sql5="SELECT * FROM `email` WHERE clave BETWEEN $last AND $last2";
$resultado5=mysql_query($sql5) or die (mysql_error());
$counter=mysql_num_rows($resultado5);
echo 
"<br />Contador: ".$counter


$counter3 es el resultado que da la cantidad de emails que puedo enviar.
$counter2 son el total de emails que permite el hosting, a esto se le restan los ya enviados y el resultado es $counter3

Código PHP:
$counter2=180;//180 emails con un maximo de 200 por hora!
$counter3=$counter2-$counter;
echo 
"<br />last: ".$last;
echo 
"<br />last2: ".$last2;
echo 
"<br />counter: ".$counter;
echo 
"<br />counter2: ".$counter2;
echo 
"<br />counter3: ".$counter3
Busco en la bd en la tabla enviaemail las direcciones de emails a enviar y comienzo la iteracion
Código PHP:
$busc="SELECT * FROM enviaemail ORDER BY id ASC";
$resulta=mysql_query($busc)or die("error");
$contador=1;
while(
$resulta2=mysql_fetch_array($resulta) and $contador <= $counter3){

$email=$resulta2['email'];
enviar($email);
//echo "<br />".$contador." Enviado a: ".$email;
$id=$resulta2['id'];
eliminar($id);

$contador++;


y para enviar el email utilizo
Código PHP:
if(mail($to$subject$message$header)){
$fecha=date("d/m/Y H:i");
$motivo="Invitar";
$mensaje="Envio de email ";
$sql="INSERT ignore INTO email (de,para,asunto,mensaje,fecha)    VALUES ('$subject','$to','$motivo','$mensaje','$fecha')";
mysql_query($sql) or die("<div align=center><font color=\"#FF0000\">Error:</font> Hubo un error agregando algunos datos");

y ahi es donde creo que me toma mal la fecha date()


alguna idea de lo que puede ser?
si no me explique bien pregunten!

un abrazo