Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] UPDATE me ejecuta dos veces

Estas en el tema de UPDATE me ejecuta dos veces en el foro de PHP en Foros del Web. Hola, Estoy haciendo un código y tengo un problema que no se como solucionar por mucho que busco y es que la sentencia UPDATE me ...
  #1 (permalink)  
Antiguo 20/08/2013, 11:24
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Exclamación UPDATE me ejecuta dos veces

Hola,

Estoy haciendo un código y tengo un problema que no se como solucionar por mucho que busco y es que la sentencia UPDATE me la realiza dos veces con lo que me resta el campo dos veces, no es que se ejecute todo el código dos veces eso solo la sentencia porque pruebo con ECHO y solo muestra una vez.

Código PHP:
//Sacamos el valor para hacer este test
$sacaValorTest=mysql_query("SELECT tps FROM test WHERE id='".$_GET['id']."'");
$imprimeValorTest=mysql_fetch_array($sacaValorTest);
    
//Comprobamos si es de pago, si lo es se cobra, si no tiene saldo se prohibe hacerlo+
    //Sacamos los impuestos y lo subirmos
        
$sacaIva=mysql_query("SELECT recargo FROM control WHERE id=1");
        
$impIva=mysql_fetch_array($sacaIva);
        
$recargo="1.".$impIva[0];
        
$iva=$imprimeValorTest['tps']*$recargo;
    if(
$imprimeUser['tps']>=$iva)
    {
        
//este código sobra, debes hacer la consulta tps=tps-$iva
        
$quita=$imprimeUser['tps']-$iva;
//Este echo es por si se ejecuta dos veces solo se imprime una vez
        
echo $quita;
        
mysql_query("UPDATE user SET tps=(tps-'$iva') WHERE id='".$_SESSION['id']."'");
    } 
  #2 (permalink)  
Antiguo 20/08/2013, 11:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: UPDATE me ejecuta dos veces

¿Y si imprimes algo más que $quita para ver mejor?

Te lo comento porque tus argumentos atentan contra la lógica universal, es decir que no puede ejecutarse dicha sentencia no más por que sí, al menos no sin afectar a otras sentencias en el mismo script.

Porque hay que ser claros, si ejecutas dicho script siempre se ejecutará el UPDATE mientras exista algún resultado arrojado por la primer consulta.

Ahora, ¿también la primer consulta se ejecuta dos veces?

Necesitas depurar para que nosotros ver también.

Y como última pregunta, ¿cómo es que ejecutas dicho script?

Eso también es clave para entender que hace que se ejecute dos veces.

En resumen, necesitamos más información, con sólo leer tu script no hay nada claro, no podemos adivinar como haces el resto de cosas y puede que ahí cometas un error.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 20/08/2013, 11:37
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: UPDATE me ejecuta dos veces

Bien el script trata de una sistema para hacer test, si el test cueta crédito entoces se cobra al usuario esos créditos

Código PHP:
<?php
//Verificamos que el user esté logueado
include('conexion.php');
// Configura los datos de tu cuenta
include('db.php');
// Conectar a la base de datos
mysql_connect ($dbhost$dbusername$dbuserpass);
mysql_select_db($dbname) or die('No se puede seleccionar la base de datos');
include(
'inicabeza.php');
include (
'menu.php');
//Comprobamos que tenga dias oro
$sacaUser=mysql_query("SELECT id, oro, test, tps FROM user WHERE id='".$_SESSION['id']."'");
$imprimeUser=mysql_fetch_array($sacaUser);
//Sacamos la variable de los test posibles a realizae
$sacaCuantoTest=mysql_query("SELECT test FROM control WHERE id=1");
$imprimeCuantoTest=mysql_fetch_array($sacaCuantoTest);
//Sacamos el valor para hacer este test
$sacaValorTest=mysql_query("SELECT tps FROM test WHERE id='".$_GET['id']."'");
$imprimeValorTest=mysql_fetch_array($sacaValorTest);
    
//Comprobamos si es de pago, si lo es se cobra, si no tiene saldo se prohibe hacerlo+
    //Sacamos los impuestos y lo subirmos
        
