Vous êtes sur la page 1sur 13

3.

8 Procesado de formularios Un formulario es un entorno de interaccion con el visitante de una pgina web, en su interior encontramos un seguido de campos de formulario editables por el usuario, que le permiten enviar informacion a nuestro servidor donde la podremos tratar por ejemplo con PHP. El formulario engloba todos los campos de formulario que encontramos entre las etiquetas de inicio y final de formulario, <form> y </form> respectivamente: Campo de texto - El usuario puede insertar un texto de una linea Area de texto - El usuario puede insertar un texto de tantas lineas cmo quiera Casilla de verificacion - El usuario seleccionar o no una opcion Boton de opcin - El usuario puede seleccionar una opcion de una lista Campo desplegable - El usuario puede escoger una o mas opciones de la lista Campo de archivo - El usuario puede enviar un archivo al servidor ... Asimismo y para configurar dicho formulario, en la etiqueta de inicio de formulario podemos aadir ciertos atributos cmo por ejemplo: action - Define la direccion del programa que tratar los datos enviados, esta ser asimismo la direccion que ver el usuario una vez enviados los datos method - Define la manera en que sn enviados los datos del formulario, pudiendo ser GET ( Datos visibles en la barra de direccion ) o POST. enctype - Define como encriptar los datos del formulario, no es frecuente usarlo.

ejemplo de proceso de formularios con un CGI #!/usr/bin/perl if( $ENV{"REQUEST_METHOD"} eq "GET" ) { $argumento=$ENV{"QUERY_STRING"}; }else{ $argumento=<STDIN>; }

if( $argumento eq "" ) { print "Content-type: text/html\n\n"; print <<EOC; <html> <body> <h1>Formulario a procesar sin usar la libreria de CGI.</h1> <FORM method="POST"> Campo de texto: <input type="text" name="texto"> <p> Campo de clave: <input type="password" name="clave"> <p> Campo de seleccion: <select name="seleccion"> <option> s1 <option> s2 <option> s3 </select> <p> Area de texto: <textarea name="area" rows="5" cols="20"></textarea>

<p> <input type="submit" value="Enviar"> <input type="reset" value="Limpiar"> </FORM> </body> </html> EOC }else{ #analizar los parametros: foreach( split(/&/, $argumento)){ ($variable,$valor) = split(/=/, $_); $valor=~tr/+/ /; $valor=~s/%([0-9|A-F]{2})/pack(C,hex($1))/eg; $datos{$variable} = $valor; }

print "Content-type: text/html\n\n"; print "<html><body> \n"; print "<h1>Datos introducidos:</h1> <P> \n"; foreach ( keys(%datos) ){ print "\n<BR>$_ = $datos{$_}"; } print "</body></html>\n"; }

3.9 Sesiones Utilizaremos sesiones para almacenar una serie de variables en el servidor relacionndolas ( grcias a una variable pasada por cookie o por URL ) con un usuario concreto para que estn disponibles en diferentes pginas de nuestro sitio web. Una vez almacenada una variable de sessin, podremos leerla desde todas las pginas de nuestra web mientras la sesin no se destruya. ArribaTabla de contenido Guardar una variable Leer una variable guardada Borrar una variable ArribaGuardar una variable El soporte para sesiones de PHP nos permite inicializar facilmente una sesin utilizandosession_start y gracias al vector superglobal $_SESSION, podremos trabajar con sesiones como si de cualquier otro vector se tratara: Guardar una variable El soporte para sesiones de PHP nos permite inicializar facilmente una sesin utilizandosession_start y gracias al vector superglobal $_SESSION, podremos trabajar con sesiones como si de cualquier otro vector se tratara:

000 001 002 003 004 005

<?php // Inicializamos sesion session_start(); // Guardamos una variable $_SESSION['nombre'] = 'Fernando Daz'; ?>

Maximizar

Seleccionar

PHP

La nica cosa que deberemos tener en cuenta, es que si usamos cookies no podremos haber enviado ni un solo caracter ( ni siquiera un espacio ) al navegador antes delsession_start, el siguiente ejemplo nos dar error por el espacio de la lnea 0:

000 001 002 003

<?php // Inicializamos sesion session_start(); ?> Maximizar Seleccionar PHP

ArribaLeer una variable guardada Si hemos guardado una sesin, podremos acceder a sus variables desde todas las pginas PHP de nuestra web uando sean visitadas por el mismo usuario. Esto lo haremos simplemente inicializando la sesin y con el mismo vector $_SESSION, para ver si existe una variable de sesin determinada, usaremos isset cmo con cualquier otra variable.:

000 001 002 003 004 005 006 007 008 009 010 011

