Doble accion de formulario Php

Iniciado por iDrokerGeek_, 4 Octubre 2010, 19:27 PM

0 Miembros y 1 Visitante están viendo este tema.

iDrokerGeek_

Hola. Mi problema es sencillo. Hay un formulario en html, vale? pues quiero que ese formulario se envie a un archivo php y despues o a la vez se envie a otra pagina, todo directo sin intervenciones aparte del usuario. Como lo hago?
"Stay hungry, stay Foolish"
-Steve Jobs

#!drvy


iDrokerGeek_

Cita de: drvy | BSM en  4 Octubre 2010, 19:45 PM
metodo get o post ?




Saludos

Pues puse en el formulario Post
Que diferencia hay, por cierto? no es Post para enviar? Si es así, ¿cuando se usa get?
Siento el off-topic y se que se ha tocado esto muchas veces
saludos
"Stay hungry, stay Foolish"
-Steve Jobs

iDrokerGeek_

Vale, ya no hace falta que me expliquéis los dos métodos, los comprendo xD
Ahora solo me hace falta lo que pedi en un principio, y otra cosa: restringir que se vea el codigo fuente
es posible hacer que solo tenga acceso al archivo el html del formulario?
"Stay hungry, stay Foolish"
-Steve Jobs

iDrokerGeek_

Ok, voy progresando (siento las multiples respuestas). Ahora tengo un Php que realiza la tarea y ademas redirecciona a otra pagina web. Además, si se accede desde otra página que no sea el HTML con el formulario, tengo este código:


<?php
$referer 
$_SERVER['HTTP_REFERER'];
if(
$referer=='X/X.html'){
Código PHP
}else{
echo "Acceso denegado";
}
?>




Funciona. xD  (aunque si le doi a ver source solo me sale Acceso denegado escrito, tengo mis dudas sobre si hay alguna forma de descargar el código... Respondedme a esto, porfavor)
Y ahora el problema es que NO quiero que solo se redirija a otra página, sino reenviar los datos al formulario de otra pagina, ok?
Así que mis dudas es si se puede descargar de alguna forma el código (y solucionarlo), y el reenviar datos del formulario a otro formulario igual.
Gracias y saludos
"Stay hungry, stay Foolish"
-Steve Jobs

#!drvy

Mediante GET seria facil.

En el primer PHP procesa los datos y mediante
Código (php) [Seleccionar]
header('Location: http://www.ejemplo.com/pagina2.php?'.$_GET['variable']);
enviarlo a la otra pagina.

Mediante POST. La unica forma que conozco es haciendolo con la funcion curl (que no todos los servidores tienen habilitada).
Código (php) [Seleccionar]
<?php

$ch 
curl_init();
curl_setopt($chCURLOPT_URL"http://www.ejemplo.com/pagina2.php");
curl_setopt($chCURLOPT_RETURNTRANSFER1);
curl_setopt($chCURLOPT_POSTtrue);

$data = array(
    
'variable1' => $_POST['variable1'],
    
'variable2' => $_POST['variable2'],
    
'variable3' => $_POST['variable3']
);

curl_setopt($chCURLOPT_POSTFIELDS$data);
$output curl_exec($ch);
$info curl_getinfo($ch);
curl_close($ch);

notese que es un copy/paste de (www.electrictoolbox.com/php-curl-form-post/) no estoy seguro de que funcione.
para mas informacion sobre curl aquí el manual: http://php.net/manual/es/book.curl.php.
Tambien podrias hacerlo mediante javascript que autoenvie el formulario pero es muy friki XD.


Sobre tu segunda pregunta. No lo he entenido del todo. Queires ocultar el codigo HTML o el PHP ? el HTML ocultar ocultar no tiene mucho sentido y podrias encriptarlo (algun metodo sencillo) pero realmente no tiene sentido. El php ya de por si no se muestra puesto que es el servidor el unico que lo procesa.
Si deseas aceder a tu archivo php solo desde el formulario podrias poner un input oculto (hidden) y comprobar que los valores estan en el php y si no tirar un error.

Respecto tu ultima pregunta.
El referer es un buen metodo pero cualquier usuario puede editarlo y acceder igualmente. El codigo PHP no es visible y a no ser que tu servidor o tu codigo tenga algun fallo de seguridad es imposible ver el codigo.


Saludos

iDrokerGeek_

Hay un problema. El ultimo html ha de recibir por POST sí o sí.
Que puedo hacer?
He pensado en esto:

html primero (el usuario mete los datos) -> php que procesa datos -> html que obtiene las variables de alguna forma del php primero, y luego los envia por action?? a otro html -> HTML final (method=POST)

Dicho esto, a calentar neuronas. Yo no consigo averiguar como enviar datos de formularios por PHP. Lo siento xD
"Stay hungry, stay Foolish"
-Steve Jobs

#!drvy

He estado jugando un rato. La verdad es que no domino perfectamente curl asi que esto es lo que he conseguido.

