Foros del Web » Programando para Internet » PHP »

PHP script de 30 dias premium

Estas en el tema de PHP script de 30 dias premium en el foro de PHP en Foros del Web. Hola buenas. Tengo un script de PHP para una pagina donde se compra premium que dura un mes. El problema es que no cuenta bien ...
  #1 (permalink)  
Antiguo 11/12/2013, 02:59
Avatar de alesyt0  
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 4 meses
Puntos: 0
PHP script de 30 dias premium

Hola buenas.

Tengo un script de PHP para una pagina donde se compra premium que dura un mes.

El problema es que no cuenta bien los dias hasta que se acaba el premium, por ejemplo si tengo una cuenta1 y compro premium con ella, dura 30 dias. Al cabo de 5 dias marca que faltan 25 dias, por lo que es correcto, pero si otra cuenta en la web compra tambien 30 dias premium, marca 25 dias desde el principio.

Este es el codigo:

Código PHP:
function time_reset()
{
    
$now time();
    
DB::select('accounts');
    
$timer DB::fetch_row();   
    
$timer $timer['reset_timer'];
    
$difference = ($now $timer);
    return (
2629743 $difference);

Creo que es por el fetch_row que seleciona automaticamente el primer valor de la columna reset_timer, pero mis conocimientos de php son casi 0.

Esta es la base de datos accounts http://i.stack.imgur.com/x7vhb.png



Agradezco cualquier tipo de ayuda!

Gracias de antemano
  #2 (permalink)  
Antiguo 11/12/2013, 04:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: PHP script de 30 dias premium

Donde seleccionas al usuario en cuestion?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 11/12/2013, 04:41
Avatar de alesyt0  
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: PHP script de 30 dias premium

no se seleciona, por eso pido ayuda.

El fetch_row seleciona el primer reset_timer value y lo aplica para todos, lo que necesito es que lo aplique para cada usuario
  #4 (permalink)  
Antiguo 11/12/2013, 06:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: PHP script de 30 dias premium

Código PHP:
Ver original
  1. function time_reset($idUser)
  2. {
  3.     $now = time();
  4.  
  5.    ///Aqui se deberia ejecutar la consulta
  6.      
  7.     $row = DB::fetch_row();  
  8.     $timer = $row['reset_timer'];
  9.     $difference = ($now - $timer);
  10.     return (2629743 - $difference);
  11. }

DB:: Que libreria estas usando?

El tema se soluciona ejecutando una consulta

"SELECT reset_timer FROM accounts WHERE id=$idUser"

$idUser --> variable con el id del usuario en questión.

Luego $row sera el registro del usuario....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 11/12/2013, 07:43
Avatar de alesyt0  
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: PHP script de 30 dias premium

Gracias quimfv por contestar.

La verdad no se que libreria esta usando.. no tengo mucha idea.

El problema es que $idUser no puede ser un numero, quiero decir por que si el usuario: isVIP = 1 significa 30 dias premium por lo que en reset_timer tendra un valor de tiempo, todo usuario vip tiene reset_timer value, el que no es vip es por defecto 0 en esa columna.

Por eso que si tengo 50 usuarios y 30 son premium, hay 30 valores distintos de reset_timer.
Cual es la forma para que lea los de cada uno, osea como un comoding para $idUser para que los lea todos uno por uno?

Gracias!
  #6 (permalink)  
Antiguo 11/12/2013, 07:49
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: PHP script de 30 dias premium

SELECT id,reset_timer FROM accounts WHERE isVIP = 1

ahora tenemos 30 rows...

Como no sabemos la libreria no te lo puedo decir con toda seguridad pero algo asi

Código PHP:
Ver original
  1. while ($row = DB::fetch_row()){
  2.  
  3. ... tu codigo....
  4.  
  5. }

Para cada ciclo del bucle $row será una linea y los ciclos terminaran cuando no haya mas lineas por leer...


Lo que no puedes hacer es un return en cada ciclo....


Nota: Mensaje 4000!!!!
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 11/12/2013, 09:10
Avatar de alesyt0  
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: PHP script de 30 dias premium

Hola gracias,

Lo he intentado pero nada.. ahora peor, no lee ninguna fila. estoy intentando con este codigo:

Código PHP:
function time_reset()
{
while (
$row DB::fetch_row())
{
    
$now time();
    
DB::query("SELECT id,reset_timer FROM accounts WHERE isVIP = 1");
    
$row DB::fetch_row();   
    
$timer $row['reset_timer'];
    
$difference = ($now $timer);
    return (
2629743 $difference);
}

He probado quitandole el return y poniendolo en otros sitios o quitandolo del todo y sigue igual.. tambien probe con un DB::select('accounts'); pero nada..

Como lo hago? gracias
  #8 (permalink)  
Antiguo 12/12/2013, 01:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: PHP script de 30 dias premium

Código PHP:
Ver original
  1. function time_reset()
  2. {
  3. $now = time();
  4. DB::query("SELECT id,reset_timer FROM accounts WHERE isVIP = 1");
  5. $respuesta=array();
  6. while ($row = DB::fetch_row()) {
  7.       $respuestaId=array();
  8.       $timer = $row['reset_timer'];
  9.       $difference = ($now - $timer);
  10.       ///Una funcion solo puede hacer un return
  11.       ///  return (2629743 - $difference);
  12.      $respuestaId["id"]=$row['id'];
  13.      $respuestaId["time_reset"]=2629743 - $difference;
  14.      push_array($respuesta,$respuestaId);
  15. }
  16. return $respuesta;
  17. }

No puedes hacer while ($row = DB::fetch_row()) antes de lanzar la query

Eso deberia permitirte leer los registros, ahora bien no has explicado en que situación usas esa función.

Si lees los datos de todos los usuario lo suyo seria retornar una respuesta por usuario, pero como la función solo puede hacer un return luego deberías guardar los resultados en un array y retornar ese array.

Por otro lado deberias hacer un vistazo a la date/time functions de php o de mysql. Eso se puede solucionar haciendo el calculo en la query directamente.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 12/12/2013 a las 01:55
  #9 (permalink)  
Antiguo 12/12/2013, 03:03
Avatar de alesyt0  
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: PHP script de 30 dias premium

Hola quimfv! Mil gracias por la respuesta, parece que ahora ese codigo si funciona, pero me ha surgido otro error en otro sitio..

El modulo donde se dispone a mostrar cuantos dias premium quedan al usuario salta un fatal error:

Fatal error: Unsupported operand types in /public_html/modules/ucp/membership.php on line 64

Este codigo es de la linea 61 a la 66, la 64 es la $months_left =..

Código PHP:
            $days_left 0;
            if(
User::$isVIP 0)
            {
                
$months_left = ((User::$isVIP 1) + (time_until_reset() / 2629743));
                
$days_left ceil($months_left 30);
            } 
Mil gracias y disculpame por tantos problemas!
  #10 (permalink)  
Antiguo 12/12/2013, 05:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: PHP script de 30 dias premium

$isVIP es booleana, no? true o false.

Luego
Código PHP:
Ver original
  1. $days_left = 0;
  2.             ///Si es boleana sera 0 falso  o 1 true
  3.             if(User::$isVIP)
  4.             /// Luego la condicion no necesita segundo termino
  5.             {
  6.  
  7.              ////time_until_reset() no se que es? Es una función pero no se que retorna.
  8.              ////No entiendo porque restas 1 a una variable boleana?
  9.                 $months_left = ((User::$isVIP - 1) + (time_until_reset() / 2629743));
  10.                 $days_left = ceil($months_left * 30);
  11.             }
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #11 (permalink)  
Antiguo 12/12/2013, 07:05
Avatar de alesyt0  
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: PHP script de 30 dias premium

Gracias Quim,

time_until_reset es la funcion de time_reset que la renombre, osea es el codigo que me has pasado de:

Código PHP:
function time_reset()
{
$now time();
DB::query("SELECT id,reset_timer FROM accounts WHERE isVIP = 1");
$respuesta=array();
while (
$row DB::fetch_row()) {
      
$respuestaId=array();
      
$timer $row['reset_timer'];
      
$difference = ($now $timer);
      
///Una funcion solo puede hacer un return
      ///  return (2629743 - $difference);
     
$respuestaId["id"]=$row['id'];
     
$respuestaId["time_reset"]=2629743 $difference;
     
push_array($respuesta,$respuestaId);
}
return 
$respuesta;


$isVIP no tengo ni idea si es true o false, estaba marcado como if(User::$isVIP > 0) supongo que sera false?

al introducir ese codigo sigue saliendo el mismo error "Unsupported operand types"

gracias de nuevo!
  #12 (permalink)  
Antiguo 13/12/2013, 01:54
Avatar de alesyt0  
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: PHP script de 30 dias premium

Bump! Me es urgente porfavor!
  #13 (permalink)  
Antiguo 13/12/2013, 02:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: PHP script de 30 dias premium

Creo que te estas liando en algo para lo que te falta alguna base.

Si time_until_reset() es la funcion que te pase yo, retorna un array luego es imposible hacer

$months_left = ((User::$isVIP - 1) + (time_until_reset() / 2629743));

En ese array estan los datos de todos los usuarios VIP debes leerlo y tratar usuario por usuario. O redefinir la función para que solo retorne los datos de un usuario cada vez, como te sugeri en algun post anterior.


Supongo que si puedes hacer User::$isVIP luego tambien podras consultar el id de User:: y con el seleccionar su dato en el array , o lanzar la función para que solo te retorne el dato de ese usuario... pero sin tener ni claro con que estamos trabajando no puedo ayudarte mas.... para ello deberia ver tu codigo pero no solo lo que falle... no postees toda la web.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 13/12/2013 a las 02:38
  #14 (permalink)  
Antiguo 13/12/2013, 02:53
Avatar de alesyt0  
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: PHP script de 30 dias premium

Entiendo que algo falla.

Pero el problema esk yo no se PHP, nada casi.

Este codigo no lo hice yo, es un CMS y el creador esta ausente de internet.

Deverdad me urge la solucion, puedo pagar si hace falta!

Gracias
  #15 (permalink)  
Antiguo 14/12/2013, 05:02
Avatar de alesyt0  
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: PHP script de 30 dias premium

bump! porfa una ayuda!

Etiquetas: dias, premium, select
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 21:22.