Foros del Web » Programando para Internet » PHP »

Un simple IF: Quien podra resolver esto??

Estas en el tema de Un simple IF: Quien podra resolver esto?? en el foro de PHP en Foros del Web. Al cargar una página, magicamente el contenido del siguiente 'if' es ejecutado 2 veces, cuando solo deberia ocurrir 1 vez. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código php: Ver ...
  #1 (permalink)  
Antiguo 28/07/2009, 09:30
 
Fecha de Ingreso: mayo-2009
Mensajes: 210
Antigüedad: 14 años, 10 meses
Puntos: 0
Un simple IF: Quien podra resolver esto??

Al cargar una página, magicamente el contenido del siguiente 'if' es ejecutado 2 veces, cuando solo deberia ocurrir 1 vez.

Código php:
Ver original
  1. if($_SESSION["{$image_id}_viewed"] != 1) {
  2.     $connection = mysql_connect($db_host,$db_username,$db_password) or die('Error al conectar con mysql');
  3.     mysql_select_db($db_database, $connection) or die('Error al seleccionar base de datos');
  4.    
  5.     $query = "UPDATE wallpapers SET image_views = image_views+1 WHERE image_id = {$image_id}";
  6.     mysql_query($query,$connection) or die(mysql_error());
  7.    
  8.     $_SESSION["{$image_id}_viewed"] = 1;
  9.   }

Si se vuelve a cargar una segunda vez la página, el contenido del if ya no se ejecuta, lo cual es correcto.

Otros datos: Si se borran las cookies y se reinicia el navegador, al volver a cargar una de estas paginas, otra vez se ejecuta 2 veces el if. Alguna idea?? Quiero que se ejecute 1 vez por sesión nada mas. Parece como si estuviera cargando la pagina 2 veces simultaneamente, para guardar en cache o algo similar.
  #2 (permalink)  
Antiguo 28/07/2009, 09:39
Avatar de Kamae  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona (Catalunya)
Mensajes: 307
Antigüedad: 16 años
Puntos: 13
Respuesta: Un simple IF: Quien podra resolver esto??

Buenas!

Eso de {$image_id}_viewed intuyo que por ejemplo hace 123_viewed y que por lo tanto es una variable variable (valga la redundancia)? Vaya, sea así o no, el primer consejo es que hagas un echo $_SESSION["{$image_id}_viewed"]; antes del IF y así vas a tener más pistas sobre cómo solucionar el error.
  #3 (permalink)  
Antiguo 28/07/2009, 09:58
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: Un simple IF: Quien podra resolver esto??

Verifica que no tengas instalado en tu browser algún acelerador, ya que muchos usan algo que se conoce como PreFetch y eso causa que se ejecute dos veces tu script.

Saludos.
  #4 (permalink)  
Antiguo 28/07/2009, 11:03
 
Fecha de Ingreso: mayo-2009
Mensajes: 210
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Un simple IF: Quien podra resolver esto??

Cita:
Iniciado por Kamae Ver Mensaje
Buenas!

Eso de {$image_id}_viewed intuyo que por ejemplo hace 123_viewed y que por lo tanto es una variable variable (valga la redundancia)? Vaya, sea así o no, el primer consejo es que hagas un echo $_SESSION["{$image_id}_viewed"]; antes del IF y así vas a tener más pistas sobre cómo solucionar el error.
si ya probe: antes del if no imprime nada, y al final del if imprime 1. Eso poniendo un exit; al final del if. Debe ser lo que dice gatorV, pero no le veo la logica a algo que ejecuta el mismo programa 2 veces al mismo tiempo. O sea está volviendo a ejecutarlo antes de q surta efecto la asignación a la variable de sesión.


Cita:
Iniciado por GatorV Ver Mensaje
Verifica que no tengas instalado en tu browser algún acelerador, ya que muchos usan algo que se conoce como PreFetch y eso causa que se ejecute dos veces tu script.

Saludos.
y no se podrá solucionar desde el codigo??
  #5 (permalink)  
Antiguo 28/07/2009, 11:15
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Un simple IF: Quien podra resolver esto??

Una de las soluciones es que la variable la uses sin sesiones y una vez tengas el valor definitivo lo pases a la sesion.

