Foros del Web » Programando para Internet » PHP »

Identificar problema

Estas en el tema de Identificar problema en el foro de PHP en Foros del Web. Hola amigos, ya tenia un tiempo que no visitaba el foro. Bueno, hoy les quiero solicitar un gran favor, pues no he logrado identificar el ...
  #1 (permalink)  
Antiguo 22/05/2012, 12:20
 
Fecha de Ingreso: noviembre-2010
Mensajes: 116
Antigüedad: 13 años, 5 meses
Puntos: 7
Identificar problema

Hola amigos, ya tenia un tiempo que no visitaba el foro.

Bueno, hoy les quiero solicitar un gran favor, pues no he logrado identificar el error en este archivo. es un archivo que ejecuto en cronjob cada media noche el cual debe realizar una determinada tarea en el sitio, el error de este esta en que no establece de manera correcta la fecha de vencimiento, este es el resultado que me llega al email cuando se ejecuta el archivo.

Set-Cookie: ln=English
Set-Cookie: PHPSESSID=0d627c390fdc9b71a01f1290ad4b1fb7; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Cache-control: private
Content-type: text/html

Done.

Como ven, la fecha esta dislocada, por lo que no puede llevar acabo la tarea, aqui les dejo el codigo a ver si alguien me puede ayudar a identificar el posible error.

Código PHP:
<?
###############################################################################
@set_time_limit(0);
include(
'../config.php');
###############################################################################
function out($str=''){
    print 
"$str\r\n";
    
flush();
}
###############################################################################
function SendEmailNotification($UserId$ProductId$SubscriptActive){
    global 
$sitename$data;
    
$name="";
    
$email="";
    
$productname="";
    
$sql="SELECT email, fname, lname FROM {$data['DbPrefix']}members WHERE id=$UserId";
  
$res=mysql_query($sql);
  if (
$res) if (mysql_num_rows($res) > 0) {
    
$row=mysql_fetch_array($res);
    
$email=$row['email'];
    
$name=$row['fname'] . " " $row['lname'];
  }
  
$sql="SELECT name FROM {$data['DbPrefix']}products WHERE id=$ProductId";
  
$res=mysql_query($sql);
  if (
$res) if (mysql_num_rows($res) > 0) {
    
$row=mysql_fetch_array($res);
    
$productname=$row['name'];
  }
  if (
$SubscriptActive) {
    
$key="SUBSCRIPTION-RESUMED";
  }
  else {
    
$key="SUBSCRIPTION-STOPPED";
  }
  if (!empty(
$email)) {
    
$post['username']=$name;
    
$post['product']=$productname;
    
$post['email']=$email;
    
send_email($key$post);
  }
  else 
out("Can not send e-mail notification to user $name, email field is empty.");
}
###############################################################################
function Main(){
    global 
$data;
    
$sql="SELECT 
      subs.*, subs.id as subscriptionid, (TO_DAYS(NOW()) - TO_DAYS(subs.sdate)) as daystopay, subs.member as payerid,
      prod.type, prod.type, prod.price, prod.period, prod.trial, prod.tax, prod.shipping, prod.name as productname, prod.owner as payeeid,
      memb.fname as userfname, memb.lname as userlname
    FROM 
      {$data['DbPrefix']}subscriptions subs LEFT JOIN {$data['DbPrefix']}products prod ON subs.product=prod.id,
      {$data['DbPrefix']}subscriptions subs2 LEFT JOIN {$data['DbPrefix']}members memb ON subs.owner=memb.id
    WHERE subs2.id=subs.id AND subs.sdate < NOW()"
;
    
$res=mysql_query($sql);
    if (
$res) if (mysql_num_rows($res) > 0){
        
out("Subscriptions to process: " mysql_num_rows($res));
        
out("Working...");
        while (
$row=mysql_fetch_array($res)){
            
$amount=$row['shipping'] + $row['tax'] + $row['price'];
      
$payrounds=floor ($row['daystopay'] / $row['period']);
      
$unpaiddays=$row['daystopay'] - (floor($row['daystopay'] / $row['period']) * $row['period']);
      
$amount=$amount $payrounds;
      if (
$payrounds 0){
        if (
select_balance($row['payerid']) >= $amount){
          
$sql="UPDATE {$data['DbPrefix']}subscriptions SET ";
          if (
$row['holded'] == 1){
            
$paydate=date("Y-m-d"mktime (000date("m"), date("d") - $unpaiddaysdate("Y")));
            
$sql .= " sdate='$paydate',holded=0";
            
SendEmailNotification($row['payerid'], $row['product'], true);
          }else{
            
$paydate=date("Y-m-d"mktime (000date("m"), date("d") - $unpaiddaysdate("Y")));
            
$sql .= " sdate='$paydate'";
          }
          
$sql .= " WHERE id={$row['subscriptionid']}";
          
$rslt=mysql_query($sql);
          if (
$rslt) {
            
$fees=($amount $data['PaymentPercent']/100) + $data['PaymentFees'];
            
transaction($row['payerid'], $row['payeeid'], $amount$fees01'Payment for subscription ' $row['productname'] . ' for ' $row['userfname'] . " " $row['userlname'] . ", " . ($payrounds*$row['period']) . ' days''');
          }
        } else {
          
$sql="UPDATE {$data['DbPrefix']}subscriptions SET holded=1 WHERE id={$row['subscriptionid']}";
          
mysql_query($sql);
          
SendEmailNotification($row['payerid'], $row['product'], false);
        }
      }
        }
    }
    
out("Done.");
}
###############################################################################
Main();
###############################################################################
?>
Este archivo pertenece a una pagina de suscripción, lo que hace es ver cuales cuentas no han pagado su membresia diaria, semanal, mensual o anual.

