Está en la página 1de 31

Sistemas Informáticos I

Sistemas Informáticos

Tema 2: Sistemas distribuidos basados en WWW

2.3 Web interactiva


(Aplicaciones Web)

Evolución de los contenidos en la WWW

url
(extendida)

Web Browser Web Server

Web HTML HTML


(extendido) CGI C, perl, python,..
browser Javascripts
Servlets
JVM Applets
JSP

ASP
PHP

1
Sistemas Informáticos I

Web interactiva

• El modelo Web hipertexto no permite más interacción del usuario


que seleccionar URLs.
• Necesario establecer comunicación entre programas del servidor
con datos que proporciona el usuario.
– Datos introducidos mediante formularios (Forms).
– Ejecución de programas en el servidor mediante Common
Gateway Interface, CGI.

Funcionamiento básico (I)

1 Servidor
Web HTML

Cliente 2
(Navegador) Servidor
Web
3
4
Internet
DBMS
CGI
4a
5

2
Sistemas Informáticos I

Funcionamiento básico (II)

1. El cliente solicita una página al servidor Web.


2. El servidor envía una página que contiene un formulario.
3. El cliente rellena el formulario y lo envía al servidor.
4. El servidor, por la URL que se solicita, decide ejecutar un
programa, al que pasa los datos recibidos del cliente.
a. El programa puede realizar operaciones normales, tales como
lectura de ficheros o accesos a bases de datos.
5. El programa genera una página con los resultados de su
ejecución, y la devuelve al cliente a través del servidor Web.
Toda la comunicación se produce mediante protocolo HTTP y
páginas HTML.

Formularios HTML

• Definidos mediante el elemento <FORM>


• Contenedor que agrupa los elementos de entrada de datos,
mezclados con otros elementos estándar HTML.
• Estructura:
<FORM ACTION=url
METHOD=método de envío>
<INPUT> | <TEXTAREA> | <SELECT> | <BUTTON>
otros elementos HTML
</FORM>
• Action: URL que se debe solicitar al enviar el formulario.
• Method: Método de envío de los datos asociados al formulario.

3
Sistemas Informáticos I

Definición de elementos en los formularios

• Mediante definición en HTML de elementos de interacción.


– INPUT: text, password, checkbox, radio, hidden, image, submit,
reset.
– SELECT: Listas de selección con múltiples valores.
– TEXTAREA: Campo de texto multilínea.
– BUTTON: Botones de acción.
• A cada elemento se le asocia un nombre.
• La interacción con el usuario produce un valor para el mismo.
• Los resultados se envían al servidor en la petición HTTP mediante
parejas <nombre>=<valor>.
– Según el método elegido para el formulario, viajan asociados a
la URL que se pide o en el cuerpo del mensaje HTTP.

Formularios - Ejemplo

<FORM ACTION="http://host/cgi-bin/logon" METHOD=GET>


<p>Usuario:
<INPUT NAME="usuario" TYPE=text
SIZE="10" MAXLENGTH="8">
<p>Contrase&ntilde;a:
<INPUT NAME="clave" TYPE=password
SIZE="10" MAXLENGTH="8">
<P><INPUT NAME="nuevo" TYPE=radio
VALUE=si CHECKED>
Nuevo usuario
<P><INPUT NAME="nuevo" TYPE=radio
VALUE=no>
Usuario registrado
<CENTER><P>
<INPUT TYPE=RESET VALUE="Borrar">
<INPUT TYPE=SUBMIT VALUE="Enviar">
</CENTER>
Pruduce el envío de la siguiente URL:
http://host/cgi-bin/logon?usuario=Superman&clave=loislane&nuevo=si

4
Sistemas Informáticos I

