Foros del Web » Programando para Internet » PHP »

direccionar luego de insertar registro

Estas en el tema de direccionar luego de insertar registro en el foro de PHP en Foros del Web. Hola gente: antes que nada les digo que se poco y nada de este lenguaje, pero me las ingenio como para ir cambiando los codigos ...
  #1 (permalink)  
Antiguo 20/04/2004, 17:28
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 21 años, 2 meses
Puntos: 1
direccionar luego de insertar registro

Hola gente: antes que nada les digo que se poco y nada de este lenguaje, pero me las ingenio como para ir cambiando los codigos que encuentro en funcion de mis necesidades.
Bueno el tema es que tengo echo una index.php que llama a un formulario dentro de un pop up a el cual lo valido con JavaScript y luego lo inserto en la tabla con php, hasta aca todo bien
Pero necesito
Comprobar que la insercion no fue erronea, si lo fue que me de un mensaje, si no lo fue tambien.
Estos mensajes serian dos paginas diferentes pero que se muestren en la ventana del index
Por ultimo que se cierre el pop up.

Bueno espero haber sido claro y desde ya muchas gracias.
  #2 (permalink)  
Antiguo 20/04/2004, 18:20
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 20 años, 6 meses
Puntos: 1
a ver creo que no te explicas muy bien, pero con esto debe ser suficiente. Suponiendo que uses mysql:

para verificar si la inserción fué exitosa:
$sql = "INSERT INTO etc etc etc VALUES etc";
$exito = mysql_query($sql,$conexion);
if($exito)
echo 'EL PROCESO FUE EXITOSO';
else
echo 'Error al inserta: '.mysql_error($conexion);

si este proceso lo hiciste en el popup y quieres que el mensaje se despliegue en la ventana principal, cerrando antes el popup:

<script languaje="Javascript">
<!--
function mensajePrincipal(clase)
{
actual = opener.location;
if(clase == 'exito')
nueva = actual+"?error=0";
else
nueva = actual+"error=1";
opener.location = nueva;
}
-->
</script>
if($exito)
echo '<img src="spacer.gif" onLoad="mensajePrincipal('exito')">';
else
echo '<img src="spacer.gif" onLoad="mensajePrincipal('otracosa')">';

luego en la principal...
if(isset($_GET['error'])
if($_GET['error'] == 1)
echo 'mensaje de error';
else
echo 'mensaje de exito';

saludos, avisame si no me explique bien... hasta pronto
  #3 (permalink)  
Antiguo 20/04/2004, 18:22
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 20 años, 6 meses
Puntos: 1
ups, en el js me falto window.close para cerrar el popup

:p

ah y puedes usar otro evento que onLoad de la imagen, por que en caso de que falle la imagen no se ejecutaría el js

saludos
  #4 (permalink)  
Antiguo 20/04/2004, 19:39
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 21 años, 2 meses
Puntos: 1
voy por partes!!!

1)si fue exitosa o no necesito que se carge la pagina "exito.php" o la de "error.php" en la ventana donde estava el index.php que es desde donde biene el link del pop up.

2)El script de java lo coloco en el pop up, ¿pero donde? ¿dentro del php? ¿al final de la insercion del registro?.

3)Por ultimo lo que me decis que va en la principal ¿En donde especificamente?.

Bueno desde ya muchas gracias por yu ayuda y disculpa tantas preguntas pero recien estoy empesando con este tema, y cuesta un poco.
  #5 (permalink)  
Antiguo 21/04/2004, 04:29
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 21 años, 2 meses
Puntos: 1
Hola buen dia disculpen que insista pero no logor sacarlo, si al guien me puede dar una mano se lo agradeceria.
  #6 (permalink)  
Antiguo 21/04/2004, 07:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
1) .. Eso es taréa de Javacript (y sus window.opener ....)

2) y 3) ... Debes entender (ya te lo explico yo) que PHP sólo "compone" tu página HTML/con javascript, etc según la lógica (condicioneles if() y demás estructuras de control) lo define.

Si te fijas bien . .veras cuando debes "generar" ese código HTML/javascript que necesitas y debe ser ejecutado por el cliente cuando lo reciba (navegador).

El código que mencionó sism82 se coloca en la página que llamas por en tu window.open (tu popup) que serán donde se ejecutará la parte PHP -> y al finalizar el proceso PHP (ese ingreso de datos en tu BD .. etc) tendrá que "generar" uno u otro código HTML/javascript según se cumpla el condicional (if) que determina si el registro fué ingresado con exito o no ..

