Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas Informáticos
url
(extendida)
ASP
PHP
1
Sistemas Informáticos I
Web interactiva
1 Servidor
Web HTML
Cliente 2
(Navegador) Servidor
Web
3
4
Internet
DBMS
CGI
4a
5
2
Sistemas Informáticos I
Formularios HTML
3
Sistemas Informáticos I
Formularios - Ejemplo
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ñ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ñ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
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:
– 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).
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
8
Sistemas Informáticos I
Sistemas Informáticos
El lenguaje PHP
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
Página Página
HTML HTML
internet
<P>Hola, Ana</P>
Introducción a PHP
<?PHP
$nombre = "Ana";
print ("<P>Hola, $nombre</P>");
?>
<P>Hola, Ana</P>
11
Sistemas Informáticos I
<?php
$txt1="Hello World!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>
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.";
?>
13
Sistemas Informáticos I
Sistemas Informáticos
Tipos de datos
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
Resultado:
El valor es: 5
15
Sistemas Informáticos I
Constantes
• Definición de constantes:
define (“CONSTANTE”, “hola”);
print CONSTANTE;
• No llevan $ delante
$a=1;
incrementa ($a);
print $a; // Muestra un 2
16
Sistemas Informáticos I
</BODY>
</HTML>
Sistemas Informáticos
Formularios: HTML+PHP
17
Sistemas Informáticos I
La función $_GET
http://www.eps.uam.es/welcome.php?fname=Alvaro&age=42
Welcome Alvaro!
You are 42 years old.
La función $_POST
http://www.eps.uam.es/welcome.php
Welcome Alvaro!
You are 42 years old.
18
Sistemas Informáticos I
La función $_REQUEST
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
<?PHP
$cadena = $_REQUEST[‘cadena’];
print ($cadena);
?>
<?PHP
$sexo = $_REQUEST[‘sexo’];
print ($sexo);
?>
20
Sistemas Informáticos I
<?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”);
?>
<?PHP
$actualizar = $_REQUEST[‘actualizar’];
if ($actualizar)
print ("Se han actualizado los datos");
?>
21
Sistemas Informáticos I
<?PHP
$username = $_REQUEST[‘username’];
print ($username);
?>
<?PHP
$clave = $_REQUEST[‘clave’];
print ($clave);
?>
22
Sistemas Informáticos I
<?PHP
$enviar = $_REQUEST[‘enviar’];
if ($enviar)
print ("Se ha pulsado el botón de enviar");
?>
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
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”);
?>
Comentario:
<TEXTAREA COLS=“50" ROWS=“4" NAME="comentario">
Este libro me parece ...
</TEXTAREA>
<?PHP
$comentario =
$_REQUEST[‘comentario’];
print ($comentario);
?>
24
Sistemas Informáticos I
<?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"];
}
?>
25
Sistemas Informáticos I
}
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
26
Sistemas Informáticos I
El formulario de PHP
o bien
if ($enviar == “procesar”)
Validación de formularios
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
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>
.....
29
Sistemas Informáticos I
• Verificar si existe
– <html>
<body>
<?php
if (isset($_COOKIE["user"]))
echo "Welcome " . $_COOKIE["user"] . "!<br />";
else
echo "Welcome guest!<br />";
?>
</body>
</html>
Sesiones
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
31