Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual Programacion PHP
Manual Programacion PHP
com
http://www.helloworldsolutions.com/ (! captulo
Daniel Lpez
http://pichongol.blogspot.com (! captulo
Jorge Ramos
(! captulo
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.
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.
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com /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 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
.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
Alvarez
Parte 2:
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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./.- 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
Alvarez
$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 C) %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 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.
Luis Cuenca
10
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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=.
$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.
Syntax error on line 173 of C !Arc"ivos #e progra$a!Apac"e %roup!Apac"e&!conf!"ttp#'conf Cannot loa# C !p"p!sapi!p"p(apac"e&'#ll into server )o se pue#e encontrar el $*#ulo especifica#o'
;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
11
$sta (uncin sim lemente crear una gina de muestra de las con(iguraciones de(inidas ara PHP en ese servidor. 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.
Angel Alvarez
12
?ebe #aber decenas de maneras de instalar / ac#e, PHP % *%0<+ sobre .N5A+inux % en "nternet encontraremos una gran cantidad de in(ormacin a este res ecto. Nosotros vamos a destacar una a continuacin que nos #a (uncionado siem re bien, con algunos detalles adicionales que nos ueden (acilitar diversas labores de desarrollo en nuestros sistemas. /dems, com lementaremos la in(ormacin comentando los asos ara instalar otra #erramienta (undamental, como es el P# *%/dmin.
-onviene decir que esta receta la #emos obtenido del sitio web Howto@orge. Io la #e traducido libremente % la #e com lementado con ex licaciones adicionales % algunos asos extra que #e considerado de inter,s. -omo un rimer aso, odemos lan!ar un comando ara obtener los rivilegios de root ara la administracin a trav,s de la l&nea de comandos.
s"do s"
Nos edir la clave de nuestro usuario, que es la misma clave que usamos al arrancar el equi o.
?urante el roceso de instalacin tendrs que introducir la clave que deseas con(igurar al usuario root de *%0<+.
$n este unto, una ve! instalado / ac#e, uedes #acer una rimera com robacin, que nos ermitir saber si el servidor web est (uncionado correctamente. Para ello abre un navegador cualquiera e introduce la 5>+ de local#ost o la "P local de tu ordenador1
http://localhost
; bien1
http://-.'.-/0.1.22 (s"stit"ye esa )3 por la )3 de t" %4,"ina) )ota: 0i no sabes cul es tu "P de red local, tienes a tu dis osicin en +inux el comando i(con(ig.
/l acceder a cualquiera de esas dos 5>+ deber&a salirte el mensaje de / ac#e diciendo que est (uncionado 8"t worKsO9 Para tu in(ormacin, el directorio redeterminado donde se guardan los documentos del servidor web en / ac#e es AvarAwww % el (ic#ero de con(iguracin del servidor est en AetcAa ac#eLAa ac#eL.con(. ;tras con(iguraciones estn almacenadas en otros subdirectorios de AetcAa ac#eL como AetcAa ac#eLAmodsDenabled ara los mdulos #abilitados,
13
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com AetcAa ac#eLAsitesDenabled ara los =virtual #osts= % AetcAa ac#eLAcon(.d ara las con(iguraciones globales que a(ectarn a todos los virtual #ost.
)ota: $xiste en ?esarrollo7eb.com un manual sobre la instalacin de / ac#e en 7indows, que no te a%udar muc#o si ests en +inux, ero que tiene muc#a in(ormacin sobre la con(iguracin de / ac#e. )e servir de a%uda uesto que la ma%or&a de los arc#ivos de con(iguracin (uncionan exactamente igual % las variables de con(iguracin son exactamente las mismas.
?es u,s de la instalacin de PHP3 como mdulo de / ac#e, debemos reiniciar el servidor web % ara ello lan!amos este otro comando.
/etc/init.d/apache' restart
-omo uedes ver, #acemos un =restart=, ero tambi,n odr&as #acer rimero un =sto = % luego un =start=. +legado este unto, odemos crear %a un documento web que nos sirva ara com robar si PHP est correctamente instalado en nuestro sistema % ara ello odemos utili!ar la l&nea de comandos % el editor que re(ieras. / algunas ersonas les gusta el editor llamado Mi, ero %o so% de los que re(iere otros ms sencillos como el Qoe.
)ota: Para conocer ms acerca del rograma Qoe, uedes visitar la @/<1 H0ab,is de una alternativa a MiJ
$n cualquier caso, tendrs que crear un arc#ivo en la ruta or de(ecto de ublicacin del / ac#e, que %a dijimos es AvarAwww. Puedes llamarle como desees, or ejem lo in(o. # , en el que colocars las siguientes l&neas de cdigo.
<?php phpinfo(); ?>
$sa (uncin de PHP # in(o89 te mostrar muc#a in(ormacin :til sobre la instalacin de PHP que tienes en tu mquina, como mdulos incluidos % di(erentes con(iguraciones en (uncionamiento.
)ota: ara crear el arc#ivo PHP tambi,n uedes utili!ar el editor gr(ico que desees, que te ser incluso ms cmodo que cualquier rograma que trabaje con el terminal. $l :nico detalle es a licarle los ermisos necesarios a la car eta AvarAwww ara que sea ro iedad de tu usuario % uedas ciertas cosas con ella. )en en cuenta que onerse como usuario due'o de la car eta se recomienda solo sitios que no est,n en roduccin. +o #ar&as con el comando1 s"do cho6n -7 89S:7:89S:7 /*ar/666 0i lo deseas, tambi,n uedes #acer el comando 1 echo 89S:7 Para ver el nombre del usuario en el que ests % el que vas a oner como duelo de la car eta AvarAwww .
5na ve! creado el arc#ivo de texto in(o. # con el cdigo indicado, odemos acceder a ,l desde un navegador con una 5>+ como esta1
http://localhost/info.php
14
0i ves toda una serie de in(ormacin de tu instalacin PHP, como en la imagen anterior, es que #as odido instalar PHP en correctas condiciones.
Podrs encontrar el listado de extensiones de PHP dis onibles en los re ositorios, uedes elegir aquellos que desees e instalarlos con la l&nea1
apt-+et install php2-%ys,l php2-c"rl php2-+d php-pear php2-i%a+ic; php2-s,lite php2-tidy php2-x%lrpc php2-xsl
/ continuacin debes reiniciar el servidor ara que los cambios tengan e(ecto.
/etc/init.d/apache' restart
0i re(rescas la gina del # in(o89 odrs encontrar los nuevos mdulos instalados.
Mers a continuacin una serie de reguntas, como tu servidor web. 5na ve! instalado uedes acceder al gestor or medio de una 5>+ como esta1
http://localhost/php%yad%in/
#.*.B.- Conclusin
-on este roceso tendrs a tu dis osicin todos los materiales ara comen!ar a desarrollar con PHP en tu +inux. 0im lemente se'alar un detalle im ortante, que %a se a unt de re(iln, ero que quiero remarcar. $s osible que en esta instalacin de / ac#e % PHP quieras desarrollar sitios web % utili!ar ara rogramar dic#os sitios un editor ara rogramadores con inter(a! gr(ica como Romodo $dit o $cli se. $n este caso recuerda que, ara editar o crear arc#ivos en la car eta AvarAwww desde esos rogramas, tendrs que oner tu usuario como due'o de la car eta, con c#own. $so se ex lic en una nota anterior.
&e$erencia: Para o timi!ar la con(iguracin de tu / ac#e en +inux de una manera mu% rctica ara tu servidor de desarrollo, te aconsejamos la lectura del art&culo -on(iguracin de / ac#e en +inux con car etas externas.
Angel Alvarez
15
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
7se nombre8de8la8base 'reate Database nombre8de8la8base6 Drop Database nombre8de8la8base6 1how tables6
16
Describe nombre8de8la8tabla6 Drop 9able nombre8de8la8tabla6 #oad Data #ocal 5n/ile ;archi)o.t*t; 5nto 9able nombre8de8la8tabla6 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 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
17
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 4. /gregar ruta de del directorio # % las extenciones en la o cion de $nvironment Mariable de windowsLFF2
18
B. -on(iguracin en ""0
19
20
21
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 5ein+ created // in the session.sa*e$path folder session$start(); ?> <ht%l> <head> <title>3<3 Test</title> </head> <5ody> <p> The 5ro6ser yo"=re "sin+ is <?php echo 8$S:7>:7?=<TT3$9S:7$A@:AT=B; ?> </p> <p> <C-- test the 5ro6scap set"p --> Do"r 5ro6ser=s capa5ilities are: <5r/> <pre> <?php print$r(+et$5ro6ser(n"llE tr"e)); ?> </pre> </p> <?php phpinfo(); ?> </5ody> </ht%l>
22
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 +orge
Ra$os
Parte 3:
$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.
23
$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 =X=. 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. 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
<? 8%ensaHeG"Ten+o ha%5reCC"; //&o%entario de "na linea echo 8%ensaHe; I:ste co%entario ta%5iJn es de "na linea /K:n este caso %i co%entario oc"pa *arias lineasE lo *es? K/ ?>
*+ecutar script 0i usamos doble barra 8AA9 o el s&mbolo S odemos introducir comentarios de una l&nea. *ediante AY % YA 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 8Z9 % 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
24
?e endiendo de la in(ormacin que contenga, una variable uede ser considerada de uno u otro ti o1
Cariables numricas 4lmacenan ci/ras Enteros Real <entero=2>>26 <real=?.!4!@A6 %umeros sin decimales %umeros con o sin decimal
Cariables al8anumricas 4lmacenan te*tos compuestos de nBmeros $/o ci/ras 'adenas 4lmacenan )ariables al/anumCricas <cadena=;,ola amigo;6
'ablas 4lmacenan series de in/ormaciones numCricas $/o al/anumCricas <sentidoD!E=;)er;6 <sentidoD2E=;tocar;6 <sentidoD?E=;oir;6 <sentidoD4E=;gusto;6 <sentidoD@E=;oler;6
DbEetos 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
8*aria5leG"2"; //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
<? 8cadenaG"2"; //esto es "na cadena 8enteroGL; //esto es "n entero echo 8cadenaM8entero ?>
*+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.
25
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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 =[= antes del nombre de la variable.
<?php 8foo G =No5=; // Asi+na el *alor =No5= a 8foo 85ar G O8foo; // 7eferencia 8foo *Pa 85ar. 85ar G "!i no%5re es 85ar"; // !odifica 85ar... echo 8foo; // 8foo ta%5iJn se %odifica. echo 85ar; ?>
$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
)ota: )enemos un videotutorial que nos #abla de las variables PHP
Alvarez
Za T =1=X AAZa es una cadena Za\F] T =(=X 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)% e8Zvariable,=nuevoNti o=9X la (uncin set)% e89 actuali!a el ti o de Zvariable a =nuevoNti o= % devuelve un boleano indicando si #ubo ,xito o no en la conversin.
26
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com $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 -. Zvariable T =L2=X Zvariable T 8int9 ZvariableX +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 ^ 8arra%9 D (uer!a a arra% 8arra%9 8object9 D (uer!a a objeto 8object9
Artculo por Miguel
Angel Alvarez
Cariable
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 <,99+871ER84FE de esta in/ormaci&n3 podemos redireccionar nuestros %9 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. <,99+84''E+98# %os de)uel)e la o las abre)iaciones de la lengua
27
4%F74FE
considerada como principal por el na)egador. Esta lengua o lenguas principales pueden ser elegidas en el menB de opciones del na)egador. Esta )ariable resulta tambiCn e*tremadamente Btil para en)iar al internauta a las p.ginas escritas en su lengua3 si es -ue e*isten.
%os indica la 7R# desde la cual el internauta ha tenido acceso a la p.gina. 0u$ interesante para generar <,99+8REGERER botones de ;4tr.s; din.micos o para crear nuestros propios sistemas de estadsticas de )isitas. %os de)uel)e una cadena con la 7R# del script -ue est. siendo e(ecutado. 0u$ interesante para crear botones para recargar la p.gina.
<+,+81E#G
1e trata de un arra$ -ue almacena los nombres $ <,99+8FE98H4R1 contenidos de las )ariables en)iadas al script por 7R# o por /ormularios FE9 1e trata de un arra$ -ue almacena los nombres $ <,99+8+I198H4R1 contenidos de las )ariables en)iadas al script por medio de un /ormulario +I19 1e trata de un arra$ -ue almacena los nombres $ <,99+8'IIJ5E8H4 contenidos de las cooKies. Heremos -uC son m.s R1 adelante. 4lmacena la )ariable usuario cuando se e/ectBa la entrada a p.ginas de acceso restringido. 'ombinado <+,+8479,871ER con <+,+8479,8+W resulta ideal para controlar el acceso a las p.ginas internas del sitio. 4lmacena la )ariable password cuando se e/ectBa la entrada a p.ginas de acceso restringido. 'ombinado <+,+8479,8+W con <+,+8479,871ER resulta ideal para controlar el acceso a las p.ginas internas del sitio. <RE0I9E84DDR 0uestra la direcci&n 5+ del )isitante. <DI'70E%98RII %os de)uel)e el path /sico en el -ue se encuentra 9 alo(ada la p.gina en el ser)idor. <+,+1E115D Fuarda el identi/icador de sesi&n del usuario. Heremos
28
&.*.#.- F)LD$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. Z.+;G/+0 existe dese PHP 2. ,-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! ZH))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! ZH))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! ZH))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! ZH))PN-;;R"$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! ZH))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! ZH))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.
29
,-S*SS"/) Mariables registradas en la sesin del scri t. /nloga a la antigua matri! ZH))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
$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 Z.+;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
8%i*aria5le G "pepe"; 8otra*aria5le G -'L#;
0i queremos acceder a esas variables dentro de una (uncin utili!ando el arra% Z.+;G/+0 tendr&amos este cdigo1
f"nction %if"ncion()Q //estoy dentro de la f"nciRnE para aceder a las *aria5les "tiliSo 8@ TNA S echo 8@ TNA S?"%i*aria5le"B; echo 8@ TNA S?"otra*aria5le"B; U
-omo se uede ver, se accede al contenido de las variables globales con el arra% Z.+;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.
30
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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()Q +lo5al 8%i*aria5leE 8otra*aria5le //con esa lPnea dentro de la f"nciRnE declara%os el "so de *aria5les +lo5ales echo 8%i*aria5le; echo 8otra*aria5le; U
-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% Z.+;G/+0 o declarando con =global= el uso de esas variables.
Artculo por Miguel
Angel Alvarez
&.?.- Dperadores
*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.
H I 0 J
&e$erencia: $l o erador aritm,tico que uede resultar ms desconocido ara los lectores es el o erador V. $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.
31
KK 5gualdad LK Desigual M 0enor -ue MK 0enor igual -ue N 0a$or -ue NK 0a$or igual -ue
4nd Dr L
L I %o
MM<)ariable
NN<)ariable
32
1uma !> a <)ariable Resta !> a <)ariable 'oncatena las cadenas <)ariable $ ;aOado;
$ste ti o de ex resiones no son ms que abreviaciones de otras (ormas ms clsicas1 Zvariable PT 1F es lo mismo que1 Zvariable T ZvariableP1F
Artculo por Rubn
Alvarez
Parte :
!rrays y cadenas
%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 +,+.
33
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com $n el ca &tulos anteriores on&amos el ejem lo de un arra% llamado sentido que conten&a los distintos sentidos del ser #umano1
8sentido?-BG"*er"; 8sentido?'BG"tocar"; 8sentido?LBG"oir"; 8sentido?#BG"+"star"; 8sentido?2BG"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
<? 8%oneda?"espana"BG"3eseta"; 8%oneda?"francia"BG"Vranco"; 8%oneda?""sa"BG"(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
<? 8%onedaGarray("espana"G> "3eseta"E"francia" G> "Vranco"E""sa" G> "(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
<? 8paisGarray ( "espana" G>array ( "no%5re"G>":spaWa"E "len+"a"G>"&astellano"E "%oneda"G>"3eseta" )E "francia" G>array ( "no%5re"G>"Vrancia"E "len+"a"G>"VrancJs"E "%oneda"G>"Vranco" ) ); echo 8pais?"espana"B?"%oneda"B //Saca en pantalla: "3eseta" ?>
*+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 =X= 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.
34
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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$8)alues (mi8arra$ asort(mi8arra$ $ arsort(mi8arra$ count(mi8arra$ Ksort(mi8arra$ $ Krsort(mi8arra$ list (<)ariable!3 <)ariable2... =mi8arra$
Descripcin #ista los )alores contenidos en mi8arra$ Irdena por orden al/abCtico directo o in)erso en /unci&n de los )alores %os da el numero de elementos de nuestro arra$ Irdena por orden al/abCtico 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(mi8arra$ 3 pre)(mi8arra$ 3 %os permiten mo)ernos por dentro del arra$ con un reset(mi8arra$ $ end(mi8arra$ puntero hacia delante3 atras $ al principio $ al /inal. %os da el )alor $ la cla)e del elemento en el -ue nos encontramos $ mue)e al puntero al siguiente elemento.
each(mi8arra$
?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
35
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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.
ec#o =U W=X AAmodi(ico otra ve! Zsalida T arra%Nslice 8Zsalida, 19X AAmuestro el arra% (oreac# 8Zsalida as Zactual9 ec#o Zactual . =UbrW=X JW )endr como salida1 *iguel Pe e Quan Pe e Quan 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.
36
AAquito la rimera casilla Zsalida T arra%Ns#i(t 8Zentrada9X AAmuestro el arra% ec#o =+a (uncin devuelve1 = . Zsalida . =UbrW=X (oreac# 8Zentrada as Zactual9 ec#o Zactual . =UbrW=X ec#o =U W=X AAquito la rimera casilla, que a#ora ser&a la segunda del arra% original Zsalida T arra%Ns#i(t 8Zentrada9X ec#o =+a (uncin devuelve1 = . Zsalida . =UbrW=X AAmuestro el arra% (oreac# 8Zentrada as Zactual9 ec#o Zactual . =UbrW=X JW ?a como resultado1 +a (uncin devuelve1 *iguel Pe e Quan Qulio Pablo +a (uncin devuelve1 Pe e Quan Qulio 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.
<? 8estadios$f"t5ol G array("Narcelona"G> "Ao" &a%p"E"7eal !adrid" G> "Santia+o Nerna5e""E">alencia" G> "!estalla"E"7eal Sociedad" G> "Anoeta");
AAmostramos los estadios (oreac# 8ZestadiosN(utbol as ZindiceTWZactual9 ec#o Zindice . = DD = . Zactual . =UbrW=X ec#o =U W=X AAeliminamos el estadio asociado al real madrid unset 8ZestadiosN(utbol\=>eal *adrid=]9X AAmostramos los estadios otra ve! (oreac# 8ZestadiosN(utbol as ZindiceTWZactual9 ec#o Zindice . = DD = . Zactual . =UbrW=X JW +a salida ser la siguiente1 Garcelona DD Nou -am >eal *adrid DD 0antiago Gernabeu Malencia DD *estalla >eal 0ociedad DD /noeta
37
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Garcelona DD Nou -am Malencia DD *estalla >eal 0ociedad DD /noeta
AAaumentamos el tama'o del arra% arra%N us#8Ztabla, =.orrin=, =Paloma=, =;so=9X (oreac# 8Ztabla as Zactual9 ec#o Zactual . =UbrW=X JW ?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
<? 8ta5la G array (" a+artiHa"E "AraWa"E "3erro"E "@ato"E "7atRn"); 8ta5la' G array ("-'"E"L#"E"#2"E"2'"E"-'"); 8ta5laL G array ("Sa"ce"E"3ino"E"AaranHo"E"&hopo"E"3erro"E"L#");
AAaumentamos el tama'o del arra% Zresultado T arra%Nmerge8Ztabla, ZtablaL, Ztabla29X (oreac# 8Zresultado as Zactual9 ec#o Zactual . =UbrW=X JW ?a como resultado1 +agartija /ra'a Perro .ato >atn
38
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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
8ta5la G array ("Sa"ce"E"3ino"E"AaranHo"); 8ta5la?LBG"Al+arro5o";
$n arra%s asociativos1
8estadios$f"t5ol G array(">alencia" G> "!estalla"E"7eal Sociedad" G> "Anoeta"); 8estadios$f"t5ol?"Narcelona"BG "Ao" &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
Angel Alvarez
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 8cadena; //sacarPa ":sta es la infor%aciRn de %i *aria5le"
39
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Podemos %uxta oner o concatenar varias cadenas oniendo ara ello un unto entre ellas1
<? 8cadena-G"3erro"; 8cadena'G" %"erde"; 8cadenaLG8cadena-.8cadena'; echo 8cadenaL; //:l res"ltado es: "3erro %"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
<? 8aG22; 8%ensaHeG"Ten+o 8a aWos"; echo 8%ensaHe; //:l res"ltado es: "Ten+o 22 aWos" ?>
*+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 =Za=J $n otras alabras, cmo se #ace ara que el s&mbolo Z 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
28ecto en la cadena Escribe d&lar en la cadena Escribe comillas en la cadena Escribe contrabarra en la cadena
P/2
/dems, existen otras utilidades de esta contrabarra que nos ermiten introducir en nuestro documento H)*+ determinados eventos1
Car+c ter t
40
n r
$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! > <<:A(> <T)T :>ca%5iolinea.php</T)T :> </<:A(> <NT(D> <? echo "<olaE n si+o en la %is%a lPnea eHec"tada pero no en cRdi+o f"ente.<5r>Ahora ca%5io de lPnea eHec"tada pero contin"o en la %is%a en el cRdi+o f"ente." ?> </NT(D> </<T! >
*+ecutar script
$c#ar un vista!o al codigo (uente del navegador
+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
41
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.
$sta (uncin odr&a ser llamada al rinci io de todas nuestras ginas de la siguiente (orma1
8tit"loG"!i 6e5"; hacer$enca5eSado(8tit"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.
42
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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 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"nciRn de enca5eSado y colocaciRn del tit"lo f"nction hacer$enca5eSado(8tit"lo) Q 8enca5eSadoG"<ht%l>n<head>nt<title>8tit"lo</title>n</head>n"; echo 8enca5eSado; U ?>
Por otra arte tendr&amos nuestro scri t rinci al gina. # 8 or ejem lo91
<? incl"de("li5reria.php"); 8tit"loG"!i Ye5"; hacer$enca5eSado(8tit"lo); ?> <5ody> :l c"erpo de la p4+ina </5ody> </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.
43
+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 -</title> </head> <5ody> <? f"nction escri5e$separa(8cadena)Q for (8iG1;8i<strlen(8cadena);8iMM)Q echo 8cadena?8iB; if (8i<strlen(8cadena)--) echo "-"; U U escri5e$separa ("hola"); echo "<p>"; escri5e$separa ("Texto %4s lar+oE a *er lo ,"e hace"); ?> </5ody> </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
44
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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 f- (8para%etro-E 8par4%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. +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 (8para%etro-)Q 8para%etro-G"hola"; echo "<5r>" . 8para%etro-; //i%pri%e "hola" U 8%i*aria5le G "esto no ca%5ia"; por*alor (8%i*aria5le); echo "<5r>" . 8%i*aria5le; //i%pri%e "esto no ca%5ia"
$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 =[= antes del armetro.
<? f"nction porreferencia(O8cadena) Q 8cadena G =Si ca%5ia=; U 8str G =:sto es "na cadena=; porreferencia (8str); echo 8str; // )%pri%e =Si ca%5ia= ?>
45
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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 (8para%etro-G"pepe";8para%etro'GL)
Para la de(inicin de (uncin anterior, Z arametro1 tiene como valor or de(ecto = e e=, mientras que Z 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 () // 8para%etro- *ale "pepe" y 8para%etro' *ale L
0i llamamos a la (uncin indicando un valor, este ser tenido en cuenta ara el rimer armetro.
pordefecto ("hola") // 8para%etro- *ale "hola" y 8para%etro' *ale L
/tencin, estamos obligados a declarar todos los armetros con valores or de(ecto al (inal.
Artculo por Miguel
Angel Alvarez
46
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 0i se #an entendido bien los conce tos, este ejem lo no uede resultar di(&cil. +a (uncin recibe un armetro llamado Z 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 14V de 1FFF. $n la segunda, se muestra el BV de mil % en la tercera, el FV 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%.
f"nction s%all$n"%5ers() Q ret"rn array (1E -E '); U list (8SeroE 8oneE 8t6o) G s%all$n"%5ers();
list89 se usa ara asignar una lista de variables en una sola o eracin. ?es u,s de esa o eracin, Z!ero valdr F, Zone valdr 1 % Ztwo valdr L.
Artculo por Miguel
Angel Alvarez
Parte $:
47
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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.
A; N;
+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 (condiciRn-) Q )nstr"cciRn -; )nstr"cciRn '; ... U else Q if (condiciRn') Q )nstr"cciRn A; )nstr"cciRn N; ... U else Q )nstr"cciRn [ ... U U
?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 (condiciRn-) Q )nstr"cciRn -;
48
$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! > <<:A(> <T)T :>(etector de en+"a</T)T :> </<:A(> <NT(D> <? //Antes de nada introd"ci%os %ensaHes en for%a de *aria5les 8espanolG"<ola"; 8in+lesG"<ello"; 8francesG"NonHo"r"; //Ahora lee%os del na*e+ador c"4l es s" len+"a oficial 8idio%aGs"5str(8<TT3$A&&:3T$ AA@9A@:E1E'); //Vor%"la%os las posi5ilidades ,"e se p"eden dar if (8idio%a GG "es") Qecho "8espanol";U elseif (8idio%aGG"fr") Qecho "8frances";U else Qecho "8in+les";U ?> </NT(D> </<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 8ZH))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 =TT= en lugar de un sim le =T=. $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(
Alvarez
49
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
<? 8siSeG-; Yhile (8siSe<G/) Q echo"<font siSeG8siSe>Ta%aWo 8siSe</font><5r>n"; 8siSeMM; U ?>
*+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 Zsi!e. $sto se uede #acer con una ex resin como la mostrada en el bucle 8Zsi!ePP9 que en realidad es sinnima de1 Zsi!eTZsi!eP1 Meremos otras de estas abreviaciones ms adelante.
50
$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 Zi 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 Zi valdr un n:mero menor que la longitud de la cadema. 0i se sali or llegar al (inal de la cadena, la variable Zi valdr lo mismo que la longitud en caracteres de esa cadena. $n el condicional sim lemente se com rueba si Zi 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.
U 6hile (condiciRn)
+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!.
51
&e$erencia: Para una a%uda rctica sobre estos bucles ver el siguiente videotutorial $structuras de control, M&deo L1 bucles (or, w#ile % doDw#ile. /dems, las ex licaciones sobre estructuras de control se com lementan con el videotutorial de 0witc# % las instrucciones breaK % continue.
Alvarez
*+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. D/ccin a reali!ar al (inal de cada vuelta de bucle.
52
5n ejem lo rctico es la lectura de un arra% lo cual odr&a #acerse del siguiente modo1
<? 8%onedaGarray(":spaWa"G> "3eseta"E"Vrancia" G> "Vranco"E"9SA" G> "(olar"); Voreach (8%oneda as 8cla*eG>8*alor) Q echo "3ais: 8cla*e !oneda: 8*alor<5r>"; U ?>
*+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
V"nction %ostrar$array (8array) Q Voreach (8array as 8cla*eG>8*alor) Qecho "8cla*eG>8*alor<5r>";U U
Alvarez
53
Parte &:
54
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Pod,is observar que estas variables no oseen el s&mbolo Z 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.
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! > <<:A(> <T)T :>ori+en.ht%l</T)T :> </<:A(> <NT(D> <a hrefG"destino.php?sal"doGholaOtextoG:sto es "na *aria5le texto">3aso *aria5les sal"do y texto a la p4+ina destino.php</a> </NT(D> </<T! > <<T! > <<:A(> <T)T :>destino.php</T)T :> </<:A(> <NT(D> <? echo ">aria5le 8sal"do: 8sal"do <5r>n"; echo ">aria5le 8texto: 8texto <5r>n" ?> </NT(D> </<T! >
*+ecutar e+emplo
B.1.#.- F"''!Q)2'QCAR9
>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 ZH))PN.$)NM/>0, que es un arra% asociativo. 5tili!ndolo quedar&a as&1
<? echo ">aria5le 8sal"do: 8<TT3$@:T$>A7S?"sal"do"B <5r>n"; echo ">aria5le 8texto: 8<TT3$@:T$>A7S?"texto"B <5r>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 ZH))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>+.
B.1.&.- FQ)2'
/ artir de la versin 4.1.F de PHP se #a introducido el arra% asociativo ZN.$), que es id,ntico a ZH))PN.$)NM/>0, aunque un oco ms corto de escribir.
55
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com dar roblemas. Por ejem lo, el signo =Y= 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.
Alvarez
*+ecutar e+emplo
56
B.#.1.- F"''!Q!D9'QCAR9
>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 ZH))PNP;0)NM/>0.
echo ">aria5le 8no%5re: " . 8<TT3$3TST$>A7S?"no%5re"B . "<5r>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 ZH))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.
B.#.#.- FQ!D9'
/ artir de PHP 4.1.F se ueden recoger las variables de (ormulario utili!ando tambi,n el arra% asociativo ZNP;0), que es el mismo que ZH))PNP;0)NM/>0, ero ms corto de escribir.
$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>7estrin+ir por edad</title> </head> <5ody> <? 8edad G 8$3TST?"edad"B; echo "T" edad: 8edad<p>"; if (8edad < -0) Q
57
$s eramos que este otro cdigo tam oco resulte extra'o. 0im lemente se recibe la edad, utili!ando el arra% ZNP;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
58
$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 enunciado i( si existe o no una variable ZNP;0). $n concreto i( 8OZNP;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>Ta5las de %"ltiplicar</title>
<5ody> <? if (C8$@:T)Q for (8iG-;8i<G-1;8iMM)Q echo "<5r><a hrefG=*er$ta5la.php?ta5laG8i=>>er la ta5la del 8i</a>\n"; U U else Q 8ta5laG8$@:T?"ta5la"B; ?> <ta5le ali+nGcenter 5orderG- cellpaddin+G"-"> <? for (8iG1;8i<G-1;8iMM)Q echo "<tr><td>8ta5la [ 8i</td><td>G</td><td>" . 8ta5la K 8i . "</td></tr>\n"; U ?> </ta5le> <? U ?> </5ody> </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
59
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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( 8OZN.$)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
$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%5re$de$la$coo;ie"E*alorEexpiracion);
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"E8no%5reEti%e()M0/#11KL/2);
?e este modo #emos creado una cooKie # llamada ersona que tiene como valor el contenido de la variable Znombre % 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
60
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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 ZH))PN-;;R"$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. /dems, tambi,n te recomendamos ver el Mideotutorial sobre las -ooKies en PHP.
Artculo por Rubn
Alvarez
61
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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 Qavascri 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"E "%i*alor"); setcoo;ie("coo;ie'"E "%i*alor'"E ti%e() M L/11); setcoo;ie("otracoo;ie"E "*alorfinal"E ti%e() M L/11E "/"E ".%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. &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 ZN-;;R"$. $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
8$&TT]):?"%i+alleta"B; 8$&TT]):?"coo;ie'"B;
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 o al Mideotutorial sobre las -ooKies en PHP.
Artculo por Miguel
Angel Alvarez
B.?.- 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
62
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com cooKies ara asar variables de un arc#ivo a otro no ser&a 1FFV 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. 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
63
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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.
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 9
5na ve! iniciada la sesin odemos utili!ar variables de sesin a trav,s de ZN0$00";N, que es un arra% asociativo, donde se accede a cada variable a artir de su nombre, de este modo1
8$S:SS)TA?"no%5re$de$*aria5le"B )ota: ZN0$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 ZH))PN0$00";NNM/>0, que es tambi,n un arra% asociativo, aunque no es de mbito global. 0i ZH))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>@enerar *aria5le de sesiRn</title> </head> <5ody> <? 8$S:SS)TA?"%i*aria5ledesesion"B G "<ola este es el *alor de la *aria5le de sesiRn"; ?> </5ody> </ht%l>
64
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com -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 ZN0$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 *aria5le se sesiRn</title> </head> <5ody> !"estro esa *aria5le: <? echo 8$S:SS)TA?"%i*aria5ledesesion"B; ?> </5ody> </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 ZN0$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. 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(=contador=); ?> <<T! > <<:A(> <T)T :>contador.php</T)T :> </<:A(> <NT(D> <? )f (isset(8contador)GG1) Q8contadorG1;U MM8contador; echo "<a hrefG"contador.php"><as recar+ado esta p4+ina 8contador *eces</a>"; ?>
65
*+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
Descripcin %os de)uel)e el identi/icador de la sesi&n Da por abandonada la sesi&n eliminando )ariables e identi/icador.
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
66
Parte *:
67
1.1.1.- Con8igurar la base de datos <ue vamos a utilizar para los eEemplos de este manual
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 data5ase eHe%plo;
/#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.
Para com letar todo aquello que debes saber sobre el acceso a bases de datos en PHP encontrars multitud de art&culos rcticos en el )aller de PHP, como son la >ece cin el :ltimo "? de una insercin con PHP % *%0<+, la Paginacin de resultados con PHP % *%0<+, Programar un buscador con PHP % *%0<+, etc. /dems, ara los que re(ieran verlo todo aso a aso en vivo, contamos con un videotutorial sobre las bases de datos en PHP que te a%udar a entender mejor cmo trabajar con las bases de datos en PHP.
Artculo por Rubn
Alvarez
68
+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! > <<:A(> <T)T :>)nsertar.php</T)T :> </<:A(> <NT(D> <? //&onexion con la 5ase %ys,l$connect("localhost"E"t"$"ser"E"t"$pass6ord"); //selecciRn de la 5ase de datos con la ,"e *a%os a tra5aHar %ys,l$select$d5("%i$5ase$datos"); //:Hec"cion de la sentencia S^ %ys,l$,"ery("insert into clientes (no%5reEtelefono) *al"es (=8no%5re=E=8telefono=)"); ?> <h-><di* ali+nG"center">7e+istro )nsertado</di*></h-> <di* ali+nG"center"><a hrefG"lect"ra.php">>is"aliSar el contenido de la 5ase</a></di*> </NT(D> </<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
69
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com /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! > <<:A(> <T)T :>lect"ra.php</T)T :> </<:A(> <NT(D> <h-><di* ali+nG"center"> ect"ra de la ta5la</di*></h-> <5r> <5r> <? //&onexion con la 5ase %ys,l$connect("localhost"E"t"$"ser"E"t"$pass6ord"); //selecciRn de la 5ase de datos con la ,"e *a%os a tra5aHar %ys,l$select$d5("%i$5ase$datos"); //:Hec"ta%os la sentencia S^ 8res"ltG%ys,l$,"ery("select K fro% clientes"); ?> <ta5le ali+nG"center"> <tr> <th>Ao%5re</th> <th>TelJfono</th> </tr> <? //!ostra%os los re+istros 6hile (8ro6G%ys,l$fetch$array(8res"lt)) Q echo =<tr><td>=.8ro6?"no%5re"B.=</td>=; echo =<td>=.8ro6?"telefono"B.=</td></tr>=; U %ys,l$free$res"lt(8res"lt) ?> </ta5le> <di* ali+nG"center"> <a hrefG"insertar.ht%l">AWadir "n n"e*o re+istro</a><5r> <a hrefG"act"aliSar-.php">Act"aliSar "n re+istro existente</a><5r> <a hrefG"5orrar-.php">Norrar "n re+istro</a><5r> </di*> </NT(D> </<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 Zresult. $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
70
+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
)ota: Para quien desee una re(erencia com leta sobre cmo se #acen las sentencias 5P?/)$ en el lenguaje 0<+, recomendamos leer el art&culo /ctuali!acin de registros con 5P?/)$ en 0<+. <<T! > <<:A(> <T)T :>Act"aliSar'.php</T)T :> </<:A(> <NT(D> <?
71
-omo #ab,is odido com robar, la o eracin 5P?/)$ no tiene demasiada com lejidad. 0in embargo, ara a(ian!ar estos conocimientos recomendamos ver el v&deo sobre la actuali!acin de registros en *%0<+ con PHP.
Artculo por Rubn
Alvarez
UAselectW UbrW
72
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com U"NP5) )IP$T=05G*")= valueT=Gorrar=W UA@;>*W UAdivW UAG;?IW UAH)*+W $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! > <<:A(> <T)T :>Norrar'.php</T)T :> </<:A(> <NT(D> <? //&onexion con la 5ase %ys,l$connect("localhost"E"t"$"ser"E"t"$pass6ord"); //selecciRn de la 5ase de datos con la ,"e *a%os a tra5aHar %ys,l$select$d5("%i$5ase$datos");
AA-reamos la sentencia 0<+ % la ejecutamos Zs0<+T=?elete @rom -lientes 7#ere nombreT`Znombre`=X m%sqlNquer%8Zs0<+9X JW U#1WUdiv alignT=center=W>egistro GorradoUAdivWUA#1W Udiv alignT=center=WUa #re(T=lectura. # =WMisuali!ar el contenido de la baseUAaWUAdivW UAG;?IW UAH)*+W
)ota: Marios comentarios reguntan or el arc#ivo lectura. # que est enla!ado en el cdigo del ejem lo. )enemos que decir que ese arc#ivo se coment en el art&culo de la 0eleccin % lectura de registros de la base de datos or medio de PHP.
-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. /simismo, ara los que re(ieran el v&deo como material didctico, recomendamos ver el Mideotutorial sobre las bases de datos con PHP.
Artculo por Rubn
Alvarez
73
Parte ,:
74
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com /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, 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.
Angel Alvarez
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
75
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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 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/a5re$5ase$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 ,"e est4 "5icada la p4+ina -. Se hace "n rec"ento de los caracteres ,"e contiene el no%5re del script act"al. 8&hars G co"nt$chars(83<3$S: VE-); '. :xplora%os la ta5la de los caracteres de*"eltos 5"scando el car4cter (=/= &Rdi+o #Z ) de directorio (carpeta) ,"e de*"el*e Apache. foreach (8&hars as 8&harG>8n&hars)Q if (8&harGG#Z) Q8nG8n&hars;5rea;;U U L. @enera%os "na cadena de n-- *eces con la s"5candena "../" ,"e nos da el ni*el de directorio en ,"e se enc"entra el script. if (8nGG1) 83athStrin+G""; else 83athStrin+Gstr$pad(""E(8n--)KLE"../");
Angel Alvarez
76
$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
77
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
I -------------------------------------------------------I I Ta5le str"ct"re for ta5le =co%entario= I &7:AT: TAN : co%entario ( id$co%entario int(2) "nsi+ned ATT A9 id$artic"lo int(#) (:VA9 T =1= ATT A9 co%entario text ATT A9 E a"to$incre%entE E
78
);
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
>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.
79
)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. 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
80
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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.
/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.
81
-omo se #abr su uesto, es necesario tener creada la tabla en remoto ara que odamos introducirle los datos del (ic#ero de texto.
Angel Alvarez
82
Parte 1-:
83
$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 Zt#is, utili!ada dentro de los m,todos la ex licaremos un oco ms abajo.
-on esto #emos creado, o mejor dic#o, instanciado, un objeto de la clase -aja llamado Zmicaja.
8%icaHa->introd"ce("al+o"); 8%icaHa->%"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 =DW=.
no%5re$del$o5Heto->no%5re$de$%etodo()
Para acceder a los atributos de una clase tambi,n se accede con el cdigo =DW=. ?e esta (orma1
no%5re$del$o5Heto->no%5re$del$atri5"to
84
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com ese m,todo, se vuelca el valor que recibe or armetro en el atributo contenido. $n ese caso Zt#isDWcontenido #ace re(erencia al atributo contenido del objeto Zmicaja, que es sobre el que se invocaba el m,todo.
Artculo por Miguel
Angel Alvarez
$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
85
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com -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 &aHa$te%atica extends &aHaQ *ar 8te%a;
(unction de(ineNtema8ZnuevoNtema9d Zt#isDWtema T ZnuevoNtemaX e e $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 Ztema, % 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.
8%icaHa$te%atica G ne6 &aHa$te%atica(); 8%icaHa$te%atica->define$te%a("&a5les y contectores"); 8%icaHa$te%atica->introd"ce("&a5le de red"); 8%icaHa$te%atica->introd"ce("&onector 7X#2"); 8%icaHa$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.
$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 &aHa$te%atica(8altoG-E8anchoG-E8lar+oG-E8colorG"ne+ro"E8te%aG"Sin clasificaciRn")Q parent::&aHa(8altoE8anchoE8lar+oE8color); 8this->te%aG8te%a; U
/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 Ztema, que es es ec&(ico de la -ajaNtematica.
86
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()Q echo "&ontenido de la caHa de <5>" . 8this->te%a . "</5>: "; parent::%"estra$contenido(); U
Artculo por Miguel
Angel Alvarez
Parte 11:
87
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com $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
<? class 3ersona Q f"nction setAo%5re(8no%5re) Q 8this->no%5re G 8no%5re; U
(unction getNombre89 d return Zt#isDWnombreX e e (unction /lgo8Z 9 d Z ersonaDWsetNombre8=?aniel=9X e 1 Z ersona T new Persona89X L Z ersonaDWsetNombre8=Pic#ongol=9X 2 /lgo8Z ersona9X 4 ec#o Z ersonaDWgetNombre89X JW
+a variable Zcadena 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(8persona) Q 8persona->setAo%5re("(aniel"); U ?>E
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.
<?
88
$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 Z ersonaDWgetNombre89. $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 reestructuracin barre con cuestiones de com atibilidad, ara ganar en otros sKillsX 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.*.- 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 L3V 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
89
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 ,aniel
L*pez
90
-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 ;R $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 ;R tenemos que #acer lo siguiente ara conseguir el deseado H))PA1.x 4F4 Not @ound.
<? header("<TT3/-.1 #1# Aot Vo"nd"); header("Stat"s: #1# Aot Vo"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
91
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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: #1# Aot Vo"nd"); ?>
Nos env&a al navegador el cdigo1 H))PA1.x LFF ;R 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 ;R 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
92
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com $n PHP, como dec&amos, es osible roducir % consumir datos cargados con notacin Q0;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 Q0;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 Q0;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 =0ervicesNQ0;N=. ;riginariamente escrita or *ic#al *igursKi, en la actualidad se encuentra dis onible dentro del (rameworK PHP P$/>1 #tt 1AA ear. # .netA acKageA0ervicesNQ0;N < =S/) Lib en >end 2rame(or: $s una librer&a de (unciones ara tratamiento con Q0;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 Q0;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 Q0;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 acKageA0ervicesNQ0;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 Q0;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 Q0;N en PHP or medio de las (unciones nativas del lenguaje.
Artculo por Miguel
Angel Alvarez
93
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 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.
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
94
95