Por ejemplo .. sin complicarme mucho y para que se vea claro la "esencia" de lo que he pretendido explicar sería:

Código PHP:
// etc ...
if($exito){
?>
<html>
<head>
<script languaje="javascript">
    function cierra_ventana_y_cambia_padre(){       
        window.opener.location="exito.tal";
        window.close();
    }
</script>
</head>
<body onLoad="cierra_ventana_y_cambia_padre()">
</body>
</html>
<?
} else {
?>
<html>
<head>
<script languaje="javascript">
    function cierra_ventana_y_cambia_padre(){       
        window.opener.location="error.tal";
        window.close();
    }
</script>
</head>
<body onLoad="cierra_ventana_y_cambia_padre()">
</body>
</html>
<?
}
?>
Y una vez que todo funcione OK, .. puedes poner un @delante de:
$exito = @mysql_query($sql,$conexion);

Para ocultar los mensajes de error que pese que "redirecciones" van a aparecer (USALO SÔLO EN PRODUCCIÔN .. no en desarrollo!).

Por supuesto la opción de sism82 en cuanto a la funcion de javacript empleada y demás es más versatil .. Sólo el detalle de usar el HTML completo para la página que se va a crear.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 21/04/2004, 18:49
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 21 años, 2 meses
Puntos: 1
Hola evidente mente hay algo que estoy haciendo mal.

Me podrian decir como hago para pasar una variable de una ventana a otra, pero si es posible que no sea por medio de ningun boton, me refiero a como le doy el valor a la variable x en la ventana uno y cuando dicha ventana se cierra como hago para que en la ventana dos pueda tomar dicho valor e imprimirlo en pantalla.

muchas gracias.
  #8 (permalink)  
Antiguo 21/04/2004, 21:29
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 20 años, 6 meses
Puntos: 1
ok, empecemos por la forma en que puedes enviar variables a otra ventana.
las que necesitas saber de momento son dos.
En PHP:
variables por URL (tambien conocido como método GET)
variables por formulario(conocido como POST)
Las variables GET, son enviadas, como te dije, por URL, esto quiere decir que se envian a través de la dirección de la página, para ser recibidas por algún interprete, en este caso PHP.
ejemplo:
pagina.php?variable1=valor1&variable2=valor2
la primer variable la envias justo después de poner el nombre y extensión de la página "pagina.php" y pones un signo de interrogación para indicar inicio de variables, luego separas cada variable con signos Amperson &
y cada uno de esos valores los recibes en "pagina.php" de la siguiente forma:
php maneja un arreglo (array) que contiene todas las variables que se envian por GET, y logicamente asi se llama el arreglo GET, asi que para recibir esas variables haces $_GET['nombreVariable']; y asi es como usas ese valor
Ok?
Las variables POST son las que se reciben desde un formulario, siempre y cuando especifiques ese método en el formulario, ya que, no es común, pero se puede hacer que un formulario envie variables por GET:
<form name="formulario" action="pagina.php" method="post">
<input type="text" name="variable1" value="valor1">
<input type="submit" value="Enviar datos">
</form>
si te fijas especifique method="post" si no lo haces te las va a enviar por GET, es decir por la direccion URL que ves arriba en el navegador. has la prueba poniendo method="get" para que veas la diferencia.
Las recibes igual que con GET, pero ahora el arreglo se llama POST
$_POST['variable1'];

Ahora bien javascript(JS) no puede recibir las variables directamente desde GET o POST, necesitas un intermediario, normalmente son los parametros que le envias a JS o bien, un campo. Ya que JS se lleva muy bien con todos los elementos del navegador. Por ejempo, si envias por GET o POST y quiere que JS lea la variable puedes hacer. Concretamente para tu duda:
pagina 1 que envia variable:
<html>
<head>
<title>envio variable</title>
</head>
<body>
<form name="envia" action="pagina2.php" method="post">
<input type="text" name="var" value="ESTA VARIABLE ENVIE">
<input type="submit" value="enviar variable">
</form>
</body>
</html>

En pagina 2:
<html>
<head>
<title>taksldnsa</title>
<script language="Javascript">
function leeVariable(variable){
alert("la variable que enviaste es: "+variable);
}
</script>
</head>
<body onLoad="leeVariable('<? echo $_POST['var'];?>');"
contenido de la web
</body>
</html>

Como ves, php es el que envia parametros a javascript. Javascript se encarga de que las paginas se recarguen, se envien los formularios etc...

