Foros del Web » Programando para Internet » PHP »

duda con llamada a javascript desde php

Estas en el tema de duda con llamada a javascript desde php en el foro de PHP en Foros del Web. Hola a todos, Tengo un archivo php que recoge las variables de un formulario para insertarlas en una base de datos y quiero añadir un ...
  #1 (permalink)  
Antiguo 20/02/2007, 08:18
 
Fecha de Ingreso: agosto-2005
Mensajes: 76
Antigüedad: 18 años, 8 meses
Puntos: 0
duda con llamada a javascript desde php

Hola a todos,

Tengo un archivo php que recoge las variables de un formulario para insertarlas en una base de datos y quiero añadir un aviso al usuario cuando vaya a insertar un dato que pueda estar duplicado, ya que parte del identificador es autonumérico. Esto lo intento hacer con JavaScript pero no consigo que me funcione del todo. El archivo php tiene el siguiente aspecto:

Código PHP:
<?php
... codigo que recoge los datos del formulario con POST ...
... 
codigo que selecciona los tests de un mismo objeto en la base de datos ...
$rows mysql_num_rows($result_ext);
if (
$rows==0) {
    ... 
inserta la información en la tabla tests ...
}
else {
?>
<script language="JavaScript" type="text/javascript">
function confirm_duplicatedata() {
    var agree=confirm("You already have <?php echo $rows?> tests from object:    <?php echo $object_id?>. Click on Accept to continue with your insert.");
    if (agree==true){
        return true ;
    }    
    else {
         window.location = "../../../insert.php";
         return false;
    }
}
confirm_duplicatedata();
</script>
<?php
... inserta la información en la tabla tests ... ---> si en confirm se ha pulsado aceptar!
}
?>
El problema que tengo es que aunque pulse cancelar en el javascript sigue insertando el dato en la base de datos. Alguna idea de como puedo hacer para que si pulso cancelar en el confirm de JavaScript no 'siga leyendo' el codigo php para insertar la información???
Muchas gracias por su ayuda.
  #2 (permalink)  
Antiguo 20/02/2007, 08:37
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: duda con llamada a javascript desde php

PHP lo ejecuta el servidor, Javascript es ejecutado por el navegador.
Ergo, no podés mezclar así javascript y PHP.
Para el servidor, lo que le estás pasando es:

<?php código php ?>

algo de texto

<?php más código php ?>

Por lo que obviamente se ejecutará todo el código siempre.

El código para insertar en la BD deberías tenerlo en otra página, a la que podés redirigir en caso de que se pulse "aceptar". O, redireccionar a la misma página pero con alguna variable tipo "confirma=1" o parecido, para indicar que se confirmó el ingreso de los datos.


Saludos.
  #3 (permalink)  
Antiguo 20/02/2007, 08:49
 
Fecha de Ingreso: agosto-2005
Mensajes: 76
Antigüedad: 18 años, 8 meses
Puntos: 0
Re: duda con llamada a javascript desde php

El código que puse arriba es 'la otra página' puesto que en ese fichero esta el código para insertar en la base de datos y el que recibe las variables del formulario.

Lo que quiero hacer es un aviso para el usuario cuando se realice la inserción del dato enviado desde el formulario que avise de los que ya tiene por si alguno pueda ser un duplicado y pueda seguir con la inserción o cancelarla.

----- editado después ----

La estructura que tengo en ese archivo es:

1º recoge las variables del formulario
2º si existen la variable con el id del objeto {
selecciona de la tabla los test del objeto
si no existe ninguno todavía {
inserta el test
}
else {
avisa al usuario cuantos tests estan ya en la base de datos
confirma que quiere seguir con la inserción ---> inserta el test
confirma que no quiere seguir ---> redirige a insert
}
}

El problema que tengo es que la función de aviso esta en JavaScript y el código de inserción si acepta no está dentro de esa función, sino que esta fuera. Como puedo hacer que sea correcto? se puede insertar el codigo dentro de javascript? esto he leido que no... y no lo tengo muy claro.

Última edición por aLiSHa_FW; 20/02/2007 a las 08:59
  #4 (permalink)  
Antiguo 20/02/2007, 15:09
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: duda con llamada a javascript desde php

Lo que tenés que comprender es que Javascript se ejecuta en el navegador, y PHP en el servidor.

en tu primer ejemplo, suponiendo que lo que pegaste fuera el código completo de la página, lo que sucede es que el servidor interpreta TODO el php, y el navegador recibe únicamente:

Código:
<script language="JavaScript" type="text/javascript"> 
function confirm_duplicatedata() { 
    var agree=confirm("You already have [valor de $rows] tests from object:    [valor de $object_id]. Click on Accept to continue with your insert."); 
    if (agree==true){ 
        return true ; 
    }     
    else { 
         window.location = "../../../insert.php"; 
         return false; 
    } 
} 
confirm_duplicatedata(); 
</script>
¿se entiende?

Es por eso que no importa lo que se seleccione en el confirm() porque el php ya fue ejecutado completamente.

Si lo que querés es tener que confirmar en una situación de error, lo ideal (y más simple) es recargar la misma página, sin hacer cambios, e indicando el error que sucede.
Por ejemplo, le ponés un enlace tipo "haga clic aquí para ingresar los datos de todas formas" que lleve a una url tipo tupagina.php?confirmado=1

Entonces, cuando procesás los datos, si $_GET['confirmado'] existe y vale 1, quiere decir que el usuario ya confirmó el ingreso de datos.

En resumen la estructura sería:

1.- página de ingreso de datos
2.- página de procesamiento
----- a.- si se necesita confirmación
----------- A.- si existe y vale 1 $_GET['confirmado'] (o la variable que vayas a usar) se continúa guardando
----------- B.- si no existe o no vale 1, se vuelve al punto 1 y se muestra el enlace que te comento antes
----- b.- si no se necesita, se continúa

Las páginas de los puntos 1 y 2 pueden ser la misma.


Si no querés dejar de usar el javascript, podés en vez de recargar al punto 1 en 2.a.B, mostrar una página que tenga el confirm, pero la forma correcta de usarlo es que:
si se cancela -> redirige a la página original
si se acepta -> vuelve a la página de procesamiento, con alguna variable que indique que se confirmó (igual que con el enlace)


Espero haberme sabido explicar y que me entiendas.

Saludos.
  #5 (permalink)  
Antiguo 21/02/2007, 10:44
 
Fecha de Ingreso: agosto-2005
Mensajes: 76
Antigüedad: 18 años, 8 meses
Puntos: 0
Re: duda con llamada a javascript desde php

Hola,

Muchas gracias, al final entendí como debo hacerlo. Estoy probando con la opción pagina.php?confirmado=1 cuando pulse aceptar en el dialogo javascript pero al recargar la pagina pierde las variables que le paso el formulario. Entonces estoy probando a recogerlas con $_SESSION pero me da algunos errores de "Parse error: syntax error, unexpected T_VARIABLE" y no logro encontrarlo. Concretamente en la primera linea del código siguiente.

Código PHP:
if (! $query mysql_query($controlsql_2$conn)) {

    
stderr ("Error querying: $controlsql_2");

    return 
false;


  #6 (permalink)  
Antiguo 21/02/2007, 14:56
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: duda con llamada a javascript desde php

deberías hacerlo así:
if ( !($query = mysql_query($controlsql_2, $conn)) )
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 18:43.