Formularios - GET
En caso de METHOD=GET
El comando HTTP sería:
<FORM ACTION="http://host/cgi-bin/logon" METHOD=GET>
GET /logon?usuario=Superman&clave=loislane&nuevo=si
<p>Usuario: HTTP/1.1
<INPUT NAME="usuario" TYPE=text
(otras cabeceras HTTP)
SIZE="10" MAXLENGTH="8">
(línea en blanco)
<p>Contrase&ntilde;a:
<INPUT NAME="clave" TYPE=password
SIZE="10" MAXLENGTH="8">
<P><INPUT NAME="nuevo" TYPE=radio
VALUE=si CHECKED>
Nuevo usuario
<P><INPUT NAME="nuevo" TYPE=radio
VALUE=no>
Usuario registrado
<CENTER><P>
<INPUT TYPE=RESET VALUE="Borrar">
<INPUT TYPE=SUBMIT VALUE="Enviar">
</CENTER>
Pruduce el envío de la siguiente URL:
http://host/cgi-bin/logon?usuario=Superman&clave=loislane&nuevo=si

Formularios - POST
En caso de METHOD=POST, el mensaje habría sido:
POST /logon HTTP/1.1
<FORM ACTION="http://host/cgi-bin/logon" METHOD=GET>
CONTENT-TYPE: application/x-www-form-urlencoded
<p>Usuario: CONTENT-LENGT: xxx
<INPUT NAME="usuario" TYPE=text
(otras cabeceras HTTP)
SIZE="10" MAXLENGTH="8">
(línea en blanco)
<p>Contrase&ntilde;a:
usuario=Superman&clave=loislane&nuevo=si
<INPUT NAME="clave" TYPE=password
SIZE="10" MAXLENGTH="8">
<P><INPUT NAME="nuevo" TYPE=radio
VALUE=si CHECKED>
Nuevo usuario
<P><INPUT NAME="nuevo" TYPE=radio
VALUE=no>
Usuario registrado
<CENTER><P>
<INPUT TYPE=RESET VALUE="Borrar">
<INPUT TYPE=SUBMIT VALUE="Enviar">
</CENTER>
Pruduce el envío de la siguiente URL:
http://host/cgi-bin/logon?usuario=Superman&clave=loislane&nuevo=si

5
Sistemas Informáticos I

Common Gateway Interface, CGI

• EL CGI define el método para que un servidor WWW pueda


ejecutar programas externos y recoger información de ellos.
• Es una extensión del protocolo HTTP.
• El programa externo recibe del servidor información:
– Asociada a la transmisión: Origen, URL, protocolo utilizado...
– Introducida por el usuario, en un formulario de entrada.
• El paso de información a través del CGI se realiza mediante:
– Variables de entorno.
– Línea de comandos.
– Entrada / salida estándar (stdin y stdout).

Variables de entorno
• Un programa CGI recibe información del servidor HTTP por medio de variables de
entorno.
• Los nombres de las variables de entorno pueden ser específicos del sistema.
• Variables de entorno no dependientes de • Variables de entorno relacionadas con la
la petición: seguridad de acceso:
– SERVER_SOFTWARE – AUTH_TYPE
– SERVER_NAME – REMOTE_USER
– GATEWAY_INTERFACE – REMOTE_IDENT
• El resto de las variables de entorno • Variables de entorno sobre la información
dependen de la consulta: adicional asociada a la petición:
– SERVER_PROTOCOL – CONTENT_TYPE
– SERVER_PORT – CONTENT_LENGTH
– REQUEST_METHOD • Variables de entorno de la cabecera HTTP.
– PATH_INFO Formato:
– PATH_TRANSLATED. – HTTP_nombre_variable_cabecera
– SCRIPT_NAME
– QUERY_STRING
– REMOTE_HOST
– REMOTE_ADDR

6
Sistemas Informáticos I

Ventajas e inconvenientes CGI

• Ventajas:
– Sencillez de programación.
– Uso de cualquier lenguaje de programación, incluso lenguajes
interpretados (típicamente PERL).
– El programa CGI no puede afectar el funcionamiento del servidor, por
ejecutarse como un proceso independiente.
– Estándar. Garantiza la portabilidad entre servidores de distintos
fabricantes.
• Inconvenientes:
– Lento. Cada ejecución requiere crear un proceso y finalizarlo, que
implica reservas de memoria, aperturas de ficheros, conexiones a
bases de datos, etc.
– El programa CGI termina con cada llamada. No se puede mantener
un estado de la comunicación entre peticiones (sesión).