Como ves, la variable la envie con un formulario de HTML, luego la recibí con PHP, pero ese PHP estaba dentro de una llamada a una función de JS leeVariable('aqui van los parametros');
solo que el parametro lo recibe de php antes de que el html con el javascript sea enviado al navegador del cliente. y finalmente el envento onLoad "dispara" la función.
Javascript se maneja por funciones y eventos "cuando pase esto quiero que hagas esto"... por eso no importa donde pongas tus funciones, yo la puse en el header, es recomendado. Y luego la mande llamar desde la etiqueta body...

mas dudas???
  #9 (permalink)  
Antiguo 22/04/2004, 11:59
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 21 años, 2 meses
Puntos: 1
Antes que nada quisiera agradecer tu ayuda y felicitarte por la claridad de tus explicaciones.
Logre pasar la variable del pop up a su pagina disparadora, pero esta debe actualizar su contenido dependiendo del valor de la variable y no lo hace, creo que me falta algo y no se que es.
Para poder mostrar el codigo en cuestion, suprimi todo lo que no tenga que ver con el mismo y tengo algo asi.

en la disparadora

<html>
<head>
<title>Disparadora</title>

<script language="JavaScript" type="text/JavaScript">
<!--
function MM_openBrWindow(theURL,winName,features) { //v2.0
window.open(theURL,winName,features);
}
//-->
</script>

<?php function cargar(){if($_GET['hola'] == 10){
echo 'mensaje de error';
}else{
echo 'mensaje de exito';
}
}
?>

</head>
<body>
<a href="#" onClick="MM_openBrWindow('dos.php','waternet','wid th=545,height=260')">Contactenos</a>
<?php return cargar();?>
</body>
</html>

El pop up tiene esto

<html>
<head>
<title>pop up</title>
</head>

<script>
function cerrar (){
actual = opener.location;
nueva = actual+"?hola=10";
opener.location = nueva;
onunload= "opener.location.href='http://www.forosdelweb.com';"
window.close();
}
</script>

<body>
<a href="#" onClick="return cerrar();"><font color="#0000FF">Cerrar</font></a>
</body>
</html>

Al poner <?php return cargar();?> ¿no estoy recargando la pagina?

Bueno quedo a la espera de la respuesta y nuevamente gracias.
  #10 (permalink)  
Antiguo 22/04/2004, 14:13
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 21 años, 2 meses
Puntos: 1
Una mas del tema.
Para verificar si la insercion en la base fue exitosa me pasaste esto:

para verificar si la inserción fué exitosa:
$sql = "INSERT INTO etc etc etc VALUES etc";
$exito = mysql_query($sql,$conexion);
if($exito)
echo 'EL PROCESO FUE EXITOSO';
else
echo 'Error al inserta: '.mysql_error($conexion);


Pero en mi codigo yo tengo algo parecido que no se si sacarlo o adaptarlo, que es esto:

mysql_select_db($database_cnn, $cnn);
$Result1 = mysql_query($insertSQL, $cnn) or die(mysql_error())

Lo que necesitaria es que haga el proceso de verificar si fue exitoso o no y que me arme un mensaje, tipo el que esta arriba, pero adaptado con los datos que tengo abajo

Gracias
  #11 (permalink)  
Antiguo 22/04/2004, 19:09
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 20 años, 6 meses
Puntos: 1
ok a riesgo de que me regañe algún moderador, repito tu código para comentarlo:

####EMPIEZA TU CODIGO#####
<html>
<head>
<title>Disparadora</title>

#####
/*
la función de aqui abajo esta bien, todo lo que hace es abrir un popUp.
*/
###
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_openBrWindow(theURL,winName,features) { //v2.0
window.open(theURL,winName,features);
}
//-->
</script>
####
/*
el php de aqui abajo no esta del todo bien
si tu pones if($_GET['hola'] etc etc)
le estas diciendo al servidor que reciba una variable por GET que todavia no envias, me explico? esa variable todavía no existe, va a existir ya que se abra el pop up y se la envies desde allá. En versiones decentes de PHP te debe marcar error "undefined index hola", por que esa variable no ha sido inicializada, debes poner esto:
<?php
function cargar(){
if(isset($_GET['hola]) && $_GET['hola'] == 10)
$mensaje = 'Mensaje de error';
else
$mensaje = 'mensaje de exito';
return $mensaje;
}
?>
Ahh no es necesario poner { } llaves si la sentencia de control, es este caso IF, solo tienen una instrucción, en este caso el echo.
Entonces reemplaza tu codigo por el que te puse arriba.
isset te devuelve TRUE si la variable esta inicializada.
En resumen todo el código de arriba dice:
si la variabel GET que se llama hola esta inicializada Y si la variable GET que se llama hola es igual a diez, entonces a la variable $mensaje asignale mensaje de error, si no es asi, asignale mensaje de exito y regresa (return) el resultado
*/
###
<?php function cargar(){if($_GET['hola'] == 10){
echo 'mensaje de error';
}else{
echo 'mensaje de exito';
}
}
?>

