Consultar registro antes de insertar

  • Autor Autor yoclens
  • Fecha de inicio Fecha de inicio
yoclens

yoclens

Gamma
Diseñador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
tengo el siguiente problema if ($monto > $monto_trasvalores_actual) el problema es que si el monto es mayor al registrado en la base de datos del campo $monto_trasvalores_actual me inserta el registro, cuando no debería insertarlo ya que el monto es mayor al monto disponible en la basa de datos. de lo contrario si el monto $monto_trasvalores_actual es mayor al $monto que se va a ingresar debería correr el resto del código e insertar el registro. mi código es el siguiente.


PHP:
<!-- proceso para registrar-->
<?php
if(isset($_POST['guardar'])){
 
  $sql= "SELECT monto_trasvalores_actual FROM trasvalores WHERE id_usuarios = :id_usuarios LIMIT 1"; //Creamos la select
  $check = $DB_con->prepare($sql); //Preparamos la SELECT, de ésta manera evitamos SQL Injection
  $check->bindParam(':id_usuarios', $_POST['id_usuarios']);//Substituimos las variables de la SELECT
  $check->execute();//Ejecutamos la consulta
  $monto_trasvalores_actual = $check->fetchColumn();
  if ($monto > $monto_trasvalores_actual){
     $check->closeCursor();
      
      
 
         $errMSG = "¡ Ups Aviso: trasvalores insuficiente Por favor Actualize el monto!";
 
      }
   
     else 
 
      { 
 
 
  $sql = "SELECT cod_ticket FROM adelantos WHERE cod_ticket = :cod_ticket LIMIT 1"; //Creamos la select
  $check = $DB_con->prepare($sql); //Preparamos la SELECT, de ésta manera evitamos SQL Injection
  $check->bindParam(':cod_ticket', $_POST['cod_ticket']);//Substituimos las variables de la SELECT
  $check->execute();//Ejecutamos la consulta
  $contador = $check -> rowCount();//Esta función devuelve el número de resultados que ha devuelto la SELECT
  if ($contador > 0) {
  $check->closeCursor();
    
              $errMSG = "¡ Ups Aviso: El Registro ya se Encuentra Insertado !";
 
    }
 
    else
      
    {
 
$sql=$DB_con->prepare("INSERT INTO adelantos (cod_ticket,monto,porcentaje,ganancia,total,id_puntos,fecha,hora,id_usuarios) VALUES (:cod_ticket,:monto,:porcentaje,:ganancia,:total,:id_puntos,:fecha,:hora,:id_usuarios)");
$sql->bindParam(':cod_ticket', $_POST['cod_ticket']);
$sql->bindParam(':monto', $_POST['monto']);
$sql->bindParam(':porcentaje', $_POST['porcentaje']);
$sql->bindParam(':ganancia', $_POST['ganancia']);
$sql->bindParam(':total', $_POST['total']);
$sql->bindParam(':id_puntos', $_POST['id_puntos']);
$sql->bindParam(':fecha', $_POST['fecha']);
$sql->bindParam(':hora', $_POST['hora']);
$sql->bindParam(':id_usuarios', $_POST['id_usuarios']);
$sql->execute();
 
          $successMSG ="¡ Bien Hecho: Registro Insertado Correctamente !";
 
 
        }
     }
  }
  
?>
<!-- fin proceso para registrar-->
 
$monto_trasvalores_actual no seta un texto ?
 
ah no te entiendo
 
Hola joclens, parece que el código esta bien, imprimí las dos variables (echo) antes del IF y verifica que las variables tengan lo que esperas. Se me ocurre que $check->fetchColumn(); puede no estar dándote lo que esperas o que $monto este vació. Verifica los valores con un echo y un exit(); antes del if, asi lo cancelas y verificas los valores.

Saludos
 
Hola joclens, parece que el código esta bien, imprimí las dos variables (echo) antes del IF y verifica que las variables tengan lo que esperas. Se me ocurre que $check->fetchColumn(); puede no estar dándote lo que esperas o que $monto este vació. Verifica los valores con un echo y un exit(); antes del if, asi lo cancelas y verificas los valores.

Saludos

hola hice esto:
echo "$monto";
echo "$monto_trasvalores_actual";
exit();
y me arroja por pantalla el valor de: monto_trasvalores_actual pero el valor de monto ney no me lo muestra
 
hola hice esto:
echo "$monto";
echo "$monto_trasvalores_actual";
exit();
y me arroja por pantalla el valor de: monto_trasvalores_actual pero el valor de monto ney no me lo muestra

Cuidado puede ser que aparezca monto o monto_trasvalores_actual, para estar seguro (salvo que estes seguro del valor de cada uno), acomodaria el echo:

echo "El monto es:" . $monto;
echo "El monto_trasavalores es" . $monto_trasvalores_actual;
exit();

Es para estar seguro cual es el valor que esta imprimiendo. En el caso que sepas cual es, significa que esa variable nunca se instancio, con esto me refiero a que no hay en ningún lado $monto = algunvalor; En el codigo que pasaste por lo que yo veo $monto no se instancia en ningun lado.

Saludos
 
Cuidado puede ser que aparezca monto o monto_trasvalores_actual, para estar seguro (salvo que estes seguro del valor de cada uno), acomodaria el echo:

echo "El monto es:" . $monto;
echo "El monto_trasavalores es" . $monto_trasvalores_actual;
exit();

Es para estar seguro cual es el valor que esta imprimiendo. En el caso que sepas cual es, significa que esa variable nunca se instancio, con esto me refiero a que no hay en ningún lado $monto = algunvalor; En el codigo que pasaste por lo que yo veo $monto no se instancia en ningun lado.

Saludos

El monto es:
El monto_trasvalores es 20000

solo me llega el valor de monto trasvalores el monto lo estoy enviado por medio de form
 
El monto es:
El monto_trasvalores es 20000

solo me llega el valor de monto trasvalores el monto lo estoy enviado por medio de form

Bueno lo que te falta entonces es $monto = $_get['name']; o $_post['name']; dependiendo como envíes el formulario donde name es el name del input de entrada donde metes el valor del monto en el formulario
 
Bueno lo que te falta entonces es $monto = $_get['name']; o $_post['name']; dependiendo como envíes el formulario donde name es el name del input de entrada donde metes el valor del monto en el formulario


El monto es:1500El
monto_trasvalores es 20000

ahora si llega el valor del monto ahora mi pregunta es la siguiente donde ptengo que poner $monto=$_POST['monto'];
 
El monto es:1500El
monto_trasvalores es 20000

ahora si llega el valor del monto ahora mi pregunta es la siguiente donde ptengo que poner $monto=$_POST['monto'];

antes del if para que funcione tu if de forma correcta.

Saludos
 
muchas gracias amigo ya me funciona perfectamente
 
Atrás
Arriba