<?php // Inicializamos sesion session_start(); // Comprovamos si existe la variable if ( isset ( $_SESSION['nombre'] ) ) { // Si existe echo $_SESSION['nombre']; } else { // Si no existe echo 'desconocido'; } ?> Maximizar Seleccionar PHP

ArribaBorrar una variable Podemos borrar una variable de sesin usando la funcin unset, pero adems podemos eliminar la sesin con session_destroy:

000 001 002 003 004 005 006 007

<?php // Inicializamos sesion session_start(); // Borramos la variable unset ( $_SESSION['nombre'] ) { // Borramos toda la sesion session_destroy(); ?> Maximizar Seleccionar PHP

3.10 Conectividad entre el servidor Web y el servidor de base de datos. PHP puede conectarse con bases de datos de dos formas: mediante el uso directo de funciones propias del intrprete que dependen del gestor de base de datos usadas o a trves del estndar ODBC (Open Data Base Connectivity).

En PHP el trabajo con la base de datos se basa en tres etapas fundamentales:

1. Establecer contacto con la base de datos 2. Realizar las operaciones necesarias 3. Cerrar los recursos empleados

Conectar con una base de datos MySQL - PHP

Para conectarse con una base de datos es necesario crear una conexin con el servidor. Esto se logra en PHP mediante el uso de la funcin mysql_connect() . Sintaxis

mysql_connect($ruta, $usuario, $password);

Parmetro $ruta

Descripcin Opcional. Especfica el servidor al cual se conecta. El valor por defecto es "localhost:3306". Opcional. Identifica el usuario. El valor por defecto es el nombre de usuario propietario del proceso.

$usuario

$password Opcional. El valor por defecto es "". No recomendado

Ejemplo de conexin de una base de datos MySQL desde PHP Lnea 6 mediante la funcin mysql_connect nos conectamos al gestor MySQL La funcin mysql_error, devuelve el texto del mensaje de error de la ltima operacin MySQL Mediante la funcin mysql_select_db seleccionamos la base datos (Lnea 8) mysql_close cierra la conexin a la base de datos (Lnea 10).

<?php $ruta = "localhost"; $login = "mi_login"; $password = "mi_password"; $db = "miBaseDatos"; $conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error()); echo "conectado bravo!!!!!!"; mysql_close($conexion); ?>

3.11 Manejo de Archivos. 1. Apertura de un archivo. La funcin utilizada para abrir un archivo e n PHP es fopen, la sintaxis.fp_handler=fopen(path,modo);Parh es la ruta completa del archivo a abrir, si el path comienza con http:// se realiza una conexin a la URLindicada y se abre la pgina como si fuera un archivo (con las limitaciones lgicas, por ejemplo no es posibleescribir).Los modos en los que se puede abrir un archivo son:r S l o l e c t u r a r + L e c t u r a y e s c r i t u r a w S l o e s c r i t u r a , s i n o e x i s t e e l a r c h i v o l o c r e a , s i e x i s t e l o t r u n c a w + L e c t u r a y e s c r i t u r a , s i e x i s t e l o t r u n c a , s i n o e x i s t e l o c r e a a M o d o a p p e n d s l o e s c r i t u r a s i n o e x i s t e l o c r e a a + M o d o a p p e n d l e c t u r a y e s c r i t u r a s i n o e x i s t e l o c r e a La funcin devuelve un file_handler que luego debe ser usado en todas las funciones de tipofnombre_funcion, como por ejemplo fgets, fputs, fclose, fread, fwrite, etc. 2. Lectura desde un archivo. Las funciones que pueden usarse para leer un archivo son: s t r i n g = fgets (file_handler, longitud)Lee una lnea de texto hasta el fin de lnea o bien hasta que se cumpla la longitud indicada, devuelve elresultado en la variable pasada. El archivo debe estar abierto con fopen. var= fread (file_handler, cantidad)Lee la cantidad de bytes indicados ignorando saltos de lnea y deja el resultado en la variable var.Ejemplo$buffer= fread ($fp, 1024); //Lee 1Kb desde el archivo cuyo handler es $fps t r i n g = fgetss (file_handler, longitud)Idntica a fgets con la diferencia de que los tags html son eliminados del archivo a medida que se lee elmismo. Opcionalmente puede pasarse una lista de tags que no deben ser eliminados.Ejemplo:$string=fgetss($fp,999999,<b> <i> <table> <tr> <td>);Lee una lnea (de cualquier longitud) eliminando los tags html excepto los indicados como segundoparmetro. Los tags que cierran los tags especificados en la lista de tags permitidos tampoco son eliminados.

3.12 Seguridad

La seguridad y funcionamiento sin duda uno de los temas ms importantes al desarrollar un portal web. La validacin de datos, es por tanto fundamental.

