Sunteți pe pagina 1din 151

Desarrollo de aplicaciones web con PHP y MySQL

El lenguaje PHP

Miguel A. Redondo Crescencio Bravo Ana Isabel Molina


Grupo CHICO Escuela Superior de Informtica Ciudad Real

El lenguaje PHP
Objetivos
Conocer las caractersticas bsicas de las aplicaciones desarrolladas con PHP y situarlas frente a otras tecnologas Adquirir conocimientos y destreza bsica para utilizar PHP en
Aplicaciones web dinmicas Formularios Acceso a bases de datos

Conocer otras posibilidades de PHP


2

Contenidos
Introduccin Instalacin de APACHE, PHP, MySQL Instalacin de FoxServ Sintaxis bsica del lenguaje PHP PHP y Formularios Web Acceso a bases de datos con PHP Gestin de sesiones con PHP Seguridad con PHP

Introduccin

Introduccin
Pginas web estticas
Archivos HTML almacenados en un servidor Poca o nula interaccin del usuario Informacin que vara con muy poca frecuencia Mantenimiento de la informacin modificando documentos HTML

Introduccin
Pginas web dinmicas
HTML generado automticamente en el servidor y en tiempo de ejecucin Programas en el servidor cuya respuesta vara segn la peticin, fecha, ... Aplicaciones tipo
Peridico online Aplicacin de comercio electrnico Enciclopedia Buscador
6

Introduccin
Generacin de webs dinmicas
Generacin a partir de opciones en la peticin
Ejecucin de programas en el servidor Interaccin con el usuario

Acceso a bases de datos


Generacin de la pgina web segn los contenidos de una BD Mantenimiento mediante modificacin de los contenidos de la base de datos
7

Tecnologas
Common Gateway Interface: CGI Lenguajes de script
Software libre: PHP Microsoft: ASP

Tecnologa Java: JSP Otros

CGIs
Especificacin para transferir informacin entre un servidor web y un programa ejecutable Protocolo para envo y recepcin de datos Recepcin
Entrada estndar Variables de entorno que crea el servidor antes de llamar al CGI

Envo: salida estndar


Cabecera de tipo MIME: content-type: [tipo] Cuerpo de los datos
9

Funcionamiento de CGIs
Internet

Cliente W eb (Brows er)

[ HTTP ]

[ HTTP ]

Servidor Web (Apac he, IIS ...)

CGI

Otras Fuentes de Datos

Docum. HTML

B ase de Datos
10

Activacin de un CGI
Servidor
Recibe URL Determina el archivo al que referencia Si es html (ext. .html, .htm, etc.) Lo enva al cliente que hace la peticin Si_no Si es un programa (ext. .cgi o directorio especfico)
Se ejecuta en el sistema Enva el resultado de la ejecucin al cliente

Si_no
Otros

Fin_Si Fin_si
11

Lenguajes para CGI


Cualquier lenguaje Los ms utilizados
Perl Python C C++ Tcl Bourne Shell Visual Basic
12

Ejemplo de CGI

13

CGIs y Bases de Datos


Utilizacin de las bibliotecas BDI y DBD
Interfaz para el envo de comandos SQL a una base de datos BDI independiente de la base de datos DBD dependiente de la base de datos

14

CGIs y Bases de Datos


Internet

Cliente W eb (Browser)

[ HTTP ]

[ HTTP ]

Servidor Web (Apache, IIS...)

Inter faz DBI CGI Mdulo DBI Interfaz DBD Otras Fuentes de Datos Docum. HTML

Modulo DBD para Oracle

Modulo DBD Postgres

Modulo DBD para MySQL Interfaz del Driver del Fabricante

Dr iver de O racle

Driver de Postgres

Driver de MySQ L Interfaz Propietario

BD Oracle

BD PostGres

BD MySQL

15

Discusin sobre CGIs


Ventajas
Simplicidad Independencia: lenguaje de prog. y serv. web

Desventajas
Las comunicaciones permanecen abiertas hasta que se genera el resultado Cada programa consume un nuevo proceso (o hilo) en el servidor Problemas de seguridad
Llamadas al shell que pueden degenerar en ataques al sistema
16

Lenguajes de Script

Peticin pgina PHP, ASP... Cliente W eb (Browser) Documen to HTM L estndar Servidor Web (Apache, IIS...)

Pgina Pgina Dinm ica Dinmica M otor Lenguaje Script

(PHP,ASP...) (PHP,ASP...)

Pginas HTML

Otras Fuentes de Datos

Base de Datos

17

El lenguaje PHP
Personal Home Page Tools (PHP) Ejecucin de scripts en el servidor: interpretado Creado por Rasmus Lerdorf (1994) Alternativa a la programacin CGI/Perl Se ejecutan en el contexto (proceso) del servidor web
Mdulo de extensin a un servidor web Posibilidad de utilizacin de mltiples hilos

Idneos para servidores que soportan gran volumen de usuarios Orientado a conexiones entre pginas web y diferentes servidores de bases de datos
18

Entorno de ejecucin de PHP


Peticin de URL.php

<HTML>...</HTML> Navegador Web

Servidor Web

Mdulo de PHP

Base de Datos

Otros Servicios

19

Otros comentarios sobre PHP


Software libre Conexin nativa a mltiples bases de datos
Eficiencia
Las operaciones se resuelven en el mismo espacio de memoria asignado a PHP

Posibilidad de comunicacin con otros procesos


Sistema UNIX Deamons

