Foros del Web » Programando para Internet » Javascript »

Frenar ejecucion de codigo con Confirm

Estas en el tema de Frenar ejecucion de codigo con Confirm en el foro de Javascript en Foros del Web. Hola he estado trabajando en un sistema y he tenido problemas en frenar la ejecución mediante un !confirm de javascript. Explico la idea y les ...
  #1 (permalink)  
Antiguo 03/05/2007, 11:17
 
Fecha de Ingreso: febrero-2004
Ubicación: En Copiapó
Mensajes: 52
Antigüedad: 20 años, 2 meses
Puntos: 0
Pregunta Frenar ejecucion de codigo con Confirm

Hola he estado trabajando en un sistema y he tenido problemas en frenar la ejecución mediante un !confirm de javascript. Explico la idea y les dejo el codigo para ver si me pueden corregir.

1.- verifico stock de productos de una bd mysql y a la cantidad que tengo en la base le resto la cantidad que necesito para venderlo.
2.- en caso que el resultado de esta operacion sea menor que 0 me manda un mensaje de alerta con javascript con confirm ( o sea un aceptar y un cancelar)
3.- Si se presiono aceptar que prosiga, si se presiono cancelar con frene el codigo y se devuelva a la pagina anterior


Código PHP:
<? 
//Ingreso de items de la factura 

for ($i=1;$i<=$num_lineas;$i++) 

    
//Consultas de stock para cada producto 
    
$qSQL=mysql_query("select * from tbl_productos where `codigo_producto`='".$_GET["codigo_producto$i"]."'"); 
    
$rs=mysql_fetch_assoc($qSQL); 
    
