You are on page 1of 299

2

Mini biografa
Alf redo Limongi trabaja actualmente como desarrollador para
ForenSy s Caribbean (anteriormente Vision Interconnect). Lder
mundial en sof tware para el mercado de recopilacin f orense
para compaas de seguros.

Su tray ectoria incluy e ms de v einticinco aos de programacin


de los cuales al menos diez han estado dedicados a la
programacin en PHP.
Paralelamente a su activ idad prof esional, ha dictado dif erentes
cursos de programacin Web para no iniciados, producto de los
cuales ha recopilado y preparado una serie de libros didcticos
sobre programacin de los cuales f orma parte el presente
material.

Curs sus estudios de computacin en la prestigiosa


Univ ersidad Central de Venezuela, en Caracas.

Tabla de contenidos
INTRODUCCION GENERAL
COMO USAR ESTE LIBRO?
NOMENCLATURA USADA
CAPITULO I - Conceptos bsicos
Introduccin
Qu es PHP?
Por qu usar PHP?
Cmo f unciona una pgina Web?
Cmo f unciona el direccionamiento de pginas en
Internet?
Qu es un Serv idor de Internet?
Qu es un URL?
CAPITULO II - Una breve introduccin de HTML
Introduccin
Qu es HTML?
Estructura de una pgina bsica en HTML
Etiquetas bsicas
Atributos en las etiquetas
Trabajando con tablas
Otras maneras de organizar la inf ormacin
Manejo de f ormularios
La etiqueta input y sus mltiples f ormas
Consideraciones f inales

CAPITULO III - Bases de PHP


Introduccin
Antes de comenzar
Estructura general de un programa en PHP
Variables
Constantes
Simbologa utilizada para explicar la sintaxis
Operadores
CAPITULO IV - Estructuras de control
Introduccin
Qu son las estructuras de control?
Estructuras condicionales
Estructuras iterativ as
Incluy endo Programas en otros programas
CAPITULO V - Funciones de usuario
Introduccin
Funciones de usuario
Para qu usar f unciones?
Sintaxis de una f uncin
Uso de una f uncin
Alcance de las v ariables y parmetros de una f uncin
Tipos de pases de parmetros
Omitiendo parmetros
CAPITULO VI - Trabajando con arreglos
Introduccin
Arreglos en PHP
Inicializando arreglos
Recorriendo arreglos
6

CAPITULO VII - Cadenas de caracteres


Introduccin
Trabajando con textos
Operadores de asignacin y concatenacin
Comparando cadenas de caracteres
Funciones para el manejo de textos
Variables auto expansiv as
CAPITULO VIII - Trabajando con bases de datos
Introduccin
Qu es una base de datos?
Como escoger una base de datos
Arquitectura de una aplicacin Web con base de datos
El lenguaje SQL
Trabajando con bases de datos desde PHP
Trabajando con My SQL
CAPITULO IX - Variables globales y sper globales
Introduccin
Variables globales
Variables sper globales
CAPITULO X - Manejo de Cookies
Introduccin
Qu es una cookie?
Usando cookies en PHP
CAPITULO XI - Manejo de sesiones
Introduccin
Qu es una sesin?
7

Sesiones en nuestra v ida cotidiana: Los cajeros


automticos
Sesiones en PHP
Funciones PHP para el manejo de sesiones
Propagando el cdigo de sesin
CONSIDERACIONES FINALES

Introduccin general
El mundo que v iv imos en la actualidad no se parece al que
exista hace diez o quince aos. Repentinamente nos hemos
encontrado con que todos estamos interconectados. Cada da
es ms dif cil imaginar el que una persona pueda ejercer su
prof esin cualquiera que ella sea- sin que utilice un computador
personal o algn otro tipo de dispositiv o para realizar u organizar
sus tareas.

Adicionalmente, las redes sociales han v enido a reinv entar el


modo en que nos relacionamos con los dems. Las noticias dan
la v uelta al mundo en minutos sin necesidad de reporteros ni
medios de comunicacin tradicionales.
Este nuev o mundo que se est desarrollando, necesita renov ar
completamente su base tecnolgica a una v elocidad
desconocida hasta ahora. Las nuev as tecnologas aparecen y
desaparecen a una gran v elocidad. Hay un mundo pidiendo
programas all af uera. Est hambriento. Es una gran
oportunidad para todos los que se preparen para alimentarlo.

El mundo Web ha pasado de ser un ambiente donde las grandes


empresas se mostraban a uno donde todos mostramos y todos
consumimos. Ya el mercado de los programadores en general, y
el de los programadores Web en particular, no es solo un
conjunto determinado de empresas poderosas. El mercado est
en todas partes, y las necesidades son de todos los tamaos.

Aprender a hacer pginas Web en el mundo de hoy es colocarse


en el centro del molino por donde est pasando toda la
10

produccin de estos tiempos.


Por otra parte, al contrario de lo que muchos pudieran pensar, no
se requiere ser un genio para poder programar. Ese mito lo
hemos creado nosotros mismos con la idea de mantener
nuestro club tan pequeo como sea posible y as poder disf rutar
en exclusiv a de este v asto mercado.
La programacin de hoy en da, y en particular la programacin
Web, requiere de ms persev erancia que sabidura, de ms
sentido comn que conceptos av anzados, de ms ganas que de
talento.

Este libro pretende ser la puerta para que muchos de ustedes


entren en el f ascinante mundo de la programacin. Un mundo
lleno de oportunidades y de buenas recompensas, donde no
solo el mejor se queda con la presa. Hay bastantes presas para
todos, y estn all af uera esperando por gente como nosotros.

11

12

Cmo usar este libro?


Este libro est div idido en once captulos que de manera
progresiv a v an adentrando al lector menos experimentado en el
mundo de la programacin.

Al principio de cada captulo se muestra un pequeo resumen de


los temas que se v an a abordar a lo largo del mismo.
Adicionalmente, para f acilitar la lectura de aquellos con
experiencia prev ia en otros lenguajes, hemos decidido incluir
notas que ay udan a stos a saber cundo una seccin pudiera
ser saltada sin perder inf ormacin relev ante.
El primer captulo comienza con una brev e explicacin de lo que
es el lenguaje PHP, e inmediatamente pasa a explicar uno por
uno los conceptos que pudieran ser necesarios para abordar los
siguientes captulos.

El segundo captulo est dedicado por completo al lenguaje


HTML. Aquellos lectores que posean conocimiento prev io de
este lenguaje, bien podran av anzar directamente al captulo
siguiente sin perder la secuencia de la narracin del libro.

A partir del tercer captulo comienza en s el trabajo en PHP. La