Gracias de antemano
  #2 (permalink)  
Antiguo 22/05/2012, 12:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Identificar problema

Esa es una cabecera, al decir que expira en el pasado hace que el browser no almacene la cookie, pero no debería de influir en nada si tu cron job se ejecuta en modo consola, ya que en ese punto las sesiones (y cookies) no influyen en nada.

¿Cual es el problema real?
  #3 (permalink)  
Antiguo 22/05/2012, 12:46
 
Fecha de Ingreso: noviembre-2010
Mensajes: 116
Antigüedad: 13 años, 5 meses
Puntos: 7
Respuesta: Identificar problema

Hola, bueno he estado investigando un poco y me parece que casi todos los sitios presentan el mismo problema:

http://es.domstat.net/paypal.com.html

Por lo que no creo que ese eso el causante, Aun así el script no me funciona y bueno ahora no se a que pueda deberse, por lo que si ven algún error de programación por favor háganme saber.,

Gracias
  #4 (permalink)  
Antiguo 22/05/2012, 12:48
 
Fecha de Ingreso: noviembre-2010
Mensajes: 116
Antigüedad: 13 años, 5 meses
Puntos: 7
Respuesta: Identificar problema

Cita:
Iniciado por GatorV Ver Mensaje
Esa es una cabecera, al decir que expira en el pasado hace que el browser no almacene la cookie, pero no debería de influir en nada si tu cron job se ejecuta en modo consola, ya que en ese punto las sesiones (y cookies) no influyen en nada.

¿Cual es el problema real?
Bueno, ahora me acabo de dar cuenta de que no es un problema

Lo que pasa es que el script no esta realizando su función, este se encarga de ver cuales usuarios no han pagado su membresia. Se supone que debe enviar un mensaje de notificación si detecta que el usuario tiene la cuenta sin pagar.

Gracias por responder
  #5 (permalink)  
Antiguo 22/05/2012, 13:03
 
Fecha de Ingreso: noviembre-2010
Mensajes: 116
Antigüedad: 13 años, 5 meses
Puntos: 7
Respuesta: Identificar problema

En el archivo config.php hay algo como esto:

$dateformat='m/d/Y h:iA';

Si se fijan el formato de la fecha en el archivo que he publicado es:

$paydate=date("Y-m-d", mktime (0, 0, 0, date("m"), date("d") - $unpaiddays, date("Y")));

Considerando de que al principio del archivo aparece: include('../config.php'); creen que esto tenga algo que ver ?

Saludos!
  #6 (permalink)  
Antiguo 22/05/2012, 13:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Identificar problema

Ver porque no funciona es complicado, es un script muy largo, te recomendaría que intentaras ejecutarlo paso a paso usando un debugger como xdebug, así puedes ver que es lo que hace linea por linea.

Saludos.
  #7 (permalink)  
Antiguo 22/05/2012, 13:34
 
Fecha de Ingreso: noviembre-2010
Mensajes: 116
Antigüedad: 13 años, 5 meses
Puntos: 7
Respuesta: Identificar problema

Cita:
Iniciado por GatorV Ver Mensaje
Ver porque no funciona es complicado, es un script muy largo, te recomendaría que intentaras ejecutarlo paso a paso usando un debugger como xdebug, así puedes ver que es lo que hace linea por linea.

Saludos.
Gracias por responder,

La verdad no se usar eso que me dices, pero buscare informacion al respecto y tratare de solucionarlo.

Gracias

Etiquetas: html, mysql, sql, identificador
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:46.