1º metodo XD

pagina.html
Código (html4strict) [Seleccionar]
<html>
<head>
</head>
<body>
<form action="1pagina.php" method="POST" />
    usuario <br />
    <input type="text" name="usuario" value="" /> <br />
    e-mail <br />
    <input type="text" name="email" value="" /> <br />
    <input type="submit" value="enviar" />
</form>
</body>
<html>


1pagina.php
Código (php) [Seleccionar]
<?php

// mostrar variables antes de processar
print '<b>Pagina 1</b><br />';
print 
'<b>usuario</b>: ';
print 
htmlentities($_POST['usuario']);
print 
'<br />';
print 
'<b>email</b>: ';
print 
htmlentities($_POST['email']);
print 
'<hr>';
// ###

// procesar informacion de la siguente pagina y mostrar variables.s
$ch curl_init();
curl_setopt($chCURLOPT_URL"http://localhost/drvy/2pagina.php"); // pagina 2
curl_setopt($chCURLOPT_RETURNTRANSFER1);
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
curl_setopt($chCURLOPT_POSTtrue);

// nombre de la variable y variables
$data = array(
    
'usuario' => $_POST['usuario'],
    
'email' => $_POST['email'],
);
curl_setopt($chCURLOPT_POSTFIELDS$data);
$output curl_exec($ch);

// Imprimir contenido 2pagina.php
print $output;

?>


2pagina.php
Código (php) [Seleccionar]
<?php
print '<b>Pagina 2</b><br />';
print 
'<b>usuario</b>: ';
print 
htmlentities($_POST['usuario']);
print 
'<br />';
print 
'<b>email</b>: ';
print 
htmlentities($_POST['email']);
?>


Por una parte procesa todo bien. El unico problema es que no he conseguido redirecionarla. Vamos que todo se queda en 1pagina.php y lo unico que hace el curl es recoger lo que imprime 2pagina.php.

2º metodo.

Esto lo hace con javascript. Lo que hace es recrear un form y reenviarlo automaticamente con javascript. Recuerda que si el usuario no tiene javacript no funcionara.

pagina.html
Código (html4strict) [Seleccionar]
<html>
<head>
</head>
<body>
<form action="1pagina.php" method="POST" />
    usuario <br />
    <input type="text" name="usuario" value="" /> <br />
    e-mail <br />
    <input type="text" name="email" value="" /> <br />
    <input type="submit" value="enviar" />
</form>
</body>
<html>


1pagina.php
Código (php) [Seleccionar]
<?php
// crear formulario y autoreenviarlo
print '<form action="2pagina.php" name="miforum" method="POST" />';
print 
'usuario <br />';
print 
'<input type="hidden" name="usuario" value="'.htmlentities($_POST['usuario']).'" /><br />';
print 
'e-mail <br />';
print 
'<input type="hidden" name="email" value="'.htmlentities($_POST['email']).'" /> <br />';
print 
'</form>';
print 
'<script>document.miforum.submit();</script>'
// ###
?>


2pagina.php
Código (php) [Seleccionar]
<?php
print '<b>Pagina 2</b><br />';
print 
'<b>usuario</b>: ';
print 
htmlentities($_POST['usuario']);
print 
'<br />';
print 
'<b>email</b>: ';
print 
htmlentities($_POST['email']);
?>



Funciona perfectamente en localhost (XD) casi ni se nota la redireccion (obviamente sera mas lento en otros :P).


Saludos

iDrokerGeek_

jajaja
si se llegase a notar la redireccion en localhost, ya vamos mal xD
el problema del javascript es ese, que el usuario tenga.
En el 2pagina.php (javascript), no se reenvia a la pagina final, no? o sí?

Y el cUrl, he leido que no todos los servidores estan habilitados para hacer eso. Aparte de eso, parece que te lo has currado todo bien. Gracias.
Una cosa, el archivo pagina2.php, es la pagina final? es decir, la que yo digo que quiero reenviar. Veras, es que quiero reenviar los datos a una pagina externa, y tiene que ser por POST porque asi lo dice su codigo.. ese es el problema T.T


Mira el lado positivo, ahora lo de antes si quieres lo posteas en una recopilacion de esas de scripts PHP a tu nombre :D


Releyendo el javascript, creo que en el primer PHP lo que has echo es directamente usarlo como reenvio, no? o sea, que el php 2 es ya el objetivo final.


Wow! lo has conseguido!
Ya tengo la solucion por javascript!
Aunque es cierto eso de que no todos los navegadores tienen javascript, me has sacado de un apuro.  Muchas gracias!!!
"Stay hungry, stay Foolish"
-Steve Jobs

#!drvy

 :xD

Ese es el problema de curl que es una extension aparte de php.

El "2pagina.php" es el objetivo final. En el 1pagina.php (javascript) puedes hacer cualquier cosa mientras dejes al final la recreacion del formulario :P


Me alegro de que te haya servido.




Saludos