Foros del Web » Programando para Internet » PHP »

Decontando de tabla mysql condicionalmente

Estas en el tema de Decontando de tabla mysql condicionalmente en el foro de PHP en Foros del Web. Hola de nuevo, tego este problemilla: Tengo una aplicacion web, aqui se descuenta una cantidad indicada de cierta tabla, funciona todo ok, pero como le ...
  #1 (permalink)  
Antiguo 22/03/2011, 09:24
Avatar de omar_gutierrez  
Fecha de Ingreso: febrero-2011
Mensajes: 144
Antigüedad: 13 años, 9 meses
Puntos: 2
Pregunta Decontando de tabla mysql condicionalmente

Hola de nuevo, tego este problemilla:

Tengo una aplicacion web, aqui se descuenta una cantidad indicada de cierta tabla, funciona todo ok, pero como le hago para:

1.- En cuanto la cantidad llege a 0, muestre un mensaje de permiso agotado, o algo asi por el estilo. Ejemplo: en el permiso "qwerty123" hay 60 kilos, el usuario descuenta los 60 kilos, da el submit, y muestra un mensaje diciendo que el permiso se ha agotado, pero haiendo dicho descuento.

2.- Cuando se quiera descargar de este permiso que ya se agoto (es = a 0), muestre un mensaje de que no se puede descargar. Ejemplo: el usuario intenta descargar 10 kilos del permiso "qwerty123" pero este ya se habia agotado, entonces que muestre un mensaje de que no es posible descontar dicha cantidad, y en efecto, que no descarge.

3.- Este permiso tambien se mide por fechas, es decir, tiene un limite tanto de de cantidad, y fechas. Entonces, como seria para que revise la fecha, supongamos 10/10/2011 (esta es la fecha limite), se descarga el 11/10/2011 (el permiso aun cuenta con cantidad suficiente para poder descargar), y mande un mensaje de que no se puede descargar por que ya expiro (aqui se me ourre que el usuario introdusca la fecha de captura, pero seria el mismo problema con las condiciones). Con las fechas creo tener un problema mas feo, porque no estan como "DATE", estan como VARCHAR a 10 caracteres (dd/mm/aaaa), aqui tengo que cambiar a DATE para lograr esto?

Pienso que aqui haria una serie de IF's anidados, validando primero la fecha, despues las cantidades; pero, como lo hago para que valide segun las condiciones y descuente, o en aso contrario, muestre los mensajes.

Espero haberme explicado bien, mientras segire busando (la verdad no he encontrado nada), y gracias de antemano.
  #2 (permalink)  
Antiguo 22/03/2011, 10:31
Avatar de omar_gutierrez  
Fecha de Ingreso: febrero-2011
Mensajes: 144
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Decontando de tabla mysql condicionalmente

Agrego el codigo php:

Cita:
$insertar = mysql_query("INSERT INTO partidas (NUM_PEDIMENTO, CVE_PROVEEDOR, NUM_FACTURA, SEC, FRACCION, SUBD, VINC, MET_VAL, UMC, CANTIDAD_UMC, UMT, CANTIDAD_UMT, PVC, POD, CON, TASA, TT, FP, IMPORTE, DESCRIPCION, VAL_ADUUSD, IMP_PRECIO_PAG, PRECIO_UNIT, VAL_AGRE, MARCA, MODELO, CODIGO_PRODUCTO, O_N_P, CVE_REGULACION, NUM_PERMISO, FIRMA_DESCARGO, VAL_COM_DLS, CANTIDAD_UMTC)
VALUES ('{$num_ped}', '{$cve_prov}', '{$numfact}', '{$sec}', '{$fraccion}', '{$subd}', '{$vinc}', '{$met_val}', '{$umc}', '{$cantidad_umc}', '{$umt}', '{$cantidad_umt}', '{$pvc}', '{$pod}', '{$con}', '{$tasa}', '{$TT}', '{$TT}', '{$importe}', '{$descripccion}', '{$val_aduusd}', '{$imp_precio_pag}', '{$precio_unit}', '{$val_agreg}', '{$marca}', '{$modelo}', '{$codigo_producto}', '{$observaciones}', '{$clave_regulacion}', '{$num_permiso}', '{$firma_descargo}', '{$va_com_dls}', '{$cantidad_umtc}')", $conexion);
if (!$insertar) {
die("Fallo en la insercion de registro en la Base de Datos: " . mysql_error());
}

// Select, segun lo que elija, se guarda en tablas distintas.

switch ($clave_regulacion) {
//REGLA OCTAVA
case "CA":
$insert = mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!$insert) {
die("NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " . mysql_error());
}
//echo "";
break;
case "CM":
$insert = mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!$insert) {
die("NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " . mysql_error());
}
//echo "";
break;
case "CP":
$insert = mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!$insert) {
die("NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " . mysql_error());
}
//echo "";
break;
case "C1":
$insert = mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!$insert) {
die("NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " . mysql_error());
}
//echo "";
break;
case "C2":
$insert = mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!$insert) {
die("NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " . mysql_error());
}
//echo "";
break;
case "C6":
$insert = mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!$insert) {
die("NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " . mysql_error());
}
//echo "";
break;
case "M6":
$insert = mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!$insert) {
die("NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " . mysql_error());
}
//echo "";
break;
case "AV":
$insert = mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!$insert) {
die("NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " . mysql_error());
}
//echo "";
break;
case "IM":
$insert = mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!$insert) {
die("NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " . mysql_error());
}
//echo "";
break;
case "NM":
$insert = mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!$insert) {
die("NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " . mysql_error());
}
//echo "";
break;



