Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/08/2013, 11:37
skirlappa
 
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