secuencia ha sido trabajada cuidadosamente para permitir a los
no v ersados en la programacin obtener el mximo prov echo.
Hemos incluido una buena cantidad de ejemplos cortos a lo
largo del libro con la idea de que el lector pueda comprender lo
que se explica sin necesidad de adentrarse a rev isar decenas
13

de lneas de programacin para ello. El nf asis del texto lo


hemos puesto en la pedagoga de lo que of rece el lenguaje y
como utilizarlo. Los ejemplos estn colocados cuidadosamente
al serv icio de ese objetiv o.

14

15

20

Qu es PHP?
Aunque en los ltimos aos se ha hecho un v erdadero esf uerzo
para hacer de l un lenguaje multipropsito, puede decirse que
PHP es f undamentalmente un lenguaje de programacin Web
del lado del serv idor, es decir, uno que permite escribir o alterar
pginas de Internet cuando estas no han abandonado an el
equipo desde el que son despachadas. Veamos cmo es eso.
Una pgina Web es f undamentalmente una serie de comandos
escritos en un lenguaje llamado HTML, acompaados de
archiv os multimedia (f otograf as, v ideos, audio, etc.) que puede
ser desplegada a trav s de un programa nav egador (o browser).
Adems, la misma pgina puede o no contener comandos
escritos en otros lenguajes ms especf icos como JavaScript,
VBScript o CSS, los cuales se encargan de alterar el estilo y el
comportamiento general de la pgina.
Al escribir una pgina Web en HTML, estamos de algn modo
organizando una serie de contenidos para que sean v istos de
una cierta manera. Esos contenidos, que pueden ser f otos,
textos, enlaces, entre otros, habrn de ser mostrados de la
misma manera a todo el que cargue en su nav egador nuestra
pgina. Siempre el mismo contenido y siempre de una misma
manera.
Si queremos hacer que la pgina muestre contenidos distintos,
y no queremos reescribirla cada v ez, podramos hacer que los
21

Sistema operativ o del equipo donde este alojada tu sitio Web si


f uese necesario.
PHP es a la v ez simple y poderoso. Su sintaxis basada en
lenguaje C le proporciona una gran f lexibilidad. Adems te
permite programar usando una sintaxis bsica o hacer
complejos sistemas basados en objetos.
Si has trabajado antes con el lenguaje C, o algn lenguaje
basado en esta sintaxis, v as a aprender ms f cilmente. Si no
lo has hecho an, no te asustes. Vers como luego de leer unas
pocas pginas, estars hablando un C bsico. Hacerlo
f luidamente v a a depender de ti. Al igual que con cualquier
idioma.

24

Cmo funciona una pgina Web?


Una pgina Web no es muy distinta a un documento escrito en
Word o un PDF. En el f ondo, es una serie de instrucciones y
contenidos armados para que un tipo de programa especf ico
pueda leerlo y mostrarlo adecuadamente. En el caso de un
documento del tipo DOC, el programa que lo lee es Microsoft
Word (entre otros), si hablamos de un PDF, lo abrimos usando
Acrobat Reader, pero en el caso de una pgina Web, usamos un
nav egador como Firefox, Internet Explorer, Opera, Chrome,
Safari entre otros.
La pgina Web puede estar guardada en un CD o en el disco
duro de tu propio computador, o ms comnmente, llega hasta
nosotros a trav s de Internet luego de escribir en el nav egador
una cierta direccin.

25

Cmo funciona el direccionamiento


de pginas en Internet?
La manera como Internet se las arregla para serv irle a millones
de personas, millones de pginas simultneamente es
f ascinante. No es algo que tengas que saber para poder publicar
tus propios contenidos, pero te lo podemos explicar f cilmente.
Internet est compuesto por millones de computadores
distribuidos alrededor del mundo interconectados a trav s de los
protocolos TCP/IP. En pocas palabras puede decirse que TCP/IP
permite comunicar dos dispositiv os a trav s del env o de
paquetes de inf ormacin sin importar el tipo de sistema
operativ o de las partes.
Ahora bien, el direccionamiento de los dispositiv os a trav s de
TCP/IP se hace a trav s de una serie de nmeros, las f amosas
direcciones IP, que son cuatro grupos cif ras entre 0 y 255
(llamadas octetos) separadas por puntos. Ese mecanismo
f unciona a trav s de la red muy ef icientemente, es decir,
permite localizar muy v elozmente un equipo sin importar en que
parte del planeta est, pero es terriblemente engorroso para que
un usuario se v alga de l para acceder a contenidos. Solo
tendramos que imaginarnos lo que f uese nav egar por Internet
si en v ez de escribir www.google.com o www.yahoo.es en
nuestros nav egadores, nos v iramos f orzados a escribir
74.125.299.48 o 77.238.178.122.
Para ello existen una serie de serv idores distribuidos en todo el
planeta que hacen las v eces de diccionarios de direcciones. Son
26

los llamados serv idores DNS. Ellos se encargan de traducir una


direccin solicitada por un usuario en una direccin IP.
Para que el sistema de direccionamiento DNS f uncione, se
requiere que todos los dominios registrados tengan una direccin
IP f ija en la cual ubicarlos. Sin embargo, los usuarios de
Internet, es decir los clientes, no necesitan ser ubicados, as
que sus direcciones IP bien podran cambiar constantemente lo
que se conoce como IPs dinmicas.

27

34

37

39

49

Atributos en las etiquetas


Hasta ahora hemos utilizado las etiquetas solo para indicar
dnde empieza y dnde termina una caracterstica, o donde
ejecutar una accin como un salto de lnea, pero en general, las
etiquetas son un poco ms complejas y no solo indican que
hacer sino como hacerlo. Para ello debemos explicar lo que es
un atributo dentro de una etiqueta.

Tomemos por ejemplo el comando que sirv e para mostrar una


imagen: <img>. Esta etiqueta no tendra ninguna utilidad si no
pudisemos decirle cual imagen mostrar. Para ello, se incluy e
un atributo especial llamado src. El modo de usarla es el
siguiente:
<img src=mi imagen.jpg />

En general, para asignarle un v alor a un atributo dentro de una


etiqueta debemos usar el signo igual y colocar el v alor entre
comillas. Aunque el uso de las comillas simples y dobles es
permitido en HTML siempre que se en cada caso se abra y se
cierre usando una sola de ellas, y o recomiendo usar siempre
comillas simples en HTML, y a que al comenzar a trabajar con
PHP, v eremos que las comillas dobles son de ms utilidad all
que en HTML.
Veamos algunos ejemplos:

La etiqueta <img>
50

Otras maneras de organizar la


informacin
Para poder organizar la inf ormacin en la pgina sin utilizar
tablas existen div ersos mecanismos. A continuacin
exploraremos superf icialmente los principales:

La etiqueta <div>
Es quizs el mtodo ms recomendado para organizar la
inf ormacin. Consta de dos etiquetas <div> y </div> que en
combinacin con ciertos atributos de estilo (usando CSS)
pueden lograr prcticamente cualquier resultado que desees.
Al colocar parte de la inf ormacin dentro de un bloque tipo
<div>, el nav egador usualmente parecer insertar un salto de
lnea antes y despus del contenido. As que en su f orma ms
simple, un div no es ms que una seccin horizontal de la
pgina. Sin embargo, existen maneras de decirle a una seccin
div la cantidad de exacta espacio v ertical y horizontal que
deseamos que abarque, as como el color de f ondo y hasta
darle un estilo nico a todo lo contenido dentro de ellos. Todo
esto, como y a hemos mencionado, se hace a trav s de CSS.

Las zonas def inidas por div, pueden colocarse unas dentro de
otras, as que podramos usar un div que abarque toda la
62

pgina, dentro de l uno para encabezado y otro para el cuerpo


y dentro del cuerpo def inir dos o tres secciones cada uno con
sus caractersticas independientes.

Una opcin adicional, y quizs la que lo hace ms f uncional, es


poder organizar los bloques horizontalmente utilizando, una v ez
ms, CSS. De esta manera podemos pensar toda nuestra
pgina como una serie de cuadros inv isibles de distintos
tamaos dentro de los cuales poner nuestros contenidos.

La etiqueta <span>
Esta etiqueta permite agrupar una cierta cantidad de inf ormacin
para darle un estilo comn. A dif erencia del comando div, un
span no establece un rea cuadrada, al contrario, podemos
iniciar un bloque <span> a mitad de un prraf o y terminarlo unas
lneas ms abajo y nos permitir darle un trato especial a esa
porcin de texto sin alterar la estructura del prraf o en s.

Las etiquetas <frameset>, <frame> y


<noframe>
Dentro de una pgina cualquiera podemos hacer una serie de
div isiones v erticales u horizontales y cargar en cada una de
esas partes una pgina independiente. Esto lo podemos hacer
utilizando el concepto de frames (marcos).

63

def inir la pgina central, hemos colocado una segunda


estructura frameset, esta v ez para div idir esa rea en dos
columnas, una de 40 pixeles y la otra con el espacio sobrante.

El resultado ser una pgina f ormada por cuatro pginas


independientes conv iv iendo en la misma v entana. Suena
tentador, sin embargo nuestra recomendacin es que no utilices
marcos en tus aplicaciones.
Hace unos aos la estructura de frames estaba justif icada por la
necesidad de recargar solo una porcin de la pantalla y as
poder acelerar el f uncionamiento del sitio Web. En la actualidad,
la tecnologa de Internet ha v enido haciendo grandes progresos
y el tiempo de carga de una pgina es cada v ez menos
relev ante. Adems, la aparicin de nuev as tecnologas como
Ajax permite recargar pedazos completos de tu pgina sin
necesidad de usar marcos.

Otra desv entaja de usar marcos es que f recuentemente es


dif cil controlar la coherencia de las pginas cargadas. Muchas
aplicaciones usan marcos para tener en un lado un men y en
otro los contenidos, pero suele perderse mucho tiempo tratando
de ev itar situaciones donde ambos lados muestren contenidos
no relacionados. Esto suele pasar, may ormente, cuando se
presiona el botn Atrs o Back del nav egador, quien
usualmente recarga la pgina anterior del ltimo marco
recargado.

68

Manejo de formularios
Hasta ahora hemos mostrado algunos de los comandos HTML
que ay udan a mostrar inf ormacin. Sin embargo, no hemos
mencionado por ninguna parte como podemos hacer que
nuestras pginas pidan inf ormacin al usuario.

As como en el mundo f sico existen los libros, rev istas y todos


los tipos de impresiones pasiv as, existen tambin los f ormatos
pre impresos en los que se le pide a una persona completar
cierta inf ormacin para luego ser procesada. Son los llamados
f ormularios.
De la misma manera, un f ormulario en HTML es un conjunto de
comandos que permiten solicitar inf ormacin al usuario para ser
env iada a un serv idor donde deber ser procesada.

Veamos una a una las etiquetas que componen un f ormulario


estndar.

La etiqueta <form>:
Sirv e para agrupar el conjunto de tems que v an a ser
procesados simultneamente al ser transmitidos. Visualmente,
esta etiqueta no tiene ningn ef ecto en la pantalla.
Los atributos principales de la etiqueta form son los siguientes:

69

Un elemento tipo cancel es un botn que al ser presionado


restaura los v alores iniciales de el f ormulario del cual f orma
parte.

87

Consideraciones finales
El desarrollo de pginas Web en la actualidad, en lo que al
diseo externo se ref iere, se realiza usualmente a trav s de
editores v isuales, as que no es extrao encontrar personas que
han desarrollado al menos una pgina Web sin tener el menor
conocimiento de HTML. Sin embargo, si v as a trabajar en PHP,
tu trabajo habr de consistir en modif icar dinmicamente el
f uncionamiento de la misma, y para ello, necesitas una base de
HTML.

88

91

Antes de comenzar
En los captulos anteriores hicimos un recorrido superf icial por la
arquitectura de Internet, a f in de manejar los trminos que
habrn de aparecer una y otra v ez en tu trabajo de programador.
Tambin nos sumergimos, sin bajar demasiado, en el mundo del
HTML, el cual debes conocer ntimamente si pretendes tener
algo de xito en el competido mundo del desarrollo Web.
Finalmente ha llegado el momento de hablar PHP. Antes de
comenzar, quisiramos hacerte un par de recomendaciones.
La primera es que practiques los ejemplos que se te proponen.
Una cosa es v er el ejercicio en el libro y comprenderlo y otra
muy distinta es hacerlo para aprender de los errores. Si lees
mucho sobre PHP v as a terminar comprendindolo muy bien,
pero no sobrev iv irs a una aplicacin real si no aprendes a
pensar en PHP.
La segunda recomendacin es que te div iertas. Hay muchas
maneras de resolv er el mismo problema en este lenguaje.
Buscar mejores soluciones a lo que y a has resuelto te ay udar
a av anzar ms rpidamente y te hars ms productiv o.
Hasta aqu los consejos. Hablemos PHP!

92

Estructura general de un programa en


PHP
Existen div ersas maneras de trabajar con PHP. Una de ellas, la
ms sencilla, es hacer una pgina normal HTML que sirv a de
estructura y luego inv adir el cdigo HTML con etiquetas PHP
que realicen las tareas necesarias.

Extensin de los archivos


Debes tener en cuenta que para que Apache le env e tu pgina
al intrprete de PHP, la extensin del archiv o debe ser .php.

