Está en la página 1de 85

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.

com

Programacin en PHP
Principios bsicos para la programacin en PHP, el popular lenguaje del lado del servidor. Manual asequible para no programadores que sienta los fundamentos bsicos de este lenguaje. Continuacin lgica del manual de pginas dinmicas.

Autores del manual


Este manual ha sido realizado por los siguientes colaboradores de DesarrolloWeb.com:
Rubn Alvarez Miguel Angel Alvarez Carlos Luis Cuenca

Redactor de DesarrolloWeb.com http://www.desarrolloweb.com (24 captulos

Director de DesarrolloWeb.com http://www.desarrolloweb.com (2! captulos

http://www.helloworldsolutions.com/ (! captulo

Daniel Lpez

http://pichongol.blogspot.com (! captulo

Jorge Ramos
(! captulo

Manu Gutierrez

http://www.tu"uncion.com (! captulo

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Parte 1:

Qu es PHP
(aptulos introductorios donde hablaremos sobre los lengua)es de desarrollo del lado del ser*idor en general para e+plicar ,-, en particular % .ue se entienda cu/l es su modo de "uncionamiento % los tipos de cosas .ue se pueden hacer con este lengua)e.

1.1. !ntroduccin a la programacin en "#"


Explicamos someramente qu es el PHP ! lo comparamos a otros lenguajes para el desarrollo de "ebs dinmicas PHP es el lenguaje de lado servidor ms extendido en la web. Nacido en 1994, se trata de un lenguaje de creacin relativamente reciente, aunque con la ra ide! con la que evoluciona "nternet are!ca que #a existido toda la vida. $s un lenguaje que #a tenido una gran ace tacin en la comunidad de desarrolladores, debido a la otencia % sim licidad que lo caracteri!an, as& como al so orte generali!ado en la ma%or&a de los servidores de #osting. PHP nos ermite embeber su eque'os (ragmentos de cdigo dentro de la gina H)*+ % reali!ar determinadas acciones de una (orma (cil % e(ica!, combinando lo que %a sabemos del desarrollo H)*+. $s decir, con PHP escribimos scri ts dentro del cdigo H)*+, con el que se su one que %a estamos (amiliari!ados. Por otra arte, % es aqu& donde reside su ma%or inter,s con res ecto a los lenguajes ensados ara los -.", PHP o(rece un sin(&n de (unciones ara la ex lotacin de bases de datos de una manera llana, sin com licaciones. Podr&amos e(ectuar la qui!s odiosa com aracin de decir que PHP % /0P son lenguajes arecidos en cuanto a otencia % di(icultad si bien su sintaxis uede di(erir sensiblemente. /lgunas di(erencias rinci ales ueden, no obstante, mencionarse1
Actualizado: $n estos momentos %a no es tan ol,mica la com aracin de PHP con /0P, uesto que son dos lenguajes que #an evolucionado de maneras distintas. *ientras que /0P se #a estancado % #an salido roductos nuevos como .N$) ara sustituirlo, PHP #a ido mejorando muc#o con los a'os % actualmente su otencia % osibilidades son totalmente distintas, con lo que #a dejado mu% atrs la com etencia con /0P. $ste manual lo comen!amos con la versin 2 de PHP % #o% %a van or la 3 % estn cerca de sacar la versin 4. /s& ues %a no tiene muc#o sentido com arar PHP con /0P, aunque las l&neas siguientes a esta nota, que distinguen /0P de PHP, ueden ser de utilidad % una re(erencia vlida, uesto que estas di(erencias no #an cambiado a d&a de #o%. /s& mismo, queremos in(ormar que a esar del manual tener %a cierto tiem o ublicado, siem re lo estamos actuali!ando cuando surgen cambios en los modos de trabajo con PHP.

PHP, aunque multi lata(orma, #a sido concebido inicialmente ara entornos 5N"6 % es en este sistema o erativo donde se ueden a rovec#ar mejor sus restaciones. /0P, siendo una tecnolog&a *icroso(t, esta orientado #acia sistemas 7indows, es ecialmente N). +as tareas (undamentales que uede reali!ar directamente el lenguaje son de(inidas en PHP como (unciones mientras que /0P invoca ms (recuentemente los objetos. Por su uesto, esto no es ms que una sim le cuestin de (orma %a que ambos lenguajes so ortan igualmente ambos rocedimientos. /0P reali!a numerosas tareas sirvi,ndose de com onentes 8objetos9 que deben ser com rados a determinadas em resas es eciali!adas 8o rogramados or nosotros mismos en otros lenguajes9. PHP resenta una (iloso(&a
2

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com totalmente di(erente %, con un es &ritu ms generoso, es rogresivamente construido or colaboradores desinteresados que im lementan nuevas (unciones en nuevas versiones del lenguaje. $ste manual va destinado a aquellos que quieren comen!ar de cero el a rendi!aje de este lenguaje % que buscan en ,l la a licacin directa a su ro%ecto de sitio o a la mejora de su sitio H)*+. +os ca &tulos son extremadamente sim les, sino sim listas, buscando ser accesibles a la ma%or&a. $llos ueden ser com lementados osteriormente con otros artculos de mayor nivel destinados a gente ms ex erimentada. +a (orma en la que #emos redactado este manual lo #ace accesible a cualquier ersona no (amiliari!ada con la rogramacin. 0in embargo, es osible que en determinados momentos alguien que no #a%a rogramado nunca ueda verse un oco desorientado. Nuestro consejo es el de no querer entender todo antes de asar al siguiente ca &tulo sino intentar asimilar algunos conce tos % volver atrs en cuanto una duda surja o #a%amos olvidado alg:n detalle. Nunca viene mal leer varias veces lo mismo #asta que quede bien grabado % asimilado. /ntes de comen!ar a leer este manual es altamente aconsejable, sino im rescindible, #aber le&do reviamente el manual sobre manual sobre pginas dinmicas en el cual se ex lica a grandes rasgos qu, es el PHP, algunos conce tos :tiles sobre el modo de trabajar con ginas dinmicas al mismo tiem o que nos introduce algunos elementos bsicos de la rogramacin como ueden ser las variables % las (unciones. ;tra re(erencia a la cual #aremos alusin es el tutorial de SQL que nos ser de gran a%uda ara el tratamiento de bases de datos % a *%0<+, del que odremos a render muc#as cosas en el Taller de MySQL. Para todos los lectores, ero aun ms ara las ersonas ms inex ertas % con ms di(icultades de a rendi!aje, tenemos adems una recomendacin que uede a%udarles muc#o. 0e trata del Videotutorial de P P que estamos ublicando con diversos v&deos que ex lican con gran detalle la rogramacin en PHP. $s eramos que este manual resulte de vuestro agrado % que corres onda a nuestras ex ectativas1 $l oder acercar PHP a todos aquellos amantes del desarrollo de webs que quieren dar el aso #acia las webs = ro(esionales=. +os scri ts que usamos en estos rimeros ejem los ueden ser descargados a!u.
Artculo por

Rubn Alvarez

1.$. %reve &istoria de "#"


#esde sus inicios $asta la versin % $a sido desarrollado por muc$as personas. PHP es un lenguaje creado or una gran comunidad de ersonas. $l sistema (ue desarrollado originalmente en el a'o 1994 or >asmus +erdor( como un -." escrito en - que ermit&a la inter retacin de un n:mero limitado de comandos. $l sistema (ue denominado Personal Home Page )ools % adquiri relativo ,xito gracias a que otras ersonas idieron a >asmus que les ermitiese utili!ar sus rogramas en sus ro ias ginas. ?ada la ace tacin del rimer PHP % de manera adicional, su creador dise' un sistema ara rocesar (ormularios al que le atribu% el nombre de @" 8@orm "nter reter9 % el conjunto de estas dos #erramientas, ser&a la rimera versin com acta del lenguaje1 PHPA@". +a siguiente gran contribucin al lenguaje se reali! a mediados del 9B cuando se volvi a rogramar el anali!ador sintctico, se inclu%eron nuevas (uncionalidades como el so orte a nuevos rotocolos de "nternet % el so orte a la gran ma%or&a de las bases de datos comerciales. )odas estas mejoras sentaron las bases de PHP versin 2. /ctualmente PHP se encuentra en su versin 4, que utili!a el motor Cend, desarrollado con ma%or meditacin ara cubrir las necesidades actuales % solucionar algunos inconvenientes de la anterior versin. /lgunas mejoras de esta nueva versin son su ra ide! Dgracias a que rimero se com ila % luego se ejecuta, mientras que antes se ejecutaba mientras se inter retaba el cdigoD, su ma%or inde endencia del servidor web Dcreando versiones de PHP nativas ara ms lata(ormasD % un /P" ms elaborado % con ms (unciones.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

.r(ica del n:mero de dominios % direcciones "P que utili!an PHP. $stad&stica de Netcra(t. $n el :ltimo a'o, el n:mero de servidores que utili!an PHP se #a dis arado, logrando situarse cerca de los 3 millones de sitios % EFF.FFF direcciones "P, lo que le #a convertido a PHP en una tecnolog&a o ular. $sto es debido, entre otras ra!ones, a que PHP es el com lemento ideal ara que el tndem +inuxD/ ac#e sea com atible con la rogramacin del lado del servidor de sitios web. .racias a la ace tacin que #a logrado, % los grandes es(uer!os reali!ados or una creciente comunidad de colaboradores ara im lementarlo de la manera ms tima, odemos asegurar que el lenguaje se convertir en un estndar que com artir los ,xitos augurados al conjunto de sistemas desarrollados en cdigo abierto.
Artculo por

Miguel Angel Alvarez

1.'. (areas principales del "#"


Mencionamos los principales grupos de funciones integradas en el lenguaje ! lo que ellas nos ofrecen. Poco a oco el PHP se va convirtiendo en un lenguaje que nos ermite #acer de todo. $n un rinci io dise'ado ara reali!ar oco ms que un contador % un libro de visitas, PHP #a ex erimentado en oco tiem o una verdadera revolucin %, a artir de sus (unciones, en estos momentos se ueden reali!ar una multitud de tareas :tiles ara el desarrollo del web1

1.'.1. )unciones de correo electrnico


Podemos con una (acilidad asombrosa enviar un eDmail a una ersona o lista arametri!ando toda una serie de as ectos tales como el eDmail de rocedencia, asunto, ersona a res onder... ;tras (unciones menos (recuentes ero de indudable utilidad ara gestionar correos electrnicos son incluidas en su librer&a.

1.'.$. Gestin de bases de datos


>esulta di(&cil concebir un sitio actual, otente % rico en contenido que no es gestionado or una base de datos. $l lenguaje PHP o(rece inter(aces ara el acceso a la ma%or&a de las bases de datos comerciales % or ;?G- a todas las bases de datos osibles en sistemas *icroso(t, a artir de las cuales odremos editar el contenido de nuestro sitio con absoluta sencille!.

1.'.'. Gestin de arc&ivos


-rear, borrar, mover, modi(icar...cualquier ti o de o eracin ms o menos ra!onable que se nos ueda ocurrir uede ser reali!ada a artir de una am lia librer&a de (unciones ara la gestin de arc#ivos or PHP. )ambi,n odemos trans(erir arc#ivos or @)P a artir de sentencias en nuestro cdigo, rotocolo ara el cual PHP #a revisto tambi,n gran cantidad de (unciones.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

1.'.*. (ratamiento de im+genes


$videntemente resulta muc#o ms sencillo utili!ar P#otos#o tratar miles de imgenes enviadas or nuestros internautasJ ara una el tratamiento de imgenes ero...HI si tenemos que

+a verdad es que uede resultar mu% tedioso uni(ormar en tama'o % (ormato miles de imgenes recibidas d&a tras d&a. )odo esto uede ser tambi,n automati!ado e(ica!mente mediante PHP. )ambi,n uede arecer :til el crear botones dinmicos, es decir, botones en los que utili!amos el mismo dise'o % solo cambiamos el texto. Podremos or ejem lo crear un botn #aciendo una :nica llamada a una (uncin en la que introducimos el estilo del botn % el texto a introducir obteniendo automticamente el botn deseado. / artir de la librer&a de (unciones gra(icas odemos #acer esto % muc#o ms. *uc#as otras (unciones ensadas para "nternet 8tratamiento de cooKies, accesos restringidos, comercio electrnico...9 o ara prop#sito general 8(unciones matemticas, ex lotacin de cadenas, de (ec#as, correccin ortogr(ica, com resin de arc#ivos...9 son reali!adas or este lenguaje. / esta inmensa librer&a cabe a#ora a'adir todas las (unciones ersonales que uno va creando or necesidades ro ias % que luego son reutili!adas en otros sitios % todas aquellas intercambiadas u obtenidas en (oros o sitios es eciali!ados. -omo uede verse, las osibilidades que se nos resentan son sor rendentemente vastas. +o :nico que se necesita es un oco de ganas de a render % algo de aciencia en nuestros rimeros asos. $l resultado uede ser mu% satis(actorio.
Artculo por

Rubn Alvarez

Parte 2:

Cmo instalar PHP y MySQL


E+plicaremos di*ersos modos .ue e+isten para instalar ,-, % la base de datos 0%12$3 .ue es todo lo .ue necesitamos para empezar a traba)ar. ,ara ello *eremos c'mo instalar ,-, sobre los ser*idores web 4pache o 551. 4dem/s presentaremos di*ersos pa.uetes .ue nos permiten tener una instalaci'n de todas las aplicaciones necesarias sin necesidad de ninguna con"iguraci'n3 lo .ue puede "acilitarnos mucho la *ida.

$.1. !nstalacin de "#" en nuestro servidor


Pasos previos a la programacin. &nstalacin del modulo PHP en distintos servidores "eb. -omo todo lenguaje de lado servidor, PHP, requiere de la instalacin de un servidor en nuestro P- ara oder trabajar en local. $ste modo de trabajo resulta a todas luces ms rctico que colgar los arc#ivos or @)P en el servidor % ejecutarlos desde "nternet.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com /s& ues, antes comen!ar a crear nuestros rogramas en PHP, es necesario1 D -onvertir nuestro ordenador en un servidor. $sto se #ace instalando uno de los varios servidores dis onibles ara el sistema o erativo de nuestra mquina. D "ntroducir en nuestro servidor los arc#ivos que le ermitirn la com rensin del PHP. $stos arc#ivos ueden ser descargados, en su versin ms actual, de la pgina o$icial de P P. Para conocer la (orma de instalar PHP sobre cada servidor de cada sistema o erativo odemos dirigirnos al a artado de documentaci#n de la pgina o$icial de P P donde dis onemos de un manual en H)*+ de r ida consulta % un enorme manual en P?@ de casi 1FFF ginas traducido al castellano donde ex lican minuciosamente % entre otras cosas, los asos a seguir ara cada caso articular. ?e todos modos, nosotros vamos a o(recer algunas a%udas ara con(igurar PHP en los sistemas ms #abituales. +a eleccin de vuestro rograma servidor tendr muc#o que ver con el sistema o erativo que tengis corriendo en vuestro ordenador. $stas ser&an algunas osibilidades de sistemas o ertativos % soluciones que (uncionan bien.

$.1.1. ,indo-s ./0.1


0i estis trabajando en 7indows 93 o 7indows 9E % ara desarrolladores rinci iantes, odr&a ser recomendable utili!ar el servidor Personal 7eb 0er. $n este caso necesitar&ais1 D Personal 7eb 0erver de *icroso(t como servidor el cual os sirve adems ara el a rendi!aje en /0P. )en,is una gua de instalaci#n y con$iguraci#n en esta misma web. D 5na instalacin autoextraible de la versin ms reciente de PHP que, adems de tardar menos en descargarse, os guiar aso a aso en el roceso de instalacin. $sta versin no inclu%e todas las (uncionalidades de PHP, ero os servir ara a render #asta un buen nivel. Ha% que se'alar que, ara el caso de PHP en P70, adems de todo lo dic#o en ca &tulo de instalacin, es im ortante al crear el directorio virtual ermitir la ejecucin de scri ts validando la caja corres ondiente. $n 7indows 93A9E tambi,n odremos utili!ar el servidor / ac#e % uede que sea una o cin todav&a ms com leta que la de utili!ar P70. / continuacin ex licamos ms sobre ello.

$.1.$. ,indo-s M2 3 4" #ome edition


No #emos robado PHP en estas lata(ormas, ero en rinci io no tienen com atibilidad con Personal 7eb 0erver, or lo que deber&amos decantarnos or otro servidor. ;tra osibilidad ara los usuarios de 7indows en general es instalar Apac%e como servidor web lo cual uede resultar ventajoso con res ecto al uso del P70 %a que PHP est rinci almente dise'ado ara correr en este servidor. $sto quiere decir que, aunque en rinci io todo deber&a (uncionar correctamente sobre ambos servidores, es osible que alg:n bug no corregido #aga (allar uno de nuestros scri ts si trabajamos ara con un servidor cu%as actuali!aciones son menos (recuentes % detalladas. / ac#e #a sido es ecialmente ensado ara lata(ormas 5nixD+inux, aunque recientemente, con la / ac#e L.F, #an desarrollado una versin es ec&(ica ara 7indows. ?is onemos de un art&culo ara a render a con(igurar PHP sobre / ac#e en 7indows, como -." % tambi,n como mdulo de / ac#e.

$.1.'. ,indo-s 5(6 ,indo-s $777 3 4" en sus versiones "ro8esional 3 9erver
Para estos sistemas tenemos dos osibilidades mu% interesantes, %a que odremos instalar PHP sobre "nternet "n(ormation 0erver o sobre / ac#e con todas las garant&as. 0i #ubiese que recomendar una de las dos o ciones, nos decantar&amos or / ac#e debido a que, como dec&amos, PHP est ensado ara trabajar sobre / ac#e. Podr&a ser interesante ""0 en el caso de que deseemos correr /0P % PHP sobre el mismo servidor, %a que, en rinci io, / ac#e no es com atible con /0P.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

$.1.*. :ni; Linu;


Ha% que decir, no obstante, que las mejores restaciones de este lenguaje son obtenidas trabajando en entorno 5nix o +inux % con un servidor / ac#e, la combinacin ms corriente en la ma%or&a de los servidores de "nternet que trabajan con PHP.

$.1./. Conclusin
$n cualquier caso, ara (ines de desarrollo en local, odemos contentarnos en un rinci io de trabajar con cualquier sistema. 0olamente en casos de rogramacin realmente avan!ada odremos con(rontarnos con roblemas relacionados con el sistema o erativo utili!ado o el servidor en el que #acemos correr nuestras ginas. Ha% que ensar tambi,n que, en casos untuales ara los que nuestro P- ueda quedarse corto, odemos #acer directamente nuestras ruebas en el servidor donde alojamos nuestro sitio el cual ser mu% robablemente, como #emos dic#o, un 5nix o +inux (uncionando con / ac#e.
&e$erencia: $n ?esarrollo7eb #emos ublicado diversos manuales % art&culos que ueden ser una buena re(erencia ara la instalacin de PHP. /lgunos se ueden ver a continuacin1 -on(iguracin de PHP con / ac#e en 7indows -on(iguracin de PHP como mdulo de / ac#e, tambi,n en 7indows "nstalacin del Personal 7eb 0erver "nstalacin de ""0 en 7indows 6P ro(esional ?irectorio de / ac#e 8Hemos ublicado un manual o estar en breve9 @/< sobre cmo instalar PHP en 7indows Mideotutorial de instalacin de PHP con 7am M&deo1 instalar PHP en una llave 50G

Artculo por

Rubn Alvarez

$.$. Con8iguracin de "#" con Apac&e en ,indo-s6 como CG!


'prende cmo configurar PHP ! 'pac$e para que trabajen conjuntamente en un sistema (indo"s. &nstalacin como C)&. $l resente art&culo trata de cmo con$igurar P P y Apac%e ara que trabajen conjuntamente en un sistema 'indo(s. /dems, este articulo asume que #a% un servidor / ac#e con(igurado en el 7indows, % que (unciona correctamente.
)ota: 0i deseamos conocer las distintas osibilidades ara la instalacin de PHP en los distintos sistemas o erativos % servidores, uede ser de utilidad la lectura del art&culo "nstalacin de PHP en nuestro servidor.

$xisten dos (ormas de con(igurar PHP ara trabajar con / ac#e, instalar como un mdulo o instalar como un -.". $n este art&culo vamos a ver cmo instalarlo com -.", aunque dis onemos de otro art&culo ara instalar PHP como mdulo en / ac#e.

$.$.1. "ara instalar "#" como un CG! &a3 <ue seguir los siguientes pasos=
$n rimer lugar, #a% que descargarse PHP desde la gina de # .net. $xisten dos versiones, una que tiene un instalador, % otra que es un (ic#ero C"P. Ha% que descargarse esta :ltima. 5na ve! descargado, #a% que descom rimirlo dentro de una car eta, esta no tiene que estar bajo el rbol de directorios de / ac#e. $l art&culo asumir que se descom rime dentro de la car eta -1PHP. -om robar que los contenidos del arc#ivo C"P no quedan en un subdirectorio de la car tea -1PHP, sino directamente en dic#a car eta. ?entro de la car eta c1PHP se encuentra un (ic#ero llamado PHP4ts.dll, #a% que mover el (ic#ero dentro de la car eta1

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com c1windowss%stem c1winnts%stem $n este (ic#ero se encuentra toda la con(iguracin de PHP, % las modi(icaciones en la con(iguracin de PHP 8mostrar $rrores, variables globales etc...9 se encuentra dentro del mismo. $s mu% recomendable cambiar la directiva dis la%Nerrors que or de(ecto esta en ;@@, % ornerla en ;N, ara oder ver los errores que se roducen en las ginas durante el desarrollo. Para un servidor en roduccin en conveniente dejarla en ;@@. 5na ve! se #an #ec#o estos cambios, queda indicarle al / ac#e, donde se encuentra instalado el PHP, ara ello #a% que editar el (ic#ero #tt d.con( que se encuentra dentro de la car eta con(, en la car eta de instalacin del a ac#e 8 or de(ecto c1arc#ivos de rogramaa ac#e grou a ac#eLcon(9 /brir el (ic#ero, % situarse al (inal del mismo, % escribir las siguientes l&neas1
ScriptAlias /php/ "c:/php/" AddType application/x-httpd-php .php Action application/x-httpd-php "/php/php.exe"

$n ellas se indica donde se encuentra el ejecutable de # , % lo asocia a los (ic#eros . # que se encuentren dentro de a ac#e. / continuacin reiniciar el servidor / ac#e, % %a estaO Por :ltimo, indicar que ara robar la nueva instalacin, es recomendable crear un (ic#ero # con el siguiente contenido1
<? phpinfo();?>

+uego lo guardamosdentro de la car eta ra&! de documentos del / ac#e 8 or de(ecto c1arc#ivos de rogramaa ac#e grou a ac#eL#tdocs 9, con un nombre terminado en . # , or ejem lo in(o. # Para ejecutarlo, a trav,s de un navegador, escribir la direccin #tt 1AAlocal#ostAin(o. # . ?eber&a a arecer una antalla como la que se muestra a continuacin.

0i la vemos correctamente es que todo #a ido bien % que tenemos er(ectamente instalado PHP en nuestro servidor / ac#e.
)ota: $ste ti o de instalacin de PHP sobre / ac#e es oco recomendada or motivos de seguridad. Podemos seguirla ara con(igurar PHP en local, con intencin de desarrollar nuestras ginas web, ero nunca si vamos a utili!ar el servidor en un entorno de roduccin, es decir, en un servidor que se encuentre ermanentemente conectado a "nternet sirviendo ginas a todo ti o de usuarios. 0er&a necesario instalar PHP como un mdulo de / ac#e, en lugar de -.", ara dotar al sistema de una ma%or seguridad, % tambi,n ms otencia. &e$erencia: $n esta @/< damos otras o ciones ara la instalacin de PHP, utili!ando rogramas que ermiten instalar % con(igurar / ac#e P PHP P *%0<+ en un sencillo aso, accesible ara todos los usuarios1 -mo instalar PHP en 7indows.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Artculo por

Carlos Luis Cuenca

$.'. Con8iguracin de "#" como modulo de Apac&e en ,indo-s


Explicamos el proceso completo para instalar PHP en una mquina (indo"s ! un servidor 'pac$e. *a instalacin se reali+a como mdulo que es lo ms seguro ! rpido. $n este art&culo vamos a ex licar cmo instalar PHP como mdulo de / ac#e L.F en un sistema 7indows. Para las ruebas #emos utili!ado 7indows 6P, ero seguro que con otros sistemas el roceso ser mu% arecido, aunque, en todo caso, indicaremos las di(erencias documentadas en el sitio de PHP. /nteriormente #ab&amos ex licado la instalacin de PHP como un -.", aunque en la gina de PHP desaconsejan esta o cin, uesto que adolece de graves roblemas de seguridad. /dems, PHP instalado como mdulo de / ac#e resulta muc#o ms r ido que como -.".
&e$erencia: Mamos a su oner que el servidor de ginas web / ac#e L.F est instalado en nuestro sistema. No obstante, ara los que no lo tengan, les re(erimos a nuestro manual de instalacin % con(iguracin de / ac#e.

$.'.1. Descargar 3 descomprimir "#"


$l rimer aso consiste en descargar la :ltima versin de PHP. Podremos #acerlo desde la gina o(icial de PHP, en la seccin de descargas. #tt 1AAwww. # .netAdownloads. # ?ebemos elegir la versin =!i acKage= que contiene todas las (uncionalidades de PHP % el mdulo necesario ara instalarlo en / ac#e. 5na ve! descargado el aquete com rimido en .!i de PHP necesitamos descom rimirlo en nuestro disco duro. Podemos utili!ar el directorio ra&! del disco duro ara descom rimir los arc#ivos. $n ese caso, se crear un directorio llamado algo como = # D4.2.1D7in2L= que colgar de nuestro directorio ra&!. 0e recomienda cambiar el nombre del directorio creado a algo como =c1 # =. $n todo caso, nos advierten en la gina de PHP sobre no colocar ning:n nombre de directorio que contenga es acios, ues alg:n servidor web uede dar roblemas. Por ejem lo, cuidado con instalar PHP en un directorio como este =c1arc#ivos de rograma # =, ues en la ruta tenemos directorios con es acios.

$.'.$. Copia de las DLL


/ continuacin nos in(orman sobre la necesidad de co iar en nuestro directorio de sistema una serie de librer&as 8.dll9, que encontraremos en el directorio sa i de nuestra instalacin de PHP, su uestamente algo como =c1 # sa i=, $l mencionado directorio de sistema uede variar de unas versiones a otras de 7indows. $n 7indows 6P, el directorio de sistema donde debemos co iar las dll, es =-17"N?;70s%stem2L=. $n 7indows 9xA*$, el directorio ser&a =-17indows0%stem= % en 7indows N)ALFFF ser&a el directorio =-17"NN)0%stem2L= o bien, =-17"NN)4F0%stem2L=.
)ota: no se deben me!clar las ?++ de diversas versiones de PHP, orque de lo contrario, odr&a causarnos roblemas.

$.'.'. De8inir un arc&ivo p&p.ini


;tro arc#ivo que debemos co iar, esta ve! en nuestro directorio 7indows, es el # .ini, que guarda las o ciones de con(iguracin de(inidas ara PHP. $n la distribucin de PHP se inclu%en dos arc#ivos # .ini que odemos utili!ar directamente en nuestro sistema. $stos dos arc#ivos se llaman = # .iniDdist= % = # .iniDrecommended= % contienen unas o ciones t& icas de con(iguracin de PHP. 0e recomienda utili!ar = # .iniDrecommended=, orque viene o timi!ado ara obtener los mejores niveles de seguridad. $n cualquier caso, odemos editar en cualquier momento el contenido del arc#ivo

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com ara modi(icar la con(iguracin de PHP a nuestro gusto o necesidades. Para de(inir el # .ini debemos #acer una co ia del arc#ivo de con(iguracin escogido 8= # .iniDdist= o = # .iniD recommended=9 % renombrarlo como el = # .ini=. Posteriormente debemos co iarlo en nuestra car eta 7indows, que en sistemas 9xA*$A6P es =c1windows= % en sistemas N)ALFFF suele ser =c17"NN)=, o bien =c17"NN)4F=.

$.'.*. 2ditar &ttpd.con8


Posteriormente deberemos editar nuestro arc#ivo de con(iguracin de / ac#e, llamado =#tt d.con(= que est en el directorio =con(= de nuestra instalacin de / ac#e. )ambi,n odemos encontrar un acceso directo ara editar este arc#ivo accediendo a "nicio D Programas D / ac#e H))P 0erver D -on(igure / ac#e H))P 0erver D $dit #tt d.con( con(iguration (ile. ?ebemos a'adir un ar de l&neas de con(iguracin del mdulo de / ac#e.
oad!od"le php#$%od"le &:phpsapiphp#apache'.dll AddType application/x-httpd-php .php

$l lugar adecuado ara a'adir esas l&neas es en el bloque de carga de mdulos, que odemos encontrar si buscamos or el texto =+oad*odule=. Podemos a'adir las l&neas de carga del mdulo PHP des u,s de la carga de los otros mdulos que vienen %a con(igurados en arc#ivo #tt d.con( de / ac#e. 0i no instalamos PHP en el directorio c1 # , debemos editar las l&neas a colocar en el #tt d.con( ara colocar la ruta correcta al directorio donde est la librer&a # 4a ac#eL.dll.

$.'./. :n >ltimo paso


/ntes de acabar % robar si PHP se #a instalado correctamente, necesitamos co iar una dll en el directorio sa i. -oncretamente, la dll = # 4ts.dll=, que odemos encontrar en nuestro directorio de instalacin de PHP es la que debemos co iar al directorio sa i, algo como =c1 # sa i=.
)ota: $sta accin no viene documentada en el manual de PHP, aunque s& no la llevamos a cabo no (uncionar. $l error que obtenemos al tratar de arrancar el / ac#e es algo como1

1%nta+ error on line !67 o" (:/4rchi*os de programa/4pache 8roup/4pache2/con"/httpd.con": (annot load (:/php/sapi/php4apache2.dll into ser*er: &o se puede encontrar el m'dulo especi"icado.

;tra con(iguracin que odemos a licar al arc#ivo #tt d.con( es de(inir tambi,n como documento or de(ecto el arc#ivo index. # en nuestro servidor / ac#e. $l documento or de(ecto es generalmente index.#tml, ero lo #abitual si vamos a rogramar con PHP es que tambi,n necesitemos de(inir index. # como documento a mostrar si no se indica otro documento del directorio al que se est accediendo. $l documento or de(ecto se de(ine con la variable ?irector%"ndex. Nos quedar una deninicin como esta1
(irectory)ndex index.ht%l index.ht%l.*ar index.php

$.'.?. "robar si "#" est+ 8uncionando correctamente


Para terminar, odemos crear una gina de rueba de PHP, que colocaremos en nuestro directorio de ublicacin de / ac#e, generalmente llamado #tdocs, que se aloja dentro del directorio donde se #a instalado / ac#e, algo como =-1/rc#ivos de rograma/ ac#e .rou / ac#eL#tdocs= Podemos crear un arc#ivo llamado, or ejem lo, = rueba. # =, en el que colocaremos dentro el siguiente cdigo1
<? phpinfo() ?>

$sta (uncin sim lemente crear una gina de muestra de las con(iguraciones de(inidas ara PHP en ese servidor.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

10

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Para acceder al arc#ivo creado desde nuestro ex lorador, escribiremos en la barra de direcciones esta 5>+1 #tt 1AAlocal#ostA rueba. # ?eber&a a arecer un resultado como el de la siguiente imagen.

&e$erencia: $n esta @/< damos otras o ciones ara la instalacin de PHP, utili!ando rogramas que ermiten instalar % con(igurar / ac#e P PHP P *%0<+ en un sencillo aso, accesible ara todos los usuarios1 -mo instalar PHP en 7indows.

Artculo por

Miguel Angel Alvarez

$.*. !nstalacin de M39@L en ,indo-s


Pasos a seguir para la instalacin de la base de datos M!,-* ! algunas a!udas bsicas para comen+ar con buen pie. 5no de los untos (uertes de las ginas en PHP es la osibilidad de ex lotar bases de datos mediante (unciones de una sim licidad % otencia mu% agradecidas. $stas bases de datos ueden servir a nuestro sitio ara almacenar contenidos de una (orma sistemtica que nos ermita clasi(icarlos, buscarlos % editarlos r ida % (cilmente. 5na base de datos es sencillamente un conjunto de tablas en las que almacenamos distintos registros 8art&culos de una tienda virtual, roveedores o clientes de una em resa, el&culas en cartelera en el cine...9. $stos registros son catalogados en (uncin de distintos armetros que los caracteri!an % que resentan una utilidad a la #ora de clasi(icarlos. /s&, or ejem lo, los art&culos de una tienda virtual odr&an catalogarse a artir de distintos cam os como uede ser un n:mero de re(erencia, nombre del art&culo, descri cin, recio, roveedor... +a base de datos ms di(undida con el tandem 5N"6D/ ac#e es sin duda *%0<+. -omo ara el caso de / ac#e, una versin ara 7indows est dis onible % uede ser descargada gratis. 0u uesta a unto no entra'a muc#a di(icultad. 5na ve! instalado el rograma odemos ejecutar nuestras ordenes en modo *0D?;0. Para ello abrimos una ventana *0D?;0 % nos colocamos en el directorio bin de mysql. $n este directorio se encuentran los arc#ivos ejecutables. /qu& #abr que encontrar un arc#ivo llamado mysqld. $n el caso de la versin ms actual durante la redaccin de este articulo este arc#ivo es llamado m%sqldDs#areware. 5na ve! ejecutado este arc#ivo odemos ejecutar el siguiente1 mysql. +legados a este unto veremos cmo un mensaje de bienvenida a arece en nuestra antalla. $n estos momentos nos

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

11

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com encontramos dentro de la base de datos. / artir de a#& odemos reali!ar todo ti o de o eraciones or sentencias 0<+. No vamos a entrar en una ex licacin ormenori!ada del (uncionamiento de esta base de datos %a que esto nos dar&a ara un manual entero. ?aremos como re(erencia nuestro tutorial de SQL a artir del cual se uede tener una idea mu% rctica de las sentencias necesarias ara la creaci#n % edicin de las tablas. )ambi,n existe una documentacin extensa en ingl,s en el directorio Docs de *%0<+. / modo de resumen, aqu& os ro onemos adems las o eraciones ms bsicas que, combinadas nuestro tutorial de SQL ueden dar solucin a gran arte de los casos que se os resenten1

!nstruccin 1how databases9

Descripcin 0uestra el con)unto de bases de datos presentes en el ser*idor Determina la base de datos sobre la .ue *amos a traba)ar (rea una nue*a bd con el nombre especi"icado Elimina la base de datos del nombre especi"icado 0uestra las tablas presentes en la base de datos actual Describe los campos .ue componen la tabla

:se nombre;de;la;base (reate Database nombre;de;la;base9 Drop Database nombre;de;la;base9 1how tables9 Describe nombre;de;la;tabla9 Drop <able nombre;de;la;tabla9 $oad Data $ocal 5n"ile >archi*o.t+t> 5nto <able nombre;de;la;tabla9 2uit

=orra la tabla de la base de datos (rea los registros de la tabla a partir de un "ichero de te+to en el .ue separamos por tabulaciones todos los campos de un mismo registro. 1alir de 0%12$

Para evitarnos el tener que editar nuestras tablas directamente sobre arc#ivos de texto, uede resultar mu% rctico usar cualquier otra base de datos con un editor % ex ortar a continuacin la tabla en un arc#ivo de texto con(igurado ara dejar tabulaciones entre cada cam o. $sto es osible en /ccess or ejem lo inc#ando con el botn derec#o sobre la tabla que queremos convertir % eligiendo la o cin ex ortar. 5na ventana de dialogo a arecer en la que elegiremos guardar el arc#ivo en ti o texto. $l aso siguiente ser elegir un (ormato delimitado or tabulaciones sin cuali(icador de texto. ;tra osibilidad que uede resultar mu% rctica % que nos evita trabajar continuamente tecleando rdenes al estilo de anta'o es servirse de rogramas en PHP o Perl %a existentes % descargables en la red. $l ms o ular sin duda es

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

12

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com p%pMyAdmin. $ste ti o de scri ts son ejecutados desde un navegador % ueden ser or tanto albergados en nuestro servidor o em leados en local ara, a artir de ellos, administrar *%0<+ de una (orma menos su(rida. /simismo, dentro del directorio bin de *%0<+, odemos encontrar una eque'a a licacin llamada *%0ql*anager. 0e trata de una inter(ace windows, ms agradable a la vista % al uso que la que obtenemos ejecutando el arc#ivo mysql. $n este caso, las sentencias 0<+ deben reali!arse sin el unto % coma (inal.
Artculo por

Rubn Alvarez

$./. !nstalando "#" con !!9


Cmo instalar paso a paso PHP con &&,. ?escargar arc#ivos de #tt 1AAwww. # .netAdownloads. # Qv3 0e recomienda bajar los arc#ivos PHP 3.L.1 !i acKage % las extensiones adicionales P$-+ P$-+ 3.L.1 7in2L binaries acKage % extraer los arc#ivos de P$-+ 3.L.1 7"N2L 1. -rear directorio en -1PHP % extraer los arc#ivos de # 3.L1!i binaries en el directorio -1PHP$6). L. >enombrar el arc#ivio # .iniDrecommended como # .ini 2. *odi(icar arc#ivo # .ini en las siguientes variables s#ortNo enNtag R ;n extensionNdir R =c1 # ext= cgi.(orceNredirect R F 4. -o iar # .ini a c1windows o c1winnt 3. >egistrar la ?++ regsvr2L # 3activescri t.dll 4. /gregar ruta de del directorio # % las extenciones en la o cion de $nvironment Mariable de windowsLFF2

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

13

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

B. -on(iguracin en ""0

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

14

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

E. -on(igurando extensiones en ""0

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

15

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

16

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

9. Probando PHP -rear arc#ivo index. # en -1"net ubwwwroot -o iar el codigo siguiente en el arc#ivo
<<?php // testin+ sessions // chec, to see if files are -ein+ created // in the session.sa*e$path folder session$start(); ?> <ht%l> <head> <title>./. Test</title> </head> <-ody> <p> The -ro0ser yo"1re "sin+ is <?php echo 2$S3453461/TT.$7S34$A839T1:; ?> </p> <p> <;-- test the -ro0scap set"p --> <o"r -ro0ser1s capa-ilities are: <-r/> <pre> <?php print$r(+et$-ro0ser(n"ll= tr"e)); ?> </pre> </p> <?php phpinfo(); ?> </-ody> </ht%l>

L. /brir "$4 % oner la direccin #tt 1AAlocal#ostAindex. # , si le da error veri(icar los asos de la instalacin. 0i no da error saldra una antalla con in(ormacin sobre la versin de # .
Artculo por

Jorge Ramos

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

17

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Parte 3:

Primeros pasos con el lenguaje PHP


Empezamos a traba)ar con el lengua)e de programaci'n. En los siguientes captulos del 0anual de ,-, e+plicaremos las generalidades sobre el lengua)e3 como su sinta+is3 las *ariables .ue podemos crear % sus tipos de datos3 las *ariables del sistema .ue est/n disponibles sobre el ser*idor3 operadores3 etc.

'.1. !ntroduccin a la sinta;is "#"


Explicamos las pautas principales a seguir para incluir PHP en el cdigo de nuestra pgina, la forma de introducir comentarios. PHP se escribe dentro de la ro ia gina web, junto con el cdigo H)*+ %, como ara cualquier otro ti o de lenguaje incluido en un cdigo H)*+, en PHP necesitamos es eci(icar cules son las artes constitutivas del cdigo escritas en este lenguaje. $sto se #ace, como en otros casos, delimitando nuestro cdigo or etiquetas. Podemos utili!ar distintos modelos de etiquetas en (uncin de nuestras re(erencias % costumbres. Ha% que tener sin embargo en cuenta que no necesariamente todas estn con(iguradas inicialmente % que otras, como es el caso de ST % TU slo estn dis onibles a artir de una determinada versin 82.F.4.9. $stos modos de abrir % cerrar las etiquetas son1
<? y ?> <> y >> <?php y ?> <script lan+"a+e?"php">

$ste ultimo modo est rinci almente aconsejado a aquellos que tengan el valor de trabajar con @ront Page %a que, usando cualquier otro ti o de etiqueta, corremos el riesgo de que la a licacin nos la borre sin ms debido a que se trata de un cdigo incom rensible ara ella. $l modo de (uncionamiento de una gina PHP, a grandes rasgos, no di(iere del clsico ara una gina dinmica de lado servidor1 $l servidor va a reconocer la extensin corres ondiente a la gina PHP 8 #tml, # , # 4,...9 % antes de enviarla al navegador va a encargarse de inter retar % ejecutar todo aquello que se encuentre entre las etiquetas corres ondientes al lenguaje PHP. $l resto, lo enviara sin ms %a que, asumir que se trata de cdigo H)*+ absolutamente com rensible or el navegador. ;tra caracter&stica general de los scri ts en PHP es la (orma de se arar las distintas instrucciones. Para #acerlo, #a% que acabar cada instruccin con un unto % coma =V=. Para la ultima ex resin, la que va antes del cierre de etiqueta, este (ormalismo no es necesario. "ncluimos tambi,n en este ca itulo la sintaxis de comentarios. 5n comentario, ara aquellos que no lo se an, es una (rase o alabra que nosotros incluimos en el cdigo ara com renderlo ms (cilmente al volverlo a leer un tiem o des u,s % que, or su uesto, el ordenador tiene que ignorar %a que no va dirigido a ,l sino a nosotros mismos. +os comentarios tienen una gran utilidad %a que es mu% (cil olvidarse del (uncionamiento de un scri t rogramado un tiem o atrs % resulta mu% :til si queremos #acer r idamente com rensible nuestro cdigo a otra ersona.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

18

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Pues bien, la (orma de incluir estos comentarios es variable de endiendo si queremos escribir una l&nea o ms. Meamos esto con un rimer ejem lo de scri t1
<? 2%ensa@e?"Ten+o ha%-re;;"; //&o%entario de "na linea echo 2%ensa@e; A3ste co%entario ta%-iBn es de "na linea /C3n este caso %i co%entario oc"pa *arias lineas= lo *es? C/ ?>

*+ecutar script 0i usamos doble barra 8AA9 o el s&mbolo Q odemos introducir comentarios de una l&nea. *ediante AW % WA creamos comentarios multil&nea. Por su uesto, nada nos im ide de usar estos :ltimos en una sola l&nea. No os reocu ,is si no com rend,is el texto entre las etiquetas, todo llegar. ;s adelantamos que las variables en PHP se de(inen ante oniendo un s&mbolo de dlar 8X9 % que la instruccin echo sirve ara sacar en antalla lo que #a% escrito a continuacin. >ecordamos que todo el texto insertado en (orma de comentario es com letamente ignorado or el servidor. >esulta im ortante acostumbrarse a dejar comentarios, es algo que se agradece con el tiem o.
Artculo por

Rubn Alvarez

'.$. Aariables en "#"


.ipos de variables, caracter/sticas generales ! aspectos espec/ficos de PHP de estos elementos bsicos de la programacin. +as variables son uno de los rimeros temas que tenemos que conocer en PHP % en la ma%or&a de los lenguajes de rogramacin. /s& que a continuacin vamos a tratar este tema dentro del *anual de PHP, ex licando los ti os de variables que odremos encontrar. /nteriormente en ?esarrollo7eb.com, en el manual de ginas dinmicas, %a #ab&amos introducido el concepto de variable. $n el ca &tulo anterior comentbamos que, ara PHP, las variables eran de(inidas ante oniendo el s&mbolo dlar 8X9 al nombre de la variable que estbamos de(iniendo. ?e endiendo de la in(ormacin que contenga, una variable uede ser considerada de uno u otro ti o1

Aariables numricas 4lmacenan ci"ras Enteros Real ?entero@2AA29 ?real@7.!4!BC9 &umeros sin decimales &umeros con o sin decimal

Aariables al8anumricas 4lmacenan te+tos compuestos de nDmeros %/o ci"ras (adenas 4lmacenan *ariables al"anumEricas ?cadena@>-ola amigo>9

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

19

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

(ablas 4lmacenan series de in"ormaciones numEricas %/o al"anumEricas ?sentidoF!G@>*er>9 ?sentidoF2G@>tocar>9 ?sentidoF7G@>oir>9 ?sentidoF4G@>gusto>9 ?sentidoFBG@>oler>9

4rra%s 1on las *ariables .ue guardan las tablas

BbCetos 1e trata de con)untos de *ariables % "unciones asociadas. ,resentan una comple)idad ma%or .ue las *ariables *istas hasta ahora pero su utilidad es m/s .ue interesante.
/ di(erencia de otros lenguajes, PHP osee una gran (lexibilidad a la #ora de o erar con variables. $n e(ecto, cuando de(inimos una variable asignndole un valor, el ordenador le atribu%e un ti o. 0i or ejem lo de(inimos una variable entre comillas, la variable ser considerada de ti o cadena1
2*aria-le?"D"; //esto es "na cadena

0in embargo si edimos en nuestro scri t reali!ar una o eracin matemtica con esta variable, no obtendremos un mensaje de error sino que la variable cadena ser asimilada a num,rica1
<? 2cadena?"D"; //esto es "na cadena 2entero?E; //esto es "n entero echo 2cadenaF2entero ?>

*+ecutar script $ste scri t dar como resultado =E=. +a variable cadena #a sido asimilada en entero 8aunque su ti o sigue siendo cadena9 ara oder reali!ar la o eracin matemtica. ?el mismo modo, odemos o erar entre variables ti o entero % real. No debemos reocu arnos de nada, PHP se encarga durante la ejecucin de inter retar el ti o de variable necesario ara el buen (uncionamiento del rograma. 0in embargo, en contraste, #a% que tener cuidado en no cambiar ma%:sculas or min:sculas %a que, en este sentido, PHP es sensible. -onviene or lo tanto trabajar %a sea siem re en ma%:sculas o siem re en min:sculas ara evitar este ti o de malentendidos a veces mu% di(&ciles de locali!ar. Variables asignadas por re$erencia $n PHP tambi,n odemos asignar variables or re(erencia. $n ese caso no se les asigna un valor, sino otra variable, de tal modo que las dos varialbles com arten es acio en memoria ara el mismo dato. +a notacin ara asignar or re(erencia es colocar un =Y= antes del nombre de la variable.
<?php 2foo ? 1Go-1; // Asi+na el *alor 1Go-1 a 2foo 2-ar ? H2foo; // 4eferencia 2foo *Ia 2-ar. 2-ar ? "!i no%-re es 2-ar"; // !odifica 2-ar... echo 2foo; // 2foo ta%-iBn se %odifica. echo 2-ar; ?>

$sto dar como resultado la visuali!acin dos veces del string =*i nombre es Gob=. /lgo como1 *i nombre es Gob*i nombre es Gob

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

20

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

)ota: )enemos un videotutorial que nos #abla de las variables PHP

Artculo por

Rubn Alvarez

'.'. Cambio del tipo de las variables en "#"


0ormas en que una variable de PHP puede ver variado su tipo. PHP no requiere que indiquemos el ti o que va a contener una variable, sino que lo deduce del valor que asignemos a la variable. /simismo, se encarga de actuali!ar automticamente el ti o de la variable cada ve! que le asignamos un nuevo valor. Por ello, ara cambiar el ti o de una variable sim lemente le asignamos un valor con un nuevo ti o.
)ota: 0e exclu%en en este caso el cambio de variables a ti o /rra% orque la sintaxis uede resultar ambigua al ex resar ese cdigo, es decir, uede darse el caso de que una l&nea de cdigo ueda signi(icar dos cosas.

Xa R =1=V AAXa es una cadena XaZF[ R =(=V AAH$stamos editando el &ndice de la cadena o (or!ando a arra%J

'.'.1. )orzado
$n cualquier caso, odemos (or!ar una variable ara que cambie de ti o con la (uncin set)% e89. set)% e8Xvariable,=nuevoNti o=9V la (uncin set)% e89 actuali!a el ti o de Xvariable a =nuevoNti o= % devuelve un boleano indicando si #ubo ,xito o no en la conversin. $ntre =nuevoNti o= tenemos1 \ =integer= \ =double= \ =string= \ =arra%= \ =object= )ambi,n odemos #acer que una variable se com orte como un ti o determinado (or!ndola, de la misma manera a como se #ace en el lenguaje -. Xvariable R =L2=V Xvariable R 8int9 XvariableV +os (or!ados ermitidos son1 \ 8int9, 8integer9 D (uer!a a entero 8integer9 \ 8real9, 8double9, 8(loat9 D (uer!a a doble 8double9 \ 8string9 D (uer!a a cadena 8string9

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

21

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com \ 8arra%9 D (uer!a a arra% 8arra%9 8object9 D (uer!a a objeto 8object9
Artculo por

Miguel Angel Alvarez

'.*. Aariables de sistema en "#"


-u son ! para qu sirven estas variables del servidor. Comentamos algunas de las ms 1tiles. ?ada su naturale!a de lenguaje de lado servidor, PHP es ca a! de darnos acceso a toda una serie de variables que nos in(orman sobre nuestro servidor % sobre el cliente. +a in(ormacin de estas variables es atribuida or el servidor % en ning:n caso nos es osible modi(icar sus valores directamente mediante el scri t. Para #acerlo es necesario in(luir directamente sobre la ro iedad que de(inen. $xisten multitud de variables de este ti o, algunas sin utilidad a arente % otras realmente interesantes % con una a licacin directa ara nuestro sitio web. /qu& os enumeramos algunas de estas variables % la in(ormacin que nos a ortan1

Aariable

Descripcin

&os in"orma principalmente sobre el sistema operati*o % tipo % *ersi'n de na*egador utilizado por el internauta. 1u principal utilidad radica en .ue3 a partir ?-<<,;:1ER;48E de esta in"ormaci'n3 podemos redireccionar nuestros &< usuarios hacia p/ginas optimizadas para su na*egador o realizar cual.uier otro tipo de acci'n en el conte+to de un na*egador determinado. &os de*uel*e la o las abre*iaciones de la lengua considerada como principal por el na*egador. Esta ?-<<,;4((E,<;$4 lengua o lenguas principales pueden ser elegidas en el &8:48E menD de opciones del na*egador. Esta *ariable resulta tambiEn e+tremadamente Dtil para en*iar al internauta a las p/ginas escritas en su lengua3 si es .ue e+isten. &os indica la :R$ desde la cual el internauta ha tenido acceso a la p/gina. 0u% interesante para generar ?-<<,;REHERER botones de >4tr/s> din/micos o para crear nuestros propios sistemas de estadsticas de *isitas. &os de*uel*e una cadena con la :R$ del script .ue est/ siendo e)ecutado. 0u% interesante para crear botones para recargar la p/gina.

?,-,;1E$H

?-<<,;8E<;I4R1 1e trata de un arra% .ue almacena los nombres % contenidos de las *ariables en*iadas al script por :R$ o

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

22

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

por "ormularios 8E< 1e trata de un arra% .ue almacena los nombres % ?-<<,;,J1<;I4R1 contenidos de las *ariables en*iadas al script por medio de un "ormulario ,J1< 1e trata de un arra% .ue almacena los nombres % ?-<<,;(JJK5E;I4 contenidos de las cooLies. Ieremos .uE son m/s R1 adelante. 4lmacena la *ariable usuario cuando se e"ectDa la entrada a p/ginas de acceso restringido. (ombinado ?,-,;4:<-;:1ER con ?,-,;4:<-;,W resulta ideal para controlar el acceso a las p/ginas internas del sitio. 4lmacena la *ariable password cuando se e"ectDa la entrada a p/ginas de acceso restringido. (ombinado ?,-,;4:<-;,W con ?,-,;4:<-;:1ER resulta ideal para controlar el acceso a las p/ginas internas del sitio. ?RE0J<E;4DDR 0uestra la direcci'n 5, del *isitante.

?DJ(:0E&<;RJJ &os de*uel*e el path "sico en el .ue se encuentra < alo)ada la p/gina en el ser*idor. ?,-,1E115D 8uarda el identi"icador de sesi'n del usuario. Ieremos m/s adelante en .uE consisten las sesiones.

No todas estas variables estn dis onibles en la totalidad de servidores o en determinadas versiones de un mismo servidor. adems, algunas de ellas #an de ser reviamente activadas o de(inidas or medio de alg:n acontecimiento. /s&, or ejem lo, la variable XH))PN>$@$>$> no estar de(inida a menos que el internauta acceda al scri t a artir de un enlace desde otra gina.

'.*.1. Aariables superglobales


/ artir de PHP 4.1.F, se dis one de un conjunto de varibles de ti o arra% que mantienen in(ormacin del sistema, llamadas su erglobales orque se de(inen automticamente en un mbito global. $stas variables #acen re(erencia a las mismas que se acced&an antes or medio de los arra%s del ti o XH))PNWNM/>0. ]stas todav&a existen, aunque a artir de PHP 3.F.F se ueden desactivar con la directiva registerNlongNarra%s. +a lista de estas variables, extra&da directamente de la documentacin de PHP es la siguiente1

'.*.$. DGLB%AL9
-ontiene una re(erencia a cada variable dis onible en el es ectro de las variables del scri t. +as llaves de esta matri! son los nombres de las variables globales. X.+;G/+0 existe dese PHP 2.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

23

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

,-S*&V*& Mariables de(inidas or el servidor web directamente relacionadas con el entorno en don el scri t se esta ejecutando. /nloga a la antigua matri! XH))PN0$>M$>NM/>0 8la cual est todav&a dis onible, aunque no se use9. ,-.*T Mariables ro orcionadas al scri t or medio de H))P .$). /nloga a la antigua matri! XH))PN.$)NM/>0 8la cual est todav&a dis onible, aunque no se use9. ,-P/ST Mariables ro orcionadas al scri t or medio de H))P P;0). /nloga a la antigua matri! XH))PNP;0)NM/>0 8la cual est todav&a dis onible, aunque no se use9. ,-0//1"* Mariables ro orcionadas al scri t or medio de H))P cooKies. /nloga a la antigua matri! XH))PN-;;^"$NM/>0 8la cual est todav&a dis onible, aunque no se use9. ,-2"L*S Mariables ro orcionadas al scri t or medio de la subida de (ic#eros via H))P . /nloga a la antigua matri! XH))PNP;0)N@"+$0 8la cual est todav&a dis onible, aunque no se use9. Mea tambi,n 0ubiendo (ic#eros or m,todo P;0) ara ms in(ormacin. ,-*)V Mariables ro orcionadas al scri t or medio del entorno. /nloga a la antigua matri! XH))PN$NMNM/>0 8la cual est todav&a dis onible, aunque no se use9. ,-&*Q3*ST Mariables ro orcionadas al scri t or medio de cuaquier mecanismo de entrada del usuario % or lo tanto no se uede con(iar en ellas. +a resencia % el orden en que a arecen las variables en esta matri! es de(inido or la directiva de con(iguracin variablesNorder. $sta matri! no tiene un anlogo en versiones anteriores a PHP 4.1.F. Mea tambi,n im ortNrequestNvariables89. ,-S*SS"/) Mariables registradas en la sesin del scri t. /nloga a la antigua matri! XH))PN0$00";NNM/>0 8la cual est todav&a dis onible, aunque no se use9. Mea tambi,n la seccin @unciones ara el manejo de sessiones ara ms in(ormacin.
Artculo por

Rubn Alvarez

'./. Embito de las variables en "#"


Explicamos con detalle el mbito de existencia de una variable en PHP ! distinguimos entre variables globales ! locales. $n cualquier lenguaje de rogramacin las variables tienen un mbito, que es el lugar o lugares donde tienen valide!. $l mbito var&a en (uncin de donde se #a%an creado esas variables, udiendo ser globales o locales. $n PHP, todas las variables creadas en la gina, (uera de (unciones, son variables globales a la gina. Por su arte, las variables creadas dentro de una (uncin son variables locales a esa (uncin. +as variables globales se ueden acceder en cualquier lugar de la gina, mientras que las variables locales slo tienen valide! dentro de la (uncin donde #an sido creadas. ?e modo que una variable global la odemos acceder dentro de cualquier arte del cdigo, mientras que si intentamos acceder a una variable local (uera de la (uncin donde (ue creada, nos encontraremos con que esa variable no tiene contenido alguno. /#ora bien, si intentamos acceder a una variable global dentro de una (uncin, en rinci io tambi,n nos encontraremos con

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

24

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com que no se tiene acceso a su valor. $sto es as& en PHP or motivos de claridad del cdigo, ara evitar que se ueda restar a con(usin el #ec#o de usar dentro de una (uncin una variable que no #a sido declarada or ning:n sitio cercano.
)ota: tal ve! resulten desconocidos los conce tos sobre (unciones, que se tratan ms adelante en este manual1 (unciones en PHP

$ntonces, si queremos utili!ar una variable global a la gina dentro de una (uncin, tenemos que es eci(icar de alguna manera que esa variable que vamos a utili!ar es una global. $xisten en PHP un ar de maneras de utili!ar variables globales a la gina dentro de una (uncin. 0on las siguientes1 Matriz .L/4ALS $xiste un arra% en PHP llamado X.+;G/+0, que guarda una re(erencia a todas las variables creadas de manera global a la gina. $s una matri! o arra% asociativo, de los que en lugar de &ndices num,ricos utili!an &ndices de texto, donde cada &ndice es el nombre que #emos dado a la variable % cada valor es el contenido de cada variable. 0u ongamos que tenemos esta declaracin de variables globales a la gina, es decir, (uera de cualquier (uncin1
2%i*aria-le ? "pepe"; 2otra*aria-le ? J'E#;

0i queremos acceder a esas variables dentro de una (uncin utili!ando el arra% X.+;G/+0 tendr&amos este cdigo1
f"nction %if"ncion()K //estoy dentro de la f"nciLn= para aceder a las *aria-les "tiliMo 28 NGA S echo 28 NGA S6"%i*aria-le":; echo 28 NGA S6"otra*aria-le":; O

-omo se uede ver, se accede al contenido de las variables globales con el arra% X.+;G/+0, utili!ando como &ndices de la matri! los nombres de variables que deseamos mostrar. $sto im rimir&a or antalla el texto = e e1L24=, el valor de las dos variables uno detrs del otro. 5eclaraci#n de uso de variables globales dentro de una $unci#n ;tra cosa que odemos #acer ara acceder a variables globales dentro de una (uncin es es eci(icar al comien!o de dic#a (uncin la lista de variables que vamos a utili!ar dentro. Para es eci(icar esas variables utili!amos la alabra =global= seguida de la lista de variables que se van a utili!ar del entorno global.
f"nction %if"ncion()K +lo-al 2%i*aria-le= 2otra*aria-le //con esa lInea dentro de la f"nciLn= declara%os el "so de *aria-les +lo-ales echo 2%i*aria-le; echo 2otra*aria-le; O

-omo vemos, con =global= se es eci(ica que vamos a utili!ar unas variables que (ueron declaradas como globales a la gina. 5na ve! #ec#o esto, %a odemos acceder a esas variables globales como si estuvieran declaradas dentro de la (uncin. -ualquier alteracin que #agamos a las variables dentro de la (uncin ermanecer cuando se #a%a salido de la (uncin, tanto si accedemos a trav,s del arra% X.+;G/+0 o declarando con =global= el uso de esas variables.
Artculo por

Miguel Angel Alvarez

'.?. Bperadores
*ista descriptiva de los operadores ms frecuentemente utili+ados +as variables, como base de in(ormacin de un lenguaje, ueden ser creadas, modi(icadas % com aradas con otras or medio de los llamados o eradores. $n los ca &tulos anteriores #emos utili!ado en nuestros ejem los algunos de ellos. $n este ca &tulo retendemos listar los ms im ortantes % as& dar constancia de ellos ara (uturos ejem los.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

25

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

'.?.1. Bperadores aritmticos


Nos ermiten reali!ar o eraciones num,ricas con nuestras variables

1uma Resta

G 0

0ultiplicaci'n Di*isi'n

H De*uel*e el resto de la di*isi'n

&e$erencia: $l o erador aritm,tico que uede resultar ms desconocido ara los lectores es el o erador T. $x licamos con ma%or detenimiento su (uncionamiento % un ejem lo en el que es :til en el taller1 +istas de elementos con colores alternos en PHP.

'.?.$. Bperadores de comparacin


0e utili!an rinci almente en nuestras condiciones ara com arar dos variables % veri(icar si cum le o no la ro iedad del o erador.

II 5gualdad JI Desigual K 0enor .ue KI 0enor igual .ue L 0a%or .ue LI 0a%or igual .ue

'.?.'. Bperadores lgicos


0e usan en combinacin con los o eradores de com aracin cuando la ex resin de la condicin lo requiere.

4nd Br

M J

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

26

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

&o

'.?.*. Bperadores de incremento


0irven ara aumentar o disminuir de una unidad el valor de una variable

NN?*ariable 4umenta de ! el *alor de ?*ariable OO?*ariable Reduce de uno el *alor de ?*ariable

'.?./. Bperadores combinados


5na (orma #abitual de modi(icar el valor de las variables es mediante los o eradores combinados1

?*ariable FI !A ?*ariable I !A ?*ariable .I >aPado>

1uma !A a ?*ariable Resta !A a ?*ariable (oncatena las cadenas ?*ariable % >aPado>

$ste ti o de ex resiones no son ms que abreviaciones de otras (ormas ms clsicas1 Xvariable PR 1F es lo mismo que1 Xvariable R XvariableP1F
Artculo por

Rubn Alvarez

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

27

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Parte 4:

rrays y ca!enas
&os detenemos para *er c'mo son los arra%s en ,-,3 la estructura de datos m/s esencial .ue e+iste. 4dem/s aprenderemos a traba)ar con cadenas en ,-,.

*.1. (ablas o Arra3s en "#"


Creacin de tablas por medio de variables tipo arra!. 2tilidad ! funciones 1tiles relacionadas. 5n ti o de variable que %a #emos descrito ero uede ser relativamente com licado a asimilar con res ecto a la ma%or&a son los arra%s. 5n arra% es una variable que est com uesta de varios elementos cada uno de ellos catalogado dentro de ella misma or medio de una clave. $n el ca &tulos anteriores on&amos el ejem lo de un arra% llamado sentido que conten&a los distintos sentidos del ser #umano1
2sentido6J:?"*er"; 2sentido6':?"tocar"; 2sentido6E:?"oir"; 2sentido6#:?"+"star"; 2sentido6D:?"oler";

$n este caso este arra% cataloga sus elementos, comunmente llamados valores, or n:meros. +os n:meros del 1 al 3 son or lo tanto las claves % los sentidos son los valores asociados. Nada nos im ide em lear nombres 8cadenas9 ara clasi(icarlos. +o :nico que deberemos #acer es entrecomillarlos1
<? 2%oneda6"espana":?".eseta"; 2%oneda6"francia":?"Pranco"; 2%oneda6""sa":?"(olar"; ?>

;tra (orma de de(inir id,nticamente este mismo arra% % que nos uede a%udar ara la creacin de arra%s ms com lejos es la siguiente sintaxis1
<? 2%oneda?array("espana"?> ".eseta"="francia" ?> "Pranco"=""sa" ?> "(olar"); ?>

5na (orma mu% ractica de almacenar datos es mediante la creacin de arra%s multidimensionales 8tablas9. Pongamos el ejem lo siguiente1 <ueremos almacenar dentro de una misma tabla el nombre, moneda % lengua #ablada en cada a&s. Para #acerlo odemos em lear un arra% llamado a&s que vendr de(inido or estas tres caracter&sticas 8claves9. Para crearlo, deber&amos escribir una ex resin del mismo ti o que la vista anteriormente en la que meteremos una arra% dentro del otro. $ste roceso de incluir una instruccion dentro de otra se llama anidar % es mu% corriente en rogramacin1
<? 2pais?array ( "espana" ?>array ( "no%-re"?>"3spaQa"= "len+"a"?>"&astellano"= "%oneda"?>".eseta" )=

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

28

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


"francia" ?>array ( "no%-re"?>"Prancia"= "len+"a"?>"PrancBs"= "%oneda"?>"Pranco" ) ); echo 2pais6"espana":6"%oneda": //Saca en pantalla: ".eseta" ?>

*+ecutar script /ntes de entrar en el detalle de este eque'o scri t, comentemos algunos untos re(erentes a la sintaxis. -omo uede verse, en esta secuencia de scri t, no #emos introducido unto % coma =V= al (inal de cada l&nea. $sto es sim lemente debido a que lo que #emos escrito uede ser considerado como una sola instruccin. $n realidad, somos nosotros quienes decidimos cortarla en varias l&neas ara, as&, (acilitar su lectura. +a verdadera instruccin acabar&a una ve! de(inido com letamente el arra% % es recisamente a#& donde #emos colocado el :nico unto % coma. Por otra arte, od,is observar cmo #emos jugado con el tabulador ara se arar unas l&neas ms que otras del rinci io. $sto tambi,n lo #acemos or cuestiones de claridad, %a que nos ermite ver qu, artes del cdigo estn incluidas dentro de otras. $s im ortante acostumbrarse a escribir de esta (orma del mismo modo que a introducir los comentarios %a que la claridad de los scri ts es (undamental a la #ora de de urarlos. 5n oco de es(uer!o a la #ora de crearlos uede a#orrarnos muc#as #oras a la #ora de corregirlos o modi(icarlos meses ms tarde. Pasando %a al comentario del rograma, como od,is ver, ,ste nos ermite almacenar tablas %, a artir de una sim le eticin, visuali!arlas un determinado valor en antalla. +o que es interesante es que la utilidad de los arra%s no acaba aqu&, sino que tambi,n odemos utili!ar toda una serie de (unciones creadas ara ordenarlos or orden al(ab,tico directo o inverso, or claves, contar el numero de elementos que com onen el arra% adems de oder movernos or dentro de ,l #acia delante o atrs. *uc#as son las $unciones ro uestas or PHP ara el tratamiento de arra%s, no vamos a entrar aqu& en una descri cin de las mismas. 0lo incluiremos esta eque'a tabla que uede ser com lementada, si necesario, con la documentaci#n que %a #emos mencionado.

)uncin arra%;*alues (mi;arra% asort(mi;arra% % arsort(mi;arra% count(mi;arra% Lsort(mi;arra% % Lrsort(mi;arra% list (?*ariable!3 ?*ariable2... @mi;arra%

Descripcin $ista los *alores contenidos en mi;arra% Jrdena por orden al"abEtico directo o in*erso en "unci'n de los *alores &os da el numero de elementos de nuestro arra% Jrdena por orden al"abEtico directo o in*erso en "unci'n de las cla*es 4signa cada una *ariable a cada uno de los *alores del arra%

ne+t(mi;arra% 3 pre*(mi;arra% 3 &os permiten mo*ernos por dentro del arra% con un reset(mi;arra% % end(mi;arra% puntero hacia delante3 atras % al principio % al "inal. each(mi;arra% &os da el *alor % la cla*e del elemento en el .ue nos
29

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

encontramos % mue*e al puntero al siguiente elemento.


?e gran utilidad es tambi,n el bucle $oreac% que recorre de (orma secuencial el arra% de rinci io a (in. Para com lementar esta in(ormacin resultar de gran inter,s el art&culo )rabajo con tablas o arra%s en PHP % ara los que re(ieran la (ormacin en v&deo, recomendamos ver los videotutoriales sobre los arra%s en PHP.
Artculo por

Rubn Alvarez

*.$. (rabaCo con tablas o arra3s en "#"


3emos algunas de las funciones t/picas del trabajo con arra!s a trav s de una peque4a explicacin ! un ejemplo de uso. Mamos a ver varios ejem los de trabajo con arra%s 8arreglos, vectores, matrices o tablas en castellano9 en PHP que ilustrarn un oco el (uncionamiento de algunas de las (unciones de arra%s ms o ulares que trae consigo PHP. 0in ms, vamos a introducirnos en materia con varios ejem los interesantes de manejo de vectores.
&e$erencia:+os arra%s en PHP se ex lican en el art&culo )ablas o /rra%s en PHP.

*.$.1. Modi8icar el n>mero de elementos de un arra3


/#ora vamos a ver varios ejem los mediante los cuales nuestros arra%s ueden aumentar o reducir el n:mero de casillas dis onibles. &educir el tama6o de un array array-slice78 Para disminuir el n:mero de casillas de un arreglo tenemos varias (unciones. $ntre ellas, arra%Nslice89 la utili!amos cuando queremos recortar algunas casillas del arreglo, sabiendo los &ndices de las casillas que deseamos conservar. >ecibe tres armetros. $l arra%, el &ndice del rimer elemento % el n:mero de elementos a tomar, siendo este :ltimo armetro o cional. $n el ejem lo siguiente tenemos un arra% con cuatro nombres ro ios. $n la rimera ejecucin de arra%Nslice89 estamos indicando que deseamos tomar todos los elementos desde el &ndice F 8el rinci io9 #asta un n:mero total de 2 elementos. $l segundo arra%Nslice89 indica que se tomen todos los elementos a artir del &ndice 1 8segunda casilla9.
<? 2entrada ? array ("!i+"el"= ".epe"= "R"an"= "R"lio"= ".a-lo"); //%odifico el ta%aQo 2salida ? array$slice (2entrada= S= E); //%"estro el array foreach (2salida as 2act"al) echo 2act"al . "<-r>"; echo "<p>"; //%odifico otra *eM 2salida ? array$slice (2salida= J); //%"estro el array foreach (2salida as 2act"al) echo 2act"al . "<-r>"; ?>

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

30

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com )endr como salida1 *iguel Pe e _uan Pe e _uan array-s%i$t78 $sta (uncin extrae el el rimer elemento del arra% % lo devuelve. /dems, acorta la longitud del arra% eliminando el elemento que estaba en la rimera casilla. 0iem re #ace lo mismo, or tanto, no recibir ms que el arra% al que se desea eliminar la rimera osicin. $n el cdigo siguiente se tiene el mismo vector con nombres ro ios % se ejecuta dos veces la (uncin arra%Ns#i(t89 eliminando un elemento en cada ocasin. 0e im rimen los valores que devuelve la (uncin % los elementos del arra% resultante de eliminar la rimera casilla.
<? 2entrada ? array ("!i+"el"= ".epe"= "R"an"= "R"lio"= ".a-lo"); //T"ito la pri%era casilla 2salida ? array$shift (2entrada); //%"estro el array echo " a f"nciLn de*"el*e: " . 2salida . "<-r>"; foreach (2entrada as 2act"al) echo 2act"al . "<-r>"; echo "<p>"; //T"ito la pri%era casilla= T"e ahora serIa la se+"nda del array ori+inal 2salida ? array$shift (2entrada); echo " a f"nciLn de*"el*e: " . 2salida . "<-r>"; //%"estro el array foreach (2entrada as 2act"al) echo 2act"al . "<-r>"; ?>

?a como resultado1 +a (uncin devuelve1 *iguel Pe e _uan _ulio Pablo +a (uncin devuelve1 Pe e _uan _ulio Pablo unset78 0e utili!a ara destruir una variable dada. $n el caso de los arreglos, se uede utili!ar ara eliminar una casilla de un arra% asociativo 8los que no tienen &ndices num,ricos sino que su &ndice es una cadena de caracteres9. Meamos el siguiente cdigo ara conocer cmo de(inir un arra% asociativo % eliminar luego una de sus casillas.
<? 2estadios$f"t-ol ? array("Garcelona"?> "9o" &a%p"="4eal !adrid" ?> "Santia+o Gerna-e""="5alencia" ?> "!estalla"="4eal Sociedad" ?> "Anoeta"); //%ostra%os los estadios foreach (2estadios$f"t-ol as 2indice?>2act"al) echo 2indice . " -- " . 2act"al . "<-r>"; echo "<p>"; //eli%ina%os el estadio asociado al real %adrid "nset (2estadios$f"t-ol6"4eal !adrid":);

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

31

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


//%ostra%os los estadios otra *eM foreach (2estadios$f"t-ol as 2indice?>2act"al) echo 2indice . " -- " . 2act"al . "<-r>"; ?>

+a salida ser la siguiente1 Garcelona DD Nou -am >eal *adrid DD 0antiago Gernabeu Malencia DD *estalla >eal 0ociedad DD /noeta Garcelona DD Nou -am Malencia DD *estalla >eal 0ociedad DD /noeta

*.$.$. Aumentar el tamaMo de un arra3


)enemos tambi,n a nuestra dis osicin varias (unciones que nos ueden a%udar a aumentar el n:mero de casillas de un arreglo. array-pus%78 "nserta al (inal del arra% una serie de casillas que se le indiquen or armetro. Por tanto, el n:mero de casillas del arra% aumentar en tantos elementos como se #a%an indicado en el armetro de la (uncin. ?evuelve el n:mero de casillas del arra% resultante. Meamos este cdigo donde se crea un arreglo % se a'aden luego tres nuevos valores.
<? 2ta-la ? array (" a+arti@a"= "AraQa"= ".erro"= "8ato"= "4atLn"); //a"%enta%os el ta%aQo del array array$p"sh(2ta-la= "8orriLn"= ".alo%a"= "Nso"); foreach (2ta-la as 2act"al) echo 2act"al . "<-r>"; ?>

?a como resultado esta salida1 +agartija /ra'a Perro .ato >atn .orrin Paloma ;so array-merge78 /#ora vamos a ver cmo unir dos arra%s utili!ando la (uncin arra%Nmerge89. / ,sta se le asan dos o ms arra%s or armetro % devuelve un arreglo con todos los cam os de los vectores asados. $n este cdigo de ejem lo creamos tres arra%s % luego los unimos con la (uncin arra%Nmerge89
<? 2ta-la ? array (" a+arti@a"= "AraQa"= ".erro"= "8ato"= "4atLn"); 2ta-la' ? array ("J'"="E#"="#D"="D'"="J'"); 2ta-laE ? array ("Sa"ce"=".ino"="9aran@o"="&hopo"=".erro"="E#"); //a"%enta%os el ta%aQo del array 2res"ltado ? array$%er+e(2ta-la= 2ta-la'= 2ta-laE); foreach (2res"ltado as 2act"al) echo 2act"al . "<-r>"; ?>

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

32

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com ?a como resultado1 +agartija /ra'a Perro .ato >atn 1L 24 43 3L 1L 0auce Pino Naranjo -#o o Perro 24 5na :ltima cosa. )ambi,n ueden introducirse nuevas casillas en un arreglo or los m,todos #abituales de asignar las nuevas osiciones en el arra% a las casillas que necesitemos. $n arra%s normales se #ar&a as&1
2ta-la ? array ("Sa"ce"=".ino"="9aran@o"); 2ta-la6E:?"Al+arro-o";

$n arra%s asociativos1
2estadios$f"t-ol ? array("5alencia" ?> "!estalla"="4eal Sociedad" ?> "Anoeta"); 2estadios$f"t-ol6"Garcelona":? "9o" &a%p";

Meremos ms adelante otras osibilidades del trabajo con arra%s. Ponemos a vuestra dis osicin las ginas PHP que contienen los cdigos con los que #emos trabajado.
&e$erencia:en el taller de PHP tenemos art&culos sobre el trabajo con arra%s en PHP. -oncretamente tenemos uno que ex lica los distintos ti os de ordenacin de arra%s en PHP1 ;rdenar arra%s con PHP

Artculo por

Miguel Angel Alvarez

*.'. Cadenas
'spectos relevantes de este tipo de variables. *ista de caracteres protegidos. 5na de las variables ms corrientes a las que tendremos que #acer (rente en la ma%or&a de nuestros scri ts son las cadenas, que no son ms que in(ormacin de carcter no num,rico 8textos, or ejem lo9. Para asignar a una variable un contenido de este ti o, lo escribiremos entre comillas dando lugar a declaraciones de este ti o1
2cadena?"3sta es la infor%aciLn de %i *aria-le"

0i queremos ver en antalla el valor de una variable o bien un mensaje cualquiera usaremos la instruccin echo como %a lo #emos visto anteriormente1
echo 2cadena //sacarIa "3sta es la infor%aciLn de %i *aria-le" echo "3sta es la infor%aciLn de %i *aria-le" //darIa el %is%o res"ltado

Podemos %uxta oner o concatenar varias cadenas oniendo ara ello un unto entre ellas1

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

33

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


<? 2cadenaJ?".erro"; 2cadena'?" %"erde"; 2cadenaE?2cadenaJ.2cadena'; echo 2cadenaE //3l res"ltado es: ".erro %"erde" ?>

*+ecutar script )ambi,n odemos introducir variables dentro de nuestra cadena lo cual nos uede a%udar muc#o en el desarrollo de nuestros scri ts. +o que veremos no es el nombre, sino el valor de la variable1
<? 2a?DD; 2%ensa@e?"Ten+o 2a aQos"; echo 2%ensa@e //3l res"ltado es: "Ten+o DD aQos" ?>

*+ecutar script +a regunta que nos odemos lantear a#ora es...H-mo #ago entonces ara que en ve! del valor =33= me salga el texto =Xa=J $n otras alabras, cmo se #ace ara que el s&mbolo X no de(ina una variable sino que sea tomado tal cual. $sta regunta es tanto ms interesante cuanto que en algunos de scri ts este s&mbolo debe ser utili!ado or una sim le ra!n comercial 8 ago en dlares or ejem lo9 % si lo escribimos tal cual, el ordenador va a ensar que lo que viene detrs es una variable siendo que no lo es. Pues bien, ara meter ,ste % otros caracteres utili!ados or el lenguaje dentro de las cadenas % no con(undirlos, lo que #a% que #acer es escribir una contrabarra delante1

Car+c ter ? > Q R/2

28ecto en la cadena Escribe d'lar en la cadena Escribe comillas en la cadena Escribe contrabarra en la cadena Escribe R/2 % no 4 en la cadena

/dems, existen otras utilidades de esta contrabarra que nos ermiten introducir en nuestro documento H)*+ determinados eventos1

Car+c ter t n

28ecto en la cadena 5ntroduce una tabulaci'n en nuestro te+to (ambiamos de lnea

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

34

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Retorno de carro

$stos cambios de l&nea % tabulaciones tienen :nicamente e(ecto en el cdigo % no en el texto ejecutado or el navegador. $n otras alabras, si queremos que nuestro texto ejecutado cambie de l&nea #emos de introducir un echo "<br>" % no echo "n" %a que este ultimo slo cambia de l&nea en el arc#ivo H)*+ creado % enviado al navegador cuando la gina es ejecutada en el servidor. +a di(erencia entre estos dos elementos uede ser (cilmente com rendida mirando el cdigo (uente roducido al ejecutar este scri t1
</T! > </3A(> <T)T 3>ca%-iolinea.php</T)T 3> <//3A(> <GN(<> <? echo "/ola= n si+o en la %is%a lInea e@ec"tada pero no en cLdi+o f"ente.<-r>Ahora ca%-io de lInea e@ec"tada pero contin"o en la %is%a en el cLdi+o f"ente." ?> </GN(<> <//T! >

*+ecutar script
$c#ar un vista!o al codigo (uente del navegador

$l cdigo (uente que observar&amos seria el siguiente1


</T! > </3A(> <T)T 3>ca%-iolinea.php</T)T 3> <//3A(> <GN(<> /ola= si+o en la %is%a lInea e@ec"tada pero no en cLdi+o f"ente.<-r>Ahora ca%-io de lInea e@ec"tada pero contin"o en la %is%a en el cLdi+o f"ente.</GN(<> <//T! >

+as cadenas ueden asimismo ser tratadas or medio de (unciones de todo ti o. Meremos estas (unciones ms adelante con ms detalle. )an slo debemos retener que existen muc#as osibles acciones que odemos reali!ar sobre ellas1 ?ividirlas en alabras, eliminar es acios sobrantes, locali!ar secuencias, rem la!ar caracteres es eciales or su corres ondiente en H)*+ o incluso extraer las etiquetas *$)/ de una gina web.
Artculo por

Rubn Alvarez

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

35

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Parte ":

#unciones en PHP
$as "unciones son esenciales para poder realizar c'digo de calidad3 tanto en ,-, como en muchos otros lengua)es de programaci'n. En estos captulos del 0anual de ,-, aprenderemos a de"inir "unciones3 traba)ar con par/metros % retornar *alores.

/.1. )unciones en "#"


2tilidad de las funciones, creacin ! almacenamiento en arc$ivos. Ejemplo prctico de creacin de funcin. $n nuestro manual de ginas dinmicas vimos el concepto de $unci#n. Mimos que la (uncin odr&a ser de(inida como un conjunto de instrucciones que ex lotan ciertas variables ara reali!ar una tarea ms o menos elemental. PHP basa su e(icacia rinci almente en este ti o de elemento. 5na gran librer&a que crece constantemente, a medida que nuevas versiones van surgiendo, es com lementada con las (unciones de ro ia cosec#a dando como resultado un sin(&n de recursos que son a licados or una sim le llamada. +as (unciones integradas en PHP son mu% (ciles de utili!ar. )an slo #emos de reali!ar la llamada de la (orma a ro iada % es eci(icar los armetros %Ao variables necesarios ara que la (uncin realice su tarea. +o que uede arecer ligeramente ms com licado, ero que resulta sin lugar a dudas mu% rctico, es crear nuestras ro ias (unciones. ?e una (orma general, odr&amos crear nuestras ro ias (unciones ara conectarnos a una base de datos o crear los encabe!ados o etiquetas meta de un documento H)*+. Para una a licacin de comercio electrnico odr&amos crear or ejem lo (unciones de cambio de una moneda a otra o de calculo de los im uestos a a'adir al recio de articulo. $n de(initiva, es interesante crear (unciones ara la ma%or&a de acciones ms o menos sistemticas que reali!amos en nuestros rogramas. /qu& daremos el ejem lo de creacin de una (uncin que, llamada al comien!o de nuestro scri t, nos crea el encabe!ado de nuestro documento H)*+ % coloca el titulo que queremos a la gina1
<? f"nction hacer$enca-eMado(2tit"lo) K 2enca-eMado?"<ht%l><head>t<title>2tit"lo</title></head>"; echo 2enca-eMado; O ?>

$sta (uncin odr&a ser llamada al rinci io de todas nuestras ginas de la siguiente (orma1
2tit"lo?"!i 0e-"; hacer$enca-eMado(2tit"lo);

?e esta (orma automati!amos el roceso de creacin de nuestro documento. Podr&amos or ejem lo incluir en la (uncin otras variables que nos a%udasen a construir la etiquetas meta % de esta (orma, con un es(uer!o m&nimo, crear&amos los encabe!ados ersonali!ados ara cada una de nuestras ginas. ?e este mismo modo nos es osible crear cierres de documento o (ormatos diversos ara nuestros textos como si se tratase de #ojas de estilo que tendr&an la ventaja de ser reconocidas or todos los navegadores. Por su uesto, la (uncin #a de ser de(inida dentro del scri t %a que no se encuentra integrada en PHP sino que la #emos creado nosotros. $sto en realidad no one ninguna ega %a que uede ser incluida desde un arc#ivo en el que iremos

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

36

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com almacenando las de(iniciones de las (unciones que va%amos creando o reco ilando. $stos arc#ivos en los que se guardan las (unciones se llaman librer&as. +a (orma de incluirlos en nuestro scri t es a artir de la instruccin require o include1 require8=libreria. # =9 o include8=libreria. # =9 $n resumen, la cosa quedar&a as&1 )endr&amos un arc#ivo libreria. # como sigue
<? //f"nciLn de enca-eMado y colocaciLn del tit"lo f"nction hacer$enca-eMado(2tit"lo) K 2enca-eMado?"<ht%l>n<head>nt<title>2tit"lo</title>n</head>n"; echo 2enca-eMado; O ?>

Por otra arte tendr&amos nuestro scri t rinci al gina. # 8 or ejem lo91
<? incl"de("li-reria.php"); 2tit"lo?"!i Ue-"; hacer$enca-eMado(2tit"lo); ?> <-ody> 3l c"erpo de la pV+ina </-ody> </ht%l>

*+ecutar script
$c#ar un vista!o al codigo (uente del navegador

Podemos meter todas las (unciones que va%amos encontrando dentro de un mismo arc#ivo ero resulta muc#&simo ms ventajoso ir clasi(icndolas en distintos arc#ivos or temtica1 @unciones de conexin a bases de datos, (unciones comerciales, (unciones generales, etc. $sto nos a%udara a oder locali!arlas antes ara corregirlas o modi(icarlas, nos ermite tambi,n cargar :nicamente el ti o de (uncin que necesitamos ara el scri t sin recargar ,ste en exceso adems de ermitirnos utili!ar un determinado ti o de librer&a ara varios sitios webs distintos. )ambi,n uede resultar mu% rctico el utili!ar una nomenclatura sistemtica a la #ora de nombrarlas1 +as (unciones comerciales odr&an ser llamadas comNloquesea, las de bases de datos bdNloquesea, las de tratamiento de arc#ivos (ileNloquesea. $sto nos ermitir reconocerlas enseguida cuando leamos el scri t sin tener que recurrir a nuestra oxidada memoria ara descubrir su utilidad. No obstante, antes de lan!arnos a crear nuestra ro ia (uncin, merece la ena ec#ar un vista!o a la documentaci#n ara ver si dic#a (uncin %a existe o odemos a rovec#arnos de alguna de las existentes ara aligerar nuestro trabajo. /s&, or ejem lo, existe una (uncin llamada #eader que crea un encabe!ado H)*+ con(igurable lo cual nos evita tener que crearla nosotros mismos. -omo uede verse, la tarea del rogramador uede en algunos casos arecerse a la de un coleccionista. Ha% que ser aciente % metdico % al (inal, a base de trabajo ro io, intercambio % tiem o odemos llegar oseer nuestro eque'o tesoro.
)ota: 0i lo deseas uedes re asar todos los conce tos anteriores sobre las (unciones, as& como diversas otras cosas interesantes en el Mideotutorial sobre las (unciones en PHP.

/.1.1. 2Cemplo de 8uncin


Mamos a ver un ejem lo de creacin de (unciones en PHP. 0e trata de #acer una (uncin que recibe un texto % lo escribe en la gina con cada carcter se arado or =D=. $s decir, si recibe =#ola= debe escribir =#DoDlDa= en la gina web.
)ota:Para com render este ejem lo necesitamos conocer el bucle (or, que se ex lica en el ca &tulo -ontrol del (lujo en PHP1 Gucles "".

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

37

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com +a manera de reali!ar esta (uncin ser recorrer el string, caracter a caracter, ara im rimir cada uno de los caracteres, seguido de el signo =D=. >ecorreremos el string con un bucle (or, desde el carater F #asta el n:mero de caracteres total de la cadena. $l n:mero de caracteres de una cadena se obtiene con la (uncin rede(inida en PHP strlen89, que recibe el string entre ar,ntesis % devuelve el n:mero de los caracteres que tenga.
<ht%l> <head> <title>f"ncion J</title> </head> <-ody> <? f"nction escri-e$separa(2cadena)K for (2i?S;2i<strlen(2cadena);2iFF)K echo 2cadena62i:; if (2i<strlen(2cadena)-J) echo "-"; O O escri-e$separa ("hola"); echo "<p>"; escri-e$separa ("Texto %Vs lar+o= a *er lo T"e hace"); ?> </-ody> </ht%l>

+a (uncin que #emos creado se llama escribeNse ara % recibe como armetro la cadena que #a% que escribir con el se arador =D=. $l bucle (or nos sirve ara recorrer la cadena, desde el rimer al :ltimo carcter. +uego, dentro del bucle, se im rime cada carcter se arado del signo =D=. $l i( que #a% dentro del bucle (or com rueba que el actual no sea el :ltimo carcter, orque en ese caso no #abr&a que escribir el signo =D= 8queremos conseguir =#DoDlDa= % si no estuviera el i( obtendr&amos =#DoDlDaD=9. $n el cdigo mostrado se #acen un ar de llamadas a la (uncin ara ver el resultado obtenido con di(erentes cadenas como armetro. Podemos ver el scri t en marc#a.
Artculo por

Rubn Alvarez

/.$. M+s sobre 8unciones= paso de par+metros


Este cap/tulo pretende ser una ampliacin de detalles que ata4en al art/culo dedicado a las funciones en PHP . Mamos a ex licar algunos detalles adicionales sobre la de(inicin % uso de (unciones, ara am liar el art&culo de (unciones en # . Paso de parmetros +os armetros son los datos que reciben las (unciones % que utili!an ara reali!ar las o eraciones de la (uncin. 5na (uncin uede recibir cualquier n:mero de armetros, incluso ninguno. / la #ora de de(inir la (uncin, en la cabecera, se de(inen los armetros que va a recibir.
f"nction fJ (2para%etroJ= 2parV%etro')

/s& de(inimos una (uncin llamada (1 que recibe dos armetros. -omo se uede observar, no se tiene que de(inir el ti o de datos de cada armetro.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

38

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com +os armetros tienen valide! durante la ejecucin de la (uncin, es decir, tienen un mbito local a la (uncin donde se estn recibiendo. -uando la (uncin se termina, los armetros dejan de existir. Los parmetros se pasan por valor $l aso de armetros en PHP se reali!a or valor. =Por valor= es una manera t& ica de asar armetros en (unciones, quiere decir que el cambio de un dato de un armetro no actuali!a el dato de la variable que se as a la (uncin. Por ejem lo, cuando invocamos una (uncin asando una variable como armetro, a esar de que cambiemos el valor del armetro dentro de la (uncin, la variable original no se ve a(ectada or ese cambio. Puede que se vea mejor con un ejem lo1
f"nction por*alor (2para%etroJ)K 2para%etroJ?"hola"; echo "<-r>" . 2para%etroJ; //i%pri%e "hola" O 2%i*aria-le ? "esto no ca%-ia"; por*alor (2%i*aria-le); echo "<-r>" . 2%i*aria-le; //i%pri%e "esto no ca%-ia"

$sta gina tendr como resultado1 #ola esto no cambia Paso de parmetros por re$erencia $n contra osicin al aso de armetros or valor, est el aso de armetros or re(erencia. $n este :ltimo caso, el cambio del valor de un armetro dentro de una (uncin s& a(ecta al valor de la variable original. Podemos asar los armetros or re(erencia si, en la declaracin de la (uncin, colocamos un =Y= antes del armetro.
<? f"nction porreferencia(H2cadena) K 2cadena ? 1Si ca%-ia1; O 2str ? 13sto es "na cadena1; porreferencia (2str); echo 2str; // )%pri%e 1Si ca%-ia1 ?>

$ste scri t mostrar or antalla `0i cambia`. Parmetros por de$ecto Podemos de(inir valores or de(ecto ara los armetros. +os valores or de(ecto sirven ara que los armetros contengan un dato rede(inido, con el que se iniciali!arn si no se le asa ning:n valor en la llamada de la (uncin. +os valores or de(ecto se de(inen asignando un dato al armetro al declararlo en la (uncin.
f"nction pordefecto (2para%etroJ?"pepe";2para%etro'?E)

Para la de(inicin de (uncin anterior, X arametro1 tiene como valor or de(ecto = e e=, mientras que X arametroL tiene 2 como valor or de(ecto. 0i llamamos a la (uncin sin indicar valores a los armetros, estos tomarn los valores asignados or de(ecto1
pordefecto () // 2para%etroJ *ale "pepe" y 2para%etro' *ale E

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

39

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 0i llamamos a la (uncin indicando un valor, este ser tenido en cuenta ara el rimer armetro.
pordefecto ("hola") // 2para%etroJ *ale "hola" y 2para%etro' *ale E

/tencin, estamos obligados a declarar todos los armetros con valores or de(ecto al (inal.
Artculo por

Miguel Angel Alvarez

/.'. M+s sobre 8unciones= Retorno de valores


Para saber las formas en que una funcin devuelve valores este art/culo contiene varias formas aptas para $acerlo. +as (unciones ueden retornar valores. Para ello se utili!a la alabra =return= indicando a continuacin el dato o variable que tienen que retornar. +a (uncin uede tener m:lti les return, aunque slo devolver datos or uno de ellos cada ve! orque, cuando se llama a return, se termina la ejecucin de la (uncin devolviendo el dato indicado. *+emplo de $unci#n "VA Mamos a ver un nuevo ejem lo ara ilustrar el (uncionamiento de una (uncin un oco ms avan!ada, que utili!a arte de los nuevos conce tos introducidos en este art&culo. 0e trata de #acer una (uncin que calcula el "M/ % que recibe dos armetros. 5no el valor sobre el que se calcula % el otro el orcentaje a a licar. 0i no se indica el orcentaje de "M/ se entiende que es el 14T.
<ht%l> <head> <title>e@e%plo )5A</title> </head> <-ody> <? f"nction i*a(2-ase=2porcenta@e?JW)K ret"rn 2-ase C 2porcenta@e /JSS; O echo i*a(JSSS) . "<-r>"; echo i*a(JSSS=X) . "<-r>"; echo i*a(JS=S) . "<-r>"; ?> </-ody> </ht%l>

0i se #an entendido bien los conce tos, este ejem lo no uede resultar di(&cil. +a (uncin recibe un armetro llamado X orcentaje con 14 como valor or de(ecto. ?evuelve el orcentaje dado a licado a la base tambi,n indicada or armetro. /s& ues, en la rimera ejecucin de la (uncin, como no se indica el orcentaje, se mostrar el 14T de 1FFF. $n la segunda, se muestra el BT de mil % en la tercera, el FT de 1F. Puede verse el resultado en una gina a arte. #tt 1AAwww.desarrolloweb.comAarticulosAejem losA # AejNiva. # &etornar m9ltiples valores 5na (uncin devuelve un :nico valor. 0i queremos #acer que se uedan devolver varios valores distintos tenemos que recurrir a un truco que consiste en devolver un arra%.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

40

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

f"nction s%all$n"%-ers() K ret"rn array (S= J= '); O list (2Mero= 2one= 2t0o) ? s%all$n"%-ers();

list89 se usa ara asignar una lista de variables en una sola o eracin. ?es u,s de esa o eracin, X!ero valdr F, Xone valdr 1 % Xtwo valdr L.
Artculo por

Miguel Angel Alvarez

Parte $:

%structuras !e control en PHP


Iemos una a una las distintas estructuras de control del "lu)o de los programas disponibles en el lengua)e de programaci'n ,-,: condicionales % bucles.

?.1. Control del 8luCo en "#"= Condiciones !)


Presentamos una de las $erramientas principales usadas para controlar el flujo de nuestros scripts5 *os condicionales &0 . +a rogramacin exige en muc#as ocasiones la re eticin de acciones sucesivas o la eleccin de una determinada secuencia % no de otra de endiendo de las condiciones es ec&(icas de la ejecucin. -omo ejem lo, odr&amos #acer alusin a un scri t que ejecute una secuencia di(erente en (uncin del d&a de la semana en el que nos encontramos. $ste ti o de acciones ueden ser llevadas a cabo gracias a una aleta de instrucciones resentes en la ma%or&a de los lenguajes. $n este ca &tulo describiremos someramente algunas de ellas ro uestas or PHP % que resultan de evidente utilidad. Para evitar el com licar el texto, nos limitaremos a introducir las ms im ortantes dejando de lado otras cuantas que odrn ser (cilmente asimilables a artir de ejem los rcticos.

?.1.1. Las condiciones i8


-uando queremos que el rograma, llegado a un cierto unto, tome un camino concreto en determinados casos % otro di(erente si las condiciones de ejecucin di(ieren, nos servimos del conjunto de instrucciones if, else % elseif . +a estructura de base de este ti o de instrucciones es la siguiente1

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

41

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


if (condiciLn) K )nstr"cciLn )nstr"cciLn ... O else K )nstr"cciLn )nstr"cciLn ... O

J; ';

A; G;

+legados a este unto, el rograma veri(icar el cum limiento o no de la condicin. 0i la condicin es cierta las instrucciones 1 % L sern ejecutadas. ?e lo contrario 8else9, las instrucciones / % G sern llevadas a cabo. $sta estructura de base uede com licarse un oco ms si tenemos cuenta que no necesariamente todo es blanco o negro % que muc#as osibilidades ueden darse. $s or ello que otras condiciones ueden lantearse dentro de la condicin rinci al. Hablamos or lo tanto de condiciones anidadas que tendr&an una estructura del siguiente ti o1
if (condiciLnJ) K )nstr"cciLn J; )nstr"cciLn '; ... O else K if (condiciLn') K )nstr"cciLn A; )nstr"cciLn G; ... O else K )nstr"cciLn Y ... O O

?e este modo odr&amos introducir tantas condiciones como queramos dentro de una condicin rinci al. ?e gran a%uda es la instruccin elseif que ermite en una sola l&nea introducir una condicin adicional. $ste ti o de instruccin sim i(ica ligeramente la sintaxis que acabamos de ver1
if (condiciLnJ) K )nstr"cciLn J; )nstr"cciLn '; ... O elseif (condiciLn') K )nstr"cciLn A; )nstr"cciLn G; ... O else K )nstr"cciLn Y ... O

$l uso de esta #erramienta resultar claro con un oco de rctica. Pongamos un ejem lo sencillo de utili!acin de condiciones. $l siguiente rograma ermitir&a detectar la lengua em leada or el navegador % visuali!ar un mensaje en dic#a lengua.
</T! > </3A(>

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

42

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


<T)T 3>(etector de en+"a</T)T 3> <//3A(> <GN(<> <? //Antes de nada introd"ci%os %ensa@es en for%a de *aria-les 2espanol?"/ola"; 2in+les?"/ello"; 2frances?"Gon@o"r"; //Ahora lee%os del na*e+ador c"Vl es s" len+"a oficial 2idio%a?s"-str(2/TT.$A&&3.T$ A987A83=S='); //Por%"la%os las posi-ilidades T"e se p"eden dar if (2idio%a ?? "es") Kecho "2espanol";O elseif (2idio%a??"fr") Kecho "2frances";O else Kecho "2in+les";O ?> </GN(<> <//T! >

*+ecutar script Para oder ver el (uncionamiento de este scri t es necesario cambiar el idioma re(erido lo cual uede ser reali!ado a artir del men: de o ciones del navegador. Para leer la lengua ace tada or el navegador lo que #acemos es de(inir una variable 8 $idioma9 %, mediante la (uncin substr, recogemos las dos rimeras letras del cdigo corres ondiente al idioma ace tado or el navegador 8XH))PN/--$P)N+/N.5/.$9. +a tercera arte de scri t se encarga de ver si el navegador est en es a'ol 8es9, (ranc,s 8(r9 o en cualquier otro idioma que no sea ninguno de estos dos % de im rimir el mensaje que roceda en cada caso. / notar que, cuando se trata de com arar variables, onemos un doble igual =RR= en lugar de un sim le =R=. $ste :ltimo queda reservado exclusivamente ara asignar valores a variables
&e$erencia: Hemos ublicado un v&deo ara mostrar la creacin % el (uncionamiento de las estructuras "@1 $structuras de control, M&deo 11 condicional i(

Artculo por

Rubn Alvarez

?.$. Control del 8luCo en "#"= %ucles !


Estructura ! funcionamiento de los bucles "$ile ! do6"$ile. +os ordenadores, como cualquier mquina, estn dise'ados ara reali!ar tareas re etitivas. $s or ello que nuestros rogramas ueden a rovec#arse de este rinci io ara reali!ar una determinada secuencia de instrucciones un cierto n:mero de veces. Para ello, utili!amos las estructuras llamadas en bucle que nos a%udan a, usando unas ocas l&neas, reali!ar una tarea incluida dentro del bucle un cierto numero de veces de(inido or nosotros mismos. PHP ro one varios ti os de bucle cada uno con caracter&sticas es eci(icas1

?.$.1. %ucle -&ile


0in duda el bucle ms utili!ado % el ms sencillo. +o usamos ara ejecutar las instrucciones contenidas en su interior siem re % cuando la condicin de(inida sea verdadera. +a estructura sintctica es la siguiente.
0hile (condiciLn)

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

43

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


K instr"ccionJ; instr"ccion'; ...

5n ejem lo sencillo es este bucle que aumenta el tama'o de la (uente en una unidad a cada nueva vuelta or el bucle1
<? 2siMe?J; Uhile (2siMe<?W) K echo"<font siMe?2siMe>Ta%aQo 2siMe</font><-r>n"; 2siMeFF; O ?>

*+ecutar script / modo de ex licacin, diremos que, antes de nada, #emos de de(inir el valor de la variable que vamos a evaluar en la condicin. /lgo absolutamente obvio ero (cil de olvidar. $n este caso le #emos atribuido un valor de 1 que corres onde a la letra ms eque'a. $l aso siguiente es crear el bucle en el que im onemos la condicin que la variable no exceda el valor de 4. +a instruccin a ejecutar ser im rimir en nuestro documento un cdigo H)*+ en el que la etiqueta font % el mensaje que contiene var&an a medida que $size cambia su valor. $l siguiente aso es incrementar en una unidad el valor de Xsi!e. $sto se uede #acer con una ex resin como la mostrada en el bucle 8Xsi!ePP9 que en realidad es sinnima de1 Xsi!eRXsi!eP1 Meremos otras de estas abreviaciones ms adelante.

?.$.$. Btro eCemplo del buble ,&ile


$l bucle w#ile se suele utili!a cuando no se sabe exactamente cuantas iteraciones se deben reali!ar antes de acabar. Mamos a utili!arlo en otro ejem lo, en el que #a% que recorrer una cadena #asta encontrar un carcter dado. 0i lo encuentra, escribir su osicin. 0i no, escribir que no se #a encontrado.
)ota: Para #acer este ejercicio necesitamos conocer la (uncin de cadena strlen89, que obtiene la longitud de la cadena que se le ase or armetro. int strlen 8string cad9 ?evuelve un entero igual a la longitud de la cadena. <? 2cadena ? "hola a todo el %"ndo"; //recorro la cadena hasta encontrar "na "%" 2i?S; 0hile (2cadena62i:;?"%" HH 2i< strlen(2cadena))K 2iFF; O if (2i??strlen(2cadena)) echo "9o se enc"entra..."; else echo "3stV en la posiciLn 2i"; ?>

$n este ejem lo se de(ine una cadena con el valor =#ola a todo el mundo=. Posteriormente se recorre esa cadena #asta el (inal de la cadena o #asta encontrar el caracter =m=, utili!ando una variable Xi que lleva la cuenta de los caracteres recorridos. /l (inal del bucle w#ile, si se sali orque se encontr el caracter =m=, la variable Xi valdr un n:mero menor que la longitud

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

44

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com de la cadema. 0i se sali or llegar al (inal de la cadena, la variable Xi valdr lo mismo que la longitud en caracteres de esa cadena. $n el condicional sim lemente se com rueba si Xi vale o no lo mismo que la longitud de la cadena, mostrando los mensajes adecuados en cada caso. Podemos ver el ejem lo en (uncionamiento.

?.$.'. %ucle do0-&ile


$ste ti o de bucle no di(iere en exceso del anterior. +a sintaxis es la siguiente1
do K instr"ccionJ; instr"ccion'; ...

O 0hile (condiciLn)

+a di(erencia con res ecto a los bucles while es que este ti o de bucle eval:a la condicin al (inal con lo que, incluso siendo (alsa desde el rinci io, ,ste se ejecuta al menos una ve!.
&e$erencia: Para una a%uda rctica sobre estos bucles ver el siguiente videotutorial $structuras de control, M&deo L1 bucles (or, w#ile % doD w#ile. /dems, las ex licaciones sobre estructuras de control se com lementan con el videotutorial de 0witc# % las instrucciones breaK % continue.

Artculo por

Rubn Alvarez

?.'. Control del 8luCo en "#"= %ucles !!


Estructura ! funcionamiento de los bucles for ! foreac$. Explicamos como salir de un bucle5 7rea8 ! continue $ste es el segundo art&culo sobre los bucles en PHP que ublicamos en el *anual de PHP. $l anterior art&culo ex lic acerca de los bucles w#ile % doDw#ile. /s& ues, a#ora vamos a dedicarnos a los otros ti os de bucles, que son el bucle (or, ara iterar un n:mero dado de veces, (oreac#, :til ara recorrer arra%s, as& como las sentencias breaK % continue.

?.'.1. %ucle 8or


PHP est rovisto de otros ti os de bucle que tambi,n resultan mu% rcticos en determinadas situaciones. $l ms o ular de ellos es el bucle for que, como ara los casos anteriores, se encarga de ejecutar las instrucciones entre llaves. +a di(erencia con los anteriores radica en cmo se lantea la condicin de (inali!acin del bucle. Para aclarar su (uncionamiento vamos a ex resar el ejem lo de bucle while visto en el ca &tulo anterior en (orma de bucle for 1
<? Por (2siMe?J;2siMe<?W;2siMeFF) K echo"<font siMe?2siMe>Ta%aQo 2siMe</font><-r>n"; O ?>

*+ecutar script +as ex resiones dentro del ar,ntesis de(inen res ectivamente1 D"niciali!acin de la variable. Malida ara la rimera vuelta del bucle. D-ondicin de evaluacin a cada vuelta. 0i es cierta, el bucle continua.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

45

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com D/ccin a reali!ar al (inal de cada vuelta de bucle.

?.'.$. %ucle 8oreac&


$ste bucle, im lementado en las versiones de PHP4, nos a%uda a recorrer los valores de un arra% lo cual uede resultar mu% :til or ejem lo ara e(ectuar una lectura r ida del mismo. >ecordamos que un arra% es una variable que guarda un conjunto de elementos 8valores9 catalogados or claves. +a estructura general es la siguiente1
Poreach (2array as 2cla*e?>2*alor) K instr"ccionJ; instr"ccion'; Z; O

5n ejem lo rctico es la lectura de un arra% lo cual odr&a #acerse del siguiente modo1
<? 2%oneda?array("3spaQa"?> ".eseta"="Prancia" ?> "Pranco"="7SA" ?> "(olar"); Poreach (2%oneda as 2cla*e?>2*alor) K echo ".ais: 2cla*e !oneda: 2*alor<-r>"; O ?>

*+ecutar script $ste scri t se encargar&a de mostrarnos or antalla el contenido del arra% $moneda. No resultar&a mala idea crear una (uncin ro ia basada en este bucle que nos ermitiese visuali!ar arra%s monodimensionales % almacenarla en nuestra librer&a. $sta (uncin odr&a ser de(inida de esta (orma1
P"nction %ostrar$array (2array) K Poreach (2array as 2cla*e?>2*alor) Kecho "2cla*e?>2*alor<-r>";O O

?.'.'. %reaN 3 continue


$stas dos instrucciones se introducen dentro de la estructura % nos sirven res ectivamente ara esca ar del bucle o saltar a la iteracin siguiente. Pueden resultarnos mu% rcticas en algunas situaciones. ?urante una iteracin de un bucle odemos saltar directamente a la siguiente iteracin, sin seguir con la actual, con la instruccin continue. )ambi,n odemos detener com letamente las re eticiones de cualquier bucle con breaK, lo que arar la ejecucin de la iteracin actual % de las siguientes que udiera #aber.
&e$erencia: 0i deseas ver la construccin de un bucle (or % otros ti os de bucles, en v&deo te recomendamos el siguiente videotutorial $structuras de control, M&deo L1 bucles (or, w#ile % doDw#ile. /dems, si deseas a render la estructura de control switc# % las instrucciones breaK % continue, as& como ver otro ejem lo de (oreac#, te recomendamos ver los Mideotutoriales de estructuras de control en PHP "".

Artculo por

Rubn Alvarez

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

46

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Parte &:

plicaciones 'e(: paso !e )aria(les y memoria !e esta!os


En los siguientes captulos *eremos di*ersas maneras .ue e+isten en ,-, para conseguir .ue un con)unto de p/ginas % scripts se comporten como una aplicaci'n web. Ieremos c'mo pasar datos de unas p/ginas a otras3 por ,J1< % 8E<3 c'mo memorizar datos asociados a un usuario a lo largo de toda la sesi'n % c'mo memorizar datos en cooLies3 .ue perdurar/n entre *arias sesiones.

O.1. "asar variables por la :RL con "#"


3eremos cmo transferir variables de una pgina a otra por medio de la 29*, en PHP . Gucles % condiciones son mu% :tiles ara rocesar los datos dentro de un mismo scri t. 0in embargo, en un sitio "nternet, las ginas vistas % los scri ts utili!ados son numerosos. *u% a menudo necesitamos que nuestros distintos scri ts est,n conectados unos con otros % que se sirvan de variables comunes. Por otro lado, el usuario interacciona or medio de (ormularios cu%os cam os #an de ser rocesados ara oder dar una res uesta. )odo este ti o de (actores dinmicos #an de ser e(ica!mente regulados or un lenguaje como PHP. $s osible que %a os #a%is ercatado de que las variables de un scri t tienen una valide! exclusiva ara el scri t % que nos resulta im osible conservar su valor cuando ejecutamos otro arc#ivo distinto aunque ambos est,n enla!ados. $xisten varias (ormas de enviar las variables de una gina a otra de manera a que la gina destino recono!ca el valor asignado or el scri t de origen1

O.1.1. "asar variables por :RL


Para asar las variables de una gina a otra lo odemos #acer introduciendo dic#a variable dentro del enlace #i ertexto de la gina destino. +a sintaxis ser&a la siguiente1
<a href?"destino.php?*aria-leJ?*alorJH*aria-le'?*alor'H...">!i enlace</a>

Pod,is observar que estas variables no oseen el s&mbolo X delante. $sto es debido a que en realidad este modo de asar variables no es es ec&(ico de PHP sino que es utili!ado or otros lenguajes. /#ora nuestra variable ertenece tambi,n al entorno de la gina destino.php % est lista ara su ex lotacin.
)ota: No siem re se de(inen automticamente las variables recibidas or armetro en las ginas web, de ende de una variable de con(iguracin de PHP1 registerNglobals, que tiene que estar activada ara que as& sea. Mer comentarios del art&culo al (inal de la gina ara ms in(ormacin.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

47

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Para aclarar osibles dudas, veamos esto en (orma de ejem lo. )endremos ues dos ginas, origen.html 8no es necesario darle extensin PHP uesto que no #a% ning:n ti o de cdigo9 % destino.php1
</T! > </3A(> <T)T 3>ori+en.ht%l</T)T 3> <//3A(> <GN(<> <a href?"destino.php?sal"do?holaHtexto?3sto es "na *aria-le texto">.aso *aria-les sal"do y texto a la pV+ina destino.php</a> </GN(<> <//T! > </T! > </3A(> <T)T 3>destino.php</T)T 3> <//3A(> <GN(<> <? echo "5aria-le 2sal"do: 2sal"do <-r>n"; echo "5aria-le 2texto: 2texto <-r>n" ?> </GN(<> <//T! >

*+ecutar e+emplo

O.1.$. D#(("PG2(PAAR9
>ecordamos que es osible reco ilar en una variable ti o arra% el conjunto de variables que #an sido enviadas al scri t or este m,todo a artir de la variable de sistema XH))PN.$)NM/>0, que es un arra% asociativo. 5tili!ndolo quedar&a as&1
<? echo "5aria-le 2sal"do: 2/TT.$83T$5A4S6"sal"do": <-r>n"; echo "5aria-le 2texto: 2/TT.$83T$5A4S6"texto": <-r>n" ?> )ota: /unque odamos recoger variables con este arra% asociativo o utili!ar directamente las variables que se de(inen en nuestra gina, resulta ms seguro utili!ar XH))PN.$)NM/>0 or dos ra!ones, la rimera que as& nos aseguramos que esa varible viene realmente de la 5>+ % la segunda, que as& nuestro cdigo ser ms claro cuando lo volvamos a leer, orque quedar es eci(icado que esa variable estamos recibi,ndola or la 5>+.

O.1.'. DPG2(
/ artir de la versin 4.1.F de PHP se #a introducido el arra% asociativo XN.$), que es id,ntico a XH))PN.$)NM/>0, aunque un oco ms corto de escribir.

O.1.*. Caracteres especiales en :RL 3 su codi8icacin con "#"


Ha% algunos caracteres raros que no se ueden asar, tal cual, or la 5>+. Por ejem lo, una 5>+ no uede contener es acios en blanco, or lo que si intentas enviar una variable or 5>+ con un valor que tiene un es acio en blanco, te dar roblemas. Por ejem lo, el signo =W= no uede (igurar tam oco en una 5>+. /s& ues, tenemos que #acer algo ara convetir esos caracteres, de modo que no den roblemas en la 5>+. +a solucin en PHP es sencilla, sim lemente debemos codi(icar la variable que tiene caracteres con(lictivos a (ormato 5>+. Para ello utili!amos la (uncin urlenconde89, que viene en la librer&a de (unciones de PHP. Podemos encontrar ms in(ormacin sobre esto en la @/<1 Problemas con variables asadas en la 5>+ en algunos caracteres.
&e$erencia: 0i lo deseas, uedes com lementar esta in(ormacin con unos ex licativos videotutoriales sobre el aso de variables or .$) en PHP.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

48

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Artculo por

Rubn Alvarez

O.$. "rocesar variables de 8ormularios. "B9( en "#"


3eremos cmo transferir variables con PHP , de una pgina a otra por medio de formularios, lo que se conoce $abitualmente por P:,.. $ste ti o de trans(erencia es de gran utilidad %a que nos ermite interaccionar directamente con el usuario. $l roceso es similar al ex licado ara las 5>+s. Primeramente, resentamos una rimera gina con el (ormulario clsico a rellenar % las variables son recogidas en una segunda gina que las rocesa1
)ota: No siem re se de(inen automticamente las variables recibidas or el (ormulario en las ginas web, de ende de una variable de con(iguracin de PHP1 registerNglobals, que tiene que estar activada ara que as& sea. Mer comentarios del art&culo al (inal de la gina ara ms in(ormacin. </T! > </3A(> <T)T 3>for%"lario.ht%l</T)T 3> <//3A(> <GN(<> <PN4! !3T/N(?".NST" A&T)N9?"destino'.php"> 9o%-re<-r> <)9.7T T<.3?"T3YT" 9A!3?"no%-re"><-r> Apellidos<-r> <)9.7T T<.3?"T3YT" 9A!3?"apellidos"><-r> <)9.7T T<.3?"S7G!)T"> </PN4!> </GN(<> <//T! > </T! > </3A(> <T)T 3>destino'.php</T)T 3> <//3A(> <GN(<> <? echo "5aria-le 2no%-re: 2no%-re <-r>n"; echo "5aria-le 2apellidos: 2apellidos <-r>n" ?> </GN(<> <//T! >

*+ecutar e+emplo

O.$.1. D#(("P"B9(PAAR9
>ecordamos que es osible reco ilar en una variable ti o arra% el conjunto de variables que #an sido enviadas al scri t or este m,todo a artir de la variable de sistema XH))PNP;0)NM/>0.
echo "5aria-le 2no%-re: " . 2/TT.$.NST$5A4S6"no%-re": . "<-r>n"; )ota: /unque odamos recoger variables con este arra% asociativo o utili!ar directamente las variables que se de(inen en nuestra gina, resulta ms seguro utili!ar XH))PNP;0)NM/>0 or dos ra!ones, la rimera que as& nos aseguramos que esa varible viene realmente de un (ormulario % la segunda, que as& nuestro cdigo ser ms claro cuando lo volvamos a leer, orque quedar es eci(icado que esa variable estamos recibi,ndola or un (ormulario.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

49

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

O.$.$. DP"B9(
/ artir de PHP 4.1.F se ueden recoger las variables de (ormulario utili!ando tambi,n el arra% asociativo XNP;0), que es el mismo que XH))PNP;0)NM/>0, ero ms corto de escribir.

O.$.'. 2Cemplo de restriccin de acceso por edad


Para continuar a ortando ejem los al uso de (ormularios vamos a reali!ar una gina que muestra solicita la edad del visitante %, de endiendo de dic#a edad, ermita o no visuali!ar el contenido de la web. / los ma%ores de 1E a'os se les ermite ver la gina % a los menores no. $l ejem lo es mu% sencillo % no valdr&a tal cual est ara utili!arlo a modo de una verdadera restriccin de acceso. anicamente nos sirve ara saber cmo obtener datos de un (ormulario % como tratarlos ara reali!ar una u otra accin, de endiendo de su valor. +a gina del (ormulario, que #emos llamado edad. # tendr&a esta (orma1
<ht%l> <head> <title>4estrin+ir por edad</title> </head> <-ody> <for% action?"edad'.php" %ethod?"post"> 3scri-e t" edad: <inp"t type?"text" na%e?"edad" siMe?"'"> <inp"t type?"s"-%it" *al"e?"3ntrar"> </for%> </-ody> </ht%l>

$sta es una gina sin ning:n cdigo PHP, sim lemente tiene un (ormulario. @ij,monos en el action del (ormulario, que est dirigido #acia una gina llamada edadL. # , que es la que recibir el dato de la edad % mostrar un contenido u otro de endiendo de ese valor. 0u cdigo es el siguiente1
<ht%l> <head> <title>4estrin+ir por edad</title> </head> <-ody> <? 2edad ? 2$.NST6"edad":; echo "T" edad: 2edad<p>"; if (2edad < J[) K echo "9o p"edes entrar"; OelseK echo "Gien*enido"; O ?> </-ody> </ht%l>

$s eramos que este otro cdigo tam oco resulte extra'o. 0im lemente se recibe la edad, utili!ando el arra% XNP;0). +uego se muestra la edad % se ejecuta una ex resin condicional en (uncin de que la edad sea menor que 1E. $n caso ositivo 8edad menor que 1E9, se muestra un mensaje que in(orma de que no se deja acceder al gina. $n caso negativo 8ma%or o igual a 1E9 se muestra un mensaje de bienvenida. Podemos ver el ejem lo en (uncionamiento.
Artculo por

Rubn Alvarez

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

50

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

O.'. Autollamada de p+ginas


Pginas que se llaman a si mismas pasando datos por P:,. o )E.5 formularios reentrantes ! variables pasadas por 29* a la misma pgina. /l incluir un (ormulario en una gina se debe indicar, a trav,s del atributo action, el nombre del arc#ivo PHP al que enviaremos los datos escritos en el (ormulario. ?e este modo, ara un esquema de env&o de datos or (ormulario, ueden artici ar dos ginas1 una que contiene el (ormulario % otra que recibe los datos de dic#o (ormulario. +o mismo ocurre cuando enviamos variables or una 5>+. )enemos una gina que contendr el enlace % otra gina que recibir % tratar esos datos ara mostrar unos resultados. $n el resente art&culo vamos a ver cmo se uede enviar % recibir datos de un (ormulario con una :nica gina. /simismo, veremos como en la misma gina odemos tener enlaces con aso de variables or 5>+ % adems, odemos recoger % tratar esos datos con la misma gina. / este e(ecto odemos llamarte =autollamada de ginas=, tambi,n se le suele llamar como =@ormularios reentrantes= o t,rminos similares. $s mu% interesante conocer el modo de (uncionamiento de estos scri ts, orque sern mu% #abituales en nuestras ginas PHP % a%udan muc#o a tener los cdigos ordenados. $n ambos casos, ara (ormularios o env&o de datos or la 5>+, se debe seguir un esquema como este1 D -om robar si recibo datos or 5>+ o or (ormulario D 0i no recibo datos D *uestro el (ormulario o los enlaces que asan variables. D 0i recibo datos D $ntonces tengo que rocesar el (ormulario o las variables de la 5>+ Para un $ormulario Meamos a continuacin como ser&a el cdigo de un (ormulario reentrante.
<ht%l> <head> <title>!e lla%o a %i %is%o...</title> </head> <-ody> <? if (;2$.NST)K ?> <for% action?"a"to-lla%ada.php" %ethod?"post"> 9o%-re: <inp"t type?"text" na%e?"no%-re" siMe?"ES"> <-r> 3%presa: <inp"t type?"text" na%e?"e%presa" siMe?"ES"> <-r> Telefono: <inp"t type?"text" na%e?"telefono" siMe?J# *al"e?"FE# " > <-r> <inp"t type?"s"-%it" *al"e?"3n*iar"> </for%> <? OelseK echo "<-r>S" no%-re: " . 2$.NST6"no%-re":; echo "<-r>S" e%presa: " . 2$.NST6"e%presa":; echo "<-r>S" TelBfono: " . 2$.NST6"telefono":; O ?> </-ody> </ht%l>

$n el ejem lo, el rimer aso es conocer si se estn recibiendo o no datos or un (ormulario. Para ello se com rueba con un

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

51

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com enunciado i( si existe o no una variable XNP;0). $n concreto i( 8OXNP;0)9 querr&a decir algo como =0i no existen datos venidos de un (ormulario=. $n caso de que no existan, muestro el (ormulario. $n caso de que s& existan, recojo los datos % los im rimo en la gina. 0e uede ver el ejem lo en (uncionamiento en una gina a arte. Para paso de variables por 3&L +a idea es la misma. -om robar con un enunciado i( si se reciben o no datos desde una 5>+. Meamos el cdigo a continuacin. 0e trata de una gina que muestra una serie de enlaces ara ver las tablas de multi licar de el 1 #asta el 1F. -ada uno de los enlaces muestra una tabla de multi licar. Pulsando el rimer enlace odemos ver la tabla del 1, ulsando el segundo la tabla del L, etc. >ecordemos que la gina se llama a si misma. Para com renderla ms (cilmente ser interesante verla en (uncionamiento.
<ht%l> <head> </head> <title>Ta-las de %"ltiplicar</title>

<-ody> <? if (;2$83T)K for (2i?J;2i<?JS;2iFF)K echo "<-r><a href?1*er$ta-la.php?ta-la?2i1>5er la ta-la del 2i</a>\n"; O O else K 2ta-la?2$83T6"ta-la":; ?> <ta-le ali+n?center -order?J cellpaddin+?"J"> <? for (2i?S;2i<?JS;2iFF)K echo "<tr><td>2ta-la Y 2i</td><td>?</td><td>" . 2ta-la C 2i . "</td></tr>\n"; O ?> </ta-le> <? O ?> </-ody> </ht%l>

$ste cdigo es un oco ms com licado, orque #ace un oco ms de cosas que el anterior, ero ara el asunto que nos ocu a que es la autollamada de ginas, todo sigue igual de sim le. Ha% que (ijarse en el i( que com rueba si se reciben o no datos or 5>+1 i( 8OXN.$)9, que querr&a decir algo como =0i no se reciben variables or la 5>+=. $n caso ositivo 8no se reciben datos or 5>+9 se muestran los enlaces ara ver cada una de las tablas % en caso de que s& se reciban datos, se muestra la tabla de multi licar del n:mero que se est recibiendo en la 5>+. Para #acer ara mostrar los enlaces % las tablas de multi licar se utili!an bucles (or, que es eramos que no resulten desconocidos ara el lector. Puede conocerse algo ms sobre los bucles (or en -ontrol del (lujo en PHP1 Gucles "".
Artculo por

Miguel Angel Alvarez

O.*. :tilizacin de las cooNies en "#"


'prendemos sobre las coo8ies en PHP . Explicamos en qu consisten estas c lebres galletas ! describimos

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

52

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com su empleo ! utilidad. 0in duda este t,rmino resultara (amiliar ara muc#os. /lgunos lo #abrn le&do u o&do ero no saben de qu, se trata. ;tros sin embargo sabrn que las cooKies son unas in(ormaciones almacenadas or un sitio web en el disco duro del usuario. $sta in(ormacin es almacenada en un arc#ivo ti o texto que se guarda cuando el navegador accede al sitio web.
&e$erencia:5na ex licacin de las cooKies ms detallada se uede encontrar en el art&culo <u, son las cooKies, ublicado en ?esarrollo7eb.com.

$s osible, or su uesto, ver estos arc#ivos. Para abrirlos #a% que ir al directorio -17indows-ooKies ara los usuarios de "$ 4P o a -1...Netsca e5sersde(aultuser ara usuarios de Netsca e. -omo odr,is com robar, en la ma%or&a de los casos la in(ormacin que se uede obtener es indesci(rable. +a utilidad rinci al de las cooKies es la de oder identi(icar al navegador una ve! ,ste visita el sitio or segunda ve! % as&, en (uncin del er(il del cliente dado en su rimera visita, el sitio uede ada tarse dinmicamente a sus re(erencias 8lengua utili!ada, colores de antalla, (ormularios rellenados total o arcialmente, redireccin a determinadas ginas...9. Para crear coo:ies con P P, modi(icar o generar una nueva cooKie lo odemos #acer a artir de la (uncin 0et-ooKie1
setcoo,ie("no%-re$de$la$coo,ie"=*alor=expiracion);

Pongamos un ejem lo sencillo. "maginemos que queremos introducir en una variable cooKie el nombre del visitante. $l nombre #a odido ser reviamente recogido or un (ormulario tal % como #emos visto1
setcoo,ie("persona"=2no%-re=ti%e()F[W#SSCEWD);

?e este modo #emos creado una cooKie # llamada ersona que tiene como valor el contenido de la variable Xnombre % tendr una duracin de 1 a'o a artir de su creacin 8el tiem o time89 actual en segundos sumado a un a'o en segundos9. $s im ortante que la creacin de la cooKie sea revia a la a ertura del documento H)*+. $n otras alabras, las llamadas a la (uncin setcooKie89 deben ser colocadas antes de la etiqueta H)*+. Por otra arte, es interesante se'alar que el #ec#o de que de(inir una cooKie %a existente im lica el borrado de la antigua. ?el mismo modo, el crear una rimera cooKie conlleva la generacin automtica del arc#ivo texto. Para utili!ar el valor de la cooKie en nuestros scri ts tan slo tendremos que llamar la variable que de(ine la cooKie. b>ealmente sencilloO Ha% que tener cuidado sin embargo de no de(inir variables en nuestro scri t con el mismo nombre que las cooKies uesto que PHP rivilegiar el contenido de la variable local con res ecto a la cooKie % no dar un mensaje de error. $sto nos uede conducir a errores realmente di(&ciles de detectar. >ecordamos que es osible reco ilar en una variable ti o arra% el conjunto de cooKies almacenadas en el disco duro del internauta mediante la variable de servidor XH))PN-;;^"$NM/>0 +as cooKies son una #erramienta (antstica ara ersonali!ar nuestra gina ero #a% que ser cautos %a que, or una arte, no todos los navegadores las ace tan % or otra, se uede deliberadamente im edir al navegador la creacin de cooKies. $s or ello que resultan un com lemento % no una (uente de variables in(alible ara nuestro sitio. -omo #as odido ver, las 0oo:ies son muy sencillas de utilizar en P P. Puedes ro(undi!ar ms en la creacin de cooKies en el siguiente articulo1 -ooKies en PHP.
Artculo por

Rubn Alvarez

O./. CooNies en "#"


Explicaciones completas sobre coo8ies en PHP , con todos los parmetros de la funcin setcoo8ie;< ! el arra! =>C::?&E

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

53

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com $n este art&culo del *anual de PHP vamos a demostraros que las coo:ies en P P son mu% (ciles de utili!ar. Ia em e!amos a ex licar algunas claves interesantes sobre este asunto en el art&culo utilizaci#n de coo:ies, anterior entrega del temario de ?esarrollo7eb.com sobre la rogramacin en PHP. $n el resente art&culo vamos a mostrar otros detalles que conviene saber ara trabajar con las cooKies. )anto los rocesos de creacin como los de lectura, ero sobre todo vamos a reali!ar un estudio com leto sobre los di(erentes armetros que tenemos dis onibles a la #ora de llamar a la (uncin setcooKie89, que sirve ara dar de alta las galletitas en el navegador del usuario que visita nuestra web.

O./.1. Crear cooNies en "#"


$n P P las coo:ies se controlan por medio de una $unci#n, que nos sirve ara generarlas % guardarlas en el navegador del usuario. $s la (uncin setcoo:ie78, que recibe varios armetros, entre ellos, el nombre de la cooKie, el valor % la caducidad. $l :nico armetro obligatorio es el rimero, el nombre de la cooKie, los dems son o cionales. Meamos la lista entera de armetros de setcooKie89 con sus ex licaciones1 )ombre 5n string con el nombre que queremos darle a la cooKie a guardar. Puede ser cualquiera que deseemos. Valor 5na cadena de caracteres que es el valor que va a tener la cooKie. 0aducidad $s un timestam con el valor de la (ec#a en la que caducar la coo:ie. +o normal es utili!ar la (uncin time89, que genera el timestam actual % sumarle el n:mero de segundos que quedamos que dure la cooKie. Por ejem lo, time89 P 84F W 4F W L4 W 2439 #ar&a que la cooKie durase un a'o en el sistema del usuario. &uta $l camino o ruta donde la cooKie se odr utili!ar dentro del dominio. Por de(ecto, la cooKie se odr utili!ar en el directorio donde se #a creado % sus subdirectorios. 0i indicamos =A= la cooKie tendr valide! dentro de todo el dominio. 5ominio $s el subdominio donde se odr acceder a la cooKie. +as cooKies slo se ueden generar % utili!ar ara el dominio de la gina donde est colocado el scri t, ero odemos #acerlo visible ara todos los subdominios del dominio de la web or medio de =.midominio.com=. Seguro $s un boleano que, si es true, indica que la cooKie slo uede ser transmitida or s#tt 8#tt seguro9. S#lo %ttp $sto es otro boleano que sirve ara indicar que la cooKie slo uede ser accedida or medio de las cabeceras del #tt , lo que la #ar&a inalcan!able ara lenguajes de scri t en el cliente como _avascri t. $ste armetro (ue a'adido en PHP 3.L.F La $unction setcoo:ie78 de P P genera y enva la coo:ie al navegador % devuelve un boleano, si es true indica que se udo incluir en el navegador del usuario % si es (alse indica que no #a odido colocarla en el sistema. Pero este valor no indica que luego el visitante la #a%a ace tado o no, uesto que el navegador uede #aberlo con(igurado ara no ace tar cooKies % esto no lo uede detectar setcooKie89 directamente. Por ejem lo, estas ser&an di(erentes llamadas a setcooKie891
setcoo,ie("%i+alleta"= "%i*alor"); setcoo,ie("coo,ie'"= "%i*alor'"= ti%e() F EWSS); setcoo,ie("otracoo,ie"= "*alorfinal"= ti%e() F EWSS= "/"= ".%ido%inio.co%");

Pero atencin en un asunto1 Para enviar una cooKie al navegador se debe #acer antes de #aber enviado las cabeceras del #tt al cliente, es decir, antes de #aber escrito cualquier texto en la gina. 0i no, PHP odr lan!ar un error de #eaders alread% sent 8cabeceras %a enviadas9.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

54

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com &ecuperar coo:ies con P P Por otra arte, ara recibir las cooKies que el navegador del usuario ueda tener creadas en el sistema se utili!a el arra% asociativo XN-;;^"$. $n este arra% estn todas las cooKies que tiene dis onible la gina PHP en el dominio % el directorio donde est colocado. Por medio del nombre de la cooKie accedemos a su valor1
2$&NN])36"%i+alleta":; 2$&NN])36"coo,ie'":;

Para ver un ejem lo de uso de coo:ies P P acceder al taller de PHP $stilos -00 distintos a una gina con PHP % cooKies.
Artculo por

Miguel Angel Alvarez

O.?. 9esiones !
@os introducimos al concepto de sesin ! aprendemos su manejo ! funcionamiento. $n los rogramas que #emos visto #asta a#ora, #emos utili!ado variables que slo exist&an en el arc#ivo que era ejecutado. -uando cargbamos otra gina distinta, los valores de estas variables se erd&an a menos que nos tomsemos la molestia de asarlos or la 5>+ o inscribirlos en las cooKies o en un (ormulario ara su osterior ex lotacin. $stos m,todos, aunque :tiles, no son todo lo rcticos que odr&an en determinados casos en los que la variable que queremos conservar #a de ser utili!ada en varios scri ts di(erentes % distantes los unos de los otros. Podr&amos ensar que ese roblema uede quedar resuelto con las cooKies %a que se trata de variables que ueden ser invocadas en cualquier momento. $l roblema, %a lo #emos dic#o, es que las cooKies no son ace tadas ni or la totalidad de los usuarios ni or la totalidad de los navegadores lo cual im lica que una a licacin que se sirviera de las cooKies ara asar variables de un arc#ivo a otro no ser&a 1FFT in(alible. $s im ortante a veces ensar en =la inmensa minor&a=, sobre todo en a licaciones de comercio electrnico donde debemos ca tar la ma%or cantidad de clientes osibles % nuestros scri ts deben estar re arados ante cualquier eventual de(iciencia del navegador del cliente. Nos resulta ues necesario el oder declarar ciertas variables que uedan ser reutili!adas tantas veces como queramos dentro de una misma sesin. "maginemos un sitio multilingce en el que cada ve! que queremos im rimir un mensaje en cualquier gina necesitamos saber en qu, idioma debe #acerse. Podr&amos introducir un scri t identi(icador de la lengua del navegador en cada uno de los arc#ivos o bien declarar una variable que (uese valida ara toda la sesin % que tuviese como valor el idioma reconocido en un rimer momento. Pensemos tambi,n en un carrito de la com ra de una tienda virtual donde el cliente va navegando or las ginas del sitio % a'adiendo los art&culos que quiere com rar a un carrito. $ste carrito odr&a ser er(ectamente una variable de ti o arra% 8tabla9 que almacena ara cada re(erencia la cantidad de art&culos contenidos en el carrito. $sta variable deber&a ser obviamente conservada continuamente a lo largo de todos los scri ts. $ste ti o de situaciones son solventadas a artir de las variables de sesin. 5na sesin es considerada como el intervalo de tiem o em leado or un usuario en recorrer nuestras ginas #asta que abandona nuestro sitio o deja de actuar sobre ,l durante un tiem o rolongado o bien, sencillamente, cierra el navegador. PHP nos ermite almacenar variables llamadas de sesin que, una ve! de(inidas, odrn ser utili!adas durante este la so de tiem o or cualquiera de los scri ts de nuestro sitio. $stas variables sern es eci(icas del usuario de modo que varias variables sesin del mismo ti o con distintos valores ueden estar coexistiendo ara cada una de las sesiones que estn teniendo lugar simultneamente. $stas sesiones tienen adems su ro io identi(icador de sesin que ser :nico % es ec&(ico. /lgunas mejoras re(erentes al em leo de sesiones #an sido introducidas con PHP4. $s a esta nueva versin a la que #aremos re(erencia a la #ora de ex licar las (unciones dis onibles % la (orma de o erar. Para los rogramadores de PHP2 la di(erencia ma%or es que estn obligados a gestionar ellos mismos las sesiones de(inir sus ro ios identi(icadores de sesin.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

55

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Meamos en el siguiente ca &tulo la (orma de lasmar esta necesidad t,cnica en nuestros scri ts a artir de las (unciones que gestionan las sesiones en PHP.
Artculo por

Rubn Alvarez

O.O. 9esiones en "#" !!


#escribimos los metodos de trabajo con sesiones en PHP , iniciali+ar sesin, crear variables de sesin o recuperarlas. +as sesiones, en a licaciones web reali!adas con PHP % en el desarrollo de ginas web en general, nos sirven ara almacenar in(ormacin que se memori!ar durante toda la visita de un usuario a una gina web. ?ic#o de otra (orma, un usuario uede ver varias ginas durante su aso or un sitio web % con sesiones odemos almacenar variables que odremos acceder en cualquiera de esas ginas. ?igamos que las sesiones son una manera de guardar in(ormacin, es ec&(ica ara cada usuario, durante toda su visita. -ada usuario que entra en un sitio abre una sesin, que es inde endiente de la sesin de otros usuarios. $n la sesin de un usuario odemos almacenar todo ti o de datos, como su nombre, roductos de un #i ot,tico carrito de la com ra, re(erencias de visuali!acin o trabajo, ginas or las que #a asado, etc. )odas estas in(ormaciones se guardan en lo que denominamos variables de sesin. PHP dis one de un m,todo bastante cmodo de guardar datos en variables de sesin, % de un juego de (unciones ara el trabajo con sesiones % variables de sesin. +o veremos en este art&culo. Para cada usuario PHP internamente genera un identi(icador de sesin :nico, que sirve ara saber las variables de sesin que ertenecen a cada usuario. Para conservar el identi(icador de sesin durante toda la visita de un usuario a una gina PHP almacena la variable de sesin en una cooKie, o bien la ro aga a trav,s de la 5>+. $sto se uede con(igurar desde el arc#ivo # .ini.

O.O.1. (rabaCo con sesiones en "#"


-uando queremos utili!ar variables de sesin en una gina tenemos que iniciar la sesin con la siguiente (uncin1 session-start 78 "nicia una sesin ara el usuario o contin:a la sesin que udiera tener abierta en otras ginas. /l #acer sessionNstart89 PHP internamente recibe el identi(icador de sesin almacenado en la cooKie o el que se env&e a trav,s de la 5>+. 0i no existe tal identi(icador se sesin, sim lemente lo crea.
)ota: 0i en el # .ini se #a de(inido la variable session.autoNstart R 1 se iniciali!a automticamente la sesin en cada gina que visita un usuario, sin que se tenga que #acer el sessionNstart89

5na ve! iniciali!ada la sesin con sessionNstart89 odemos a artir de a#ora utili!ar variables de sesin, es decir, almacenar datos ara ese usuario, que se conserven durante toda su visita o recu erar datos almacenados en ginas que #a%a odido visitar. +a sesin se tiene que iniciali!ar antes de escribir cualquier texto en la gina. $sto es im ortante % de no #acerlo as& corremos el riesgo de recibir un error, orque al iniciar la sesin se deben leer las cooKies del usuario, algo que no se uede #acer si %a se #an enviado las cabeceras del H))P.
)ota: si se intenta abrir una sesin des u,s de #aber enviado texto de la gina al cliente se obtendr el siguiente mensaje1 7arning1 sessionNstart891 -annot send session cac#e limiter D #eaders alread% sent 8out ut started at d9

5na ve! iniciada la sesin odemos utili!ar variables de sesin a trav,s de XN0$00";N, que es un arra% asociativo, donde se accede a cada variable a artir de su nombre, de este modo1

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

56

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


2$S3SS)N96"no%-re$de$*aria-le": )ota: XN0$00";N es una variable global que existe a artir de PHP 4.1.F. +o normal es que odamos acceder a esa variable normalmente, ero si nuestra versin de PHP no est actuali!ada odemos intentarlo con XH))PN0$00";NNM/>0, que es tambi,n un arra% asociativo, aunque no es de mbito global. 0i XH))PN0$00";NNM/>0 tam oco (unciona tendremos que registrar cada variable or se arado con la (uncin sessionNregister89, envindo or armetro los nombres de las variables de sesin que desea utili!ar desde PHP.

$xisten otras dos con(iguraciones del # .ini que a(ectan al trabajo con variables de sesin, que son tracKNvars % registerNglobals. Por de(ecto tracKNvars est activado % registerNglobals est desactivado. $ste es el caso normal % el que su onemos tendr el servidor donde rogrames, ero si esas variables cambian odr&a cambiar alguna cosita, como que las variables se tengan que registrar ex l&citamente con sessionNregister89. $jem lo de cdigo ara de(inir una variable de sesin1
<? session$start(); ?> <ht%l> <head> <title>8enerar *aria-le de sesiLn</title> </head> <-ody> <? 2$S3SS)N96"%i*aria-ledesesion": ? "/ola este es el *alor de la *aria-le de sesiLn"; ?> </-ody> </ht%l>

-omo se uede ver, es im ortante iniciali!ar la sesin antes de #acer otra cosa en la gina. +uego odremos de(inir variables de sesin en culquier lugar del cdigo PHP de la gina. Para leer una variable de sesin se #ace a trav,s del mismo arra% asociativo XN0$00";N. $s tan sencillo como #ar&amos ara utili!ar cualquier otra variable, lo :nico es que tenemos que #aber iniciali!ado la sesin reviamente. I or su uesto, que la variable que deseamos acceder exista reviamente.
<? session$start(); ?> <ht%l> <head> <title> eo *aria-le se sesiLn</title> </head> <-ody> !"estro esa *aria-le: <? echo 2$S3SS)N96"%i*aria-ledesesion":; ?> </-ody> </ht%l>

-omo se uede ver, al inicio del cdigo #emos iniciali!ado la sesin % luego en cualquier arte del cdigo odr&amos acceder a las variables de sesin que tuvi,semos creadas.
)ota: si intentamos acceder a una variable de sesin con XN0$00";N que no #a sido creada obtendremos otro mensaje de error1 Notice1 5nde(ined index1 mivariabledesesion, que es el mismo que si intentamos acceder a cualquier elemento de un arra% que no existe.

Ms sobre sesiones en P P +a siguiente in(ormacin sobre sesiones de PHP tambi,n uede ser de :til lectura. No obstante lo ex resado #asta aqu& es una in(ormacin muc#o ms actuali!ada. $n las rximas l&neas se ex lican mecanismos ara sesiones ero todos los que se comentan, aunque son vlidos, no son actuales or tratarse de ex licaciones ara versiones de PHP ms antiguas. Hemos dic#o en el ca &tulo anterior que la variables de sesin se di(erencian de las variables clsicas en que ,stas residen en el servidor, son es eci(icas de un solo usuario de(inido or un identi(icador % ueden ser utili!adas en la globalidad de nuestras ginas.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

57

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Para iniciar una sesin odemos #acerlo de dos (ormas distintas1 D?eclaramos abiertamente la a ertura de sesin or medio de la (uncin session_start !. $sta (uncin crea una nueva sesin ara un nuevo visitante o bien recu era la que est siendo llevada a cabo. D?eclaramos una variable de sesin or medio de la (uncin session_register "#ariable"!. $sta (uncin, adems de crear o recu erar la sesin ara la gina en la que se inclu%e tambi,n sirve ara introducir una nueva variable de ti o sesin. +as sesiones #an de ser iniciadas al rinci io de nuestro scri t. /ntes de abrir cualquier etiqueta o de im rimir cualquier cosa. $n caso contrario recibiremos un error. -on lo visto, vamos a ro oner el ejem lo clsico de utili!acin de una sesin1 un contador. $ste contador deber aumentar de una unidad cada ve! que recargamos la gina o a retamos al enlace1
<? session$re+ister(1contador1); ?> </T! > </3A(> <T)T 3>contador.php</T)T 3> <//3A(> <GN(<> <? )f (isset(2contador)??S) K2contador?S;O FF2contador; echo "<a href?"contador.php">/as recar+ado esta pV+ina 2contador *eces</a>"; ?> </GN(<> <//T! >

*+ecutar script +a condicin if tiene en cuenta la osibilidad de que la variable $contador no #a%a sido todav&a iniciali!ada. +a (uncin isset se encarga de dar un valor cero cuando una variable no #a sido iniciali!ada. ;tras (unciones :tiles ara la gestin de sesiones son1

)uncin 1ession;id( 1ession;destro%( 1ession;unregister(S*ariableS

Descripcin &os de*uel*e el identi"icador de la sesi'n Da por abandonada la sesi'n eliminando *ariables e identi"icador. 4bandona una *ariable sesi'n

Para a render ms sobre las sesiones, concretamente ara ver una a licacin que gestiona un carrito de com ra or medio de variables sesin visita nuestro articulo del taller de P P. 0i buscas ms (unciones o in(ormacin adicional sobre las sesiones, consulta el manual o$icial de P P.
Artculo por

Rubn Alvarez

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

58

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Parte *:

+ases !e !atos en PHP


Entramos en una de las partes m/s interesantes del manual de ,-,3 con los captulos .ue tratan las bases de datos. <raba)aremos con 0%12$ % mostraremos c'mo hacer todas las operaciones tpicas con una base de datos3 como acceso a registros3 inserci'n3 modi"icaci'n % borrado.

1.1. (rabaCar con bases de datos en "#"


&nter s del empleo de bases de datos con pginas dinmicas. Presentacin del lenguaje ,-* ! de la base M!,-*. Pasos previos a los ejemplos. 5na de las rinci ales ventajas que resenta el trabajar con ginas dinmicas es el oder almacenar los contenidos en bases de datos. ?e esta (orma, odemos organi!arlos, actuali!arlos % buscarlos de una manera muc#o ms sim le. $l lenguaje PHP, %a #emos dic#o, o(rece inter(aces ara el acceso a la ma%or&a de las bases de datos comerciales % or ;?G- a todas las bases de datos osibles en sistemas *icroso(t, a artir de las cuales odremos editar el contenido de nuestro sitio con absoluta sencille!. $sta interaccin se reali!a, or un lado, a artir de las (unciones que PHP nos ro one ara cada ti o de base de datos %, or otro estableciendo un dilogo a artir de un idioma universal1 0<+ 80tructured <uer% +anguage9 el cual es com:n a todas las bases de datos. $ste lenguaje resulta, como veremos en el tutorial de SQL, mu% otente % (cil de a render. $n este manual de PHP nos limitaremos ues a la utili!acin las instrucciones 0<+ bsicas que sern a rendidas a medida que ex licamos las di(erentes (ormas de actuar sobre una base de datos dejando ara el tutorial de SQL los as ectos ms avan!ados. -omo base ejem lo de estos ca &tulos #emos elegido *%0<+, sin duda la base de datos ms extendida en combinacin con PHP. 0u gratuidad, e(iciencia % sim licidad la #an #ec#o una buena candidata. Ia #emos ex licado en ca &tulos anteriores su instalaci#n a la ve! que #emos resentado los comandos de base que nos ueden ermitir abordarla con una relativa (acilidad. $n caso de utili!ar cualquier otra base com atible, las correcciones a llevar a cabo con res ecto a nuestros ejem los no son excesivamente grandes % la lectura de esos ca &tulos sigue siendo de gran utilidad. 5na ve! instalado *%0<+ % antes de oder comen!ar con nuestros ejem los, ser necesario llevar a cabo las siguientes o eraciones1 D"ntroducidos dentro de *%0<+, crearemos la base de datos ejem lo con la siguiente sentencia1
create data-ase e@e%plo;

D0eleccionaremos la base ejem lo como la base a utili!ar1


"se e@e%plo

D-rearemos a continuacin la tabla clientes a artir de la siguiente sentencia1


create ta-le clientes ( no%-re *archar(JSS)= telefono *archar(JSS) );

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

59

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com /#ora %a dis onemos de nuestra tabla vac&a. 0lo queda comen!ar a llenarla con los datos que iremos insertando. $l conjunto de scri ts utili!ados ara el bloque de bases de datos uede ser descargado a!u. /dems contamos con un videotutorial sobre las bases de datos en PHP que te a%udar a entenderlo todo mejor.
Artculo por

Rubn Alvarez

1.$. !ntroduccin de nuevos registros con "#"


0orma sencilla de introducir nuevos elementos en una tabla de base de datos. 9eali+amos un &nsert con PHP . 5na ve! creada la tabla clientes en nuestra base de datos e$emplo, el aso siguiente sea llenarla con registros. Para ello vamos a ver este art&culo, en el que se reciben datos desde un (ormulario % luego se insertan con PHP en la base de datos, en la tabla adecuada. +os datos del registro ueden ser recogidos, or ejem lo, a artir de un (ormulario. /qu& os ro onemos un sim le documento H)*+ que recoge los datos % los env&a a una gina PHP que se encarga de rocesarlos1
</T! > </3A(> <T)T 3>)nsertar.ht%l</T)T 3> <//3A(> <GN(<> <di* ali+n?"center"> <hJ>)nsertar "n re+istro</hJ> <-r> <PN4! !3T/N(?".NST" A&T)N9?"insertar.php"> 9o%-re<-r> <)9.7T T<.3?"T3YT" 9A!3?"no%-re"><-r> TelBfono<-r> <)9.7T T<.3?"T3YT" 9A!3?"telefono"><-r> <)9.7T T<.3?"S7G!)T" *al"e?")nsertar"> </PN4!> </di*> </GN(<> <//T! >

+legados a la gina destino del (ormulario 8insertar.php9, lo rimero que #abr que #acer es establecer un v&nculo entre el rograma % la base de datos. $sta conexin se lleva a cabo con la (uncin mysql_connect. / continuacin, deberemos generar una orden de insercin del registro en lenguaje 0<+. $sta orden ser ejecutada or medio de la (uncin mysql_db_query. $n esta (uncin es eci(icaremos rimeramente la base de datos sobre la que queremos actuar % a continuacin introduciremos la sentencia 0<+1
</T! > </3A(> <T)T 3>)nsertar.php</T)T 3> <//3A(> <GN(<> <? //&onexion con la -ase %ysTl$connect("localhost"="t"$"ser"="t"$pass0ord"); //selecciLn de la -ase de datos con la T"e *a%os a tra-a@ar %ysTl$select$d-("%i$-ase$datos"); //3@ec"cion de la sentencia S^ %ysTl$T"ery("insert into clientes (no%-re=telefono) *al"es (12no%-re1=12telefono1)"); ?> <hJ><di* ali+n?"center">4e+istro )nsertado</di*></hJ> <di* ali+n?"center"><a href?"lect"ra.php">5is"aliMar el contenido de la -ase</a></di*> </GN(<>

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

60

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


<//T! >

*+ecutar e+emplo +os arametros user % assword son de(inidos or el creador de la base. $s conveniente en un rinci io, al crear nuestras bases, trabajar sin ellos con lo cual dejaremos las cadenas corres ondientes vacias1 ==. /dems de la ro ia insercin, el rograma avisa de la introduccin del registro % o(rece un enlace #acia una gina de lectura la cual ser comentada a continuacin. No entraremos en la descri cin de la orden 0<+, ara com render ms acerca de cmo introducir registros, re(ererirse al tutorial de SQL.
Artculo por

Rubn Alvarez

1.'. 9eleccin 3 lectura de registros con "#"


2tili+amos el comando ,elect de ,-* para crear una seleccin de nuestra tabla ! mostrar todos los datos en pantalla por medio de un bucle. Con PHP . ?entro de una base de datos, organi!ada or tablas, la seleccin de una tabla entera o de un cierto numero de registros resulta una o eracin rutinaria. /qu& os mostramos una (orma bastante clsica de mostrar en antalla a artir de un bucle los registros seleccionados or una sentencia 0<+1
</T! > </3A(> <T)T 3>lect"ra.php</T)T 3> <//3A(> <GN(<> <hJ><di* ali+n?"center"> ect"ra de la ta-la</di*></hJ> <-r> <-r> <? //&onexion con la -ase %ysTl$connect("localhost"="t"$"ser"="t"$pass0ord"); //selecciLn de la -ase de datos con la T"e *a%os a tra-a@ar %ysTl$select$d-("%i$-ase$datos"); //3@ec"ta%os la sentencia S^ 2res"lt?%ysTl$T"ery("select C fro% clientes"); ?> <ta-le ali+n?"center"> <tr> <th>9o%-re</th> <th>TelBfono</th> </tr> <? //!ostra%os los re+istros 0hile (2ro0?%ysTl$fetch$array(2res"lt)) K echo 1<tr><td>1.2ro06"no%-re":.1</td>1; echo 1<td>1.2ro06"telefono":.1</td></tr>1; O %ysTl$free$res"lt(2res"lt) ?> </ta-le> <di* ali+n?"center"> <a href?"insertar.ht%l">AQadir "n n"e*o re+istro</a><-r> <a href?"act"aliMarJ.php">Act"aliMar "n re+istro existente</a><-r> <a href?"-orrarJ.php">Gorrar "n re+istro</a><-r>

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

61

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


</di*> </GN(<> <//T! >

*+ecutar script +os asos a reali!ar son, en un rinci io, los vistos ara la insercin de un registro1 -onexin a la base % ejecucin de la sentencia. $sta ve!, la in(ormacin de dic#a ejecucin ser almacenada en una variable 8 $result9. $l siguiente aso ser lasmar en antalla la in(ormacin recogida en Xresult. $sto lo #aremos mediante la (uncin mysql_fetch_array que devuelve una variable arra% con los contenidos de un registro a la ve! que se osiciona sobre el siguiente. $l bucle while nos ermite leer e im rimir secuencialmente cada uno de los registros. +a (uncin mysql_free_result se encarga de liberar la memoria utili!ada ara llevar a cabo la consulta. /unque no es necesaria su utili!acin, resulta altamente aconsejable.
Artculo por

Rubn Alvarez

1.*. Actualizacion de un registro de base de datos con "#"


Explicamos cmo modificar o actuali+ar un registro existente en una tabla de una base de datos, con PHP . Es decir, $acer un update para un registro de una tabla, desde PHP . Para mostrar cmo se actuali!a un registro resente en nuestra base de datos, vamos a #acerlo a artir de un caso un oco ms com lejo ara que em ecemos a (amiliari!arnos con estas o eraciones. >eali!aremos un ar de scri ts que ermitan cambiar el numero de tel,(ono de las distintas ersonas resentes en nuestra base. $l nombre de estas ersonas, as& como el nuevo numero de tel,(ono, sern recogidos or medio de un (ormulario. $l arc#ivo del (ormulario va a ser esta ve! un scri t PHP en el que e(ectuaremos una llamada a nuestra base de datos ara construir un men: des legable donde a are!can todos los nombres. +a cosa quedar&a as&1
</T! > </3A(> <T)T 3>Act"aliMarJ.php</T)T 3> <//3A(> <GN(<> <di* ali+n?"center"> <hJ>Act"aliMar "n re+istro</hJ> <-r> <? //&onexion con la -ase %ysTl$connect("localhost"="t"$"ser"="t"$pass0ord"); //selecciLn de la -ase de datos con la T"e *a%os a tra-a@ar %ysTl$select$d-("%i$-ase$datos"); echo 1<PN4! !3T/N(?".NST" A&T)N9?"act"aliMar'.php">9o%-re<-r>1; //&rea%os la sentencia S^ y la e@ec"ta%os 2sS^ ?"Select no%-re Pro% clientes Nrder Gy no%-re"; 2res"lt?%ysTl$T"ery(2sS^ ); echo 1<select na%e?"no%-re">1; //8enera%os el %en" desple+a-le 0hile (2ro0?%ysTl$fetch$array(2res"lt)) Kecho 1<option>1.2ro06"no%-re":;O ?> </select> <-r> TelBfono<-r> <)9.7T T<.3?"T3YT" 9A!3?"telefono"><-r>

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

62

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


<)9.7T T<.3?"S7G!)T" *al"e?"Act"aliMar"> </PN4!> </di*> </GN(<> <//T! >

+a manera de o erar ara construir el men: des legable es la misma que ara visuali!ar la tabla. ?e nuevo em leamos un bucle while en combinacin con la (uncin mysql_fetch_array lo que nos ermite mostrar cada una de las o ciones. $l scri t de actuali!acin ser mu% arecido al de insercin1
</T! > </3A(> <T)T 3>Act"aliMar'.php</T)T 3> <//3A(> <GN(<> <? //&onexion con la -ase %ysTl$connect("localhost"="t"$"ser"="t"$pass0ord"); //selecciLn de la -ase de datos con la T"e *a%os a tra-a@ar %ysTl$select$d-("%i$-ase$datos"); //&rea%os la sentencia S^ y la e@ec"ta%os 2sS^ ?"7pdate &lientes Set telefono?12telefono1 Uhere no%-re?12no%-re1"; %ysTl$T"ery(2sS^ ); ?> <hJ><di* ali+n?"center">4e+istro Act"aliMado</di*></hJ> <di* ali+n?"center"><a href?"lect"ra.php">5is"aliMar el contenido de la -ase</a></di*> </GN(<> <//T! >

*+ecutar e+emplo
Artculo por

Rubn Alvarez

1./. %orrado de un registro con "#"


'prendemos a eliminar registros de una tabla de base de datos, con un ejemplo prctico en PHP . ;tra de las o eraciones elementales que se ueden reali!ar sobre una base de datos es borrar un registro. Para #acerlo, 0<+ nos ro one sentencias del ti o Delete. Memoslo con un ejem lo a licado a nuestra agenda. -abe se'alar que rimero debemos seleccionar el registro que se desea borrar % luego reali!ar el borrado ro iamente dic#o. Para ello crearemos un men: des legable dinmico, donde se odr seleccionar el elemento que se desea borrar. +uego se asar a una gina PHP una re(erencia al elemento seleccionado, ara borrarlo de la base de datos.
</T! > </3A(> <T)T 3>GorrarJ.php</T)T 3> <//3A(> <GN(<> <di* ali+n?"center"> <hJ>Gorrar "n re+istro</hJ> <-r> <? //&onexion con la -ase %ysTl$connect("localhost"="t"$"ser"="t"$pass0ord"); //selecciLn de la -ase de datos con la T"e *a%os a tra-a@ar %ysTl$select$d-("%i$-ase$datos");

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

63

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

echo 1<PN4! !3T/N(?".NST" A&T)N9?"-orrar'.php">9o%-re<-r>1; //&rea%os la sentencia S^ y la e@ec"ta%os 2sS^ ?"Select no%-re Pro% clientes Nrder Gy no%-re"; 2res"lt?%ysTl$T"ery(2sS^ ); echo 1<select na%e?"no%-re">1; //!ostra%os los re+istros en for%a de %en_ desple+a-le 0hile (2ro0?%ysTl$fetch$array(2res"lt)) Kecho 1<option>1.2ro06"no%-re":;O %ysTl$free$res"lt(2res"lt) ?> </select> <-r> <)9.7T T<.3?"S7G!)T" *al"e?"Gorrar"> </PN4!> </di*> </GN(<> <//T! >

$l siguiente aso es #acer e(ectiva la o eracin a artir de la ejecucin de la sentencia 0<+ que construimos a artir de los datos del (ormulario1
</T! > </3A(> <T)T 3>Gorrar'.php</T)T 3> <//3A(> <GN(<> <? //&onexion con la -ase %ysTl$connect("localhost"="t"$"ser"="t"$pass0ord"); //selecciLn de la -ase de datos con la T"e *a%os a tra-a@ar %ysTl$select$d-("%i$-ase$datos"); //&rea%os la sentencia S^ y la e@ec"ta%os 2sS^ ?"(elete Pro% &lientes Uhere no%-re?12no%-re1"; %ysTl$T"ery(2sS^ ); ?> <hJ><di* ali+n?"center">4e+istro Gorrado</di*></hJ> <di* ali+n?"center"><a href?"lect"ra.php">5is"aliMar el contenido de la -ase</a></di*> </GN(<> <//T! >

*+ecutar e+emplo -on este ca &tulo cerramos el bloque de accesos a bases de datos con PHP. Para mas in(ormacin relacionada od,is re(eriros al taller de P P donde odr,is encontrar alg:n que otro art&culo interesante al res ecto.
Artculo por

Rubn Alvarez

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

64

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Parte ,:

Su(ir una aplicacin 'e( al ser)i!or


:na *ez .ue hemos terminado una aplicaci'n web en local3 tenemos .ue ponerla en producci'n en un ser*idor de 5nternet. 0ostramos c'mo subir todas las p/ginas a un ser*idor % algunas de las posibles tareas .ue nos tocar/ realizar para subir tambiEn la base de datos.

..1. 9ubir una aplicacin "#" al servidor


3amos a ver cmo subir una aplicacin $ec$a en local a un servidor de &nternet. Empe+amos ofreciendo una serie de pautas para subir los arc$ivos. $n el asado me solicitaron que escribiese sobre un tema que #asta a#ora no #ab&amos tocado ms que de re(iln, que consiste en la uesta en marc#a de una a licacin, rogramada en local, a nuestro servidor de #osting, es decir, en el aso de subir todos los arc#ivos PHP % la base de datos a nuestro es acio en el servidor web contratado en un roveedor de alojamiento. $l tema es ero que resulte (amiliar a muc#as de las ersonas que leen nuestros art&culos, %a que robablemente #a%an tenido que asar or esa eta a en alguna ocasin, aunque retendo dar algunas claves % truquillos que ueden a%udar a todos, tengan o no ex eriencia en este asunto.

..1.1. 9ubir los arc&ivos


Nuestro servidor web debe tener un directorio ara la ublicacin de las ginas web. $se ser&a el lugar donde #a% que subir los arc#ivos . # . ?e endiendo del roveedor con el que trabajemos, el directorio de ublicacin uede variar. .eneralmente, cuando contratamos un alojamiento, nos ro orcionan una cuenta de @)P con la que conectarnos al servidor web % trans(erir los arc#ivos de nuestro sitio, adems de unos datos ara la conexin, que sern el nombre del servidor % el usuario % contrase'a ara el acceso al @)P.
&e$erencia: or si alguien no sabe lo que es el @)P, #ablamos ms sobre ello en el manual de Publicar en "nternet, concretamente en el art&culo 0ubir los arc#ivos al servidor.

/l conectarnos al servidor con los datos del @)P, que deben ser ro orcionados or nuestro roveedor, accederemos a un directorio. $ste directorio odr&a ser el de ublicacin, aunque generalmente no es as&, sino que suele ser un subdirectorio llamado =H)*+= o =docs= o algo similar, que cuelga del directorio de inicio en nuestra conexin @)P. -omo dec&a, este directorio uede tener nombres distintos en roveedores distintos, aunque, en cualquier caso, con una sim le regunta a nuestro roveedor resolveremos esa duda. +os arc#ivos se deben subir al directorio de ublicacin, o a cualquier subdirectorio de este. $n de(initiva, los tendremos que alojar or a#& dentro % ara acceder a ellos bastar&a con escribir el nombre del dominio o 5>+ de nuestro alojamiento,

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

65

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com seguido del nombre del arc#ivo. 0i tuvi,semos un arc#ivo llamado #ola. # % nuestro alojamiento se #a contratado ara el dominio www.midominio.com, deber&amos subir ese arc#ivo al directorio de ublicacin % acceder&amos al arc#ivo escribiendo1 #tt 1AAwww.midominio.comA#ola. # 0i creamos subdirectorios dentro del directorio de ublicacin odremos acceder a ellos escribiendo el nombre del dominio o 5>+ de nuestro alojamiento, seguido del nombre del directorio % el nombre del arc#ivo. Por ejem lo, si creamos un subdirectorio llamado aginas % tenemos dentro un arc#ivo llamado ag1. # , odr&amos acceder a ,l de la siguiente manera. #tt 1AAwww.midominio.comA aginasA ag1. #
&e$erencia:#a% otro conce to interesante que deber&amos conocer llegados a este unto, que es el =documento or de(ecto=. ]ste no es ms que el arc#ivo que se env&a al navegador si en la 5>+ accedida no se es eci(icaba ning:n arc#ivo. 0uele llamarse index.#tml o index. # 8o index.as si nuestro servidor so orta rogramacin en /0P9, aunque uede variar de un roveedor a otro. Hablamos ms sobre el documento or de(ecto en nuestro manual de Publicar en "nternet.

Artculo por

Miguel Angel Alvarez

..$. Colocar los arc&ivos "#" 8uera del directorio de publicacin


'lgunos casos en los que colocar arc$ivos fuera del directorio de publicacin tiene sentido ! utilidad. Por decir algo ms sobre el tema de colocar los arc#ivos, quer&a se'alar que cualquier cosa que ongamos (uera del directorio de ublicacin no odr ser accedida a trav,s del navegador. $s decir, si creamos un directorio que se llame (uncionesN # en el mismo nivel que el directorio de ublicacin 8(uera del directorio de ublicacin9 no odremos acceder con el ex lorador a los arc#ivos que coloquemos dentro de ninguna de las maneras. $sto es as& orque la 5>+ de inicio de nuestro alojamiento corres onde con ese directorio % no odemos movernos #acia debajo de ese directorio con las 5>+s, que son la manera de es eci(icar al navegador los recursos a los que se quiere acceder.
)ota: Ia se ex lic lo que era el directorio de ublicacin en el ca &tulo anterior sobre 0ubir arc#ivos PHP al servidor.

No ser&a osible salir del directorio de ublicacin con una 5>+ como esta, or muc#o que utilicemos el o erador .. 8que sirve ara acceder al directorio adre9. #tt 1AAwww.midominio.comA..A(uncionesN # Aarc#ivoNinalcan!able. # 0in embargo, colocar algunos contenidos (uera del directorio de ublicacin uede ser mu% :til. Por ejem lo, odr&amos colocar all& co ias de seguridad de algunos arc#ivos o documentos que sim lemente queremos guardar en el servidor ara acceder a ellos desde cualquier arte % con nuestro rograma de @)P. Ha% otra utilidad ms interesante sobre colocar arc#ivos (uera del directorio de ublicacin. 0e trata de que muc#as veces utili!amos en nuestros rogramas tro!os de cdigo re etidamente, or ejem lo, ara abrir % cerrar bases de datos, ara mostrar la cabecera de nuestro ortal, ara com robar que un email escrito en un (ormulario es correcto, etc. $s mu% :til se arar estos tro!os de cdigo en un arc#ivo a arte % llamar a este arc#ivo con las (unciones PHP include89 o require89. /s&, si un d&a modi(icamos la cabecera de nuestro ortal, slo lo tendremos que modi(icar en un arc#ivo, o, si cambia la base de datos que utili!amos slo tendr&amos que modi(icar el arc#ivo que #ace la conexin a la base de datos una ve!, en lugar de ir cambindolo en todas las ginas PHP que abr&an las bases de datos. $stos arc#ivos no son ginas inde endientes, sino tro!os. 0eguramente, si los ejecutamos or se arado no mostrar&an ning:n resultado vlido, incluso odr&an dar mensajes de error. Por esta ra!n merece la ena colocarlos en un lugar donde nadie ueda tener acceso1 (uera del directorio de ublicacin. -on PHP si que odremos acceder a ese directorio ara incluir esos arc#ivos. 0olamente deber&amos utili!ar las (unciones PHP include89 o require89 indicando la ruta ara acceder a los

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

66

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com arc#ivos. $n el caso de que tengamos una gina llamada #ola. # en el directorio de ublicacin % un arc#ivo, que se llama abreNbaseNdatos. # , en el directorio (uncionesN # , que est (uera del directorio de ublicacin, si quisi,ramos acceder 8desde #ola. # 9 al arc#ivo que abre la base de datos lo #ar&amos as&.
incl"de("../f"nciones$php/a-re$-ase$datos.php")

?esde PHP s& que odemos acceder a los arc#ivos que se encuentran (uera del directorio de ublicacin. Para ello es eci(icamos la ruta adecuada, en la que utili!amos el o erador .. ara bajar al directorio adre. Nada ms que decir sobre la colocacin de los arc#ivos1 una ve! situados en el directorio de ublicacin se odr acceder a ellos con nuestro navegador % se deber&an ejecutar er(ectamente. /unque cabe se'alar que, tanto PHP como el servidor donde trabajemos, ueden tener con(iguraciones distintas % uede que alg:n detalle de la rogramacin de nuestras ginas no (uncione correctamente. Por ejem lo, nuestro PHP uede declarar o no automticamente las variables que llegan a trav,s de un (ormulario. 0i en local si que estaba con(igurado ara #acer esto % en remoto no, deber&amos locali!ar los lugares donde recogemos las variables % utili!ar las variables de entorno correctas 8mirar art&culo sobre Procesar variables de (ormularios % los comentarios al ie ara saber ms de esta osible (uente de errores9. /unque este no es un caso #abitual, odemos onernos en contacto con nuestro roveedor de alojamiento ara ver si ueden a%udarnos con(igurando el sistema o indicando los asos a seguir ara solventar en nuestros scri ts el asunto.
0omentario: el siguiente scri t calcula el nivel de directorio de los scri ts que queremos incluir en la gina actual. // /alla%os el ni*el de directorio en T"e estV "-icada la pV+ina J. Se hace "n rec"ento de los caracteres T"e contiene el no%-re del script act"al. 2&hars ? co"nt$chars(2./.$S3 P=J); '. 3xplora%os la ta-la de los caracteres de*"eltos -"scando el carVcter (1/1 &Ldi+o #X ) de directorio (carpeta) T"e de*"el*e Apache. foreach (2&hars as 2&har?>2n&hars)K if (2&har??#X) K2n?2n&hars;-rea,;O O E. 8enera%os "na cadena de n-J *eces con la s"-candena "../" T"e nos da el ni*el de directorio en T"e se enc"entra el script. if (2n??S) 2.athStrin+?""; else 2.athStrin+?str$pad(""=(2n-J)CE="../");

Artculo por

Miguel Angel Alvarez

..'. 9ubir una base de datos al sevidor de !nternet


El segundo paso para subir una aplicacin PHP al servidor consiste en colocar la base de datos en el / arte de los arc#ivos de la gina, debemos subir la base de datos con la que tenemos que trabajar. +as bases de datos con las que trabaja PHP son mu% variadas % en distintos casos odemos utili!ar una u otra, or lo que los modos de subir la base de datos tambi,n ueden variar.
)ota: $ste art&culo % los sucesivos, que tratan sobre subir una base de datos *%0<+ al servidor, se engloban tanto dentro del *anual de PHP como del )aller de *%0<+. Por ello, ser im ortante dis oner de conocimientos de ambas tecnolog&as ara entender % a rovec#ar estas ex licaciones.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

67

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com $s mu% corriente que nuestro roveedor de #osting o(re!ca junto con PHP la base de datos *%0<+, as& que las notas ara subir esa base de datos al servidor de este art&culo van encaminadas a o(recer soluciones ara esa base de datos. +a base de datos *%0<+ no se uede subir or @)P, como que se #ac&a con los arc#ivos del cdigo PHP. Para subirla tendremos que utili!ar otros mecanismos. Mo% a distinguir entre tres casos distintos en los que nos odr&amos encontrar en este momento1 1. La base de datos !ue pretendemos subir est vaca. )an slo #emos creado las tablas, ero no #emos introducido datos en ellas o, a lo sumo, tienen alg:n dato que #emos introducido de ruebas. L. La base de datos !ue !ueremos subir est completa y es una base de datos MySQL . $n este caso tenemos creada la base de datos en local % con toda la in(ormacin dentro %, or su uesto, queremos que esa in(ormacin quede tambi,n en la base de datos remota. 2. +a base de datos est completa 8como el caso anterior9, ero no es una base de datos MySQL. $n este caso estar&amos #aciendo una migracin de la base de datos de un sistema gestor a otro. Meremos los tres casos or se arado en adelante, aunque, antes de ello, vamos a mostrar unas #erramientas que nos servirn de muc#a a%uda ara la administracin de cualquier base de datos remota. +as #erramientas en concreto se relatan en el manual )aller de *%0<+, son las siguientes1 P%pMyAdmin. 5na a licacin creada en PHP que odemos instalar en nuestro es acio de alojamiento ara administrar la base de datos. Mys!l 0ontrol 0enter 8en adelante *%--9. 5na a licacin 7indows que ermite contectarse a m:lti les bases de datos *%0<+, que se encuentren en local o en remoto. Access. )ambi,n ermite administrar una base de datos *%0<+ conectada en local o en remoto. $n este caso se utili!a una inter(a! que muc#os %a conocen, como es /ccess, ara administrar una base de datos que nada tiene que ver con dic#o rograma.

$n los tres casos lo que nos ermite reali!ar el so(tware de administracin son tareas sobre la base de datos de todo ti o, como ueden ser crear tablas, modi(icarlas, insertar datos, borrarlos, editarlos. *odi(icar o borrar tablas o cam os de las mismas, etc. +a eleccin de una #erramieta o de otra asa or los recursos que nos ermitan utili!ar en nuestro roveedor. Gsicamente, lo que nos uede decantar a una o cin u otra, es si ermiten o no conectar de manera remota la base de datos *%0<+. -ono!co alojamientos donde se ermite esa conexin remota % donde no. 0i no ermiten conectarnos remotamente nos decantaremos or P# *%/dmin, ues es una a licacin PHP que se conecta en local % a la que se accede desde una gina web % eso lo ermiten todos los roveedores, incluso #a% muc#os que tienen instalado %a este so(tware ara administrar las bases de datos. $n caso de que s& nos ermitan conectarnos remotamente con la base de datos, eligiremos *%-- o /ccess, que son a licaciones 7indows muc#o ms otentes % r idas que las que utili!an inter(a! web, como P# *%/dmin. $s re(erible utili!ar *%-- orque est es ecialmente desarrollado ara conectar % o erar con bases de datos *%0<+.
Artculo por

Miguel Angel Alvarez

..*. 9ubir base de datos M39@L vacQa al servidor


*a base de datos que pretendemos subir est vac/a. .an slo $emos creado las tablas, pero no $emos introducido datos en ellas o, a lo sumo, tienen alg1n dato que $emos introducido de pruebas. $s mu% normal que #a%amos dise'ado una base de datos ara nuestro ro%ecto desde F, de(iniendo las distintas entidades de nuestro modelo de datos, junto con sus cam os % sus ti os. $n estos casos lo ms robable es que la base de datos est, vac&a, o bien contenga datos que #a%amos introducido a modo de rueba % que no queramos conservar cuando subamos la a licacin a "nternet. +a o cin ms interesante entonces odr&a ser crear otra ve! las tablas que tenemos en local en la base de datos remota. Para

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

68

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com ello tenemos dos osibilidades. a8 Si tenemos pocas tablas y bastante sencillas +as odemos crear en remoto con alguna #erramienta como P# *%/dmin o *%--. b8 Si tiene muc%as tablas y;o muy complicadas +a recomendacin ser&a #acer un bacKu de la estructura en local % restaurarla en remoto. $sto nos evitar tener que volver a crear todas las tablas % de(inir todos sus cam os % sus ti os. Puede ser un oco ms com licado ero sin duda nos a#orrar tiem o. Para #acer el bacKu de la estructura en local odemos utili!ar alguna #erramienta como P# *%/dmin, o bien utili!ar el comando m%sqldum desde l&nea de comandos de *0D?;0.

Herramienta de bacKu de P# *%/dmin. $st marcada la o cin de extraer solamente la estructura de las tablas. 0i marcamos adems la casilla =0end=, nuestro navegador se descargar el bacKu en un (ic#ero de texto. 0i no lo ulsamos sim lemente se visuali!ar.

+o que tenemos que #acer en este caso es un bacKu de la estructura de la base de datos, es decir, los =create tables= o sentencias 0<+ ara crear las tablas. 0er&a un montn de sentencias con esta (orma1
A -------------------------------------------------------A A Ta-le str"ct"re for ta-le 1co%entario1 A &43AT3 TAG 3 co%entario ( id$co%entario int(D) "nsi+ned 9NT 97 a"to$incre%ent= id$artic"lo int(#) (3PA7 T 1S1 9NT 97 = co%entario text 9NT 97 = fecha int(J#) "nsi+ned (3PA7 T 1S1 9NT 97 = re*isado tinyint(J) (3PA7 T 1S1 9NT 97 = no%-re$co%entario *archar(JSS) (3PA7 T 19o%-re no especificado1 9NT 97 = e%ail$co%entario *archar(JSS) (3PA7 T 13%ail sin especificar1 9NT 97 = tipo tinyint(J) "nsi+ned (3PA7 T 1J1 9NT 97 = .4)!A4< ]3< (id$co%entario) );

Para restaurar estas sentencias tenemos o ciones tanto dentro de P# *%/dmin como de *%--. $n ambos casos lo que tenemos que #acer es ejecutar estas sentencias en el servidor *%0<+ remoto. $n P# *%/dmin tenemos un cam o ara introducir sentencias 0<+ % tambi,n otro cam o ara seleccionar un arc#ivo de texto con todas las sentencias 0<+, ara ejecutarlas una detrs de otra. $n *%-- tenemos un botn que nos ermite abrir una consola donde introducir una o varias sentencias 0<+ % ejecutarlas. erramienta de bac:up y restauraci#n de P%pMyAdmin

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

69

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

4ot#n para introducir sentencias SQL en My00

>e etimos, esto slo nos servir ara subir la estructura de la base de datos % no los datos que contenga. 0i deseamos subir tambi,n la in(ormacin de la base de datos entonces debemos utili!ar otras estrategias, relatadas rximamente.
Artculo por

Miguel Angel Alvarez

../. 9ubir una base de datos M39@L con la estructura 3 los datos
Como transferir una base de datos M!,-* que tenemos en local a nuestro servidor remoto, inclu!endo tanto la estructura de las tablas como sus datos. 0i la base de datos que deseamos subir est llena de in(ormacin % deseamos que se conserve una ve! subida la base de datos a remoto, tenemos que reali!ar un bacKu de la base de datos % restaurarlo en remoto.
)ota: $stas recomendaciones estn ensadas ara subir una base de datos *%0<+ que odamos tener en local a una base de datos *%0<+ que #a%amos contratado en remoto. 0i la base origen no es *%0<+ estar&amos #ablando de una migracin de bases de datos, ero esto lo veremos en un art&culo ms adelante.

$n este caso el rocedimiento ser&a mu% arecido al de subir una base de datos vac&a, relatado anteriormente, con la salvedad de que a#ora debemos extraer no solo la estructura de la base de datos, sino tambi,n los registros que contiene. Para ello odemos utili!ar m%sqldum , seg:n se relata en este art&culo, o bien P# *%/dmin, seleccionando la o cin que indica que el bacKu contenga la estructura % los datos 80tructure and data en versiones en ingl,s9. +a estructura % los datos vendrn en un (ic#ero de texto con una serie de sentencias 0<+ ara crear las tablas % los insert necesarios ara introducir cada uno de los datos.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

70

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Para restaurar la base de datos lo #aremos tal como se #a relatado ara el caso de que la base de datos estuviera vac&a, con la a%uda de una instalacin de P# *%/dmin en remoto o un *%-- que se conecte a la base de datos contratada en el servidor de "nternet. 0i tenemos roblemas ara subir el (ic#ero de bacKu de la base de datos es osible que en nuestro roveedor de alojamiento nos ueda a%udar a subir el (ic#ero % restaurarlo. -omo el roveedor dis one de los servidores en sus ro ias instalaciones, tiene muc#as ms osibilidades que nosotros ara trabajar con las bases de datos, sin temor a que las lentas comunicaciones or "nternet arrojen errores en la restauracin de los datos. 0i nuestro roveedor no uede a%udarnos, seguramente dis onga % nos indique alg:n mecanismo ara reali!ar la tarea sin lugar a errores. Puede ocurrinos con alg:n roveedor que nos diga que se encarga de todo ero nos exija el ago de las #oras de trabajo del in(ormtico que va a restaurar el bacKu de la base de datos. 0i no one (acilidades ni siquiera en esto osiblemente sea mejor ir idi,ndoles que nos devuelvan el dinero invertido orque su servicio no ser&a mu% bueno.
Artculo por

Miguel Angel Alvarez

..?. Migrar una base de datos a M39@L


&ndicaciones 1tiles para migrar una base de datos a M!,-*, es decir, cuando tenemos que subir una base de datos local en cualquier gestor a una base de datos remota en M!,-*. $l :ltimo caso en el que nos odemos encontrar a la #ora de subir una base de datos a nuestro roveedor de alojamiento es que la base de datos la tengamos creada en local, ero en un sistema gestor distinto del que vamos a utili!ar en remoto. $n remoto su onemos siem re que vamos a utili!ar la base de datos *%0<+. $n local odr&amos dis oner de una base de datos /ccess, 0<+ 0erver o de otro sistema de base de datos. $l roceso de la migracin uede ser bastante com lejo %, como #a% tantas bases de datos distintas, di(&cil de dar una receta que (uncione en todos los casos. /dems, a arte de la di(icultad de trans(erir la in(ormacin entre los dos sistemas gestores de base de datos, tambi,n nos in(luir muc#o en la com lejidad del roblema el ti o de los datos de las tablas que estamos utili!ando. Por ejem lo, las (ec#as, los cam os num,ricos con decimales o los boleanos ueden dar roblemas al asar de un sistema a otro orque ueden almacenarse de maneras distintas o, en el caso de los n:meros, con una recisin distinta.

..?.1. Recomendaciones para migrar de Access a M39@L


0i nuestra base de datos anterior estaba construida en /ccess lo tenemos bastante (cil, gracias a que *%0<+ dis one de un driver ;?G- ara sistemas 7indows, que nos ermite conectar /ccess con el ro io *%0<+ % asar in(ormacin (cilmente. $ste tema est relatado en el art&culo $x ortar datos de *%0<+ a /ccess, aunque #a% que indicar que si deseamos #acer una ex ortacin desde /ccess en local a *%0<+ en remoto uede #aber roblemas orque no todos los alojadores ermiten las conexiones en remoto con la base de datos. 0i no tenemos dis onible una conexin en remoto con nuestro servidor de bases de datos vamos a tener que cambiar la estrategia un oco. +a idea en este :ltimo caso es instalar *%0<+ en local % reali!ar la migracin desde /ccess en local a *%0<+ en local % luego odr&amos #acer un bacKu de la base de datos local % subirla a remoto, tal % como se #a relatado antes.

..?.$. Recomendaciones para migrar desde 9@L 9erver a M39@L


+a verdad es que no #e tenido este caso nunca, ero #a% que decir que /ccess tambi,n nos uede a%udar en este caso. /ccess ermite seleccionar una base de datos 0<+ 0erver % trabajar desde la ro ia inter(a! de /ccess. +a idea es que /ccess tambi,n ermite trabajar con *%0<+ % osiblemente #aciendo un uente entre estos dos sistemas gestores odemos ex ortar datos de 0<+ 0erver a *%0<+. +o que es seguro que utili!ando el ro io /ccess de uente odr&amos reali!ar el trabajo. Primero ex ortando de 0<+ 0erver a /cess % luego desde /ccess a *%0<+.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

71

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

..?.'. Btras bases de datos u otras tcnicas


0i la base de datos origen dis one de un driver ;?G- no #abr 8en teor&a9 roblema ara conectarla con /ccess, de manera similar a como se conecta con *%0<+. $ntonces odr&amos utili!ar /ccess ara ex ortar los datos, orque desde all& se odr&an acceder a los dos sistemas gestores de bases de datos. 0i no tenemos /ccess, o la base de datos original no tiene driver ;?G-, o bien no nos (unciona correctamente el roceso % no sabemos cmo arreglarlo, otra osibilidad es ex ortar los datos a (ic#eros de texto, se arados or comas o algo arecido. *uc#as bases de datos tienen #erramientas ara ex ortar los datos de las tablas a (ic#eros de texto, los cuales se ueden luego introducir en nuestro sistema gestor destino 8*%0<+9 con la a%uda de alguna #erramienta como P# *%/dmin. Para ello, en la gina de ro iedades de la tabla encontraremos una o cin ara #acer el bacKu de la tabla % ara introducir (ic#eros de texto dentro de una tabla 8"nsert text(iles into table en ingl,s9.

/ccediendo a ese enlace odremos ver un (ormulario donde introducir las caracter&sticas del (ic#ero de texto, como el carcter utili!ado como se arador de cam os, o el terminador de l&neas, etc, junto con el ro io arc#ivo con los datos, % P# *%/dmin se encargar de todo el trabajo de incluir esos datos en la tabla.

-omo se #abr su uesto, es necesario tener creada la tabla en remoto ara que odamos introducirle los datos del (ic#ero de texto.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

72

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

..?.*. Cambios de un 8ormato de datos a otro


)oda la migracin tiene que tener en cuenta mu% es ecialmente, como %a se se'al, las maneras que tenga cada base de datos de guardar la in(ormacin, es decir, del (ormato de sus ti os de datos. )enemos que contar siem re con la osible necesidad de trans(ormar algunos datos como ueden ser los cam os boleanos, (ec#as, cam os memo 8texto con longitud indeterminada9, etc, que ueden almacenarse de maneras distintas en cada uno de los sistemas gestores, origen % destino. $n algunos casos osiblemente tengamos que reali!ar alg:n scri t que realice los cambios necesarios en los datos. Por ejem lo uede ser ara locali!ar los valores boleanos guardados como true A (alse a valores enteros F A 1, que es como se guarda en *%0<+. )ambi,n las (ec#as ueden su(rir cambios de (ormato, mientras que en /ccess a arecen en castellano 8ddAmmAaaaa9 en *%0<+ a arecen en el (ormato aaaaDmmDdd. PHP uede a%udarnos en la tarea de #acer este scri t, tambi,n Misual Gasic 0cri t ara /ccess uede #acer estas tareas com lejas % el ro io lenguaje 0<+, a base de sentencias dirigidas contra la base de datos, uede servir ara algunas acciones sencillas.
Artculo por

Miguel Angel Alvarez

Parte 1-:

.ntro!uccin a la programacin orienta!a a o(jetos en PHP 4


(aptulos sobre la programaci'n orientada a ob)etos .ue se puede realizar en ,-, 4. Es una primera apro+imaci'n a la orientaci'n a ob)etos3 tal como se realizaba en esa *ersi'n de ,-,.

17.1. "rogramacin orientada a obCetos en "#"


PHP ofrece funcionalidades propias de la P::. En este cap/tulo veremos los aspectos ms bsicos de esta metodolog/a. +a rogramacin orientada a objetos es una metodolog&a de rogramacin avan!ada % bastante extendida, en la que los sistemas se modelan creando clases, que son un conjunto de datos % (uncionalidades. +as clases son de(iniciones, a artir de las que se crean objetos. +os objetos son ejem lares de una clase determinada % como tal, dis onen de los datos % (uncionalidades de(inidos en la clase. +a rogramacin orientada a objetos ermite concebir los rogramas de una manera bastante intuitiva % cercana a la realidad. +a tendencia es que un ma%or n:mero de lenguajes de rogramacin ado ten la rogramacin orientada a objetos como aradigma ara modeli!ar los sistemas. Prueba de ello es la nueva versin de PHP 839, que im lanta la rogramacin de objetos como metodolog&a de desarrollo. )ambi,n *icroso(t #a dado un vuelco #acia la rogramacin orientada a

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

73

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com objetos, %a que .N$) dis one de varios lenguajes ara rogramar % todos orientados a objetos. /s& ues, la rogramacin orientada a objetos es un tema de gran inter,s, ues es mu% utili!ada % cada ve! resulta ms esencial ara oder desarrollar en casi cualquier lenguaje moderno. $n este art&culo vamos ver algunas nociones sobre la rogramacin orientada a objetos en PHP. /unque es un tema bastante am lio, novedoso ara muc#os % en un rinci io, di(&cil de asimilar, vamos a tratar de ex licar la sintaxis bsica de PHP ara utili!ar objetos, sin meternos en muc#a teor&a de rogramacin orientada a objetos en general. >e(erencia1 0e uede acceder a una descri cin de la rogramacin orientada a objetos, ublicada en ?esarrollo7eb.com. #tt 1AAwww.desarrolloweb.comAarticulosA499. #

17.1.1. Las clases= class


5na clase es un conjunto de variables, llamados atributos, % (unciones, llamadas m,todos, que trabajan sobre esas variables. +as clases son, al (in % al cabo, una de(inicin1 una es eci(icacin de ro iedades % (uncionalidades de elementos que van a artici ar en nuestros rogramas. Por ejem lo, la clase =-aja= tendr&a como atributos caracter&sticas como las dimensiones, color, contenido % cosas semejantes. +as (unciones o m,todos que odr&amos incor orar a la clase =caja= son las (uncionalidades que deseamos que realice la caja, como introduce89, muestraNcontenido89, com ruebaNsiNcabe89, vaciate89... +as clases en PHP se de(inen de la siguiente manera1
<? class &a@aK *ar 2alto; *ar 2ancho; *ar 2lar+o; *ar 2contenido; *ar 2color; f"nction introd"ce(2cosa)K 2this->contenido ? 2cosa; O f"nction %"estra$contenido()K echo 2this->contenido; O O ?>

$n este ejem lo se #a creado la clase -aja, indicando como atributos el anc#o, alto % largo de la caja, as& como el color % el contenido. 0e #an creado, ara em e!ar, un ar de m,todos, uno ara introducir un elemento en la caja % otro ara mostrar el contenido. 0i nos (ijamos, los atributos se de(inen declarando unas variables al rinci io de la clase. +os m,todos se de(inen declarando (unciones dentro de la clase. +a variable Xt#is, utili!ada dentro de los m,todos la ex licaremos un oco ms abajo.

17.1.$. :tilizar la clase


+as clases solamente son de(iniciones. 0i queremos utili!ar la clase tenemos que crear un ejem lar de dic#a clase, lo que corrientemente se le llama instanciar un objeto de una clase.
2%ica@a ? ne0 &a@a;

-on esto #emos creado, o mejor dic#o, instanciado, un objeto de la clase -aja llamado Xmicaja.
2%ica@a->introd"ce("al+o"); 2%ica@a->%"estra$contenido();

-on estas dos sentencias estamos introduciendo =algo= en la caja % luego estamos mostrando ese contendido en el texto de la gina. Nos (ijamos que los m,todos de un objeto se llaman utili!ando el cdigo =DU=.
no%-re$del$o-@eto->no%-re$de$%etodo()

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

74

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Para acceder a los atributos de una clase tambi,n se accede con el cdigo =DU=. ?e esta (orma1
no%-re$del$o-@eto->no%-re$del$atri-"to

17.1.'. La variable Dt&is


?entro de un m,todo, la variable Xt#is #ace re(erencia al objeto sobre el que invocamos el m,todo. $n la invocacin XmicajaDUintroduce8=algo=9 se est llamando al m,todo introduce sobre el objeto Xmicaja. -uando se est ejecutando ese m,todo, se vuelca el valor que recibe or armetro en el atributo contenido. $n ese caso Xt#isDUcontenido #ace re(erencia al atributo contenido del objeto Xmicaja, que es sobre el que se invocaba el m,todo.
Artculo por

Miguel Angel Alvarez

17.$. Constructores en "#"


3emos lo que es un constructor ! cmo definirlos en programacin orientada a objetos en PHP . +os constructores son (unciones, o m,todos, que se encargan de reali!ar las tareas de iniciali!acin de los objetos al ser instanciados. $s decir, cuando se crean los objetos a artir de las clases, se llama a un constructor que se encarga de iniciali!ar los atributos del objeto % reali!ar cualquier otra tarea de iniciali!acin que sea necesaria. No es obligatorio dis oner de un constructor, ero resultan mu% :tiles % su uso es mu% #abitual. $n el ejem lo de la caja, que comentbamos en el anterior art&culo de rogramacin orientada a objetos en PHP, lo normal ser&a iniciali!ar las variables como color o las relacionadas con las dimensiones %, adems, indicar que el contenido de la caja est vac&o. 0i no #a% un constructor no se iniciali!an ninguno de los atributos de los objetos. $l constructor se de(ine dentro de la ro ia clase, como si (uera otro m,todo. $l :nico detalle es que el constructor debe tener el mismo nombre que la clase. /tentos a PHP, que di(erencia entre ma%:sculas % min:sculas. Para la clase -aja de(inida anteriormente, se odr&a declarar este constructor1
f"nction &a@a(2alto?J=2ancho?J=2lar+o?J=2color?"ne+ro")K 2this->alto?2alto; 2this->ancho?2ancho; 2this->lar+o?2lar+o; 2this->color?2color; 2this->contenido?""; O

$n este constructor recibimos or armetro todos los atributos que #a% que de(inir en una caja. $s mu% :til de(inir unos valores or de(ecto en los armetros que recibe el constructor, igualando el armetro a un valor dentro de la declaracin de armetros de la (uncin constructora, ues as&, aunque se llame al constructor sin ro orcionar armetros, se iniciali!ar con los valores or de(ecto que se #a%an de(inido. $s im ortante se'alar que en los constructores no se tienen or qu, recibir todos los valores ara iniciali!ar el objeto. Ha% algunos valores que ueden iniciali!arse a vac&o o a cualquier otro valor (ijo, como en este caso el contenido de la caja, que inicialmente #emos su uesto que estar vac&a.
Artculo por

Miguel Angel Alvarez

17.'. #erencia en "#"


Hablaremos de esta peculiar caracter/stica para $acer copias independientes ! personali+adas de clases !a construidas, propia de la programacin orientada a objetos.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

75

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com +a rogramacin orientada a objetos tiene un mecanismo llamado #erencia or el que se ueden de(inir clases a artir de otras clases. +as clases reali!adas a artir de otra clase o mejor dic#o, que extienden a otra clase, se llaman clases extendidas o clases derivadas. +as clases extendidas #eredan todos los atributos % m,todos de la clase base. /dems, ueden tener tantos atributos % m,todos nuevos como se desee. Para am liar el ejem lo que venimos desarrollando, la clase -aja, vamos a crear una clase extendida llamada -ajaNtematica. $sta clase #ereda de caja, ero adems tiene un =tema=, que es la descri cin del ti o de cosas que metemos en la caja. -on esto odemos tener varias cajas, cada una con cosas de un tema concreto.
class &a@a$te%atica extends &a@aK *ar 2te%a; f"nction define$te%a(2n"e*o$te%a)K 2this->te%a ? 2n"e*o$te%a; O

$n esta clase #eredamos de -aja, con lo que tenemos a nuestra dis osicin todos los atributos % m,todos de la clase base. /dems, se #a de(inido un nuevo atributo, llamado Xtema, % un m,todo, llamado de(ineNtema89, que recibe el tema con el que se desea etiquetar la caja. Podr&amos utili!ar la clase -ajaNtematica de manera similar a como lo #ac&amos con la clase -aja original.
2%ica@a$te%atica ? ne0 &a@a$te%atica(); 2%ica@a$te%atica->define$te%a("&a-les y contectores"); 2%ica@a$te%atica->introd"ce("&a-le de red"); 2%ica@a$te%atica->introd"ce("&onector 4R#D"); 2%ica@a$te%atica->%"estra$contenido();

$n este caso, el resultado que se obtiene es arecido al que se obtiene ara la clase base. 0in embargo, cuando se muestra el contenido de una caja, lo ms interesante ser&a que se indicara tambi,n el ti o de objetos que contiene la caja temtica. Para ello, tenemos que rede(inir el m,todo muestraNcontenido89.

17.'.1. Rede8inir mtodos en clases e;tendidas


>ede(inir m,todos signi(ica volver a codi(icarlos, es decir, volver a escribir su cdigo ara la clase extendida. $n este caso, tenemos que rede(inir el m,todo muestraNcontenido89 ara que muestre tambi,n el tema de la caja. Para rede(inir un m,todo, lo :nico que debemos #acer es volverlo a escribir dentro de la clase extendida.
f"nction %"estra$contenido()K echo "&ontenido de la ca@a de <->" . 2this->te%a . "</->: " . 2this->contenido; O

$n este ejem lo #emos codi(icado de nuevo el m,todo entero ara mostrar los datos com letos. $n algunas ocasiones es mu% :til a o%arse en la de(inicin de un m,todo de la clase base ara reali!ar las acciones de la clase extendida. Por ejem lo, ara este ejem lo, tenemos que de(inir un constructor ara la clase -ajaNtematica, en el que tambi,n se inicialice el tema de la caja. -omo %a existe un m,todo constructor en la clase base, no merece la ena reescribir el cdigo de ,ste, lo mejor es llamar al constructor que #ab&a de(inido en la clase -aja original, con lo que se iniciali!arn todos los datos de la clase base, % luego reali!ar la iniciali!acin ara los atributos de la ro ia clase extendida. Para llamar a un m,todo de la clase adre dentro del cdigo de un m,todo que estamos rede(iniendo, utili!amos una sintaxis como esta1
f"nction &a@a$te%atica(2alto?J=2ancho?J=2lar+o?J=2color?"ne+ro"=2te%a?"Sin clasificaciLn")K parent::&a@a(2alto=2ancho=2lar+o=2color); 2this->te%a?2te%a; O

/qu& vemos la rede(inicin del constructor, de la clase -aja, ara la clase -ajaNtematica. $l constructor #ace rimero una llamada al constructor de la clase base, a trav,s de una re(erencia a = arent=. +uego iniciali!a el valor del atributo Xtema, que es es ec&(ico de la -ajaNtematica.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

76

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com $n la misma l&nea de trabajo, odemos rede(inir el m,todo muestraNcontenido89 a o%ndonos en el que (ue declarado en la clase base. $l cdigo quedar&a como sigue1
f"nction %"estra$contenido()K echo "&ontenido de la ca@a de <->" . 2this->te%a . "</->: "; parent::%"estra$contenido(); O
Artculo por

Miguel Angel Alvarez

Parte 11:

%p/logos al Manual !e PHP


Di*ersos artculos .ue "inalizan este manual de ,-, % o"recen introducciones a di*ersos asuntos .ue son interesantes para conocer sobre este lengua)e de programaci'n. 5ntroducciones a algunas herramientas especialmente Dtiles3 .ue pueden a%udarnos a desarrollar p/ginas web.

11.1. 2legir entre "#"* 3 "#"/. Conviene la migracinR


' ms de dos a4os de la llegada de la versin A de PHP , a1n la comunidad de desarrolladores de PHP se plantea el interrogante. +as dudas bsicamente circulan siem re el mismo camino, % ambas elecciones tienen sus ventajas % desventajas. "ntentaremos en este in(orme orientar a los desarrolladores a decidirse or una u otra alternativa. $s im ortante remarcar antes de ubicarse de lleno en el anlisis de las ventajas % desventajas de una u otra o cin, las rinci ales di(erencias existentes entre ambas versiones, cuales son los cambios que re ercuten ms (uertemente en la com atibilidad de los scri ts, % que es lo que nos de ara el (uturo en toda esta #istoria.

11.1.1. Cambios pro8undos


+a llegada de PHP3 vino em arejada de una reestructuracin del -ore de PHP, lo que los creadores de PHP llama Cend $ngine. /s& como el lejano PHP2 inclu%e su Cend $ngine F.3, % PHP4 el Cend $ngine 1.F, tenemos Cend $ngine L.F en PHP3. $l cambio de versin no (ue trivialV inclu%e la reescritura casi total del modelo de objetos, entre sus cambios ms sustanciales. $sto re ercute directamente en los scri ts de PHP4 que utili!an clases, tanto en la com atibilidad como en er(ormance de ejecucin. Posteriormente en este art&culo nos re(eriremos nuevamente a este tema. Meamos un ejem lo que nos muestra un cambio sustancial en la im lementacin del modelo de objetos1
<?

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

77

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


class .ersona K f"nction set9o%-re(2no%-re) K 2this->no%-re ? 2no%-re; O f"nction +et9o%-re() K ret"rn 2this->no%-re; O O f"nction Al+o(2p) K 2persona->set9o%-re("(aniel"); O J ' E # ?> 2persona ? ne0 .ersona(); 2persona->set9o%-re(".ichon+ol"); Al+o(2persona); echo 2persona->+et9o%-re();

11.1.$. SCu+l es el problema en este cdigo corriendo en "#"*R


$n la l&nea 1 instanciamos un objeto de la clase Persona. +uego le decimos que se llama ?aniel. $l error de im lementacin viene con la l&nea 2. $l argumento X que recibe /lgo, no es mas que una co ia de X ersona, % eso esta */+. HPorqueJ, m&nimamente or L ra!ones. +a rimera ra!n es que esta estrategia es P;;DNo com atible. -laramente cuando #ablamos del Paradigma ;rientado a ;bjetos, estamos casi descartando que cada objeto sea re(erenciado or su "denti(icador. 0in embargo, el Cend $ngine 1.F no est re arado ara dic#a accin1
<? f"nction e@e%plo(2*al)K echo 2*al; O 2cadena ? "texto"; e@e%plo(2cadena); ?>

+a variable Xcadena asada como argumento a la (uncin ejem lo, es co iada ara su uso local dentro de dic#a (uncin. $s lo que se conoce como aso de armetros or valor. $l Cend $ngine 1.F #ace exactamente esto ara todas las (unciones, inclusive ara las que estn dentro de una clase, las cuales en ese caso act:an como m,todos1
<? f"nction Al+o(2persona) K 2persona->set9o%-re("(aniel"); O ?>=

Molviendo al ejem lo inicial de la clase ersona, el m,todo /lgo recibe una co ia 8un clon9 del objeto Persona. +a segunda ra!n viene em arejada con la rimera, siendo consecuencia de esta. -ualquier modi(icacin del objeto Persona que se rodu!ca dentro del m,todo /lgo, solo tendr alcance local, % no se ver re(lejado cuando la (uncin retorne.
<? Al+o(2persona); echo 2persona->+et9o%-re(); ?>

$n ese caso la modi(icacin del nombre que #ace la (uncin /lgo al objeto Persona no se ve re(lejada cuando #acemos ec#o X ersonaDUgetNombre89. $n nuestro browser veremos =Pic#ongol=. $ste es solo un ejem lo del orque de la reestructuracin tan im ortante en el -ore de PHP. $s claro que toda

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

78

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com reestructuracin barre con cuestiones de com atibilidad, ara ganar en otros sKillsV en este caso claramente estamos ganando en er(ormance, al liberarnos del over#ead que im lica la constante co ia de objetos que son argumentos de m,todos % (unciones. $n art&culos osteriores trataremos en ma%or detalle % ro(undidad los distintos as ectos que (ueron modi(icados, #aciendo una com arativa entre como se logran en PHP4 % como se logran en PHP3. /dems de ex licar ro(undamente las di(erencias en el modelo de objetos nos quedan temas endientes como ; ciones de con(iguracin 8 # .ini9, -onexin a *%0<+ 8m%sqli9, cambios en los mdulos, etc. Hec#a esta introduccin, estamos en condiciones de de(inir las distintas situaciones en las que se uede encontrar el desarrollador, % que as ectos juegan a su (avor o en contra seg:n la situacin en la que se encuentre.

11.1.'. SCual es mi escenarioR


$n el momento de lantearse la regunta, el desarrollador seguramente se ubicar en alguno de los dos escenarios osibles1 = Newbie 8"niciacin en PHP9. = $x erimentado.

11.1.*. 5e-bie
$n el lanteo de esta discusin, odr&amos decir que es la situacin ideal, o or lo menos la ms bene(iciosa. 0i eres una ersona que quiere arrancar en PHP, no lo dudes, PHP3 es ara ti. )us a licaciones go!aran de las nuevas ca acidades en ;;P, obtendrs el bene(icio de una mejor er(ormance de ejecucin 8esta com robado ex erimentalmente que PHP3 corre un L3T ms r ido que PHP49 % tu cdigo estar mu% bien acondicionado en cuanto a la com atibilidad con el nuevo #ijo que asoma1 PHP4. Por cierto, no todo es color de rosas. 5na de los ma%ores bene(icios a la #ora de elegir PHP ara trabajar en nuestro ro%ecto es la gran cantidad de cdigo que odemos encontrar en "nternet, % utili!arlo ara nuestros trabajos. )enemos una gran robabilidad de que ante alguna tarea que se nos lantea, odamos encontrar alg:n scri t que nos solucione la vida, obviamente ada tndolo a nuestras necesidades. /#ora bien, no todo el cdigo que vamos a encontrar es com atible con PHP3. ?e #ec#o la gran ma%or&a todav&a no se #a ada tado. $s cierto que con alg:n setting en nuestro # .ini odemos a%udar a darle ma%or com atibilidad, ero como contra artida muc#as de estas settings se eliminaran en PHP4. H<u, quedaJ Hacerlo com atible modi(icando el cdigo, una tarea que ara un desarrollador que se inicia no siem re es sencillo. ?e todas (ormas a no alarmarse, que los grandes ro%ectos 8PHPNuKe, PHPGG, etc.9 o(recen com atibilidad.

11.1./. 2;perimentado
$n este caso, el o tar or quedarse con PHP4 o asar a PHP3 de ende de nuestra a licacin. +as interrogantes que el desarrollador se uede lantear odr&an ser1 D H*i a licacin usa clases % objetosJ D H*i motor de Gase de datos es *%0<+J D H5tili!o un #osting externoJ D H*i a licacin su(re modi(icaciones en cuanto a los requerimientos % lgica de negociosJ Pasemos a discutir ventajas % desventajas en cada uno de los interrogantes1

11.1.?. SMi aplicacin usa clases 3 obCetosR


-omo udimos com render al comien!o de este articulo, uno de los rinci ales es(uer!os de los dise'adores del Cend $ngine radic en el mejoramiento del modelo de objetos, basndose claramente en un re(erente indiscutible en esta materia como lo es 0un. 0alvando las di(erencias, se #an tomado muc#as cosas de _ava, desde convenciones de nomenclaturas #asta estrategias de im lementacin. 0eria un des erdicio no utili!ar dic#o es(uer!o, sobre todo si nuestra a licacin #ace un uso ex#austivo de clases % objetos.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

79

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

11.1.O. SMi motor de %ase de datos es M39@LR


/ di(erencia de la estrategia de PHP4 ara la conectividad PHPA*%0<+, en la que el -ore de PHP nos rovee de un set de (unciones ara dic#a interaccin, en PHP3 *%0<+ nos rovee de un /P" externo. Gsicamente, la ra!n de este cambio (ue una modi(icacin de licencia de *%0<+, que obligo a PHP a #acer de *%0<+ una base de datos ms, % no =+/= base de datos, como venia siendo en PHP2 % PHP4. ?e todas (ormas, esto no re ercute en nuestro cdigo, sino en la er(ormance de nuestra a licacin. $l #ec#o de que una extensin no (orme arte del -ore de PHP % ase a ser externa nos genera un over#ead, una sobrecarga de ejecucin en detrimento de la er(ormance. -omo contra artida, PHP3 nos da la osibilidad de sacarle el ma%or jugo osible a las muc#as mejoras incor oradas en *%0<+ 4.1.2 o su erior, a trav,s del /P" m%sqli. $sto im lica #acer uso de otras (unciones, modi(icando nuestro cdigo. /#ora bien, Hque tan costosa es esta reescrituraJ ?e ender de nuestra estrategia de conexin a base de datos. H5tili!amos una ca a de abstraccin del estilo /?;db J 0i la utili!amos estaremos muc#o mejor arados (rente a tal reescritura. $n caso contrario el tiem o invertido ser sensiblemente ma%or.

11.1.1. S:tilizo un &osting e;ternoR


$n caso de no dis oner de un #osting ro io, % tener que de ender de un #osting externo que nos rovea de PHP, seguramente el #ec#o de ensar en migrar a PHP3 uede ser un roblema. ?e #ec#o, estad&sticas de rinci io de LFF4 nos indican que solo alrededor del 3T de los #osting que ro orcionan PHP, tienen PHP3. $sto no #ace mas que re(lejar la lentitud con la que se esta moviendo el roceso de tras aso de PHP4 #acia PHP3. 5na regunta que surge directamente sobre este tema es HPor qu,J Gueno, si uno tomo una distribucin de +inux, es oco robable que la versin de PHP3 sea la incluida. +a con(ormidad de los rogramadores con PHP4 es grande, % muc#a de la documentacin existente esta escrita ara PHP4. ?e todas (ormas, a no dormirse con PHP4. 5n tema que se trata en la segunda arte de este art&culo es lo nuevo que nos trae PHP4. Meremos que PHP3 en muc#os as ectos es una transicin mientras que la con(irmacin se llama PHP4.

11.1... SMi aplicacin su8re modi8icaciones en cuanto a los re<uerimientos 3 lgica de negociosR
-uando las a licaciones tienen requerimientos de cliente bastante cambiantes, % se em lean recursos ara su mantenimiento, o utili!amos una metodolog&a de desarrollo incremental 8so(tware versionado9, lo ideal es utili!ar lo :ltimo que nos ro orciona nuestra lata(orma de rogramacin. .eneralmente lo que se busca es un cambio gradual, modular, % sostenido. Por otro lado, si nuestras a licaciones residen en roduccin sin ma%ores modi(icaciones 8alg:n roceso batc#, alguna a licacin de urada, alg:n algoritmo estable9 % estamos con(ormes con su (uncionamiento, qui!s no sea de nuestro inter,s migrar #acia una nueva versin. Nos queda anali!ar que #a% de nuevo en PHP4 % que cosas deber&amos ir teniendo en cuenta si utili!amos PHP4 o PHP3.
Artculo por

Daniel Lpez

11.$. "roblema del error *7* BT en "#"


.enemos que asegurarnos que el error %B%, de pgina no encontrada, sea correctamente enviado al navegador para que no le llegue un H..P6C.x %B% :?. Ha% veces que con PHP queremos enviar un error 4F4 de gina no encontrada, ara avisar al navegador que una gina no existe. $s sencillo enviar or las cabeceras del #tt un error 4F4, ero #a% que asegurarse que el cdigo de error est, bien enviado ara no dar in(ormaciones ambiguas a los clientes que se conecten al servidor. $sto es im ortante orque el cdigo 4F4 tambi,n sirve a los buscadores o motores de b:squeda, ara in(ormar que una

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

80

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com gina no existe. 0i damos in(ormaciones ambiguas a los buscadores uede que redunde negativamente en la clasi(icacin de nuestro sitio. $l roblema que queremos comentar a#ora es el t& ico error =4F4 ;^=. $sto es una ambigcedad1 4F4 es gina no encontrada % ;^ quiere decir que todo #a ido bien. Pero si no encontr la gina H-mo es que decimos que ;^J $so es algo que se uede evitar enviando el error correctamente en la cabecera del H))P. Para enviar un cdigo de error 4F4 or las cabeceras del H))P con PHP tenemos que #acer lo siguiente1
<? header("/TT./J.S #S# 9ot Po"nd"); ?>

-on la (uncin #eader89 de PHP enviamos in(ormacin en la cabeceras del #tt . $n este caso #emos enviado una cabecera 4F4 Not @ound. /tencin, orque la (uncin #eader89 debe invocarse antes de #aber escrito nada en la gina, osea, antes de #aber enviado ninguna in(ormacin al navegador. Pero de endiendo de la con(iguracin de nuestro servidor esto uede (uncionar o no. +a mejor manera de saber qu, estamos enviando or las cabeceras del #tt es utili!ar un rograma que nos muestre las cabeceras que se generan tanto en el cliente como en el servidor. $xisten varios rogramas que nos odr&an servir, ero nosotros vamos a recomendar aqu& una extensin de @ire(ox que #emos comentado %a en otro art&culo1 Mer cabeceras H))P con +iveHtt Headers. Meremos que en algunas ocasiones enviando esta cabecera el navegador recibe un cdigo de error como este1 H))PA1.x 4F4 ;^ $so es algo que tenemos que evitar, orque es ambiguo. +a cabecera deseable ser&a1 H))PA1.x 4F4 Not @ound Pues bien, cuando la cabecera que generamos es H))PA1.x 4F4 ;^ tenemos que #acer lo siguiente ara conseguir el deseado H))PA1.x 4F4 Not @ound.
<? header("/TT./J.S #S# 9ot Po"nd"); header("Stat"s: #S# 9ot Po"nd"); ?>

Primero le indicamos la cabecera del #tt como 4F4 % luego lan!amos otra cabecera indicando que el estatus que tiene que enviar es =Not @ound=. $sto deber&a (uncionar en todos los casos. $s osible que con una sola de las dos cabeceras enviadas nos env&e %a el error 4F4 Not @ound, de ende de la con(iguracin de nuestro servidor que necesitemos una u otra. Pero si indicamos las dos en las ruebas que #e #ec#o con varios servidores siem re #e recibido el cdigo de error correcto. "nsisto en que lo bueno es que veamos qu, cabeceras del H))P estamos enviando con un roducto como +iveHtt Headers . /s& odremos estar seguros de qu, cabeceras tenemos que enviar % qu, cdigo PHP es el correcto en nuestro caso. Porque en algunos servidores PHP si enviamos slo esta cabecera1
<? header("Stat"s: #S# 9ot Po"nd"); ?>

Nos env&a al navegador el cdigo1 H))PA1.x LFF ;^

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

81

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Por ejem lo, en este caso es todav&a eor, orque nosotros #ab&amos querido enviar un error 4F4 % en realidad lo que #a llegado al navegador es un LFF ;^ que quiere decir gina encontrada % correcta. $n de(initiva, cabe estudiar detalladamente este asunto ara asegurarnos que estamos enviando la cabecera correcta % el error 4F4 es claro.
Artculo por

Miguel Angel Alvarez

11.'. )ormulario programado con @uicN)orm


Con las clases de -uic80orm podrs crear, validar ! procesar formularios PHP . )odos estaremos de acuerdo en que el oder de # reside en su sim licidad % velocidad. 5na de las a licaciones ms comunes que utili!amos en este lenguaje son los (ormularios PHP, or su arte PHP no o(rece ninguna (uncin ara el desarrollo de los (ormularios. +a biblioteca P$/> ,un (rameworK % sistema de distribucin de utilidades P# , contiene el aquete H)*+N<5"-^@;>* que ro orciona todas las clases % m,todos necesarios ara manejar (ormularios H)*+.

11.'.1. "a<uete de @uicN)orm


$l aquete de H)*+N<5"-^@;>* ro orciona un sistema de clases que crean, validan, rocesan (ormularios H)*+. $n ve! de im rimir los elementos del (ormulario uno a uno, odemos utili!ar sus m,todos ara de(inir una estructura ara el (ormulario. <uicK@orm guarda automticamente los valores (ijados ara nuestros elementos a trav,s del envio del (ormulario, muestra mensajes de error, ermite la validacin % la (iltracin que se uede a licar a los cam os individuales %Ao al (ormulario com leto % genera el cdigo _avascri t ara la validacin en el lado cliente. /dems, sim li(ica los u loads de arc#ivos. +a :nica ra!n or la que alguien uede sentirse reticente al uso de <uicK@orm es la carencia de documentacin a ro iada. 0in embargo, esto no debe reocu aros ues este art&culo va destinado a ello. $ntre otras cosas, nos concentraremos en1 *ostrar un (ormulario Proceso de entrada Malidacin de cam os 0ubidas de arc#ivos $+ uso 0*/>)I ara o timi!ar el (ormulario

+a meta de estos art&culos es demostrar cmo odemos #acer uso de <uicK@orm % 0*/>)I ara desarrollar una eque'a a licacin 7eb.

11.'.$. Re<uisitos
Ha% que destacar que H)*+N<5"-^@;>* no es standard en la instalacin de la librer&a P$/> or lo que #abr que descargrselo % colocarlo en el direcorio en el que tenemos P$/>. $s im ortante saber que es necesario el aquete ;bservar or (avor que el aquete H)*+N-;**;N. 0i la l&nea siguiente no devuelve un error entonces tienes instalado <uicK@orm en tu sistema.
reT"ire(?/T! /^"ic,Por%.php?);

11.'.'. Con8igurar @uicN)orm


$l rimer aso ara utili!ar el aquete ser&a incluirlo en nuestro cdigo, deber&amos #acerlo de la siguiente manera1

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

82

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


reT"ire$once(?/T! /^"ic,Por%.php?);

$l siguiente aso ser crear nuestro objeto ara el (ormulario1


2for% ? ne0 /T! $^"ic,Por%(?%yfor%?);

11.'.*. 2lementos del 8ormulario


Podemos a'adir nuevos elementos llamando a la (uncin add$lement89. Podrs de(inir el orden en el que los elementos se muestran en el (ormulario. +a (uncin recibe un numero de argumentos, el rimero de(ine el ti o de elemento. Para un (ormulario estandar los ti os son1 text, button, c#ecKbox, #idden, submit, reset, radio, (ile, image, assword, select and textarea. /demas H)*+N<5"-^@;>* so orta otros ti os de elementos adicionales como son1 date, static, #eader, #tml, linK, advc#ecKbox and #iddenselect. $l segundo argumento es el nombre que ser usado ara el elemento. $l tercer argumento re resenta la etiqueta de el elemento8el texto que se mostrara en nuestro navegador ms tarde9. /lgunos de los elementos ueden ace tar argumentos adicionales. Por ejem lo, un elemento =select= uede recibir como argumento un arra% de valores que son items de la lista.

11.'./. Aalidacin 3 reglas de 8iltrado


H)*+N<5"-^@;>* tiene una gran variedad de atributos ara su validacin, este aquete #ace sencillo el uso de estas reglas no solo en el servidor
Artculo por

Manu Gutierrez

11.*. LibrerQas J9B5 para "#"


&nformacin sobre las distintas librer/as ! opciones para utili+ar la notacin de objetos Davascript D,:@ en programas reali+ados con el lenguaje PHP . _0;N es una notacin _avascri t ara escribir objetos que se #a #ec#o bastante o ular en el mundo del desarrollo de webs % que se utili!a en diversos lenguajes de rogramacin, com onentes 8#abitualmente /jax9, etc. 0u ,xito se debe a que es una excelente (orma ara almacenar in(ormacin que deseamos com artir entre distintos com onentes o lenguajes de las a licaciones web. 0i trabajamos con /jax % alguno de los (rameworKs _avascri t existentes, %a #abremos notado esta osibilidad % osiblemente %a estemos utili!ando _0;N o una notacin similar. _0;N, cu%as siglas signi(ican _ava0cri t ;bject Notation 8en es a'ol Notacin de ;bjetos de _ava0cri t9, es un (ormato ligero, (cil de escribir o codi(icar, as& como tambi,n es (cil de leer or los seres #umanos. ?esde _avascri t odemos rocesar directamente cualquier objeto _0;N % existen librer&as ara la ma%or&a de los lenguajes de rogramacin que tienen (unciones ara inter retar este (ormato. Por ello se #a ado tado universalmente. Para ms in(ormacin odemos visitar el sitio web de _0;N en #tt 1AAwww.json.orgA. $sto quiere decir que con _0;N odemos comunicar datos (cilmente entre scri ts _avascri t % scri ts PHP. Por ejem lo, ensemos en una validacin de (ormulario que se desea #acer con /jax. +os datos del (ormulario se ueden enviar a PHP or medio de P;0) % luego odr&amos desde PHP enviar a _avascri t el resultado de validar esos datos en el servidor. -omo la validacin uede ser ositiva o negativa, as& como uede tener ms o menos cdigos de error % acciones a reali!ar de endiendo de la in(ormacin rocesada, el scri t PHP tiene que mandar una res uesta ms o menos elaborada al scri t _avascri t % una osibilidad es enviar esos datos desde PHP utili!ando la notacin _0;N.

11.*.1. Disponibilidad de las 8unciones J9B5 en "#"


PHP dis one de varias (unciones ara #acer distintos tratamientos con notacin de objetos _0;N, que ermite convertir un

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

83

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com objeto PHP, o cualquier otro ti o de variable, a un string con notacin _0;N, as& como crear un objeto PHP a artir de un string codi(icado con _0;N. $n PHP, como dec&amos, es osible roducir % consumir datos cargados con notacin _0;N, or medio de unas (unciones de las que dis one el lenguaje, que existen de manera redeterminada en los servidores modernos de PHP % que se ueden utili!ar tambi,n en instalaciones antiguas de PHP, aunque con alg:n trabajo de instalacin adicional. / artir de PHP 3.L las (unciones _0;N estn dis onibles siem re, ero si utili!amos or ejem lo PHP 4 tendr&amos que instalarlas manualmente. Para ello existen varios aquetes de librer&as, que rovienen de diversas (uentes, que tienen (unciones ara tratar con _0;N desde PHP. < Pa!uete =S/) de P*0L $ste aquete, del re ositorio de librer&as PHP P$-+, es com atible con PHP 4.2.F o su erior. $n versiones su eriores a PHP 3.L est dis onible or de(ecto. $n versiones anteriores del lenguaje se tendr&a que instalar de manera se arada. < Librera =S/)<P P $s una librer&a de (unciones que se conoce tambi,n con el nombre de =0ervicesN_0;N=. ;riginariamente escrita or *ic#al *igursKi, en la actualidad se encuentra dis onible dentro del (rameworK PHP P$/>1 #tt 1AA ear. # .netA acKageA0ervicesN_0;N < =S/) Lib en >end 2rame(or: $s una librer&a de (unciones ara tratamiento con _0;N que (orma arte del (rameworK PHP Cend. < ?ML<&P0 para P P Por medio de una extensin ara la librer&a # Dxmlr c, tambi,n se uede tratar con notacin de objetos _0;N. +as articularidades de cada sistema son ligeramente distintas. -abe decir que la ms interesante ser&a la rimera, que (orma arte de P$-+, uesto que est escrita en - % or tanto ser ms r ida de ejecutarse, al (ormar arte de los com onentes nativos de PHP. -omo decimos slo odremos dis oner de ella a artir de PHP 3.L, ero en servidores antiguos tendr&amos que instalarla a arte, lo que a menudo ser com licado, o incluso im osible ara sitios web en roduccin % en un alojamiento com artido. /s& que, si nuestro servidor PHP no dis one de las (unciones _0;N or estar oco actuali!ado, nos costar muc#o menos es(uer!o % dolores de cabe!a utili!ar otra librer&a distinta a la bsica de P$-+. $n este caso, or la (acilidad de instalacin, se recomendar&a la utili!acin de la librer&a que viene en P$/>, que se uede descargar del ro io sitio de P$/>, en la 5>+ #tt 1AA ear. # .netA acKageA0ervicesN_0;N
)ota: Hemos ublicado en ?esarrollo7eb.com en asados art&culos algunas re(erencias :tiles ara instalar P$/> % utili!ar algunos com onentes de este (rameworK PHP.este (rameworK PHP.

$xiste un art&culo mu% interesante, aunque en ingl,s, que com ara las diversas librer&as existentes ara usar _0;N desde PHP, que contiene diversas in(ormaciones t,cnicas, requisitos % un anlisis del desem e'o de cada una. $n el rximo art&culo ex licaremos cmo utili!ar las (unciones _0;N en PHP or medio de las (unciones nativas del lenguaje.
Artculo por

Miguel Angel Alvarez

11./. Code!gniter
Code&gniter es un frame"or8 PHP para la creacin rpida de aplicaciones "eb. Presentacin general del frame"or8 ! primeras notas para empe+ar a usarlo. Probablemente %a se amos que un (rameworK es un rograma ara desarrollar otros rogramas, -ode"gniter, or tanto, es un rograma o a licacin web desarrollada en PHP ara la creacin de cualquier ti o de a licacin web bajo PHP. $s un roducto de cdigo libre, libre de uso ara cualquier a licacin.

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

84

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com -omo cualquier otro (rameworK, -odeigniter contiene una serie de librer&as que sirven ara el desarrollo de a licaciones web % adems ro one una manera de desarrollarlas que debemos seguir ara obtener rovec#o de la a licacin. $sto es, marca una manera es ec&(ica de codi(icar las ginas web % clasi(icar sus di(erentes scri ts, que sirve ara que el cdigo est, organi!ado % sea ms (cil de crear % mantener. -ode"gniter im lementa el roceso de desarrollo llamado *odel Miew -ontroller 8*M-9, que es un estndar de rogramacin de a licaciones, utili!ado tanto ara #acer sitios web como rogramas tradicionales. $ste sistema tiene sus caracter&sticas, que veremos en art&culos siguientes. -ode"gniter no es magia, ero contiene muc#as a%udas ara la creacin de a licaciones PHP avan!adas, que #acen que el roceso de desarrollo ms r ido. / la ve!, de(ine una arquitectura de desarrollo que #ar que rogramemos de una manera ms ordenada % contiene diversas #erramientas que a%udan a #acer a licaciones ms verstiles % seguras. -ode"gniter % otros (rameworKs PHP ueden a%udarte a dar el salto de(initivo como desarrollador PHP, creando a licaciones web ms ro(esionales % con cdigo ms reutili!able, con la di(erencia que -ode "gniter est creado ara que sea (cil de instalar en cualquier servidor % de em e!ar a usar que cualquier otro (rameworK. /dems muc#as de sus utilidades % modos de (uncionamiento son o cionales, lo que #ace que goces de ma%or libertad a la #ora de desarrollar sitios web.

11./.1. CaracterQsticas generales de Code!gniter


/lgunos de los untos ms interesantes sobre este (rameworK, sobre todo en com aracin con otros roductos similares, son los siguientes1 Versatilidad1 <ui!s la caracter&stica rinci al de -ode"gniter, en com aracin con otros (rameworKs PHP. -ode"gniter es ca a! de trabajar la ma%or&a de los entornos o servidores, incluso en sistemas de alojamiento com artido, donde slo tenemos un acceso or @)P ara enviar los arc#ivos al servidor % donde no tenemos acceso a su con(iguracin. 0ompatibilidad1 -ode"gniter, al menos en el momento de escribir este art&culo de desarrolloweb.com, es com atible con la versin PHP 4, lo que #ace que se ueda utili!ar en cualquier servidor, incluso en algunos antiguos. Por su uesto, (unciona correctamente tambi,n en PHP 3. 2acilidad de instalaci#n1 No es necesario ms que una cuenta de @)P ara subir -ode"gniter al servidor % su con(iguracin se reali!a con a enas la edicin de un arc#ivo, donde debemos escribir cosas como el acceso a la base de datos. ?urante la con(iguracin no necesitaremos acceso a #erramientas como la l&nea de comandos, que no suelen estar dis onibles en todos los alojamientos. 2le@ibilidad1 -ode"gniter es bastante menos r&gido que otros (rameworKs. ?e(ine una manera de trabajar es ec&(ica, ero en muc#os de los casos odemos seguirla o no % sus reglas de codi(icacin muc#as veces nos las odemos saltar ara trabajar como ms a gusto encontremos. /lgunos mdulos como el uso de lantillas son totalmente o cionales. $sto a%uda muc#as veces tambi,n a que la curva de a rendi!aje sea ms sencilla al rinci io. Ligereza1 $l n:cleo de -ode"gniter es bastante ligero, lo que ermite que el servidor no se sobrecargue inter retando o ejecutando grandes orciones de cdigo. +a ma%or&a de los mdulos o clases que o(rece se ueden cargar de manera o cional, slo cuando se van a utili!ar realmente. 5ocumentaci#n tutorializada1 +a documentacin de -ode"gniter es (cil de seguir % de asimilar, orque est escrita en modo de tutorial. $sto no (acilita muc#o la re(erencia r ida, cuando %a sabemos acerca del (rameworK % queremos consultar sobre una (uncin o un m,todo en concreto, ero ara iniciarnos sin duda se agradece muc#o. 0in duda, lo ms destacable de -ode"gniter es su accesibilidad, %a que odemos utili!arlo en la ma%or gama de entornos. $sta es la ra!n or la que en ?esarrollo7eb.com #emos elegido este (rameworK PHP ara comen!ar un manual que ex licar cmo utili!arlo ara desarrollar nuestras ro ias a licaciones web. $n siguientes art&culos iremos contando di(erentes as ectos de este (rameworK % lo utili!aremos ara crear una rimera a licacin web. Para continuar uedes leer el art&culo "nstalacin % con(iguracin de -ode"gniter. )ambi,n uedes ir al *anual de -odeigniter que estamos ublicando.
Artculo por

Miguel Angel Alvarez

Manual de programacin en PHP: www.desarrolloweb.com/manuales/12/


# $os manuales de DesarrolloWeb.com tienen el cop%right de sus autores. &o reproducir sin autorizaci'n.

85

También podría gustarte