//PERMISO DE TOXICOS
case "PF":
$insert = mysql_query("UPDATE toxicos_sustancias_peligrosas SET CANTIDAD = CANTIDAD - '$cantidad_umtc' WHERE NUM_AUTORIZACION = '$num_permiso'");
if (!$insert) {//falta condicion para fechas y cantidad
die("NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE SUSTANCIAS PELIGROSAS: " . mysql_error());
}
//echo "";
break;
case "":
echo "ESTA PARTIDA NO TIENE PERMISOS ESPECIALES";
break;

}
  #3 (permalink)  
Antiguo 23/03/2011, 11:39
Avatar de omar_gutierrez  
Fecha de Ingreso: febrero-2011
Mensajes: 144
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Decontando de tabla mysql condicionalmente

Hola de nuevo, se me ocurrio hacerlo de esta manera, pero no me esta funcionando, no creo que sea algo imposible de hacer.

Código PHP:
        //PERMISO DE TOXICOS
    
case "PF":
    
    
$consulta mysql_query("SELECT CANTIDAD FROM toxicos_sustancias_peligrosas where NUM_AUTORIZACION = '$num_permiso'");
    
$row mysql_fetch_array($consulta);
    
    if (
$row['CANTIDAD'] > '0') {
        
$insert mysql_query("UPDATE toxicos_sustancias_peligrosas SET CANTIDAD = CANTIDAD - '$cantidad_umtc' WHERE NUM_AUTORIZACION = '$num_permiso'");
if (!
$insert) {
die(
"NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE SUSTANCIAS PELIGROSAS: " mysql_error());
}
        else
        echo
"ya se termino el permiso";

    }

        break; 
Primero hago una consulta dependiendo del numero de permiso, lo acomodo en un array, y hago las condiciones con el campo necesario. No se si el la forma adecuada de hacerlo. Con este codigo sige descontando hasta numeros negativos.
  #4 (permalink)  
Antiguo 23/03/2011, 12:59
Avatar de omar_gutierrez  
Fecha de Ingreso: febrero-2011
Mensajes: 144
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Decontando de tabla mysql condicionalmente

Ok primero que nada:



Estaba haciendo las modificaciones en el respaldo, y por lo tanto no veia reflejados los cambios, por el momento este es el PHP completo:

Código PHP:
<?php
//1. Crear conexión a la Base de Datos
$conexion mysql_connect("localhost","root","");
if (!
$conexion) {
die(
"Fallo la conexión a la Base de Datos: " mysql_error());
}
//2. Seleccionar la Base de Datos a utilizar
$seleccionar_bd mysql_select_db("knw_2"$conexion);
if (!
$seleccionar_bd) {
die(
"Fallo la selección de la Base de Datos: " mysql_error());
}
//3. Tomar los campos provenientes del Formulario
$num_ped $_POST['num_ped'];
$cve_prov $_POST['cve_prov'];
$numfact $_POST['numfact'];
$sec $_POST['sec'];
$fraccion $_POST['fraccion'];
$subd $_POST['subd'];
$vinc $_POST['vinc'];
$met_val $_POST['met_val'];
$umc $_POST['umc'];
$cantidad_umc $_POST['cantidad_umc'];
$umt $_POST['umt'];
$cantidad_umt $_POST['cantidad_umt'];
$pvc $_POST['pvc'];
$pod $_POST['pod'];
$con $_POST['con'];
$tasa $_POST['tasa'];
$TT $_POST['TT'];
$fp $_POST['fp'];
$importe $_POST['importe'];
$descripccion $_POST['descripccion'];
$val_aduusd $_POST['val_aduusd'];
$imp_precio_pag $_POST['imp_precio_pag'];
$precio_unit $_POST['precio_unit'];
$val_agreg $_POST['val_agreg'];
$marca $_POST['marca'];
$modelo $_POST['modelo'];
$codigo_producto $_POST['codigo_producto'];
$observaciones $_POST['observaciones'];
//campos de los permisos especiales a validar
$clave_regulacion $_POST['clave_regulacion'];
$num_permiso $_POST['num_permiso'];
$firma_descargo $_POST['firma_descargo'];
$va_com_dls $_POST['va_com_dls'];
$cantidad_umtc $_POST['cantidad_umtc'];
$fecha_actual $_POST['fecha_actual'];

//4. Insertar campos en la Base de Datos (No inserto el id_empleado ya que se genera automaticamente)