Etiquetas de inicio y fin de una seccin de


cdigo PHP
Toda seccin de la pgina que contenga etiquetas PHP debe
comenzar con <?php y terminar con ?>. Otra posibilidad v lida
es usar <script language="php"> y </script>, tambin existen
otras alternativ as menos recomendables como <? Y ?>.

Separacin de los comandos


Una seccin de cdigo PHP es una secuencia de uno o ms
comandos o llamadas a f unciones separados por punto y coma.
Adems, dos o ms comandos PHP pueden ser agrupados en
93

Simbologa utilizada para explicar la


sintaxis
Durante nuestro paseo por los siguientes elementos del
lenguaje, iremos mostrando la f orma correcta de usar cada uno
de ellos a trav s de lo que se llama una descripcin sintctica,
que no es otra cosa que un diagrama que muestra la f orma
v lida en que una instruccin cualquiera deba ser construida.

Pongamos un ejemplo sencillo para explicar la metodologa:


<variable> = <nombre_de_funcin>([<parmetros>]);

En la lnea anterior estamos indicando lo siguiente:


1.
2.
3.
4.
5.
6.
7.

Un nombre de una v ariable (cualquiera).


Operador de asignacin.
Un nombre de f uncin (cualquiera).
Parntesis de apertura.
Opcionalmente pueden haber parmetros.
Parntesis de cierre.
Punto y coma.

Un ejemplo de lo descrito en la regla anterior sera:


$precio = calcular_precio();

O tambin:
104

$salario = calcular($neto, $bonos, $deuda);

En ambos casos se est cumpliendo con las siete mini reglas


enumeradas anteriormente.

En general, las reglas de sintaxis que usaremos sern las


siguientes:

105

Sintaxis:
<expresin> <> <expresin>
Nota:
Este operador es equiv alente al operador !=.

127

130

Existen otros tipos de estructuras iterativ as ms especializadas


las cuales f acilitan el trabajo con arreglos. Hablaremos de ellas
ms adelante.

152

158

Para qu usar funciones?


Uno de los objetiv os f undamentales de una f uncin es la
reutilizacin, es decir, la posibilidad de no tener que escribir una
secuencia de instrucciones similares una y otra v ez.

Una segunda razn no menos importante- es la llamada


estructuracin. Es decir que mediante la implementacin de
f unciones, podemos div idir la resolucin de un problema
complejo en partes ms simples, de modo que podemos
programar, probar y ev entualmente integrar esas partes y lograr
nuestros objetiv os.
Cuando un programa est desarrollado en modo estructurado,
es decir, debidamente clasif icado y div idido en segmentos
bsicos, el resultado es mucho ms f cil de mantener, y a que
dependiendo del tipo de errores que pudiramos tener, nos ser
siempre ms f cil encontrar el segmento causante de la f alla y
repararlo.

A medida que desarrollamos aplicaciones ms grandes y


complejas, la necesidad de estructuracin se hace may or.

Podramos comparar esto ltimo con la tarea de preparar una


comida en una cocina. Si el tamao de los platos a ser
preparados diariamente es pequeo, digamos que para una o
dos personas, podran organizarse todos los utensilios en una
simple repisa sin que ello conllev e may ores dif icultades.
Adems, toda la comida puede ser hecha de una sola v ez y por
una sola persona.

160

167

170

174

<comando o bloque>;
Ejemplos:
$notas = array (Juan => 6, Leo => 7, Jose => 8);
f oreach($notas as $nota){
$acumulado += $nota;
}
$notas = array (Juan => 6, Leo => 7, Jose => 8);
$maximo = 0;
$mejor = ;
f oreach($notas as $alumno => $nota)

b)

Usando las f unciones list(), each() y reset()


Existe una caracterstica especial de los arreglos en
PHP que permite utilizarlos como si se tratara de bases
de datos. Esto es posible porque el lenguaje guarda
dentro del arreglo la posicin corriente.

Este concepto de posicin corriente dentro de un arreglo


no tiene ninguna relacin con acceder a los contenidos
a trav s de ndices. Siempre podemos asignar o ir
directamente a cualquier posicin de un arreglo si
indicamos la posicin exacta usando un ndice. Pero
existen ciertas f unciones en PHP que recuerdan el
ltimo elemento v isitado y nos permiten conocer un
contenido a la v ez, e incluso av isarnos cuando
llegamos al f inal del arreglo.

186

Introduccin
En este captulo te nos adentramos en el manejo de las
cadenas de caracteres, tambin conocidas como strings, las
cuales constituy en sin lugar a dudas el tipo de datos ms
utilizado en PHP, y a que el objetiv o principal del lenguaje es la
produccin u alteracin de textos en HTML.
Al f inalizar este captulo tendrs conocimiento de una amplia
coleccin de nuev os operadores y f unciones of recidos por el
lenguaje para f acilitar el trabajo con textos.
Temas desarrollados en este captulo:
Concepto y utilizacin de las cadenas de caracteres en
PHP.
Operadores de asignacin, concatenacin y comparacin.
Funciones para el manejo de textos.
Formas simplif icadas de concatenar textos.

195

196

por pantalla sin necesidad de estar haciendo conv ersiones de


tipo.

198

inf ormacin al f inal de la v ariable sobre la que se est


asignando.

202

Compara dos v alores e indica si son distintos o de


distinto tipo
Sintaxis:
<texto> !== <texto>;
Ejemplo:
$v alor1 = 5;
$v alor2 = 5;
if ($v alor1 !== $v alor2)
echo Distinto contenido o tipos distintos;
else
echo igual contenido e igual tipo;

206

Retorna el resultado de reemplazar dentro de <texto>


todas las apariciones de <buscar> y reemplazarlas por
<reemplazar>.

Si el ltimo parmetro es especif icado, entonces solo


realizar el reemplazo esa cantidad de v eces.
Ejemplos:
$texto1 = esto es un subtexto;
echo str_replace($texto1, sub, pre);
// Retorna Esto es un pretexto
echo str_replace($texto1, s, S, 2);
// Retorna ESto eS un Subtexto

213

Arquitectura de una aplicacin Web con base de datos


Introduccin al lenguaje SQL
Aspectos generales del trabajo con bases de datos desde
PHP
Funciones PHP para trabajar con MySQL

218

219

Si deseamos que todo f uncione manualmente, necesitaramos


contratar a v arias personas para administrar los datos de tales
planillas. Estos f uncionarios se encargaran de buscar los datos
solicitados, modif icar datos cuando les sea solicitado, incluir
inf ormacin nuev a, todo esto mientras resuelv en problemas
bsicos como no escribir en una planilla que otro est
modif icando, permitir consultas mltiples, garantizar que solo las
personas autorizadas puedan acceder al niv el de inf ormacin
que le es permitido y todo esto de la manera ms rpida y
segura posible.

