Foros del Web » Programando para Internet » PHP »

PHP OO Página carga 1 vez, comando de actualización se ejecuta dos veces.

Estas en el tema de Página carga 1 vez, comando de actualización se ejecuta dos veces. en el foro de PHP en Foros del Web. Buenas. Tengo una página en la que está ocurriendo algo muy extraño. Llevo toda la mañana perdida intentando solucionar este problema y no hallo una ...
  #1 (permalink)  
Antiguo 08/06/2011, 08:35
 
Fecha de Ingreso: agosto-2009
Mensajes: 52
Antigüedad: 14 años, 8 meses
Puntos: 4
Página carga 1 vez, comando de actualización se ejecuta dos veces.

Buenas.
Tengo una página en la que está ocurriendo algo muy extraño.
Llevo toda la mañana perdida intentando solucionar este problema y no hallo una solución.

Para resumir, tengo una página en php que al cargarse contiene la siguiente línea:

$db->Execute("UPDATE cb_pruebas SET prueba=prueba+1 where id=1");
//actualiza un registro incrementando en uno un determinado valor

No sé cómo, cuando se carga la página, este comando se ejecuta 2 veces, y no se encuentra dentro de un bucle.

La web está hecha en Smarty.

Si ha alguien le ha pasado esto alguna vez y me puede decir como solucionarlo se lo agradezco mucho.
  #2 (permalink)  
Antiguo 08/06/2011, 09:00
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 15 años, 11 meses
Puntos: 8
Respuesta: Página carga 1 vez, comando de actualización se ejecuta dos veces.

Supongo que igual haces algun include y se ejecuta 2 veces... si no pones codigo poco se puede hacer... aparte de que el smarty... pues como que no me gusta mucho... es mi opinion e ..

Un saludo
  #3 (permalink)  
Antiguo 08/06/2011, 09:09
 
Fecha de Ingreso: agosto-2009
Mensajes: 52
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Página carga 1 vez, comando de actualización se ejecuta dos veces.

Buenas.
No se trata de un include que se incluye varias veces.
No he puesto el código porque estoy casi segura que el problema no está en el código que se ejecuta del lado del servidor.

Código PHP:


define
("THIS_PAGE",'watch_premium_video');

define("PARENT_PAGE",'videos');

require 
'includes/config.inc.php';

$userquery->perm_check('view_video',true);

$pages->page_redir();




$vkey = @$_GET['data'];
$from substr($_SERVER['HTTP_REFERER'],0,28);
/*$from = "httpreferer: ".$_SERVER['HTTP_REFERER'].'<br/>';
$from .= "server: ".$_SERVER['SERVER_NAME'].'<br/>';
$from .= "document root: ".$_SERVER['DOCUMENT_ROOT'].'<br/>';*/
assign('from',$from);

if(
video_playable($vkey))

{

    
$vdo $cbvid->get_video($vkey);

    

    
//Checking for playlist

    
$pid $_GET['play_list'];

    if(!empty(
$pid))

    {

        
$plist $cbvid->action->get_playlist($pid,userid());

        if(
$plist)

            
$_SESSION['cur_playlist'] = $pid;

    }

    

    if(
post('send_content'))

    {

        
//Sending Video

        
$cbvid->set_share_email($vdo);

        
$cbvid->action->share_content($vdo['videoid']);

    }

    

    
//Calling Functions When Video Is going to play
    
call_watch_video_function($vdo);
    
    
//antiguamente esta llamada se realizaba dentro de call_watch_video_function
    //se ha separado para incrementar los contadores premium solo cuando el vídeo es premium    
    //casos en los que se incrementa el contador de videos premium
    //1. cuando es la primera vez que se accede al video
    //   (no existe la cookie con el id del vídeo) o (la cookie con el id de transacción asociada al video es distinta del id de transacción recibido por get)
    
if(!isset($_COOKIE['video_'.$vdo['videoid']])or($_COOKIE['trxid_video_'.$vdo['videoid']]!=$_GET["trxid_video"])){
        
increment_premium_views($vdo['videoid']);
    }
    
assign('cookie',$_COOKIE['trxid_video_'.$vdo['videoid']]);
    
assign('trxid',$_GET['trxid']);
    

    
//adding Comment
    
    
if(isset($_POST['add_comment']))

    {

        
$cbvideo->add_comment($_POST['comment'],$vdo['videoid']);

        
$vdo['comments_count'] = $cbvid->count_video_comments;

    }

    

    
//Adding Video To Favorites
    
    
if(isset($_REQUEST['favorite']))

    {

        
$cbvideo->action->add_to_fav($vdo['videoid']);

    }

    

    
assign('vdo',$vdo);

    
assign('user',$userquery->get_user_details($vdo['userid']));
    
    
subtitle($vdo['title']);



}else

    
$Cbucket->show_page false;



