N28.PHP5.PC Cuadernos

download N28.PHP5.PC Cuadernos

of 77

Transcript of N28.PHP5.PC Cuadernos

  • 5/9/2018 N28.PHP5.PC Cuadernos

    1/77

    . .lOS

    Inst;alacion Vcanfiguraci6nApache, Xarnpp. PHPedit.Sintaxis vestruct;urasArrays. Strings. Variables, funciones y bucles .

    Prayectas praCl:.icasAnalisis deformularrios.,proteccion con contraserls.cookies. agregador RSS

    N um e ro 2 8 P H P 5 5 ,0 0 E U R

  • 5/9/2018 N28.PHP5.PC Cuadernos

    2/77

    2 PC Cuad ern os

    PH P 5Johann-ChristianHanke

    Copyright: KnowWareEURLTraducci6n:Victoria MengualPC Cuadernos - Tecnicoswww.pc-cuadernos.com

    Sociedad editora:KnowWare E.U.R.L.

    70, rue Georges VilletteF-77250 Ecuelles

    FranciaDirector:Mikkel Franck

    Direcci6n electr6nica:[email protected]

    Deposito legal: B-50240-2005ISBN: 2-915605-31-9

    Imprenta:Imprintsaimpressions intercomarcals, S.A.

    Sant Fruit6s de Bages, BarcelonaDistribuci6n quioscos:

    Coedis S.L.Avda. de Barcelona, 225

    Molins de ReiBarcelona

    Venta por numeros:Despues de su apariclon, los nurneros de estacolecci6n pueden pedirse por correo.

    (Consulta la paqina 77)

    PHP es uno de los lenguajes de pro-gramacion mas populares y mas exten-didos en Internet. Y tiene motivos paraserlo: es flexible, es potente, yes de co-digo abierto. De hecho, es la base de in-numerables proyectos que siguenesemismo espiritu, como muchos de los sis-temas de gestion de contenidos, porejemplo Word Press.Aprender un lenguaje de proqrarnaclonsolo se puede hacer de una forma: lapractica. Y de eso trata precisamenteeste cuaderno, de ensefiar paso a paso,con ayuda de ejemplos y pequenos pro-yectos, las bases de PHP.Por el camino, ellector aprendera a rea-lizar calculos, a pedir la opinion de susvisitantes con un libro de visitas, a pro-teger contenidos mediante contraseria 0a crear y analizar encuestas Web.Adernas, para facilitar aun mas las co-sas, la mayoria de los ejemplos que sepresentan aqui estan disponibles enforma de suplemento gratuito que sepuede descargar desde la Web de PCCuadernos.Todos estos proyectos tienen por objetopermitir asimilar de una forma amena ysencilla los fundamentos de la sintaxisde PHP, ydespertar la imaqinaclon dellector para que pueda sacarle partido aeste lenguaje de proqrarnacion con suspropias ideas.

    Mikkel Franck, [email protected]

    Todos los productos citados en este manual sonmarcas registradas 0marcas comerciales. EI au-tor y el editor:declinan toda responsabi/idad quepueda surgir de la utilizaci6n de los datos 0 pro-gramas que aparecen en este libro.

    http://www.pc-cuadernos.com/mailto:[email protected]:[email protected]:[email protected]:[email protected]://www.pc-cuadernos.com/
  • 5/9/2018 N28.PHP5.PC Cuadernos

    3/77

    Protogo 3

    Pr6De modo que quieres aprender PHP ....mU)1bien, Podras: hac r que tu p ag i.n a W e b sea masdinamica. Adema r e franca mente div:ertido yno tan 'ompliead 1CODlO pueda parecer.Es te C 'I 1I ac i,e rn o esta enteramente dedieado iIPHP. E n un pr6xiJno titulo, hablare deMySQL rsu relaclo n co n este len~je, yt,attibien explicarernos como erear pagUlascon b~ies de data .

    , lQue a ,p re lild era s e n e ste cuade-rno?En est" cuaderno 'e ofrece una introducclen allenguaje de programaci6n PHP. Concretamen-te, desCllhrIT~is:u e e PHP y c rna funcionaorne Instalar un ervidor Web 10 al C6mo trabajar con variable. , estructuras decontrol, expresiones condioenales y budss Como progl'iUlU1I" un contador ..un lilrro deisi tas y una encuesta Com , leer ilujo de noticias RS C6mD analizar formulartoe V envier el con-tertide pur formmail _ C611110proteger pAgi l lZ l .S mediante contrase-fia C imo comurdcar la fecha y la hora y treba-jar con cookies

    Requ i, slt os , p re v lo s1ara este cuaderno, necesnaras tener buenoC'oJ i loc in t ic l1 , tos de HTML. Asimlsmo, asumi reque te sabes desenvclver correetamente conels' terna opera rivo. Deberlas abet como:II Abrir I Explorador e Wi.:ndows(Finder enel ca 0 de Mac) Trabajar con carp "hts }' archivesAdemaa, taml;ljen espero que tengas activadasl as ex tens iones d archive. que 1&tU tim il v er-sion Windows oeulta de forma predetermina-da,

    goEste eurso se bass eFI un sistema Windows. Sinem bargo, puesto que P'HP'es Ut'11enguaj'e ir!de:--p en die rj te ed e la plataiorma, t.ambien podwaplicar rnis e q :> 1icacio nes a un M ac 0Linux.E ste 'CU lId e01 .o p ue de util'iz aJ ;se ca si indisl :bJ-tamenl'e con PH P'4 ocon PH P 5, Las dife-r en cia s en tr e amb as v er sio n $610 af~chi J1 a lI lector de noucias RSS (p ag .,6 'n.

    S abre e I a u t o rMe llemo [ohann-Christian Hartke, tengo 3 'ai\os,y soy t'lieniiin.Estudie Iiterature y fllologiaolpem dado quecon esto es diffcil g aJ 1a rs e I a v Ida , cam bie m isestudios por Ia Informatica. Desde 1996 brabajocomo autor periodista espedalizade aut6-nom, y cada dla me g uiS ta mas 0 1 1 trabajo. Y a10 l ecro res tambien: has ta la fech a he pub lica-do 35libros y 30 euademos, Suelo escl~bir re-gularmente para revista alemanas de informa-tica.Pero no he olvidado 10 difici1 que puede se r es-te tema: yo tambien dlmis primerns pasos ytuve que aprender par mi menta con gran es-Iuerzo. Por e-so te explicare todo 10 que s e talcomo lo comprendi.S up lemento con archlvos de e J e m p l o2 .T i ene s p r obl emas al cQpiar el c6digo? lNo hayforma de que Uti script te fund one? En wwwpc--cuademos.com enconrraras gran parte de 10~jem.plos,para su.descarga,Y p ara te rm in ar , s610 me queda desearte q1.1edisfru t e e s aprendiendo 1 HP.

    [ehann-Christiarr HankeIt: roYW I c l 1anke de

  • 5/9/2018 N28.PHP5.PC Cuadernos

    4/77

    4

    l.Que es HE)..'traftamentc, no es il1gles, ni franc~${ ni es-pa-fioLPue e l eanadiense-danes Rasmus Lerdorf,

    Los d l1 /11 . !ses 'SO' IJ cirlaadllJl{J$ dcllwllrdo: f lHp: / !h!1 'da~f .mmConfa elaiio 1994. Rasmus quena comprobarla acogida que tenia su UIJ:r1CuJUllLl pl.lblk~dGern lines, y sin p~tder tiernpocreo una sene de"comendos de servidor": acababa de erear les"Persona! Home Page Tools" [PHP). Sin em-bar:go,lo 111M imporrante en laWeb son losfomularios, por 1 0 que' no es de extrafiar queRaSIJ ' lUSanadiese pronto un form Interpreter(PI) para e l an~lisis de fvrml .l Jar ios .En 111 '1 i: ioe 1995, R asmus Lerdorf -presen to laprimera version de P'HP algran publico, y lohizo a rraves de un fl,ensa:je en el grupo de no-r ie ia s comp . ln fo s y st ems.WW 'W ,aul ho r in g , c g l quellevaba par Uhllo "Announcing the Persona!H om e Page Too ls (PHI' 'fo ols) versio n 1 ,0,",Rasmus Lerdorf publico sus "tools" bajo la 11-cencia pilblh:a GNU, Estabaneacritaa e.n C Y ,y.a e n a qu el e nto nc es. perrl'\ilial~protege,!"'P~gl-n as c on c on tr as efia 0 crear LIn llbro de visitas.La comunidad de desarrolladores empezd .< 1 in-reresarse por PH P IFI y en poco tiempo PHP Sf'corwtrtio en un elaborado trabajo de equipo,La ultima version dispontble de PHP es la 5.Acrualrnente PHP se utmza como aeronirno de"Hypertext Preprocessor" es decir, como pre-procesador de p

  • 5/9/2018 N28.PHP5.PC Cuadernos

    5/77

    l.Q ue e s P H P ,Y pa ra ques ir v, e? 5

    PF-]P no cuesta n'i un centimo. E ste lenguaj~ deprogramad6n se distribuye enel marco de unellcencla open source. POt 10 '1ue 1codigc hien-t es abi rto y cualquiera pu de censultarlo,Se trata de un modelo de Iicencia que me pare-ce LllUY positive. El.softwere open sourcenun-ca "llnmara a casa" sin avlsarnes nirms.espiara"a lo gran hermano", Habituelmente.Pl-ll" seinstals junto con el . ervidor gratulto Apache.Apache es el servidor Web rob popular en lared.~Alo 'amien lo adecuado

    De acuerdo, PH P no cuesta nada: pero si que-rernos aliadir PHI' a nuestro 9 i tio Web, necesi-tarernos un proveedor de aloiamient queofrez -a soporte para P H P, D eberas taner esteIactor en cu 'nt" a la hora de eleglr ttl provee-dor, ya que de 10 contrario no fWldonara nelda.

    Pi t 'nSJ I so lT ll io i ll ;; u / rec f ' S(lPtll{~ PHP IMy 5QL (/ f$ 1 l~1 9 5al'llw!lPlensesolutions es un proveedor espencl con.ano de e periencia, su oferta ofrece una!TIu. buena reladon calldad-precio, Sin embar-go, hay muchas otras posibilldades. En Espafia,p n r ejemplo: W'NW.a r s y s . es 0V Y W W . a s C f 3 n s . C O O 1 .Aunque tarnbien se puede contratar un servi-dOT 1" 1 Estados Unidos: WV'N/ dream tost.corn,

    i ,Que puede hacer PHP? Todo , 0 casi todo 1 0que L1J l a ue or d e sitio s W eb amb ic io so puedaimagirsar. ~,Necesitas un contador 0un libro devisit-as? Ningun P" iblema, En pocas lmeas decodlgo habras terminado, l uieres mostra lahera 0 utilizar cookies'? Ne hay nade mas efl-cillo lQuieres comprobar si se ha rellenado elcampo de un fOl'l11u1ario? Tambien es muysencillo. Puedes -olver a rno trarle a l usuariota d as lo s datos del fO Tffiu larl .Sin embargo, PHP es especialmente aprecladopor Btl gran cornpatibilldad con casi todos 105sistemas de bases de datos imagfnables. Lacombinaeion ma usual enst senti do esPHPcon MySQL, puesto qu este sistema de ba ede datos es gratuito.a ntfS im n trinidad com puesia par Apa-che, MySQL.y PHP se ha eonvertido P ' r c 1 C t i -camente en sin6nimo de publicactun Webj ~asa a en una base de dat ..

    Sin embargo, para empezar, n necesi taraMySQL: veras glle la mayoria d ~cesas tambiense pueden hacer sin base de datos. Detodasformas, si te lnteresael terna, hablare deMySQL en mi siguiente cuaderno dedicado aPHP. Si el si t rn a de programaci6n esta man-tado . obre un ser- idor Well Linux, se suelehahlar de LAMT>(Linux - Apache - M ySQL -PH?), m ientras qut" Ia variante que propongopara 105 archives de pnreba de este cuadernoes V1A Iv lP (W=Windows).LE s fa c il p r og r ama r1Depende, Si se tiene experiencia previa, resultanl~!.1cileprender un segundo Ienguaje deprogramacion, de forma parecida a 1 0 que ocu-rre con una segunda lengua extranjera. Sinembargo, a l prlncipio es bastante complicado.Tarnbisn debo admitir que yo necesite alguntiernpo hasta llegar a comprender correctamen-te conceptos como el de las e rpresion s condi-cionales 0 los bucles. IYtoda fa sign cometien-d o fa llo slPor tanto, no hay que desesperar si de buenas aprimeras no se ntiende mucho. Intentare e: -plicarlo todo d sde 1principi d form~tansencilla, detallada y clara como pueda. l aadelante.Ias cesas se iral1 complicando.

  • 5/9/2018 N28.PHP5.PC Cuadernos

    6/77

    6 l .Que es PHP y para q \ J , e s i r ve?La pa.;;ienc ia es la madre de la clenclaA J igual que cuando se aprende un nuevoidioma, en el ca 0 de los lenguajes de progra-maclon tampoco hay que olvidar ,] dicho degll la pacieF!cia es la ' madre de Ia ciencia, Oe-d ica riernpo a PHP. Repite los antiguos scripts.Prueba algo nu vo, Bu ca maL material deaprendizaje DIne el tema, Analiza los scriptsdisponibles en I,nternet y adaptalos El tus nece-sldades,Hay mucha cosas que son slrnplemente intode 1 0 1 experiencia,

    (Quiere saber mas? Entra en Internet des-carga L a amplia doorrnentscion en linea)1 1manual oficial de PHP. Como obra de consultsde funciones y cornandos, yo recomiendo Istradu ion E l l pafiol del manu I oficial dePH?:~ php.netlmanualleslSi desea descargar Idoeumen to directamentea tu equip Ical, ace de a:w w w . p l . o ne l rdown load -docs .phpAqui encontrares eI manual en ver..ion HTML,cemo documento PDF, para Palm PIlot e inelu-so como archi de a uda de Wit,dows. Estaultima variante es la que m - parece mas reco-mendable,

    Para todos los denws tipns de archivo, necesi-taremos un programa capazde descomprimirarchtvos RAR (por ejemplo W-inZip). Sin em-bargo, el erchivo.de ayuda de V\rindows sepuede descarga:r directall'lente en fO'rlI l ,al 'oCHlvl (extension. chm),

    ,u.... m!~o a If-,,~ ndII ~ .. ~oLQuees PHP?~If~ 111M. . : I I i p. . . , r : . ~.a 1~' Jl~'" I o . t ; , l ! l " f~'' ' ' ' . I~~",c"~lr.fllt.M"'''~' .f"Iif*'PltbQJ rJt 1I~n'"~n*)t~ ;J11:l~gl!bU ~fJ'~11.... f .t oC Iu ~~ Q . " . r r"jJ,~111i :Ej.4JHI!.I COIU"." "I:I.J~ ~ ll 'J l'U r .. ;_ , tl 4H ~t'{II " ' J 'I t iAp~~ L . . . . : . . J r l ! '~ ,u :DH"

    ~tl~"'l"'b-K~"'=~_;,.. ' = " i . . .~,f_ .;bt t o o - t . "

    l ' Iwn lt . i l ~"~-t ~ 'I""~.' fIlm'IJ ,"'" . 1 0 7 l . ~ f 1 P l nQi~....-rU" - "~lll fl. 1 H o Q t J,I~t(PI'" f , (W i \ . : ! ~ ~ : . iA,,,,,,..,.~:FlI~~1~1~~t~~:4~~C~I:~:":I(~

    p;j'? 1I i I1.1b. ~ {~l ll'" A I finDnl " ' ; l w l i l ! ~;;IYi;:If"J o."U1.hJ.Ji f o t l ; f I ! iI .o fl li !h I . .. ., _1 f Jl ,l~ J.rt'I l.lhbjl) SIIC ~} "'ffI'i

    E i m(mlla/ ' e f t ! PHP est l f d ispOl f fb le ct'lrW IIl 'tllitlO til ! r l V " t ! aI f ' W im lo 'U 1 S 'Para consultarlo, basta con hacer doble .clic e'11e te archive 'ISf abnra el manual, Desde aquie pueden consulter todas las funeiones y co-mandos. Yo siempre tengo eata ayuda funcio-nando en segundo plano para. resolver dudes,

    http://www.pl.o/http://www.pl.o/
  • 5/9/2018 N28.PHP5.PC Cuadernos

    7/77

    ~nsta la r un se l1 lido r loca l con P HP 7

    Instalar un servl or 1 0 a conSi quie.res aprender PHP, deberas poder probarlos scripts que crees, Siempre podnas publiearcada archlvo que programes en tu servidorWeb remote con so porte pam PHP y probarlo.Estaserfe la solucilm m . a , eneilla, pero a largoplazo tambien Ia m a cars, sabre. todo si toda-vfa no' di pones de una can xi6n a Internet dealta velocidad y tienes que conectarte a Inter-net mediante el acceso teleforuco a redes. HavW"IB forma muy facil de ahorrarse todo este .trabajc,

    Mi sug eren cia res que trebaje offline, es decir,en tu propio Pc . Instals en eI el mismo pro-gram a que se jecuta ell el s rvid r de tu p ro -veedonel servidor Web Apache. Para poder"reproducir' los ejemplos que presentare enI!l~te cuaderno en tu disco duro, deberas insra-Iar un servidor Apache local con PHP. Que nouncia el panlco: el servidor Apache no es nln-guni l lgran maquina qu vaya a cllpar espacioen. ru ca a. Se rrata de un programa de c6digoa ierto que se puede lnstalar en el disco dUTO.Antiguamente era necesario descargar e insta-lar por separado cada W10 de los distintos ele-mentos: servidor ApaChe, PHP, MySQL, ere..Ademas, despues de la instalacion habfa queaplicar una aerie de ajustes de ccnfiguracion.Para ella habia que recurrir a destripar crlpti-c o s a rc h ive s de texto,EI m r u , mlnimo error en este prot!eo podiapJ."Q~(car que no funcionase nada. PerOe50e s c osa del pasado : h ay o tra eluciQnmej'O.f.

    Por suerte, exlste un fabulo 0 programil quep ue de I nsta la r pO l' ti todas esta 'C05as d fo rmaautomatlca y (en ,e) 9 9 < Y o de los casas) tambiense e nc

  • 5/9/2018 N28.PHP5.PC Cuadernos

    8/77

    8 Ins ta la r un serv ldo r lo ca l con PH I'

    XAMPP Iunciona bajo Wimtows a partir de leversion 98, S in embargo. t ar nb ie n ex is te n V3-n a n t e s d e XAMrr p a r a Linux y M ; ; I. C :as, i.Qtleversion de )(AMP? es I~ adecuada para H ? Paramis exp li cac lones, supondre que 1&que te in-teresa es la variante para Window!:i. Perc tam-bien en este ca..o exisren tres posibtlidades.Yo r ee om iend o e l rnctodo B : la~91/ l1acu)J 's inl us ta f ndp l . E l archive de Instalacion ocupaW10$ 23 NiB. Y enseguida nos OOJparWllOSde dl:lSC8ligoar}O.A ccede a \NWW .apache :f ri e nd s .o r g /e n /xampp -wmdows.htfl1l'Y busca el ,j:nC1.l10 XAMPP l.5,x (osuperior),

    !U.Wilji~I~,I.'" oJl

    ' . 1 1 _ u n . . . .. . ,... lC! '~ r~1I' I I ! !.I il~.It+~":-C1

    DI.'/J':flr~11 IIIimri!'ll/ll(~.lmprimilIa (PII 7~Zip, !IS 111qw. ',1,'ljpl1 I , I \? , W : : . ,Haz elk en Ia en trada E X F (7 -;. ip ) y esperaunos instantes. 51?abrira un pagllla de SourceForge, en [a que deberas seleccionar el mirrordesde el que descargarel archive. Haz die encualquler de 105 ...mculos DllWIl!o11/1 de fa co -lurnna Dm.('I~Jc!fIIfy tr as lim o s s eg un do s se ini-ciarala descarga,..._'~t.' '. ', .11 ~ I',I. ~ J... ~ ' " ' ! ' - , 1- - J1I ~_.:';Cuando termlne 1~desca rga, deberfas tener enru disco duro un arehtvo llamado ;i;dmpI -',; r ,- .,~. xe .. similar. { l.a '( correspcndea un manerode v er sio n, q ue puede 11'desde 0has ta 160 mas) .Para nuestros ejemplos. instalarernos e l nuevosistema en Macarpeta _: '.apac he r r iends.,

    D escomprimir e l archlvo .exeDescomprime ei a rc hiv e .e x 'directamente enla carpet" C ; ia pa eh efrIO 'n ds . P ar a e llo , haz do-ble clleen el erchrvo KcHrIP?I?1,il'132-i. !). ;. ;. , ,=xe yselecetona la carpets de destine en la ventanadel cuadre de dialogo:

    e ll e sle ( '! .ji N iI 'o d e d j~ IQ g ~ d t'lJ i! figllmrC : \a pm ;F le j1 1e nd s\ . P o rn 1.'(ll1fi7111.111' e n a cc i6 n, h uz c l / t : CI I. ,Ext t .ru: t " ,De este modo habrernos descomprimidoXAMPP en ] 1 ' 1 car.peta ap,,'che t t" 1.s~Presiona F5- para aetuallzar lavista.Abre J < 1 carpera ~ampp y has doble clic en el ar-chive set;:up_xampp, bat..

    _,~-~._..~( < > 1 1 ' < " ' " " .:Jlo!~'Iito"lP. .,1,,",10-.,..,. .nd!.._r,.- .... "t.~~h.,,", -1__ ""'1......_

    1 1 r ' 1 1 I 1 l " U " ! ! ' : ' ~J_ _ JtJ '! I' Ii !I :fJ t'll~._,r~:.o~.JI'c

  • 5/9/2018 N28.PHP5.PC Cuadernos

    9/77

    Instalar u n serv ido r loca l con P HP 9

    a podemos iniciar el servidor Apache y,eiservieio MySQL. Para ello, abre la carpataC:l.apachatrlends\xampp y haz doble die enXd,[lIPP sa, ext!para iniciar el servidor APfl'pche )' PHP ty tambien 1 \ 1 1 ySQL) de una sola vez.

    : < 4 r n p p _ s t o p , l ! ! x eE i ar c hm o xmllpp_stm'f.l!xe inicia A pa ch e, P HP yMy~QL.En ningim caso deberas cerrar la ventana deDOS que a bre XATV IP P.Dejala ebierta, ya questa ventana garanti2a el funcionamientode,pache y MySQLPara fadlita r las casas, puedes creal' un aeoesodlrecto a la carpe.l'a}:afllPP enel escritcrio. Deest, mod podras seceder rapidamente a losarchive para iniciar y detener eJ servicio.l. Fu n ciio n a A p a che ?zQuieres comprobar si funciona todo correc-tamente? Abre el navegador y escribehttp://localhost/ en La barra de direcciones,y presiona [ . . J l r r t r l J l . Se s o m a una pftgina inicial,'n It!que deberds hacer die en Spimish.XAMPP te duni la bienvenida COIl su propiapagina in ex .lu:.mJ,~ 10hal'l:'i en espafiol, Masadelanle podemos elirninar e ta pagina.

    , ~1.IIWTljIITII

    - ; 4rN ~,~~ - : m {~I~ ~~t,:rnl~~~~;~Q~ Uj~yt.h,p .J~lIIfr~W't.q.~-'t~ Ilu !'lL"'l"f'I!" JiI

    S 1 tOl t l l /1lJ i da b ien , Iwras { 's f ll p& .g i r ll l.

    ill ervidor Web local Apach ya funciona, Y lapagi l " la principal de X A1V IP P lambien ofrece unpar de dernostraciones, lis asombrosa la facili-dad CO J . ' ' ! la .qu,e se instala XAMPP. Si deseasdetener e l servicio, basta con haeer doble clicen e l archive xawpp_s to!" exe.Ademas~ n o estas limUado. ten.et que esGti-bir ht p: 1/ .\..ocalhost.. De O l ' 1 T 1 a alte:maliva,tarnbien se pued eseribirhnp: 11127. 1).0,t. Inch, a podemos usa!ht "'}':IIIIomb~adelp.li'de.nddQr.

    He decidido agregar un marcador de esta piil-gina a mi navegador Pirefnx para seceder masrapidamente 1 '1 "Localhost".

    PI~ r ! l ng reg l . l t WI wl ' I fmdM, p,'(!si(l l1l l [C~I+fdl.Si has "comprendfdc" el prlncipio de la insta-lacion, bservaras que XAMPP e.s muy fiable yraras eces da problemas, En Ia rna oria de ca-os no es neoesar i realizer ningun tipo dajuste de ccnfiguracion, ya que todo se instalay cc nfigura correctarnente de forma eutomatt-ca.Optim a n o sig nJ fic a s6l;lIUTO. Las opd0 rr espredeterm1nadag s61.o son indicedas parahacer pruebas fuera de linea, no , para la pu..blicad6n re 1 en Is W eb,

    Ocupemono ahara de los problemas con 10'$que alguna vez rue he ropadn cuando Apacheno se dejaba lnstalar correctamente, Puede de-berse a distintas causa : Ha y otro servidor Web local activo, por

    ejemplo TIS(Intern t Information Server) emel caso de W indows 200000XP Pro fe s si ona l.Ell ese C

  • 5/9/2018 N28.PHP5.PC Cuadernos

    10/77

    10despues de usar XAMPI' \ ! u e l v e l t " . i a activsr:la ::>egllriclad antetedo).

    Un firewall local ne permite el buen functo-nam lente de X AlY fPP_ E n case de dudas, esmejor apagarla tet,'poralmente.

    5i usas Skype (WW\ I I i_skype_com) para tu s Ila-rnadas, el eonoddo programa de telefonlagrilhLita. debes saber que Skype bloquea elpuerto'SO y la (m ic a soluciones desactivarlo.completarnente.

    ,Todavl,,! no Sf ha sokrcionedo tu problema?COllsu!ta la US41 de preguntas rl'ecu~ntes deXA1v1l'Pen:.apachef r lends. org /en{ faq"xa ro pp w l n dows . htm Iy le e todas la s pregunlas y respuestas (en in-gles).

    ,Tienes varies equipos conectados en red? Elultimo metodo de acceso al host local medianteel nombre del ordenador correspondiente tam-bien funciona en redes con varlos Pc. Escribe1 1 t t.p r II rep!:! I,si 'has instalad ('I las pcigjnas Wellenel equlpo Pep e ,Los usuarlos de OIT05 equlpos podran accedera tu pequeua W~b < I traves de HlTP. Tener unservidor Web HlTP propio es una exeelenreposibilidad: ideal para. una Intranet

    I,Has instalado XAMPP en una ted de-em-presa 1 RecUe rda l qu~ l a I ns taUac id ,n e sb li nd arde PAP MySQL -au 4$ segl.lr;1l. Ueberas- es-

    I tablecer las rontfasenil5 de ace-esc necesaries,Sin emba;fga ...para las explicaei ioMS del (ua-demo no nos ocuparernos de ello, pam quepuedas accede! lipi!da ~. fac i1menle el servi-

    I dor Web Apache .

    l.D onde esta Is p a g in a d e in ic io ?Velvamos ala pagina inicial predererminada.Hast-a ahorEl, Apache te rnuestrs junto co nXAMPP una pagina de prueba prepla, Ennuestro caso , la pagina se encmentT@ enC;\apacl1efri~fld5balil1pp'htdot:sSin embargo, s'~guro que te interesara paderponer lu propio con tenido.

    Abre el edito r d t 1 C ) ( l 0 5 ' Y crea Lin nuevo, 1 ' . 3 0 -cumento PHP . Lo llamaremos info" php (exten-sion .php) y 1 0 guardaremos en 1

  • 5/9/2018 N28.PHP5.PC Cuadernos

    11/77

    Ills ta la r un serv idor loca l con PH P 11< h l > I n ' ; : : ' . l c m i l i c 1 6 n . s : o b t e ! : > H P < / h l . >

  • 5/9/2018 N28.PHP5.PC Cuadernos

    12/77

    12 I ns ta la r un serv idor lo ca l c on P H PI ns ,ta la cio n de PHPEd i tAhora ya: podemos in tala r PHPEdit. Haz docble el i en r~ lpE: r . ii se up. eXe y sigue las i ns -trucciones de instalaci6n. Esta version del pro-g rarn a ccs lildisponible en ingles, frances 0 ale-man. Optaremos por el ingles:

    ~.tbrtjo-SI);rI~"""-'_~_~oI~"'''I,..''''b.I~. . . . . . . . . .~---I

    Pf~W~1I_.,11!l'l>i!I"rlf1j""If)[;,,"~ ... ~I-i~~~ro:III.-J tljJ~.~~~~~~~~~-~":~~ . !Iiu ,~~l! ..tliij~lf;ii!i

    I r rs#Il/ { ! PHPEdi t I ! aS{ I (1 P(l$( l Y ru:eptn la l i cenc ia deil$uar"Il).Ten paclenda: Ia Instalacion de PHPEdit tarda-f a unos minutes, lncluso aunC ] l . 1e to PC see po-tente, Cuando abra I pr gramfJI por primers"~Z, te prefP.l'ntara si des as qllE~ escriba UH.DSajllsle predetetminados. Con testa Yes, 51pro-grama te p re gu nt a! :A c on que H pos de archivedeseas asociarlo -activa com o m fnim o t-a ca.si1Japhp y haz lie en OK.

  • 5/9/2018 N28.PHP5.PC Cuadernos

    13/77

    P rim ero s p as os c on PHP 13

    POI:: ' in nos ponemos manes a la obra. En estecapitulo ...presentare los nU'l.dame.ntos-d.e la 11.0-taeion de PHP. T mcstrare como presentar da-tos sill ninguna complicacion.Asimismo, tambien te presentare las fabulosasvariables. Perc vamos pOl' partes, em.pezare-mos por el principia.

    Lo pnlm ero que deberem os hacer es iniciarPHPEdit y crear una carpeta de iercicios a laq ue llam aremos phI'S. D icha earpera deberaencontrarsebeja la carpeta raiz htdocs. Pot tan-to, iguiendo nuestro ejemplo, Ia ruta de accesosera: c: \apacnefl'leL\d.s\y,all) p\htdocs\php~.Podemos usar el misrno P:HPEdit para crear Iacarpeta. En Ia esquina superior izquierda delprog ram .a veras el modulo File Explorer. Acce-de a la carpets hcdocs y haz die en el Iconoco-rrespondlente para crear una earpeta, en la es-quina derecha'J w N o w F I 'J id e l

    _ _.J anll(1l, lmoyt....J~-..l ~bIn. . . ;J f~IIFlP

    htdecsl 8 l C C e I

    _J r c n l $-' lorbk fden...J 11m. ! l~

    : P d f'-I IlhPkUls_J rcallich!.rl

    ..:J ~pp~ NllwFo!de linN, . . : : J

    S I! Ir a c reado IUI(7 " u r o r r ' C f l 7 7 1 e l . a 1 1 1 1 1 I l t u i a N e ' l 4 t Folder .Sobreseribe el nombre pradeterminado de lacarpeta, cambiale por php5. Aqui es dondeguardaremos todos lcsarchlvos de ejemplos yejercicios.

    co HAiunqu0 ~uil._T(bSlaS ~n:c-hfvos c.titetblmE!nt~en c; 'i:I,pachEhienl;!13\~.amp-P\/.T~-dQc-s\!"hp5:,pam sceeder a c I10s a trav~sdel rut 'egadorsi mpee dewas escribrrht:.tp: I{1JCa!hst;/php5:.

    Hello world] (Hola mundo) suele ser elprimerscript que aprende ell cualquier lCr : lg 'u i l \ je deprogramecicn. Puest que no quer mos rom-per la tradicion, te preSet1tare el conocldoscript H ello w orld Ell, PI--lP.Abre PHPEdit, ies que todavia no 10esta . Po-dr,a ver un archive vaefo , preparado para queescrtbam os en elias comandos deseados, Tieneeste ccdlgo:"-?phpj*'

    j @'YEl:'sion $ld$ @copyr.1gh 2003~-I

    ?>Sin embargo. esre archive no nos e de muchaayuda, ya que' no se trata de un archive HTMLsino de un archive PHP puro. Cien-al0 y creaun archive HTML vacio, Para ella. basta conseleccio nar File INew IHTML . Apareccra un ar~chive mML vaclo en PF[PEdlt.Prepare el ar-chive como si~e. Deia vacfo el espacio entrelas etiquetas

    < / j >.

  • 5/9/2018 N28.PHP5.PC Cuadernos

    14/77

    14 P r i m . e r o . s , pasos c o n P H Pblico internacions], Y porque deber tas practicertu s ecncclm iento s del id :i:o rna.. , y 11.0 m e que-dan ya mas arg'L l f l .1ntos. E l'I c u alq uie r c as e, elcod tg o de U 1mayor . i r l l d~ ejemplos del-cuadernoestara en !lllgles -no te preoc :upes, son m uy fad-les de entender.Guarda.rel a rehlvoIln.momento, 110S estamos olvidando de .1 0mas im . po rtAA te : glla:rda el archive inrnediata-mente, y en lacarpeta correcta: p,hp5. El 110111-boredel arch iv e deb e s e T he 110 . ptlp.~Si1

    It~Z$.1Q.20Q;5~alS

    l.lH r n: d i'I N I la I.W1)(ttifCi'rtt~"p{It!JhwU:: ~II (1 pnt!' htferio/'del e , " ' 1 , l o r n d a g ' d l! an:hiws s e mlli!$ttlln f o d i 1 s l o s a r c b iv o sc~mt l! ) l' id t l S ,t 'u l a ' C'GtpI ! !Ur $t ' l rcd.nlmda.Para familiarizaraes con el funcicnamiento delptograma, cerraremosel archive. Para ello.se-Ieociona Fife IClose o ICtlntmlJ " i 1 i l , Y r ibl 'el0 denuevo, hacienda doble die en el nombre delarchive en el explorador de archives,E t h ll u e ta s P H PY a basta de abrlr y eerrar: a p artir d e a lito ra,preg ram erem os en P FIP , Y para e llo , una reg iade oro: 1 ' ; ; 1 5 etiquetas del eodigo PHP se tnsertansencillamenteen un dccumento HTlviL co-rriente. En p1iindpio no importa en que punrod l2 ldoeumen to 51' ! insertan. (En e l e jem.p l0 q ueveremos. insertaremos las etiquetas P H P en trelas etiquetas !-ITh1L

  • 5/9/2018 N28.PHP5.PC Cuadernos

    15/77

    P rim eros p eso s co n P I H P 15echo r'Hellu ...,.odd~ "I;Al iguaJ que en C++, Java 0JavaScdpt, lossal-tos de linea en el codigc PHP exigen un punto)' coma. Sabre todo 51 el script tieue m.sde limalinea de codigo. ya que de 10 contrario aparece-ran mensajes de error.

    r3n:@ error pane error, une;tpe::ted TJl :C 'HO e:~ (If"If!c: .ap::lclle[rit!ttdslr3lDpP ImloH' plip5,lIel1Jo,plip Q i l Ii J H to

    U ll error HpiC

  • 5/9/2018 N28.PHP5.PC Cuadernos

    16/77

    16 Va. riab les como comod in va ria b le

    Va i bles co oY I legamos par fina las v aria bles. N o hay nin-gun Ienguaje de' programadon que no I~ utili-c e o Pero antes de nada, permiteme explicar endetalle el concepto de variable.

    Las van, bles son huecos de memoria en lamemoria del ordenador, Imaginalas como COli-tenedores que estan disponiblas durante la eje-cucion del programa. En eatos "contenedores"se pu den IIalmacenar' alor s mientras seejecute el script.No importa si almacenamos ruuneros (Itexto(eadena de earacteres)."Eningiesl Ia s a c l lE U i a s d e atracreres se s ue -

    II len D am ar strings. __jDurant la "vida" de una variable, podremosacceder a . los valores almacenados en Ila, Y no5610 eso, sino cj1Jelos valores de las variab estfl.nlbith1 se pueden cambiar. Piensa, por ejern-plo, en el resultade del caleulo de un carrito deIa compra. Par cada nuevo producto que settgrega

  • 5/9/2018 N28.PHP5.PC Cuadernos

    17/77

    V arla ble sc om oc om od fn v aria bJe 1Escribe el esqueleto de .undocumeneo HTlVIL(0 selecciona m~evamante File INll-wIHTMl enl"BP 'EdH). Par a l 2'! :lt ce jempJ.o , saludaremos ening1~ ~1 e a _ - i t o ! ' de PC Cuadernos, MikkelFrall(lk:

    - ---fJ.~~~~r-Lillil"f!r.~~_-~:...._-.:Ei

    V'"riables

    L. $t r i n s O _ C I 1 d t ! J J 4 n l m m : r m l l d a ell la1Xl . r iab l i ' ! le jll1.Msfrll( I I t ' ll ln tl t :gat: lur (OT I 10 HTML..Crea un nuevo pa-nato escriblende las etique-tas ..:p>.. /p>. (No,~snecesariotpero 5egt. 'i .n Innorma HTNIL cualquier texto debe apaxecerdentro de un elemento de bloque). Insecta lassiguientes lfneas PHr dentro d e - l parrafo:..-:rphp$N"Hns ~ "thkkel";e t: h o " 1 J ~ 1 1 0 . .. b > $ N an l e < / b . . - , niCE t o l I \e i ; : 1 :you! n;

    1>Abre el docurnento en el navegador. Si todo hasalida bien, deberias ver en pantalla el textoHei10 Mikkel. nic e to 'm eet y O I l . r _,Queeiecto tlenen estas lineas? En la primeralinea de cadiga hemos declarado 1",variable, yal mlsmo tiempo la hemps inidal.izad:o_ En esteejemplo,Ia "rellenamos" con la string Mlkkel.La s eg nn da lin ea: sirve para presemsr eleonte-nido de L a variable con. un aspecto mas pudda,:A tenc iOn l I ' a . , ;rariable-(~a: 'I\~} ql1e l1enarauc5d~ c o n t - e - n i d o Be' e n r u e n t" ! :1 : 1 a In I zgwer cla . 1 :1signa d~ ig :u al e t lUI Gperadol'" de-asignaci6n(",).Lasstrings st~mpr-l~seescriben entreeom fI la ,( ,I , I ') .

    Importante: en esta ocasion, el texto que siguea echo debe escribuse entre comlllas, ya ,clue esel unlco modo de que PI-ll? busque variables yanalice su contenido, Sipm el contrarie, loquequeremos l ; ! S gl~al:dar 1 . 1 1 1 valor mml.e-dco pa,ra\.U1t\ variable, no deberemos ussr conullas, Sinembargo, en el ejemplo anterior se trata de unacadena de caracteres, es dedr de una variabledel t ipo string.

    Pero, como y~ahemos dicho, no tenemos que_j.'rt0Uparnos por el tipo de datos eneste mo-mento, PEP es.inelaso ~apaz de conveetir rui-meros (que hayamos escrito entre rnmillas poe r ro r ) au roma t ic amente .de l tipo s tr i.n g a unode 1.05 tip os de ruimeros. Y viceversa,Conc ate na r s tr l:n g s y v8'riablesSf sabes algode JavaScript (u otro lenguaje dep.rognu:nadont en este punlo seguramente teestaras preglmtando dende esta el operador dconcatenacion en Laexpresicn cen echo. Por-qu~ normalrnente es necesario concatenar lascadenas de caracteres Oa part entre con."l:iIlasy las variebles. Para ello.en JavaSetipt se utili"loael operador de concatenacion +, 10qu~siernpre conlleva problemas pOl"que el signa +se utilize al rnisrno tiempo como operadorarilrnetico.La buena noticia 12 $ que PHP es sencillo, par 1que no suele ser necesario concarenar variablecon cadonas de caractates. Esto 5llpone unagran meiora en comparacion COTI JIlVIilSCript yo t ro s j ,e n g l. la j: es de programacion .

    Como y m hemos dicho, par lo general no es necesarie cencatenarcadenas d~caracteres y . .tsrlables, Es posfble usar el operadnr de conca-ten:acior:l., pero 11(1 es obUgatorio.5il1.1mbargo, hay un a excepdon a esta regla,en la que deberas usa! e l operador de' concatenacion, par ejemplo para laemision de valoresde funciones 0 arrays. Con razen, en PHP SI;!elighl el pUJ 1to (,) el; lugar del signo de suma,Para que comprendas bien la sintaxis, ~emos-hare elscript "HelloMikkel " en una variant!ccncaterrada !liAs "compllcada". Tendriaesteaspecto:

  • 5/9/2018 N28.PHP5.PC Cuadernos

    18/77

    18 V a ria ble s c om o eemcd ln var iable

    lTe has topado con algul1 error en e! script eone st e p eq ue nc r e je rn plo ? Cornprusba el cdigO'repasando la iguiente lista de control : lH as cerrado carla, t fti.e !l co n u n p un ro ycoma? A veces yo tambien me olvide de

    eso ... GHas empezado el ncmbre de Is. variablerealmentecon ttnsigno de dolar ($) Y no unampersand ( & I ) 0tIDsigno de P rcentaje ( % } ? 'Es ftkil teclearlo mal p rque las teelas estanmuy juntas,

    lHas insertade correctamente las comillas?Cada comilla de entrada exige tamblen unacomilla de cierre, Y pox-U ltim o: ,l.l',eal:o\ente h as a ce ed id e. aldocumento en el navegader a IT.tlVeS dehttp://localhQst etc, 010 bas publicadoen el servidor d tu proveedor de servieiosC0[llpa lib le con PI-fP? Sj abres el archi vo"normalmente" a travas del sistema dear-chives no funeionara, ya que-es necesariotener de por m edic un l.ntW :pll'e te d P I-IP .No hagas doble elk en el archive paraabrirlo, asi no .UllCIDll

  • 5/9/2018 N28.PHP5.PC Cuadernos

    19/77

    l.Bre-ak 0 salto de linea? 19

    "Break 0saito de linea?A continuacion, veremos Ios dpos de salto ql;,le1\OS ofrece PHP . Para ello, parnremoe del script"Hello Mikkel" en la primera ven j6n, sin

  • 5/9/2018 N28.PHP5.PC Cuadernos

    20/77

    20 i .Break 0 salte de lin ea ?Como podemos ver, en el cocUg 'o tuent'e el tex-to no tiene ning~ln salto de linen. Tratandoses610de doslfneas no supone un problema, pe-re.si slgules{!'olOS Insertando mstruccionesecho se crearia uria linea infinita enel c6digofuente. Aunque no $llpone un problema fun-cionat es u11problema este tico.E I comaneo new line \nPara mejorsr el aspecto del codtgo se utiliza elcomando new tine, que ern PH? se escrihe de lasiguiG:ltte f0l1XI'(l,: \njSorpl'el1dete! Modifk:a el sceipt de br eakl.pbpcomo sigue:

  • 5/9/2018 N28.PHP5.PC Cuadernos

    21/77

    Introd ucaion a la s .a rra ys 21

    Introducci6n a las arrayLas variables esean I 1 i 1 . L } ' bien, pero lque ocurrecuando neeesitamos almacenar varios valores enuna sola variable? lYsi stos valores guardcmalgt'tn tipo de relacidn entre sf? Bn e s te s c aS ( '1 S serecurre iii [as practices arrays, tambien cenecidascomo matrices < 0 lisras de valores,I Atencion:; Ia pn labra ana}! s pronuncia a~'r:iji.La pnmera "ai' es cotta,}, elaeente recae en 10aU ima s ila ba ,

    Tal como nos lndkala palabra "lists de va lares",las arrays se oomponen de varies valeres, Lll.lePHP co l .1rn ra de forma interna, Al contador co-rrespondiente se llama valor lndice 0clave(key). La clave (aqut el contadcr) slempre S 1 l ' ini-cia con el valo r O .E ste es tarnbien el caso de famayoria de [en,gua.jes de progJl'amaci611, y sueleprOv[')clITconfuaion. iNa 1 .0 olvideslEl p[:imer alor de unaalfto/ S,ie,D1PJ'8 tiene al

    I nl'1,m ero [nd ice O .,Qtle tal si 10 vemos con lID ejemplo? Crearemosuna lista de valorescen todos losdias de 11e-mana. Primero te mostrare el metodo "!atgd~dehacerlo, Mii archive d e rrrnestra se llama w~ek-dayal. php..to bueno dellllevodo largo es tantoel valor indite como el ".alor de la variable SE ' es-crlbenen una fila propia, 10 cual mejora L a legi-bilidad general .

  • 5/9/2018 N28.PHP5.PC Cuadernos

    22/77

    22 I n t r o d u cC E O I l1 a la s a rr ay s

    Ahora y, conoce el fundamento de las arraysindexadas. COFl tan de una clave (key) y el va-l r cone pondi ntetvalue). La clave ti l'S un va-L r I ndic que e a ~ib'11a aLlhJll'1.aticamel1te ern-pezande desde c 'ro. Perc: Lcomo podrlamesdecir en PHP Idla de la emana que es hoy?De ello e (l:U P'" la 'unci #n da e! i , coniunta-mente con l " 1 caracrer de' formate " 1 , 0 , " 1 , Lohanamos de la igulente forma:

    Lo bueno de la fund6n pate iles que el 0t i ll 'nbOOl cor ' rlespond al domingo. Nos vienec omo m lillo -at d ec lo , y a Llue la indexaci6n delas lllr'I 'li 'Iys 'fDmbiM se iniciA con el O.Con e l iguiente script podemos rnostrar di-namicamente e J dia de 1 1 3 sernana, Pruebalo conel archiv we""kdasj. ph. , que he incluldo en elsuplernento.

  • 5/9/2018 N28.PHP5.PC Cuadernos

    23/77

    In tro du cc i6 n a la s a rra ys 23Puedes meontrar el archive corresporrdiente 1ejernplo en el suplernen to btl' andoweekdays4- .php.

    -- - -

    A rra s a so c ia tiv as- - -

    lEstas, hartode los ruimeros Indies? E n ese ca-o . t r ilb l: ija con arrays asociativas, que no u allmdices. En lugar de ello, como key se utilizaun esquema propio que podemos definir nose-tros mismos. E ) S 10 que ignilica "asoclari-vas" _Tambien en este G,f}S'O 'Podemos escribirlasde fOOTlfl desarrclladn 0 abceviada:Fo rma desa rro ll adaSupongamos I..ll~erueremo almacenar lapprincipales capit Ie rur pea' en la variable$capitaL Com "sutitutivo del indice" que-rernos usar el c6d'igo del paf I s d sdr DF.: : OK,FR 0 ES. N iR gUn p ro blem a: el documentollama capata.lL,phpy ]0puedes , ncontrar enel suplemento:

  • 5/9/2018 N28.PHP5.PC Cuadernos

    24/77

    24 C alcu los c on PH P

    alcu OS ci-Quieres eontar con PHP ? Pa r ejemp lo, (;paracalcular IDS precios de" los productos de unatiends en linea? lO simplemente paramostratel impuesto sobre el velor afiadido (fVA) de unpedido?

    Para calculos, pcdemos usar los cperadotes decilC1.doque sin duda eonocenis de programascomo Excel U O ITO S p r og r ar l1 a s de hojas de clli-culo: ' ,~, ,. y I ,

    L o s p rin cip a lle s o p era do rs sEstes son los principales operadores:Ope rado r S ign i t i cadb Ej,emplQ+ Sllma $a=15+$Gl---I : Res1a $c=$b-1MlJ l t l pMcac iO" 1 2 3I 1 D 1 v l s l 6 1 1 $; < Iy++ A I adir 1 $ 1 + ' 1 -(s igni f ica $ 1 = S i + 1 1 )

    R es ta r 1 $'i-(signiffc .a $! = $I~1)C om o si.g on d e sep nl'f. lc lon d ,e decln ' l.~ 11$,Pl H' us a 0 1 pua"l to (')J no I~coma.Un detalle lmportante sobre losdecimales: nod bemos usar una oma como signo de deci-mal, En lugar de ello, e sigue Ian rma Inter-na:cional,' I punta.Incrementos/Disminuc i ,oneslTe han pareetde extrmos los dos ultimos ope-radores de la tabla anterior? Efectfvamente ,enPAP. a l igual C l u e - en rnucho otros lenguajesde programacion, tambien seutiliza el signa +y --, que incrementan 0 disminuyen LID aloren 1 -En pocas palabras: $counter+1- slgnifica 1 0 0mismo que $counter =$counter + 1YSeou_n er-- equivale a scoun e.t :: = Scmm te.r -1.Esra sinta xis se tntrodujo para ahorrar espa-do. Basta con recorder que + '" si'gnifka unomas .

    nPPara abrir boca, empezaremos con una sumaencilla. Guarda el script como suma ,php.E1resultado se calcula a partirde .!pnumber_.a =12 Y $numbE!r_b = 35 Y se almacena en L a aria-ble $result. Finalmerite, la variable se muestraCQnayuda de echo. Recuerda que los numerosse escrlo en sin comtllas,

  • 5/9/2018 N28.PHP5.PC Cuadernos

    25/77

    C alcu lo s con PH P 25$resU) t.ado = ~precj onet o $1v e secho $re-suJ_tad~;7>Esta vez trabajo con las variables Sp:r:edonet:oe $iva.

    . . .neto.p p16

    Logico; srcues t 10 0 ElfR, ellVA SOli H i lO su Pu des encontrar el archive de rnuestra en elsupl mente buseando ne o. php,R , e d o l n i d e oEl script tiene un problema de redondeo. lQlleocurriria sieJ producto costase 101,98 euros ne-tos? En ese caso el resulrado eris 16.3168, ,e sdecir euatro decimales, Pew en lavida real notenemos rnonedas tan.pequeftas,En esto ' cas os, pod mos usar la funci6nround (I para redondear. La sintaxis b:sica es:nOal l"ound(floa' val [. Ln pTli:!cisian])No te preocupe por esta forma de eseribir Iasintaxis de una funcion, es la misma que en-contrar en el manual de PHP.Signifiea 10 siguiente: la fund6n acepta dos ar-gumentos, el valor propian1rente dicho (tlpoj l C J ' f I i , es decir un decimal) y la eantidad de de-cim ales que se deben redondear (tipo integer) .El resullado es " L i l l a ci f r a con decimales,Pruebalo, Para redondear el v alo r 1 6 ,2 08 a desdecimale despues de Ia coma, solo tendrfamosq!,le es ribir:echo round n6.208'1 ::);Naturalmente, en lu.gal':de la clfra nOSQtrQS uti-lizaremos Ia variable $esuJ t.;!Qo.Yaqui te presento el script meiorado, corres-pondiente al archi 0del suplementoround iphp:

    round.p rpIr -

    1~3.l

    E l m su lta do d e! calClIlo a s 1 6 ,3 2 .

    r u calculo .que aeabamos de hacer era mt~y sen-cillo, lQue tal si 10mcdificarn s pa1'8 usar ple-namente los peradores de calculo? Calcula-remo e l IVA partiendo del preeie brute, EIc o'llc uL o n o e tan Inmediato: necesario den-var la formula con ayuda de una regia de tres.En primer lug ' 1 : , es necesario relaeionar todoslos valores entre sf. 1 precio neteequivale al1001 ) 1 0 . Para 100% tambien se puede 1 . 1 5 8 1 ' un LEl percentsje de NAreal se deduce de la dife-rencia entre eJ preeio neto y el brute,He aqui:mi ejetl1.plo de muestra, Recuerda quelas lfneaa intermedias se deben escribir comouna soja linea, aquf aparece cortada por rnofi-vos de espacio. La he llarnade brutal. php,

  • 5/9/2018 N28.PHP5.PC Cuadernos

    26/77

    26 Calcu los con PHPl .Por q u _ e e s ta n c omp llc ad o1...m e p re gu nta ro n a lg u no s alumnos demi cur-sO.iNo servina simplemente usar 1.196 comefa ct-o r? ' C lar o, P (l. 'r t,,)c..m r:1 '11ariante so y flexible,No solo me permite carnhiar el precio brute,sino tambien el porcentaje de IVA, y a . que heusado una variable propia para cadavaler.Quien sabe to que puede cambiaren ei futu-ro... quizas el proximo gobierno decide au-rnentar el porcentaie de IVA.

    ,Sigpe sin C C j n v e . n ' C e r t e la fonna de presenta rlas tifras?lQuietes mostra I! ' lacifra s:iemprecon des deeimales? No hay problema, para ellor ec ur ri r em o s a la fLmci6n ap d ntt(~st a fun-cion da formate a una string (0 un numero) yla devuelve (nrmateado.til s in ta xis b A sic a e s:at, Z:-~ Tl'g apr-i,n t:f (st l~g fo rma z, I,nu.xed...rqs] )

    EI segundo argumento e : s t a _ clare, es dOl1depondremos la variable ~restl J.t:ado.Sine'mbar-go, para el prirnero deberernos prepara:r unainstruccion de Ionnato,Ins trucc ion de fo rmata p ara monedaS e trata de una lnstl"ucci6n de formate m.uycomple]a que permite detallarexaetamente elformate de un mimero llegande a poncl' 105puntas sobre las ies, Siernpre me recuerda a loscodigos de formate de Excel,

    La instruceien de formate que recomiendo seIlsma ~'cn.2f. ' L a - funcion correspondlente-sellama 3printf ("-~Ol. :2:", $v,ariable).Su cometidoes mostrar siempre el valor denavariable con dos decimales. te ruego que Iiicopies ~I cual y:no preguntes por los detallesde esta mstruccion de formate.Para comprobar como funciona puedes usar elarchivo del suplemento spdTit.f .php.Il.etI!!Il 16 .S0 IE lll de IV A

    D e r!: !Ifrl !V fJ tW s ie - m p r , t: ' s t! nmes l r iw f l o ! : di ! t imr ' l ies .En cierto sentrdo, esta empsren tada conround (),: se redondean una serle de decirnales,Sin embi;ltgo. (I dlferencia de round 1), los de-cimeles que fa'[tanse Ilenan c on c er es ,

  • 5/9/2018 N28.PHP5.PC Cuadernos

    27/77

    Creac: i6n " : I a na lls ls d e formular ios 27

    Creacion y ana isis de f rmulLos formulanos son 'uno de 10 s inventos milsimportantes de Internet. 51110 existieran, i.c6mase pedrlan recopllar los datos de los clientes (nviarlos a 1 0 proveedores de services? leOmepodrfamos recibir la opinien de un leeter? Lasprimeras versiones de HTl\1L ya ofrectan Ia po -sibilidad de crear campos d . ' texto, menus des-plegabtes i botones de opcion,

    ~'~r'"== ~-~ ---A n a l l s I s d e ' fortnularios,Para los sigulentes 'jemplos, supondreque tie-nes buenos conoclmientos de formulario enI-ITML,y., que el esqueleto del formulario debe.cresrse usando-Hl'MlxDejepor 10 tanto en ma-no del Lctor la creacicn de los Ionnularios, Pe-t, i. om se pueden analizar? {,Y c6mo se Plle-den comprobar los datos deun formulario antesde enviarlo? C on P :H P_ Y es mas: es m uy senci-1 1 0 .Con una serie de an61jais de distintos formula-nos omprobara 10faci1 qwe es trabejar tonPHP.C rea r la m asca ra H TM LEn primer lugar, crea undocumenro HTMLconvencional al que llamara Eo r:rn. html. Cerrec-to, tin encillo doeumente H 1 1 v f L . M J ejemplatiene este aspeeto,

    Rellena 1 0 1 campos (ferm.hnnl)

    H ' J ' 1 I v j L 'WI> a J n . ' c t ! firm IIIIiSCf1rti p"lm ill i l l i r t u : / " , : c i 6 1 1 d erb?I05, e n e s t! ! CQ:;(J con 1 1 . 1 / ampa d e t xi oEncontraras nti rttjl ID'lplGl en la subea.rpet 'a de1s.upJem~to Uam1lda f0:nn1. Para que'no pre-qqe problemas co n otros e-xperimJ.mtosf yorec miendo crear tam~i.tn una subcarpetadentro de la rnrpli!ta d~]proyec G~hp5 a Iaque pud~i \i 'l la rnar fOJ[ml.

    nosEst es elcodigo fuenteKIML del documento,nuevamente en una variants bien sencilla:

  • 5/9/2018 N28.PHP5.PC Cuadernos

    28/77

    28 Creacion y an,aUs is de fo rmular losPersonalmente reeom lendc usa!" method= rip-os 'I,D~ este modo, el contenid del ormulario (ennuestro

  • 5/9/2018 N28.PHP5.PC Cuadernos

    29/77

    Creaci6n y amlU s is d e formuiarios 29NQta: en PHP e Isl~otralZlrm~ 6rema,da deescribil' l 9e~ net; eo~dici()t'tale buei s,t l o l . sin pereh~ S i n . emb rg~l no h~bJ8i~ de~llm ",gw'] 'e\ ' lU I ' :! 1 0$ prufEstOt: l.a: tes aD, lo l 'E:C! )mlendan,Despu de escribir In llave de abertura, escribesi"'ll1pre su pareja de cierre, a contiru ..acion, es-cribe las ~hleas,d e c 6c l'ig o e : n t r Olambasl1av:es. Lallave de abertura se debe colocar alfmal de la U-nea, de p~es de un e pacio en blanco. I D e estaforma te acordaras de no poner unpunta r co-meta I fu,al de esa llnea, Para la llave de cierre, esmelor crear una linea.propia.E J h cho de olvidarse in oluntariamente de unade la llaves es una fuente muy comun de erro-res. Sin embargo, es poco probable que te eo-cuentre en esta ituacion si utilizes PHPEdit, y Ique este pequefto y practice programa inertruaautcmaticamente la lie ve de cierre .

    - --

    Bo tones de opc i on I,

    Para nuestro siguiente ejemplo, he "ajustado" Ii-geramente el formulario. En lugar del nombre,esta vez pedtremos el apellido del usuario, Y,ademas, le preguntaremos por el tratamientodeseado ( 1 0 que nos proporcionara SlJ sexo),Para este nuev 'PI' yecte, erea una carpeta nue-v a y llamala ferm2. Si10 deseas, puedes copierlos archives de E"orml y adapter eIc6digo.la pag ina del formulario

    T lI t\Goll1bt~,r"HlJ:lIliO:1

    I TIIm\NIaO

    PII,rn c mr Qc er el s exo d el t lSIU lr'O, 1151 S,ra.Seguramente ya sabras de sobra 10 que son losbotones d.e opclon y como funcionan, Solamen tese puede seleccionar una de ambas casillas, Eneste case es justo l que necesitamos, ya que 610se puede ser hombre 0 rnujer,En e J caso de los hombres, se almacena un 0 co-rrespondiente a mascul ino en $_EaST I'gender' LY si son mujeres un 1.La pag ina analisis.pl1pUegamos per fin 1.'1 1na lisis del Iormulario.Adapta el script de atlalisls .php. A continua-cion, presento el codigo PHPrque analizarernosjusta despues, Observe tambien el espacio enblanco detras de S r; y 5!'&I.:

  • 5/9/2018 N28.PHP5.PC Cuadernos

    30/77

    30 Creacion y am\lis is de fo rmu la riosdoT'de cornparasion es obligatorkr usar-el doblesigno de igua! (=J.R~p, i tQ) : r ome , upeL : ado l lde 'Ce lB~ [ ;! i\c h 5nnPH P S~ 1 . lt tH z a e l J e b l e s i g n a de j g ' 1 . 1 a l ( - ) , .tY la parte else? En el forruulario no hay nin-gnna. otra npdon posible que I,U) sea una rnujer.En ese case se escribira Hola S r . .en el doouman-to, y despuesPl-Il' ejecutara Ia linea de c6dJ :gode debaie.de Ia estructura if-el.se. Se completaasi: (es decir, e1ape1lido),~llCa!1L

    I , . .

    & 8 . ( and )1 1 (or)

    PrQbl .emas menores de l f'a rmu la rioNuestro Iormulario presents tod.a.viaalgunosproblemas menores, Su.pongantQs que e] usuariose olvida de rellenar su tratamientc. La variabletID esta definida y provoca Ltnmensa;e de error.Sin entbal'go, tambten es posible qll.l~el usuarioilegue pos casualidad directamente ala paginaanal hi-s. php ..Si no ha: visto y rellenado el for-mulario, tambien se produdra un error.

    anallsis de rO.rmuJRlios (an~lisi...php)Some, l .. 'n d cI ia ~ ~ ttlIlkt jj;C:\~j!l>~b",.roi~li:ob.\nIiEf.lfl ' \bid' i)e;'4IIiJ.~\fIInlll\u:!. lki"1l1l1l Q!llillr jI. H a l. ; S!X.,Ii

  • 5/9/2018 N28.PHP5.PC Cuadernos

    31/77

    Creae i6n y am llis is d e fo rmu la rio s 31Cuarda el arehiv . reinicia XAN1PP. Recuerda,para ella s610 tienes que hacer doble die en e l'ard iva xampp_ est.a=:t.frxe.

    FiJnc i6n issletO~ - - -,.. hora nos ocup remos de ocul tar los errores den ue str o fo rm u la rio . Para -ello, utilizaremos send-llamenbe Ia fund6n Lsse 0, puesto que.Lsse t l compru ba si unadeterminada variableeshi definida yen caso afirmativo devneive tr ue,( erdadero), En ca 0negarivo. el resultado de laprueba devuelve false (fallso).La ainta tis de Ia funcion es Ia siguiente;0001 isse1::(mixl"!d var)Po tanto, Sf!cornprueba una variable y se de-vuelve un valor booleano (es decir, verdadero afalse), PodGD1oScornprobarlo con una consultsif. 0 heche, asi 1 hacen muchas funciones.Espero que hayas coplad todos los datos.a lacarpets form3., En el formulario ptopiamentedi-r o o (form. );Jtml) no he cambiado nada, s610 heafiadido una pequefia modlficadon en el scriptPI;P e Bna,j,lsi:;> php.La funcion is.se (,I -eaza los errores descritos an-teriormenl:e )T en ese case no muestra e] rnensaiede bienvenida alusuario, Para ella,nos bastacon una consulta 1f que oabcuqu todas las lfneasde ccdigoanterlores.< '! Iphpif U.sset (S POST! 'gen.d.er' J) & -&isse't I~ FOST l ' lastName ']) &Ils_POST [71.astNi!JJ\e I J I= I,,,) Iif ($_POS['[lgendeJ!l] =0) (echo "Hola St. ":elseficho uHola Sra. ";

    echo "'j S POST r 'las - W a m , = ' J J ,encan cacte .de 51al~ctiHl:.e, \j~";else Iecho "Po r favor rellena to-dos loscampos'; j

    1>En este GlBO, nuevamente deberemos limitar lavariable de laarray con Haves, para que PHP LaInt e rp re te - co r rec ta rnen t e oExprcacr6n d e la c on su lta ifLa primera Mea if es larga: hemos [untado va-rias condiciones. 56]0 cuando se cumplan tcdasIii. condlciones (cuando sean verdaderas) se

    mos traran los valores de las variables. Para elloutiliaamos el operador 16giro Y ( & . & ) . Es decir: esnecesaric que esten definldos tanto gender como1,a.8tt~ame. ,Pero qmf se oculta detras de (;~S _POST I 'Las tName! J 1= "" -aqul urilizamos.eloperador de d i f l ? 1 ' t ? l 1 c i a ? J E1motive es que e l valorde la variable para $_1' OS1' r '13a-tName' 1 tampa-co puede estar ado. Este seria e l caso si e1115U&'I-rio haee die en 1bot6n "Envtar" pero no ha re-llenad el campo lastName.La funeion Lsee I: U trabaja en perfecta armonfacon Lf. Pero is-58 - () 'no , es la un iea funci6 n quedevuelve t .i 't"ue ( erdadero) sl se cumple unacondit ion y faJ.sa em caso de (lue no se cumpla,V is ion g ener,a l de la p arte e lsePara dade el toque tinal al codigo, he optado pormostrar un texto alternative, A 1 i n Y al cabo, notendrla mueho senhdo mostrarle una pagll13 va-da a I usuario ..E n caso de prob lem ae, le recorda-rem o s al u suario que debe rellenar todos L oscampos delforrnulario.

    Sl e Ilt sw lr io 1 1 0'e I/emu ~Qd(lS la s wmpo s. efj meiarI N l " ) . s t m r i e 1!5t~n v l s l ! J , q U i 1 I i 1 1 i t) ,1 1 e sG f jl 'l l ble m l !n s 1 1 je ! 1e e r r o r .

    -Ana lis is e n, u n-a rc hlv o .:_ _ - - - - r - _

    Hasta ahara hemos separado el formulario enun 3nTIivQ, y e I analisis del mismo en otro ar-chive. Sin embargo/ s i S e c desea es posible C O l J l -binar ambos documentos creando un solo ardu-vo.En realidad es muy fi'iciI s i usamos nuestra com-probacion de variables isse L'( ) Retornemosnuestro wtirrta ejemplo y 10adaptaremos paraque quede un 9010 archivo.La que haremos es traaladae el script deanq_.Lisis. php ala pagina del formulario, colo-candolo despues del c6digo del formulario.Ademas, tambien es neeesario cambiar la exten-sion de l archive de fo:rtil. J' 1:(lt1 a [c,-rm.ph.p. yaque norm alm en te el .servido r s6 10,busca codlgcPH :? en los archlvos con extension . php.

  • 5/9/2018 N28.PHP5.PC Cuadernos

    32/77

    32 t re.a,ci6n y anal js is de'fermnlar lesMu,r importante: deberas modiacarla act-iondel fcrmulario. Y8 no debemos llamar a1 archivearraLt si.s vphp,sino a f0Im.pbp. Corrtopuedesver, enrealidad 10 que hace In pagina-. es llamar-se a si rnisma, Aquf te rnuestro elcodigo entrelas etiquetes :l'odo en una p;igin.a (form. phpJ

  • 5/9/2018 N28.PHP5.PC Cuadernos

    33/77

    Fa mularios avanzadosEn este capitulo te presentare otraa tecnicas deanallsisde formularies y frulciones Irnpcrtantes.P erc a rth :_ s.exam inarem os con mas atenci6nelcaracter de arrays de los datos de un fonnularioy resumiremos algunos d e I ,O 's conceptesapren-didos hasta ahora.

    A estas alturas; ya sabes que los datos que de-vuelve un Iormularic son tt~tados c o m o arrayasodativa per PliP. Un breve recordatorio: lasan'aY$son Iistas de valores que constan de unpa'I'dave-valor. En las arr~ys indexades conven-cionales Ia clave es un ruunero Indlce que em-pieza acontar desde 0, En ,e I easo de las arraysaseciadvas, shit emba rg o , p od eme s fijar Hbre -mente tanto el valor como la dave.En liasformularies tratados por PHP, el nombredel campo del formulario equivale a la clave y elvalor es 10 que el usuario ha intmducido en elcampo del formula rio. Hasta aqut, no estoy dt-ciendo 113.da nuevo.$ c - P O S T y$_ G E TSien la enqueta utjlizaSmethod="post",la array que eontiene todos los datos del fonnu-Iarlo S Uaml1lra~ k'o.S'l'. Porel contrario, si usssmeT_hod~"gett' podras aeeeder (I, los datos delformulario mediante $_~ET.C ontar lacantidad de e lem entosLo Interesantc de eonceer e1 earacter d e a rr ay delos datos de Ul1 formularlo es que pedemos uti-Iizar funeiones especlales de aJil 'ays, Ya hernes'itistOlll1tl de ellas, count (-S-.Array). A S I J la fun-ci6n cOllI'! t (~ I?OS'r) devuelve la cantidad dee lemen to s, d el formli.hu-io.

    Observe de nuevo la 1 J . i l t : i m . a version del scriptdel formulario, 0'11\. php, Porahorarel scriptfunciona perfectam ente ..9 6 10 h ay un pequer'\oproblema; is si el usuario ha enviado los datos y

    se' ]taojvidado de rellenar un campo? Tendrlaque volver a rellenarlc todo des-de el principio."Por que? E n nuestra variante "de un solo do-e um ento =.Ia pag ina S I . \ ! vuelve a Ilam ar a sfmisma y se carga nuevamente enel navegador.Solo esto yaconsdtulrta 111QtiVO sufidente paraIncllnarse a favor de la variante "de va no s do-cumentos", pero 1 10 1 10 !. ; dejaremos doblegar,"Guardar' un valor de un campo de textolC6u1:o podriamos soluctonarlo? Tenernos queleer el valor de la variable y de~p I ;H~sde "recar-gat" Ia pa.gina, hacer que PH? [0' "intrcduzoa"dlnarrricamenre ell el fonnulario, EmpecemospOI' el caso mas tadl: nueSL1'O campo de lexto delnombre del usuariotendna este aspecto:Tu rlCJlnO,r.", ,:

  • 5/9/2018 N28.PHP5.PC Cuadernos

    34/77

    34 Fo rtm rla rlo a a v anaad cscaso de los hombres, este es el eodigo PHP co-rrespondiente -para las mujeres basta C o n cam-bial' e1 0 pOI un 1.

  • 5/9/2018 N28.PHP5.PC Cuadernos

    35/77

    F o r m u l 'a r i: Q s a v a n ; : a : d , o s 3 :5Si ignol'an'l.(}s esta l~egla,el procesc de leerurq.,dela linea se j :nterrumplra en el pl!J~ltodondeelusuario hava lnsertado t~ $ comillas dobles .,; .. - . , '. , --En resemere es necesario meiorar el script. Co-mo rrdnimo en el case de : las commas dobles sepuede hater sin demasiado esfuerzo,

    Para poder UBar tcdos los caraeteres especialesde HTML. somo es el easo de la s eOl11.iUas dob les" (aunque POt 10 general noafecta a Jas comillassimples) podemos usar Ia rul1.ci6n .l?HPIHilI.bpeciaiChats (I. La funcion dene Ia si-guiente sintaxls:string htmlspeci&lCh,!l..rs (st.r:in,g: st'tl'llg'JEsta fund6n convlerte los slguientes cuatro ca -racteres en sus respectivas entidades HTML:Caracle , Pa sa a se r S!gn' i f ica< &It lower than: : - > g r . i; !aJe r thanr ~ &arnp; ' ampersand&(1001 ; q uo ta tio n mC lrkEsta fundenes de vital hnportancia, ya.que evi-ttl qUI ! !seejecute c6digo HTML que fCu! lc ll li g ue ellayout de nuestra p:ag:ina. l'ambien permite con-vertir en inofensivos los posibles scripts de Ja-vaSoipt gU! algfrn usuario malintencionadop re te :n .d : a e je .cu ta r en nuestra pagma.

    C o n 1(1fu ne io n an terio r hemos solventado elproblema de las eomillas, peroel p'l'ob~etrul este-tko, de Ia barra invertida sigue pendiente de re'-solucidn.,Recltt th 'el1,1,0S ala funci6n shipsl,:'; _POST [lastName,j t,_ em:;a.ntado

    de saj udar be. \0";y convertirla en este:E c h o II< ' b > $ ' N a m " < I b ; > , e n c a r l i ; a d o d ~

    aa.l.uda.r t'a , \nl;De este modo. la ernisien del nombee se "benefi-cia" de nuestra "correccion esb~'tica",

    I "f ; d J 1 > r ! J I < I II I ' l ! r

  • 5/9/2018 N28.PHP5.PC Cuadernos

    36/77

    Fo rmu l a r i o s a van z adosLa sintaxi es la sig-mente:n12bt($Variable);nl2b,'O

    ~ 51II~OlUIx" P'P~Tu~-----~--._---.!I:..r..~'*9'if:,I;:_~, C I !t , ," :' : I~ !.:..c";t:3 C'-I~.~~",1 : 1 ' : ~~JI:L4lI .....:!:.!.I:I'l:c i It :' t: -t I , .t.. : 3 ~ . . ,IUfr.J:'~r::llE .I ' ~

    lUI dkl!o,t'>'o~.:!o t udo " '" "l~euallciJ .j

    *-"e. a~_~Inn ,\~~'~ll'r1'4'li&I"'.~ N;l:!';~J ~.,

    L i l l i ' a l t ( J5 d e [ t rWd s e ttrlll~fortH{f1lC If < f i T I >En este j mplo he anadldo W1 Cil111pO para c -menrarios en el fcrmulario, como seria usual para recopilar oplnlones de los usuaries. Inserra ,e5-te campc)! debajo de TN Homb1 'e y antes del boronEll v fn t o .

    Este seria e 1 codigo Fuente correspondiente:
    TU ccrnent ar.i o :

  • 5/9/2018 N28.PHP5.PC Cuadernos

    37/77

    Pratecc ion con eent rasena 37

    roteccioPH]? permits proteger paginas mediante contra-sena, y de fonna mtty segura, Las contrasefias seguardan l'!II I'llservidor y no B on vi ibles. Ade-mus, 10 que rnuestra 1navegador e siempre lapagin8 HTML final, y no el c6digo PHE'.Para. hacer ,que el capitulo sea . m a s interesan te oaprovecharemos para aprender otros alerne.nL'Osbasicos de P.HP, concretamente las estruoturae.lsel.f y,sw! : : : 1 " 1 . Per antes, te mostran~ -01110redirigir de una pagina a otra pagina usandoPHP.

    R e d ir e c c i6 n c o n h e a d e rO. -_ - - _ - ,I

    Para ell se usa 1 . < 1 funci6n hesde L [) I de la quenosotros nos Inreresarernos unicamenre por elcaao e pecia .Lacntiou. Este caso e pedal. e con-sigue r dlreccionar a otra pagina a traves delnavegador. La sintaxls serra esta:heacter:("LocatioIl: mu.");E s necesario colocar he dez:{I j~ t~alprinoi-pie del dcenmenlo HTML , antes de la prime-1 ? ae tiq u eta < !H :m l> p de Ia declal!aai6n;docty-pe.Par ante, con el siguien te script logrartamos re-dirigir a OO'a p< ig ina :"m e cncd=" post. " >

  • 5/9/2018 N28.PHP5.PC Cuadernos

    38/77

    38 P ro tecci6 n con contrasef iaH e a d i e rPerc veamos que aspecto tiene todo el conjuntomediante un ejemplo prectico, Para ello, inserta-remos la iguielltes llneas de G digo al princi-pic de nuestro documento pOl ss1 pl-,p:

  • 5/9/2018 N28.PHP5.PC Cuadernos

    39/77

    P'l I 'otecciolncon centrasef ia 39

    ,l . 0 0 Slu contrll fia? (pa l,php)I~I

    El clJ1tteniJ in s 6 1 0 Sf ' muestr ~i se in f rod l 1 lSe 1111(1 p;ml!'r[~i'7'1t1e c r r e c i a .L a lnsm rcc io n switchJunto (I iE Y els.e-i f rarnbten existe la instructionwi t.ch. swi c1'permits comprobar dlstintascondicione para una variable y reaceionar enconsecuencia. Esta estruetura de control es simi-Bar a i_e Lae Lf', _igui ado C011n ue str o e jemplode las con lTasena , podem 1 gr< l r exactamenteel mlsmc re ul tado usandoesta instrucclon.Pew antes, permiteme presenter la sintaxis de$'..:h~ch.L a s in tax ls de swi tchL a instrucdon s....iten coruprueba si una varia blecoincide con los valores d una lista. En caso'1IfirmatiV I e e je cu ta la in st ru ec lo n p ert in en te ,Para imped ir que se iga n realizando cemproba-clones, Sf' utillza la palabr8 dave i;1I;:,,0I k ,(cenee-lar aborter).Si no c incide ningtin alor, se ejecntarala ins-trUCdOll de fau.L t :, serfs compatible a e 1!le.Heaqu] Ia intaxis:switd1 (V3Dabiel

    C1. secc t on p:::r.! eqida ~/II :>< P ' > CatLtet'1idO inte::es,'ln e. - .Ademas .al U SR r swit( .; 1 t en emos l E I poslbilidadde omitir Iapaiabra clave b.r:eaJL e n ese caso, deexistir un, velor seejecutaran t runhI. !: !11 la s l-guientes lnstrucciones c.af.ie, independientemen-te de si el valor coincide 0no.

  • 5/9/2018 N28.PHP5.PC Cuadernos

    40/77

    40 BU&I&s

    B clesEn cualquier I ngua]e de prograrnacion.Iosbucles 0 T u p p s sirven para poderejecutar UDaves, varias veces 0 ninguna una instruccion enfl.mci6n de una 0 varias condiclones, Ernpeza-remos por la opcion m a ~ encilla: I budwhile.- -

    I , r ~ fbucle whi le -!.___ I. _~ ~ _ _-.>

    El bucle ""hile eiecuta e 1 codigo-del prcgramahasta que lU1.ScOI1Wci n deia de cnmplirs e, encuyo case se detiene el bucle, La comprooac ionse realiza antes de ejecutar pm: primera vez elbucle, Por tanto, en rCa5G1 de duda ni siquiera seinicia el loop.S in ta x is b a s ic a d e w h i leEsta es L a sirrtexis basica del bucle whil e:wh~le (~ondAtionl

    c6digo mientras se comple 1 a cond~ci6n;COl"!il1l.l.aci6n cuando La condic1.6n deja deGwnpllrseiLa teoria siempre es mas dura de mer que unejemplo practice, asi que pongfu:nollO's man os aIa obra. En funci6n de si se cumple Wl'

  • 5/9/2018 N28.PHP5.PC Cuadernos

    41/77

    Buch~s 41'N oo lwd ar la cond i t ion de c ie rr ,eCmmde. ~1l lioosPUJJes til)i~~ ~ebi eberttaq~ e,palgj. 'U11U@ o)el l \tGc l 'e~e ~Ul 'I\ l1pi i_u1iracomUcian para etener el bucle, De 10 een-i : ;J:a] j io. ,eneratUi U l F l "buele :ir1l;Lnito". E lU 8 1 . . U U ' i oqlJeciatl-a a t : r < l p a d o el l e .l b 'Uc le ) r n op9drfu $a.lit d e. e l fc\tilmente.

    EJe rc ic io : mostra r e l c on tadorLo mas nnportante de este bucle es el contaderoLo heme inicializado en 1 10 incrementamosen 1cada vez qu,e se ejecuta el bucle. Apro- e o -cha este contador para mostrar la cantidad depasadas del bucle, (Mas. tarde: podrfas usarlopara mostrar Ia carrtidad de productos de W'Ipedldo 0 alga similar).Para ello transformaremos la lmea:echo "Loops ar1a easy!.\n"~en loque sigus (sinsaltos de Iinea):echo "$CGlllntar: Loops areeasy! \n";Guarda el doeumento medificado comowhile2. hp.

    lido~ ~ ~ ~ t : l . l i IW k > " f l ~ J I n P >.. ~ ~r.-tw~~

    '\.. e2.php1 L oQ -P S ~I! eM:;11 : L oo ps . ~~ em; y(1 - L~, !Ir~ eM...!4 Loop~! ! :fC c~.!: 5: L oopl =t( eIL....1s'c 1 4 C 6 b O .

    El C ! t . m t a d o 1 ' se 1tf '"i l izn p a r a n um e ra r.J~mto al bude whi,le: existe tambien otra poslbi-lid ad, el llamado bucle do-while.L a diferencia es qu" en e l e as o del bucle will 1ese comprueba la condicion en el eneabezadodel buele, mientras que en el ca 0 del bucle do~while la comprobacien se Ileea a cabo al fina],del bud:" No 10 he utilizado todavtaen nlngu-no de 1 1 1 1 proyectos d programadon, por 10que no eo el intere de presentarlo aqui. Slquieres sa ber mas, consulta el man ual de PHP"

    A continuaeicn, hablaremos del buele oontadorpar exoelencia, el bucle for. Esta es S "U smtaxis:Eor (llariable contadorl cond.ic:i6njpacr:on_contador) (c6digo mient.ras ae oumpla l.iii condicion;

    Lo ~teres~te de este tipo de buclees que laariable contador, Ia comprobacion de Ia can-dici6n y 18.determinacion del pa tron de re-cuenro se realizan en el eneabezado del bucle,Todc esto se agrupa entre parentesis y se divi-de mediante puntos y coma.

    for.pbpll: l . - a C P f Ilf~ ~!W; i '2 ! lOCjlf aI': caj':3' Lolapi i!#~Ie 1it:IIbQ,

    1/ Nuevlmfl!llte 1 1 . 1 mismo l "csuIMda: mri .s '' t rb4jo ~ncol1h 'a ' l :ds tJc dc Jig vfmm t e d e foe. php. .F un cio namie nto d el b uc leTe volvere a ensefi.ar todo el c6digo, pero parafacilitas la vision de conjunto, te 10 muestro S~parado:Bar (variable_contador;epndicion;patr6n_contador), IC6d..igo mien tras se cumpd.e la condLci6n;

    Ants de nada, comparalo con el ejemplo dewhU IE. Enseguide, 10 convertiremos en UIl buclefor.Repasa las dos Ultimas pagi11as que acabas deleer Recuerda que en el ejemplo de while te-nemos un contador ($counte1:), que hemos tni-cializado en 1: es Ia variable eontador. De' leliaSf! ocupa la linea de cod . igo $cOLtntBr= 1; quehabamos colocado al prindpio del bucle. "BIt elencabezado escribimos Lacondicion: scouncer

  • 5/9/2018 N28.PHP5.PC Cuadernos

    42/77

    42 Buc lesLa tnsteucdon era la siguiente: $counter+-t; I'e encuentra en el c ntro del bucle, F i n del re-cordatorio. Pasemos al i ra el bucle for:Si eres avispado, ya habras vista que el buclefor es una especie d!ewhile mas. comedo.Lo (mica que lenemo que hacer eli agrupar to-dos estos datos' en el encabezado del bucle,Guards este ejemplo como for. php.

  • 5/9/2018 N28.PHP5.PC Cuadernos

    43/77

    B u c t , e s 43iflantastlco! Ahora la ,array nos devuelve todeslos pates dave- al t.NEliWtra:fmmte,cOR ! lyU6L:'t ! l ie a~ho p8demoss:da.pmr la {emul de mO$l:rat lo s clcafDs anuastrasmeeesidades. Par ejempJ:0i puedesincluir ]as viu:iabl,es aentro, d . . frases.Esta tecruca resuH.a especialmente uti!para ela:nalisis de formularies, y8 . que los formulariesson una array a eciativa formada por pemes.atributo-val r (r.ey-valuii). En el capitulo si-guiente olveremos a habla del envfo de for-mularios.

  • 5/9/2018 N28.PHP5.PC Cuadernos

    44/77

    44 Env io de un fo rmu larto de opinion

    Envio de nforSill duda., una de las cosa m~s interesantes dePHP es la posibllidad de enviar eontenidos def o rmu la z io s po r e-mail, Los datos S envfanCOli a -ude del mailer SMTP Instalado en elervidor (en el easo de Linn suele ser e lprograme Sendmail),Antes de nada, veremos como funclona el en-vfo de correo electronico, para despues Ianzar-nos al anallsls avanzado de fornmlarios, quenos llevara a crear nn mailer universal,

    I L a func lon maU ()I I..

    No hay nada mas tacii que enviar 1Ul rnsnsajed e c orr eo e le ctre nlc o desde un script dl':! 'PHP .Para ella, s610 necesitarnos usar 121uncionmail (I.La slntaxis basice de esra funci6n es:mail ("direcci6i'1_oestinal::.ario1', "aaurrte ",

    "mens

    P nt a el e m Jr od e datos Sg [lsnlafimci6r1 mal lO ,Puesto que he iutlegrado sIglin pequeno perfeo-cionamiento en el script, quiero presentarte an-tes la nueva funci6n emflty ().. .~ ~ ~ r u ~ b a ' , d ~ variab les ~: ~ _ r T J P ~ Y ( ) !+-- _... ~ ~ =-~_~~ __ -_- ~__=~_= - _ ~ - ~Con elilpt:'1 () podemos lograr casi 10 contrarioque con isseI:(~.Recuerda que i~set (l COQ'I-p: t'u .eba s i una variable esta definida yen easeafinnativo devuelve crue, Enca so negat ive ,devuelve i"~he.Par el contrario, empt y ( I sirve para saber siuna. variable no estmdefinida, si esta vacfa 0:iIe corresponde ,elvalor 0"En estes tres casas, lafuncion devuelve trua, de Locontrario el valorde emp'ty (1 sera .falsE. Asf matamos tres paja-IDS de LUl tiro,L a sintaxls es similar a isset ():bool empty (mixed vat)Dado que ~mpty 'I' d vuelve t rue 0fnlse (es de-Or un beoleane), e ta funcion (igual queisse ()) es perfecta para estructuras ie,E I scr ip t de l rna tle rFIe aqul cl codlgo Fuente complete del formula-rio mailer. Copta el cedlgo y guarda el archivecomo feedback .php (0 simplemente abre el ar-chi 0del suplemento) ..

  • 5/9/2018 N28.PHP5.PC Cuadernos

    45/77

    Env fo d e u n fc rmula rio d e! op in ion 45

    {hea(.lj>lJn pGquEli'i.Offiai1~l' par", reC':opi1aL 1", op'J.rllon

  • 5/9/2018 N28.PHP5.PC Cuadernos

    46/77

    46

    iHas cargado el script enel servtdor y 10hasprobado? E 1prog ram .a no es demasiado com-plicacim tenemos un formulario que recopila ladirection de e-mail (vatiable$_E.OST[.Mail. J )yel texto del: mensaje (variableS_?OST [ 1message. ' I)..Tras hacer clic en . e l botonEnv in1 ' la p6 g ina se vuelve a H amar' a sf m isma,He resaltade todo elc6digo PHP COil un fondl.,)grls,PHP comprueba si la variable $_P05!l 'kai 'jesta definlda y no vacla. De.este forma nosaseguramos de que como mfnimo se haya in-sertado alg dn data C01:n,odireceion del remiten-te, LSon ciertas ambas condiciones? Cracias anuestro operador && (Y)deben cumplirse to-das lascendieiones, Entonoes, el destine pasa amanes de la hmci6n mail I) . Results especial-mente practico que la direccion del destinatarios~ determine 81 principia del script. en Ia va-riable Srecei1rerMai 1. La funcion mail {) asu-me el valor de esta Variable como primer ar-gumento ..Peru no.nos limitamos a enviar estes datos porIa s buenas, sino que aprovecharemes la "prue-ba de exito"integrada em la fund6n mail r)como medida adicional de seguridad: la fun-cion mai l (l devolveea r l."ueen caso de que 81peeceso talt;a exito, mientras que en casn de'error devolvera tills_~.Con if cemprQPa!ll\05 si,mail 0 ha, .f 'Unci e~nado ,iR a funcionado? E L 1 ese case, peoporctonamosa mail j 1 Ii.!!direccion del destinaterio y unasnnto predeflnidc (T ie lr es c o rr ea J u~ evQ ).Comocuerpo del mensa]e se utiliza el escrito delcampo de formulario textarea, La. direcclon"Fn:unl'se deduce de Ia variable$i_POST I ' 'Nail' t.

    5i el mensaje lograenviarse corrsctamente, e!ususrio vera el t:extoG r ac ia p or ttl (1pi~r i6f1.Per el contrario, si se p ro du ce 1 I1 g11n e.r ro r entraen aeriOl' else e info rma a I usuario sobre elproblem a. P rueba eJ script en hisistema local.De este modo te aseguraras d.e"forzar"este

    ertor, yaque en tu.equipo local no tlenes insta-lade r ri ng th1 servid:011 de eorreo,~1t~l:O""~I'\~~ i" t,t;p::/(I;l;;o1l'

  • 5/9/2018 N28.PHP5.PC Cuadernos

    47/77

    E Av lo de un ' f o rmular l~de opin ion 47

    Antes de presenta]'te mi "0IffiIlt-aile.:r unlver-sal" me gustaria hacer rl'inl:apieen 1 . 1 1 ' 1 par deco sas, L os prcgremadores suelen ser basrantevagos y prefieren abreviar slempre que sea 1'0-sible, De hecho, y a hemos visto algunoa tllUC0Sparaelkx asf, a-H signifiea a =a + l)f b-e qu l v ale Ii i b = b - J. E s 'Un a" r ef oomu la ck i n"del operador de suma e rests. Sin embargo,tamsien es posible "reformular" el operador deasignaci6n =,Se puede usar s:b.l1.1:l1~n.eament:epara eoncatenar 0 incluso para sumar (0 ees-tat).Observe el script del for:mmailer que encontra-rasen La p agm ,a s ig uie nte . E nB ptesento unejemplo de la Jorma abreviada deconcatena-don..Mientras quee .t "l fo rma desarrollede se es -crib iriaasi:Smesml.ge ~$m

  • 5/9/2018 N28.PHP5.PC Cuadernos

    48/77

    48 E n v io d e u n f o rm u l a r io d e o p in io n

    , !OOC'!'Y!?E HT~ll. PCiBLIC '-/!w3cllD.TP HII'M!. 4.01 T.ransi- iOTisl/1E1Ij";'

  • 5/9/2018 N28.PHP5.PC Cuadernos

    49/77

    P ro g ra ma r u n c on ta do r 49

    Pro- amar un co tadorlTe g-us~al'f"poder incluir un conrador propioen tus paginas? to quizas un lfbro de visitassin publici ad, totalmente personahzado? Eneste -apitulo de mostraxe como hacerlo, y pare l c am i no te presentare le "lectura' y la "escri-tura" en archives mediante PHP.'Iodos los scripts de e tecapituln son tan senci-llos como me ha side posible a tin de aclarar e 1prlncipie.

    Olvidemonos per un memento del heche deq'ue eualquier conrador es todo ~neRqsf l i a ble,Un eontador s610 cuenta los h.itsJes decir cJuese incluyen tambien lasvisitas que selimitan-aun die en el baton Reload. Paraempezar, nues-tro contsdor nc se ra ningun rnaravilla ~perCllo mejoraremos.Archivo counter .txtPara empezar creeremos un archive de texto,a] que Ilamarernos counre r . ex: , ESC1'ibe un "1"(o cualquler otra cifra), y gqa.l 'da, el doeumentccourrter . txt en la mismacarpeta en Ia quedespues zuardaras el archive PHP que crea-remosa continuacion.El archivo PHP Sf! Ila-lnara COUrlteJ:.pl,p.

    Cantador senelllo

    U n c o n t , u d , p r f ; , e l l d l l v $~ p w ! d : e ' ' ' t e n : r nlU!! n lp i d o c o nPHP .En PHP, todo es como en la o vida misma: pri-mer se abreel archive, ) tdespL l ,es se puedeleer}" 8 1 sedesea, mod;Uicar.C 6d ig o fuen te de counter.phpAcontinuacien' te muestro elcodigo del archi-vo ccunr ar .php. Copia el codigo fuenteo abre

    el archlvo del suplemento cou 11ce'r .php, Aqufs610 re muestro las Itneas de c6digo PHP:

    ----+-------- __M' l iI dos6 -10 eser ft u ra {w d e w rjte on ly } : 1 3 1 ar-c hhro so le sa puedeescrtblr, ,Siempre S E I de -f~lieen 0 bytes. S i e l a r,c hlv o no e X is te , s e tn -tentara crearle.Modo l ec t iJ ,r a ,Y e s c rl tu r a ( ' 1 1 ' + de write andmad): e! an;h /vocse pueds l ee r y escr tb l r .Siemprese def ine an o b yte s. S ie l archivono exist~. 56 lntentaril creartc.M odo ese rltu ra ad jun ta (a de ap pend ): ab re

    w

    w+

  • 5/9/2018 N28.PHP5.PC Cuadernos

    50/77

    50 P rog r,ama r un contador

    a+

    e l a rcm ve s 6 1 0 p a r,1 lI~ $ (lr ib ir e n Ed , to clo ~ lo sI valo! " :s SI! a d ju n 1a n a l ~ Ir 'la ld e l a rc hiv e. E ;< -cepe lcna l rnen te , el " l i Iponl1: ldor de arch lvo"no - s e eneuen tra a l pnnGjp fo s in o :a J'jiI na l d elarohivo . 5 1 e l a rcnlvo no extste se inlentaraIereanc ,Modo lectura y escr l tura ad;unta [at de. ap-p end and read): fib re e o l a rc hiv e s 61 Q p ar a~ee r y escrlbi i l ' Elnel . tode s los va le res sa : ad -]Ulflt~h 1 '31in al c \ e l arch ive . E)(Cf lpc iona l r t1ente,e l "a p un ta do r c ia a rc hiv o" no S8e ne ue ntra a lprincipia sino 8 1 fi[18! del arehlvo, SI 8 1 areal-v e n o e xists,. s :e irrte ntsra cre arlo .

    Puesto que ql1eremos tenet perntiso rant delectura como de escntura. usaremes el modot'+ de read and \ 0 . ' ' 1 " ieofn_',"porlitll'm: 00 este mode, la tecltrr'a '/ la es,.critura e.inicii;ul alprinciple d~latcllivo.

    lE Imister ioso apuntador dearchivolQue sigrufica e: actamente la variable SIp?, ~ Q 1 . 1 ehace actamente elmistericso apunta-dor de archive?La funci6n copen () siempre coloca un "apun-tador de archive" ( fi fe poht te r ) en el archivo. S del archfvo y a - es!la abierto, se sigue trabajandocon este apurrtador. Paraellcse gt]ard~ el es-tado del apuntador en una variable.En nuestro Casu concreto, utilizQ la variables -p para el apuntador de archive, Reeuerda: enel modo r el apuntador de archive apunta alprmcipio del archl VOl ill Iprimer readcter.Imagfnalo aSl: se coloca un " rursc r nvi.s,ibl~"momentaneamente al principio del archivo detexto abierto, y espera "instrucciones".

    , F u n ci6 n fg e ts (} iA continuacion, analizarernos la funci6nfge ts ! Lo que hace es le-er los datos de unarchive. La Iecrura temtinar6 cuando se lleguea la Ultima 1 . l l 1 e a 1Iinal del archive, 0cuan-do 52 alcance la cantidad maxlma de bytes.La sintaxis d esta funcion es:s ring ~get.(resoucce nQndle [. 'n-

    length) )Pue to que hemos indlcad '1m 7 corn valorlongitud de bytes (1~mgt" ) , la funcion siernpretendra en euenta que el mnnero tenga la longi-ud adecuada, y n el recuento e in luiranta.mbic~nel/Ios cara teres invisible del final de

    linea. Si el numero es demasiado largo, en lalecture Be igllora!rael reste (en case necesario,puedes ajustar el valor). De memento eJ peligro110 es muy importante, porque en el arch ivacourrcez , txt todavfa tenemos ill'"1". Se leeraeste numero y se almacenara en la variable$counter.En Ia linea sigui.ente emltimos esra variable y laaumentamo en une:aohc $count_@r;$r;ounter++,~.Que tal vamos de Imagine ci6n ? Irnagina queel "cursor invisible" s ha deslizacto al final dela lmea (a se ha detenido en elltmite de los 7bytes).

    A contlnuacion, vemos a rebobinar. L a fund6nl;'f!wj"nd (o f vuelve a colocar e1"cursor invisible"al principia de la linea. De ello se ocupa la lfneade c6digo:.rewind ,t s fp I ;La fund6n'f!;:n:lts ($:fp, $ccunter);tala responsable deescribir la string den adade la variable $ 'e(! 'Hm@r en el a rc hiv e. P ue stoque hemos especificado un modo de lecture yescritura (r+) yet apuntador vuelve a estar alprmcipio deJ archive, el antiguo valor (inicial-mente 1 ) se sobrescribe par 2.C erra r e l a rc hivo con fc los eOSiendo tan erdenados como. somes, cerra remosel archive can idose (Sfp).Aunque el scripttsmbientunclona sin esta aodon. de este m doahorramos reCU1'SQS del s-istema. Siempre queabramos un archive, despues de Ieerlo 0modi-fioarlo debeciamos cerrarlo con fclose ~.

    Si ya has comprobado que el script funciona entu servidor Iocal, sube 10s archives a tupro-veedor Web y vul velo a probar, La mayorfade veces funcionara sin rechistar, Sin embargo.en algunos proveedores la cosa se torcera:

  • 5/9/2018 N28.PHP5.PC Cuadernos

    51/77

    P rogramar un contador 5 1 ,

    Centader senciUoC~t!!~~_;gj.-t1I"HO!IM!tt.Il'1> o.!Il"'. 1 - 1'i'i'ili'liil fji'ilh(huPI'6.~ "" ,,'o,b 1;1. \",!j~ 21r.~l'O_!I'gj"('f- illIi.o:m +ulPnrlHblttfl,dnli!,...,.:m:rn..~.m,a)~;Uff.:P~J>o,'I ...", I!i\"~"'''11c l < > t . t O l ~.l.'plje,I"IlLflMlLll5liGl~' 'I I

  • 5/9/2018 N28.PHP5.PC Cuadernos

    52/77

    52 lu p ro p io lib ro d e v is lta s

    Tu propioCon 105 conodmientos que tienes ahora, enprincipia podrfas crear tu . propio libra de isi-tas, En este case, ta.nibien mantendremos la es-tructura basada en dOB archives. Todos 10comentarios se almacenaran en el archiveguestbook. ext; mientras que ei libro de "isitaspropiamente dicho es Ia p!ginaguestbook. !'Mp.El libr de visita almaeenara el l comentario, elnombre y la direcci6n de e-mail del usuario.Ademas.ls nuevos comentarios sernostraranlos primeros de 1 3 lista.Al igual que en el case de']contador, debere-mas eumplir un requisite; crear un archive de

    ibro de vlsltas1:exto para almaeeru r los datos. LlamaloglJ.e s tOOD*- . l:x t y gtl&rda lo en la misma carpet aque el archlvo PHP. Escribe un espacie enblanco para CJu~ 1 archive tenga un mfnimccentenido : la ftmci6n freac (l no muestrening(m mensaje de error.Codlgo d el a rc hiv o g u es tb oc 'k .p hpEn Ia pagina sigulente encontraras el c6digotuent-e d~l script al complete. He comentsdo lasaeelones mas impcrtantes. Si no tianes gan:as decopiar, puedes usar el archive de ejernplo delsuplemente: !;lues tbook .php.

    P I , ' I ' P ; rpi;p~a1?e!p@ t'

  • 5/9/2018 N28.PHP5.PC Cuadernos

    53/77

    T u p rop le l ib r a d e ,y~sl tas

    " mel,hoci="past "}'J'u COmenl:iir io; < I tex t.a rei! >
    1'u nom:bre: bt::;>Tu @-mail:,

  • 5/9/2018 N28.PHP5.PC Cuadernos

    54/77

    54 Tu p rop io lib ra de Y is ltas ,F un ch:m am ie nto d el s crlp tPa em sa analizar el script: pur comodidad,guard elnornbre del archive en la variableSf iLa.A continuaeicn compruebo si la variabletransrn itida por el formulario HTML esta defi-nida :;i_FOST I'comment "]) y no esta vaciatS_POST 1 "narne ' 1 y S~FOSTf 'elllail' t),(Naturalmente, pedriamos incluir una com-probaclcn mucho mas exhaustiva).A continuacion, el archive se abre para Iecturayescritum.

    f~ead()Aqu] se presents una nueva funci6n: read I).A diferencla de la flUlci6n fgets I J que s610funciona a . nivel d linea, fr~d t) Lee el conte-nido de t do el archive. Por 1 0 dernas, la sin-ta is s igual a la de fl;ret5 {)I.s.:dng f.J;'eagresource hand.Le, int: length)read I) tantbien tiene como argurnentoa elapuntador de archivQ (rE!SO\lICe handle) ye1tamano del archiv (.l.ength). Yprecisamenteeste ultimo argumento results problematico:no se que tam an tiene eo larch ivo . P ero la si-guienteiLmci6.n nos ayudad a solucionarlo.Func i6 n file slz e (}Pue sto que no quiero limitarme desde el prin-cipi en to que respects al tamafio del archive,10 a edg ll< lr e d in .a 'u l.: ic amenh :! c on Ia hmd6nfilesi z.::(},La sintaxis de filesize () s la igutenre:int filesize(5tring f11e~am )Este es el aspecto de 1 0 1 Imea de codigo:~Qld = readt$f~, files1zel$ leI);I , lQ l ! le !ep I l 'e .5 ! !n ta la variable SOld? En ellag l l i ;ud0 el eomtenid r f! copii ? ldo l i11~s .t a ahQl 'a"$ dedr, el c o n l:e n id o i'a l'll ig 1 ,l ei' del arehl 0d texte.

    Gene ll'a r e l vlncule d el e -m ailA c on t in u a cio n , g eIler-am .o s el v in culo d e I co -lireo eledr6nico en EITML guerdamos lastring C r respondlente en 10.variable $ell!ill..l.Para ella recurro ala barra invertida para ocul-tar la s e em ille s. U tiJ iz :o II I palabra cia vemal.l to.:, l]Ue ya conoceras d e HT l'v IL .

    No es necesario que pregnntes al usuario porsu direccion de-mail, podrlas USaf tarnbien Iadireceien Web. En ese caso, basta con omitirmallt.o:. Muehos usuarios te agr~decer~n notener que incluirsu direcoicn de e-mail, ya queestaran mas seguros y mas pro tegidos contra elspam sino se muest ra su e-mail.

    con dateOAsimismo, "crearemos" una "marca de t ' i i Jt1-po" para cade entrada. La funci6n dale () de laque ya hernos hablado anteriermente devueivela fe Ita COl" un determinado formate, En miaso , usare s6 10 la fecha (no Ia hera).j ,n e y de uel en el dis y el rnes en.d s cifras,y el ,afioen cuatro cifras. Y 10 hacen a ls maneraamericana, es decir Iempezando pOI el alto(puedes adaptarlo para rnostrarlo a 1 : 1 . 1 gusto).Para el ejempl que nos 0 upa, Ia string de 1fecha se alrnacena en la varis ble $dateO -mIl t1:Y:~daceOfEnt.r:y,; date.("'l-n-j"),

    s tr ip s la shes f) Y ' h tm ls peoia lc ha rs ()Laslfneas sigui~ntes ya te sonaran de]scripts anteriores,La f un ci 6: n htmbpl:;!Cii'!. Lchars () sirv e p araenm ascarar los co digcs I-IT ML .D e 10 contrario,un usuario malintencionado podrta inserterc6digorITML Q Ja.vaScript en el archivo y erearsu propio CSS , cambiandc totalmente el disefiode Is piigi:na. Con stripslashes I)se emitenlas barras invertida J y C il'1 112bJt( lnos as:egu-ramos de que los SaJtDS de linea que lntroduzcael usuario se mantengan en el archive final.fp\lrs ~}TIlepermire aseguranne de que losnuevos comentaries aparezran antes del CO!1-tenid antiguo del arch' vo. La idea es que lasnuevas opiniones siempre se muestren al prin-cipia de la lista:fputs (Hp, "$eriuy \n $Qld"UFun ci6 n re a d fil e( )" Q u e sigrufica ljeadfile (Hile)? La func:io11:rreadfile (J leera el eenrenidecompleto del ar-chivo y enviarfl el resultado al navegsdor.En po as palahras: el mant nimiento del librede visitas no podna ser mas sencillo, Si no teeonvenceel comentado de 'Lm usuario, s610tienes que ebrlr el archive dete to y borrar laentrada pr blematica.

  • 5/9/2018 N28.PHP5.PC Cuadernos

    55/77

    T tl prop io llb re d e v is ita s 55

    Pepa (PrPi l@,PCpl1i l I ;o :m) "';rQle on . 1 Q 1 ) 5 - 1 J-:.]:'Hey Johl lnnJ fdidlht&s p e r c 1 ~ . m e p nr ec e Il'Mtal1[C~til.aunque It primerll ,isl!! fell t odo mil compliCMO'P I ! - J l l ' ( pe p ej 'l 'b 1) ui ll 1 c om ) w rOl e. o n ~()Dj.'.: i.iru:~. am e 5J )e te bl l a lg a lluU De t o da . s Camms oe-o ql~ p ad re usn v ,cl co dig .o d e em c;n ClC lo pi!' otrM I; : l libro de visit--as. He aquf una eaptura depantalla de la version mod if ic ada. J .V e s la dife-reneia?C 6 dig o fu en te d e g u es tb oo k2 .p hpEn I t! pagina s.igui nte podras er el script Il10-dificado, He llamado al a chiveque.:.. booJ.:2 .php. Despues de que hayas "dige-rido".e1 codigo hable remos debs rnodifieacio-nes que he realizado,

    .,Gua r dsmo ill d ir r!c c io n IP d el u su ark y la lI i ' i l izmnos para comprml 'r-/ I l . Euest (fI

  • 5/9/2018 N28.PHP5.PC Cuadernos

    56/77

    56 T u p iF 'o p io l ib r o d e v is it a s

  • 5/9/2018 N28.PHP5.PC Cuadernos

    57/77

    T u p rQ p iQ mUD de v is itas 57Veamos como funciona exac t amen re e1script.

    Lo que hago es averlguar la direceion IP deca-da usuario, Para ello utilizo la variable de ser-vidor $_SE VER [ ; REM0TE _ADDR IJ r$i = ~_SERvERt'p~OTm_ADDR' J:Ademas, muestro la IP en la pagina insertandoen la lfnea siguiente: e.ch,o "

    'l'u TP':,$ip

  • 5/9/2018 N28.PHP5.PC Cuadernos

    58/77

    58 T u p ro pio l ibra de v ls lta s,Tegustada qu apereciese-la feche como J rdof A.ugU! ' l ! 2006? t!n e:se case , escribe:echo date:I"jS of r Y"};Si 10 que te tnteresa es m o tear el dla de Ia se-mana en forma desarrollada, basta c n:echo Ida e I "1 "I;!2eIDopuede ves, par el QrmaJto de la fe~elm podemos jugal!con e sp ac lo s e n blanco e:induse con atros tZa r. ad er es . 5 610 hay quecolocarlos en ei punk! deseadc dentro deoi3t-e ('' '; 1

    iquerem.os mostrar cuantos dlas tiene un de-terminadom j soribirfamos ru g a m como:echo "Est", mes

    dias." i.lena 'r . dale (..t") . ..

    C a r a c te re s d e f o r r n a to de l a n o r aNaruralmente, tamblen tenemos a nuestradis-posicion-caract re s de formate para mostrar lahora.Carac te r Exp1icao!on EJem.ploA a rn e p m amA AMoPM A MH Horas en formato 12' h 1 a 12H H erae en fe rma ta 24 11 1 a24

    MInutes de 00 a 59 04S Segund0s de 00 a 59 12La siguiente Ilnea rnue tra la hera en Ia que E'carga una pa.gitli:1:echo da el"H:i:s"),'

    lTe apetece hecer un pOCO de recapitulacion?(fe, treverfas con oero breve ' e jen1pJ.o con lafuncion da te n?El siguient script saluda al usuario de formadistinta en funcion de Ia hora en UIque S~ vis i teIspagina. Para ello, utilize una estructura H-else; f.

    1\ menr del dia

    S a lu d am o s a ru s ua ri d e ! j rm1iiJ ;,(istill tt l sl!glll1 Ir 7 1 ' 1 ( 1 1 ' ( 1 , liddin.Encontraras 1archive correspondiente en elsuplemento: se l lama timesl:;lfday.php:

  • 5/9/2018 N28.PHP5.PC Cuadernos

    59/77

    Cookiesy PHP 59

    jNas alegramos de volver a saludarlel ,Encuantas paginas Web has: po dido leer algo as(?Y lo mejor de rodo... es que es verdad,Incluso semanas despues de tu Ultima visita,una tienda online se aeuerda de los produetcsqthe guardaste en lacesta de lacompra (y:noLi~g l. l-S te eompra r) , ' I' odo signe alii, eom o.si n ohubierapasado el tiempo, El"culpable" de to-do eseo son Las cookies.

    Las caokies son una de las ttClnicas mas in-comprendidas en futern,et penniten espiar los,c ia t os d e hi disco duro, san l a pue rt a deentra-cia de los, virus ...jNacla mas lejos de ~E I realidadl Las cookies noson nada mas que archives de texto que un si-ti~ Web puede usar para gtlardar Jnformacionenel PC del usuario.Auuquee] sigtlificadoliteral d~'"I!ooki~"esUg alle fa /1 .debeda :mms mlaplIewlo nitts' bienc ome f< 'n 'rlg a 'io

  • 5/9/2018 N28.PHP5.PC Cuadernos

    60/77

    60 Cook ies y P H P

    Despues de todas esms constderaciones pre ..vias, nhom nos toea D nosotros "homear' coo-kies. Vamos a saludar I'll usuariocen un saludapersona lizado,

    ,klel'llhp'

    E n fa pr im em ilisitp :;1 ' g urm ill '1 0 coek ie .Guard arem LIS una cookie en 1 equipo delusuario. J) este modo, la proxime vez qus nosvi 'it', leerernos IIIco kie : 1('saludaremos"pe rsona lmente",

    9Clim,'#QSl'1'1>tal',~t1 I(i pl lgma, $ 1 1 ' h ~ ~ 1J a c o c k i l Y g'urm'iruitJ.Nuesrra cockle de rnuestra . llarnara "vi-"i "=1. C rear una c00kie en PHI> 5 (com o cas]'todO) rrernadam nte _encill .Recu zrd : las c iokl s e m r r i n g s .F u n c i6 n s,etcookle()La funcioa :s"'tc('Joki ~ 0 te faCiUtara el trebajoenormernente. LIsintaxls bas ita e s Ia sig1.~itmte=aqui solo te muestro los argurnento: que 1 1 e - -cesitaremos para nuestro ejemplo.boo1 ~etcQQkiBcs~ring nam~, sLring

    '.f;;jlue}L important es que ~ l cooki . envia en elf1Pltrtadr h sader. PO!1 es e necese rio Ilsmsr ala uncicn (11prineipi de t '! ,. 'l de ,antes-de la eli-queta 1 - - I T I v : I L irucial,

    T odas tas 'C ok i ss se almaeenan nl,l,tQmati~G'amen t. evn l a va rl ab ie $" ~COOKU;! Y e l nom-'b re d e 1 a c o ~ld e' se cQr lv 'ie rte e n key.Seguro que no re resultara dilloil leer y COU1 -prenderel sendlle script que te presento.Nuestra galleta' de muestra se llama ""-cisi t'"1 ) , po r 1 0 que poderuo acceder al valor de' 1 (1C t, okiea traves de $ I : :OOKI6[ 'vis.it I J. Esta esla pri ..! :Fl.eraersion del s r ip t. P ue de s c on su lte re l archive del suplemento (;o~ki~1.pl'lp.-7pb",1/ Sa-e!;tableca 1& CO(llkie.satt:o.nkie~"'lisitt 1);7>~et cooki~" ' P : : >

  • 5/9/2018 N28.PHP5.PC Cuadernos

    61/77

    Cooki ies y ' P H P 6 1~ COOKTEI:N(jmbr~ d - 10 eo 0Id.:': , 1J es d cir, V_ _ _ .Jslguiendo nuestro ejemplo, a traves de$_comm~ l ' v;i.sit']. PO I' 10 menos rnientras laopc ion reg.i:sCeJ;_globals de1 archive pap .,inifigure como Off.

    - ---

    ( ,Cuanto t le rnpo . v iven? ., 1Despus s de recargar lapagina hemos Istoquenuestra cookie para saludar al usuario Iuncio-na de mara illa, Pero si cerramos el na vega-dor, 1 0 abrimos mas tarde e intentamos accedesde nuevo a Ia pagina, yt l l no nos fIrecordara",Se nos saludara como s1 fuera la primera vezquela visitamos,No te pre cupes, ttl na egador no tiene malamem ria. L o que pa a e que nos hemos olvt-dado e asignar! una "fecha de cadueidad" ala cookie que hemos creado,Ha ta ahora hemos vi to 61.0cookies tempera-les, Sin una Ieeha de caducidad definida, lascookies s610 pemlanecen aetivas durante unase i6n, 0 como mucho un par de hcras m a s .Pero supongamos que queremos almacenaruna cookie durante 30 dfas,Ind icar u na fecha de c adu cidadLa sinta is de la cookie ampllada con fecha decadncidad tiene este aspecto:hool s,etQO'Gne. (0$ ring 11ame, str inq

    valu~, int ~Kpire>A nosotros nos il l teresa e l t er ce r argumento.,C6mo determinamos Ia vida iitil de la cookie?Pa a ,n o tenemos que saber primero Ia oarrti-dad de ssgundos que han