Web Application Programming Interfaces

• Surgen para tratar de evitar el problema de bajo rendimiento de la interfaz CGI.


– Los nuevos programas se enlazan junto con el servidor en una librería
dinámica.
– El servidor llama a las funciones de librería como tareas dentro del propio
proceso servidor.
– El proceso servidor no finaliza: Se mantienen ficheros abiertos, conexiones a
bases de datos, etc. entre llamadas a funciones.
– Se proporciona una API de acceso a los datos y estado del servidor.
• Inconvenientes:
– Un fallo en una rutina puede hacer caer el servidor completo.
– Lenguajes de programación normalmente limitados a C y C++.
– Difícil de programar. Es preciso conocer el funcionamiento interno del servidor
para aprovecharla a máximo.
• Proporcionadas por casi todos los fabricantes: Netscape (NSAPI), Microsoft
(ISAPI), IBM (ICAPI, GWAPI)...

7
Sistemas Informáticos I

Interfaces híbridas

• Intentan conseguir las ventajas de CGIs y Web APIs evitando sus inconvenientes.
• Los programas se realizan de modo independiente al servidor Web, y en cualquier lenguaje.
• El servidor Web, durante su inicialización, puede arrancar los programas en procesos
independientes.
• Los programas arrancados, tras inicializarse, quedan a la espera de recibir peticiones.
– Todo el proceso de inicialización se realiza antes de recibir una petición.
• La comunicación mediante variables de entorno y stdin y stdout se sustituye por otro
mecanismo de comunicación entre procesos, más rápido.
– Puede permitir acceso remoto empleando un mecanismo de comunicación apropiado.
– Empleando los mismos elementos que en CGI se consigue facilidad de migración de
programas CGI a las nuevas interfaces.
• Tras atender una petición, el programa no finaliza: vuelve a esperar la siguiente petición.
– Es posible mantener el estado de la aplicación entre peticiones sucesivas.
• Actualmente siguen este modelo:
– FastCGI, de Open Market, Inc. Comunicación Servidor - Programas por Sockets.
– Netscape Web Application Interface (WAI). Comunicación mediante CORBA.

Páginas dinámicas

• Extensiones del lenguaje HTML para permitir mayor capacidad de


proceso:
• En el cliente (client side scripts): Inclusión de código que el cliente
interpretará para variar dinámicamente la presentación de la
página.
– Proporciona inteligencia en el navegador.
• En el servidor (server side scripts):
– Inclusión de código en el fichero que contiene la descripción de
la página.
– El servidor lo interpretará para variar la generación de la página
antes de su envío al cliente.
– Alternativa a la programación CGI.

8
Sistemas Informáticos I

Sistemas Informáticos

Tema 2.3: Web Interactiva

El lenguaje PHP

PHP Hypertext Preprocessor, PHP

• Lenguaje de programación interpretado para el servidor.


• Sintaxis similar C/C++
• Integra acceso a formularios, archivos, bases de datos...
• El acceso a la información propia del servidor se consigue a través de arrays
indexados con el nombre del parámetro al que se desea acceder:
– $_SERVER: Variables propias del servidor. Ejemplos:
$_SERVER[QUERY_STRING], $_SERVER[REMOTE_HOST]
– $_REQUEST: Variables asociadas a la petición recibida (campos de
formularios).
– $_SESSION: Información asociada a la sesión de trabajo con el usuario.
Incluye los contenidos de tres tipos de variables:
• $_GET: Parámetros recibidos en un comando HTTP GET.
• $_POST: Parámetros recibidos en un comando HTTP POST.
• $_COOKIES: Lista de cookies recibidas con la petición.

9
Sistemas Informáticos I