//Return category id without '#'
$v_cat $vdo['category'];
if(
$v_cat[2] =='#') {
$video_cat $v_cat[1];
}else{
$video_cat $v_cat[1].$v_cat[2];}
$vid_cat str_replace('%#%','',$video_cat);


assign('vid_cat',$vid_cat);


$log_this date('Y-m-d H:i:s') . '|' microtime();
foreach(
$_SERVER as $key => $value){
    
$log_this .= "[$key]=$value";
}
$log_this .= "<br />\n";
error_log($log_this,3,'log_file.txt');


//Displaying The Template
template_files('watch_premium_video.html');
display_it(); 
La función increment_premium_views es la que lanza el update que te comentaba.
A base de amargarme sin saber porqué se ejecuta dos veces el código, se me medio ocurrió crear un log para registrar las "requests" a las que atiende esta página.

El resultado del log es:
Código:
2011-06-08 18:56:35|0.88989100 1307544995[DOCUMENT_ROOT]=/home/radicals/public_html[GATEWAY_INTERFACE]=CGI/1.1[HTTP_ACCEPT]=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8[HTTP_ACCEPT_ENCODING]=gzip, deflate[HTTP_CONNECTION]=keep-alive[HTTP_COOKIE]=video_70=watched; trxid_video_70=f70aba30-8aac-4ea8-b5dc-0d763d6180e8; video_71=watched; trxid_video_71=0030bfe0-299d-49fd-aa83-da5850897d94; video_68=watched; trxid_video_68=1686e89f-23ee-4519-924f-6335ba427ea3; PHPSESSID=d7d7fafb9556c9590c9ff1890cdc1a9d; pageredir=http%3A%2F%2Fwww.radicalswinger.tv%2Fupload%2Fwatch_premium_video.php%3FDATAS%3D71%26data%3D71%26codes%3D1234%26code%3D1234%26trxid%3D0030bfe0-299d-49fd-aa83-da5850897d94%26transaction_id%3D0030bfe0-299d-49fd-aa83-da5850897d94[HTTP_HOST]=www.radicalswinger.tv[HTTP_KEEP_ALIVE]=115[HTTP_REFERER]=http://payment.allopass.com/acte/scripts/iframe/right.apu?ids=255654&%20idd=1014134&%20lang=es&data=71[HTTP_USER_AGENT]=Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1[PATH]=/bin:/usr/bin[QUERY_STRING]=DATAS=71&data=71&codes=1234&code=1234&trxid=8a8bde7a-c0d9-4178-a464-fca9385e80b8&transaction_id=8a8bde7a-c0d9-4178-a464-fca9385e80b8[REDIRECT_STATUS]=200[REMOTE_ADDR]=88.3.224.19[REMOTE_PORT]=61285[REQUEST_METHOD]=GET[REQUEST_URI]=/upload/watch_premium_video.php?DATAS=71&data=71&codes=1234&code=1234&trxid=8a8bde7a-c0d9-4178-a464-fca9385e80b8&transaction_id=8a8bde7a-c0d9-4178-a464-fca9385e80b8[SCRIPT_FILENAME]=/home/radicals/public_html/upload/watch_premium_video.php[SCRIPT_NAME]=/upload/watch_premium_video.php[SERVER_ADDR]=109.205.137.195[SERVER_ADMIN][email protected][SERVER_NAME]=www.radicalswinger.tv[SERVER_PORT]=80[SERVER_PROTOCOL]=HTTP/1.1[SERVER_SIGNATURE]=<address>Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Server at www.radicalswinger.tv Port 80</address>
[SERVER_SOFTWARE]=Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635[PHP_SELF]=/upload/watch_premium_video.php[REQUEST_TIME]=1307544995[argv]=Array[argc]=1<br />

