| Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS | ||||
01/1/70 - Este tipo de transferencia es de gran utilidad ya que nos permite interaccionar directamente con el usuario.
El proceso es similar al explicado para las URLs. Primeramente, presentamos una primera página con el formulario clásico a rellenar y las variables son recogidas en una segunda página que las procesa:
| Nota: No siempre se definen automáticamente las variables recibidas por el formulario en las páginas web, depende de una variable de configuración de PHP: register_globals, que tiene que estar activada para que así sea. Ver comentarios del artículo al final de la página para más información. |
|
<HTML> <HEAD> <TITLE>formulario.html</TITLE> </HEAD> <BODY> <FORM METHOD="POST" ACTION="destino2.php"> Nombre<br> <INPUT TYPE="TEXT" NAME="nombre"><br> Apellidos<br> <INPUT TYPE="TEXT" NAME="apellidos"><br> <INPUT TYPE="SUBMIT"> </FORM> </BODY> </HTML> |
|
<HTML> <HEAD> <TITLE>destino2.php</TITLE> </HEAD> <BODY> <? echo "Variable \$nombre: $nombre <br>\n"; echo "Variable \$apellidos: $apellidos <br>\n" ?> </BODY> </HTML> |
| Nota: Aunque podamos recoger variables con este array asociativo o utilizar directamente las variables que se definen en nuestra página, resulta más seguro utilizar $HTTP_POST_VARS por dos razones, la primera que así nos aseguramos que esa varible viene realmente de un formulario y la segunda, que así nuestro código será más claro cuando lo volvamos a leer, porque quedará especificado que esa variable estamos recibiéndola por un formulario. |
Ejemplo de restricción de acceso por edad
Para continuar aportando ejemplos al uso de formularios vamos a realizar una página que muestra solicita la edad del visitante y, dependiendo de dicha edad, permita o no visualizar el contenido de la web. A los mayores de 18 años se les permite ver la página y a los menores no.
El ejemplo es muy sencillo y no valdría tal cual está para utilizarlo a modo de una verdadera restricción de acceso. Únicamente nos sirve para saber cómo obtener datos de un formulario y como tratarlos para realizar una u otra acción, dependiendo de su valor.
La página del formulario, que hemos llamado edad.php tendría esta forma:
<html>
<head>
<title>Restringir por edad</title>
</head>
<body>
<form action="edad2.php" method="post">
Escribe tu edad: <input type="text" name="edad" size="2">
<input type="submit" value="Entrar">
</form>
</body>
</html>
Esta es una página sin ningún código PHP, simplemente tiene un formulario. Fijémonos en el action del formulario, que está dirigido hacia una página llamada edad2.php, que es la que recibirá el dato de la edad y mostrará un contenido u otro dependiendo de ese valor. Su código es el siguiente:
<html>
<head>
<title>Restringir por edad</title>
</head>
<body>
<?
$edad = $_POST["edad"];
echo "Tu edad: $edad<p>";
if ($edad < 18) {
echo "No puedes entrar";
}else{
echo "Bienvenido";
}
?>
</body>
</html>
Esperamos que este otro código tampoco resulte extraño. Simplemente se recibe la edad, utilizando el array $_POST. Luego se muestra la edad y se ejecuta una expresión condicional en función de que la edad sea menor que 18. En caso positivo (edad menor que 18), se muestra un mensaje que informa de que no se deja acceder al página. En caso negativo (mayor o igual a 18) se muestra un mensaje de bienvenida.
Podemos ver el ejemplo en funcionamiento.
| Autoría, licencia y acciones sobre este artículo | ||||||
|
Informe de Rubén Alvarez*
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright. * Para consultas técnicas utilizar la lista de correo.
|
| Los comentarios de los visitantes son para ampliar la información del artículo. Cualquiera puede participar. |
| Se muestran 18 comentarios revisados |
RESPUESTA:
Pues si que hay que configurarlo en determinados casos, porque en ocasiones no viene hecho por defecto. Para ello debes acceder al archivo php.ini.
La variable que tienes que configurar es "register_globals" (se le asigna "on" o bien "off") que, si está activada, la información de entrada de GET, POST y de las cookies se declara automáticamente como variables que se ueden utilizar directamente. Además, se puede encontrar en las matrices asociativas $HTTP_GET_VARS,$HTTP_POST_VARS y $HTTP_COOKIE_VARS respectivamente.
para hallar el archivo php.ini utiliza la busqueda en el sistema y luego realiza los pasos dichos anteriormente.
Posible solución:
Que yo sepa, no puedes enviar a una página dos formularios... pero se me ocurre que copies el contenido de un formulario en el otro dinámicamente con Javascript en el cliente y que mandes únicamente un formulario, el que guarda sus datos y la copia de lo que había en el otro formulario.
Para ello, en el formulario donde copiarás los datos del otro formulario coloca tantos campos hidden como campos debes copiar. Luego, con el evento onsubmit de javascript detectas el momento en el que envías el formulario "grande" y copias todos los datos del otro formulario, accediendo, en tu caso, por la jerarquía de objetos al otro frame y al formulario que deseas copiar.
Algún día puede que expliquemos esto detalladamente.
He aqui la pagina: www.php.net/manual/en/configuration.php#ini.register-globals
Chau
RESPUESTA
Si quieres que el formulario se envíe a un marco (o frame) que no es el que está el formulario, debes utilizar el atributo target en la etiqueta form, del mismo modo que lo utilizas en los enlaces.
Si lo que deseas es pasar la información a tres marcos distintos, deberías utilizar Javascript. En el formulario, en lugar de colocar un botón de submit, colocas un botón normal que, al pulsarlo, se llame a una función javascript que mande los datos a los tres marcos. Eso lo consigues con un código parecido a este:
<script>
//Digamos que el formulario se llama form1
//Digamos que los frames se llaman f1, f2 y f3
document.form1.target="f1"
document.form1.submit()
document.form1.target="f2"
document.form1.submit()
document.form1.target="f3"
document.form1.submit()
</script>
fLIPIS (www.flipis.net)
RESPUESTA
Si las variables que llegan por un formulario se declaran automáticamente en la página podría ocurrir que un visitante "avispado" modificase a mano la lista de variables pasadas por la URL con intención de crear alguna variable necesaria para realizar algún tipo de acción, posiblemente no autorizada, en nuestro sitio web.
No se si la idea queda clara, pero en el supuesto de que nosotros estuviéramos utilizando una variable de sesión, llamada autorizado y con valor “si”, para saber si un usuario se ha autentificado correctamente, un posible atacante podría introducirla a través de la URL.
www.tudominio.com/pagina.php?autorizado=si
El tema es que, por motivos de seguridad, se recomienda acceder a cada variable de servidor (Variables de sesión, de fomularios, pasadas en la URL, etc.) indicando las vías por las que ha sido declarado, por ejemplo:
HTTP_POST_VARS
HTTP_GET_VARS
…
Aunque a partir de determinada versión de PHP se puede acceder también por las abreviaciones:
_GET
_SESSION
_COOKIE
...
RESPUESTA:
Realmente existe ese problema de seguridad, porque puedes tener una variable definida dentro de PHP que se haya creado sin que tú la hayas definido, simplemente porque el visitante haya compuesto una URL con paso de parámetros.En cualquier caso, sì puedes evitar el register globals, mejor. En ese caso, el acceso a las variables se haría así:
$HTTP_POST_VARS["nombre_variable"]
$_POST["nombre_variable"]
Cualquiera de las dos formas de acceder a la variable es correcta. Pero la forma abreviada sólo funciona en versiones de PHP más modernas, aunque lo habitual es que cualquier proveedor tenga instalada una versión de PHP actualizada que permita la forma $_POST["nombre_variable"].
Respuesta
Me extraña mucho lo que dices... no creo que estés en lo cierto. La sintaxis correcta es con las dobles comillas.
¿En qué condiciones te da el error?
En algunos casos, si estás escribiendo código dentro de unas comillas, puede que con las comillas del $_POST se creen sintaxis incorrectas que puedan dar errores, pero no puedo entender que siempre te de este error que comentas.
Respuesta
¿Estás seguro que esas páginas están pasando por el servidor web? La dirección de la barra debería mostrar algo empezando por http://.
| Añadir un comentario del artículo |
| Comentarios sin revisar |
| Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente. |
| Ver los comentarios no revisados |
| Añadir un comentario del artículo |
| Enlaces: |
| Maestrosdelweb |
Lectura recomendada Compra este libro en Agapea, la librería urgente a domicilio. |
||||||||
Tienda DesarrolloWeb