Está en la página 1de 65

5

Ellenguaje PHP

UNIDAD5:ELLENGUAJEPHP

1.Introduccin 2.UsosdePHP 3.ConfiguracindePHPsobreLinux 4.EllenguajePHP 5.SintaxisbsicadePHP 5.1Variables 5.2Arrays 5.3Expresiones 5.4Estructurasdecontrol 5.5Funcionesdefinidasporelusuario 6.PHPylaprogramacinWeb 6.1LafuncinINCLUDE 6.2Lasvariables#_GETy#_POST 7.MySQL 7.1CaractersticasdeMySQL 7.2Sintaxisbsica 7.3FuncionesdePHPparainteractuarconMySQL 7.4Ejemplobsico 8.HTML,PHPyMySQL.Ejemplocompleto 8.1Basededatos 8.2Estructuradelaaplicacin 8.3Cdigofuente 9.Entornodedesarrollo.ZendStudio

9.1Instalacin 9.2Detallesdelentorno

Ellenguaje PHP

1.INTRODUCCIN

PHP esunlenguajedeprogramacinusadogeneralmenteparalacreacinde contenidoparasitiosweb. El nombre es el acrnimo recursivo de "PHP: Hypertext Preprocessor" (inicialmente PHP Tools, o, Personal Home Page Tools), y se trata de un lenguajeinterpretadousadoparalacreacindeaplicacionesparaservidores,o creacindecontenidodinmicoparasitiosweb. PHPfueoriginalmentediseadoenPerl,seguidosporlaescrituradeungrupo deCGIbinariosescritosenellenguajeCporelprogramadorRasmusLerdorfen el ao 1994 para mostrar su currculum vitae y guardar ciertos datos, como la cantidad de trfico que su pgina web reciba. El 8 de junio del 1995 fue publicado"Personal Home Page Tools" despus de que Lerdorf lo combinara consupropioFormInterpreterparacrearPHP/FI. Dosprogramadores,ZeevSuraskiyAndiGutmans,reescribieronelanalizador sintctico (parser en ingls) en el ao 1997 y crearon la base del PHP 3, cambiando el nombre del lenguaje a la forma actual. Inmediatamente comenzaronexperimentacionespblicasdePHP3yfuelanzadooficialmenteen juniodel1998. En1999,SuraskiyGutmansreescribieronelcdigodePHP,produciendoloque hoy se conoce como Zend Engine o motor Zend. Tambin conformaron Zend Technologies en Israel. En el ao 2000, PHP 4 fue lanzado bajo el poder del motorZendEngine1.0.EnJuliode2004,fuelanzadoPHP5,utilizandoelmotor ZendEngineII(oZendEngine2).LaltimaversindePHPincluyeelnovedoso PDO (Objetos de Datos de PHP o PHP Data Objects) e incorpora todas las ventajasqueproveeelnuevoZendEngine2.

Ellenguaje PHP

2.USOSDEPHP