Portado a multitud de plataformas y servidores


20

ASP
Active Server Pages (ASP) Disponible por primera vez con IIS 3.0 Cdigo Visual Basic Script que genera dinmicamente archivos HTML que se envan al cliente Permite el acceso a objetos y componentes en el servidor (Sistemas Windows) Ejecucin en el mismo proceso servidor Funcionalmente equivalente a PHP Lenguaje propietario
21

Funcionamiento de ASP
Peticin de URL.asp

<HTML>...</HTML> Navegador Web

Servidor Web

Intrprete Visual Basic Script

Componentes Active X

Otros Servicios

Base de Datos
22

Otros comentarios sobre ASP


Funcionamiento razonable sobre IIS de Microsoft Conexin a bases de datos con ODBC y objetos COM
Mayor tiempo de ejecucin

Lenguajes de programacin VBScript y Jscript ASP .NET


Mltiples lenguajes de programacin

23

JSP
Tecnologa Java de SUN Java Server Pages (JSP)
Alternativa a PHP o ASP

Servlets
Programacin Java en servidor Acepta peticiones y genera resultados (html, acceso a datos, etc.)

JDBC
Acceso directamente a bases de datos relacionales Pude utilizarse sobre ODBC
24

Funcionamiento de JSP
Peticin de URL.jsp

<HTML>...</HTML> Navegador Web

Servidor Web

Motor de Servlets

Servlets

Pginas JSP

Servicios J2EE

Base de Datos

Otros Servicios

25

Funcionamiento de JSP
Una pgina JSP pasa por tres etapas en la evolucin de su cdigo:
Cdigo fuente JSP (.jsp) Cdigo fuente Java (.java) Clase Java compilada (.class)
26

Otras tecnologas: NSAPI e ISAPI


NSAPI
API proporcionado por el servidor de Netscape

Objetivo
Resolver el problema de rendimiento de los CGI Los script se cargan como parte del servidor Acceso a todos los recursos del servidor

ISAPI
Microsoft Internet Information Server API

Caractersticas
Flexibilidad y potencia Problemas de seguridad Poca portabilidad: limitado a cada tipo de servidor Los API son propietarios
27

Otras tecnologas: CACH y CSP


CACH
Motor de Datos Multidimensional Arquitectura de Datos Unificada Base de Datos PostRelacional

28

Otras tecnologas: CACH y CSP Cach Server Pages (CSP)


Tecnologa integrada en Cach

Browser

Web Server
Gateway de Cach

Cach Server

29

En este curso
APACHE
Servidor ms utilizado en el mundo

PHP
Seguridad Facilidad para conexin a bases de datos

MySQL
Soporte SQL Libre disposicin Muy potente para bases de datos de tamao medio

30

Instalacin de APACHE, PHP, MySQL

Instalacin en Linux
Paquetes necesarios
Apache: www.apache.org MySQL: www.mysql.com PHP: www.php.net

32

Instalacin en Linux
Procedimiento (pude depender de la distribucin que utilicemos)
Descompresin de paquetes Compilar MySQL Instalar MySQL Creacin de las BBDD del sistema Iniciar el servidor de MySQL Configuracin de Apache para compilacin, activando el mdulo para PHP Definicin de extensiones para tratarlas con PHP Probar Apache + PHP
33

Instalacin de FoxServ

Otras alternativas
FoxServ
Completo y eficiente paquete que instala Apache, PHP, Zend Optimizer, MySQL y PhpMyAdmin en Windows Lo hace de una sola vez No requiere configurar los componentes de forma independiente Todos los componentes se instalan en un directorio con subdirectorios para cada paquete

35

FoxServ
En la ltima pantalla de la instalacin nos permitir seleccionar la opcin de ejecutar el Apache y dirigir el navegador a http://localhost y ver si se ha instalado todo correctamente.

Administracin de MySQL
http://localhost/phpMyAdmin

36

Sintaxis bsica del lenguaje PHP

Sintaxis bsica de PHP


Es sensible a las maysculas Las instrucciones se separan con un ; como en C. Comentarios: como en C, /* */ y // Insercin en documento HTML
<?PHP ... ?> <?= expresin ?>
equivale a <? echo expresin ?>

La marca final ?> implica un ;


38

Sintaxis bsica de PHP


Sentencias para impresin echo
muestra una o ms cadenas echo cadena1 [, cadena2];

echo Hola mundo; echo Hola , mundo; print


muestra una cadena print cadena;

print Hola mundo; print Hola . mundo;


39

Ejemplo PHP

<?php phpinfo(); ?>


40

Ejemplo PHP
<html> <head> <title>Example</title> </head> <body>

<?php echo "Hola, Esto es PHP";?>


</body> </html>
41

Ejemplos PHP
<html> <body> <?php print "Hello, world."; ?> </body> </html>

<?php print print print print print ?>

"<html>"; "<body>"; "Hello, world."; "</body>"; "</html>";

42

Sintaxis bsica de PHP


Sugerencia
Intentar generar cdigo HTML fcilmente legible
print (<P>Prrafo 1</P>); print (<P>Prrafo 2</P>);

Cdigo PHP

<P>Prrafo 1</P><P>Prrafo 2</P>

Cdigo HTML

Prrafo 1

Salida
Prrafo 2

Poco legible
43

Sintaxis bsica de PHP


Sugerencia
Utilizacin del carcter \n para generar cdigo HTML fcilmente legible
Cdigo PHP
print (<P>Prrafo 1</P>\n); print (<P>Prrafo 2</P>\n);