Pasa tal cual sucede cuando apretas cerrar sesion y no pasas por una pagina intermedia que haga el session_destroy().

Trata de cargar una variable normal desde la de session al comienzo de la pagina y trabaja con ella hasta que debas cambiar el valor que se envia en la variable de sesion.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #6 (permalink)  
Antiguo 28/07/2009, 13:20
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: Un simple IF: Quien podra resolver esto??

Puedes usar este código para prevenir el Prefetch:
Código php:
Ver original
  1. if ((isset($_SERVER['HTTP_X_MOZ'])) && ($_SERVER['HTTP_X_MOZ'] == 'prefetch')) {
  2.        // This is a prefetch request. Block it.
  3.        header('HTTP/1.0 403 Forbidden');
  4.        echo '403: Forbidden<br><br>Prefetching not allowed here.';
  5.        die();
  6. }

Saludos.
  #7 (permalink)  
Antiguo 28/07/2009, 16:26
 
Fecha de Ingreso: mayo-2009
Mensajes: 210
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Un simple IF: Quien podra resolver esto??

Cita:
Iniciado por Marvin Ver Mensaje
Una de las soluciones es que la variable la uses sin sesiones y una vez tengas el valor definitivo lo pases a la sesion.

Pasa tal cual sucede cuando apretas cerrar sesion y no pasas por una pagina intermedia que haga el session_destroy().

Trata de cargar una variable normal desde la de session al comienzo de la pagina y trabaja con ella hasta que debas cambiar el valor que se envia en la variable de sesion.

Suerte!
gracias

igual no entendí como trabajar con variables normales, si necesito que permanezcan luego de cerrar la página.

O sea estoy usando una variable para cada imagen, para saber si ya fue visualizada, y así dejar de sumarle visualizaciones.

Si uso una variable normal, al cerrar la pestaña y volver a abrirla (sin cerrar el navegador), volveria a contar una visualización.


Cita:
Iniciado por GatorV Ver Mensaje
Puedes usar este código para prevenir el Prefetch:
Código php:
Ver original
  1. if ((isset($_SERVER['HTTP_X_MOZ'])) && ($_SERVER['HTTP_X_MOZ'] == 'prefetch')) {
  2.        // This is a prefetch request. Block it.
  3.        header('HTTP/1.0 403 Forbidden');
  4.        echo '403: Forbidden<br><br>Prefetching not allowed here.';
  5.        die();
  6. }

Saludos.
faa, gracias ahora lo pruebo
  #8 (permalink)  
Antiguo 30/07/2009, 13:28
 
Fecha de Ingreso: mayo-2009
Mensajes: 210
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Un simple IF: Quien podra resolver esto??

Cita:
Iniciado por GatorV Ver Mensaje
Puedes usar este código para prevenir el Prefetch:
Código php:
Ver original
  1. if ((isset($_SERVER['HTTP_X_MOZ'])) && ($_SERVER['HTTP_X_MOZ'] == 'prefetch')) {
  2.        // This is a prefetch request. Block it.
  3.        header('HTTP/1.0 403 Forbidden');
  4.        echo '403: Forbidden<br><br>Prefetching not allowed here.';
  5.        die();
  6. }

Saludos.
ya probe, no me detiene el programa.

me voy a volver loco, aun con prefetch, supongamos q anda mal y cuenta 3 visualizaciones la primera vez.. pero por qué sigue contando mas visualizaciones si ahi ya definitivamente le asignó 1 a su variable de sesion?!?!

puede estar mal el IF?? ya probé mostrar la variable y está bien, y vale 1. Probe cambiar la condición del IF por un !isset, pero sigue ignorándola.
  #9 (permalink)  
Antiguo 30/07/2009, 15:31
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: Un simple IF: Quien podra resolver esto??

Pues muy raro, si no se esta ejecutando el script más de una vez, revisa que no estes ejecutando ese código dentro de un bucle for/while o algo por el estilo, ya que eso también puede ocasionar el problema.

Te recomiendo instalar el plugin firebug para Firefox con el puedes ver como se comporta la red y que peticiones esta haciendo.

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 17:36.