</head>
<body>
<a href="#" onClick="MM_openBrWindow('dos.php','waternet','wid th=545,height=260')">Contactenos</a>
#########
/*
aqui donde mandas llamar la función pon esto:
<?php
if(isset($_GET['hola']))
echo cargar();

?>
que en sintesis, solo vuelve a comprobar que la variable GET hola este inicializada, y si lo esta, entonces ejecuta el código de la funcion carga y el resultado lo muestra en el HTML (echo)
Realmente estamos comprobando de mas, pero es bueno para practicar.... ;P
entonces reemplaza esto tambien...
*/
######
<?php return cargar();?>
</body>
</html>

El pop up tiene esto

<html>
<head>
<title>pop up</title>
</head>
######
/*
Aqui es buena idea que pongas que script es
<script language etc etc
por que puede haber scripts en C# u otros lenguajes
ahora bien, estas haciendo cosas extrañas jeje
vamonos linea por linea:
1.defines tu funcion (function cerrar())
2.actual = opener.location, es decirle al navegador, en la variable que se llama 'actual', guardame la dirección URL de la ventana que me abrió, es decir la ventana padre(opener). en español suena raro decir la "abridora".
3.dices, a la variable nueva asignale el contenido de actual(es decir la direccion de opener) mas(concatenar) la cadena "?hola=10" es decir, donde la variable hola es igual a 10.
4.aqui es donde se ejecuta la acción, opener.location = nueva;
aqui le dices que la ventana que abrió el popup debe irse a la direcion que le indica la varibale 'nueva'
5.pero EN ESTA LINEA HACES ALGO EXTRAñO, justo en la linea anterior mandamos a la ventana que abrió el pop up a la direccion 'nueva', y en esta linea le dices que se vaya a forosdelweb???
opener.location.href es lo mismo(para fines practicos) que opener.location
6. window.close es correcto para cerrar el popup

*/
#######
<script>
function cerrar (){
actual = opener.location;
nueva = actual+"?hola=10";
opener.location = nueva;
onunload= "opener.location.href='http://www.forosdelweb.com';"
window.close();
}
</script>

<body>
<a href="#" onClick="return cerrar();"><font color="#0000FF">Cerrar</font></a>
</body>
</html>
####TERMINA TU CODIGO#######


en general esta bien, la primer ventana esta lista, la segunda ventana(ya me canseeee :p) es la que esta mal. Voy a ser breve..

en el pop up vas a hacer estoo...

<html>
<head>
<title>pop up</title>
</head>
<script language="Javascript">
function cerrar (exito){
//defino variables
actual = opener.location;
falla = actual+"?hola=20";
exito = actual+"?hola=10"
//veo si hubo exito en la insercion
//si lo hubo mando hola con valor de 20(realmente cualquier otro valor diferente de 10 es bueno) para que PHP me despliegue el mensaje de exito
if(exito == 1)
opener.location = exito;
//si no lo hubo mando URL con hola = 10 para que el codigo php
//mande mensaje de error, al recibir la variable GET hola con valor de 10 (?hola=10)
else
opener.location = falla;
//cierro popup
window.close();
}
</script>
<?php
###aqui va el codigo de tu insercion a la base de datos
/*
esto es importante...
en la consulta que tienes abajo le estas diciendo al servidor por medio de PHP lo siguiente:
a la variable $Result1 asignale el resultado que te devuelva la funcion mysql_query(), a la cual le pasas los parámeotrs $insertSQL y $cnn, pero si no se ejecuta la sentencia SQL con exito, interrumpe todos los procesos(die())
Entonces, si tu usas die, y la consulta no es exitosa, no vas a dar tiempo a que se ejecute el script de java que acabamos de escribir arriba.
quitale or Die
quedaría asi

$Result1 = mysql_query($insertSQL, $cnn);

luego comprobamos si fue exitosa, mysql_query devuelve TRUE si se ejecuto bien, por lo tanto podemos poner

if($Result1)
$exito = 1;
else
$exito = 0;

y listo, la varible de PHP $exito la enviamos como parametro a la funcion de javscript, fijate en la etiqueta del link <a href...

*/
$Result1 = mysql_query($insertSQL, $cnn) or die(mysql_error())