Cdigo HTML

<P>Prrafo 1</P> <P>Prrafo 2</P>

Salida

Prrafo 1 Prrafo 2

44

Sintaxis bsica de PHP


Utilizacin de archivos externos para ser evaluados
include()
En caso de error produce un warning

require()
En caso de error produce un error fatal Se usa cuando debe interrumpirse la carga de la pgina en caso de error

45

Ejemplo de PHP
<HTML> <HEAD> <TITLE>Ttulo</TITLE> <?PHP // Incluir bibliotecas de funciones require ("$libdir/conecta.php"); require ("$libdir/fecha.php"); require ("$libdir/cadena.php"); require ("$libdir/globals.php"); ?>

<HTML> <HEAD> <TITLE>Ttulo</TITLE> </HEAD> <BODY> <?PHP include ("cabecera.html"); ?> // Cdigo HTML + PHP . . . <?PHP include ("pie.html"); ?> </BODY> </HTML>
46

Tipos de datos en PHP


Tipos primitivos
boolean, integer, double, string array, object resource, NULL

Las variables no suelen ser tipificadas


El tipo se decide en tiempo de ejecucin en funcin del contexto y ste puede variar

47

Tipos de datos en PHP


Funciones para tipos de datos
gettype()
devuelve el tipo de una variable

is_type: funciones para comprobar el tipo


is_array() is_bool() is_float() is_integer() is_null() is_numeric() is_object() is_resource() is_scalar(), is_string()

var_dump()
Muestra el tipo y el valor de una variable til con los arrays
48

Tipos de datos en PHP


Consideraciones sobre el tipo String
Las cadenas se encierran entre comillas
Simples
Admite los caracteres de escape \ y \\ No se produce expansin de las variables print a vale $a; // muestra a vale $a

Dobles
Admite ms caracteres de escape, como \n, \r, \t, \\, \$, \ Permite la expansin de las variables print a vale $a; // muestra a vale 9

Acceso a los caracteres de una cadena tratndola como un array


$inicial = $nombre{0};
49

Tipos de datos en PHP


Consideraciones sobre el tipo Array
Indexados y asociativos Sintaxis:
array ([clave =>] valor, ...) La clave es una cadena o un entero no negativo. El valor puede ser de cualquier tipo vlido en PHP

Funciones relacionadas
Creacin: list(), array() Ordenacin: asort(), arsort(), ksort(), rsort(), sort() Otras funciones: count(), next(), prev(), each()

50

Tipos de datos en PHP


Consideraciones sobre el tipo Array
Ejemplos:
$color = array (rojo=>101, verde=>51, azul=>255); $medidas = array (10, 25, 15);

Acceso:
$color[rojo] $medidas[0] El primer elemento es el 0

51

Tipos de datos en PHP


Conversiones entre tipos

52

Variables en PHP
Nombres
Identificador precedido de un $ El identificador comienza por letra o subrayado, seguido de letras, nmeros o subrayado Sensibles a las maysculas Las variables siempre se asignan por valor En PHP4 existen asignaciones por referencia (&).

Predefinidas
Unas creadas por el servidor y otras por PHP $GLOBALS, $_SERVER, $_GET, $_POST, $_COOKIES, $_FILES, $_ENV, $_REQUEST, $_SESSION Lista completa: phpinfo()

53

Variables en PHP
mbito
Similar a C o a Perl Globales al fichero o locales a la funcin

Variables variables
Variables con un nombre no fijo
$a = "hola"; $$a = "mundo"; $a con valor hola $hola con valor mundo

Variables externas
Variables de los formularios HTML Cookies
54

Constantes en PHP
Nombre
No llevan $ como primer carcter

Definicin
Slo se pueden definir constantes de los tipos escalares (boolean, integer, double, string) Se utiliza la funcin define()
define (CONSTANTE, hola); print CONSTANTE;

No pueden ser redefinidas

Algunas predefinidas
PHP_VERSION: Versin de PHP PHP_OS: Sistema operativo del cliente TRUE: Verdadero FALSE: Falso

55

Constantes en PHP
<?php define("CONSTANTE", "hello world."); echo CONSTANTE; ?>

56

Expresiones en PHP
Cualquier cosa que pueda proporcionar un valor como consecuencia de su evaluacin
Variables Constantes Funciones

Combinacin de expresiones mediante operadores Sintaxis similar al lenguaje C

57

Operadores en PHP

58

Operadores en PHP
Algunos especiales
Operador de control de error @
Antepuesto a una expresin, evita cualquier mensaje de error que pueda ser generado por la expresin Captura el valor de error generado

Operadores de cadenas
concatenacin . (punto) asignacin con concatenacin .=

operador de identidad = = =
Igualdad en valor y tipo

59