Introducción a PHP

• Lenguajes de script
– PHP = PHP Hypertext Preprocesor.
– PHP es un lenguaje de script del lado del servidor.
Otros lenguajes similares son ASP, JSP o ColdFusion
– Los scripts PHP están incrustados en los documentos
HTML y el servidor los interpreta y ejecuta antes de
servir las páginas al cliente.
– El cliente no ve el código PHP sino los resultados que
produce.
– Software abierto y gratuito
– PHP + [PostgreSQL, MySQL] es multiplataforma

Ejemplo PHP

<html>
<body>

<?php
echo "Hello World";
Ejemplo.php
?>

</body>
</html>

10
Sistemas Informáticos I

Introducción a PHP

• ¿Cómo funciona PHP? (1)


Servidor web Cliente
(navegador)

Página Página
HTML HTML
internet

<P>Hola, Ana</P>

Introducción a PHP

• ¿Cómo funciona PHP? (2)


Servidor web Cliente
(navegador)

Página Página Página


PHP HTML HTML
internet
Intérprete
PHP

<?PHP
$nombre = "Ana";
print ("<P>Hola, $nombre</P>");
?>

<P>Hola, Ana</P>

11
Sistemas Informáticos I

PHP: algunos ejemplos

<?php
$txt1="Hello World!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>

Hello World! What a nice day!

PHP: algunas funciones

echo strpos("Hello world!","world"); 6

echo strlen("Hello world!"); 12

function functionName()
{
code to be executed;
}

12
Sistemas Informáticos I

PHP: arrays

• $cars=array("Saab","Volvo","BMW","Toyota");
• <?php
$cars[0]="Saab";
$cars[1]="Volvo";
$cars[2]="BMW";
$cars[3]="Toyota";
echo $cars[0] . " and " . $cars[1] . " are Swedish cars.";
?>

Saab and Volvo are Swedish cars.

PHP: arrays asociativos