?>
<body>
<a href="#" onClick="cerrar(<?php echo $exito; ?>);">
</body>
</html>


dudas??

hasta pronto

regreso en un par de horas por si te quedan dudas...
  #12 (permalink)  
Antiguo 22/04/2004, 19:18
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 21 años, 2 meses
Puntos: 1
Gracias, gracias y mil gracias
  #13 (permalink)  
Antiguo 23/04/2004, 18:40
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 21 años, 2 meses
Puntos: 1
Hola: no me funciona.

Si abro el formulario llamando al pop up desde otra pagina, no me graba en la base, vuelve al index con la variable hala=20 pero no me imprime ningún mensaje de error.
Si lo abro directamente ejecutando el formulario en una pagina nueva, si me graba en la base.

Por lo cual creo que los problemas son dos primero el de inserción en la base y segundo el de imprimir en pantalla.

Tengo una duda, donde decís:

falla = actual+"?hola=20";
exito = actual+"?hola=10"

¿No estas pisando la variable que utilizas para comprobar la inserción en la base?, que es la misma que usas para preguntar el estado y así armar la dirección con la variable.

if(exito == 1)
opener.location = exito;
else
opener.location = falla;
window.close();


Otra cosa, para adaptar lo que me explicaste a mi sitio tuve que modificar la llamada a la función cerrar. Yo lo que hago es desde el botón del formulario llama a la función comprobar que es la que me valida el formulario y luego desde hay llamo a la función cerrar
¿esta bien?
en la linea del form
onSubmit="return comprobar();"

En la función comprobar, luego de verificar que este todo bien:
return cerrar();

el tema es que aca le tendría que pasar el parámetros de
<?php echo $exito; ?>
y me quedaria asi
return cerrar(<?php echo $exito; ?>);

¿Esta bien?.

Bueno quedo a la espera de la generosa colaboración y paciencia, muchas gracias.
  #14 (permalink)  
Antiguo 23/04/2004, 18:59
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 21 años, 2 meses
Puntos: 1
Ya hay algo solucionado, me inserta en base.
tenia al fianlizar la funcion de validacion:

return cerrar();
Borre el return
cerrar();

No me queda muy clara cual es la diferencia, pero funciona

return ¿no significa volver a la funcion?.

Bueno, lo unico que me queda por resolver es el porque no imprime en pantalla el mensaje, y porque a pesar de insertar bien en la base igual el valor de la variable que pasa sigue siendo el mismo. "hola =20"

  #15 (permalink)  
Antiguo 24/04/2004, 10:42
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 21 años, 2 meses
Puntos: 1
Esto es muy raro, de arratos inserta y de arratos no
  #16 (permalink)  
Antiguo 25/04/2004, 08:24
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 21 años, 2 meses
Puntos: 1
Hola sism82: he leido los ultimos mensajes, y no quiero entrar en medio de esa disputa sobre la sintaxis porque como sabras desconosco un poco el.
Volviendo a lo que estabamos, hice todo lo que me dijistes pero no logro dar en el blanco, en este momento luego de varias pruevas
1)creo que el problema esta en donde mando a llamar a la funcion de cerrar.
dentro de otra funcion de validacion del form
cerrar();
ya que si la misma se ejecuta, aveces incerta en la base y aveces no
Pero si no se ejecuta (si coloco esto, no llama a la funcion cerrar)
cerrar(<?php echo $exito; ?> );
pero iserta en la base.

2)siempre,si inserta o no, la variable hola me llega a la otra pagina con valor 20, pero no imprime nada en pantalla.

3)Tengo una duda, donde decís:

falla = actual+"?hola=20";
exito = actual+"?hola=10"

¿No estas pisando la variable que utilizas para comprobar la inserción en la base?, que es la misma que usas para preguntar el estado y así armar la dirección con la variable.

if(exito == 1)
opener.location = exito;
else
opener.location = falla;
window.close();

Bueno como veras sigo un poco enrredado
"Te agradeceria tu ayuda que hasta el momento fue la mas clara y precisa"

Si no te molesta ¿te podria pasar los dos documentos por email ?para que los veas asi no te hago perder tanto tiempo entre idas y vueltas.
Si tu respuesta es si, te paso al privado mi direccion de email.
Gracias.
  #17 (permalink)  
Antiguo 25/04/2004, 10:08
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 20 años, 6 meses
Puntos: 1
me parece bien

mandame los docs a [email protected], te los regreso en cuanto pueda comentados y resueltos. Sobre todo trata de explicar detalladamente cuales son tus intenciones, como deseas que funcionen las webs... saludos
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:44.