Una base de datos no es ms que el conjunto de inf ormacin


dispuesta sobre nuestra hipottica mesa.
Un Sistema Manejador de Bases de Datos, sera equiv alente al
personal alrededor de la mesa, ms el conjunto de protocolos,
acuerdos y procedimientos que ellos tienen para trabajar de la
mejor manera posible.

Cada v ez que hablamos de algo como Oracle, MySQL, SQL


Server, etctera, estamos hablando de Sistemas Manejadores
de Bases de Datos Relacionales, comnmente llamados
RDBMS. Cada uno de ellos, nos permite crear y administrar una
o ms bases de datos para trabajar distintos sistemas. Todos
ellos tienen sus propias caractersticas, sus debilidades y sus
f ortalezas.

221

aplicaciones sencillas de un solo usuario en un solo equipo,


existen soluciones como Access.

Para aplicaciones basadas en Internet con v olmenes pequeos


o moderados de inf ormacin, la solucin ms usada en MySQL,
entre otras cosas por ser gratuito.

224

cual f unciona tambin como un serv idor especializado capaz de


responder a solicitudes hechas desde el cdigo PHP.

226

El ejemplo anterior es exactamente igual que el que lo precede.


Solo hemos cambiado la f orma de indicar el orden. En lugar de
escribir explcitamente el nombre del campo, hemos puesto un
nmero 2 para indicar que el segundo campo solicitado es el que
v a a determinar el orden del resultado.

Usos ms avanzados del comando SELECT:


El comando SELECT tiene muchas ms f ormas de las que
hemos mencionado, por lo que recomendamos ampliar tus
estudios en esta rea y sobre todo, ejercitar todo lo que v ay as
aprendiendo.

Por ejemplo, la clusula GROUP BY dentro del comando


SELECT sirv e para obtener subtotales. Es decir, permite agrupar
cientos de registros que tengan un cierto campo con el mismo
v alor y traer, no los v alores indiv iduales, sino clculos simples
como cantidad de registros, sumas, promedios, etc.
La clusula HAVING puede ser usada en conjuncin con el
GROUP BY para determinar cules subtotales mostrar y cules
no. Un ejemplo podra ser, traer de una tabla de v entas los
nombres de los productos y el total de unidades v endidas de
cada uno de ellos, solo si las v entas superan las cien unidades.

Otro aspecto poderoso del comando SELECT es la posibilidad de


combinar dos o ms tablas dentro de una sola llamada. Esto se
logra de distintas maneras, una de ellas es especif icando ms
de un nombre de tabla luego del FROM y luego aadiendo
236

En el rea del WHERE, hemos puesto una condicin que


expresa el modo en que ambas tablas se relacionan, es decir,
que siempre que el campo cdigo tenga el mismo v alor,
podemos imaginarnos que los campos de ambas tablas podran
combinarse para f ormar una tabla v irtual con los campos de
ambas.

De esta tabla v irtual combinada, hemos solicitado extraer los


campos nombre y apellido de la tabla alumnos y el campo
resultado de la tabla notas.

238

Trabajando con MySQL


MySQL es un Sistema Manejador de Bases de Datos
Relacionales que f unciona como un serv idor para prov eer
conexin a mltiples usuarios sobre mltiples bases de datos
indiv iduales.

La primera v ersin de MySQL apareci en 1995, bajo la f ilosof a


de Licencia Pblica General de la mano de MySQL AB, la cual
hoy en da es subsidiaria de Oracle.
Si existe una base de datos que podra llamarse natural para
trabajar desde PHP, esta sera sin duda alguna MySQL. La razn
principal podra estar en el hecho de que ambas se originaron en
entornos de cdigo abierto y bajo el sistema operativ o Linux.

Hoy en da, MySQL es la escogencia pref erida en la may ora


de los desarrollos Web de de tamao pequeo y mediano. En
parte se debe a su f acilidad de instalacin, a la disponibilidad en
distintos sistemas operativ os, a su v elocidad o muy
probablemente a su precio.

Conectando con el manejador de MySQL:


Para conectarse con un serv idor de MySQL hay que especif icar
siempre tres parmetros distintos. El primero se ref iere a la
identif icacin del serv idor en s mismo. Cuando el serv idor con
el que deseamos conectarnos est en la misma mquina en la
241

Sintaxis:
my sql_connect(<serv idor>, <usuario>, <clav e>)
Parmetros:
<serv idor>: Puede ser una direccin IP, o un URL o la
cadena localhost. Puede estar seguido de un nmero
de puerto separados por :.
<usuario>: Nombre de un usuario debidamente
autorizado para abrir el manejador de bases de datos.
<clav e>: Clav e del usuario especif icado.

Retorna:
Identif icador de la conexin (llamado tambin handler)
en caso de que la conexin sea exitosa o FALSE en
caso de error.
Ejemplos:
$db = my sql_connect(localhost, admin, libra);
$db = my sql_connect(www.misitio.com, admin,
v enecia);

Cerrando una conexin:


243

Descripcin:
Env a un comando SQL a una cierta base de datos y
retorna un resultado.
Sintaxis:
my sql_query (<comando>, <conexin>)

Parmetros:
<comando>: Texto que contiene un comando SQL v lido
para ser aplicado a la base de datos prev iamente
seleccionada.
<conexin>: Identif icador retornado por la f uncin
my sql_connect. Si no se especif ica, se usar la ltima
conexin abierta.
Retorna:
Si el comando env iado es un SELECT, entonces la
f uncin retorna un identif icador si la operacin f ue
exitosa o FALSE en caso de error. Si el comando es un
INSERT, UPDATE o DELETE, se retornar TRUE o
FALSE para indicar el xito del comando.

El identif icador retornado en caso de consultas, serv ir


para solicitar cada uno de los registros retornados por el
comando SELECT.
247

Ejemplo:
$db = my sql_connect(localhost, admin, libra);
if ($db){
if (my sql_select_db (inv entario, $db)){
$sql = SELECT * FROM productos;
$res = my sql_query ($sql, $db);
}
}

Requiriendo un registro:
Tal como v imos en el ejemplo anterior, siempre que se hace una
consulta del tipo SELECT a una base de datos, obtendremos
como resultado un identif icador, llamado tambin recurso, el
cual no es ms que el conjunto de v alores retornados en modo
digamos- inutilizable.

Para poder acceder a cada uno de los registros almacenados en


ese v alor tipo recurso, existe una f amilia de f unciones, todas
ellas de la f orma mysql_fetch.

Cada una de estas f unciones extrae de f orma secuencial cada