LosprincipalesusosdelPHPson: Programacindepginaswebdinmicas,habitualmente en combinacin conelmotordebasedatosMySQL,aunquecuentaconsoportenativopara otrosmotores,incluyendoelestndarODBC,loqueamplaengranmedida susposibilidadesdeconexin. Programacinenconsola,alestilodePerloShellScripting. Creacin de aplicaciones grficas independientes del navegador, por mediodelacombinacindePHPyGTK(GIMPToolKit),loquepermite desarrollaraplicacionesdeescritorioenlossistemasoperativosenlosque estsoportado. LasventajasdeutilizarPHPsonlassiguientes: Esunlenguajemultiplataforma. Capacidaddeconexinconlamayoradelosgestoresdebasededatos queseutilizanenlaactualidad(MySQL,PostgreSQL,etc.). Leer y manipular datos desde diversas fuentes, incluyendo datos que puedeningresarlosusuariosdesdeformulariosHTML. Capacidad de expandir su potencial utilizando la enorme cantidad de mdulos(llamadosext'soextensiones). Poseeunaampliadocumentacinensupginaoficial:http://www.php.net Eslibre,porloquesepresentacomounaalternativadefcilaccesopara todos. PermitelastcnicasdeProgramacinOrientadaaObjetos. Nospermitecrearlosformulariosparalaweb.

Ellenguaje PHP

3.CONFIGURACINDEPHPSOBRELINUX

INSTALACINDEPHP PodemosinstalarPHP5yelmdulodeApachePHP5comosigue:
a p t i t u d e i n s t a l l p h p 5 l i b a p a c h e 2 m o d p h p 5

DebemosreiniciarApachedespus:
i n v o k e r c . d a p a c h e 2 r e s t a r t

ParaobtenerinformacinsobrelainstalacindePHP5,eneldirectoriorazde Apache(/var/www).php(porejemplo,info.php).creamosunarchivo
n a n o / v a r / w w w / i n f o . p h p

Editamoselfichero,einsertamoslafuncinnativadePHPphpinfo().
< ? p h p p h p i n f o ( ) ? >

Llamamos este archivo a travs de un navegador http://server.dominio.com/info.php y mostrar un montn de detalles tiles sobrenuestrainstalacindePHP.

INSTALACINDEMYSQL ParaelseguimientodeestaUnidadnoesnecesarioinstalarunnuevoservidor debasededatos,yaqueutilizaremoslainstalacindeMySQLrealizadaparael Mdulodebasededatos. Encualquiercaso,lainstalacindeMySQLserealizardelasiguientemanera:


a p t i t u d e i n s t a l l m y s q l s e r v e r m y s q l c l i e n t

SelepedirqueproporcioneunacontraseaparaelusuariorootdeMySQL Esta contrasea es vlida para el usuario root@localhost, as como root@server.dominio.com:


N e w p a s s w o r d f o r t h e M y S Q L " r o o t " u s e r : c o n t r a s e a _ r o o t R e p e a t p a s s w o r d f o r t h e M y S Q L " r o o t " u s e r : c o n t r a s e a _ r o o t

SOPORTEMYSQLENPHP5 Para obtener soporte MySQL en PHP5, debemos instalar el paquete php5 mysql. Ser necesario instalar otros mdulos de PHP5 para un correcto funcionamientodesusaplicaciones.PuedebuscarmdulosdePHP5queestn disponiblesenelrepositoriooDVDdeDebianLennydeestamanera:
a p t i t u d e s e a r c h p h p 5

Escojalosquenecesiteylosinstaladelasiguientemanera:
a p t i t u d e i n s t a l l p h p 5 m y s q l p h p 5 c u r l p h p 5 g d p h p 5 i d n p h p p e a r p h p 5 i m a g i c k p h p 5 i m a p p h p 5 m c r y p t p h p 5 m e m c a c h e p h p 5 m h a s h p h p 5 m i n g p h p 5 p s p h p 5 p s p e l l p h p 5 r e c o d e p h p 5 s n m p p h p 5 s q l i t e p h p 5 t i d y p h p 5 x m l r p c p h p 5 x s l p h p 5 j s o n

DebemosreiniciarApachedespus:
i n v o k e r c . d a p a c h e 2 r e s t a r t

Recarguesunavegadoenlapgina http://server.dominio.com/info.phpahora debeencontrargrancantidaddemdulosnuevos,incluidoelmdulodeMySQL:

Ellenguaje PHP

4.ELLENGUAJEPHP

ELMODELOCLIENTE/SERVIDOR Unadelasarquitecturasmsexpandidasenlasaplicacionesdehoyendaesla queseconocecomomodeloclienteservidor. Enestemodeloexistenbsicamentedosprocesosejecutndoseparalelamente (en una misma computadora o no), los cuales se comunican mediante algn mecanismo diseado a tales efectos (por ejemplo, una red que los conecta). Estosprocesossonconocidoscomoclienteyservidor.Elobjetivodeestetipode arquitecturaseselderepartirlacargaentredistintascapasdelaaplicacin,lo cualconllevaunmejoraprovechamientodelhardwareentreotros. Elclientetieneasucargotodoelprocesamientoreferidoalainteraccinconel usuario, mientras que el servidor se encarga de resolver procesos complejos, como ser acceder a bases de datos o realizar clculos basados en reglas de negocio.Generalmenteunservidordaservicioamsdeunclientealavez,de formaconcurrente,aunqueestoltimodebesertransparenteparaste. Elfuncionamientodelmodelosebasaenunesquemadesolicitudrespuesta: Elclienterealizaunasolicitudalservidor. stelerespondedndoleelresultadodelaoperacinsolicitada. Toda esta interaccin debe ser realizada siguiendo unos conjuntos de reglas llamadosprotocolos. ELPROTOCOLOTCP/IP TCP/IPeselprotocoloqueseutilizaenInternet(entreotrasredes),bsicamente lo que ste determina es que cada computadora conectada a la red tenga un nmerodeidentificacinnico,ladireccinIPycadaprocesoqueestcorriendo en sta, y que quiera ser expuesto, tenga un identificador asociado, su puerto TCP. De modo que para conectarse a un servicio especfico en alguna computadoradelaredesnecesarioconocerestosdosdatos,sudireccinIPyel puerto al que se desea conectar. Los detalles del TCP/IP son demasiado extensos y estn por fuera del alcance de este trabajo, sencillamente diremos queeltrficodeInternetviajasobreesteprotocolo. ELPROTOCOLOHTTP CuandounusuarionavegaporInternetestutilizandounaaplicacincliente(el

navegador)conelcualseconectaaunaaplicacinservidor(elwebserver),al cul solicita las pginas que desea visualizar, y una vez obtenidas, es su programaelquelasmuestra. ElprotocoloTCP/IPposibilitaquedoscomputadorassecomuniquenentrescon simplemente que estn conectadas fsicamente, pero este protocolo slo se encargadeenviar bytes de una mquina a la otra, generalmente, cuando dos procesosnecesitancomunicarsedebentenerunacuerdodemsaltonivel,otro protocolo. Elprotocoloquecompartenlosnavegadoresylosservidoreswebsellamahttpy esunprotocolobasadoenelintercambiodemensajesdetextoASCII. HTMLYLASPGINASESTTICAS Unavezqueelclientewebharecibidotodoelflujodetextodesdeelservidor, debepresentardealgunaformaesainformacinalusuario.Paraespecificarel formato de las pginas se utiliza el lenguaje HTML, el cual es un conjunto de etiquetasqueespecificanlosdiferentesaspectosdelavisualizacin,comoser tipodeletra,tamao,color,etc... Las pginas programadas ntegramente en HTML se conocen como pginas estticas, debido a que su contenido no se altera en el momento en que el servidorresuelveelpedido. Elesquemade resolucin de un pedido de una pgina esttica es sencillo, lo que el cliente recibe es exactamente lo que est almacenado en el disco del servidor.

PHPYLASPGINASDINMICAS Las pginas dinmicas tienen como caracterstica que en el servidor est almacenadoelcdigoparagenerarelHTMLquedeberserenviadoalcliente.

Aquyaesprecisoque,ademsdeunservidorcapazdesoportarelprotocolo HTTP,estinstaladounintrpretePHP,yunservidordebasesdedatosMySQL yqueademsestnconfiguradosdemodoquepuedaninteractuarentreellos. EllenguajePHPdisponedefuncionesquelepermitenaccederamuydiversos tipos de servidores de bases de datos pudiendo: crear, consultar, borrar y modificartantobasesdedatoscomotablasyregistrosdelasmismas.Nosotros vamos a utilizar MySQL, unos de los gestores ms potentes y populares que existenenestemomento.

Laspginasqueseejecutanenelservidorpuedenrealizaraccesosabasesde datos, conexiones de red, y otras tareas para crear la pgina final que ver el cliente.ElclientesolamenterecibeunapginaconelcdigoHTMLresultantede laejecucindelscriptPHP. CARACTERSTICASDEPHP PHPpuedehacercualquiercosaqueserequieraunaaplicacinweb,comopor ejemploprocesarlainformacindeformularios,generarpginasconcontenidos dinmicos,establecersesionesenunservidorweboenviaryrecibircookies. ExistentrescamposenlosqueseusanscriptsescritosenPHP. Scriptsdelladodelservidor.Esteeselcampomstradicionalyelprincipal foco de trabajo. Se necesitan tres cosas para que esto funcione. El intrprete PHP, un servidor web (generalmente, el ms utilizado es Apache)yunnavegador(Explorer,Firefox,opera,etc).Esnecesariocorrer el servidor web con PHP instalado. El resultado del programa PHP se puedeobteneratravsdelnavegador,conectndoseconelservidorweb. Scriptsenlalneadecomandos.PuedecrearunscriptPHPycorrerlosin ningn servidor web o navegador. Solamente necesita el intrprete PHP para usarlo de esta manera. Este tipo de uso es ideal para scripts ejecutadosregularmentedesdecron(en*nixoLinux)oelPlanificadorde

tareas(enWindows).Estosscriptstambinpuedenserusadosparatareas simplesdeprocesamientodetexto. Escribir aplicaciones de interfaz grfica. Probablemente PHP no sea el lenguajemsapropiadoparaescribiraplicacionesgrficas,perosiconoce bien PHP, y quisiera utilizar algunas caractersticas avanzadas en programas clientes, puede utilizar PHP GTK para escribir dichos programas. Tambin es posible escribir aplicaciones independientes de unaplataforma.PHPGTKesunaextensindePHP,nodisponibleenla distribucinprincipal ConPHPsetienelalibertaddeelegirelsistemaoperativoyelservidorynose encuentra limitado a resultados en HTML. Entre las habilidades de PHP se incluyen:creacindeimgenes,archivosPDFypelculasFlash(usandolibswfy Ming) sobre la marcha. Tambin se puede presentar otros resultados, como XHTMyarchivosXML.PHPpuedeautogenerarestosarchivosyalmacenarlos enelsistemadearchivosenvezdepresentarlosenlapantalla. UnacaractersticamuypotenteydestacabledePHPessusoporteparaunagran cantidad de bases de datos, aunque en lo ms comn es verlo funcionando sobreMySQLoPostgreSQL. PHP tambin cuenta con soporte para comunicarse con otros importantes servicioscomoelcorreoelectrnico(mediantelafuncinmail)onoticias. PHPtieneunascaractersticasmuytilesparaelprocesamientodetexto,desde expresiones regulares POSIX extendidas o tipo Perl hasta procesadores de documentosXML. ParaprocesaryaccederadocumentosXML,soportamoslosestndaresSAXy DOM.PuedeutilizarlaextensinXSLTparatransformardocumentosXML. SiseusaPHPenelcampodelcomercioelectrnico,encontrarmuytileslas funcionesCybercash,CyberMUT,VeriSignPayflowProyCCVSparaprogramas depago. Para terminar, contamos con muchas otras extensiones muy interesantes, las funcionesdelmotordebsquedasmnoGoSearch,funcionesparapasarelasde IRC,utilidadesdecompresin(gzip,bz2),generacindinbmicadethumbnails (imgenes pequeas obtenidas a partir de una ) conversin de calendarios, traduccin..... Comosepuedeapreciar,PHPesunlenguajesumamentericoencaractersticas yfuncionalidadesyporlotantoesunadelasopcionesmsaceptadasporlos desarrolladoresweb.

Ellenguaje PHP

5.SINTAXISBSICADEPHP

Parainterpretarunarchivo,phpsimplementeinterpretaenelservidoreltextodel archivohastaqueencuentraunodeloscaracteresespecialesquedelimitanel inicio de cdigo PHP. El intrprete ejecuta entonces todo el cdigo que encuentra,hastaqueencuentraunaetiquetadefindecdigo,laqueleindica quesigaignorandoelcdigosiguiente. EstemecanismopermiteincrustarelcdigoPHPdentrodeHTML:todoloque estfueradelasetiquetasPHPsedejatalcomoest,mientrasqueelrestose interpretacomocdigo. Haycuatroconjuntosdeetiquetasquepuedenserusadasparadenotarbloques decdigoPHP.Deestascuatro,slo2(<?php...?>y<scriptlanguage="php">.. .</script>) estn siempre disponibles el resto pueden ser configuradas en el archivophp.iniparaseronoaceptadasporelintrprete.Mientrasqueelformato cortodeetiquetas(shortformtags)yelestiloASP(ASPstyletags)puedenser convenientes, no son portables como la versin de formato largo de etiquetas. Adems,sisepretendeembebercdigoPHPenXMLoXHTML,serobligatorio elusodelformato<?php...?>paralacompatibilidadconXML. Es importante tener en cuenta que en versiones anteriores el texto php' que aparecetras<?eraopcional,porloquepodaversecdigophpincluidoentre lasetiquetas<?y?>.Peroestaetiquetayaesobligatoriaentodaslasnuevas versionesdePHP. LasetiquetassoportadasporPHPson: <?phpecho("texto"\n")?> <?php=expression?>Estoesunaabreviaturade"<?echoexpression?>" <scriptlanguage="php"> echo("muchoseditores(comoFrontPage)noaceptaninstruccionesde procesado") </script>

<%echo("Opcionalmente,sepuedenusarlasetiquetasASP")%> <%=$variable#Estoesunaabreviaturade"<%echo..."%> Elmtodoprimero,<?php...?>,eselmsconveniente,yaquepermiteelusode PHPencdigoXMLcomoXHTML. La etiqueta de fin de bloque incluir tras ella la siguiente lnea si hay alguna presente.Adems,laetiquetadefindebloquellevaimplcitoelpuntoycomano senecesitaporlotantoaadirelpuntoycomafinaldelaltimalneadelbloque PHP. PHPpermiteestructurarbloquescomo:
< ? p h p i f ( $ e x p r e s s i o n ) { ? > < s t r o n g > E s t o e s v e r d a d e r o . < / s t r o n g > < ? p h p } e l s e { ? > < s t r o n g > E s t o e s f a l s o . < / s t r o n g > < ? p h p } ? >

Esteejemplorealizaloesperado,yaquecuandoPHPencuentralasetiquetas?> de fin de bloque, empieza a escribir lo que encuentra tal cual hasta que encuentra otra etiqueta de inicio de bloque. Para escribir bloques grandes de textogeneralmenteesmseficientesepararlosdelcdigoPHPqueenviartodo eltextomediantelasfuncionesecho(),print()osimilares. LaseparacindeinstruccionessehacedelamismamaneraqueenCoPerl terminandocadadeclaracinconunpuntoycoma. PHPsoportaelestilodecomentariosde'C','C++'ydelainterfazdecomandos deUnix. Porejemplo:
< ? p h p e c h o " E s t o e s u n a p r u e b a " / / E s t e e s u n c o m e n t a r i o e n u n a l n e a a l e s t i l o d e C + + / * E s t e e s u n c o m e n t a r i o m u l t i l n e a o t r a l n e a d e c o m e n t a r i o s * / e c h o " E s t a e s o t r a p r u e b a " e c h o " U n a l t i m a p r u e b a " # E s t e e s u n c o m e n t a r i o a l e s t i l o s h e l l ? >

Losestilosdecomentariosdeunalneaslocomentanhastaelfinaldelalneao elbloqueactualdecdigoPHP,loprimeroqueocurra.
< h 1 > E s t e e s u n e j e m p l o < ? p h p # e c h o " s i m p l e " ? > . < / h 1 > < p > E l e n c a b e z a d o a n t e r i o r d i r & a a c u t e ' E s t e e s u n e j e m p l o ' .

Hayquetenercuidadoconnoanidarcomentariosdeestilo'C',algoquepuede ocurriralcomentarbloqueslargosdecdigo.
< ? p h p / * e c h o " E s t a e s u n a p r u e b a " / * E s t e c o m e n t a r i o c a u s a r p r o b l e m a s * / * / ? >

Losestilosdecomentariosdeunalneaslocomentanhastaelfinaldelalneao del bloque actual de cdigo PHP, lo primero que ocurra. Esto implica que el cdigoHTMLtras//?>serimpreso:?>saledelmodoPHP,retornandoalmodo HTML,elcomentario//noleinfluye.

Ellenguaje PHP

5.1.VARIABLES

EnPHPlasvariablesserepresentancomounsignodedlar($)seguidoporel nombre de la variable. El nombre de la variable es sensible a minsculas y maysculas. LosnombresdevariablessiguenlasmismasreglasqueotrasetiquetasenPHP. Unnombredevariablevalidotienequeempezarconunaletraounaraya(_), seguido de cualquier nmero de letras, nmeros y rayas. Como expresin regularsepodraexpresarcomo:
' [ a z A Z _ \ x 7 f \ x f f ] [ a z A Z 0 9 _ \ x 7 f \ x f f ] * ' < ? p h p $ v a r = " B o b " $ V a r = " J o e " e c h o " $ v a r , $ V a r " / / D a c o m o s a l i d a " B o b , J o e " $ 4 s i t e = ' n o t y e t ' / / i n v l i d o e m p i e z a c o n u n n m e r o $ _ 4 s i t e = ' n o t y e t ' / / v l i d o e m p i e z a c o n u n a r a y a $ t y t e = ' m a n s i k k a ' / / v l i d o ' ' e s e l A S C I I 2 2 8 ( E x t e n d i d o ) ? >

Elmbitodeunavariableeselcontextodentrodelquelavariableestdefinida. LamayorpartedelasvariablesPHPslotienenunmbitosimple.Estembito simpletambinabarcalosarchivosincluidosylosrequeridos. Porejemplo:


< ? p h p $ a = 1 i n c l u d e " b . i n c " ? >

Aqu,lavariable$adentrodelscriptincluidob.inc.Detodasformas,dentrode las funciones definidas por el usuario aparece un mbito local a la funcin. Cualquiervariablequeseusedentrodeunafuncinest,pordefecto,limitadaal mbitolocaldelafuncin.Porejemplo:

< ? p h p $ a = 1 / * m b i t o g l o b a l * / f u n c t i o n T e s t ( ) { e c h o $ a / * r e f e r e n c i a a u n a v a r i a b l e c o n m b i t o l o c a l * / } T e s t ( ) ? >

Estescriptnoproducirsalida,yaquelaordenechoutilizaunaversinlocalde lavariable$a,alaquenosehaasignadoningnvalorensumbito.Puedeque usted note que hay una pequea diferencia con el lenguaje C, en el que las variables globales estn disponibles automticamente dentro de la funcin a menosqueseanexpresamentesobrescritasporunadefinicinlocal.Estopuede causar algunos problemas, ya que la gente puede cambiar variables globales inadvertidamente.EnPHP,lasvariablesglobalesdebenserdeclaradasglobales dentrodelafuncinsivanaserutilizadasdentrodedichafuncin. Veamosunejemplo:
< ? p h p $ a = 1 $ b = 2 f u n c t i o n S u m ( ) { g l o b a l $ a , $ b $ b = $ a + $ b } S u m ( ) e c h o $ b ? >

Elscriptanteriorproducirlasalida"3".Aldeclarar$ay$bglobalesdentrodela funcin,todaslasreferenciasatalesvariablessereferirnalaversinglobal.No haylmitealnmerodevariablesglobalesquesepuedenmanipulardentrode unafuncin.

Ellenguaje PHP

5.2.ARRAYS

En PHP los arrays son colecciones, lo cual significa que los ndices de las posiciones no necesariamente son nmeros, y de hecho, PHP los trata como cadenasdecaracteres. ExistenmltiplesformasdedeclararyutilizararraysenPHP,perobsicamente puedenserdefinidosdelamismaformaquecualquierotravariabledePHP:
$ a r r [ c l a v e 1 ' ] = v a l o r 1 ' $ a r r [ c l a v e 2 ' ] = v a l o r 2 ' $ u n a V a r = $ a r r [ c l a v e 2 ' ]

Ellenguaje PHP

5.3.EXPRESIONES

LasexpresionessonlapiedraangulardePHP.EnPHP,casicualquiercosaque se escribe es una expresin. La forma ms simple y ajustada de definir una expresines"cualquiercosaquetieneunvalor". Las formas ms bsicas de expresiones son las constantes y las variables. Cuandoescribes"$a=5",estsasignando'5'a$a.'5',obviamente,tieneelvalor 5,enotraspalabras'5'esunaexpresinconelvalor5(enestecaso,'5'esuna constanteentera). Despus de esta asignacin, se espera que el valor de $a sea 5 tambin, de maneraquesiseescribe$b=$a,seesperatambinquesecomporteigualque siseescribiese$b=5.Enotraspalabras,$aesunaexpresintambinconel valor5.Sitodovabien,esoesexactamenteloquepasar. Lasfuncionessonunejemploalgomscomplejodeexpresiones.Porejemplo, consideralasiguientefuncin:
< ? p h p f u n c t i o n f o o ( ) { r e t u r n 5 } ? >

Sabemosqueteclear$c=foo()esesencialmentelomismoqueescribir$c=5,y habrsacertado.Lasfuncionessonexpresionesquevalenelvalorqueretornan. Comofoo() devuelve 5, el valor de la expresin 'foo()' es 5. Normalmente las funcionesnodevuelvenunvalorfijo,sinoquesuelesercalculado. Desdeluego,losvaloresenPHPnoselimitanaenteros,ylomsnormalesque nolosean.PHPsoportatrestiposescalares:enteros,puntoflotanteycadenas (lostiposescalaressonaquelloscuyosvaloresnopueden'dividirse'enpartes menores, no como los arrays, por ejemplo). PHP tambin soporta dos tipos compuestos (no escalares): arrays y objetos. Se puede asignar cada uno de estostiposdevaloravariablesobienretornarsedefunciones,sinningntipode limitacin.

Ellenguaje PHP

5.4.ESTRUCTURASDECONTROL

IF La construccin if es una de las ms importantes caractersticas de muchos lenguajes, incluido PHP. Permite la ejecucin condicional de fragmentos de cdigo.PHPcaracterizaunaestructuraifqueessimilaraladeC:
< ? p h p i f ( e x p r ) s e n t e n c i a ? >

exprseevalaasuvalorcondicional(boolean).Siexprseevalacomo TRUE, PHPejecutarlasentencia,ysiseevalacomoFALSElaignorar. Elsiguienteejemplomostraraaesmayorquebsi$afueramayorque$b:


< ? p h p i f ( $ a > $ b ) p r i n t " a e s m a y o r q u e b " ? >

A menudo, se desea tener ms de una sentencia ejecutada de forma condicional. Por supuesto, no hay necesidad de encerrar cada sentencia con unaclusulaif.Envezdeeso,sepuedenagruparvariassentenciasenungrupo desentencias.Porejemplo,estecdigomostraraaesmayorquebsi$afuera mayorque$b,yentoncesasignaraelvalorde$aa$b:
< ? p h p i f ( $ a > $ b ) { p r i n t " a e s m a y o r q u e b " $ b = $ a } ? >

Lassentenciasifsepuedenanidarindefinidamentedentrodeotrassentenciasif, locualproporcionaunaflexibilidadcompletaparaejecucionescondicionalesen

lasdiferentespartesdetuprograma. ELSE Amenudoqueremosejecutarunasentenciasisecumpleunaciertacondicin,y unasentencia distinta si la condicin no se cumple. Esto es para lo que sirve else.elseextiendeunasentenciaifparaejecutarunasentenciaencasodeque laexpresinenlasentenciaifseevalecomoFALSE.Porejemplo,elsiguiente cdigomostraraaesmayorqueb'si$afueramayorque$b,yaNOesmayor queb'encualquierotrocaso:
< ? p h p i f ( $ a > $ b ) { p r i n t " a e s m a y o r q u e b " } e l s e { p r i n t " a N O e s m a y o r q u e b " } ? >

La sentencia else se ejecuta solamente si la expresin if se evala como FALSE, y si hubiera alguna expresin elseif slo si se evaluaron tambin a FALSE. WHILE Los bucles while son los tipos de bucle ms simples en PHP. Se comportan comosucontrapartidaenC.Laformabsicadeunasentenciawhilees:
w h i l e ( e x p r ) s e n t e n c i a

Elsignificadodeunasentenciawhileessimple.LediceaPHPqueejecutela(s) sentencia(s) anidada(s) repetidamente, mientras la expresin while se evale como TRUE.Elvalordelaexpresinescomprobadocadavezalprincipiodel bucle, as que incluso si este valor cambia durante la ejecucin de la(s) sentencia(s)anidada(s),laejecucinnopararhastaelfindelaiteracin(cada vezquePHPejecutalassentenciasenelbucleesunaiteracin).Aveces,sila expresin while se evala como FALSE desde el principio de todo, la(s) sentencia(s)anidada(s)noseejecutarnnisiquieraunavez. Como con la sentencia if, se pueden agrupar mltiples sentencias dentro del mismobuclewhileencerrandoungrupodesentenciasconllaves,ousandola sintaxisalternativa:while(expr):sentencia...endwhile Elsiguienteejemploimprimenmerosdel1al10:
< ? p h p / * e j e m p l o * / $ i = 1 w h i l e ( $ i < = 1 0 ) { p r i n t $ i + + / * e l v a l o r i m p r e s o s e r & i a c u t e a $ i a n t e s d e l i n c r e m e n t o

( p o s t i n c r e m e n t o ) * / } ? >

FOR Los bucles for son los bucles ms complejos en PHP. Se comportan como su contrapartidaenC.Lasintaxisdeunbuclefores: for(expr1expr2expr3)sentencia Laprimeraexpresin(expr1)seevala(ejecuta)incondicionalmenteunavezal principiodelbucle. Alcomienzodecadaiteracin,seevalaexpr2.Siseevalacomo TRUE,el bucle contina y las sentencias anidadas se ejecutan. Si se evala como FALSE,laejecucindelbuclefinaliza. Alfinaldecadaiteracin,seevala(ejecuta)expr3. Veamoslossiguientesejemplos.Todosellosmuestrannmerosdel1al10:
< ? p h p / * e j e m p l o 1 * / f o r ( $ i = 1 $ i < = 1 0 $ i + + ) { p r i n t $ i } / * e j e m p l o 2 * / f o r ( $ i = 1 $ i + + ) { i f ( $ i > 1 0 ) { b r e a k } p r i n t $ i } / * e j e m p l o 4 * / f o r ( $ i = 1 $ i < = 1 0 p r i n t $ i , $ i + + ) ? >

Porsupuesto,elprimerejemplopareceserelmaselegante(oquizselcuarto), perounopuededescubrirquesercapazdeusarexpresionesvacasenbucles forresultatilenmuchasocasiones.

Ellenguaje PHP

5.5.FUNCIONESDEFINIDASPORELUSUARIO

Unafuncinsepuededefinirconlasiguientesintaxis:
< ? p h p f u n c t i o n f o o ( $ a r g _ 1 , $ a r g _ 2 , . . . , $ a r g _ n ) { e c h o " F u n c i & o a c u t e n d e e j e m p l o . \ n " r e t u r n $ r e t v a l } ? >

CualquierinstruccinvlidadePHPpuedeaparecerenelcuerpodelafuncin, inclusootrasfuncionesydefinicionesdeclases.PHPnosoportalaredefinicin defuncionespreviamentedeclaradas. PARMETROSDELASFUNCIONES La informacin puede suministrarse a las funciones mediante la lista de parmetros,unalistadevariablesy/oconstantesseparadasporcomas. PHP soporta pasar parmetros por valor (el comportamiento por defecto), por referencia,yparmetrospordefecto.
< ? p h p f u n c t i o n t a k e s _ a r r a y ( $ i n p u t ) { e c h o " $ i n p u t [ 0 ] + $ i n p u t [ 1 ] = " . $ i n p u t [ 0 ] + $ i n p u t [ 1 ] } ? >

PASARPARMETROSPORREFERENCIA Pordefecto,losparmetrosdeunafuncinsepasanporvalor(demaneraquesi cambiaselvalordelargumentodentrodelafuncin,nosevemodificadofuera de ella). Si deseas permitir a una funcin modificar sus parmetros, debes pasarlosporreferencia.

Sisedeseaqueunparmetrodeunafuncinsiempresepaseporreferencia,se puedeanteponerunampersand(&)alnombredelparmetroenladefinicinde lafuncin:


<?php functionagregar_algo_mas(&$string) { $string.='yalgom&aacutes.' } $str='Estoesunacadena,' agregar_algo_mas($str) echo$str//Saca'Estoesunacadena,yalgom&aacutes.' ?>

PARMETROSPORDEFECTO Una funcin puede definir valores por defecto para los parmetros escalares estiloC++:
<?php functionhacercafe($tipo="capuchino") { return"Hacerunatazade$tipo.\n" } echohacercafe() echohacercafe("expreso") ?>

Lasalidadelfragmentoanteriores:Hacerunatazadecapuchino. Hacerunatazadeexpreso. El valor por defecto tiene que ser una expresin constante, y no una variable, miembrodeunaclasellamadaaunafuncin. Debemosdestacarquecuandoseusanparmetrospordefecto,estostienenque estaraladerechadecualquierparmetrosinvalorpordefectodeotramanera lascosasnofuncionarndelaformaesperada.Veamoselsiguientefragmento decdigo:
<?php functionhaceryogurt($tipo="acidophilus",$sabor) { return"Haciendounbolde$tipo$sabor.\n" } echohaceryogurt("fresa")//Nofuncionardelamaneraesperada

?>

Lasalidadelejemploanteriores: Warning: Missing argument 2 in call to /usr/local/etc/httpd/htdocs/php3test/functest.htmlonline41 Haciendounboldefresa.Yahora,comparemoscon:


< ? p h p f u n c t i o n h a c e r y o g u r t ( $ s a b o r , $ t i p o = " b i o " ) { r e t u r n " H a c i e n d o u n b o l d e $ t i p o $ s a b o r . \ n " } e c h o h a c e r y o g u r t ( " f r e s a " ) / / f u n c i o n a c o m o s e e s p e r a b a ? >

haceryogurt()

in

Lasalidadeesteejemploes:Haciendounboldebiofresa.

Ellenguaje PHP

6.PHPYLAPROGRAMACINWEB

Comoseindicpreviamente,PHPesunlenguajedepropsitomltiple,aunque hoyendaseencuentrecomnmenteasociadoalaprogramacindesitiosweb, razn por la cual se dar a continuacin una resea de las caractersticas principalesquepermitenhacerdePHPunaherramientatilalahoraderealizar estetipodeaplicaciones.

Ellenguaje PHP

6.1.LAFUNCININCLUDE

Una de las funciones ms utilizadas en PHP es la funcin include(). Si recordamos su uso en C, no tendremos dificultad en comprenderla, pues su funcionamientoesexactamenteelmismo:copiarelcontenidodelarchivoquese incluyeypegarloexactamenteenelmismolugarenqueseencuentralafuncin include. Supongamosunawebenhtmlconesteaspecto:

Eldiseodelamismaenhtmlserabastantesencillohaciendousodetablas.No obstante,graciasaPHPpodemosmantenerlamodularidad,ademsdecargar loscontenidosdinmicamenteporejemploenlamismaweb. Haciendousodelafuncininclude,veamoscomoejemploelsiguientecdigo:


< H T M L > < H E A D > < T I T L E > P g i n a < / T I T L E > < L I N K R E L = s t y l e s h e e t h r e f = " m i e s t i l o . c s s " T Y P E = " t e x t / c s s " > < / H E A D > < B O D Y b g c o l o r = " # 0 0 0 0 0 0 " >

< T A B L E b o r d e r = " 0 " W I D T H = " 1 0 0 % " H E I G H T = " 1 0 0 % " b g c o l o r = " # 9 9 C C C C " c e l l s p a c i n g = " 0 " c e l l p a d d i n g = " 0 " > < T R > < T D c o l s p a n = " 5 " > < I M G s r c = " i m g / p i x a m a r i l l o . j p g " W I D T H = " 1 0 0 % " H E I G H T = " 1 " > < / T D > < / T R > < T R h e i g h t = " 2 0 % " > < T D a l i g n = " l e f t " > < I M G s r c = " i m g / p i x a m a r i l l o . j p g " W I D T H = " 1 " H E I G H T = " 1 0 0 % " > < / T D > < T D c o l s p a n = " 3 " > < ? p h p i n c l u d e ( " b a n n e r . h t m l " ) ? > < / T D > < T D a l i g n = " r i g h t " > < I M G s r c = " i m g / p i x a m a r i l l o . j p g " W I D T H = " 1 " H E I G H T = " 1 0 0 % " > < / T D > < / T R > < T R > < T D c o l s p a n = " 5 " > < I M G s r c = " i m g / p i x a m a r i l l o . j p g " W I D T H = " 1 0 0 % " H E I G H T = " 1 " > < / T D > < / T R > < T R > < T D > < I M G s r c = " i m g / p i x a m a r i l l o . j p g " W I D T H = " 1 " H E I G H T = " 5 0 0 " B O R D E R = " 0 " > < / T D > < T D w i d t h = " 2 0 % " v a l i g n = " t o p " > < ? p h p i n c l u d e ( " a c c e s o . h t m l " ) ? > < ? p h p i n c l u d e ( " e n l a c e s . p h p " ) ? > < / T D > < T D > < I M G s r c = " i m g / p i x a m a r i l l o . j p g " W I D T H = " 1 " H E I G H T = " 5 0 0 " > < / T D > < T D > < ? p h p s w i t c h ( $ _ G E T [ " c u e r p o " ] ) { c a s e 0 : i n c l u d e ( " i n i c i o . p h p " ) b r e a k c a s e 1 : i n c l u d e ( " q u i e n e s . p h p " ) b r e a k c a s e 2 : i n c l u d e ( " d o n d e . p h p " ) b r e a k c a s e 3 : i n c l u d e ( " g a l e r i a . p h p " ) b r e a k c a s e 4 : i n c l u d e ( " c o m p r o b a r . p h p " ) b r e a k

c a s e 5 : i n c l u d e ( " c o n t a c t a . h t m l " ) b r e a k c a s e 6 : i n c l u d e ( " i n s e r t a r _ u s u a r i o . p h p " ) b r e a k } ? > < / T D > < T D a l i g n = " r i g h t " > < I M G s r c = " i m g / p i x a m a r i l l o . j p g " W I D T H = " 1 " H E I G H T = " 5 0 0 " > < / T D > < / T R > < T R > < T D c o l s p a n = " 5 " > < I M G s r c = " i m g / p i x a m a r i l l o . j p g " W I D T H = " 1 0 0 % " H E I G H T = " 1 " B O R D E R = " 0 " > < / T D > < / T R > < / T A B L E > < / B O D Y > < / H T M L >

Evidentemente, las pginas banner.html, acceso.html, enlaces.php, inicio.php, quienes.php, donde.php, galeria.php, comprobar.php, contacta.php e insertar_usuario.php deben existir, de lo contrario la funcin include al no encontraralgunadeellas,generarunerror.

Ellenguaje PHP

6.2.LASVARIABLES$_GETY$_POST

El protocolo HTTP (sobre el cual trabajan las aplicaciones basadas en web) define dos mtodos para pasar informacin entre pginas: GET y POST, los cualesdebenserespecificadosalutilizarformularioshtmldelasiguienteforma:
< h t m l > < b o d y > < f o r m a c t i o n = " r e c e p t o r . p h p " m e t h o d = " g e t " > < i n p u t t y p e = " t e x t " n a m e = " u n D a t o " > < i n p u t t y p e = " s u b m i t " v a l u e = " e n v i a r " n a m e = " e n v i a r " > < / f o r m > < / b o d y > < / h t m l >

Cuando un formulario se enva utilizando el mtodo GET los datos viajan a travsdeladireccindelapginaquelosrecibir,osea,loqueseverenla barradedireccionesaloprimirelbotneslosiguiente: http://servidor/receptor.php?unDato=valor&enviar=enviar Como puede observarse, la codificacin de los parmetros se realiza separndolosporuncarcter"&"ysuformatoes"nombre"="valor". Cuando un formulario se enva utilizando el mtodo POST los datos viajan codificadosdentrodelanegociacinentreelclienteyelservidor,demodoque nosonvisiblesenlabarradenavegacin. Para recuperar la informacin enviada por la primera pgina, el script receptor utilizar las variables $_GET o $_POST segn el mtodo de envo de los mismos.Estasvariablessoncoleccionesquecontienentodolorecibidodesdeel cliente.Enelejemploanterior,paraobtenerelvaloringresadoenelcuadrode textodeberaescribirselosiguiente:
$ d a t o = $ _ G E T [ u n D a t o ' ]

Anlogamente,sisehubieseenviadoutilizandoelmtodoPOST,la recuperacindeldatoseveradelasiguienteforma:
$ d a t o = $ _ P O S T [ u n D a t o ' ]

MANEJODESESIONES Losmtodosdecompartirinformacinquesehananalizadohastaelmomento slotienenaplicacincuandosetratadedatosaserintercambiadosentreuna pginaysusiguiente. Existen muchas ocasiones en que esto no es suficiente, ya que se necesita contarconciertainformacindisponibleparatodaslaspginasdelaaplicacin, paraelloesnecesariocontarconsesionesdelservidor. Tantoparaalmacenarinformacincomopararecuperarladelasesinseutiliza lavariable$_SESSION,lacualesunacoleccin. Ejemplo:
$ _ S E S S I O N [ u n D a t o ' ] = 2 4 $ d a t o = $ _ S E S S I O N [ u n D a t o ' ]

Ellenguaje PHP

7.MYSQL

MySqlesunservidordebasesdedatosrelaciones(RDBMS).DadoqueMySql es un producto de cdigo abierto y est desarrollado principalmente para la plataformaLinux,sehaconvertidoenelcompaeroidealdePHP.

Ellenguaje PHP

7.1.CARACTERSTICASDEMYSQL

MySql es un excelente producto para el almacenamiento seguro de grandes volmenes de datos. Cualquier aplicacin que requiera soporte de bases de datospuedeutilizarMySql.ParticularmentesuusoparaaplicacionesdeInternet estdadoporsuvelocidadderespuestafrenteaotrasalternativascomerciales. Comotodoservidordebasesdedatos,MySqlutilizaunaestructuradeseguridad para acceder a los datos almacenados, por lo tanto, siempre que nos conectemos al servidor deberemos identificarnos mediante un nombre de usuarioyunacontrasea.

Ellenguaje PHP

7.2.SINTAXISBSICA

MySqlpuedeserutilizadoenmodoconsola,tantoparalaadministracincomo para la manipulacin de los datos pero adems tenemos MySQL Workbench, una interfaz grfica para la administracin de la base de datos (a travs del espaciodetrabajoServerAdministration')yparalamanipulacindelosdatos (utilizandoSQLDevelopment'). MySqlutilizalasintaxisStandardANSISQLparalamanipulacindelasbases dedatos,yaunqueesteapartadoquedarafueradelalcancedeestaunidad,a continuacindaremosunabrevereseadelasinstruccionesmsutilizadas. SELECT EstaessentenciaSQLquenospermiteobtenerdatosalmacenadosenlabase, permitiendo a su vez ordenarlos y filtrarlos segn criterios sumamente elaborados.Lasintaxisesbsicamentelasiguiente:
S E L E C T [ C A M P O | * ] F R O M [ T A B L A ]

DondeCAMPOpuedeserunalistadecamposseparadosporcomas. Elresultadodeejecutarestasentenciaesunatablaquecontienelainformacin detodoslosregistrosalmacenadosenlatablaTABLAperonicamenteaquellos camposseleccionados. Parafiltrarregistros(seleccionarslounapartedelosregistrosdeunatabla)se utilizalapalabraclaveWHEREdelasiguientemanera:


S E L E C T * F R O M T A B L A W H E R E C A M P O > 5

De esta forma se obtiene una tabla con todos los registros de la tabla TABLA pero solamente de aquellos que cumplan con la condicin de que el dato contenido en su campo CAMPO sea mayor que 5. En la clusula WHERE puedenserexpresadascondicionessumamentecomplejas,incluyendotodaslas operaciones booleanas, lo cual constituye uno de los puntos ms fuertes del lenguajeSQL. Porltimoveremoscmosolicitaralservidorunresultadoordenado.Paralograr esteobjetivoutilizaremoslaspalabrasclavesORDERBY:
S E L E C T * F R O M T A B L A W H E R E C A M P O < 7 O R D E R B Y C A M P O 2

Nuevamente,estasentenciaobtieneunatablacompuestaportodoslosregistros delatablaquecumplanconlacondicindequesucamposeamenorque7pero

ordenadosenformaascendenteporelcampoCAMPO2. INSERT Estasentenciapermiteingresarnuevosdatosentablasdelabase.Susintaxis eslasiguiente:


I N S E R T I N T O [ T A B L A ] ( [ C A M P O 1 , C A M P O 2 , . . . ] ) V A L U E S ( [ V A L O R 1 , V A L O R 2 , . . . ] )

TABLAcorrespondealatablaenlacualqueremosaadirunregistro.CAMPO1, CAMPO2,etc...sonloscamposaloscualesqueremosasignarleunvalorparael registroaadidorecientemente.Esimportantenotarquelosvaloresseasignana los campos segn el orden en el que stos son nombrados en los parntesis siguientes del nombre de la tabla, de esta forma, VALOR1 se asignar a CAMPO1,VALOR2aCAMPO2,etc... DELETE Estasentenciapermiteeliminardatosexistentesentablasdelabase.Susintaxis eslasiguiente:
D E L E T E F R O M [ T A B L A ] W H E R E [ C O N D I C I O N ]

DondeTABLAeslatabladelacualqueremoseliminarfilasyCONDICIONesel criterio que se utilizar para decidir cules de ellas deben ser eliminadas. Es importanteespecificaruncriterio,dadoquedeotraformaseasumequeelcriterio escumplidopor todos losregistros,locualdaracomoresultadolaeliminacin totaldelosregistrosdelatabla. UPDATE Esta sentencia permite actualizar datos existentes en tablas de la base. Su sintaxiseslasiguiente:
U P D A T E [ T A B L A ] S E T [ C A M P O 1 ] = [ V A L O R 1 ] , [ C A M P O 2 ] = [ V A L O R 2 ] W H E R E [ C O N D I C I O N ]

DondeTABLAeslatabladelacualqueremosactualizarfilasyCONDICIONes elcriterioqueseutilizarparadecidirculesdeellasdebenseractualizadas.Es importanteespecificaruncriterio,dadoquedeotraformaseasumequeelcriterio escumplidoportodoslosregistros,locualdaracomoresultadolaactualizacin detodoslosregistrosdelatabla.

Ellenguaje PHP

7.3.FUNCIONESDEPHPPARAINTERACTUARCONMYSQL

A continuacin daremos un detalle de las funciones provistas por PHP para manipularbasesdedatosadministradasporelservidorMySql. MYSQL_CONNECT AbreunaconexinaunservidorMySQL. Parmetros:stringserver,stringusuario,stringpassword.Todoslosparmetros son opcionales y si no se especifican se toman los valores por defecto "localhost",usuariopropietariodelprocesodelservidor,passwordvaca. Devuelve:Unidentificadordeenlacepositivositienexito,ofalsosierror. Estaeslaprimerafuncinautilizarcuandosedeseautilizarunabasededatos MySql,medianteestallamadaseobtieneunidentificadordeenlace,elcualser utilizadoposteriormenteporlassucesivasfunciones. Ejemplo:
< ? p h p $ l i n k = m y s q l _ c o n n e c t ( " l o c a l h o s t " , " r o o t " , " a d m i n " ) o r d i e ( " C o u l d n o t c o n n e c t " ) p r i n t ( " C o n e c t a d o " ) m y s q l _ c l o s e ( $ l i n k ) ? >

Elenlacealservidorsercerradotanprontocomolaejecucindelscriptfinalice, amenosquesecierreantesexplcitamentellamandoamysql_close(). MYSQL_CLOSE CierraelenlaceconMySQL. Parmetros:intidentificador_de_enlace. Devuelve:verdaderosiexito,falsosierror. Esta funcin cierra el enlace con la base MySQL que est asociada con el identificador de enlace especificado. Si no se especifica el identificador de enlace,seasumepordefectoelltimo.

Ejemplo:
< ? p h p m y s q l _ c l o s e ( $ l i n k ) ? >

MYSQL_SELECT_DB SeleccionaunabasededatosMySQL. Parmetros:stringbase_de_datos[,intidentificador_de_enlace] Devuelve:TRUEsitienexito,FALSEsierror. mysql_select_db() establece la base activa que estar asociada con el identificador de enlace especificado. Si no se especifica un identificador de enlace,seasumeelultimoenlaceabierto. Sinohayningnenlaceabierto,lafuncinintentarestablecerunenlacecomo sisellamaraamysql_connect(). Ejemplo:
$ b d = m y s q l _ s e l e c t _ d b ( " t i e n d a " , $ c o n e x i o n )

Todallamadaposterioramysql_query()utilizarlabasededatosactivada. EsimportantenotarqueunmismoservidorMySqlpuedeadministrarmsdeuna basededatosalavez,debidoqueestafuncincumpleunpapelimportanteala horadecomunicarnosconl. MYSQL_QUERY EnvaunasentenciaSQLaMySQL. Parmetros:stringsentencia[,intidentificador_de_enlace]. Devuelve:TRUE(nocero)oFALSEparaindicarsilasentenciasehaejecutado correctamente o no. Un valor TRUE significa que la sentencia era correcta y pudo ser ejecutada en el servidor. No indica nada sobre el nmero de filas devueltas.Esperfectamenteposiblequelasentenciaseejecutecorrectamente pero que no devuelva ninguna fila (Caso de sentencias INSERT, UPDATE, DELETE). mysql_query() enva una sentencia a la base activa en el servidor asociado al identificador de enlace. Si no es especificado un identificador_de_enlace, se asumir el ltimo enlace abierto. Si no hay ningn enlace abierto, la funcin intenta establecer un enlace como si se llamara funcin mysql_connect() sin argumentos,yloutilizar. Lasentencianopuedeterminarporpuntoycoma. Lasiguientesentenciaesinvlidasintcticamente,asquemysql_query()fallay devuelveFALSE:
< ? p h p $ r e s u l t = m y s q l _ q u e r y ( " S E L E C T * W H E R E 1 = 1 " )

o r d i e ( " C o n s u l t a i n v l i d a " ) ? >

Lasiguientesentenciaesinvlidasemnticamentesimy_colnoesunacolumna delatablamy_tbl,asiquemysql_query()fallaydevuelveFALSE:
< ? p h p $ r e s u l t = m y s q l _ q u e r y ( " S E L E C T m y _ c o l F R O M m y _ t b l " ) o r d i e ( " C o n s u l t a i n v l i d a " ) ? >

mysql_query()fallartambinydevolver FALSE sinosetieneelpermisode accesoalatablaespecificadaenlasentencia. Asumiendolasentenciatengaxito,sepuedellamara mysql_affected_rows() parasabercuntasfilasfueronafectadas(paraDELETE,INSERT,oUPDATE) Paralas sentencias SELECT, mysql_query() devuelve un nuevo identificador de resultado que se puede pasar a funciones como mysql_fetch_array(). Cuando se acabe de utilizar el resultado, se pueden liberar los recursos asociadosutilizandomysql_free_result(). Ejemplo:Obtenertodoslosdatosdelosartculosdelatablaproductos:
$ c o n e x i o n = m y s q l _ c o n n e c t ( " l o c a l h o s t " , " r o o t " , " a d m i n " ) # p r i n t ( " I d e n t i f i c a d o r d e c o n e x i o n : " . $ c o n e x i o n ) $ b d = m y s q l _ s e l e c t _ d b ( " t i e n d a " , $ c o n e x i o n ) $ r e s = m y s q l _ q u e r y ( " s e l e c t * f r o m p r o d u c t o s " , $ c o n e x i o n )

MYSQL_FETCH_ARRAY Extraelafiladeresultadocomounamatrizasociativa. Parmetros:intid_resultado. Devuelve una matriz que corresponde a la sentencia extrada, o falso si no quedanmsfilas. Ejemplo:Seleccionarelnombreyapellidosdetodoslosusuarios.
< ? p h p $ r e s u l t = m y s q l _ q u e r y ( " s e l e c t n o m b r e , a p e l l i d o s f r o m u s u a r i o s " , $ c o n e x i o n ) w h i l e ( $ r o w = m y s q l _ f e t c h _ a r r a y ( $ r e s u l t ) ) { e c h o " N o m b r e : $ r o w [ 0 ] , A p e l l i d o s : $ r o w [ 1 ] " } m y s q l _ f r e e _ r e s u l t ( $ r e s u l t ) ? >

MYSQL_FETCH_ROW

Similar a la anterior extrae un fila de la consulta realizada, incrementando el recordsetqueapuntaalafilaextrada.


$ r s = m y s q l _ f e t c h _ r o w ( $ r e s ) Ejemplo:

"Mostrar por pantalla todos los datos de la tabla artculos, correctamente tabulados".
< ? p h p $ n u m c a m p o s = m y s q l _ n u m _ f i e l d s ( $ r e s ) $ n u m f i l a s = 5 ? > < B R > < T A B L E b o r d e r = " 2 " > < ? p h p w h i l e ( $ r s = m y s q l _ f e t c h _ r o w ( $ r e s ) ) { ? > < T R > < ? p h p f o r ( $ p o s = 0 $ p o s < $ n u m c a m p o s $ p o s + + ) { ? > < t d > < ? p h p p r i n t ( $ r s [ $ p o s ] ) p r i n t ( " < A h r e f = \ " p a g . p h p ? r e f = " . $ r s [ 0 ] . " \ " > " . $ n . " < / A > " ) ? > < / t d > < ? p h p } ? > < / T R > < ? p h p } ? > < / T A B L E >

MYSQL_FREE_RESULT Liberalamemoriadelresultado Parmetros:intid_resultado. mysql_free_result() slo necesita ser llamada si te preocupa usar demasiada

memoria durante la ejecucin de tu script. Toda la memoria del resultado especificadoenelparmetrodelidentificadorderesultadoserautomticamente liberadaalfinalizarlaejecucindelscript.

Ellenguaje PHP

7.4.EJEMPLOBSICO

El siguiente ejemplo muestra las operaciones bsicas que deben ejecutarse desdePHPpararealizarunaconsultaaunabasededatosMySQL.Enprimer lugar,realizaremosunaconexinaMySQLyalabasededatos,ejecutaremosla consulta,procesaremoselresultadoycerraremoslaconexin:
< H T M L > < H E A D > < T I T L E > A c c e s o a B a s e D a t o s M y S Q L < / T I T L E > < / H E A D > < B O D Y > < ? p h p $ e n l a c e = m y s q l _ c o n n e c t ( ' 1 2 7 . 0 . 0 . 1 ' , ' r o o t ' , ' c e s u r ' ) o r d i e ( " N o s e p u d o c o n e c t a r " ) e c h o " < p > C o n e x i o n e x i t o s a < / p > " $ d b = " t e s t " m y s q l _ s e l e c t _ d b ( $ d b , $ e n l a c e ) o r d i e ( " N o s e p u d o s e l e c c i o n a r l a b a s e d e d a t o s $ d b " ) e c h o " < p > U t i l i z a n d o l a b a s e d e d a t o s $ d b < / p > " $ s q l = " S E L E C T n o m b r e F R O M u s u a r i o s " $ r e s u l t _ i d = m y s q l _ q u e r y ( $ s q l , $ e n l a c e ) o r d i e ( " N o s e p u d o e j e c u t a r < p r e > $ s q l < / p r e > " ) w h i l e ( $ f i l a = m y s q l _ f e t c h _ a r r a y ( $ r e s u l t _ i d ) ) { e c h o " < p > U s u a r i o = " . $ f i l a [ ' n o m b r e ' ] . " < / p > " } m y s q l _ f r e e _ r e s u l t ( $ r e s u l t _ i d ) m y s q l _ c l o s e ( $ e n l a c e ) ? > < / B O D Y >

< / H T M L >

Ellenguaje PHP

8.HTML,PHPYMYSQL.EJEMPLOCOMPLETO

A continuacin mostraremos un ejemplo completo de conexin a un servidor MySQLdesdePHP,dondesellevarnacabooperacionesdemantenimientode losdatosdelatablausuarios'(consulta,alta,bajaymodificacin).

Ellenguaje PHP

8.1.BASEDEDATOS

En primer lugar, debemos definir la estructura de la tabla que contendr la informacin que deseamos mantener. Crearemos la tabla usuarios' sobre la basededatostest'elscriptdecreacineselsiguiente:
C R E A T E T A B L E t e s t . u s u a r i o s ( i d i n t ( 4 ) N O T N U L L A U T O _ I N C R E M E N T P R I M A R Y K E Y , n o m b r e v a r c h a r ( 3 0 ) N O T N U L L , a p e l l i d o s v a r c h a r ( 5 0 ) N O T N U L L , d n i i n t ( 1 0 ) N O T N U L L U N I Q U E )

Ellenguaje PHP

8.2.ESTRUCTURADELAAPLICACIN

Laaplicacinestarcompuestaporlosarchivosquesedetallanacontinuacin: Nombre usuarios.php Descripcin Pginaprincipaldelaaplicacin. Muestraunalistadelosusuarios,y enlacespararealizarlasoperacionesde alta,modificacinybaja. RealizalaconexinaMySQLyala basededatosqueutilizaremos. Esteficheroserincluidoenlos distintosprogramasdelaaplicacin. cerrar_conexion.php Cierralaconexinqueseha establecidoanteriormente. Esteficheroserincluidoenlos distintosprogramasdelaaplicacin. alta.php Muestraloscamposvacospara introducirlainformacindelnuevo usuario.Sepodrgrabar,ocancelarla operacin.Algrabar,seejecutala accin(alta_accion.php)sisecancela, seretornaapginaprincipaldela aplicacin.

conexion.php

alta_accion.php

Ejecutalaaccindealtadeunnuevo usuario,insertandoelnuevoregistroen latablausuarios'.

modificacion.php

Muestralosvaloresdelusuario seleccionado,paraquesepuedan modificarlosquecorrespondan. Sepodrgrabar,ocancelarla operacin.Algrabar,seejecutala accin(modificacion_accion.php)sise cancela,seretornaapginaprincipalde laaplicacin.

modificacion_accion.php

Ejecutalaaccindemodificacindeun usuario,actualizandoenlatabla usuarios'losvaloresdelregistro correspondiente. Ejecutalaaccindebajadeunusuario, borrandodelatablausuarios'elregistro seleccionado.

baja_accion.php

Ellenguaje PHP

8.3.CDIGOFUENTE

A continuacin se muestra el cdigo fuente de los archivos que forman la aplicacin: conexion.php ComoprimerpasocrearemoslaconexinconMySQL,elscriptcorrespondiente ser conexin.php, el cual estar incluido en otros archivos de la aplicacin utilizando la funcin de PHP include <nombre_archivo>. Sin una conexin establecidanosepodrtrabajarconlabasededatos. En el archivo conexin.php deben ser configuradas las variables correspondientesanuestroservidor(host,usuarioypassword)paraaccederal MySQL,ademsindicarquebasededatosseutilizaraenlaconexin. Entoncespodemosabrirelblocdenotas,escribirlassiguienteslneasdecdigo yguardarlasconelnombreconexin.php:
< ? p h p $ d b h o s t = ' 1 2 7 . 0 . 0 . 1 ' / / h o s t d e l M y S Q L ( g e n e r a l m e n t e l o c a l h o s t o 1 2 7 . 0 . 0 . 1 ) $ d b u s u a r i o = ' r o o t ' / / n o m b r e d e u s u a r i o p a r a a c c e d e r a l a b a s e $ d b p a s s w o r d = ' c e s u r ' / / c o n t r a s e a p a r a e l a c c e s o d e l u s u a r i o $ d b = " t e s t " / / n o m b r e d e l a b a s e d e d a t o s / / C o n e x i n c o n M y S Q L . $ c o n e x i o n = m y s q l _ c o n n e c t ( $ d b h o s t , $ d b u s u a r i o , $ d b p a s s w o r d ) o r d i e ( " N o e s p o s i b l e c o n e c t a r c o n M y S q l . " ) / / S i e l u s u a r i o n o t i e n e c o n t r a s e a , u s a m o s e s t a o t r a s e n t e n c i a , q u e n o l e p a s a d i c h o p a r m e t r o . / / $ c o n e x i o n = m y s q l _ c o n n e c t ( $ d b h o s t , $ d b u s u a r i o ) o r d i e ( " N o e s p o s i b l e c o n e c t a r c o n M y S q l . " ) / / S e l e c c i n d e l a b a s e d e d a t o s q u e q u e r e m o s u t i l i z a r p a r a e s t a c o n e x i n . m y s q l _ s e l e c t _ d b ( $ d b , $ c o n e x i o n ) o r d i e ( " N o s e p u e d e c o n e c t a r a l a b a s e d e d a t o s $ b d . " ) ? >

conexion.php Seracorrectocerrarlaconexinabiertaalterminardetrabajarconlabase,para ellocreamosunnuevoarchivoconsolamenteunalneadecdigo:


< ? p h p m y s q l _ c l o s e ( $ c o n e x i o n ) ? >

Esta lnea cierra la conexin con el motor MySQL abierta en el archivo conexion.php,estearchivoserincluidoalfinaldetodoslosscriptsqueutilicen conexinconbasededatos. usuarios.php Muestralapginaprincipaldelaaplicacin.Seleccionalosregistrosdelatabla usuarios,ymedianteunaiteracinformaunatablaenlacualserepresentarla listadeusuariosordenadaporelcamponombre.Adems,contieneenlacespara realizarlasoperacionesdealta,modificacinybaja.
< H T M L > < H E A D > < T I T L E > U s u a r i o s < / T I T L E > < / H E A D > < B O D Y > < H 1 > L i s t a d e U s u a r i o s < / H 1 > < h r > < p > < ? p h p i n c l u d e " c o n e x i o n . p h p " $ r e s u l t = m y s q l _ q u e r y ( " s e l e c t i d , n o m b r e , a p e l l i d o s , d n i f r o m u s u a r i o s o r d e r b y n o m b r e " , $ c o n e x i o n ) ? > < T A B L E B O R D E R = 1 C E L L S P A C I N G = 1 C E L L P A D D I N G = 1 > < T R > < T D w i d t h = " 1 5 0 " > < B > N o m b r e < / B > < / T D > < T D w i d t h = " 2 0 0 " > < B > A p e l l i d o s < / B > < / T D > < T D w i d t h = " 1 0 0 " > < B > D N I < / B > < / T D > < T D w i d t h = " 5 0 " > & n b s p < / T D > < T D w i d t h = " 5 0 " > & n b s p < / T D > < / T R > < ? p h p w h i l e ( $ r o w = m y s q l _ f e t c h _ a r r a y ( $ r e s u l t ) ) { e c h o " < t r >

< t d > $ r o w [ 1 ] < / t d > < t d > $ r o w [ 2 ] < / t d > < t d > $ r o w [ 3 ] < / t d > < t d a l i g n = ' c e n t e r ' > < a h r e f = ' m o d i f i c a c i o n . p h p ? i d = $ r o w [ 0 ] ' > M o d i f . < / a > < / t d > < t d a l i g n = ' c e n t e r ' > < a h r e f = ' b a j a _ a c c i o n . p h p ? i d = $ r o w [ 0 ] ' > B o r r a r < / a > < / t d > < / t r > " } m y s q l _ f r e e _ r e s u l t ( $ r e s u l t ) i n c l u d e " c e r r a r _ c o n e x i o n . p h p " ? > < / T A B L E > < p > < a h r e f = " a l t a . p h p " > A a d i r < / a > < p > < h r > < / B O D Y > < / H T M L >

alta.php Muestraloscamposvacosparaintroducirlainformacindelnuevousuario.Se podr grabar, o cancelar la operacin. Al grabar, se ejecuta la accin (alta_accion.php)sisecancela,seretornaapginaprincipaldelaaplicacin.
< h t m l > < h e a d > < t i t l e > U s u a r i o s A l t a < / t i t l e > < / h e a d > < b o d y > < H 1 > A l t a < / H 1 > < h r > < p > < F O R M A C T I O N = " a l t a _ a c c i o n . p h p " > < T A B L E > < T R > < T D > N o m b r e : < / T D > < T D > < I N P U T T Y P E = ' t e x t ' N A M E = ' n o m b r e ' S I Z E = ' 3 0 ' M A X L E N G T H = ' 3 0 ' > < / T D > < / T R > < T R > < T D > A p e l l i d o s : < / T D > < T D > < I N P U T T Y P E = ' t e x t ' N A M E = ' a p e l l i d o s ' S I Z E = ' 5 0 ' M A X L E N G T H = ' 5 0 ' > < / T D > < / T R >

< T R > < T D > D N I : < / T D > < T D > < I N P U T T Y P E = ' t e x t ' N A M E = ' d n i ' S I Z E = ' 1 0 ' M A X L E N G T H = ' 1 0 ' > < / T D > < / T R > < / T A B L E > < p > < I N P U T T Y P E = " s u b m i t " N A M E = " a c c i o n " V A L U E = " A a d i r " > < I N P U T T Y P E = " s u b m i t " N A M E = " a c c i o n " V A L U E = " C a n c e l a r " > < / F O R M > < h r > < / b o d y > < / h t m l >

alta_accion.php Ejecutalaaccindealtadeunnuevousuario,insertandoelnuevoregistroenla tablausuarios'.


< ? p h p / / T o m a m o s e l p a r m e t r o ' a c c i o n ' , q u e c o n t i e n e l a o p e r a c i n a r e a l i z a r . $ a c c i o n = $ _ G E T [ ' a c c i o n ' ] i f ( $ a c c i o n = = " C a n c e l a r " ) { / / N o r e a l i z a m o s n i n g u n a o p e r a c i n . / / V o l v e m o s a l a p g i n a p r i n c i p a l . h e a d e r ( " L o c a t i o n : u s u a r i o s . p h p " ) } e l s e i f ( $ a c c i o n = = " A a d i r " ) { / / T o m a m o s l o s p a r m e t r o s r e c i b i d o s $ n o m b r e = $ _ G E T [ ' n o m b r e ' ] $ a p e l l i d o s = $ _ G E T [ ' a p e l l i d o s ' ] $ d n i = $ _ G E T [ ' d n i ' ] i n c l u d e " c o n e x i o n . p h p " / / I n s e r t a m o s e l n u e v o r e g i s t r o . / / N o s e i n c l u y e e l c a m p o c l a v e ' i d ' , y a q u e e s a u t o n u m r i c o . m y s q l _ q u e r y ( " I N S E R T I N T O u s u a r i o s ( n o m b r e , a p e l l i d o s , d n i ) V A L U E S ( ' $ n o m b r e ' , ' $ a p e l l i d o s ' , $ d n i ) " , $ c o n e x i o n ) / / G u a r d a m o s e l c d i g o y d e s c r i p c i n d e l e r r o r

d e v u e l t o / / ( s e r 0 s i n o h a y e r r o r ) . $ n u m _ e r r o r = m y s q l _ e r r n o ( $ c o n e x i o n ) $ d e s c _ e r r o r = m y s q l _ e r r o r ( $ c o n e x i o n ) i n c l u d e " c e r r a r _ c o n e x i o n . p h p " / / S i n o h a y n i n g n e r r o r i f ( $ n u m _ e r r o r = = 0 ) { / / V o l v e m o s a l a p g i n a p r i n c i p a l . h e a d e r ( " L o c a t i o n : u s u a r i o s . p h p " ) } e l s e { / / M o s t r a m o s e l e r r o r q u e s e h a p r o d u c i d o e c h o " < H 1 > E r r o r < / H 1 > < p > " e c h o " N o s e h a p o d i d o r e a l i z a r l a o p e r a c i n . < b r > " e c h o " E r r o r ( $ n u m _ e r r o r ) : $ d e s c _ e r r o r < p > " e c h o " < a h r e f = ' u s u a r i o s . p h p ' > V o l v e r < / a > " } } ? >

modificacion.php Muestralosvaloresdelusuarioseleccionado,paraquesepuedanmodificarlos quecorrespondan.Sepodrgrabar,ocancelarlaoperacin.Algrabar,se ejecutalaaccin(modificacion_accion.php)sisecancela,seretornaapgina principaldelaaplicacin.


< h t m l > < h e a d > < t i t l e > U s u a r i o s M o d i f i c a c i n < / t i t l e > < / h e a d > < b o d y > < H 1 > M o d i f i c a c i n < / H 1 > < h r > < p > < ? p h p

$ i d = $ _ G E T [ ' i d ' ] i n c l u d e " c o n e x i o n . p h p " $ r e s u l t = m y s q l _ q u e r y ( " S E L E C T i d , n o m b r e , a p e l l i d o s , d n i F R O M u s u a r i o s W H E R E i d = $ i d " , $ c o n e x i o n ) $ r o w = m y s q l _ f e t c h _ r o w ( $ r e s u l t ) ? > < F O R M A C T I O N = " m o d i f i c a c i o n _ a c c i o n . p h p " > < T A B L E > < ? p h p e c h o " < T R > < T D > N o m b r e : < / T D > < T D > < I N P U T T Y P E = ' t e x t ' V A L U E = ' $ r o w [ 1 ] ' N A M E = ' n o m b r e ' S I Z E = ' 3 0 ' M A X L E N G T H = ' 3 0 ' > < / T D > < / T R > " e c h o " < T R > < T D > A p e l l i d o s : < / T D > < T D > < I N P U T T Y P E = ' t e x t ' V A L U E = ' $ r o w [ 2 ] ' N A M E = ' a p e l l i d o s ' S I Z E = ' 5 0 ' M A X L E N G T H = ' 5 0 ' > < / T D > < / T R > " e c h o " < T R > < T D > D N I : < / T D > < T D > < I N P U T T Y P E = ' t e x t ' V A L U E = ' $ r o w [ 3 ] ' N A M E = ' d n i ' S I Z E = ' 1 0 ' M A X L E N G T H = ' 1 0 ' > < / T D > < / T R > " e c h o " < T R > < T D > < / T D > < T D > < I N P U T T Y P E = ' h i d d e n ' v a l u e = ' $ r o w [ 0 ] ' N A M E = ' i d ' > < / T D > < / T R > " i n c l u d e " c e r r a r _ c o n e x i o n . p h p " ? > < / T A B L E > < p > < I N P U T T Y P E = " s u b m i t " N A M E = " a c c i o n " V A L U E = " M o d i f i c a r " > < I N P U T T Y P E = " s u b m i t " N A M E = " a c c i o n " V A L U E = " C a n c e l a r " > < / F O R M > < h r > < / b o d y > < / h t m l >

modificacion_accion.php Ejecuta la accin de modificacin de un usuario, actualizando en la tabla usuarios'losvaloresdelregistrocorrespondiente.


< ? p h p / / T o m a m o s e l p a r m e t r o ' a c c i o n ' , q u e c o n t i e n e l a o p e r a c i n a r e a l i z a r . $ a c c i o n = $ _ G E T [ ' a c c i o n ' ] i f ( $ a c c i o n = = " C a n c e l a r " ) { / / N o r e a l i z a m o s n i n g u n a o p e r a c i n .

/ / V o l v e m o s a l a p g i n a p r i n c i p a l . h e a d e r ( " L o c a t i o n : u s u a r i o s . p h p " ) } e l s e i f ( $ a c c i o n = = " M o d i f i c a r " ) { / / T o m a m o s l o s p a r m e t r o s r e c i b i d o s $ i d = $ _ G E T [ ' i d ' ] $ n o m b r e = $ _ G E T [ ' n o m b r e ' ] $ a p e l l i d o s = $ _ G E T [ ' a p e l l i d o s ' ] $ d n i = $ _ G E T [ ' d n i ' ] i n c l u d e " c o n e x i o n . p h p " / / A c t u a l i z a m o s l o s c a m b i o s r e a l i z a d o s . m y s q l _ q u e r y ( " U P D A T E u s u a r i o s S E T n o m b r e = ' $ n o m b r e ' , a p e l l i d o s = ' $ a p e l l i d o s ' , d n i = $ d n i W H E R E i d = $ i d " , $ c o n e x i o n ) / / G u a r d a m o s e l c d i g o y d e s c r i p c i n d e l e r r o r d e v u e l t o ( s e r 0 s i n o h a y e r r o r ) $ n u m _ e r r o r = m y s q l _ e r r n o ( $ c o n e x i o n ) $ d e s c _ e r r o r = m y s q l _ e r r o r ( $ c o n e x i o n ) i n c l u d e " c e r r a r _ c o n e x i o n . p h p " / / S i n o h a y n i n g n e r r o r i f ( $ n u m _ e r r o r = = 0 ) { / / V o l v e m o s a l a p g i n a p r i n c i p a l . h e a d e r ( " L o c a t i o n : u s u a r i o s . p h p " ) } e l s e { / / M o s t r a m o s e l e r r o r q u e s e h a p r o d u c i d o e c h o " < H 1 > E r r o r < / H 1 > < p > " e c h o " N o s e h a p o d i d o r e a l i z a r l a o p e r a c i n . < b r > " e c h o " E r r o r ( $ n u m _ e r r o r ) : $ d e s c _ e r r o r < p > " e c h o " < a h r e f = ' u s u a r i o s . p h p ' > V o l v e r < / a > " } } ? >

baja_accion.php Ejecuta la accin de baja de un usuario, borrando de la tabla usuarios' el registroseleccionado.


< ? p h p / / T o m a m o s e l p a r m e t r o r e c i b i d o . / / C o n t i e n e l a c l a v e d e l r e g i s t r o a e l i m i n a r . $ i d = $ _ G E T [ ' i d ' ] i n c l u d e " c o n e x i o n . p h p " / / D a m o s d e b a j a e l r e g i s t r o . m y s q l _ q u e r y ( " D E L E T E F R O M u s u a r i o s W H E R E i d = $ i d " , $ c o n e x i o n ) / / G u a r d a m o s e l c d i g o y d e s c r i p c i n d e l e r r o r d e v u e l t o ( s e r 0 s i n o h a y e r r o r ) $ n u m _ e r r o r = m y s q l _ e r r n o ( $ c o n e x i o n ) $ d e s c _ e r r o r = m y s q l _ e r r o r ( $ c o n e x i o n ) i n c l u d e " c e r r a r _ c o n e x i o n . p h p " / / S i n o h a y n i n g n e r r o r i f ( $ n u m _ e r r o r = = 0 ) { / / V o l v e m o s a l a p g i n a p r i n c i p a l . h e a d e r ( " L o c a t i o n : u s u a r i o s . p h p " ) } e l s e { / / M o s t r a m o s e l e r r o r q u e s e h a p r o d u c i d o e c h o " < H 1 > E r r o r < / H 1 > < p > " e c h o " N o s e h a p o d i d o r e a l i z a r l a o p e r a c i n . < b r > " e c h o " E r r o r ( $ n u m _ e r r o r ) : $ d e s c _ e r r o r < p > " e c h o " < a h r e f = ' u s u a r i o s . p h p ' > V o l v e r < / a > " } ? >

Ellenguaje PHP

9.ENTORNODEDESARROLLO.ZENDSTUDIO

Se trata de un programa de la casa Zend orientado a desarrollar aplicaciones web en lenguaje PHP. El programa, adems de servir de editor de texto para pginasPHP,proporcionaunaseriedeayudasquepasandesdelacreaciny gestindeproyectoshastaladepuracindecdigo. ZendStudioconstadedospartesenlasquesedividenlasfuncionalidadesde partedelclienteylasdelservidor.Lasdospartesseinstalanporseparado,ladel cliente contiene el interfaz de edicin y la ayuda. Permite adems hacer depuracionessimplesdescripts,aunqueparadisfrutardetodalapotenciadela herramienta de depuracin habr que disponer de la parte del servidor, que instala Apache y el mdulo PHP o, en caso de que ya estn instalados, los configuraparatrabajarjuntosendepuracin.

Ellenguaje PHP

9.1.INSTALACIN

En primer lugar es necesario descargar el fichero de instalacin de la pgina oficialdeZend:

PginaoficialdeZend

ExistendistribucionestantoparaWindowscomoLinux.Enestaunidadvamosa trabajar con Linux, se debe extraer y ejecutar el fichero ZendStudio 7_x_xRC0.bin Seiniciarelprocesodeinstalacin,conunapginadeinicio,ylaaceptacin delosacuerdosdelicenciaposteriormenteserequerirlasiguienteinformacin:

Noesnecesariomodificarningnvalor,pulsamosNext. Se indicar la ruta de instalacin de Zend Studio, y la creacin de accesos directos a la nueva aplicacin. Pulsamos Next, y aparecer una ventana para

asociar diferentes extensiones a esta aplicacin. Podemos dejarlas todas marcadas,ypulsarNext.

Seabrirunaventanaquemuestralosparmetrosdeinstalacinintroducidos.Al pulsarInstallseiniciarelproceso. Completadalainstalacin,sepodraccederdirectamentealaaplicacin.

Ellenguaje PHP

9.2.DETALLESDELENTORNO

VENTANAINICIAL Alabrirlaaplicacin,laprimeraventanaquesenosmuestraeslasiguiente:

Eslapartedelprogramaquenospermiteescribirlosscriptsesbastantetilpara laprogramacinenPHP.Lainterfazestcompuestaporvariaspartes,podemos destacarenlaparteizquierdaunexploradordearchivos,yenlapartecentralel cdigofuentedelficherocorrespondiente. ESPACIODETRABAJO Enprimerlugaresnecesario,definirelWorkspace',esdecir,eldirectorioderaz apartirdelcualvamosatrabajar. Paradefinirunnuevoespaciodetrabajo,debemosseleccionarsobrelaopcin demen File | Switch Workspace | Other... y se mostrar una ventana para

indicareldirectoriorazsobreelquevamosatrabajar.Siindicamoslacarpeta razdenuestroservidorApache,losnuevosficheroscreadossepodrnejecutar directamentedesdeelservidordeaplicaciones.

GESTINDEPROYECTOS Sobreelnuevoespaciodetrabajodebemosdefinirunproyecto,queeselque agrupartodoslosficherosquesonnecesariosparanuestraaplicacin. Labarradelaizquierdadisponedeherramientasparagestionarlosproyectos, muy tiles para mejorar la productividad en la programacin. Los proyectos permitenguardarmuchamsinformacinalprogramasobrelosarchivosquese gestionenennuestrasaplicacionesPHP. Paracrearunproyectosobreelreaizquierdadelexplorador,marcamosconel botnderechodelratn,yseleccionamoslaopcinNew|PHPProject,seabrir lasiguienteventana,dondebastarconindicarelnombredelproyectoypulsar Finish'. Es importante tener en cuenta que sobre la carpeta raz (Workspace) se va a crearunacarpetaconestenombre,porloqueesnecesarioqueestacarpetano exista.Porejemplo,vamosadarleelnombreusuarios,paraagrupartodoslos ficherosquehemoscreadoenelejemploanterior.

En el rea de exploracin aparecer el proyecto usuarios', y al desplegarlo tenemoslassiguientescarpetas(peroningnarchivo).

Para aadir los ficheros de nuestro ejemplo, podemos abrir el explorador de Windowsymoverestosficherosalanuevacarpetausuarios'quesehacreado.

Sirefrescamoslavistadenuestroproyecto,veremoslosarchivosquecontiene:

EDITOR Sihacemosdobleclicsobrealgunodeestosficheros,enlapartecentralsenos abrirelcdigocorrespondiente. Lomsdestacableesquecontieneunaayudacontextualcontodaslaslibreras defuncionesdellenguajequeasisteentodomomentoofreciendonombresde lasfuncionesyparmetrosquedebenrecibir.Aunqueestaayudacontextualno solo se queda en las funciones definidas en el lenguaje, sino que tambin reporta ayudas con las funciones que vayamos creando nosotros, incluso en pginasquetengamosincluidasconlafuncininclude(). Otras ayudas que ofrece a la hora de escribir son las tpicas en editores avanzados,comoson: Permitireditarvariosarchivos,ymoversefcilmenteentreellos. Marcaraquelementoscorrespondenlosiniciosycierresdelasetiquetas, parntesisollaves. Moversealprincipiooalfinaldeunafuncin. Identacinautomticadelcdigo. Enlace directo al cdigo fuente de archivos que se incluyen en el actual (pulsandoCtrlyposicionandoelcursorsobreelfichero,semostrarcomo unenlace).

Marcar los distintos puntos de un archivo donde se est manejando una determinadavariable,identificandoporunladodondeseestasignandoy porotrodondeseutiliza(pulsandoCtrlyhaciendoclicsobrelavariable). Elaspectoquemuestraeleditoreselsiguiente:

HERRAMIENTADEDEPURACIN Sinduda,unadelastareasmscomplicadasalahoradetrabajarconscripts, por ejemplo PHP, es encontrar un error cuando se devuelven resultados inesperados.Enestoscasosloquesesuelehaceresescribirelcontenidode diversas variables en la pgina web, de forma que nos den algn indicio del lugardondeestelerror. Para facilitarnos esta tarea, Zend Studio dispone de una herramienta de depuracin. Gracias a ella podemos ejecutar pginas y conocer en todo momento el contenido de las variables de la aplicacin y las variables del entornocomolascookies,lasrecibidasporformulariooenlasesin.Podemos colocar puntos de parada de los scripts y realizar las acciones tpicas de depuracin. Ademsdelaventanaparavisualizarelcontenidodelasvariables,disponede otrasdondemuestralasalidadelscriptsegnsevagenerando,yotradondese puedenverlasalertasyerrores. Las opciones que ofrece Zend son muy variadas, aqu nos vamos a limitar a identificarlospasosbsicosquedebemosseguirparadepurarunscript. PuntosdeParada Sedebemarcarsobreelcdigofuenteelpuntodeparadadondequeremosque sedetengalaejecucindelprograma.Paraello,sehardobleclicsobremargen izquierdo de la lnea de cdigo correspondiente, donde se mostrar un punto azul.Sepuedenmarcarcuantospuntossedesee,teniendoencuentaquedeben irsobrelneasdescript,nodecdigoHTML.Paraquitarunpunto,sedebehacer denuevodobleclicsobredichalnea.

ConfigurarDepuracin ParaconfigurarladepuracindeunarchivoPHP,semarcaenelpanelizquierdo de exploracin con el botn derecho, y sobre el men contextual se debe seleccionarlaopcinDebugAs|DebugConfigurations.Seabrirlasiguiente ventana, donde se puede asignar un nuevo nombre a la configuracin de depuracin que estamos haciendo (usuarios_debug) por lo dems, no es necesariohacerningncambio,peroesimportanteverqueenlapestaa PHP Script'estmarcadalaopcinBreakatFirstLine',quesignificaquelaejecucin sedetendrenlaprimeralneadescriptqueseencuentreenelarchivo. Sedebepulsar Apply(paraaplicarloscambios)yluego Debug(parainiciarla depuracin).

IniciarDepuracin ParainiciarladepuracindeunarchivoPHP,tenemosdosopciones: Sobrelabarradeherramientas,pulsarsobrelasiguienteopcin,ysobreel desplegable, seleccionar una de las depuraciones que se hayan configurado(ennuestrocaso,usuarios_debug).

En el panel izquierdo de exploracin, marcar con el botn derecho el archivoadepurar,ysobreelmencontextualseleccionarDebugAs|PHP Script. Para iniciar la depuracin, se nos preguntar si queremos cambiar la perspectiva' de la ventana a PHP Debug', lo que significa que cambiar la distribucin de las secciones que contiene, de forma que podamos hacer un mejorseguimientodeladepuracin.

Unavezquesehafinalizadoladepuracin,siqueremosvolveralaperspectiva de edicin de PHP, en el men principal debemos seleccionar la opcin Window|OpenPerspective|PHP. Entornodedepuracin LaperspectivaPHPDebugmuestralassiguientesreasdetrabajo: Depuracin:Permiteelcontroldeladepuracin,atravsdeunabarrade herramientas,quecontienecomoprincipalesopciones:

Resume:Continalaejecucin. Terminate:Finalizalaejecucin. StepInto:Ejecutaunainstruccin,yentrasiesuna funcin. StepOver:Ejecutaunainstruccin,ynoentraenla funcin. Variables y Puntos de Parada: En una pestaa muestra el valor de las variablesutilizadasyenotra,lospuntosdeparadaquesehanmarcado. Editor:Muestraelcdigofuente,dondeseindicanlospuntosdeparaday lalneadondeseencuentradetenidalaejecucin. SalidaNavegador:Muestraelresultadoqueestproduciendolaejecucin delarchivo.