$nueva_cantidad=$rs['cantidad_producto']-$_GET["cantidad_producto$i"]; 
        if(
$nueva_cantidad<0

?> 
<script> 
if(!confirm("El Stock de <? echo $_GET["detalle_producto$i"];?> es demasiado bajo, Desea continuar de todos modos.")) 

document.location.href= 'boletas.php'; 
<? $sigo="no";?> 

</script> 
<? 

//Ingreso Items 

$res=mysql_query("insert into tbl_detalle (`id_detalle`,`codigo_producto`,`valor_producto`,`cantidad_detalle`) values ('$id_detalle','".$_GET["codigo_producto$i"]."','".$_GET["valor_producto$i"]."','".$_GET["cantidad_producto$i"]."')"); 
            if (!
$res){die('Error: ' mysql_error());} 
//Actualizo la cantidad correspondiente al codigo_producto 
mysql_query("UPDATE `tbl_productos` SET  `cantidad_producto`='$nueva_cantidad' WHERE `codigo_producto`='".$_GET["codigo_producto$i"]."'"); 




if (
$sigo!="no"

//Ingreso datos de la factura 
$qSQL=mysql_query("select * from tbl_boletas where numero_boleta = '$boleta_numero'"); 
$sw_bol=mysql_num_rows($qSQL); 
if (
$sw_bol==0

$res_factura=mysql_query("insert into tbl_boletas (numero_boleta,id_detalle,fecha_boleta,hora_boleta,vendedor_boleta,pago_boleta,total_boleta,observaciones_boleta) values ('$boleta_numero','$id_detalle','$fecha_boleta','$hora_boleta','$vendedor_boleta','$pago_boleta','$total_boleta','$observaciones_boleta')"); 
    if (!
$res_factura){die('Error: ' mysql_error());} 

    
//Actualizo el nº de la ultima factura 
    
mysql_query("UPDATE `tbl_ultima` SET  `ultima_boleta`='$boleta_numero'");  

     
?>
__________________
:pirata:
  #2 (permalink)  
Antiguo 03/05/2007, 11:27
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Re: Frenar ejecucion de codigo con Confirm

Hola ozk4r

El script parece correcto. ¿Te da algún error? ¿No redirige a la página que tú quieres? ¿...?

Saludos,
  #3 (permalink)  
Antiguo 03/05/2007, 11:54
 
Fecha de Ingreso: abril-2006
Mensajes: 80
Antigüedad: 18 años
Puntos: 2
Re: Frenar ejecucion de codigo con Confirm

mmm... Parece que intentas asignar un valor a una variable de php desde un código javascript, ¿me equivoco?. Si pulsas en cancelar -> $sigo="no":

Cita:
if($nueva_cantidad<0)
{
?>
<script>
if(!confirm("El Stock de <? echo $_GET["detalle_producto$i"];?> es demasiado bajo, Desea continuar de todos modos."))
{
document.location.href= 'boletas.php';
<? $sigo="no";?>
}
</script>
<?

Eso no puedes hacerlo . Quizás si con Ajax, pero ya tendrías que utilizar otro método.
Debes saber que no puedes manipular variables de PHP desde javascript...

Lo que podrías hacer es lo siguiente:

Código HTML:
<script> 
if(!confirm("El Stock de <? echo $_GET["detalle_producto$i"];?> es demasiado bajo, Desea continuar de todos modos.")) 
{ 
     document.location.href= 'boletas.php?sigo=no'; 
} 
</script> 
y luego en boletas.php:

Código PHP:
$sigo"si";
if (isset(
$_GET['sigo']) {$sigo$_GET['sigo']}
if (
$sigo!="no"

     
//Ingreso datos de la factura 
     
$qSQL=mysql_query("select * from tbl_boletas where numero_boleta = '$boleta_numero'"); 
     
$sw_bol=mysql_num_rows($qSQL); 
     if (
$sw_bol==0
     { 
          
$res_factura=mysql_query("insert into tbl_boletas (numero_boleta,id_detalle,fecha_boleta,hora_boleta,vendedor_boleta,pago_boleta,total_boleta,observaciones_boleta) values ('$boleta_numero','$id_detalle','$fecha_boleta','$hora_boleta','$vendedor_boleta','$pago_boleta','$total_boleta','$observaciones_boleta')"); 
           if (!
$res_factura){die('Error: ' mysql_error());} 
     } 
     
//Actualizo el nº de la ultima factura 
     
mysql_query("UPDATE `tbl_ultima` SET  `ultima_boleta`='$boleta_numero'");  

?>

Última edición por Asyolath; 03/05/2007 a las 12:04
  #4 (permalink)  
Antiguo 03/05/2007, 13:29
 
Fecha de Ingreso: febrero-2004
Ubicación: En Copiapó
Mensajes: 52
Antigüedad: 20 años, 2 meses
Puntos: 0
Re: Frenar ejecucion de codigo con Confirm

La idea es que mediante el script en javascript se continue o no con la ejecucion de insersion de codigo php. lo que quiero hacer realmente es si el confirm es cancelar que se cambie de pagina y vaya a la especificada y si no que continue con el codigo php pero eso es lo que no pasa no frena la ejecucion del codigo php y lo que si hace bien es redirigirme.
__________________
:pirata:
  #5 (permalink)  
Antiguo 03/05/2007, 14:08
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Frenar ejecucion de codigo con Confirm

Buf, eso deberías hacerlo con AJAX, o con un iframe oculto que cargarías desde javascript en caso de que el confirm fuese true. Con javascript no vas a poder controlar cosas de servidor: recuerda que primero se ejecuta el PHP, y luego el servidor manda la página generada al navegador del cliente con PHP ya ejecutado.

Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #6 (permalink)  
Antiguo 03/05/2007, 14:21
 
Fecha de Ingreso: abril-2006
Mensajes: 80
Antigüedad: 18 años
Puntos: 2
Re: Frenar ejecucion de codigo con Confirm

Exacto, primero se ejecuta el PHP que envía el código html y javascript para que lo muestre en pantalla. Cuando ya se ha ejecutado todo el PHP, entonces se muestra la página y, si hay javascript, se ejecuta.

No podrás frenar el código PHP con javascript porque ya se a ejecutado TODO.

Por lo tanto tienes 2 soluciones:

Código HTML:
<script> if (!confirm("El Stock de <? echo $_GET["detalle_producto$i"];?> es demasiado bajo, Desea continuar de todos modos."))
{
     document.location.href= 'boletas.php?sigo=no';
}
else
{
     document.location.href= 'boletas.php';
}
</script> 
Y en boletas.php:
Código PHP:
$sigo"si";
if (isset(
$_GET['sigo']) {$sigo$_GET['sigo']}
if (
$sigo!="no"

     
//Ingreso datos de la factura 
     
$qSQL=mysql_query("select * from tbl_boletas where numero_boleta = '$boleta_numero'"); 
     
$sw_bol=mysql_num_rows($qSQL); 
     if (
$sw_bol==0
     { 
          
$res_factura=mysql_query("insert into tbl_boletas (numero_boleta,id_detalle,fecha_boleta,hora_boleta,vendedor_boleta,pago_boleta,total_boleta,observaciones_boleta) values ('$boleta_numero','$id_detalle','$fecha_boleta','$hora_boleta','$vendedor_boleta','$pago_boleta','$total_boleta','$observaciones_boleta')"); 
           if (!
$res_factura){die('Error: ' mysql_error());} 
     } 
     
//Actualizo el nº de la ultima factura 
     
mysql_query("UPDATE `tbl_ultima` SET  `ultima_boleta`='$boleta_numero'");  

Como dije antes...

O utilizar AJAX, que no es muy complicado pero primero hay que entenderlo. Si posteas en esa seccion quizás te ayuden con tu problema (probablemente yo).

La idea del iframe personalmente no me gusta.
  #7 (permalink)  
Antiguo 03/05/2007, 14:29
 
Fecha de Ingreso: abril-2006
Mensajes: 80
Antigüedad: 18 años
Puntos: 2
Re: Frenar ejecucion de codigo con Confirm

Otra solución muy parecida a la que te dí antes:

Código PHP:
<script>
if (!confirm("El Stock de <? echo $_GET["detalle_producto$i"];?> es demasiado bajo, Desea continuar de todos modos."))
{
     document.location.href= 'boletas.php';
}
else
{
     document.location.href= 'procesadatos.php';

</script>
procesadatos.php:
Código PHP:
//Ingreso datos de la factura 
$qSQL=mysql_query("select * from tbl_boletas where numero_boleta = '$boleta_numero'"); 
$sw_bol=mysql_num_rows($qSQL); 
if (
$sw_bol==0

     
$res_factura=mysql_query("insert into tbl_boletas (numero_boleta,id_detalle,fecha_boleta,hora_boleta,vendedor_boleta,pago_boleta,total_boleta,observaciones_boleta) values ('$boleta_numero','$id_detalle','$fecha_boleta','$hora_boleta','$vendedor_boleta','$pago_boleta','$total_boleta','$observaciones_boleta')"); 
     if (!
$res_factura){die('Error: ' mysql_error());} 

//Actualizo el nº de la ultima factura 
mysql_query("UPDATE `tbl_ultima` SET  `ultima_boleta`='$boleta_numero'"); 
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 04:00.