uno de los registros seleccionados. Es decir, la primera v ez que
llamamos a una f uncin del tipo mysql_fetch luego de una
seleccin de datos, retornar el primer registro seleccionado o
FALSE si no existe ningn registro. Las siguientes v eces que
llamemos a ese mismo comando, retornar el segundo, tercero,
cuarto registro hasta llegar al f inal de la seleccin, momento en
el que retornar FALSE.
248

SELECT sobre una base de datos.


Sintaxis:
my sql_f etch_assoc(<recurso>)

Parmetros:
<recurso>: Identif icador retornado por la f uncin
my sql_query.
Retorna:
Arreglo asociativ o con los contenidos de los distintos
campos especif icados en el comando SELECT env iado
a la f uncin my sql_query.

Los ndices del arreglo retornado contendrn los


nombres de los campos segn lo escrito en el comando
SELECT.

Si no hay ningn registro que retornar, la f uncin retorna


el v alor FALSE.

Ejemplo:
$db = my sql_connect(localhost, usr, key );
if ($db){
if (my sql_select_db (inv entario, $db)){
251

$sql = SELECT cod, nombre FROM productos;


$res = my sql_query ($sql, $db);
$f ila = my sql_f etch_row($res);
while ($f ila !== f alse){
echo Cdigo: . $f ila[cod] . <br>;
echo Nombre: . $f ila[nombre] . <br>;
$registro = my sql_f etch_row($res);
}
}
}
Tal como indicamos al principio de este captulo, el modo en que
se trabaja en PHP con una base de datos, es bastante parecido
a como se trabaja con las otras, as que poco hay que aprender
cuando y a hemos hecho un primer proy ecto conectando con
alguna base de datos.

252

255

Variables globales
El alcance natural de cualquier v ariable en PHP es el contexto
en el cual est def inida. Es decir que una v ariable def inida
dentro de una f uncin, ser v lida solo dentro de esa f uncin,
mientras que una v ariable def inida a niv el del script, tendr
v alor a lo largo de todo el cdigo del script no incluido dentro de
f unciones.

Ya hemos mencionado la posibilidad de utilizar una v ariable


externa dentro de una f uncin siempre que declaremos la
misma como global. Sin embargo, la mejor manera de utilizar
una v ariable dentro de un script (o en cualquiera de sus
includes) sin importar si estamos dentro o f uera de una f uncin
es usando un arreglo asociativ o especial llamado $GLOBALS.
Por ejemplo, si asignamos un v alor a la v ariable $usuario al
principio de un script, podremos hacer uso de ella
posteriormente en cualquier parte del mismo script excepto
dentro de las f unciones.

Podemos poner en cada f uncin donde deseemos utilizar esa


v ariable, una pequea declaracin donde indiquemos que al
ref erirnos a $usuario no queremos crear una v ariable interna a la
f uncin sino que queremos utilizar la que existe externamente.

Una alternativ a ms sencilla es reemplazar la v ariable $usuario


por $GLOBALS[usuario], de este modo podemos hacer uso de
ella dentro o f uera de las f unciones sin tener que declararla.
256

En resumen, el arreglo especial $GLOBALS existe en todas


partes, si queremos hacer que una v ariable pueda ser llamada
en cualquier parte de un script, entonces podra conv enirnos no
usar una v ariable en s, sino ms bien def inir una de las
posiciones del arreglo $GLOBALS.

257

Ambos estn diseados para recibir los v alores de los


elementos HTML env iados desde una pgina a otra a trav s de
un f ormulario. La nica dif erencia entre ambos es que el
procesador de PHP har uso de uno solo de ellos dependiendo
del mtodo usado en el f ormulario. Es decir, si el f ormulario que
f ue utilizado para llamar una pgina us el mtodo GET,
entonces el arreglo superglobal $_GET contendr los v alores
escritos por el usuario. Si por el contrario, el mtodo usado f ue
POST, entonces ser $_POST el que contenga tales v alores.

Valores pasados de una pgina a otra usando


cualquier mtodo - $_REQUEST
En cualquiera de los dos casos anteriores, el procesador de
PHP aparte de llenar un arreglo (bien sea $_GET o $_POST) con
los v alores env iados, tambin llenar otro arreglo llamado
$_REQUEST con los mismos v alores.

Ya que el uso de $_REQUEST es exactamente igual al de los


dos arreglos antes mencionados, no es una mala idea hacer
siempre uso de $_REQUEST y no de los otros arreglos.

Nombres de archivos subidos mediante el tag


<input type=file> de HTML - $_FILES
Cuando se utiliza el elemento HTML <input type= file > para
hacer un upload de un archiv o, el procesador de PHP crea una
262

entrada en el arreglo superglobal $_FILES con el nombre de los


archiv os subidos.

HTML es capaz de manejar por si solo la carga de archiv os


desde alguna locacin del usuario hasta el serv idor, sin
embargo, conociendo el nombre del archiv o recin subido,
pueden hacerse distintas manipulaciones posteriores usando
PHP.

Valores pasados de una pgina a otra mediante


sesiones - $_COOKIE y $_SESSION
El arreglo superglobal $_COOKIE contiene los nombres y
v alores de todas las cookies usadas en el sitio, mientras que
$_SESSION permite almacenar v alores a los que necesitemos
acceder una y otra v ez en distintas pginas mientras el usuario
este nav egando por nuestro sitio Web.

Dada la importancia de estos dos arreglos en la construccin de


sitios donde un contexto comn pueda ser usado en cualquier
pgina sin tener que transmitirlo todo el tiempo, hemos decidido
dedicarles a ellos todo el captulo siguiente.

263

Introduccin
En este captulo abordamos uno de los conceptos introducidos
por Netscape Communications desde el ao 1994, y que pas
prontamente a constituirse en un estndar de al programacin
Web, las llamadas cookies.
Al f inalizar este captulo deberas estar en capacidad de
entender y utilizar cookies desde PHP para recordar datos de
tus clientes.
Temas desarrollados en este captulo:
Concepto y utilidad de las cookies
Uso de cookies en PHP
Operaciones bsicas con cookies

265

266

Parmetros:
<nombre>: Nombre de la v ariable.
<v alor>: Contenido que se desea guardar. Si este
parmetro es omitido, el nav egador proceder a borrar
la cookie que contenga el nombre indicado.
<expira>: Indica la f echa y hora de expiracin.
<subdom>: Subdominio donde es v lida.
<dominio>: Dominio donde es v lida.
<seguro>: Indica si solo su usa en modo seguro
(HTTPS)o no.
<solo_HTTP>: Indica si es inaccesible a lenguajes de
script o no.

De los siete parmetros utilizables para la f uncin, solo


el primero es obligatorio.

Ejemplos:
setcookie(nombre, $nombre_usuario);
setcookie(f echa, date());
setcookie(sexo);