• $ages = array("Peter"=>32, ”Mike"=>30, "Joe"=>34);


• <?php
$ages['Peter'] = "32";
$ages['Mike'] = "30";
$ages['Joe'] = "34";

echo "Peter is " . $ages['Peter'] . " years old.";


?>

Peter is 32 years old.

13
Sistemas Informáticos I

Sistemas Informáticos

Tipos de Datos y Variables

Tipos de datos

• PHP soporta 8 tipos de datos primitivos:


– Tipos escalares: boolean, integer, double, string
– Tipos compuestos: array, object
– Tipos especiales: resource, NULL
• El tipo de una variable no se suele especificar. Se decide en tiempo de
ejecución en función del contexto y puede variar
• Funciones de interés:
– La función gettype() devuelve el tipo de una variable
– Las funciones is_type comprueban si una variable es de un tipo dado:
is_array(), is_bool(), is_float(), is_integer(), is_null(),
is_numeric(), is_object(), is_resource(), is_scalar(),
is_string()
– La función var_dump() muestra el tipo y el valor de una variable. Es
especialmente interesante con los arrays

14
Sistemas Informáticos I

Tipos de datos
• Tipo string:
– Las cadenas se encierran entre comillas simples o dobles:
• ‘simples’: admite los caracteres de escape \’ (comilla simple) y \\ (barra).
Las variables NO se expanden
• “dobles”: admite más caracteres de escape, como \n, \r, \t, \\, \$, \”. Los
nombres de variables SÍ se expanden
• Ejemplos:
$a = 9;
print ‘a vale $a\n’;
// muestra a vale $a\n
print “a vale $a\n”;
// muestra a vale 9 y avanza una línea
print “<IMG SRC=‘logo.gif’>”;
// muestra <IMG SRC=‘logo.gif’>
print “<IMG SRC=\”logo.gif\”>”;
// muestra <IMG SRC=“logo.gif”>
– Acceso a un carácter de la cadena:
• La forma es $inicial = $nombre{0};

Variables

• Las variables siempre van precedidas de un $


• El nombre es sensible a las mayúsculas
• Comienzan por letra o subrayado, seguido de letras, números o
subrayado
• Variables predefinidas:
$GLOBALS, $_SERVER, $_GET, $_POST, $_COOKIES, $_FILES,
$_ENV, $_REQUEST, $_SESSION
• Ámbito: globales al fichero (excepto funciones) o locales a una función
• Ejemplo:
$valor = 5;
print “El valor es: ” . $valor . “\n”;
print “El valor es: $valor\n”; // ojo: comillas dobles

Resultado:
El valor es: 5

15
Sistemas Informáticos I

Constantes

• Definición de constantes:
define (“CONSTANTE”, “hola”);

print CONSTANTE;

• No llevan $ delante

• Sólo se pueden definir constantes de los tipos escalares (boolean,


integer, double, string)

Funciones: Paso por referencia

• Por omisión los parámetros se pasan por valor


• Paso por referencia:
function incrementa (&$a)
{
$a = $a + 1;
}

$a=1;
incrementa ($a);
print $a; // Muestra un 2

16
Sistemas Informáticos I

Ejemplo Función y array


<HTML> • Dia.php
<HEAD>
<TITLE>Fecha</TITLE>
<?PHP
// Función que obtiene el nombre de un mes
function nombreMes ($mes)
{
$meses = array ("enero", "febrero", "marzo", "abril", "mayo",
"junio", "julio", "agosto", "septiembre",
"octubre", "noviembre", "diciembre");
$i=0; </HEAD>
$enc=false;
while ($i<12 and !$enc) <BODY>
{
if ($i == $mes-1) <H1>Tablas y funciones</H1>
$enc = true;
else <?PHP
$i++; $dia = date ("j");
} $mes = date ("n");
return ($meses[$i]); $anyo = date ("Y");
} print ("Hoy es " . $dia . " de " . nombreMes($mes) .
?> " de " . $anyo . "<BR>\n");
?>

</BODY>
</HTML>

Sistemas Informáticos

Formularios: HTML+PHP

17
Sistemas Informáticos I

La función $_GET

<form action="welcome.php" method="get">


Name: <input type="text" name="fname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>

http://www.eps.uam.es/welcome.php?fname=Alvaro&age=42

Welcome <?php echo $_GET["fname"]; ?>.<br />


You are <?php echo $_GET["age"]; ?> years old!

Welcome Alvaro!
You are 42 years old.

La función $_POST

<form action="welcome.php" method="post">


Name: <input type="text" name="fname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>

http://www.eps.uam.es/welcome.php

Welcome <?php echo $_POST["fname"]; ?>!<br />


You are <?php echo $_POST["age"]; ?> years old.

Welcome Alvaro!
You are 42 years old.

18
Sistemas Informáticos I

La función $_REQUEST

Welcome <?php echo $_REQUEST["fname"]; ?>!<br />


You are <?php echo $_REQUEST["age"]; ?> years old.

Acceso a formularios desde PHP

uno.html
<HTML>
<BODY>
<FORM ACTION=”dos.php” METHOD=”POST”>
Edad: <INPUT TYPE=”text” NAME=”edad”>
<INPUT TYPE=”submit” VALUE=”aceptar”>
</FORM>
</BODY>
</HTML>

dos.php
<HTML>
<BODY>
<?PHP
$edad = $_REQUEST['edad'];
print (“La edad es: $edad”);
?>
</BODY>
</HTML>

19
Sistemas Informáticos I

Acceso a formularios desde PHP: Text

Introduzca la cadena a buscar:


<INPUT TYPE="text" NAME="cadena"
VALUE="valor por defecto"
SIZE="20">

<?PHP
$cadena = $_REQUEST[‘cadena’];
print ($cadena);
?>

Acceso a formularios desde PHP: Radio


Sexo:
<INPUT TYPE="radio" NAME=“sexo"
VALUE=“M“ CHECKED>Mujer
<INPUT TYPE="radio" NAME=“sexo"
VALUE=“H">Hombre

<?PHP
$sexo = $_REQUEST[‘sexo’];
print ($sexo);
?>

20
Sistemas Informáticos I

Acceso a formularios desde PHP: Checkbox

<INPUT TYPE="checkbox" NAME="extras[]"


VALUE="garaje" CHECKED>Garaje
• CHECKBOX
<INPUT TYPE="checkbox" NAME="extras[]"
VALUE="piscina">Piscina
<INPUT TYPE="checkbox" NAME="extras[]"
VALUE="jardin">Jardín

<?PHP
$extras = $_REQUEST[‘extras’];
$n = count ($extras);
for ($i=0; $i<$n; $i++)
print (“$extras[$i]<BR>\n”);
//foreach ($extras as $extra)
//print (“$extra<BR>\n”);
?>

Acceso a formularios desde PHP: Button

<INPUT TYPE="button" NAME=“actualizar"


VALUE="Actualizar datos”>

<?PHP
$actualizar = $_REQUEST[‘actualizar’];
if ($actualizar)
print ("Se han actualizado los datos");
?>

21
Sistemas Informáticos I

Acceso a formularios desde PHP: Hidden

<INPUT TYPE=’hidden’ NAME=’username’


VALUE=’$usuario’>

<?PHP
$username = $_REQUEST[‘username’];
print ($username);
?>

Acceso a formularios desde PHP: Password

Contraseña: <INPUT TYPE="password"


NAME="clave”>

<?PHP
$clave = $_REQUEST[‘clave’];
print ($clave);
?>

22
Sistemas Informáticos I

Acceso a formularios desde PHP: Submit

<INPUT TYPE="submit" NAME="enviar" VALUE="Enviar datos">

<?PHP
$enviar = $_REQUEST[‘enviar’];
if ($enviar)
print ("Se ha pulsado el botón de enviar");
?>

Acceso a formularios desde PHP: Select simple

Color:
<SELECT NAME=“color">
<OPTION VALUE=“rojo" SELECTED>Rojo
<OPTION VALUE=“verde">Verde
<OPTION VALUE=“azul">Azul
</SELECT>

<?PHP
$color = $_REQUEST[‘color’];
print ($color);
?>

23
Sistemas Informáticos I

Acceso a formularios desde PHP: Select múltiple

Idiomas:
<SELECT MULTIPLE SIZE="3"
NAME="idiomas[]">
<OPTION VALUE="ingles"
SELECTED>Inglés
<OPTION VALUE="frances">Francés
<OPTION VALUE="aleman">Alemán
<OPTION VALUE="holandes">Holandés
</SELECT>

<?PHP
$idiomas = $_REQUEST[‘idiomas’];
$n = count ($idiomas);
for ($i=0; $i<$n; $i++)
print (“$idiomas[$i]<BR>\n”);
//foreach ($idiomas as $idioma)
//print (“$idioma<BR>\n”);
?>

Acceso a formularios desde PHP: Textarea

Comentario:
<TEXTAREA COLS=“50" ROWS=“4" NAME="comentario">
Este libro me parece ...
</TEXTAREA>

<?PHP
$comentario =
$_REQUEST[‘comentario’];
print ($comentario);
?>

24
Sistemas Informáticos I

Acceso a formularios desde PHP: File

<form action="upload_file.php" method="post"


enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name=”fichero" id=”fichero" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>

<?php
if ($_FILES["fichero"]["error"] > 0)
{
echo "Error: " . $_FILES["fichero"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["fichero"]["name"] . "<br />";
echo "Type: " . $_FILES["fichero"]["type"] . "<br />";
echo "Size: " . ($_FILES["fichero"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["fichero"]["tmp_name"];
}
?>

Cargando ficheros: restricciones


<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{ echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
}
else { echo "Invalid file”;}
?>

25
Sistemas Informáticos I

Guardando el fichero cargado


<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{ echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo ”Temp file: " . $_FILES["file"]["tmp_name"];
}

}
else { echo "Invalid file”;}
?>

if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}

El formulario de PHP

• La forma habitual de trabajar con formularios en PHP es utilizar un único


programa que procese el formulario o lo muestre según haya sido o no
enviado, respectivamente
• Ventajas:
– Disminuye el número de ficheros
– Permite validar los datos del formulario en el propio formulario
• Procedimiento:
si se ha enviado el formulario:
Procesar formulario
si no:
Mostrar formulario
fsi

26
Sistemas Informáticos I

El formulario de PHP

• Para saber si se ha enviado el formulario se acude a la variable


correspondiente al botón de envío. Si este botón aparece de la siguiente
forma en el formulario HTML:

<INPUT TYPE="SUBMIT" NAME="enviar“ VALUE="procesar">

entonces la condición anterior se transforma en:


if (isset($enviar))

o bien
if ($enviar == “procesar”)

Validación de formularios

• Toda la información proveniente de un formulario debe considerarse por


norma como contaminada, y hay que validarla antes de darla por buena
y procesarla
• Lo más eficiente es mostrar los errores sobre el propio formulario para
facilitar su corrección. Procedimiento:

si se ha enviado el formulario:
si hay errores:
Mostrar formulario con errores
si no:
Procesar formulario
fsi
si no:
Mostrar formulario
Fsi

27
Sistemas Informáticos I

Sistemas Informáticos

Cookies y Sesiones

Cookies

• Una forma de identificar al usuario.


• Es un pequeño documento que el servidor (con el permiso del
navegador) introduce en el ordenador del cliente.
• Cada vez que el navegador solicite una nueva página (a ese
servidor), envía también la cookie.

28
Sistemas Informáticos I

Cookies: sintaxis

• Antes de <html>
– setcookie(name, value, expire, path, domain);

• Ejemplos
– <?php
setcookie("user", ”Bob Sponge", time() + 60 * 60);
?>

<html>
.....

Cookies: sintaxis (ii)

• Para recuperar los valores


– <?php
// Imprimir una cookie
echo $_COOKIE["user"];

// Para ver todas las cookies


print_r($_COOKIE);
?>

29
Sistemas Informáticos I

Cookies: sintaxis (iii)

• Verificar si existe
– <html>
<body>

<?php
if (isset($_COOKIE["user"]))
echo "Welcome " . $_COOKIE["user"] . "!<br />";
else
echo "Welcome guest!<br />";
?>

</body>
</html>

Sesiones

• Una sesión la relación que se establece entre un cliente y un


servidor durante un tiempo finito. El típico ejemplo en Internet es
un “carrito de la compra” en el que el cliente (navegador) visita
diferentes lugares del supermercado (servidor).

• El servidor debe mantener información a lo largo de todo el


proceso. Para ello se utilizan las sesiones.

• En PHP se manejan a través de la variable $_SESSION, que se


utiliza como cualquier otra variable:

30
Sistemas Informáticos I

Sesiones

<?php
session_start(); // start session
$_SESSION['name'] = ’Alvaro';
?>
<?php session_start(); ?>
<html>


<html>
<body>
<?php
echo 'Hello '.$_SESSION['name'];
?>

unset($_SESSION['name']);

session_destroy();

Ejercicio HTML-PHP

• A realizar en parejas, código HTML y PHP


– Subirlo en Moodle
• Formulario HTML que pida nombre, edad y sexo
– Envíe la información por POST al servidor
• En el servidor, código PHP que genere documento de
“Condiciones”, sólo si el usuario es > 18 años
– “Sr. XXX, ¿acepta las condiciones de uso de nuestro servicio?”
– Dos opciones al cliente (“Acepta”, “No acepta”).
• El servidor, al recibir la respuesta genera
– “Bienvenido Sr. XXX a nuestro servicio”, o
– “Lamentamos su decisión porque entonces no podremos
ofrecerle el servicio”.
(XXX representa el nombre introducido por el cliente)

31

También podría gustarte