Foros del Web » Programando para Internet » PHP »

Correcion de valor

Estas en el tema de Correcion de valor en el foro de PHP en Foros del Web. Estimados. tengo un problema y no puedo vizualizar que esta mal, tengo una tabla en un db @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original CREATE TABLE ...
  #1 (permalink)  
Antiguo 09/05/2013, 13:26
Avatar de Killerx_8937  
Fecha de Ingreso: noviembre-2006
Mensajes: 99
Antigüedad: 18 años
Puntos: 0
Correcion de valor

Estimados.

tengo un problema y no puedo vizualizar que esta mal, tengo una tabla en un db
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `Equip_CtrlEquipoValor` (
  2.   `CtrlEquipoValor_Id` int(11) NOT NULL auto_increment,
  3.   `CtrlEquipo_Id` int(255) NOT NULL,
  4.   `CtrlEquipoValor_Punto` double NOT NULL,
  5.   `CtrlEquipoValor_A` double NOT NULL,
  6.   `CtrlEquipoValor_B` double NOT NULL,
  7.   PRIMARY KEY  (`CtrlEquipoValor_Id`),
  8.   KEY `CtrlEquipo_Id` (`CtrlEquipo_Id`)
  9.  
  10. INSERT INTO `Equip_CtrlEquipoValor` (`CtrlEquipoValor_Id`, `CtrlEquipo_Id`, `CtrlEquipoValor_Punto`, `CtrlEquipoValor_A`, `CtrlEquipoValor_B`) VALUES
  11. (1, 236, 200, 0, 0),
  12. (2, 236, 1000, -0.001, 1),
  13. (3, 236, 2000, 0, -1),
  14. (4, 236, 5000, 0, -1),
  15. (5, 236, 10000, 0, -1),
  16. (6, 236, 20000, 0, -1),
  17. (7, 236, 30000, 0, -1);

tengo 2 funciones las cuales me permiten corregir un valor a partri de los valores guardados en la base de datos.

Código PHP:
Ver original
  1. function puntoMaxCal($Equipo)
  2. {
  3.     $Sql="SELECT *,MAX(CtrlEquipoValor_Punto)AS Max FROM Equip_CtrlEquipoValor
  4.         INNER JOIN Equip_CtrlEquipo USING(`CtrlEquipo_Id`)
  5.         INNER JOIN Equip_Ctrl ON Ctrl_Codigo = CtrlEquipo_Codigo
  6.         INNER JOIN Equip_Equipos ON Equipos_Codigo = Ctrl_Codigo
  7.         WHERE Equipos_Codigo='".$Equipo."'";
  8.     $Resultado=dbquery($Sql);
  9.     $Fila=dbarray($Resultado);
  10.     return $Fila['Max'];
  11.    
  12. }

esta em trae el punto maximo de calibracion del equipo ingresado en la db pa este caso 30000

y con esta otra funcion corrgo el valor
Código PHP:
Ver original
  1. function corrMasa($Balanza,$Masa)//corrige masa de acuardo a balanza entregada
  2. {
  3.     if($Masa < puntoMaxCal($Balanza) ||  $Masa == puntoMaxCal($Balanza))
  4.     {
  5.         $Sql="SELECT * FROM `Equip_CtrlEquipoValor`";
  6.         $Resultado=dbquery($Sql);
  7.         while($Fila=dbarray($Resultado))
  8.         {
  9.             if($Masa < $Fila['CtrlEquipoValor_Punto']  || $Masa == puntoMaxCal($Balanza))
  10.             {
  11.                 $Error = ($Masa * $Fila['CtrlEquipoValor_A'] + $Fila['CtrlEquipoValor_B']);
  12.                 $MCorr = $Masa- $Error;
  13.                 break;
  14.             }
  15.         }
  16.         return $MCorr;
  17.     }
  18.     else
  19.     {
  20.         $MCorr="fuera de rango";
  21.         return $MCorr;
  22.     }
  23. }

sin embargo cuando llamo a esta funcion
Código PHP:
Ver original
  1. corrMasa('S32',30000)
y le doy el parametro 30000 como masa me utiliza los parametros `CtrlEquipoValor_A` y `CtrlEquipoValor_B` del punto de 200 no el punto de 30000 para hacer la correccion del valor solo pasa cuando le pongo 30000 con cualquier valor que este entre 20 y 29999 funciona bien , me explique bien...?

como les digo no logro ver que esta mal
  #2 (permalink)  
Antiguo 09/05/2013, 18:35
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 9 meses
Puntos: 177
Respuesta: Correcion de valor

En primer lugar creo que el codigo se podría abreviar para optimizarlo
yo haría algo asi:

Código PHP:
function corrMasa($Balanza$Masa) {//corrige masa de acuardo a balanza entregada
    
$valor puntoMaxCal($Balanza);
    if (
$Masa <= $valor) {
        
$Sql "SELECT * FROM `Equip_CtrlEquipoValor`";
        
$Resultado dbquery($Sql);
        while (
$Fila dbarray($Resultado)) {
            if (
$Masa $Fila['CtrlEquipoValor_Punto'] || $Masa == $valor) {
                
$Error = ($Masa $Fila['CtrlEquipoValor_A'] + $Fila['CtrlEquipoValor_B']);
                
$MCorr $Masa $Error;
                return 
$MCorr;
            }
        }
        
    } else {
        
$MCorr "fuera de rango";
        return 
$MCorr;
    }



Ahora no entiendo a fondo la estructura de tu db, pero por lo que pude deducir, creo que acá puede haber un error
de parentesis:
Probá así:
Código PHP:
Ver original
  1. $Error = ($Masa * $Fila['CtrlEquipoValor_A']) + $Fila['CtrlEquipoValor_B'];
  2. $MCorr = ($Masa) - ($Error);

Creo que si $Error llegase a ser un numero negativo, se produciría un error, por ejemplo quedando algo así

10--5


10 es masa y -5 es error
se juntan los signos (-)

No estoy seguro de que ese sea el error pero probalo y contanos que pasó


Saludos
__________________
la la la
  #3 (permalink)  
Antiguo 10/05/2013, 11:05
Avatar de Killerx_8937  
Fecha de Ingreso: noviembre-2006
Mensajes: 99
Antigüedad: 18 años
Puntos: 0
Respuesta: Correcion de valor

Estimado el problema no esta en la correccion.
al ejecutar la consulta el while comienaz a recorrer el array con el cual tiene el siguiente resultado.

Código MySQL:
Ver original
  1. mysql> select * from Equip_CtrlEquipoValor;
  2. +--------------------+---------------+-----------------------+-------------------+-------------------+
  3. | CtrlEquipoValor_Id | CtrlEquipo_Id | CtrlEquipoValor_Punto | CtrlEquipoValor_A | CtrlEquipoValor_B |
  4. +--------------------+---------------+-----------------------+-------------------+-------------------+
  5. |                  1 |           236 |                   200 |                 0 |                 0 |
  6. |                  2 |           236 |                  1000 |            -0.001 |                 1 |
  7. |                  3 |           236 |                  2000 |                 0 |                -1 |
  8. |                  4 |           236 |                  5000 |                 0 |                -1 |
  9. |                  5 |           236 |                 10000 |                 0 |                -1 |
  10. |                  6 |           236 |                 20000 |                 0 |                -1 |
  11. |                  7 |           236 |                 30000 |                 0 |                -1 |
  12. +--------------------+---------------+-----------------------+-------------------+-------------------+

si le ingreso una masa de 2500 la siguiente instruccion realizara la correccion utilizando el punto de 5000, verdad puesto que el punto de 2000 no es menor que la masa ingresada 2500

Código PHP:
Ver original
  1. while ($Fila = dbarray($Resultado))
  2.         {
  3.             if ($Masa < $Fila['CtrlEquipoValor_Punto'] || $Masa == $valor)
  4.             {
  5.                 $Error = ($Masa * $Fila['CtrlEquipoValor_A'] + $Fila['CtrlEquipoValor_B']);
  6.                 $MCorr = $Masa - $Error;
  7.                 return $MCorr;
  8.             }
  9.         }

el problema esta cuando pongo una masa de 30000, cuando hago esto me considera el punto de 200 para hacer la correccion siendo que deberia usar el de 30000, no se porque pasa esto, para todo el resto de las masas ingresadas desde 0 hasta 29999 funaciona bien pero para 30000 no, sera porque es el ultimo valor del arreglo?

me explique bien?
  #4 (permalink)  
Antiguo 10/05/2013, 11:21
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 9 meses
Puntos: 177
Respuesta: Correcion de valor

Probá lo siguiente, enviale los valores como texto asi:

Código PHP:
Ver original
  1. corrMasa('S32','30000')

es decir el 30000 entre comillas simples, y contame que pasó

EDITO: También probá con comillas dobles "30000"
__________________
la la la
  #5 (permalink)  
Antiguo 10/05/2013, 12:03
Avatar de Killerx_8937  
Fecha de Ingreso: noviembre-2006
Mensajes: 99
Antigüedad: 18 años
Puntos: 0
Respuesta: Correcion de valor

Nop, sigue igual....

Código PHP:
Ver original
  1. echo "".corrMasa('S32','200')."<br>";
  2.         echo "".corrMasa('S32','1000')."<br>";
  3.             echo "".corrMasa('S32','2000')."<br>";
  4.                 echo "".corrMasa('S32','3000')."<br>";
  5.                     echo "".corrMasa('S32','4000')."<br>";
  6.                         echo "".corrMasa('S32','5000')."<br>";
  7.                             echo "".corrMasa('S32','10000')."<br>";
  8.                                 echo "".corrMasa('S32','20000')."<br>";
  9.                                     echo "".corrMasa('S32','30000')."<br>";
  #6 (permalink)  
Antiguo 10/05/2013, 12:12
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 9 meses
Puntos: 177
Respuesta: Correcion de valor

fijate si en la db no te está guardando los valores en el campo CtrlEquipoValor_Punto con decimales, por ejemplo 30000.00 o algo así, en ese caso creo que ese puede ser el problema ya que cuando conpara $Masa == $valor

estaría comparando 30000 == 30000.00

y quizas no funcione por eso
__________________
la la la
  #7 (permalink)  
Antiguo 10/05/2013, 13:14
Avatar de Killerx_8937  
Fecha de Ingreso: noviembre-2006
Mensajes: 99
Antigüedad: 18 años
Puntos: 0
Respuesta: Correcion de valor

Amigos Asi quedo

Código PHP:
Ver original
  1. function corrMasa($Balanza, $Masa) {//corrige masa de acuardo a balanza entregada
  2.     $valor = puntoMaxCal($Balanza);
  3.     if ($Masa <= $valor)
  4.     {
  5.         if($Masa == $valor)
  6.         {
  7.             $Sql = "SELECT * FROM Equip_CtrlEquipoValor
  8.                     INNER JOIN Equip_CtrlEquipo USING(`CtrlEquipo_Id`)
  9.                     INNER JOIN Equip_Ctrl ON Ctrl_Codigo = CtrlEquipo_Codigo
  10.                     INNER JOIN Equip_Equipos ON Equipos_Codigo = Ctrl_Codigo
  11.                     WHERE Equipos_Codigo='".$Balanza."' AND CtrlEquipoValor_Punto='".$valor."' ";
  12.             $Resultado = dbquery($Sql);
  13.             $Fila = dbarray($Resultado);
  14.             $Error = ($Masa * $Fila['CtrlEquipoValor_A'] + $Fila['CtrlEquipoValor_B']);
  15.             $MCorr = $Masa - $Error;
  16.             return number_format($MCorr,2,',','.');
  17.         }
  18.         else
  19.         {
  20.             $Sql = "SELECT * FROM Equip_CtrlEquipoValor
  21.                     INNER JOIN Equip_CtrlEquipo USING(`CtrlEquipo_Id`)
  22.                     INNER JOIN Equip_Ctrl ON Ctrl_Codigo = CtrlEquipo_Codigo
  23.                     INNER JOIN Equip_Equipos ON Equipos_Codigo = Ctrl_Codigo
  24.                     WHERE Equipos_Codigo='".$Balanza."'";
  25.             $Resultado = dbquery($Sql);
  26.             while ($Fila = dbarray($Resultado))
  27.             {
  28.                 if ($Masa < $Fila['CtrlEquipoValor_Punto'])
  29.                 {
  30.                     $Error = ($Masa * $Fila['CtrlEquipoValor_A'] + $Fila['CtrlEquipoValor_B']);
  31.                     $MCorr = $Masa - $Error;
  32.                     return number_format($MCorr,2,',','.');
  33.                     break;
  34.                 }
  35.             }
  36.         }
  37.     } else {
  38.         $MCorr = "fuera de rango";
  39.         return $MCorr;
  40.     }
  41. }
  42. function puntoMaxCal($Equipo)
  43. {
  44.     $Sql="SELECT MAX(CtrlEquipoValor_Punto)AS Max FROM Equip_CtrlEquipoValor
  45.         INNER JOIN Equip_CtrlEquipo USING(`CtrlEquipo_Id`)
  46.         INNER JOIN Equip_Ctrl ON Ctrl_Codigo = CtrlEquipo_Codigo
  47.         INNER JOIN Equip_Equipos ON Equipos_Codigo = Ctrl_Codigo
  48.         WHERE Equipos_Codigo='".$Equipo."'";
  49.     $Resultado=dbquery($Sql);
  50.     $Fila=dbarray($Resultado);
  51.     return $Fila['Max'];   
  52. }

Etiquetas: select, sql, tabla, valor
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 21:23.