Leer los valores de las cookies


En todas las pginas de cualquier aplicacin de PHP se puede
tener acceso al arreglo superglobal $_COOKIE, el cual contiene
los v alores de todas las cookies v lidas para el usuario que
solicit la pgina, segn el dominio, subdominio, f echa de
271

276

porque transcurre una cierta cantidad de tiempo de inactiv idad.

Las sesiones pueden utilizarse para cosas sencillas como


mostrarle al usuario su nombre en pantalla o para operaciones
ms delicadas como pagos en lnea.
Por lo general, durante el tiempo de existencia de una sesin,
resulta de mucha utilidad guardar cierta inf ormacin de estado,
como por ejemplo identif icacin y nombre del usuario, nmero
de tarjeta de crdito, ultima operacin realizada y cosas por el
estilo.

278

Sesiones en nuestra vida cotidiana:


Los cajeros automticos
Para comprender con claridad el concepto de sesin, podemos
recurrir a un ejemplo bastante conocido, las transacciones en
los cajeros automticos bancarios.

La f inalidad de un cajero automtico es of recer a usuarios


autorizados la posibilidad de realizar una o ms transacciones
sin tener que desplazarse hasta una agencia bancaria. Para ello
debe garantizar la identidad del usuario, permitirle hacer sus
transacciones y detectar momento en que el mismo se retira
para ev itar que otro pueda hacer mal uso de sus recursos.
Especulemos un poco acerca del modo en que ambos lados de
la red, los cajeros y el serv idor estn programados.

Desde el punto de vista del cajero


Para poder atender a los clientes no es necesario que cada
cajero automtico tenga almacenada Ningn tipo de inf ormacin
de los usuarios. Basta con que tengan la capacidad de env iar a
su serv idor una serie de requerimientos de operaciones sencillas
y que este ltimo le indique si puede realizarlas o no.

La primera de las operaciones que todo cajero realiza es


identif icar al usuario. Para ello procede a leer un cdigo de
identif icacin de una tarjeta y solicitar una clav e de acceso.
279

Ambas cosas, acompaadas probablemente con la


identif icacin del cajero mismo son env iadas al serv idor quien
deber decidir si el usuario es reconocido o no.

Si la identif icacin es v lida, el cajero habr de recibir


probablemente cierta inf ormacin personal del cliente como su
nombre y quizs el tipo de cuentas que posee, momento en el
cual el aparato proceder a of recerle al usuario una serie de
serv icios como retiros, solicitudes de saldo, cambios de clav e,
etc.
Cada una de estas operaciones, desde el punto de v ista del
cajero, no son otra cosa que pedir inf ormacin al usuario, env iar
el requerimiento al serv idor y aguardar por una respuesta.

Una ltima f uncionalidad del cajero, no por ello la menos


importante, es detectar cuando el usuario ha concluido sus
operaciones para as env iarle un mensaje al serv idor de que y a
no habr de esperar ms requerimientos asociados con ste. A
este respecto, muchos de esos dispositiv os exigen
identif icacin por cada transaccin indiv idual, para as poder
garantizar que el usuario no deje olv idada su tarjeta dentro del
equipo. En estos casos, puede decirse que el f in de la sesin es
automtico.

Desde el punto de vista del servidor


El serv idor de la red de cajeros deber atender muchas
operaciones simultneas procedentes de distintos usuarios y
280

distintos cajeros.

Podramos pensar que un serv idor aparte de completar las


transacciones bancarias- tiene la habilidad para guardar
temporalmente digamos que en distintos sacos- la inf ormacin
necesaria para atender a cada uno de los usuarios que se
conectan y eliminar un saco una v ez que cesa una conexin.
De esta manera, podemos pensar que una operacin de
identif icar al usuario no es ms que v erif icar sus credenciales y
de ser v lidas, preparar un espacio temporal donde guardar los
datos necesarios.

Por cada operacin adicional, el serv idor solo necesitar saber


que cajero est haciendo la solicitud, para identif icar el saco
temporal donde estn los datos del usuario y hacer las
operaciones requeridas.

Transcurrido cierto tiempo de inactiv idad, o si el cajero


correspondiente env iase una orden de cierre de sesin, el
serv idor proceder a eliminar el saco en cuestin.
Como podemos v er, el programa del lado del serv idor ser
mucho ms sencillo si en cada saco guardamos por ejemplo- el
nmero de cuenta de cada cliente, as cualquier operacin de
retiro podr realizarse mediante una nica f uncin a la cual le
podramos pasar como parmetro la cuenta de la sesin que se
est atendiendo.

281

Diferencias respecto a una aplicacin Web


A dif erencia del ejemplo de los cajeros automticos donde casi
con total seguridad el serv idor puede saber exactamente cul de
sus cajeros le hace cada solicitud, una aplicacin Web no puede
identif icar por si sola el computador que le hace cada
requerimiento, por lo que es necesario crear un nmero nico
para cada sesin de modo que el serv idor pueda distinguir un
requerimiento de otro.

Por otro lado, al realizar una aplicacin Web, podemos


olv idarnos del problema de comunicacin, y a que los protocolos
suby acentes y el programa serv idor HTTP (Apache o IIS) se
encargarn de escuchar las solicitudes y llamar a una de
nuestras pginas. Todo lo que debemos cuidar entonces es que
siempre nos llegue un nmero apropiado de sesin para poder
saber que v alores usar.

282

Crea una nuev a sesin o recupera una existente.

Sintaxis:
session_start()

Ejemplo:
session_start();

La llamada a esta f uncin debe colocarse al principio de toda


pgina Web que utilice sesiones, antes de que se produzca
cualquier escritura.

Borrando una sesin: session_destroy


Esta f uncin destruy e todas las v ariables guardadas dentro de
una sesin.

La f uncin session_destroy debe ser usada cuando se tenga la


certeza de que el usuario no debe ser reconocido la siguiente
v ez que entre en la pgina, es decir que se le deber requerir
nuev amente su identif icacin.

286

La sintaxis de la f uncin es como sigue:

Funcin session_destroy
Descripcin:
Destruy e una sesin.

Sintaxis:
session_destroy ()

Ejemplo:
session_destroy ();

Nombre de la variable de sesin:


session_name
La f uncin session_name tiene dos usos distintos. Cuando es
usada sin parmetros retorna el nombre de la v ariable de sesin
que se est utilizando. De no haber sido cambiada, ese nombre
ser PHPSESSID. Sin embargo, cuando se desea utilizar un
nombre distinto para las v ariables de sesin, entonces se puede
pasar el nuev o nombre como parmetro a esta f uncin.
287

La sintaxis es muy sencilla:

Funcin session_name
Descripcin:
Retorna el nombre de la v ariable de sesin utilizada o la
cambia si se especif ica como parmetro.

