Documente Academic
Documente Profesional
Documente Cultură
Mdulo II
Pgina 1 de 65
Fundamentos Webs
Mdulo II
Portada ...................................................................................................................... 1
Pgina 2 de 65
Fundamentos Webs
Mdulo II
Pgina 3 de 65
Fundamentos Webs
Mdulo II
Pgina 4 de 65
Fundamentos Webs
Mdulo II
dominios
direcciones
IP
que
utilizan
PHP.
Pgina 5 de 65
Fundamentos Webs
Mdulo II
Podemos con una facilidad asombrosa enviar un e-mail a una persona o lista
parametrizando toda una serie de aspectos tales como el e-mail de procedencia,
asunto, persona a responder...
Otras funciones menos frecuentes pero de indudable utilidad para gestionar
correos electrnicos son incluidas en su librera.
Gestin de bases de datos
Resulta difcil concebir un sitio actual, potente y rico en contenido que no es
gestionado por una base de datos. El lenguaje PHP ofrece interfaces para el
acceso a la mayora de las bases de datos comerciales y por ODBC a todas las
bases de datos posibles en sistemas Microsoft, a partir de las cuales podremos
editar el contenido de nuestro sitio con absoluta sencillez.
Gestin de archivos
Crear, borrar, mover, modificar...cualquier tipo de operacin ms o menos
razonable que se nos pueda ocurrir puede ser realizada a partir de una amplia
librera de funciones para la gestin de archivos por PHP. Tambin podemos
transferir archivos por FTP a partir de sentencias en nuestro cdigo, protocolo
para el cual PHP ha previsto tambin gran cantidad de funciones.
Tratamiento de imgenes
Evidentemente resulta mucho ms sencillo utilizar Photoshop para una el
tratamiento de imgenes pero...Y si tenemos que tratar miles de imgenes
enviadas por nuestros internautas?
La verdad es que puede resultar muy tedioso uniformar en tamao y formato miles
de imgenes recibidas da tras da. Todo esto puede ser tambin automatizado
eficazmente mediante PHP.
Tambin puede parecer til el crear botones dinmicos, es decir, botones en los
que utilizamos el mismo diseo y solo cambiamos el texto. Podremos por ejemplo
crear un botn haciendo una nica llamada a una funcin en la que introducimos
el estilo del botn y el texto a introducir obteniendo automticamente el botn
deseado.
A partir de la librera de funciones graficas podemos hacer esto y mucho ms.
Muchas otras funciones pensadas para Internet (tratamiento de cookies, accesos
restringidos, comercio electrnico...) o para propsito general (funciones
matemticas, explotacin de cadenas, de fechas, correccin ortogrfica,
compresin de archivos...) son realizadas por este lenguaje. A esta inmensa
librera cabe ahora aadir todas las funciones personales que uno va creando por
necesidades propias y que luego son reutilizadas en otros sitios y todas aquellas
intercambiadas u obtenidas en foros o sitios especializados.
Pgina 6 de 65
Fundamentos Webs
Mdulo II
Qu es PHP?
Pgina 7 de 65
Fundamentos Webs
Mdulo II
Pgina 8 de 65
Fundamentos Webs
Mdulo II
Pgina 9 de 65
Fundamentos Webs
Mdulo II
Pgina 10 de 65
Fundamentos Webs
Mdulo II
Pgina 11 de 65
Fundamentos Webs
Mdulo II
Pgina 12 de 65
Fundamentos Webs
Mdulo II
Pgina 13 de 65
Fundamentos Webs
Mdulo II
Pgina 14 de 65
Fundamentos Webs
Mdulo II
Pgina 15 de 65
Fundamentos Webs
Mdulo II
Pgina 16 de 65
Fundamentos Webs
Mdulo II
Instalar PHP
Descargar PHP
Descargar la ltima versin estable de: http://www.php.net/downloads.php
Instalacin
Es un archivo comprimido con zip, asi que, logicamente ;) tenemos que
descomprimir (se llama php-4.0.2-Win32.zip). Vamos a crear, por ejemplo, un
directorio que se llame php, dentro del directorio apache que ya habiamos creado
anteriormente y lo descomprimimos alli. Siguiendo con la configuracin por defecto
que realizamos con apache, debe quedar asi:
Pgina 17 de 65
Fundamentos Webs
Mdulo II
Configuracin de PHP
1. Marcamos con el botn derecho del ratn el fichero php.ini-optimized para
editar el fichero con el bloc de notas.
2. Estamos editando el fichero php.ini-optimized, y necesitamos indicarle el
path a doc_root para que apunte a la raiz web de nuestro servidor (
C:\Archivos de programa\Apache Group\Apache\htdocs) y a
extension_dl
(que
es
C:\Archivos
de
programa\Apache
Group\Apache\php) para que apunte a donde hemos puesto php.
Pgina 18 de 65
Fundamentos Webs
Mdulo II
php3_crypt.dll
Funciones de criptografa
php3_dbase.dll
php3_dbm.dll
php3_filepro.dll
php3_gd.dll
Funciones de IMAP 4
php3_ldap.dll
Funciones de LDAP
php3_msql1.dll
Cliente de mSQL 1
php3_msql2.dll
Cliente de mSQL 2
php3_mssql.dll
php3_mysql.dll
Funciones de MySQL
Pgina 19 de 65
Fundamentos Webs
Mdulo II
php3_nsmail.dll
php3_oci73.dll
Funciones de Oracle
php3_snmp.dll
php3_zlib.dll
Funciones de ZLib
Configuracin de Apache
5. Ahora vamos a configurar apache para que pueda usar PHP. Vamos a su
directorio conf y, lo mismo que en el punto dos, marcamos con el boton
derecho del ratn el fichero httpd.conf para editar el fichero con el bloc de
notas.
Pgina 20 de 65
Fundamentos Webs
Mdulo II
Pgina 21 de 65
Fundamentos Webs
Mdulo II
Pgina 22 de 65
Fundamentos Webs
Mdulo II
Comprobacin
Con el mismo bloc de notas pulsamos Archivo . Nuevo . y escribimos solo esta
frase <? phpinfo(); ?> y pulsamos Archivo . Guardar (acordaros de la advertencia
que os he hecho en el punto 4 de como guardarlo eh?) le llamamos como
info.php (je, je, nuestro primer "programa") y lo guardamos en el directorio httdocs
de Apache (el directorio raiz donde parten las pginas web).
Ponemos en marcha el servidor Apache y abrimos el navegador (no hace falta que
estemos en Internet ahora). Ponemos en la barra del navegador
http://localhost/info.php.
Si no aparece esta pgina, entonces esta mal instalado el PHP y hay que
volverlo a instalar, aunque hay algunas ocasiones que se necesita reiniciar el
sistema para que funcione.
Introduccin a la Sintaxis PHP
PHP se escribe dentro de la propia pgina web, junto con el cdigo HTML y, como
para cualquier otro tipo de lenguaje incluido en un cdigo HTML, en PHP
necesitamos especificar cules son las partes constitutivas del cdigo escritas en
este lenguaje. Esto se hace, como en otros casos, delimitando nuestro cdigo por
etiquetas. Podemos utilizar distintos modelos de etiquetas en funcin de nuestras
Fundamentos Webs, Segunda Parte
Pgina 23 de 65
Fundamentos Webs
Mdulo II
Este ultimo modo est principalmente aconsejado a aquellos que tengan el valor
de trabajar con Front Page ya que, usando cualquier otro tipo de etiqueta,
corremos el riesgo de que la aplicacin nos la borre sin ms debido a que se trata
de un cdigo incomprensible para ella.
El modo de funcionamiento de una pgina PHP, a grandes rasgos, no difiere del
clsico para una pgina dinmica de lado servidor: El servidor va a reconocer la
extensin correspondiente a la pgina PHP (phtml, php, php4,...) y antes de
enviarla al navegador va a encargarse de interpretar y ejecutar todo aquello que
se encuentre entre las etiquetas correspondientes al lenguaje PHP. El resto, lo
enviara sin ms ya que, asumir que se trata de cdigo HTML absolutamente
comprensible por el navegador.
Otra caracterstica general de los scripts en PHP es la forma de separar las
distintas instrucciones. Para hacerlo, hay que acabar cada instruccin con un
punto y coma ";". Para la ultima expresin, la que va antes del cierre de etiqueta,
este formalismo no es necesario.
Un comentario, para aquellos que no lo sepan, es una frase o palabra que
nosotros incluimos en el cdigo para comprenderlo ms fcilmente al volverlo a
leer un tiempo despus y que, por supuesto, el ordenador tiene que ignorar ya que
no va dirigido a l sino a nosotros mismos. Los comentarios tienen una gran
utilidad ya que es muy fcil olvidarse del funcionamiento de un script programado
un tiempo atrs y resulta muy til si queremos hacer rpidamente comprensible
nuestro cdigo a otra persona.
Pues bien, la forma de incluir estos comentarios es variable dependiendo si
queremos escribir una lnea o ms. Veamos esto con un primer ejemplo de script:
<?
$mensaje="Tengo hambre!!"; //Comentario de una linea
echo $mensaje; #Este comentario tambin es de una linea
/*En este caso
mi comentario ocupa
Fundamentos Webs, Segunda Parte
Pgina 24 de 65
Fundamentos Webs
Mdulo II
Pgina 25 de 65
Fundamentos Webs
Mdulo II
imprimir(c)
El resultado de nuestro programa sera:
7
En PHP las variables se representan como un signo de pesos seguido por el
nombre de la variable. El nombre de la variable es sensible a minsculas y
maysculas.
$var = "Santana";
$Var = "Pedro";
echo "$var, $Var";
// produce la salida Santana, Pedro"
Dependiendo de la informacin que contenga, una variable puede ser considerada
de uno u otro tipo:
Variables numricas
Almacenan cifras
Enteros $entero=2002; Numeros sin decimales
Real
Variables alfanumricas
Almacenan textos compuestos de nmeros y/o cifras
Cadenas Almacenan variables alfanumricas $cadena="Hola amigo";
Tablas
Almacenan series de informaciones numricas y/o alfanumricas
$sentido[1]="ver";
$sentido[2]="tocar";
Arrays Son las variables que guardan las tablas $sentido[3]="oir";
$sentido[4]="gusto";
$sentido[5]="oler";
Objetos
Fundamentos Webs, Segunda Parte
Pgina 26 de 65
Fundamentos Webs
Mdulo II
Sin embargo si pedimos en nuestro script realizar una operacin matemtica con
esta variable, no obtendremos un mensaje de error sino que la variable cadena
ser asimilada a numrica:
<?
$cadena="5"; //esto es una cadena
$entero=3; //esto es un entero
echo
$cadena+$entero
?>
Ejecutar script
Este script dar como resultado "8". La variable cadena ha sido asimilada en
entero (aunque su tipo sigue siendo cadena) para poder realizar la operacin
matemtica. Del mismo modo, podemos operar entre variables tipo entero y real.
No debemos preocuparnos de nada, PHP se encarga durante la ejecucin de
interpretar el tipo de variable necesario para el buen funcionamiento del programa.
Sin embargo, en contraste, hay que tener cuidado en no cambiar maysculas por
minsculas ya que, en este sentido, PHP es sensible. Conviene por lo tanto
trabajar ya sea siempre en maysculas o siempre en minsculas para evitar este
tipo de malentendidos a veces muy difciles de localizar.
Variables asignadas por referencia
En PHP tambin podemos asignar variables por referencia. En ese caso no se les
asigna un valor, sino otra variable, de tal modo que las dos varialbles comparten
espacio en memoria para el mismo dato.
La notacin para asignar por referencia es colocar un "&" antes del nombre de la
variable.
Pgina 27 de 65
Fundamentos Webs
Mdulo II
<?php
$foo = 'Bob'; // Asigna el valor 'Bob' a $foo
$bar = &$foo; // Referencia $foo va $bar.
$bar = "Mi nombre es $bar"; // Modifica $bar...
echo $foo; // $foo tambin se modifica.
echo $bar;
?>
Esto dar como resultado la visualizacin dos veces del string "Mi nombre es Bob".
Algo como:
Mi nombre es BobMi nombre es Bob
Cambio del Tipo de Variable en PHP
PHP no requiere que indiquemos el tipo que va a contener una variable, sino que
lo deduce del valor que asignemos a la variable. Asimismo, se encarga de
actualizar automticamente el tipo de la variable cada vez que le asignamos un
nuevo valor.
Por ello, para cambiar el tipo de una variable simplemente le asignamos un valor
con un nuevo tipo.
Nota: Se excluyen en este caso el cambio de variables a tipo Array porque la
sintaxis puede resultar ambigua al expresar ese cdigo, es decir, puede darse el
caso de que una lnea de cdigo pueda significar dos cosas.
$a = "1";
//$a es una cadena
$a[0] = "f";
//Estamos editando el ndice de la cadena o forzando a array?
Forzado
En cualquier caso, podemos forzar una variable para que cambie de tipo con la
funcin setType().
setType($variable,"nuevo_tipo");
la funcin setType() actualiza el tipo de $variable a "nuevo_tipo" y devuelve un
boleano indicando si hubo xito o no en la conversin.
Entre "nuevo_tipo" tenemos:
Pgina 28 de 65
Fundamentos Webs
Mdulo II
"integer"
"double"
"string"
"array"
"object"
Tambin podemos hacer que una variable se comporte como un tipo determinado
forzndola, de la misma manera a como se hace en el lenguaje C.
$variable = "23";
$variable = (int) $variable;
Los forzados permitidos son:
(int), (integer) - fuerza a entero (integer)
(real), (double), (float) - fuerza a doble (double)
(string) - fuerza a cadena (string)
(array) - fuerza a array (array)
(object) - fuerza a objeto (object)
VARIABLES VARIABLES
A veces es conveniente tener nombres de variables variables. Dicho de otro
modo, son nombres de variables que se pueden establecer y usar
dinmicamente. Una variable normal se establece con una sentencia como:
$a = "Hola";
Una variable variable toma el valor de una variable y lo trata como el nombre de
una variable. En el ejemplo anterior, Hola, se puede usar como el nombre de
una variable utilizando dos signos de peso. Por .ejemplo.
$$a = "mundo";
Probemos las siguientes sentencias:
echo "$a ${$a}";
echo "$a $Hola";
Los dos no regresarn Hola mundo
Pgina 29 de 65
Fundamentos Webs
Mdulo II
Pgina 30 de 65
Fundamentos Webs
Mdulo II
Si la cadena est encerrada entre dobles comillas ("), las variables que estn
dentro de la cadena sern expandidas (sujetas a ciertas limitaciones de
interpretacin). Como en C y en Perl, el carcter de barra invertida ("\") se
puede usar para especificar caracteres especiales
Caracteres Protegidos (Caracteres Especiales)
\n Nueva lnea
\r Retorno de carro
\t Tabulacin horizontal
\\ Barra invertida
\$ Signo del dlar
\" Comillas dobles
\[0-7]{1,3} La secuencia de caracteres que coincida con la expresin
regular es un carcter en notacin octal
\x[0-9A-Fa La secuencia de caracteres que coincida con la expresin
regular es f]{1,2} un carcter en notacin hexadecimal
Operadores de Comparacin
$a < $b $a menor que $b
$a > $b $a mayor que $b
$a <= $b $a menor o igual que $b
$a >= $b $a mayor o igual que $b
$a == $b $a igual que $b
$a != $b $a distinto que $b
Operadores Lgicos
$a = $b Asigna a $a el contenido de $b
$a += $b Le suma a $b a $a
$a -= $b Le resta a $b a $a
$a *= $b Multiplica $a por $b y lo asigna a $a
$a /= $b Divide $a por $b y lo asigna a $a
$a .= $b Aade la cadena $b a la cadena $a
Para demostrar el uso de algunos operadores mostrar algunos ejemplos en PHP:
El siguiente programa calcula el salario de un trabajador con un impuesto
Pgina 31 de 65
Fundamentos Webs
Mdulo II
<html>
<body>
<?php
$SalarioTrabajador = 3500;
$Impuesto = 20; // Porcentaje
$SueldoReal = $SalarioTrabajador - (($SalarioTrabajador /
100) * $Impuesto);
echo Sueldo del trabajador sin impuesto:
$SalarioTrabajador<BR>;
echo Con el impuesto :$SueldoReal;
?>
</body >
</html>
Programa en PHP que calcula el rea de un triangulo cuya formula es a=(b*h)/2
<?php
$Base=15;
$Altura=12;
$Area = ($Base * $Altura)/2;
printf (El area del triangulo es: $Area);
?>
Constantes
PHP define varias constantes y proporciona un mecanismo para definir ms en
tiempo de ejecucin. Las constantes son como las variables, salvo por las dos
circunstancias de que las constantes deben ser definidas usando la funcin
define(), y que no pueden ser redefinidas ms tarde con otro valor.
Las constantes predefinidas (siempre disponibles) son:
__FILE__
El nombre del archivo de comandos que est siendo interpretado actualmente.
Si se usa dentro de un archivo que ha sido incluido o requerido, entonces se da
Fundamentos Webs, Segunda Parte
Pgina 32 de 65
Fundamentos Webs
Mdulo II
Pgina 33 de 65
Fundamentos Webs
Mdulo II
Pgina 34 de 65
Fundamentos Webs
Mdulo II
Pgina 35 de 65
Fundamentos Webs
Mdulo II
echo $otravariable;
}
Como vemos, con "global" se especifica que vamos a utilizar unas variables que
fueron declaradas como globales a la pgina. Una vez hecho esto, ya podemos
acceder a esas variables globales como si estuvieran declaradas dentro de la
funcin.
Cualquier alteracin que hagamos a las variables dentro de la funcin
permanecer cuando se haya salido de la funcin, tanto si accedemos a travs del
array $GLOBALS o declarando con "global" el uso de esas variables.
Tablas o Arrays en PHP
Un tipo de variable que ya hemos descrito pero puede ser relativamente
complicado a asimilar con respecto a la mayora son los arrays. Un array es una
variable que est compuesta de varios elementos cada uno de ellos catalogado
dentro de ella misma por medio de una clave.
En el captulos anteriores ponamos el ejemplo de un array llamado sentido que
contena los distintos sentidos del ser humano:
$sentido[1]="ver";
$sentido[2]="tocar";
$sentido[3]="oir";
$sentido[4]="gustar";
$sentido[5]="oler";
En este caso este array cataloga sus elementos, comunmente llamados valores,
por nmeros. Los nmeros del 1 al 5 son por lo tanto las claves y los sentidos son
los valores asociados. Nada nos impide emplear nombres (cadenas) para
clasificarlos. Lo nico que deberemos hacer es entrecomillarlos:
<?
$moneda["espana"]="Peseta";
$moneda["francia"]="Franco";
$moneda["usa"]="Dolar";
?>
Otra forma de definir idnticamente este mismo array y que nos puede ayudar
para la creacin de arrays ms complejos es la siguiente sintaxis:
Fundamentos Webs, Segunda Parte
Pgina 36 de 65
Fundamentos Webs
Mdulo II
<?
$moneda=array("espana"=> "Peseta","francia" => "Franco","usa" => "Dolar");
?>
Pgina 37 de 65
Fundamentos Webs
Mdulo II
hacemos por cuestiones de claridad, ya que nos permite ver qu partes del cdigo
estn incluidas dentro de otras. Es importante acostumbrarse a escribir de esta
forma del mismo modo que a introducir los comentarios ya que la claridad de los
scripts es fundamental a la hora de depurarlos. Un poco de esfuerzo a la hora de
crearlos puede ahorrarnos muchas horas a la hora de corregirlos o modificarlos
meses ms tarde.
Pasando ya al comentario del programa, como podis ver, ste nos permite
almacenar tablas y, a partir de una simple peticin, visualizarlas un determinado
valor en pantalla.
Lo que es interesante es que la utilidad de los arrays no acaba aqu, sino que
tambin podemos utilizar toda una serie de funciones creadas para ordenarlos por
orden alfabtico directo o inverso, por claves, contar el numero de elementos que
componen el array adems de poder movernos por dentro de l hacia delante o
atrs.
Muchas son las funciones propuestas por PHP para el tratamiento de arrays, no
vamos a entrar aqu en una descripcin de las mismas. Slo incluiremos esta
pequea tabla que puede ser complementada, si necesario, con la
documentacin que ya hemos mencionado.
Funcin
array_values (mi_array)
asort(mi_array) y arsort(mi_array)
count(mi_array)
ksort(mi_array) y krsort(mi_array)
Descripcin
Lista los valores contenidos en mi_array
Ordena por orden alfabtico directo o
inverso en funcin de los valores
Nos da el numero de elementos de nuestro
array
Ordena por orden alfabtico directo o
inverso en funcin de las claves
list ($variable1,
$variable2...)=mi_array
next(mi_array), prev(mi_array),
reset(mi_array) y end(mi_array)
each(mi_array)
Pgina 38 de 65
Fundamentos Webs
Mdulo II
Pgina 39 de 65
Fundamentos Webs
Mdulo II
Pgina 40 de 65
Fundamentos Webs
Mdulo II
Tenemos tambin a nuestra disposicin varias funciones que nos pueden ayudar a
aumentar el nmero de casillas de un arreglo.
array_push()
Inserta al final del array una serie de casillas que se le indiquen por parmetro. Por
tanto, el nmero de casillas del array aumentar en tantos elementos como se
hayan indicado en el parmetro de la funcin. Devuelve el nmero de casillas del
array resultante.
Veamos este cdigo donde se crea un arreglo y se aaden luego tres nuevos
valores.
<?
$tabla = array ("Lagartija", "Araa", "Perro", "Gato", "Ratn");
//aumentamos el tamao del array
array_push($tabla, "Gorrin", "Paloma", "Oso");
foreach ($tabla as $actual)
echo $actual . "<br>";
?>
Da como resultado esta salida:
Lagartija
Araa
Perro
Gato
Ratn
Gorrin
Paloma
Oso
array_merge()
Ahora vamos a ver cmo unir dos arrays utilizando la funcin array_merge(). A
sta se le pasan dos o ms arrays por parmetro y devuelve un arreglo con todos
los campos de los vectores pasados.
En este cdigo de ejemplo creamos tres arrays y luego los unimos con la funcin
array_merge()
<?
$tabla = array ("Lagartija", "Araa", "Perro", "Gato", "Ratn");
$tabla2 = array ("12","34","45","52","12");
$tabla3 = array ("Sauce","Pino","Naranjo","Chopo","Perro","34");
/aumentamos el tamao del array
Fundamentos Webs, Segunda Parte
Pgina 41 de 65
Fundamentos Webs
Mdulo II
Funciones en PHP
La funcin podra ser definida como un conjunto de instrucciones que explotan
ciertas variables para realizar una tarea ms o menos elemental.
Pgina 42 de 65
Fundamentos Webs
Mdulo II
PHP basa su eficacia principalmente en este tipo de elemento. Una gran librera
que crece constantemente, a medida que nuevas versiones van surgiendo, es
complementada con las funciones de propia cosecha dando como resultado un
sinfn de recursos que son aplicados por una simple llamada.
Lo que puede parecer ligeramente ms complicado, pero que resulta sin lugar a
dudas muy prctico, es crear nuestras propias funciones. De una forma general,
podramos crear nuestras propias funciones para conectarnos a una base de
datos o crear los encabezados o etiquetas meta de un documento HTML. Para
una aplicacin de comercio electrnico podramos crear por ejemplo funciones de
cambio de una moneda a otra o de calculo de los impuestos a aadir al precio de
articulo. En definitiva, es interesante crear funciones para la mayora de acciones
ms o menos sistemticas que realizamos en nuestros programas.
Aqu daremos el ejemplo de creacin de una funcin que, llamada al comienzo de
nuestro script, nos crea el encabezado de nuestro documento HTML y coloca el
titulo que queremos a la pgina:
<?
function hacer_encabezado($titulo)
{
$encabezado="<html>\n<head>\n\t<title>$titulo</title>\n</head>\n";
echo $encabezado;
}
?>
Pgina 43 de 65
Fundamentos Webs
Mdulo II
Estos archivos en los que se guardan las funciones se llaman libreras. La forma
de incluirlos en nuestro script es a partir de la instruccin require o include:
require("libreria.php") o include("libreria.php")
En resumen, la cosa quedara as:
Tendramos un archivo libreria.php como sigue
<?
//funcin de encabezado y colocacin del titulo
Function hacer_encabezado($titulo)
{
$encabezado="<html>\n<head>\n\t<title>$titulo</title>\n</head>\n";
echo $encabezado;
}
?>
Por otra parte tendramos nuestro script principal pgina.php (por ejemplo):
<?
include("libreria.php");
$titulo="Mi Web";
hacer_encabezado($titulo);
?>
<body>
El cuerpo de la pgina
</body>
</html>
Pgina 44 de 65
Fundamentos Webs
Mdulo II
Pgina 45 de 65
Fundamentos Webs
Mdulo II
Pgina 46 de 65
Fundamentos Webs
Mdulo II
Pgina 47 de 65
Fundamentos Webs
Mdulo II
Pgina 48 de 65
Fundamentos Webs
Mdulo II
Si se han entendido bien los conceptos, este ejemplo no puede resultar difcil. La
funcin recibe un parmetro llamado $porcentaje con 15 como valor por defecto.
Devuelve el porcentaje dado aplicado a la base tambin indicada por parmetro.
As pues, en la primera ejecucin de la funcin, como no se indica el porcentaje,
se mostrar el 15% de 1000. En la segunda, se muestra el 7% de mil y en la
tercera, el 0% de 10.
Retornar mltiples valores
Una funcin devuelve un nico valor. Si queremos hacer que se puedan devolver
varios valores distintos tenemos que recurrir a un truco que consiste en devolver
un array.
function small_numbers()
{
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
list() se usa para asignar una lista de variables en una sola operacin. Despus de
esa operacin, $zero valdr 0, $one valdr 1 y $two valdr 2.
Sentencias de Control
La programacin exige en muchas ocasiones la repeticin de acciones sucesivas
o la eleccin de una determinada secuencia y no de otra dependiendo de las
condiciones especficas de la ejecucin.
Como ejemplo, podramos hacer alusin a un script que ejecute una secuencia
diferente en funcin del da de la semana en el que nos encontramos.
Control del flujo en PHP: Condiciones IF
Cuando queremos que el programa, llegado a un cierto punto, tome un camino
concreto en determinados casos y otro diferente si las condiciones de ejecucin
difieren, nos servimos del conjunto de instrucciones if, else y elseif. La estructura
de base de este tipo de instrucciones es la siguiente:
if (condicin)
{
Instruccin 1;
Instruccin 2;
...
}
else
{
Instruccin A;
Instruccin B;
...
Fundamentos
Webs, Segunda Parte
}
Pgina 49 de 65
Fundamentos Webs
Mdulo II
Pgina 50 de 65
Fundamentos Webs
Mdulo II
Pgina 51 de 65
Fundamentos Webs
Mdulo II
nmero de veces. Para ello, utilizamos las estructuras llamadas en bucle que nos
ayudan a, usando unas pocas lneas, realizar una tarea incluida dentro del bucle
un cierto numero de veces definido por nosotros mismos.
PHP propone varios tipos de bucle cada uno con caractersticas especificas:
Bucle While
Sin duda el bucle ms utilizado y el ms sencillo. Lo usamos para ejecutar las
instrucciones contenidas en su interior siempre y cuando la condicin definida sea
verdadera. La estructura sintctica es la siguiente.
while (condicin)
{
instruccion1;
instruccion2;
...
}
Pgina 52 de 65
Fundamentos Webs
Mdulo II
$size=$size+1
Bucle Do While
Este tipo de bucle no difiere en exceso del anterior. La sintaxis es la siguiente:
do
{
instruccion1;
instruccion2;
...
}
La diferencia con respecto a los bucles while es que este tipo de bucle evala la
condicin al final con lo que, incluso siendo falsa desde el principio, ste se
ejecuta al menos una vez.
Bucle For
PHP est provisto de otros tipos de bucle que tambin resultan muy prcticos en
determinadas situaciones. El ms popular de ellos es el bucle for que, como para
los casos anteriores, se encarga de ejecutar las instrucciones entre llaves. La
diferencia con los anteriores radica en cmo se plantea la condicin de finalizacin
del bucle. Para aclarar su funcionamiento vamos a expresar el ejemplo de bucle
while visto en el captulo anterior en forma de bucle for:
<?
For ($size=1;$size<=6;$size++)
{
echo"<font size=$size>Tamao $size</font><br>\n";
}
?>
Pgina 53 de 65
Fundamentos Webs
Mdulo II
Break y Continue
Estas dos instrucciones se introducen dentro de la estructura y nos sirven
respectivamente para escapar del bucle o saltar a la iteracin siguiente. Pueden
resultarnos muy prcticas en algunas situaciones.
Pasar variables por la URL
Bucles y condiciones son muy tiles para procesar los datos dentro de un mismo
script. Sin embargo, en un sitio Internet, las pginas vistas y los scripts utilizados
son numerosos. Muy a menudo necesitamos que nuestros distintos scripts estn
conectados unos con otros y que se sirvan de variables comunes. Por otro lado, el
usuario interacciona por medio de formularios cuyos campos han de ser
procesados para poder dar una respuesta. Todo este tipo de factores dinmicos
han de ser eficazmente regulados por un lenguaje como PHP.
Pgina 54 de 65
Fundamentos Webs
Mdulo II
Es posible que ya habr notado que las variables de un script tienen una validez
exclusiva para el script y que nos resulta imposible conservar su valor cuando
ejecutamos otro archivo distinto aunque ambos estn enlazados. Existen varias
formas de enviar las variables de una pgina a otra de manera que la pgina
destino reconozca el valor asignado por el script de origen:
Pasar variables por URL
Para pasar las variables de una pgina a otra lo podemos hacer introduciendo
dicha variable dentro del enlace hipertexto de la pgina destino. La sintaxis sera
la siguiente:
<a href="destino.php?variable1=valor1&variable2=valor2&...">Mi enlace</a>
Puede observar que estas variables no poseen el smbolo $ delante. Esto es
debido a que en realidad este modo de pasar variables no es especfico de PHP
sino que es utilizado por otros lenguajes
Ahora nuestra variable pertenece tambin al entorno de la pgina destino.php y
est lista para su explotacin.
Para aclarar posibles dudas, veamos esto en forma de ejemplo. Tendremos pues
dos pginas, origen.html (no es necesario darle extensin PHP puesto que no hay
ningn tipo de cdigo) y destino.php
origen.html
<HTML>
<HEAD>
<TITLE>origen.html</TITLE>
</HEAD>
<BODY>
<a href="destino.php?saludo=hola&texto=Esto es una variable texto">Paso variables saludo y texto a la
pgina destino.php</a>
</BODY>
</HTML>
destino.php
<HTML>
<HEAD>
<TITLE>destino.php</TITLE>
</HEAD>
<BODY>
<?
echo "Variable \$saludo: $saludo <br>\n";
echo "Variable \$texto: $texto <br>\n"
?>
</BODY>
</HTML>
Pgina 55 de 65
Fundamentos Webs
Mdulo II
$HTTP_GET_VARS
Recordamos que es posible recopilar en una variable tipo array el conjunto de
variables que han sido enviadas al script por este mtodo a partir de la variable de
sistema $HTTP_GET_VARS, que es un array asociativo. Utilizndolo quedara
as:
<?
echo "Variable \$saludo: $HTTP_GET_VARS["saludo"] <br>\n";
echo "Variable \$texto: $HTTP_GET_VARS["texto"] <br>\n"
?>
Nota: Aunque podamos recoger variables con este array asociativo o utilizar
directamente las variables que se definen en nuestra pgina, resulta ms seguro
utilizar $HTTP_GET_VARS por dos razones, la primera que as nos aseguramos
que esa varible viene realmente de la URL y la segunda, que as nuestro cdigo
ser ms claro cuando lo volvamos a leer, porque quedar especificado que esa
variable estamos recibindola por la URL.
$_GET
A partir de la versin 4.1.0 de PHP se ha introducido el array asociativo $_GET,
que es idntico a $HTTP_GET_VARS, aunque un poco ms corto de escribir.
formulario.html
<HTML>
<HEAD>
<TITLE>formulario.html</TITLE>
</HEAD>
Fundamentos Webs, Segunda Parte
<BODY>
<FORM METHOD="POST" ACTION="destino2.php">
Nombre<br>
Pgina 56 de 65
Fundamentos Webs
Mdulo II
destino2.php
<HTML>
<HEAD>
<TITLE>destino2.php</TITLE>
</HEAD>
<BODY>
<?
echo "Variable \$nombre: $nombre <br>\n";
echo "Variable \$apellidos: $apellidos <br>\n"
?>
</BODY>
</HTML>
$HTTP_POST_VARS
Recordamos que es posible recopilar en una variable tipo array el conjunto de
variables que han sido enviadas al script por este mtodo a partir de la variable de
sistema $HTTP_POST_VARS.
echo "Variable \$nombre: " . $HTTP_POST_VARS["nombre"] . "<br>\n";
$_POST
A partir de PHP 4.1.0 se pueden recoger las variables de formulario utilizando
tambin el array asociativo $_POST, que es el mismo que $HTTP_POST_VARS,
pero ms corto de escribir.
Ejemplo de restriccin de acceso por edad
Para continuar aportando ejemplos al uso de formularios vamos a realizar una
pgina que muestra solicita la edad del visitante y, dependiendo de dicha edad,
Pgina 57 de 65
Fundamentos Webs
Mdulo II
Esta es una pgina sin ningn cdigo PHP, simplemente tiene un formulario.
Fijmonos en el action del formulario, que est dirigido hacia una pgina llamada
edad2.php, que es la que recibir el dato de la edad y mostrar un contenido u
otro dependiendo de ese valor. Su cdigo 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>
Pgina 58 de 65
Fundamentos Webs
Mdulo II
Esperamos que este otro cdigo tampoco resulte extrao. Simplemente se recibe
la edad, utilizando el array $_POST. Luego se muestra la edad y se ejecuta una
expresin condicional en funcin 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 pgina. En caso negativo (mayor o igual a 18) se muestra un
mensaje de bienvenida.
Autollamadas de Pginas
Al incluir un formulario en una pgina se debe indicar, a travs del atributo action,
el nombre del archivo PHP al que enviaremos los datos escritos en el formulario.
De este modo, para un esquema de envo de datos por formulario, pueden
participar dos pginas: una que contiene el formulario y otra que recibe los datos
de dicho formulario.
Lo mismo ocurre cuando enviamos variables por una URL. Tenemos una pgina
que contendr el enlace y otra pgina que recibir y tratar esos datos para
mostrar unos resultados.
Vamos a ver cmo se puede enviar y recibir datos de un formulario con una nica
pgina. Asimismo, veremos como en la misma pgina podemos tener enlaces con
paso de variables por URL y adems, podemos recoger y tratar esos datos con la
misma pgina. A este efecto podemos llamarte "autollamada de pginas", tambin
se le suele llamar como "Formularios reentrantes" o trminos similares. Es muy
interesante conocer el modo de funcionamiento de estos scripts, porque sern
muy habituales en nuestras pginas PHP y ayudan mucho a tener los cdigos
ordenados.
En ambos casos, para formularios o envo de datos por la URL, se debe seguir un
esquema como este:
-
Para un formulario
Veamos a continuacin como sera el cdigo de un formulario reentrante.
Pgina 59 de 65
Fundamentos Webs
Mdulo II
<html>
<head>
<title>Me llamo a mi mismo...</title>
</head>
<body>
<?
if (!$_POST){
?>
<form action="auto-llamada.php" method="post">
Nombre: <input type="text" name="nombre" size="30">
<br>
Empresa: <input type="text" name="empresa" size="30">
<br>
Telefono: <input type="text" name="telefono" size=14 value="+34 " >
<br>
<input type="submit" value="Enviar">
</form>
<?
}else{
echo "<br>Su nombre: " . $_POST["nombre"];
echo "<br>Su empresa: " . $_POST["empresa"];
echo "<br>Su Telfono: " . $_POST["telefono"];
}
?>
</body>
</html>
Pgina 60 de 65
Fundamentos Webs
<html>
<head>
</head>
Mdulo II
<title>Tablas de multiplicar</title>
<body>
<?
if (!$_GET){
for ($i=1;$i<=10;$i++){
echo "<br><a href='ver_tabla.php?tabla=$i'>Ver la tabla del $i</a>\n";
}
} else {
$tabla=$_GET["tabla"];
?>
<table align=center border=1 cellpadding="1">
<?
for ($i=0;$i<=10;$i++){
echo "<tr><td>$tabla X $i</td><td>=</td><td>" . $tabla * $i . "</td></tr>\n";
}
?>
</table>
<?
}
?>
</body>
</html>
Utilizacin de Cookies
Sin duda este trmino resultara familiar para muchos. Algunos lo habrn ledo u
odo pero no saben de qu se trata. Otros sin embargo sabrn que las cookies son
unas informaciones almacenadas por un sitio web en el disco duro del usuario.
Esta informacin es almacenada en un archivo tipo texto que se guarda cuando el
navegador accede al sitio web.
Pgina 61 de 65
Fundamentos Webs
Mdulo II
Es posible, por supuesto, ver estos archivos. Para abrirlos hay que ir al directorio
C:\Windows\Cookies
para
los
usuarios
de
IE
4+
o
a
C:\...\Netscape\Users\defaultuser para usuarios de Netscape. Como podr
comprobar, en la mayora de los casos la informacin que se puede obtener es
indescifrable.
La utilidad principal de las cookies es la de poder identificar al navegador una vez
ste visita el sitio por segunda vez y as, en funcin del perfil del cliente dado en
su primera visita, el sitio puede adaptarse dinmicamente a sus preferencias
(lengua utilizada, colores de pantalla, formularios rellenados total o parcialmente,
redireccin a determinadas pginas...)
Para crear un archivo cookies, modificar o generar una nueva cookie lo podemos
hacer a partir de la funcin SetCookie:
setcookie("nombre_de_la_cookie",valor,expiracion);
Pongamos un ejemplo sencillo. Imaginemos que queremos introducir en una
variable cookie el nombre del visitante. El nombre ha podido ser previamente
recogido por un formulario tal y como hemos visto:
setcookie("persona",$nombre,time()+86400*365);
De este modo hemos creado una cookie llamada persona que tiene como valor el
contenido de la variable $nombre y tendr una duracin de 1 ao a partir de su
creacin (el tiempo time() actual en segundos sumado a un ao en segundos).
Es importante que la creacin de la cookie sea previa a la apertura del documento
HTML. En otras palabras, las llamadas a la funcin setcookie() deben ser
colocadas antes de la etiqueta HTML.
Por otra parte, es interesante sealar que el hecho de que definir una cookie ya
existente implica el borrado de la antigua. Del mismo modo, el crear una primera
cookie conlleva la generacin automtica del archivo texto.
Para utilizar el valor de la cookie en nuestros scripts tan slo tendremos que llamar
la variable que define la cookie. Realmente sencillo!
Hay que tener cuidado sin embargo de no definir variables en nuestro script con el
mismo nombre que las cookies puesto que PHP privilegiar el contenido de la
variable local con respecto a la cookie y no dar un mensaje de error. Esto nos
puede conducir a errores realmente difciles de detectar.
Las cookies son una herramienta fantstica para personalizar nuestra pgina pero
hay que ser cautos ya que, por una parte, no todos los navegadores las aceptan y
por otra, se puede deliberadamente impedir al navegador la creacin de cookies.
Fundamentos Webs, Segunda Parte
Pgina 62 de 65
Fundamentos Webs
Mdulo II
Sesiones
En los programas que hemos visto hasta ahora, hemos utilizado variables que slo
existan en el archivo que era ejecutado. Cuando cargbamos otra pgina distinta,
los valores de estas variables se perdan a menos que nos tomsemos la molestia
de pasarlos por la URL o inscribirlos en las cookies o en un formulario para su
posterior explotacin. Estos mtodos, aunque tiles, no son todo lo prcticos que
podran en determinados casos en los que la variable que queremos conservar ha
de ser utilizada en varios scripts diferentes y distantes los unos de los otros.
Nos resulta pues necesario el poder declarar ciertas variables que puedan ser
reutilizadas tantas veces como queramos dentro de una misma sesin.
Imaginemos un sitio multilinge en el que cada vez que queremos imprimir un
mensaje en cualquier pgina necesitamos saber en qu idioma debe hacerse.
Podramos introducir un script identificador de la lengua del navegador en cada
uno de los archivos o bien declarar una variable que fuese valida para toda la
sesin y que tuviese como valor el idioma reconocido en un primer momento.
Pensemos tambin en un carrito de la compra de una tienda virtual donde el
cliente va navegando por las pginas del sitio y aadiendo los artculos que quiere
comprar a un carrito. Este carrito podra ser perfectamente una variable de tipo
array (tabla) que almacena para cada referencia la cantidad de artculos
contenidos en el carrito. Esta variable debera ser obviamente conservada
continuamente a lo largo de todos los scripts.
Este tipo de situaciones son solventadas a partir de las variables de sesin. Una
sesin es considerada como el intervalo de tiempo empleado por un usuario en
recorrer nuestras pginas hasta que abandona nuestro sitio o deja de actuar sobre
l durante un tiempo prolongado o bien, sencillamente, cierra el navegador.
PHP nos permite almacenar variables llamadas de sesin que, una vez definidas,
podrn ser utilizadas durante este lapso de tiempo por cualquiera de los scripts de
nuestro sitio. Estas variables sern especificas del usuario de modo que varias
variables sesin del mismo tipo con distintos valores pueden estar coexistiendo
para cada una de las sesiones que estn teniendo lugar simultneamente. Estas
sesiones tienen adems su propio identificador de sesin que ser nico y
especfico.
Algunas mejoras referentes al empleo de sesiones han sido introducidas con
PHP4. Es a esta nueva versin a la que haremos referencia a la hora de explicar
las funciones disponibles y la forma de operar. Para los programadores de PHP3
Fundamentos Webs, Segunda Parte
Pgina 63 de 65
Fundamentos Webs
Mdulo II
la diferencia mayor es que estn obligados a gestionar ellos mismos las sesiones
definir sus propios identificadores de sesin.
Para iniciar una sesin podemos hacerlo de dos formas distintas:
-
Las sesiones han de ser iniciadas al principio de nuestro script. Antes de abrir
cualquier etiqueta o de imprimir cualquier cosa. En caso contrario recibiremos un
error.
Con lo visto, vamos a proponer el ejemplo clsico de utilizacin de una sesin: un
contador. Este contador deber aumentar de una unidad cada vez que
recargamos la pgina o apretamos al enlace:
<?
session_register('contador');
?>
<HTML>
<HEAD>
<TITLE>contador.php</TITLE>
</HEAD>
<BODY>
<?
If (isset($contador)==0)
{$contador=0;}
++$contador;
echo "<a href=\"contador.php\">Has recargado esta pgina $contador veces</a>";
?>
</BODY>
</HTML>
Descripcin
Session_id()
Pgina 64 de 65
Fundamentos Webs
Session_destroy()
Mdulo II
Pgina 65 de 65