2011-06-08 18:56:36|0.57464300 1307544996[DOCUMENT_ROOT]=/home/radicals/public_html[GATEWAY_INTERFACE]=CGI/1.1[HTTP_ACCEPT]=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8[HTTP_ACCEPT_ENCODING]=gzip, deflate[HTTP_CONNECTION]=keep-alive[HTTP_COOKIE]=quick_list_box=show; video_70=watched; trxid_video_70=f70aba30-8aac-4ea8-b5dc-0d763d6180e8; video_71=watched; trxid_video_71=0030bfe0-299d-49fd-aa83-da5850897d94; video_68=watched; trxid_video_68=1686e89f-23ee-4519-924f-6335ba427ea3; PHPSESSID=69c0ef2b81af8273be977ee78aa10036; pageredir=http%3A%2F%2Fradicalswinger.tv%2Fupload%2Fpay_per_video.php%3Fv%3D69B329XXMO9S; WibiyaLoads=67; WibiyaProfile=%7B%22toolbar%22%3A%7B%22stat%22%3A%22Max%22%7D%2C%22apps%22%3A%7B%22openApps%22%3A%7B%7D%7D%2C%22connectUserNetworks%22%3A%5Bnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%5D%7D; WibiyaNotification248688=248688[HTTP_HOST]=radicalswinger.tv[HTTP_KEEP_ALIVE]=115[HTTP_REFERER]=http://payment.allopass.com/acte/scripts/iframe/right.apu?ids=255654&%20idd=1014134&%20lang=es&data=71[HTTP_USER_AGENT]=Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1[PATH]=/bin:/usr/bin[QUERY_STRING]=DATAS=71&data=71&codes=1234&code=1234&trxid=8a8bde7a-c0d9-4178-a464-fca9385e80b8&transaction_id=8a8bde7a-c0d9-4178-a464-fca9385e80b8[REDIRECT_STATUS]=200[REMOTE_ADDR]=88.3.224.19[REMOTE_PORT]=61239[REQUEST_METHOD]=GET[REQUEST_URI]=/upload/watch_premium_video.php?DATAS=71&data=71&codes=1234&code=1234&trxid=8a8bde7a-c0d9-4178-a464-fca9385e80b8&transaction_id=8a8bde7a-c0d9-4178-a464-fca9385e80b8[SCRIPT_FILENAME]=/home/radicals/public_html/upload/watch_premium_video.php[SCRIPT_NAME]=/upload/watch_premium_video.php[SERVER_ADDR]=109.205.137.195[SERVER_ADMIN][email protected][SERVER_NAME]=radicalswinger.tv[SERVER_PORT]=80[SERVER_PROTOCOL]=HTTP/1.1[SERVER_SIGNATURE]=<address>Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Server at radicalswinger.tv Port 80</address>
[SERVER_SOFTWARE]=Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635[PHP_SELF]=/upload/watch_premium_video.php[REQUEST_TIME]=1307544996[argv]=Array[argc]=1<br />
O sea, que realmente se está cargando 2 veces la página. Pero sigo sin saber cuál es la causa de esto, y mientras no lo averigue la actualización se lanzará 2 veces.

Si alguien entiende este log y puede ayudarme se lo agradeceré muchísimo.
  #4 (permalink)  