Sintaxis:
session_name([<nombre>])

Ejemplos:
// Retorna PHPSESSID
echo session_name();
// Cambia el nombre de las sesiones por ID
session_name(ID);

288

Identificador de sesin: session_id


Esta f uncin retorna el cdigo nico de la sesin en curso, es
decir, el contenido de la v ariable PHPSESSID.
Al igual que en el caso anterior, si se aade un parmetro a la
f uncin, se estara asignando un v alor a tal v ariable, es decir,
se estara asignando un cdigo de sesin. Es importante que si
se v a a trabajar con cdigos de sesin generados por el
programador, la llamada a esta f uncin debe colocarse antes de
la llamada a session_start.

Por otro lado debe tomarse en cuenta que si no hay ninguna


sesin en curso, esta f uncin retornar una cadena de
caracteres v aca.

Veamos la sintaxis:

Funcin session_id
Descripcin:
Retorna el v alor de la v ariable de sesin utilizada o
cambia el mismo si se especif ica como parmetro.

289

Sintaxis:
session_id([<v alor>])

Ejemplos:
// Retorna el cdigo de sesin
echo session_id();
// Cambia el cdigo de sesin por el v alor dado.
session_id(402318);

290

Propagando el cdigo de sesin


Anteriormente mencionamos los tres mtodos principales para la
propagacin del cdigo de sesin. Veamos ms detalladamente
cada una de las alternativ as.

Propagacin a travs de cookies


La propagacin del cdigo de sesiones usando cookies se
establece en el archiv o de conf iguracin php.ini, modif icando el
v alor de la v ariable session.use_cookie.

De estar activ adas las cookies para el manejo de sesiones, la


propia f uncin session_start se encargar de buscar dentro de
las cookies existentes el cdigo de la sesin actual sin que se
requiera may or interv encin por parte del programador.
La parte menos agradable de utilizar la propagacin de sesiones
a trav s de cookies es que el usuario podra desactiv ar el uso
de stas en el nav egador, en cuy o caso todo el manejo de
sesiones de nuestro sitio Web dejara de f uncionar.

Propagacin manual:
Este mtodo de propagacin es el ms laborioso pero el ms
seguro, y a que no todos los usuarios permiten el uso de cookies
291

en sus nav egadores.

El mtodo consiste en cuidar que todas las llamadas de una


pgina a otra env en el v alor del cdigo de sesin.
Veamos todas las posibilidades:

Redireccionamiento usando la funcin PHP


header: Todas las llamadas a otras pginas internas de
nuestro sitio hechas a trav s de la f uncin header(),
debern ser alteradas de modo que entre los
parmetros se incluy a el nombre y cdigo de sesin.
Veamos un ejemplo:
Una llamada que tenga la f orma:

<?php
header(Location http //www.misitio.com)
?>

Deber ser cambiada por algo como:


<?php
$url = http //www.misitio.com
header(Location $url?PHPSESSID= . sesin id())
?>

292

O mejor an:

<?php
$url = http //www.misitio.com?
$url .= sesin name() . = . session id()
header(Location $url)
?>

Redireccionamiento mediante formularios: Todos


los f ormularios que llamen a otra pgina a trav s del
atributo action de la etiqueta form, deben incluir un
elemento oculto cuy o nombre sea PHPSESSID (de no
haber sido cambiado) y cuy o v alor sea el cdigo de la
sesin. Veamos de que estamos hablando:
Una llamada que tenga la f orma:
<html>
<head>
</head>
<body>
<form action=Pagina2.php>
Producto
<input type=text name=producto />
<br />
Precio
<input type=text name=precio />
<br />
<input type=submit value=Enviar />
</form>
</body>

293

</html>

Deber ser cambiada por algo como:


<html>
<head>
</head>
<body>
<form action=Pagina2.php>
Producto
<input type=text name=producto />
<br />
Precio
<input type=text name=precio />
<br />
<input type=submit value=Enviar />
<input type=hidden name=PHPSESSID value=<?php echo
session id() ?> />
</form>
</body>
</html>

Redireccionamiento usando JavaScript: Todo re


direccionamiento escrito en JavaScript a trav s de la
f uncin open() o por asignando una direccin a la
propiedad location, debe ser cambiado de f orma que se
garantice que en la direccin URL se incluy a el v alor
de la sesin corriente. Por ejemplo:
Si existe una f uncin JavaScript que contenga algo
como:
294

<html>
<head>
<script language=javascript>
function abre popup(){
open(pagina2.php)
}
</script>
</head>
<body>
<input type=button value=popup onclick=abre popup() />
</body>
</html>

Debe ser cambiado de la siguiente manera:

<html>
<head>
<script language=javascript>
function abre popup(){
open(pagina2.php?PHPSESSID=<?php echo session id() ?>)
}
</script>
</head>
<body>
<input type=button value=popup onclick=abre popup() />
</body>
</html>

295

Tambin cada v ez que se encuentre algo como lo


siguiente:

<html>
<head>
<script language=javascript>
function ir a 2(){
location.href = pagina2.php
}
</script>
</head>
<body>
<input type=button value=Ir a pgina 2 onclick=ir a 2() />
</body>
</html>

Se debe alterar de la siguiente manera:

<html>
<head>
<script language=javascript>
function ir a 2(){
location.href = pagina2.php?PHPSESSID=<?php echo session id()
?>
}
</script>
</head>
<body>
<input type=button value=Ir a pgina 2 onclick=ir a 2() />

296

</body>
</html>

Propagacin automtica:
Para hacer todo el proceso de propagacin ms sencillo,
PHP puede encargarse de transf ormar por nosotros todos
los enlaces internos de nuestro sitio para que incluy an el
session_id. Esto se logra haciendo que la directiv a
session.use_trans_sid en nuestro php.ini est activ ada
(v alor igual a "1").

297

Tal y como dijramos en las primeras pginas de este material,


el aprendizaje de un lenguaje de programacin es similar al
dominio de cualquier idioma. No basta con entender los
conceptos. Para obtener el dominio completo de todo lenguaje
hay que practicarlo, y es ese un punto que f orzosamente
corresponde en exclusiv a al lector.

Esperamos haber cumplido lo que prometimos al comienzo de


este libro, que no es otra cosa que of recer en f orma sencilla al
lector poco especializado un cmulo de conceptos, ejemplos e
inf ormacin tcnica que le permita dar sus primeros pasos en el
mundo de la programacin Web usando el lenguaje PHP.
Esperamos igualmente haber transmitido, aunque sea un poco,
el gusto por el mundo de la programacin Web. De haber
logrado esto ltimo, estamos seguros que parte del camino
hacia el xito en este of icio est garantizado.
298

299

You might also like