$insertar mysql_query("INSERT INTO partidas (NUM_PEDIMENTO, CVE_PROVEEDOR, NUM_FACTURA, SEC, FRACCION, SUBD, VINC, MET_VAL, UMC, CANTIDAD_UMC, UMT, CANTIDAD_UMT, PVC, POD, CON, TASA, TT, FP, IMPORTE, DESCRIPCION, VAL_ADUUSD, IMP_PRECIO_PAG, PRECIO_UNIT, VAL_AGRE, MARCA, MODELO, CODIGO_PRODUCTO, O_N_P, CVE_REGULACION, NUM_PERMISO, FIRMA_DESCARGO, VAL_COM_DLS, CANTIDAD_UMTC)
VALUES ('{$num_ped}', '{$cve_prov}', '{$numfact}', '{$sec}', '{$fraccion}', '{$subd}', '{$vinc}', '{$met_val}', '{$umc}', '{$cantidad_umc}', '{$umt}', '{$cantidad_umt}', '{$pvc}', '{$pod}', '{$con}', '{$tasa}', '{$TT}', '{$TT}', '{$importe}', '{$descripccion}', '{$val_aduusd}', '{$imp_precio_pag}', '{$precio_unit}', '{$val_agreg}', '{$marca}', '{$modelo}', '{$codigo_producto}', '{$observaciones}', '{$clave_regulacion}', '{$num_permiso}', '{$firma_descargo}', '{$va_com_dls}', '{$cantidad_umtc}')"
$conexion);
if (!
$insertar) {
die(
"Fallo en la insercion de registro en la Base de Datos: " mysql_error());
}

        
$consulta mysql_query("SELECT * FROM toxicos_sustancias_peligrosas where NUM_AUTORIZACION = '$num_permiso'");
        
$row mysql_fetch_array($consulta);
        
switch (
$clave_regulacion) {

    
//REGLA OCTAVA
    
case "CA":
       
$insert mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!
$insert) {
die(
"NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " mysql_error());
}
        
//echo "";
        
break;
        case 
"CM":
       
$insert mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!
$insert) {
die(
"NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " mysql_error());
}
        
//echo "";
        
break;
        case 
"CP":
       
$insert mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!
$insert) {
die(
"NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " mysql_error());
}
        
//echo "";
        
break;
        case 
"C1":
       
$insert mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!
$insert) {
die(
"NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " mysql_error());
}
        
//echo "";
        
break;
        case 
"C2":
       
$insert mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!
$insert) {
die(
"NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " mysql_error());
}
        
//echo "";
        
break;
        case 
"C6":
       
$insert mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!
$insert) {
die(
"NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " mysql_error());
}
        
//echo "";
        
break;
        case 
"M6":
       
$insert mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!
$insert) {
die(
"NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " mysql_error());
}
        
//echo "";
        
break;
        case 
"AV":
       
$insert mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!
$insert) {
die(
"NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " mysql_error());
}
        
//echo "";
        
break;
        case 
"IM":
       
$insert mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!
$insert) {
die(
"NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " mysql_error());
}
        
//echo "";
        
break;
        case 
"NM":
       
$insert mysql_query("UPDATE octava SET CANTIDAD_EN_NUMERO = CANTIDAD_EN_NUMERO - '$cantidad_umtc' WHERE NUM_PERMISO = '$num_permiso'");
if (!
$insert) {
die(
"NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE REGLA OCTAVA: " mysql_error());
}
        
//echo "";
        
break;
        
        
        
        
//PERMISO DE TOXICOS
    
case "PF":
    
    if (
$row['CANTIDAD'] > '0') {
        
$insert mysql_query("UPDATE toxicos_sustancias_peligrosas SET CANTIDAD = CANTIDAD - '$cantidad_umtc' WHERE NUM_AUTORIZACION = '$num_permiso'");
if (!
$insert) {//falta condicion para fechas y cantidad
die("NO SE PUDO DESCONTAR LA CANTIDAD DEL PERMISO DE SUSTANCIAS PELIGROSAS: " mysql_error());
}
        else
        
        if (
$row['CANTIDAD'] <= '0'){
        
        echo 
"ya se termino el permiso";
        }
    }
        
//echo "";
        
break;
        
    case 
"":
        echo 
"ESTA PARTIDA NO TIENE PERMISOS ESPECIALES";
        break;
    
}

//4. Cerrar conexión a la Base de Datos
mysql_close($conexion);
?>
Aclaro que por el momento solo estoy haciendo pruebas con la opcion "PF", por el momento esta funcionando a medias, porque a medias?:

Digamos el permiso "1234" tiene para 100 kg, el usuario descarga los 100 KG y se hace la resta; el usuario quiere descargar de nuevo del permiso "1234", quiere descargar digamos 30KG, en efecto, no hace dicha descarga, YA SE QUEDA EN CEROS!!, pero no muestra ningun mensaje :(, a demas la aplicacion continua capturando el resto de los datos. Creo que esto es algo interesante y puede serle util a aguien, les seguire manteniendo informados.

Etiquetas: condicionalmente, guardando
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 13:42.