Operadores en PHP
Ejemplo de uso del operador @
<?php $res = @mysql_query( select nombre from clientes") or die ("Error en la seleccin, '$php_errormsg'"); ?>

60

Estructuras de control en PHP

61

IF ELSE ELSE IF
Comportamiento como en C Las sentencias compuestas se encierran entre llaves
if (expresin_1) sentencia_1 else if (expresin_2) sentencia_2 ... else if (expresin_n) sentencia_n else sentencia_n+1

62

SWITCH
Comportamiento como en C la expresin puede ser integer, float o string
switch (expresin) { case valor_1: sentencia_1 break; case valor_n: sentencia_n break; default sentencia_n+1 }
63

Ejemplos con IF
if( $a > $b ) echo "a es mayor que b"; elseif( $a == $b ) echo "a es igual a b"; else echo "a es menor que b"; # UTILIZACION DE LLAVES if( $a >= $b ) { echo "a es mayor o igual que b"; $mayor = $a; } else { echo "a es menor que b"; $mayor = $b; }
64

Ejemplos con IF
<H1>Listado de ventas</H1> <? if( $orden == "fecha" ) ?> <P>Ordenadas por <B>fecha</B></P> <? elseif ( $orden == "producto" ) ?> <P>Ordenadas segn el <B>nombre</B> del producto</P> <? endif; ?>

65

WHILE
Comportamiento como en C while (expresin) sentencia
$a = 10; echo "Cuenta regresiva ...\n"; while($a > 0) { echo $a-- ."\n"; } echo "Cero !!!";
66

DO WHILE
Comportamiento como en C do
sentencia

while (expresin)
$a = 10; echo "Cuenta regresiva ...\n"; do { echo $a-- . "\n"; } while( $a > 0 ); echo "Cero !!!";
67

FOR
Comportamiento como en C
for (expresin1; expresin2; expresin3) sentencia # Cuadrados for($a=1;$a<=10;$a++) { echo El cuadrado de $a es; echo ($a * $a) . \n; }

68

Ejercicio
Desarrollar un programa en PHP que permita construir y mostrar una tabla de multiplicar. El nmero de tabla estar definido por una constante. Desplegar el programa para que sea accesible desde la web. Retocar la presentacin combinando PHP y HTML para lograr un buen aspecto.
69

Ejemplo con FOR


# Tabla de multiplicar for($a=1;$a<=10;$a++) { echo "Tabla del $a\n"; for($b=1;$b<=10;$b++) { echo "$a por $b es ; echo ($a * $b) . "\n"; }; echo "-----\n"; }
70

FOREACH
Permite iterar sobre arrays Cada elemento del array supone una iteracin Sintaxis
foreach (expresin_array as $valor) sentencia foreach (expresin_array as $clave => $valor) sentencia

71

Ejemplo con FOREACH


$color = array(rojo=>101, verde=>51); foreach ($color as $valor) print Valor: $valor<BR>\n; foreach ($color as $clave => $valor) print Clave: $clave; Valor: $valor<BR>\n;

Salida
Valor: Valor: Clave: Clave: 101 51 rojo; Valor: 101 verde; Valor: 51
72

Ejemplo con FOREACH


$tblApellidos["juan"] = "perez"; $tblApellidos["pedro"] = "gonzalez"; foreach($tblApellidos as $nombre => $apellido) { echo "$apellido, $nombre\n"; };

73

Funciones en PHP
Definicin por parte del usuario
Palabra reservada function

Declaracin
Antes de ser referenciadas

Paso de parmetros
Por defecto se pasan por valor Con PHP4 se puede forzar paso por referencia Se pueden emplear parmetros con argumentos por defecto
Deben ser siempre los ltimos en la funcin
74

Ejemplo de funciones
Definicin
function suma ($x, $y) { $s = $x + $y; return $s; } $a=1; $b=2; $c = suma ($a, $b); print $c;
75

Ejemplo de funciones
Paso por referencia
function incrementa (&$a) { $a = $a + 1; } $a=1; incrementa ($a); print $a; // Qu muestra?

76

Ejemplo de funciones
Argumentos por defecto
function mTitulo($titulo = "Sr."){ print "Estimado $titulo:\n"; } mTitulo (); mTitulo ("Prof.");

Salida
Estimado Sr.: Estimado Prof.:
77

Ejemplo de funciones
Argumentos por defecto
function hacerCafe($tipo="capuchino"){ return "he hecho un caf $tipo\n"; } echo hacerCafe(); echo hacerCafe(expreso);

78

Funciones en PHP
Devolucin de valores
Pueden devolver cualquier nmero de valores Hay que efectuar una correcta recepcin de estos valores

Ejemplo
function numeros(){ return array(0,1,2); } list ($cero, $uno, $dos) = numeros();
79

Funciones en PHP
Funciones variables
<?php function foo() { echo "En foo()<br>\n" } function bar ($arg ='') { echo "bar(); El argumento ha sido '$arg'.<br>\n" } $func = 'foo'; $func(); $func='bar'; $func('test'); ?>
80

Funciones en PHP
Bibliotecas de funciones
Algunos ejemplos:
Funciones de manipulacin de cadenas Funciones de fecha y hora Funciones de arrays Funciones de ficheros Funciones matemticas Funciones de bases de datos Funciones de red

Algunas bibliotecas requieren la instalacin de componentes adicionales Documentadas en manual de referencia de PHP 81

Ejercicios
Modificar el programa de la tabla de multiplicar para que la tabla que muestre se corresponda con el da actual Desarrollar un programa en PHP que, utilizando funciones definidas por el usuario y funciones de biblioteca, muestre la fecha actual en formato
Da 4 de julio de 2005

82

PHP y Formularios Web

Acceso a formularios con PHP


Objetivo
Acceso a programa PHP Ejecucin dependiente de los valores introducidos en un formulario Web Intercambio de informacin
Web/HTML Servidor Web Servidor de datos

84

Acceso a formularios con PHP


Ejemplo sencillo

85

Acceso a formularios con PHP


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

Fichero dos.php

<HTML> <BODY> <?PHP print (La edad es: $edad); ?> </BODY> </HTML>
86

Acceso a formularios con PHP


Notas sobre versiones
A partir de PHP 4.2.0
valor por defecto de la directiva register_globals es off No es posible acceder a las variables enviadas de la manera anterior (como variables globales). Hay que utilizar la variable predefinida $_REQUEST,
$_REQUEST[edad] en lugar de $edad

Altenativa
Poner register_globals = on en php.ini No es recomendable por motivos de seguridad Sugerencia
$edad = $_REQUEST[edad];
87

Elementos de formularios y PHP


Tipo INPUT
TEXT RADIO CHECKBOX BUTTON FILE HIDDEN PASSWORD SUBMIT

SELECT
Simple / mltiple

TEXTAREA
88

Formularios y PHP: TEXT


Introduzca la cadena: <INPUT TYPE="text" NAME="cadena" VALUE=una cadena" SIZE="20">

<?PHP print ($cadena); //print ($_REQUEST [cadena]); ?>

89

Formularios y PHP: RADIO


<INPUT TYPE="radio" NAME="titulo" VALUE=II CHECKED>I.Informtica <INPUT TYPE="radio" NAME="titulo" VALUE="ITIG">I.T.I. Gestin <INPUT TYPE="radio" NAME="titulo" VALUE="ITIS">I.T.I. Sistemas

<?PHP print ($titulo); //print ($_REQUEST [titulo]); ?>

90

Formularios y PHP: CHECKBOX


<INPUT TYPE="checkbox" NAME="extras[]" VALUE="garaje" CHECKED>Garaje <INPUT TYPE="checkbox" NAME="extras[]" VALUE="piscina">Piscina <INPUT TYPE="checkbox" NAME="extras[]" VALUE="jardin">Jardn

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

91

Formularios y PHP: BUTTON


<INPUT TYPE="button" NAME="nueva" VALUE="Aadir ms">

<?PHP if ($nueva) print ("Se va a aadir una ms"); //if ($_REQUEST [nueva]) //print ("Se va a aadir una nueva"); ?>

92

Formularios y PHP: FILE


<FORM ACTION="procesa.php" METHOD="post ENCTYPE="multipart/form-data"> <INPUT TYPE="file" NAME=archivo"> </FORM>

93

Formularios y PHP: HIDDEN


<?PHP print(<INPUT TYPE=hidden NAME=username VALUE=$usuario>\n); ?>

<?PHP print ($username); //print ($_REQUEST [username]); ?>


94

Formularios y PHP: PASSWORD


Contrasea: <INPUT TYPE="password" NAME="clave">

<?PHP print ($clave); //print ($_REQUEST [clave]); ?>

95

Formularios y PHP: SUBMIT


<INPUT TYPE="submit" NAME="enviar VALUE="Enviar datos"> <?PHP if ($enviar) print ("Se ha pulsado el botn de enviar"); //if ($_REQUEST [enviar]) // print ("Se ha pulsado el botn de enviar"); ?>

96

Formularios y PHP: SELECT


SIMPLE
<SELECT NAME="titulacion"> <OPTION VALUE="II" SELECTED>Ingeniera Informtica <OPTION VALUE="ITIG">Ing. Tc. en Informtica de Gestin <OPTION VALUE="ITIS">Ing. Tc. en Informtica de Sistemas </SELECT>

<?PHP print ($titulacion); //print ($_REQUEST [titulacion]); ?>


97

Formularios y PHP: SELECT


MLTIPLE <SELECT MULTIPLE SIZE="3" NAME="idiomas[]"> <OPTION VALUE="ingles" SELECTED>Ingls <OPTION VALUE="frances">Francs <OPTION VALUE="aleman">Alemn <OPTION VALUE="holandes">Holands </SELECT> <?PHP $n = count ($idiomas); for ($i=0; $i<$n; $i++) print ($idiomas[$i]<BR>\n); //foreach ($_REQUEST[idiomas] as $idioma) //print ($idioma<BR>\n); ?>
98

Formularios y PHP: TEXTAREA


<TEXTAREA COLS=30" ROWS=4" NAME="comentario"> Este libro me parece ... </TEXTAREA>

<?PHP print ($comentario); //print ($_REQUEST [comentario]); ?>

99

Ejercicio (I)
Disear y programar una pgina Web que contenga un formulario en el que se pidan datos sobre nombre, apellidos y direccin de email. Adems, mediante una lista de opciones se debe poder seleccionar un nmero.

100

Ejercicio (II)
El formulario se procesar mediante un programa en php, y mostrar una nueva pgina con los datos introducidos (la direccin de email como un link), y la tabla de multiplicar correspondiente al nmero seleccionado en la lista anterior.
101

Ejercicio (III)
<html><body> <?php print "Estimado Sr/a. " . $nombre . " print $apellido1 . " " . $apellido2; print "<br>"; print "<a href=mailto:\"" . $email . "\"> print $email . "</a>"; print "<br><br>"; print "Ha elegido la tabla del " . $tabla; print "<br><br>"; for ($a=1; $a<=10; $a++) echo "$tabla * $a = " . ($tabla * $a) . "<br>"; ?> </body> </html>
102

Ejercicio
Disear una pgina Web que contenga un formulario que incorpore todos los tipos de elementos de entrada de informacin presentados anteriormente (excepto BUTTON y FILE). Construir un programa php que acceda a los datos de estos elementos y genere una pgina web que los muestre.
103

Formularios y PHP
Esquema de programacin
Utilizacin de un nico programa Muestra el formulario o lo procesa dependiendo de si ha sido enviado o no Ventajas
Esto disminuye el nmero 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

Fin
104

Formularios y PHP
Cmo determinar si se ha enviado el formulario o no?
Consultar la variable correspondiente al botn de envo
<INPUT TYPE="SUBMIT" NAME="enviar VALUE="procesar">

Consulta
if (isset($enviar)) ... if ($enviar == procesar) ...

105

Ejercicio
Construir un programa php que permita mostrar y procesar un formulario como el siguiente

106

Envo de archivos
Consideraciones
Utilizacin de FILE Debe tener el atributo
ENCTYPE="multipart/form-data

El archivo tiene un lmite de tamao El lmite se puede fijar


En el archivo de configuracin php.ini En el formulario

Hay que asignar un nombre al archivo diferente al de los enviados previamente


Como norma general, descartar el nombre original y crear uno nuevo/nico

El archivo enviado se almacena en un directorio temporal


Para moverlo al directorio de destino se utiliza la funcin move_upload_file()
107

Envo de archivos
Limitacin de tamao en php.ini
;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. file_uploads = On ; Temporary directory for HTTP uploaded files (will use ; system default if not specified). ;upload_tmp_dir = ; Maximum allowed size for uploaded files. upload_max_filesize = 2M

108

Envo de archivos
Limitacin de tamao en el formulario <INPUT TYPE=HIDDEN NAME=MAX_FILE_SIZE VALUE='102400 > <INPUT TYPE=FILE NAME=archivo">

109

Envo de archivos
Ms informacin
Acceso a la variable $_FILES o $HTTP_POST_FILES $_FILES[nombre_archivo']['name']
Nombre original del archivo en el cliente

$_FILES[' nombre_archivo ']['type']


Tipo mime del archivo. Por ejemplo, "image/gif"

$_FILES[' nombre_archivo ']['size']


Tamao en bytes del archivo

$_FILES[' nombre_archivo ']['tmp_name']


Nombre del archivo temporal del servidor en el que se almacena

$_FILES[' nombre_archivo]['error']
Cdigo de error
110

Envo de archivos
Procedimiento general SI se ha enviado correctamente el archivo Asignar un nombre Mover a su ubicacin definitiva SI NO Mostrar un mensaje de error FIN
111

Envo de archivos
Ejemplo de procedimiento
if (is_uploaded_file ($_FILES['imagen']['tmp_name'])) { $nombreDirectorio = "img/"; $idUnico = time(); $nombreFichero = $idUnico . "-" . $_FILES['imagen']['name']; move_uploaded_file ( $_FILES['imagen']['tmp_name'], $nombreDirectorio . $nombreFichero ); } else print ("No se ha podido subir el archivo\n");

112

Ejercicio
Construir un programa php que permita mostrar y procesar un formulario mediante el que se pueda gestionar una lista de archivos de imgenes (gif o jpg). El programa debe permitir:
Mostrar un formulario para aadir un nuevo archivo junto con un texto Procesar el envo
Asignacin de nombre en servidor Localizacin Presentacin de la imagen y del texto asociado
113

Acceso a MySQL con PHP

CONEXIONES A BBDD
Estados de una conexin
Funcin connection_status() Normal (0) Aborted (1) Timeout (2)
set_time_limit()

Procedimiento de acceso a una base de datos


conectar a servidor de bases de datos seleccionar base de datos realizar consulta cerrar la conexin
115

DATOS DE PHP A MySQL (I)


Formulario HTML para recogida de datos
<html> <body> <form action=submitform.php3 method=GET> First Name: <input type=text name=first_name size=25 maxlength=25> Last Name: <input type=text name=last_name size=25 maxlength=25> <p> <input type=submit> </form> </body> </html>
116

DATOS DE PHP A MySQL (II)


Script PHP
<html> <body> <?php mysql_connect (localhost, username, password); mysql_select_db (dbname); mysql_query ( "INSERT INTO tablename (first_name, last_name) VALUES ('$first_name', '$last_name') "); print ($first_name); print (" "); print ($last_name); print ("<p>"); print ("Thanks for submitting your name."); ?> </body> </html>
117

DATOS DE MySQL A PHP (I)


Formulario HTML para bsqueda indexada
<html><body> <form action=searchform.php method=GET> Search For: <p> First Name: <input type=text name=first_name size=25 maxlength=25><p> Last Name: <input type=text name=last_name size=25 maxlength=25><p> <input type=submit> </form> </body></html>

118

DATOS DE MySQL A PHP (II)


Script PHP
<html> <body> <?php mysql_connect (localhost, username, password); mysql_select_db (dbname); if ($first_name == "") { $first_name = '%'; } if ($last_name == "") { $last_name = '%'; } $result = mysql_query ( "SELECT * FROM tablename WHERE first_name LIKE '$first_name%' AND last_name LIKE '$last_name% ");
119

DATOS DE MySQL A PHP (II)


Script PHP (cont.)
if ($row = mysql_fetch_array($result)) { do { print $row["first_name"]; print (" "); print $row["last_name"]; print ("<p>"); } while($row = mysql_fetch_array($result)); } else {print "Sorry, no records were found!";} ?> </body> </html>
120

DATOS DE MySQL A PHP (III)


Consideraciones
mysql_fetch_array()
Extrae la primera fila de los resultados de una consulta Sucesivas llamadas con el mismo argumento proporcionan las siguientes filas de la consultas

121

Algo de SQL
CREATE TABLE tabla (campo1 tipo (tamao), campo2 tipo (tamao), ..., ) SELECT Campos FROM Tabla; SELECT Campos FROM tabla WHERE condicin; INSERT INTO Tabla (campo1, campo2, .., campoN) VALUES (valor1, valor2, ..., valorN); DELETE Tabla.* FROM Tabla WHERE condicin; UPDATE Tabla SET Campo1 = Valor1, Campo2 = Valor2, ... CampoN = ValorN WHERE condicin;

122

Func. de PHP para MySQL (I)


mysql_affected_rows: Obtiene el nmero de tuplas modificadas en la ltima operacin MySql. mysql_change_user: Modifica el usuario responsable de las operaciones. mysql_close: Cierra la conexin MySql. mysql_connect: Abre una conexin con un servidor de MySQL. mysql_create_db: Crea una base de datos en el gestor de Bases de Datos.

123

Func. de PHP para MySQL (II)


mysql_data_seek: Realiza un movimiento en el puntero de los datos resultado. mysql_db_query: Realiza una consulta a una base de datos. mysql_drop_db: Realiza una operacin Drop sobre una base de datos. mysql_errno: Devuelve un cdigo de error relacionado con la ltima operacin MySql realizada.
124

Func. de PHP para MySQL (III)


mysql_error: Devuelve el mensaje de error asociado a un cdigo concreto relacionado con la ltima operacin MySql realizada. mysql_fetch_array: Introduce el resultado en un array asociativo. mysql_fetch_field: Devuelve un objeto con la informacin de un resultado. mysql_fetch_lengths: Obtener la longitud de los resultados.
125

Func. de PHP para MySQL (IV)


mysql_fetch_object: Devuelve el resultado como un objeto. mysql_fetch_row: Devuelve el resultado como un array. mysql_field_name: Devuelve el nombre de un campo especificado en un resultado. mysql_field_seek: Asigna el puntero de los resultados a una posicin determinada. mysql_field_table: Obtiene el nombre de la tabla de un campo especificado.
126

Func. de PHP para MySQL (V)


mysql_field_type: Obtiene el tipo de un campo especificado. mysql_field_flags: Obtiene los "Flags" asociados del campo especificado. mysql_field_len: Obtiene las longitud de un campo especificado. mysql_free_result: Libera la memoria de los resultados. mysql_insert_id: Obtiene el identificador de la ltima operacin INSERT.
127

Func. de PHP para MySQL (VI)


mysql_list_fields: Lista los campos resultado. mysql_list_dbs: Lista las bases de datos disponibles en el servidor MySQL. mysql_list_tables: Lista las tablas de una base de datos MySql. mysql_num_fields: Obtiene el nmero de campos del resultado. mysql_num_rows: Obtiene el nmero de lneas del resultado.
128

Func. de PHP para MySQL (VII)


mysql_pconnect: Abre una conexin permanente con una base de datos. mysql_query: Enva una consulta SQL a MySQL. mysql_result: Obtiene los datos resultados. mysql_select_db: Selecciona una base de datos MySql. mysql_tablename: Obtiene el nombre de la tabla de un campo.
129

Gestin de sesiones con PHP

Utilizacin de sesiones
Justificacin
Mantenimiento del estado de una conexin entre distintas pginas Ejemplos
aplicaciones personalizadas carrito de la compra control de acceso

Permiten disponer de variables con valores persistentes durante toda la conexin


Pueden almacenarse en el cliente (cookies) o en el servidor
131

Utilizacin de sesiones
sesin

VARIABLE Variable_1 Variable_2

VALOR Valor_1 Varlor_2


Variables de sesin

Variable_n

Valor_n

132

Utilizacin de sesiones
Funciones de PHP
session_start ()
Inicializa una sesin Le asigna un identificador de sesin nico Si la sesin ya est iniciada, carga todas las variables de sesin

session_register (variable)
Registra una variable de sesin

session_unregister (variable)
Elimina una variable de sesin

session_is_registered (variable)
Comprueba si una variable est registrada Devuelve true en caso afirmativo y false en caso contrario

session_destroy ()
Cierra una sesin
133

Utilizacin de sesiones
Procedimiento general
Todas las pginas asociadas a una sesin deben realizar una llamada a session_start() para cargar las variables de dicha sesin La llamada debe estar colocada antes de cualquier cdigo HTML Conviene llamar a session_destroy() para cerrar la sesin y liberar recursos

134

Utilizacin de sesiones
Autenticacin de usuarios
A nivel de servidor (Apache) A nivel de aplicacin (PHP + base de datos)
Mayor flexibilidad Tabla de usuarios
Nombre y contrasea encriptada $salt = substr ($usuario, 0, 2); $clave_crypt = crypt ($clave, $salt);

Autenticacin
Registro de variable

Acceso a una pgina de la aplicacin


Comprobacin de que la variable anterior est registrada

135

Utilizacin de sesiones
Autenticacin de usuarios

136

Cookies
Cookies HTML
Cualquier cookie que se enva a un cliente se convierte en un variable PHP La funcin SetCookie() se utiliza para asignar cookies La funcin debe ser llamada antes de empezar a crear la pgina
Forma parte de la cabecera

$count++; setCookie(&quotcount",$count;, time()+3600); SetCookie("Visita[$count]","$valor",time()+3600);

137

Seguridad con PHP

Seguridad
Introduccin
Importante
Utilizar versiones actualizadas de Apache y PHP

Vulnerabilidades ms importantes en PHP


Variables globales Nombres de archivos Envo de ficheros Bibliotecas Datos enviados desde formularios
139

Variables globales
Creacin automtica de variables globales
Activacin de register_globals en php.ini Datos de los formularios y de las cookies

Problemas
Generacin incontrolada de variables Adquisicin de privilegios de superusuario como consecuencia de alguna variable

Soluciones
register_globals = off Inicializacin de variables antes de usarlas Orden en la creacin de variables globales
140

Variables globales
Inicializacin de variables
Utilizacin de la directiva error_reporting=E_ALL en php.ini
Se genera un aviso cuando se usa una variable que no ha sido previamente inicializada

En un entorno de produccin debe evitarse la aparicin de mensajes de aviso o error


Para ello se utilizan las siguientes directivas en php.ini:
display_errors = off log_errors = on error_log = /var/log/php_errors.log

141

Variables globales
Orden en la generacin de variables
Generacin de variables
Entorno (E) Cookies (C) Servidor (S) GET (G) y POST (P)

La directiva variables_order controla el orden de generacin


Por defecto es EGPCS

Permitir la creacin de variables globales desde parmetros GET y POST y desde cookies es potencialmente peligroso. Un posible valor para variables_order que evita esto es ES Para acceder a los parmetros de los formularios y a las cookies se deben utilizar los arrays globales $_REQUEST, $_GET, $_POST y $_COOKIES
142

Nombres de los archivos


Consideraciones
Posibilidad de referenciar a algo no deseado
include (/usr/local/lib/bienvenida/$username); Este cdigo pretende mostrar un mensaje de bienvenida personalizado para el usuario qu ocurrira si el usuario introduce como username la cadena ../../../../etc/passwd? Se mostrara el archivo de passwords del sistema
143

Nombres de los archivos


Consideraciones
Las funciones include() y require() admiten nombres de archivos remotos
Puede provocar la ejecucin de cdigo mal intencionado procedente de otro servidor

Se puede desactivar la funcionalidad de acceso a archivos remotos con la siguiente directiva en php.ini
allow_url_fopen = off

Otra precaucin frente nombres de archivos incorrectos es la directiva de open_basedir


PHP limitar las operaciones sobre ficheros al directorio especificado y sus subdirectorios
open_basedir = /alguna/ruta include (/alguna/ruta/lib.inc); // permitido include (/otra/ruta/lib.inc); // error

144

Envo de archivos
Consideraciones
El usuario puede enviar cualquier archivo al servidor que luego podra ejecutar Recomendacin
Evitar utilizar el nombre enviado por el navegador Generar un nombre nico

Sobre el tamao de los archivos


Aunque se limite el tamao mximo en el formulario, los archivos se reciben automticamente y luego se verifican
Posibilidad de ataque de denegacin de servicio por saturacin del sistema de archivos

Utilizacin de la directiva post_max_size de php.ini


El valor por defecto suele ser ms elevado de lo necesario
145

Bibliotecas
Consideraciones
Conviene almacenar los archivos de bibliotecas de funciones fuera de la raz del directorio que contiene los documentos a publicar en web
Evitamos que puedan ser accedidos por su URL Indicar a PHP la ubicacin de los archivos indicando la ruta completa en los include() y require() o bien mediante la directiva include_path en php.ini

Esto es particularmente importante cuando en el cdigo de la biblioteca aparecen passwords, como es el caso de las funciones de conexin con bases de datos
146

Bibliotecas
Consideraciones
Conviene almacenar los archivos de bibliotecas de funciones fuera de la raz del directorio que contiene los documentos a publicar en web
Evitamos que puedan ser accedidos por su URL Indicar a PHP la ubicacin de los archivos indicando la ruta completa en los include() y require() o bien mediante la directiva include_path en php.ini

Esto es particularmente importante cuando en el cdigo de la biblioteca aparecen passwords, como es el caso de las funciones de conexin con bases de datos
147

Formularios
Recomendaciones
Validar todos los datos provenientes de formularios para asegurarse de que los valores recibidos son los esperados Cualquier informacin del exterior debe considerarse como posiblemente contaminada y debe ser verificada antes de ser utilizada Por ejemplo una variable puede contener cdigo HTML
La funcin htmlspecialchars() impide que se interpreten los caracteres especiales de HTML (<, >, &)
148

Comentarios finales
Recomendaciones generales
Estudiar los requerimientos de las aplicaciones Configurar y ajustar adecuadamente PHP a travs del archivo php.ini Seguir unas buenas prcticas en la programacin

149

Referencias

Referencias bibliogrficas
http://www.php.net http://www.apache.org http://www.mysql.org http://www.lsi.us.es/cursos/cursophp/ http://w3.one.net/~jhoffman/sqltut.htm http://www.wtwebwizard.com/tutorials/mysql http://www.otri.us.es/php-mysql/manual/manual_pag_01.htm http://www.programacion.net/cursos/php/mysql.htm http://www.programacion.net/cursos/php/access.htm http://www.pageimpact.com/soporte_online/php.php3 http://www.angelfire.com/al/acs/bd.html http://www.find-script.com/scripts/PHP3/ http://wwwdi.ujaen.es/php/manual/manual.html http://geneura.ugr.es
151

S-ar putea să vă placă și