Antiguo 08/06/2011, 10:13
 
Fecha de Ingreso: agosto-2009
Mensajes: 52
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Página carga 1 vez, comando de actualización se ejecuta dos veces.

Me parece que voy de guateMala a guatePeor...

una vez teniendo claro que lo que está ocurriendo, por alguna extraña razón, es que la página está ejecutando 2 peticiones por cada carga (así lo dice el log del servidor), y siguiendo las ideas de un hilo que encontré en otro foro, he intentado distinguir entre la primera petición y las siguientes, de manera que las dichosa actualización se ejecute solo cuando se trate de la primera petición.

Bien, he hecho lo siguiente:

Código PHP:
if(isset($_SESSION["pagina"])){
        
//la variable de sesión página existe
        
if($_SESSION["pagina"]==$_SERVER["REQUEST_URI"]){
            
//la variable de sesión página es igual a la página realiza la petición
            //hacer nada
        
}else{
            
//la variable de sesión página es distinta a la página realiza la petición
            
increment_premium_views($vdo['videoid']);
            
$_SESSION["pagina"] = $_SERVER["REQUEST_URI"];
        }
    } 
Es increíble. No sé que estoy pasando por alto, pero sigue actualizando 2 veces.
  #5 (permalink)  
Antiguo 08/06/2011, 10:18
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 15 años, 11 meses
Puntos: 8
Respuesta: Página carga 1 vez, comando de actualización se ejecuta dos veces.

Puede que sera una redirección... prueva buscando algun header a ver si por algun motivo la pagina se recarga a si misma
  #6 (permalink)  
Antiguo 08/06/2011, 10:24
 
Fecha de Ingreso: agosto-2009
Mensajes: 52
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Página carga 1 vez, comando de actualización se ejecuta dos veces.

Hola Harryp. Gracias por ofrecer tu ayuda.
La cabecera contiene un sistema de redirección, pero no se ejecuta siempre. Es el siguiente:

Código HTML:
<noscript>
    <meta http-equiv="Refresh" content="0;url=https://payment.allopass.com/error.apu?ids=255654&idd=1014134"/>
</noscript>
<script type="text/javascript" src="https://payment.allopass.com/api/secure.apu?ids=255654&idd=1014134"></script> 
La redirección indicada por la etiqueta meta, en este caso no se ejecuta ya que está dentro de la etiqueta <noscript>, y el navegador si soporta Javascript.

Después de esa etiqueta, hay un archivo de inclusión javascript que conecta con un servicio de otro servidor que devuelve una respuesta sobre el estado de pago efectuado por un usuario.
  #7 (permalink)  
Antiguo 09/06/2011, 10:24
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 15 años, 11 meses
Puntos: 8
Respuesta: Página carga 1 vez, comando de actualización se ejecuta dos veces.

no tiene pinta de ser por eso... la verdad esk esta jodida la cosa.. podrias intentar detectar cuando se recarga por ejemplo poniendo un alert inmediatamente antes o despues de cuando se incrementa el numerador, asi consigues que se pare el proceso y alomejor puedes indentificar por que tienes este comportamiento
  #8 (permalink)  
Antiguo 09/06/2011, 10:29
 
Fecha de Ingreso: agosto-2009
Mensajes: 52
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Página carga 1 vez, comando de actualización se ejecuta dos veces.

Hola Harryp, pues la verdad es que ayer sudé la gota gorda para arreglar este problema. La solución pasó por asumir que no podía seguir por ese camino, así que asumiendo que no podía evitar esa "recarga", trasladé la llamada a la función desde el cliente, usando ajax.
Incluí al final de la página un script que se invoca una vez la página está totalmente cargada, de manera que solo se ejecuta una vez. No me gustó demasiado por los cambios que tuve que aplicar, pero ha sido efectivo.

Etiquetas: comando, ejecucion, php+mysql, repetida, smarty
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 15:42.