Foros del Web » Programando para Internet » PHP »

Problemas con time() entre Windows y Linux

Estas en el tema de Problemas con time() entre Windows y Linux en el foro de PHP en Foros del Web. Buenas tardes. Tengo este formulario: Código PHP: < form action = "votar.php"  method = "post"  id = "VotoForm"  style = "display: none;" > < table  < tr ...
  #1 (permalink)  
Antiguo 11/09/2009, 09:08
Avatar de MrChuky  
Fecha de Ingreso: agosto-2009
Mensajes: 4
Antigüedad: 14 años, 8 meses
Puntos: 0
Problemas con time() entre Windows y Linux

Buenas tardes.

Tengo este formulario:

Código PHP:
<form action="votar.php" method="post" id="VotoForm" style="display: none;">
<
table <tr><td>
Cuenta:</td><td> <input type="text" name="cuenta" size="10" id="l2_acc"></td></tr><tr><td>
Personaje:</td><td> <input type="text" name="user" size="10" id="l2_char"><br></td></tr><tr><td colspan="2"><center>
<
br><input type="submit" id="submit" name="cooki" value="Obtener puntos" class="submit" type="submit">
</
center>
</
td></tr>
</
table>
</
form
Que envía este php:

Código PHP:
<?php
  define
('mySQL_hostname''host');  //database IP
  
define('mySQL_database''base_de_datos');  //database name
  
define('mySQL_username''root');  //database user
  
define('mySQL_password''pass');  //database password

  
$db_link mysql_pconnectmySQL_hostnamemySQL_usernamemySQL_password )
    or die( 
'Error connecting to mysql<br><br>'.mysql_error() );

  
$db_select mysql_select_dbmySQL_database$db_link )
    or die( 
'Error connecting to Database<br><br>'.mysql_error() );

  
$user $_POST["user"];
  
$cuenta $_POST["cuenta"];
  
$ip getenv("REMOTE_ADDR");
  
$fecha =time();
  
  
$vototime mysql_query("SELECT `vototime` FROM `characters` WHERE `char_name` = '$user' and `account_name` = '$cuenta'") or die(mysql_error());
  
$query_rowmysql_fetch_array($vototime);
  
  
$vototimequeda mysql_query"SELECT `vototimequeda` FROM `characters` WHERE `char_name` = '$user' and `account_name` = '$cuenta'" )or die(mysql_error());
  
$query_row2mysql_fetch_array($vototimequeda);
  
  
$ipvote mysql_query"SELECT `ipvote` FROM `characters` WHERE `vototime` > $fecha AND `ipvote` = '$ip'" )or die(mysql_error());
  
$query_row3mysql_fetch_array($ipvote);
  
    
  
$tiempo =time();
  
  if (
$query_row['vototime'] > $tiempo){echo "Votaste antes de que se acabara el tiempo, prueba el $query_row2[vototimequeda]"mysql_close(); }
  elseif (
$ip == $query_row3['ipvote']){echo "Votaste antes de que se acabara el tiempo."mysql_close(); }
  else {
      
$db_add mysql_query"UPDATE `characters` SET `vote` = vote+2 WHERE `char_name` = '$user' and `account_name` = '$cuenta'" );
      
$db_add2 mysql_query"UPDATE `characters` SET `ipvote` = '$ip' WHERE `account_name` = '$cuenta'" );
       
$db_add3 mysql_query"UPDATE `characters` SET `vototimenow` = UNIX_TIMESTAMP() WHERE  `account_name` = '$cuenta'" );
      
$db_add4 mysql_query"UPDATE `characters` SET `vototime` = UNIX_TIMESTAMP()+60 WHERE  `account_name` = '$cuenta'" );
      
$db_add5 mysql_query"UPDATE `characters` SET `vototimequeda` = now()+ interval 6 hour WHERE `account_name` = '$cuenta'" )
        or die( 
'Error: '.mysql_error() );        
          echo 
"Puntos adquiridos')";
         
  }
?>
Aparentemente funciona todo perfecto.

En el formulario introducen los datos tales como nombre de usuario y personaje al que van a ir destinados unos puntos.

También coloca el tiempo en el que le dieron al botón y en otra columna el tiempo +60 segundos, entonces si intentan enviar el formulario antes de esos 60 segundos, revisa si existe algún otro personaje con la misma ip o si el tiempo actual aún no ha llegado a superar al tiempo +60, y en ese caso no deja votar.

El problema es que cuando lo conecto a la base de datos que está en Windows, no hay nada erroneo pero si lo conecto al servidor en Linux siempre me da los puntos, es decir no revisa el primer if ( $query_row['vototime'] > $tiempo ) y siempre da los votos aunque el tiempo que se guardó sea mayor al actual.

No tengo ni idea que es lo que puede estar mal, pues en Linux también guarda todos los datos y lo unico que hace es dejar votar siempre por el contrario en windows la única diferencia es que si revisa el tiempo.

He revisado las tablas en ambos servidores, es la misma, no cambia absolutamente nada.



Desde ya, gracias.

Última edición por MrChuky; 11/09/2009 a las 09:27
  #2 (permalink)  
Antiguo 11/09/2009, 09:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas con time() entre Windows y Linux

Acostumbrate a usar comillas en tus llaves, ya que eso aunque no lo creas puede causar problemas, es decir, en lugar de usar $query_row[vototime] usa $query_row['vototime'] ya que si no PHP asume que es una constante y trata de buscar el valor.

Saludos.
  #3 (permalink)  
Antiguo 11/09/2009, 09:21
Avatar de MrChuky  
Fecha de Ingreso: agosto-2009
Mensajes: 4
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Problemas con time() entre Windows y Linux

Cita:
Iniciado por GatorV Ver Mensaje
Acostumbrate a usar comillas en tus llaves, ya que eso aunque no lo creas puede causar problemas, es decir, en lugar de usar $query_row[vototime] usa $query_row['vototime'] ya que si no PHP asume que es una constante y trata de buscar el valor.

Saludos.
Bueno, gracias por tan rápida respuesta aunque he probado con comilla simple y doble pero sigue igual.

He editado el post para que se vea como está ahora.
  #4 (permalink)  
Antiguo 11/09/2009, 10:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problemas con time() entre Windows y Linux

Solo queda que imprimas el contenido ($query_row) usando var_dump() y veas que datos te trae la base de datos.

Saludos.
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 14:05.