$sacaIva=mysql_query("SELECT recargo FROM control WHERE id=1");
        
$impIva=mysql_fetch_array($sacaIva);
        
$recargo="1.".$impIva[0];
        
$iva=$imprimeValorTest['tps']*$recargo;
    if(
$imprimeUser['tps']>=$iva)
    {
        
//este código sobra, debes hacer la consulta tps=tps-$iva
        
$quita=$imprimeUser['tps']-$iva;
        echo 
$quita;
        
mysql_query("UPDATE user SET tps=(tps-'$iva') WHERE id='".$_SESSION['id']."'");
    }
    else
    {
      
?>
      
<div id="main">    

                <div class="box">
            
                <center><a name="TemplateInfo"></a>    
                <p>
       <center><h1>No tienes suficientes TPs</h1><br>
    <img src="images/error.png"/>
    <h2><a href="compratps.php">¿Compramos algunos?</a></h2>
    </center>
</p></div>
    <!-- content-wrap ends here -->        
    </div></div>
    <?php
    
include('inifooter.php');
exit;  
    }
//Si no tiene días oro salta publicidad
if($imprimeUser['oro']<=0)
{
    
//Si ha realizado tres test y no es oro, fin de la aplicacion
        
if($imprimeUser['test']>=$imprimeCuantoTest['test'])
    {
?>
<div id="main">    

                <div class="boxtest">
            
                <center><a name="TemplateInfo"></a>    
                <p>
       <center><h1>Has llegado al límite por hoy</h1><br>
    <img src="images/error.png"/>
    <h2><a href="infocuentas.php">¿Nos hacemos PREMIUM?</a></h2>
    </center>
</p></div>
    <!-- content-wrap ends here -->        
    </div></div>
    <?php
    
include('inifooter.php');
exit;
    }
    
//Sacamos la ip
    
if($_SERVER['HTTP_X_FORWARDED_FOR'] != '' )
   {
      
$client_ip 
         ( !empty(
$_SERVER['REMOTE_ADDR']) ) ? 
            
$_SERVER['REMOTE_ADDR'
            : 
            ( ( !empty(
$_ENV['REMOTE_ADDR']) ) ? 
               
$_ENV['REMOTE_ADDR'
               : 
               
"unknown" );
 
      
// los proxys van añadiendo al final de esta cabecera
      // las direcciones ip que van "ocultando". Para localizar la ip real
      // del usuario se comienza a mirar por el principio hasta encontrar 
      // una dirección ip que no sea del rango privado. En caso de no 
      // encontrarse ninguna se toma como valor el REMOTE_ADDR
 
      
$entries preg_split('/[, ]/'$_SERVER['HTTP_X_FORWARDED_FOR']);
 
      
reset($entries);
      while (list(, 
$entry) = each($entries)) 
      {
         
$entry trim($entry);
         if ( 
preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/"$entry$ip_list) )
         {
            
// http://www.faqs.org/rfcs/rfc1918.html
            
$private_ip = array(
                  
'/^0\./'
                  
'/^127\.0\.0\.1/'
                  
'/^192\.168\..*/'
                  
'/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/'
                  
'/^10\..*/');
 
            
$found_ip preg_replace($private_ip$client_ip$ip_list[1]);
 
            if (
$client_ip != $found_ip)
            {
               
$client_ip $found_ip;
               break;
            }
         }
      }
   }
   else
   {
      
$client_ip 
         ( !empty(
$_SERVER['REMOTE_ADDR']) ) ? 
            
$_SERVER['REMOTE_ADDR'
            : 
            ( ( !empty(
$_ENV['REMOTE_ADDR']) ) ? 
               
$_ENV['REMOTE_ADDR'
               : 
               
"unknown" );
   }
    
//Si la ip ha hecho 3 test se bloquea la aplicacióm
    
$veoIp=mysql_query("SELECT * FROM ip WHERE ip='$client_ip'");
    
$estaIp=mysql_fetch_array($veoIp);
    
//Sacamos la ip
    
if($_SERVER['HTTP_X_FORWARDED_FOR'] != '' )
   {
      
$client_ip 
         ( !empty(
$_SERVER['REMOTE_ADDR']) ) ? 
            
$_SERVER['REMOTE_ADDR'
            : 
            ( ( !empty(
$_ENV['REMOTE_ADDR']) ) ? 
               
$_ENV['REMOTE_ADDR'
               : 
               
"unknown" );
 
      
// los proxys van añadiendo al final de esta cabecera
      // las direcciones ip que van "ocultando". Para localizar la ip real
      // del usuario se comienza a mirar por el principio hasta encontrar 
      // una dirección ip que no sea del rango privado. En caso de no 
      // encontrarse ninguna se toma como valor el REMOTE_ADDR
 
      
$entries preg_split('/[, ]/'$_SERVER['HTTP_X_FORWARDED_FOR']);
 
      
reset($entries);
      while (list(, 
$entry) = each($entries)) 
      {
         
$entry trim($entry);
         if ( 
preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/"$entry$ip_list) )
         {
            
// http://www.faqs.org/rfcs/rfc1918.html
            
$private_ip = array(
                  
'/^0\./'
                  
'/^127\.0\.0\.1/'
                  
'/^192\.168\..*/'
                  
'/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/'
                  
'/^10\..*/');
 
            
$found_ip preg_replace($private_ip$client_ip$ip_list[1]);
 
            if (
$client_ip != $found_ip)
            {
               
$client_ip $found_ip;
               break;
            }
         }
      }
   }
   else
   {
      
$client_ip 
         ( !empty(
$_SERVER['REMOTE_ADDR']) ) ? 
            
$_SERVER['REMOTE_ADDR'
            : 
            ( ( !empty(
$_ENV['REMOTE_ADDR']) ) ? 
               
$_ENV['REMOTE_ADDR'
               : 
               
"unknown" );
   }
    
//Si la ip ha hecho 3 test se bloquea la aplicacióm
    
$veoIp=mysql_query("SELECT * FROM ip WHERE ip='$client_ip'");
    
$estaIp=mysql_fetch_array($veoIp);
    
//Si hay mas de 3 bloqueamos!
    
if($estaIp['veces']>=3)
    {
        
?>
Hay más código pero no deja pegarlo en este post, esta parte es la que hace todo el control, creo que está claro si no entendéis algo decírmelo.

El problema viene que a la hora de hacer ese UPDATE lo hace dos veces, quiere decir que si el test cuesta hacerlo 12 creditos resta de la base de datos del usuario 24
  #4 (permalink)  
Antiguo 20/08/2013, 11:39
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: UPDATE me ejecuta dos veces

Por cierto lo del $quita es porque hice la opción en vez de

Código PHP:
mysql_query("UPDATE user SET tps=(tps-'$iva') WHERE id='".$_SESSION['id']."'"); 
Fuera

Código PHP:
mysql_query("UPDATE user SET tps='$quita' WHERE id='".$_SESSION['id']."'"); 
Pero sigue ejecutandose dos veces.
  #5 (permalink)  
Antiguo 20/08/2013, 11:56
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: UPDATE me ejecuta dos veces

La estructura de la tabla es esta:

CREATE TABLE IF NOT EXISTS `user` (
`id` int(5) NOT NULL auto_increment,
`nick` varchar(20) NOT NULL default '',
`email` varchar(65) NOT NULL default '',
`linea` char(2) NOT NULL default 'si',
`publi` varchar(2) NOT NULL default 'no',
`nivel` int(3) NOT NULL default '1',
`id_extreme` varchar(180) NOT NULL default 'NULL',
`tps` int(11) NOT NULL,
`oro` int(4) NOT NULL default '0',
`test` int(1) NOT NULL default '0',
`error` int(1) NOT NULL default '0',
`mp` int(3) NOT NULL,
`edit` char(2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=17596 ;

Se han obviado algunos campos por motivos de seguirdad como el de contraseña.
  #6 (permalink)  
Antiguo 20/08/2013, 12:27
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: UPDATE me ejecuta dos veces

Sigues sin mostrar información de utilidad, el script es el mismo y no sirve de nada saber la estructura de la BD.

Te repito la pregunta: ¿como es que estás ejecutando dicho script?

Es decir, ¿está indicado en el action de algún formulario?

¿Estás incluyendo dicho script a través de otro?

Además bien podrías colocar esto:
Código PHP:
Ver original
  1. // MAL
  2. echo $quita;
  3.  
  4. // BIEN
  5. echo 'Ejecutando UPDATE, OK?';

Ahora, ¿de verdad el mensaje sale sólo una vez pero el UPDATE se hace dos veces?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 20/08/2013, 14:47
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: UPDATE me ejecuta dos veces

como puedes ver en el codigo la consulta se ejecuta de forma autonoma osea que da igual de donde venga, todo lo que se ejecuta en esa pagina viene de ese codigo. se accede a la pagina desde otra por el meto get que te pleva a esta para hacer el test.
Y si solo imprime una vez y la comsulta la hace dos veces
  #8 (permalink)  
Antiguo 20/08/2013, 14:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: UPDATE me ejecuta dos veces

No puede ser que en el mismo contexto imprima una vez y ejecute dos veces la siguiente linea, ¿te has dado cuenta que eso no tiene sentido?

Ahora, ¿y si quitas la consulta de ahí para verificar que sólo se ejecuta ahí?

¿Tienes alguna bandera para controlar la lógica de los UPDATE?

Yo veo que no.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 20/08/2013, 15:12
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: UPDATE me ejecuta dos veces

ya se que no tiene logica por eso no se lo que pasa, y lo he posteado, solo se ejecita esa linea ni la de alante ni la de atras, el update modifica dos veces el valor que se le indica.

no se lo que es una bandera. Que es?
  #10 (permalink)  
Antiguo 21/08/2013, 08:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: UPDATE me ejecuta dos veces

Cita:
Iniciado por skirlappa Ver Mensaje
¿No hay ninguna solución posible?
Sí, que escribas de nuevo tu código y depures paso a paso hasta dar con el clavo.

Sencillamente es eso, no puedes ser el único en el mundo al cual la lógica universal no le funciona, ¿increíble verdad?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 21/08/2013, 08:25
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: UPDATE me ejecuta dos veces

Cita:
Iniciado por pateketrueke Ver Mensaje
Sí, que escribas de nuevo tu código y depures paso a paso hasta dar con el clavo.

Sencillamente es eso, no puedes ser el único en el mundo al cual la lógica universal no le funciona, ¿increíble verdad?
Buscando por google hay a más personas que la lógica universal no le funciona. Pero no he encontrado solución-
  #12 (permalink)  
Antiguo 22/08/2013, 12:38
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: UPDATE me ejecuta dos veces

Hola

He dado con la linea que da el fallo

Código PHP:
Ver original
  1. <?php
  2. //Verificamos que el user esté logueado
  3. include('conexion.php');
  4. // Configura los datos de tu cuenta
  5. include('db.php');
  6. // Conectar a la base de datos
  7. mysql_connect ($dbhost, $dbusername, $dbuserpass);
  8. mysql_select_db($dbname) or die('No se puede seleccionar la base de datos');
  9. ?>
  10.  
  11.     <!-- header starts here -->
  12.     <div id="header"><div id="header-content"> 
  13.         <h1 id="logo-text"><a href="<?echo BASE_PATH;?>" title=""><img src="<?echo BASE_PATH;?>images/logodentro.png"/></a></h1>   
  14.         <h2 id="slogan">Formando a compañeros...</h2>      
  15.         <div id="header-links">
  16.             <p>
  17.             <?php
  18.             $sacaTps1=mysql_query("SELECT * FROM user WHERE id='".$_SESSION['id']."'");
  19.             $tps1=mysql_fetch_array($sacaTps1);
  20.             ?>
  21.                 <?php echo $_SESSION["s_username"]; ?> |
  22.                 <?php
  23.                 if( $_SESSION["admin"]=="SI")
  24.                 {
  25.                     ?><a href=<?echo BASE_PATH;?>admin/>Admin </a> |<?
  26.                 }
  27.                 if( @$_SESSION["root"]=="SI")
  28.                 {
  29.                     ?><a href=<?echo BASE_PATH;?>root/>Moderador </a> |<?
  30.                 }
  31.                 if( $tps1["oro"]<=0)
  32.                 {
  33.                     ?><a href=<?echo BASE_PATH;?>infocuentas.php>Usuario</a><?
  34.                 }
  35.                 else
  36.                 {
  37.                      ?><a href=<?echo BASE_PATH;?>infocuentas.php>Premium(<?echo $tps1["oro"];?>)</a><?
  38.                 }
  39.                 ?> |
  40.                
  41.                 <?php
  42.                 //Sacos cuantos mps nuevo tiene el usuario
  43.                 $cuentaMP=mysql_query("SELECT control FROM mps WHERE iddestinatario='".$_SESSION['id']."' AND control=0");
  44.                 $impremetodoslosMP=mysql_num_rows($cuentaMP);?>
  45.                 <a href="<?echo BASE_PATH;?>listmp.php">MP(<?php echo $impremetodoslosMP;?>)</a>|
  46.                 <a href="<?echo BASE_PATH;?>compratps.php"><?php echo $tps1["tps"];?> TPs</a>|
  47.                 <a href="<?echo BASE_PATH;?>session/cerrar.php">Cerrar sesi&oacute;n</a>           
  48.             </p>   
  49.                     <center>
  50. <iframe src="<?echo BASE_PATH;?>publi/banner.php" width="468"  height="60"  scrolling="no" frameborder="0" marginheight="0"  marginwidth="0" vspace="0" hspace="0"><br><font size=-1></iframe>
  51. </center>  
  52. <?php
  53.                 //Si tiene mas de un mp y no ha sido avisado ya imprimimos en pantalla el aviso
  54.                 $buscaAviso=mysql_query("SELECT iduser FROM avisosmp WHERE iduser='".$_SESSION['id']."'");
  55.                 $impAviso = mysql_num_rows($buscaAviso);
  56.                 if($impremetodoslosMP>0 && $impAviso==0)
  57.                 {
  58.                     //Guardamos el aviso
  59.                     if($impAviso==0)
  60.                     {
  61.                     mysql_query("INSERT INTO avisosmp (iduser) VALUES ('".$_SESSION['id']."')");
  62.                     }
  63.                  ?>
  64.                  <div id='ventana-flotante'>
  65.    <a class='cerrar' href='javascript:void(0);' onclick='document.getElementById(&apos;ventana-flotante&apos;).className = &apos;oculto&apos;'>x</a>
  66.    <div id='contenedor'>
  67.        <div class='contenido'>
  68. Tienes un nuevo MP
  69.        </div>
  70.    </div>
  71. </div>
  72.                  <?php
  73.                  include('css/1.css');
  74.                 }
  75.                 ?>
  76.       </div>   
  77.    
  78.     </div></div>
  79.    
  80.     <!-- navigation starts here -->
  81.     <div id="nav-wrap"><div id="nav">
  82.        
  83.         <ul><li><a href="<?php echo BASE_PATH;?>index.php">Noticias</a></li>
  84.             <li><a href="<?php echo BASE_PATH;?>repaso.php">Repaso</a></li>
  85.             <li><a href="<?php echo BASE_PATH;?>cpanel.php">Panel Control</a></li>
  86.             <li><a href="<?php echo BASE_PATH;?>estadisticas.php">Mis resultados</a></li>
  87.             <?php
  88.             //Comprobamos si el usuario es publicista
  89.             if($tps1["publi"]=="si")
  90.             {
  91.                 ?>
  92.                 <li><a href="<?php echo BASE_PATH;?>publi/index.php">Publicidad</a></li>
  93.                 <?php
  94.             }
  95.             ?>         
  96.             <li><a href="<?php echo BASE_PATH;?>compratps.php">¡COMPRAR TPS!</a></li>
  97.         </ul></div></div>
  98. <?php
  99. include ('menu.php');
  100. //Sacamos la variable de los test posibles a realizae
  101. $sacaCuantoTest=mysql_query("SELECT test FROM control WHERE id=1");
  102. $imprimeCuantoTest=mysql_fetch_array($sacaCuantoTest);
  103. //Sacamos el valor para hacer este test
  104. $sacaValorTest=mysql_query("SELECT tps, user FROM test WHERE id='".$_GET['id']."'");
  105. $imprimeValorTest=mysql_fetch_array($sacaValorTest);
  106.     //Comprobamos si es de pago, si lo es se cobra, si no tiene saldo se prohibe hacerlo+
  107.     //Sacamos los impuestos y lo subirmos
  108.         $sacaIva=mysql_query("SELECT recargo FROM control WHERE id=1");
  109.         $impIva=mysql_fetch_array($sacaIva);
  110.         $recargo="1.".$impIva[0];
  111.         $iva=ceil($imprimeValorTest['tps']*$recargo);
  112.     if($tps1['tps']>=$iva)
  113.     {
  114.         //Debemos dividir entre dos el iva porque no se sabe ejecuta dos veces
  115.         $iva=$iva/2;
  116.         $quita=$tps1['tps']-$iva;
  117.         mysql_query("UPDATE user SET tps='$quita' WHERE id='".$_SESSION['id']."'");
  118.         mysql_query("INSERT user (nick) VALUES ('Hola')")or die(mysql_error());
  119.         //Subimos el dinero a la cuenta del editor
  120.         $suma=$imprimeValorTest['tps']/2;
  121.         mysql_query("UPDATE user SET tps=tps+'$suma' WHERE id='".$imprimeValorTest['user']."' ");
  122.     }
  123.     else

Si editamos la linea

Código PHP:
            $sacaTps1=mysql_query("SELECT * FROM user WHERE id='".$_SESSION['id']."'");
            
//$tps1=mysql_fetch_array($sacaTps1); 
La consulta se hace correctamente, pero tambien tengo que ejecutar esa consulta para que todo funcione correctamente, alguna idea de donde está el fallo?
  #13 (permalink)  
Antiguo 22/08/2013, 13:05
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: UPDATE me ejecuta dos veces

El fallo es que no tienes control sobre las acciones de tu script, es decir, el bloque de código que hace el UPDATE siempre se va a ejecutar mientras las condiciones del bloque sean ciertas.

En el código que provoca el "fallo" siempre extraes algo de la base de datos usando la sesión activa, y ese algo siempre lo asignas a la variable $tpsl y como dicha variable se usa antes del UPDATE entonces hay una gran posibilidad de que dicho bloque se ejecute sin que lo esperes mientras se cumpla la condición.

Código PHP:
Ver original
  1. if($tps1['tps']>=$iva)

Tu problema actual es de lógica ciertamente, no de programación.

¿Se entiende lo que te digo?

A eso me refería con "bandera" inicialmente, una serie con condiciones que limiten efectivamente el bloque que hace el UPDATE.

Las condiciones que tienes actualmente son débiles y nada objetivas, ya que tu script siempre se ejecuta independientemente de lo que exista en la URLs, sesión, etc.

Piensa en algo así:
Código PHP:
Ver original
  1. if (/* ¿qué es requerido para que el UPDATE se realice? */) {
  2.   // UPDATE
  3. }

Eso.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 22/08/2013, 13:23
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: UPDATE me ejecuta dos veces

El fallo viene en esa línea quiero decir que itroduje otra consulta un INSERT para ver si lo hacia dos veces, y lo hace dos veces independientemente de donde esté.

Código PHP:
Ver original
  1. if($tps1['tps']>=$iva)
  2.     {
  3.         //Debemos dividir entre dos el iva porque no se sabe ejecuta dos veces
  4.         $iva=$iva/2;
  5.         $quita=$tps1['tps']-$iva;
  6.         mysql_query("UPDATE user SET tps='$quita' WHERE id='".$_SESSION['id']."'");
  7.         mysql_query("INSERT user (nick) VALUES ('Hola')")or die(mysql_error());
  8.         //Subimos el dinero a la cuenta del editor
  9.         $suma=$imprimeValorTest['tps']/2;
  10.         mysql_query("UPDATE user SET tps=tps+'$suma' WHERE id='".$imprimeValorTest['user']."' ");
  11.     }

Es de lógica el fallo pero mi mente no llega a comprender como editando la consulta

Código PHP:
Ver original
  1. $tps1=mysql_fetch_array($sacaTps1);

ya no se ejecuta dos veces las sentencias, porque solo se ejecutan las sentencias no el código en si.
  #15 (permalink)  
Antiguo 22/08/2013, 13:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: UPDATE me ejecuta dos veces

Cita:
Iniciado por skirlappa Ver Mensaje
[...] porque solo se ejecutan las sentencias no el código en si.
Eso jamás va a ser cierto, de verdad afirmarlo es atentar contra las leyes universales de la lógica, no puede ser posible que sólo se ejecute dos veces la consulta y no el código adyacente dentro del mismo bloque.

Eso es imposible, tu problema es de lógica, si no escribes de manera ordenada y tampoco depuras lo que haces entonces vas a seguir creyendo lo que no es.

Pon manos a la obra para refactorizar tu código, es la única solución.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #16 (permalink)  
Antiguo 22/08/2013, 13:49
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: UPDATE me ejecuta dos veces

No atento contra la lógica, pero como es posible que haciendo echos de tal forma

Código PHP:
Ver original
  1. if($tps1['tps']>=$iva)
  2.     {
  3.         //Debemos dividir entre dos el iva porque no se sabe ejecuta dos veces
  4.         $iva=$iva/2;
  5.         $quita=$tps1['tps']-$iva;
  6.         mysql_query("UPDATE user SET tps='$quita' WHERE id='".$_SESSION['id']."'");
  7.         mysql_query("INSERT user (nick) VALUES ('Hola')")or die(mysql_error());
  8. echo "Cuantas veces me muestro";
  9.         //Subimos el dinero a la cuenta del editor
  10.         $suma=$imprimeValorTest['tps']/2;
  11.         mysql_query("UPDATE user SET tps=tps+'$suma' WHERE id='".$imprimeValorTest['user']."' ");
  12. echo "Cuantas veces me muestro 1";
  13.     }

Los echo se impriman una sola vez en pantalla pero las sentencias se hagan doblemente en la base de datos?
  #17 (permalink)  
Antiguo 22/08/2013, 13:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: UPDATE me ejecuta dos veces

En ese código que muestras tienes dos UPDATE, ¿o estoy viendo doble?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #18 (permalink)  
Antiguo 22/08/2013, 14:05
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: UPDATE me ejecuta dos veces

Si hay dos UPDATE con la distinta condición, una resta al usuario que esta haciendo el test y otro se suma al usuario que ha creado ese test.

El problema no viene solo del UPDATE como creía en un primer momento el problema es que se ejectua dos veces todo las consultas mysql, en INSERT de prueba lo ejecuta dos veces y como ya dije arriba, he probado con los echos y solo se imprimen una vez (que es lo que me tiene descolocado) si edito esta consulta

Código PHP:
Ver original
  1. $sacaTps1=mysql_query("SELECT * FROM user WHERE id='".$_SESSION['id']."'");
  2.             //$tps1=mysql_fetch_array($sacaTps1);
Entonces solo ejecuta una vez las sentencias, pero esa consulta debe de ser ejecutada para el funcionamiento del resto del código...
  #19 (permalink)  
Antiguo 22/08/2013, 14:07
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: UPDATE me ejecuta dos veces

Lo dicho: debes reestructurar la lógica de tu código, no hay nada que podamos hacer por ti desde acá.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #20 (permalink)  
Antiguo 27/08/2013, 12:40
 
Fecha de Ingreso: junio-2005
Mensajes: 107
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: UPDATE me ejecuta dos veces

Se dio con la solución gracias a Daniel Asensio, la lógica era correcta y en este caso si iba en contra de la lógica universal como alguno decía que era imposible, en ciencias nada es absoluto.

El problema es un bug de Firefox y Chrome en una parte del código <style> el cual hacía dos llamadas a la base de datos.

Etiquetas: ejecuta, mysql, select, sql, update, veces
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 00:40.