El no cuidarnos de esto, puede traernos problemas de inyeccin SQL, CrossScripting, Cookie Poisoning, amenazas de seguridad en la nube (Cloud Computing) y un largo etc, etc, que compromete la estabilidad del sitio y el recurso ms valioso de nuestro sitio " la informacin".

El filtrado de datos es una de las piedras angulares en cualquier aplicacin en el tema de seguridad, independientemente del lenguaje con el cual se desarrolle.

Filtrado de datos

Una de las mayores fortalezas de PHP es su facilidad de uso. Lamentablemente, este mismo beneficio se usa en contra de PHP, programadores con poca experiencia olvidan usar medidas de seguridad o carecen de los conocimientos para generar una clase que valide los datos introducidos por los usuarios finales. Se han desarrollado diversas clases de validacin, algunas mejores que otros, con igual o mayor nmero de mtodos para hacer la misma tarea estas no estan estandarizadas. PHP versin 5 proporciona la extensin Filter cuyo objetivo es realizar esta tarea en forma sencilla, robusta y la estandarizacin de la entrada de datos del usuario. Las funciones base se presentan a continuacin.

Funcin

Descripcin

filter_has_var Verifica si la variable del tipo especificado existe

Funcin filter_list filter_var

Descripcin

Devuelve una lista de todos los filtros soportados Filtra una variable con un filtro especfico. Devuelve los datos filtrados, o FALSE si el filtro falla. Obtiene una variable desde afuera de PHP y opcionalmente la filtra

filter_input

Ejemplo de filter_has_var

La sintaxis es:

filter_has_var(tipo, variable)

Parmetro tipo

Descripcin Requerido. especfica el tipo que deseamos checar. Los posibles tipos son: INPUT_GET INPUT_POST INPUT_COOKIE INPUT_SERVER INPUT_ENV

variable

Requerida. Especfica la variable que deseamos checar

El objetivo del ejemplo es tratar de frenar invasiones a la seguridad asegurandonos que no introduzcan datos mediante la URL. Este mtodo no es infalible contra la inyeccin de cdigo SQL, pero es una aproximacin..

<?php if(!filter_has_var(INPUT_POST, 'login') or !filter_has_var(INPUT_POST, 'key')) { echo('Sin Peligro'); } else die('Por aqu no entras'); ?>

Mediante la funcin filter_list es posible recuperar la lista de filtros soportados por nuestro servidor y con filter_id recuperados el inditificador del filtro.

Ejemplo del uso de filter_list y filter_id.

La lnea 5 recorre el vector filter_list La lnea 6 imprime el nombre del filtro extraido en la lnea 5 la lnea 7 imprime el id del filtro

<body> <table> <tr><td>Nombre del Filtro</td><td>ID</td></tr> <?php foreach( filter_list() as $id =>$filter) { echo "<tr><td>".$filter.'</td><td>'; echo filter_id($filter).'</td></tr>'."\n"; } ?> </table> </body>

Ejemplo de filter_var y filter_input

La validacin de datos es una parte integral del trabajo con formularios. Datos vlidos los datos presentados pueden dar lugar a problemas de seguridad

A partir del formulario

Futuro colega* Estatura* Peso* url* Por ejemplo: http://www.itver.edu.mx email* ip* metros (40 a 150 kg)

<?php if (filter_has_var(INPUT_POST, 'enviar')) { $colega = filter_input(INPUT_POST, 'colega', FILTER_SANITIZE_STRING); if ($colega === false or empty($colega) or trim($colega) == "" ) { echo "El nombre es un campo requerido! <br />"; } else echo "Hola $colega <br />"; $options = array('options'=> array('min_range'=>40, 'max_range'=>150)); $peso = filter_input(INPUT_POST, 'peso', FILTER_VALIDATE_INT, $options); if ($peso === false) { echo "Escriba un peso vlido entre 40 y 150 kg.<br />"; } else { echo "$peso kg es un peso vlido.<br/>";} $estatura = $_POST['estatura']; if (!filter_var($estatura, FILTER_VALIDATE_FLOAT)) { echo "$estatura no es una variable flotante <br />"; } else echo "$estatura es una dato flotante vlido<br />"; $url = $_POST['url']; if (filter_var($url, FILTER_VALIDATE_URL)) { echo "La url $url es vlida <br />"; } else echo "La url $url no es vlida! <br />";

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); if ($email === false) { echo "El email es un campo requerido! <br />"; } else echo "$email es una direccin de correo vlida<br />"; $ip = filter_input(INPUT_POST, 'ip', FILTER_VALIDATE_IP); if($ip === false) { echo "No es una IP vlida <br />"; } else echo "$ip es una IP vlida <br />"; } else echo "Por aqui no puedes entrar <br />"; ?>

Vous aimerez peut-être aussi