document3
TRANSCRIPT
Mini biografía
Alfredo Limongi es actualmente elGerente de Tecnologías de Información deVision Interconnect. Lider mundial ensoftware para el mercado de recopilaciónforense para compañías de seguros.
Su trayectoria incluye más de veinticincoaños de programación de los cuales almenos ocho han estado dedicados a laprogramación en PHP.
Paralelamente a su actividad profesional,
ha dictado diferentes cursos deprogramación Web para no iniciados,producto de los cuales ha recopilado ypreparado una serie de libros didácticossobre programación de los cuales formaparte el presente material.
Cursó sus estudios de computación en laprestigiosa Universidad Central deVenezuela, en Caracas.
Tabla decontenidos
INTRODUCCION GENERAL
COMO USAR ESTE LIBRO
NOMENCLATURA USADA
CAPITULO I - Conceptosbásicos
Introducción¿Que es PHP?¿Por que usar PHP?¿Cómo funciona una página
Web?¿Cómo funciona el
direccionamiento de páginas enInternet?
¿Qué es un Servidor deInternet?
¿Qué es un URL? CAPITULO II - Una breveintroducción de HTML
Introducción¿Que es HTML?Estructura de una página
básica en HTML
Etiquetas básicas
Atributos en las etiquetas
Trabajando con tablas
Otras maneras deorganizar la información
Manejo de formularios
La etiqueta input y susmúltiples formas
Consideraciones finales
CAPITULO III - Bases de PHPIntroducciónAntes de comenzarEstructura general de un
programa en PHPVariablesConstantesSimbología utilizada para
explicar la sintaxis
Operadores
CAPITULO IV - Estructuras decontrol
Introducción¿Qué son las estructuras de
control?
Estructuras condicionales
Estructuras iterativas
Incluyendo Programas enotros programas
CAPITULO V - Funciones deusuario
IntroducciónFunciones de usuario
¿Para que usar funciones?
Sintaxis de una función
Uso de una función
Alcance de las variables yparámetros de una función
Tipos de pases de parámetros
Omitiendo parámetros
CAPITULO VI - Trabajando conarreglos
Introducción Arreglos en PHP
Inicializando arreglos
Recorriendo arreglos
CAPITULO VII - Cadenas decaracteres
IntroducciónTrabajando con textos
Operadores de asignación yconcatenación
Comparando cadenas decaracteres
Funciones para el manejo detextos
Variables auto expansivas
CAPITULO VIII - Trabajandocon bases de datos
Introducción
¿Qué es una base de datos?
Como escoger una base dedatos
Arquitectura de unaaplicación Web con base dedatos
El lenguaje SQL
Trabajando con bases dedatos desde PHP
Trabajando con MySQL
CAPITULO IX - Variablesglobales y súper globales
IntroducciónVariables globales
Variables súper globales
CAPITULO X - Manejo deCookies
Introducción¿Qué es una “cookie”?
Usando cookies en PHP
CAPITULO XI - Manejo desesiones
Introducción¿Que es una sesión?
Sesiones en nuestra vidacotidiana: Los cajerosautomáticos
Sesiones en PHP
Funciones PHP para elmanejo de sesiones
Propagando el código desesión
CONSIDERACIONES FINALES
Introduccióngeneral
El mundo que vivimos en la actualidad nose parece al que existía hace diez o quinceaños. Repentinamente nos hemosencontrado con que todos estamosinterconectados. Cada día es mas difícilimaginar el que una persona pueda ejercersu profesión –cualquiera que ella sea- sinque utilice un computador personal oalgún otro tipo de dispositivo pararealizar u organizar sus tareas.
Adicionalmente, las redes sociales hanvenido a reinventar el modo en que nosrelacionamos con los demás. Las noticiasdan la vuelta al mundo en minutos sinnecesidad de reporteros ni medios decomunicación tradicionales.
Este nuevo mundo que se estádesarrollando, necesita renovarcompletamente su base tecnológica a unavelocidad desconocida hasta ahora. Lasnuevas tecnologías aparecen ydesaparecen a una gran velocidad. Hay unmundo pidiendo programas allá afuera.Está hambriento. Es una gran oportunidadpara todos los que se preparen paraalimentarlo.
El mundo Web ha pasado de ser unambiente donde las grandes empresas semostraban a uno donde todos mostramos ytodos consumimos. Ya el mercado de losprogramadores en general, y el de losprogramadores Web en particular, no essolo un conjunto determinado de empresaspoderosas. El mercado está en todaspartes, y las necesidades son de todos lostamaños.
Aprender a hacer páginas Web en elmundo de hoy es colocarse en el centrodel molino por donde está pasando toda laproducción de estos tiempos.
Por otra parte, al contrario de lo quemuchos pudieran pensar, no se requiereser un genio para poder programar. Esemito lo hemos creado nosotros mismoscon la idea de mantener nuestro club tanpequeño como sea posible y así poderdisfrutar en exclusiva de este vastomercado.
La programación de hoy en día, y enparticular la programación Web, requierede mas perseverancia que sabiduría, demas sentido común que conceptosavanzados, de mas ganas que de talento.
Este libro pretende ser la puerta para quemuchos de ustedes entren en el fascinantemundo de la programación. Un mundolleno de oportunidades y de buenasrecompensas, donde no solo el mejor sequeda con la presa. Hay bastantes presaspara todos, y están allá afuera esperandopor gente como nosotros.
Como usar estelibro
Este libro está dividido en once capítulosque de manera progresiva van adentrandoal lector menos experimentado en elmundo de la programación.
Al principio de cada capítulo se muestraun pequeño resumen de los temas que sevan a abordar a lo largo del mismo.Adicionalmente, para facilitar la lecturade aquellos con experiencia previa enotros lenguajes, hemos decidido incluir
notas que ayudan a éstos a saber cuandouna sección pudiera ser saltada sin perderinformación relevante.
El primer capítulo comienza con unabreve explicación de lo que es el lenguajePHP, e inmediatamente pasa a explicaruno por uno los conceptos que pudieranser necesarios para abordar los siguientescapítulos.
El segundo capítulo esta dedicado porcompleto al lenguaje HTML. Aquelloslectores que posean conocimiento previode este lenguaje, bien podrían avanzardirectamente al capítulo siguiente sin
perder la secuencia de la narración dellibro.
A partir del tercer capítulo comienza en siel trabajo en PHP. La secuencia ha sidotrabajada cuidadosamente para permitir alos no versados en la programaciónobtener el máximo provecho.
Hemos incluido una buena cantidad deejemplos cortos a lo largo del libro con laidea de que el lector pueda comprender loque se explica sin necesidad de adentrarsea revisar decenas de líneas deprogramación para ello. El énfasis deltexto lo hemos puesto en la pedagogía de
lo que ofrece el lenguaje y comoutilizarlo. Los ejemplos están colocadoscuidadosamente al servicio de eseobjetivo.
Nomenclaturautilizada
A lo largo del libro vas a encontrar dostipos de íconos que pretenden resaltar losconceptos importantes así como lasrecomendaciones que consideramospudieran ser de interés.
Siempre que veas este símbolo en lamargen izquierda del texto es porque en
ese punto se está abordando un concepto.La idea es que el lector preste su máximaatención en estos puntos.
Cuando ves este otro símbolo del ladoizquierdo, es porque queremos haceralguna recomendación, alguna sugerencia,o quizás queremos advertirte de larelevancia de un tema en particular.
Introducción En este capítulo te presentamos unadefinición, y algunas de las característicasy ventajas competitivas de PHP respecto aotras opciones similares. Además temostramos algunos conceptos básicosrelacionados a la arquitectura de Internet,una breve explicación de lo que es unapágina Web y los lenguajes usados pararealizar las mismas. Al finalizar este capítulo podrás manejarla terminología básica que habrá de serusada a lo largo del libro.
Si ya tienes un conocimiento básico delmundo de Internet y sabes lo que es unServidor y lo que es un lenguajeServidor, entonces podrías pasardirectamente al segundo capítulo. Temas desarrollados en este capítulo:
� ¿Qué es una página Web?� ¿Qué lenguajes se usan para
escribir una página Web?� ¿Qué es un lenguaje Web del lado
del servidor?� ¿Qué es PHP?� ¿Por qué usar PHP?� ¿Cómo viaja una página Web
hasta nuestro computador?� ¿Qué es un servidor DNS?
� ¿Qué es una dirección IP?� ¿Qué es un Servidor Web?� ¿Qué es un Servidor http?� ¿Cuáles son las partes de una
dirección Web o URL?
¿Que es PHP?
Aunque en los últimos años se ha hechoun verdadero esfuerzo para hacer de él unlenguaje multipropósito, puede decirseque PHP es fundamentalmente un lenguajede programación Web del lado delservidor, es decir, uno que permiteescribir o alterar páginas de Internetcuando estas no han abandonado aún elequipo desde el que son despachadas.Veamos como es eso.
Una página Web es fundamentalmente unaserie de comandos escritos en un lenguaje
l l a m a d o HTML, acompañados dearchivos multimedia (fotografías, videos,audio, etc.) que puede ser desplegada através de un programa navegador (obrowser). Además, la misma páginapuede o no contener comandos escritos enotros lenguajes más específicos comoJavaScript, VBScript o CSS, los cuales seencargan de alterar el estilo y elcomportamiento general de la página.
Al escribir una página Web en HTML,estamos de algún modo organizando unaserie de contenidos para que sean vistosde una cierta manera. Esos contenidos,que pueden ser fotos, textos, enlaces, entreotros, habrán de ser mostrados de lamisma manera a todo el que cargue en su
navegador nuestra página. Siempre elmismo contenido y siempre de una mismamanera.
Si queremos hacer que la página muestrecontenidos distintos, y no queremosreescribirla cada vez, podríamos hacerque los comandos HTML o los archivosde la página se modifiquen antes de salirdel servidor donde tenemos alojada. Paraeso debemos usar uno de estos lenguajesWeb de los que se ejecutan en el servidor.
En pocas palabras, PHP es un lenguaje de
programación de uso general, con énfasisen el desarrollo de páginas Web, quefunciona en un servidor Web, y que puedeayudarnos a generar o modificar páginasHTML.
¿Por que usarPHP?
Ya sabemos lo que es una página Web(seguramente ya lo sabias), y sabemos loque es un lenguaje que funciona del ladodel servidor, ahora bien, debes saber quePHP no es la única opción disponiblepara manipular contenidos. Existen otrasopciones, y quizás hayas oído hablar dealguna de ellas:
� ASP.NET es la propuesta deMicrosoft. Está basado en sintaxist i p o Basic, funciona solo sobreambientes Windows y es igual depoderoso que PHP.
� Pearl es una de las primerasopciones que aparecieron en elmercado para este fin. Es un pocomás complicado de aprender y suuso esta menos extendido.
� Python es un lenguaje orientado aobjetos multipropósito. Su uso estámuy poco extendido.
� Java Servlets y JSP son laspropuestas JAVA. Su sintaxis essimilar a la de PHP, aunque mascompleja y poderosa. Su uso estamenos extendido que PHP y ASP.
PHP no le pertenece a ninguna compañíaen particular, es un producto de códigoabierto (Open Source) lo que quiere decirque cientos de personas alrededor delmundo colaboran para garantizar su
estabilidad y para adaptarlo rápidamentea los cambios tecnológicos. Otra de sus características es que funcionatanto en ambientes Windows, Linux oMac, lo que te garantiza poder cambiar elSistema operativo del equipo donde estealojada tu sitio Web si fuese necesario. PHP es a la vez simple y poderoso. Susintaxis basada en lenguaje C leproporciona una gran flexibilidad.Además te permite programar usando unasintaxis básica o hacer complejossistemas basados en objetos. Si has trabajado antes con el lenguaje C, oalgún lenguaje basado en esta sintaxis, vasa aprender más fácilmente. Si no lo has
hecho aún, no te asustes. Verás comoluego de leer unas pocas páginas, estaráshablando un C básico. Hacerlofluidamente va a depender de ti. Al igualque con cualquier idioma.
¿Cómo funcionauna página Web?
Una página Web no es muy distinta a undocumento escrito en Word o un PDF. Enel fondo, es una serie de instrucciones ycontenidos armados para que un tipo deprograma específico pueda leerlo ymostrarlo adecuadamente. En el caso deun documento del tipo DOC, el programaque lo lee es Microsoft Word (entreotros), si hablamos de un PDF, lo abrimosusando Acrobat Reader, pero en el casode una página Web, usamos un navegadorcomo Firefox, Internet Explorer, Opera,Chrome, Safari entre otros.
La página Web puede estar guardada enun CD o en el disco duro de tu propiocomputador, o mas comúnmente, llegahasta nosotros a través de Internet luegode escribir en el navegador una ciertadirección.
¿Cómo funciona eldireccionamiento
de páginas enInternet?
La manera como Internet se las arreglapara servirle a millones de personas,millones de páginas simultáneamente esfascinante. No es algo que tengas quesaber para poder publicar tus propioscontenidos, pero te lo podemos explicarfácilmente. Internet esta compuesto por millones de
computadores distribuidos alrededor delmundo interconectados a través de losprotocolos TCP/IP. En pocas palabraspuede decirse que TCP/IP permitecomunicar dos dispositivos a través delenvío de paquetes de información sinimportar el tipo de sistema operativo delas partes. Ahora bien, el direccionamiento de losdispositivos a través de TCP/IP se hace através de una serie de números, lasfamosas direcciones IP, que son cuatrogrupos cifras entre 0 y 255 (llamadasoctetos) separadas por puntos. Esemecanismo funciona a través de la redmuy eficientemente, es decir, permitelocalizar muy velozmente un equipo sinimportar en que parte del planeta esté,
pero es terriblemente engorroso para queun usuario se valga de el para acceder acontenidos. Solo tendríamos queimaginarnos lo que fuese navegar porInternet si en vez de escribirwww.google.com o www.yahoo.es ennuestros navegadores, nos viéramosforzados a escribir 74.125.299.48 o77.238.178.122. Para ello existen una serie de servidoresdistribuidos en todo el planeta que hacenlas veces de diccionarios de direcciones.Son los llamados servidores DNS. Ellosse encargan de traducir una direcciónsolicitada por un usuario en una direcciónIP. Para que el sistema de direccionamiento
DNS funcione, se requiere que todos losdominios registrados tengan una direcciónIP fija en la cual ubicarlos. Sin embargo,los usuarios de Internet, es decir losclientes, no necesitan ser ubicados, asíque sus direcciones IP bien podríancambiar constantemente lo que se conocecomo IPs dinámicas.
¿Qué es unServidor deInternet?
La comunicación dentro de Internet estábasada en lo que llamamosCliente/Servidor, es decir, siempre queaccedemos a una página o a un servicio,nos comportamos como clientes en unaventanilla de atención al público.Nosotros pedimos contenidos y de laventanilla obtenemos respuestas. Eso si,hay que aclarar que en Internetfrecuentemente somos mejor tratados queen ciertas ventanillas, pero eso esta fuera
del tema de este texto.
Cuando hacemos referencia a un servidorWeb, nos referimos a un computador, elcual puede despachar ciertas páginas Webutilizando para ello un programa especialque atienda los requerimientos.
Un programa servidor http, es unprograma que recibe las solicitudes quehan sido dirigidas hacia el computadordonde está instalado y es capaz dedevolver lo solicitado en formato dehipertexto.
De estos programas servidores existendiversas opciones, sin embargo, lainmensa mayoría del mercado está copadapor dos de ellos: Apache y IIS. IIS es el programa servidor desarrolladopor la gente de Microsoft. Funciona,como debes imaginar, sobre el SistemaOpera tivo Windows y es fácil deadministrar. Apache por su parte es de código abiertocomo lo es PHP. Eso quiere decir que esgratis y que cientos de personas seencargan de garantizar su estabilidad ypromover nuevas versiones. Además,Apache esta disponible para diversossistemas operativos.
Si deseas programar en PHP, terecomiendo ampliamente que usesApache.
¿Qué es un URL? Cuando escribimos una dirección en unnavegador, por ejemplo para abrir elportal de KLM (la aerolínea holandesa),escribimos algo como lo siguiente:http://www.klm.com. Luego de pasar deuna página a otra dentro de ese sitio,podemos ver que la dirección hacambiado a algo comohttp://www.klm.com/travel/us_en/index.htmA ese tipo de direcciones de Internet seles conoce genéricamente como URL.Veamos que quiere decir una direccióncomo esa:
� http es el protocolo dehipertexto. Esto quiere decir que lo
que estamos buscando es una páginaWeb y no un email u otra cosa. Estaparte de la dirección es opcional.
� www.klm.com se refiere a unnombre de dominio. Es decir, unnombre reservado por unacompañía (en este caso la líneaaérea KLM).
� Travel y us_en son subdominios.Internamente son carpetas dentro delsitio donde están guardadas laspáginas del sitio Web.
� Index.htm es el nombre delarchivo que podemos ver en elnavegador. Es decir, la página en si.
Este sencillo ejemplo nos sirve parailustrar el direccionamiento de las páginasWeb en Internet. El nombre del dominio
es manejado por los servidores DNS paraobtener la dirección IP real del equipoque sirve esas páginas. El protocolo IPayuda a ubicar el computador que tiene taldirección. Una vez llegado elrequerimiento al computador, el servidor(Apache o IIS) se encarga de ubicar lapágina en base a los subdominios(carpetas) y nombre de la página.
En resumen, un URL (Uniform ResourceLocator) es una dirección escrita en unformato específico, que ayuda a localizarun elemento de red en Internet. Estoselementos podrían ser páginas Web, oelementos gráficos e inclusive programas.
Introducción En este capítulo aprenderás a escribirpáginas Web básicas con usando ellenguaje de hipertextos HTML. Al finalizar este capítulo podrás entendery escribir una página Web simple,desarrollar un formulario de captura dedatos y mostrar enlaces e imágenes.
Si ya tienes un conocimiento básico deHTML, entonces podrías pasardirectamente al tercer capítulo.
Temas desarrollados en este capítulo:
� ¿Que es HTML?� Estructura de una página básica
en HTML� Etiquetas básicas� Atributos en las etiquetas� Trabajando con tablas� Otras maneras de organizar la
información� Manejo de formularios� La etiqueta input y sus múltiples
formas
¿Que es HTML?
Para poder explicar lo que es HTMLdebemos primero hablar de lo quesignifica hipertexto.
Desde hace siglos el hombre ha venidoproduciendo contenidos en forma delibros, revistas, periódicos, volantes oavisos publicitarios, sin embargo, no essino hasta el arribo de las computadoras anuestra cotidianidad, que hemos tenido laoportunidad de dar un paso adelante encuanto a nuestra relación con tales textos.
El hipertexto no es otra cosa que textosenlazados entre si de manera que nospermite ir mas allá de la simple lecturalineal a la que estamos obligados, porejemplo, en un libro físico. Aparte de esafuncionalidad, el hipertexto es lacombinación de distintos tipos deinformación como las imágenes, lossonidos y los videos entrelazados con laspalabras.
Existen varios lenguajes que permiten
escribir hipertexto. Uno de ellos, el quenos ocupa en este capítulo, es HTML.
El lenguaje de marcas para manejo dehipertexto, o HTML por sus siglas eninglés (Hipertext Markup Language) , esen esencia un conjunto de comandos demarca que se utiliza incrustado dentro deun texto para ordenarlo, darle formato yrelacionarlo con otros textos. Así mismopermite intercalar elementos de distintanaturaleza como imágenes, elementos deaudio o videos.
Cuando hablamos de una marca o etiquetae n HTML nos referimos a un comandoencerrado entre los signos “<” y “>”. Unejemplo de comando de etiqueta es<center>.
Algunos comandos HTML sirven paraindicar el comienzo de algo, en cuyo casodebe escribirse otro comando o etiquetaque indique el final. La forma de indicarque un comando de inicio ha finalizado esescribiendo una barra oblicua o “slash”antes del comando. Por ejemplo,</center>. Como te podrás imaginar, sicolocas un texto entre las etiquetas
<center> y </center> debe salircentrado.
Hay otro tipo de etiquetas HTML que sondeclarativas, es decir cumplen su objetivoen un solo comando sin ser necesario elutilizar una etiqueta de cierre. En esoscasos es recomendable colocar una barraoblicua antes de cerrar la etiqueta. Unejemplo es <hr /> que sirve para mostraruna línea horizontal.
Estructura de unapágina básica en
HTML
Aunque en teoría todos los navegadoresexistentes están diseñados para procesare l HTML de la misma manera, esto en lapráctica no es del todo cierto. Existenalgunas pequeñas diferencias en lapresentación de ciertos elementos ytambién en la “permisividad” de losmismos respecto a las páginas malconstruidas. Esto hace que por ejemplo,una página mal construida, pueda ser vista
en un navegador y no en otro, así que terecomiendo ser cuidadoso en el usocorrecto del HTML y probar losresultados en varios navegadoresdistintos.
Una página HTML básica comienza con laetiqueta <html> y termina con la etiquetade cierre </html> e internamente tienedos secciones, el encabezado (header) yel cuerpo (body). Más o menos así:
<html>
<head>
</head>
<body>
</body>
</html>
Evidentemente el ejemplo anterior nomuestra absolutamente nada al cargarlo enun navegador, sin embargo, es nuestropunto de inicio para ir incluyendo otroscomandos y ver los resultados.
El encabezado es un área general de cuyouso hablaremos mas adelante, sin embargoel cuerpo es donde debemos colocar todo
aquello que deba ser mostrado.
Etiquetas básicas
Empecemos nuestro pequeño paseo por elmundo de HTML ejercitando algunas delas etiquetas básicas.
La etiqueta <title>
Para colocar el título de la página, esdecir, lo que el navegador va a mostrar enla parte superior cuando tu página seacargada usamos la etiqueta <title>. Estaetiqueta suele ponerse en el área delencabezado.
<html>
<head>
<title>Primer ejemplo</title>
</head>
<body>
Esta es mi primera página enHTML
</body>
</html>
Etiquetas de centrado,manejo de párrafos y títulos
Existen un conjunto de etiquetas quesirven para darle formato al texto, veamosalgunas de ellas:
� Las etiquetas <center> y</center> permiten mostrar en elcentro del navegador todos loselementos –textos o no- quepongamos en medio de ellas.
� Las etiquetas <p> y </p>permiten definir un texto que debe
ser mostrado como un párrafo.� Los pares de etiquetas <h1>
</h1>, <h2> </h2>, hasta <h6></h6> permiten definir desdetítulos grandes (h1), hasta pequeños(h6).
Veamos un ejemplo de todo lo anterior:
<html>
<head>
<title>Segundo ejemplo</title>
</head>
<body>
<h1>Este es un título tipo 1</h1>
<h2> Este es un subtítulo tipo2</h2>
<h5> Este es un subtítulo tipo5</h5>
<p>
Este es un texto escrito dentro deun documento HTML para demostrarel uso
de los comandos básicos
</p>
</body>
</html>
Etiquetas para alterar losfonts
La etiqueta <b>, junto con su respectivaetiqueta de cierre, permite escribir textoen negritas. Otro modo de obtener elmismo resultado es a través de la etiqueta<strong>.
Las etiquetas < i > y </i>, permitenescribir texto en itálicas.
La etiqueta <u>, junto con su respectivacontrapartida </u>, permite escribir textoen modo subrayado.
<html>
<head>
<title>Tercer ejemplo</title>
</head>
<body>
<p>
Algunas palabras en este ejemplo aparecen en otras
en <i>itálicas</i> y una <u>subrayada
</p>
</body>
</html>
Etiquetas para salto depágina y línea horizontal
La etiqueta <hr /> dibuja una líneahorizontal a lo ancho de la ventana.
La etiqueta <br /> por su parte se usapara indicar un salto de línea.
<html>
<head>
<title>Cuarto ejemplo</title>
</head>
<body>
Texto inicial <br /><br /><br /><br/>continuación
<hr />
</body>
</html>
Etiquetas para mostrar listas
Las etiquetas <ul> y </ul> se utilizanpara indicar que lo contenido dentro deellas debe ser mostrado como una lista.Estas etiquetas se usan en combinacióncon otras que son <li> y </li>, las cualescontienen cada uno de los elementos de lalista.
En otras palabras, siempre que deseemosescribir una lista de ítems, debemos ponerun par de etiquetas <ul> y </ul> paraindicar que todo lo contenidointernamente habrá de ser desplegadocomo si fuese una lista.
Adicionalmente, para cada porción detexto que deseamos que sea mostradacomo un elemento independiente de lalista, debemos encerrarlo entre lasetiquetas <li> y </li>.
Veamos un ejemplo:
<html>
<head>
<title>Quinto ejemplo</title>
</head>
<body>
<ul>
<li>Este es el primer elemento de la lista
<li>Este es el segundo elemento de la lista
<li>Este es el tercer y último elemento de la lista
</ul>
Este elemento aparecerá despegadodos saltos de línea.
<hr />Este otro texto aparecerá luego de una línea horizontal.
</body>
</html>
Atributos en lasetiquetas
Hasta ahora hemos utilizado las etiquetassolo para indicar donde empieza y dondetermina una característica, o dondeejecutar una acción como un salto delínea, pero en general, las etiquetas son unpoco mas complejas y no solo indican quehacer sino como hacerlo. Para ellodebemos explicar lo que es un atributodentro de una etiqueta.
Tomemos por ejemplo el comando que
sirve para mostrar una imagen: <img>.Esta etiqueta no tendría ninguna utilidad sino pudiésemos decirle cual imagenmostrar. Para ello, se incluye un atributoespecial llamado src. El modo de usarlaes el siguiente:
<img src=’mi_imagen.jpg’ />
En general, para asignarle un valor a unatributo dentro de una etiqueta debemosusar el signo igual y colocar el valor entrecomillas. Aunque el uso de las comillassimples y dobles es permitido en HTMLsiempre que se en cada caso se abra y secierre usando una sola de ellas, yo
recomiendo usar siempre comillassimples en HTML, ya que al comenzar atrabajar con PHP, veremos que lascomillas dobles son de mas utilidad alláque en HTML.
Veamos algunos ejemplos:
La etiqueta <img>
La etiqueta <img /> sirve, como yamencionáramos, para mostrar una imagen.Dos de sus atributos son importantes de
destacar:
� src: indica el nombre (ydirectorio si hace falta) de laimagen.
� border: indica el grosor delborde a ser mostrado alrededor dela imagen.
<html>
<head>
<title>Sexto ejemplo</title>
</head>
<body>
<img src=’mi_imagen.jpg’ border=’1’
</body>
</html>
Etiquetas para realizarenlaces
Las etiquetas < a > y </a> sirven paradefinir un enlace. El texto o elementocolocado entre ambas etiquetas, hará lasveces de enlace visible y, por defecto, semostrará subrayado. El principal atributoes el siguiente:
� href: indica la página o segmentode ella a donde el navegador debesaltar si el usuario selecciona elenlace.
<html>
<head>
<title>Séptimo ejemplo</title>
</head>
<body>
<a href=’pagina2.htm’>Ir a la página 2
<br />
<a href=’pagina3.htm’>
<img src=’mi_imagen.jpg’ border=’1’
</a>
</body>
</html>
La etiqueta <font>
Las etiquetas <font> y </font> sirvenpara cambiar localmente el tipo, tamaño yel color de la fuente utilizada para mostrarel texto escrito en medio de ambas. Losprincipales atributos son:
� face: indica el nombre de lafuente, por ejemplo Arial, oCourier, o Tahoma.
� size: indica el tamaño de loscaracteres.
� color: indica el color que tendráel texto.
Existe una mejor manera de manipular lostipos de letra utilizando CSS. El comando<font> de HTML, además de complicartremendamente el código de la página,puede ser afectado fácilmente por laspreferencias seleccionadas en elnavegador.
Veamos un ejemplo más utilizando todasestas nuevas etiquetas:
<html>
<head>
<title>Octavo ejemplo</title>
</head>
<body>
<font face=’Arial’ size=’4’>
Texto en Arial 4
</font>
<font face=’Courier’ size=’2’>
Texto en Courier 2
</font>
<font face=’Arial’ size=’4’>
Otro texto en Arial 4
</font>
</body>
</html>
Trabajando contablas
Una de las maneras –no necesariamente lamejor- de organizar la información en elespacio de la página es usando tablas.Una tabla HTML en su versión massimple, es básicamente una cuadrículatipo Excel en la que podemos colocarinformación distribuidas en filas ycolumnas.
El comienzo de una tabla se debe indicarcon la etiqueta <table> y el final con su
contrapar tida </table>. Internamente,debemos colocar un comando <tr> paraindicar el comienzo de cada nueva fila ydentro de cada fila un comando <td> paracada columna. Es importante controlarque cada <tr> y cada <td> tengan sucorrespondiente cierre.
Una de las principales complejidades detrabajar con tablas es el hecho de quecualquier error en el cierre de unaetiqueta, o el hecho de ponererróneamente más columnas en una filaque en otra, pueden llevar a resultadosimpredecibles. Así que si deseas trabajarcon tablas debes ser muy cuidadoso ypaciente.
Veamos un ejemplo simple, para poderver la tabla en pantalla vamos a usar elatributo border con un valor de 1.
<html>
<head>
<title>Noveno ejemplo</title>
</head>
<body>
<table border=’1’>
<tr>
<td>Arriba izquierda</td>
<td>Arriba centro</td>
<td>Arriba derecha</td>
</tr>
<tr>
<td>Medio izquierda</td>
<td>Medio centro</td>
<td>Medio derecha</td>
</tr>
<tr>
<td>Abajo izquierda</td>
<td>Abajo centro</td>
<td>Abajo derecha</td>
</tr>
</table>
</body>
</html>
Existen un par de atributos que pueden
darle mas poder a nuestras tablas, se usanpara poder unir dos o mas filas o dos omas columnas. Se llaman rowspan ycolspan. Veamos su efecto alterando unpoco el anterior ejemplo:
<html>
<head>
<title>Décimo ejemplo</title>
</head>
<body>
<table border=’1’>
<tr>
<td rowspan=’2’>Izquierda</td>
<td>Arriba centro</td>
<td>Arriba derecha</td>
</tr>
<tr>
<td>Medio centro</td>
<td>Medio derecha</td>
</tr>
<tr>
<td colspan=’3’>Abajo</td>
</tr>
</table>
</body>
</html>
C o n rowspan podemos hacer que unacelda en particular se propague a lasiguiente fila, por lo que debemos cuidarde poner una celda menos en la siguientefila para que la tabla mantenga sucoherencia. Colspan por su parte, permiteunir dos o más columnas en una sola.
Otras maneras deorganizar lainformación
Para poder organizar la información en lapágina sin utilizar tablas existen diversosmecanismos. A continuaciónexploraremos superficialmente losprincipales:
La etiqueta <div>
Es quizás el método más recomendadopara organizar la información. Consta dedos etiquetas <div> y </div> que encombinación con ciertos atributos deestilo (usando CSS) pueden lograrprácticamente cualquier resultado quedesees.
Al colocar parte de la información dentrode un bloque tipo <div>, el navegadorusualmente parecerá insertar un salto delínea antes y después del contenido. Asíque en su forma más simple, un div no esmás que una sección horizontal de lapágina. Sin embargo, existen maneras dedecirle a una sección div la cantidad deexacta espacio vertical y horizontal que
deseamos que abarque, así como el colorde fondo y hasta darle un estilo único atodo lo contenido dentro de ellos. Todoesto, como ya hemos mencionado, se hacea través de CSS.
Las zonas definidas por div, puedencolocarse unas dentro de otras, así quepodríamos usar un div que abarque toda lapágina, dentro de él uno para encabezadoy otro para el cuerpo y dentro del cuerpodefinir dos o tres secciones cada uno consus características independientes.
Una opción adicional, y quizás la que lohace mas funcional, es poder organizar los
bloques horizontalmente utilizando, unavez mas, CSS. De esta manera podemospensar toda nuestra página como una seriede cuadros invisibles de distintos tamañosdentro de los cuales poner nuestroscontenidos.
La etiqueta <span>
Esta etiqueta permite agrupar una ciertacantidad de información para darle unestilo común. A diferencia del comandodiv, un span no establece un áreacuadrada, al contrario, podemos iniciar unbloque <span> a mitad de un párrafo yterminarlo unas líneas mas abajo y nos
permitirá darle un trato especial a esaporción de texto sin alterar la estructuradel párrafo en si.
Las etiquetas <frameset>,<frame> y <noframe>
Dentro de una página cualquiera podemoshacer una serie de divisiones verticales uhorizontales y cargar en cada una de esaspartes una página independiente. Esto lopodemos hacer utilizando el concepto deframes (marcos).
Una página formada por marcos no debe
tener las etiquetas <body> y </body> ensu posición original, ya que no se suponeque maneje contenidos. El únicopropósito de una página compuesta pormarcos es indicar la cantidad ydisposición de cada una de las páginasinternas que han de ser cargadas.
Sin embargo, ciertos navegadores muyantiguos, y algunos modernos endispositivos móviles, no soportan elconcepto de marcos, por lo que debeincluirse una sección para que en esoscasos funcione como página alternativa.En ese caso, las etiquetas de <body> y</body> deben ser nuevamente incluidas.
Una estructura de marcos básica tiene lasiguiente forma:
<html>
<head>
<title>Undécimo ejemplo</title>
</head>
<frameset cols=’100,*’>
<frame src=’Izquierda.html’ />
<frame src=’Derecha.html’ />
<noframes>
<body>
Lo lamento.<br />
El navegador que estas usando no soporta marcos.
</body>
</noframes>
</frameset>
</html>
En el ejemplo anterior estamos indicando
que deseamos partir la ventana en doscolumnas, la primera de ellas va a ocupar100 pixeles y la segunda el resto del áreadisponible.
Seguidamente estamos indicando quepágina cargar en cada marco, y finalmenteestamos colocando una pequeña páginaWeb alternativa que deberá aparecer solosi nuestro navegador no soporta marcos.
El comando frameset puede ser anidado,es decir, puede colocarse uno dentro deotro para obtener estructuras mascomplejas. Imaginemos un escenariodonde necesitemos una página con un
encabezado que ocupe toda la partesuperior (de unos 300 pixeles dealtura),una parte media dividida en doscolumnas, y un pié de página de 100pixeles de altura. Supongamos ademásque la columna izquierda de la partemedia tenga un ancho de 200 pixeles y lacolumna derecha ocupa el resto delespacio.
Para ello deberíamos escribir algo comolo siguiente:
<html>
<head>
<title>Décimo segundo ejemplo</title>
</head>
<frameset rows=’80,*,50’>
<frame src=’Encabezado.html’ />
<frameset cols=’40,*’>
<frame src=’Izquierda.html’ />
<frame src=’Derecha.html’ />
</frameset>
<frame src=’Pie.html’ />
<noframes>
<body>
Lo lamento.<br />
El navegador que estas usando no soporta marcos.
</body>
</noframes>
</frameset>
</html>
En el anterior ejemplo hemos puesto uno
dentro de otro dos estructuras deframeset, el primero divide la página entres secciones horizontales gracias alatributo rows. El marco que va a ocuparla primera sección, tendrá una altura de80 pixeles, el último tendrá 50 pixeles yel del centro todo el espacio restante.
Ahora bien, si observamos lo que hemospuesto dentro de este frameset podemosver que en lugar de una etiqueta <frame>para definir la página central, hemoscolocado una segunda estructura frameset,esta vez para dividir esa área en doscolumnas, una de 40 pixeles y la otra conel espacio sobrante.
El resultado será una página formada porcuatro páginas independientesconviviendo en la misma ventana. Suenatentador, sin embargo nuestrarecomendación es que no utilices marcosen tus aplicaciones.
Hace unos años la estructura de framesestaba justificada por la necesidad derecargar solo una porción de la pantalla yasí poder acelerar el funcionamiento delsitio Web. En la actualidad, la tecnologíade Internet ha venido haciendo grandesprogresos y el tiempo de carga de unapágina es cada vez menos relevante.Además, la aparición de nuevas
tecnologías como Ajax permite recargarpedazos completos de tu página sinnecesidad de usar marcos.
Otra desventaja de usar marcos es quefrecuentemente es difícil controlar lacoherencia de las páginas cargadas.Muchas aplicaciones usan marcos paratener en un lado un menú y en otro loscontenidos, pero suele perderse muchotiempo tratando de evitar situacionesdonde ambos lados muestren contenidosno relacionados. Esto suele pasar,mayormente, cuando se presiona el botón“Atrás” o “Back” del navegador, quienusualmente recarga la página anterior delúltimo marco recargado.
Manejo deformularios
Hasta ahora hemos mostrado algunos delos comandos HTML que ayudan amostrar información. Sin embargo, nohemos mencionado por ninguna partecomo podemos hacer que nuestras páginaspidan información al usuario.
Así como en el mundo físico existen loslibros, revistas y todos los tipos deimpresiones pasivas, existen también losformatos preimpresos en los que se le
pide a una persona completar ciertainformación para luego ser procesada.Son los llamados formularios.
De la misma manera, un formulario enHTML es un conjunto de comandos quepermiten solicitar información al usuariopara ser enviada a un servidor dondedeberá ser procesada.
Veamos una a una las etiquetas quecomponen un formulario estándar.
La etiqueta <form>:
Sirve para agrupar el conjunto de ítemsque van a ser procesados simultáneamenteal ser transmitidos. Visualmente, estaetiqueta no tiene ningún efecto en lapantalla.
Los atributos principales de la etiquetaform son los siguientes:
� name: nombre del formulario, elcual es muy importante si deseasmanipular el comportamiento de lapantalla usando JavaScript.
� action: Nombre de la página a laque se le habrán de enviar los datos
contenidos en el formulario para serprocesados.
� method: Atributo opcional quesirve para indicar si el métodousado en la llamada habrá de serGET o POST.
La etiqueta <input>:
La etiqueta input puede tomar diversasformas. Puede utilizarse para generar unaentrada de texto, un botón, un selector tiporadio, una opción de chequeo, entre otrasposibilidades.
Dada la variedad de formas y la
importancia de las mismas,desarrollaremos este comando en lasiguiente sección con más detalle.
Las etiquetas <select> y<option>:
Este par de etiquetas (y suscorrespondientes etiquetas de cierre)sirven para mostrar en pantalla un cuadrocombinado, mejor conocido como combobox.
Los atributos principales de la etiqueta laetiqueta select son los siguientes:
� name: nombre del elemento. Esteatributo es fundamental ya que al serenviado el formulario, este es elnombre mediante el cual se podrárecuperar la opción seleccionadapor el usuario.
� disabled: Si este atributo aparecedentro de la etiqueta del select,entonces el elemento aparecerácomo deshabilitado. Este atributono necesita ser igualado a ningúnvalor.
� Multiple: si esta opción apareceen la etiqueta, el comportamientodel elemento cambia
significativamente, ya que el usuariotendrá la opción de seleccionar másde una opción a la vez.
� Size: permite determinar elnúmero de elementos que podránser mostrados simultáneamentecuando el usuario esté haciendo unaselección.
Los atributos principales de las etiquetasoption son:
� Value: indica el valor que habráde tomar el select en caso de queesta opción sea seleccionada.
� Selected: indica que la opcióndebe estar seleccionada
inicialmente al mostrarse la página.
<html>
<head>
<title>Décimo tercer ejemplo</title>
</head>
<body>
Profesión:
<select>
<option value=’0’ selected>Ninguna
<option value=’1’>Abogado</option>
<option value=’2’>Bombero</option>
<option value=’3’>Electricista</option>
<option value=’4’>Reportero</option>
</select>
</body>
</html>
La etiqueta <textarea>:
Esta etiqueta, en conjunto con surespectiva etiqueta de cierre, muestra enpantalla un área de texto multilínea paraque el usuario escriba un contenidopotencialmente largo. Todo lo que elprogramador escriba entre los tags deinicio y fin del textarea aparecerán comocontenido inicial.
Los atributos principales de un textareason los siguientes:
� name: nombre del elemento.� disabled: indica si el elemento
aparecerá como deshabilitado. Esteatributo no necesita ser igualado aningún valor.
� Rows: número de filas visibles.� Cols: número de columnas
visibles (caracteres).� Readonly: si este atributo
aparece escrito indica que elusuario no podrá alterar elcontenido del elemento.
<html>
<head>
<title>Décimo cuarto ejemplo</title>
</head>
<body>
Descripción:
<textarea rows=’5’ cols=’40’>
Este es un ejemplo de texto dentro de un textarea
</textarea>
</body>
</html>
La etiqueta input ysus múltiples
formas
Como ya mencionamos anteriormente, lae t i q ue ta input sirve para solicitarinformación del usuario de diversasmaneras. La forma que habrá de tomareste control, está relacionada con el valorque coloquemos en el atributo type.
Comencemos por mencionar algunosatributos que son comunes a todas las
formas para luego desarrollar cada formaen particular:
� Type: como ya mencionamos,indica el tipo de comportamiento.
� Name: al igual que en los casosanteriores, name es el atributoprincipal ya que establece elnombre con el que se recibirá sucontenido en la página que proceseel formulario. Además permiteidentificarlo si deseamos manipularsu contenido usando JavaScript.
� Id: al igual que en el casoanterior permite identificarlo paramanipular su contenido usandoJavaScript.
� disabled: indica si el elemento
aparecerá como deshabilitado. Esteatributo no necesita ser igualado aningún valor.
Pasemos ahora a estudiar separadamentecada una de las formas.
<input type=’text’>
Muestra en pantalla un campo paraescribir texto de una sola línea. Suatributo más importante, aparte de losmencionados es:
� Value: permite prefijarle alelemento un cierto contenido.
Un ejemplo típico de uso para este tipo deetiqueta es para preguntar el nombre o elapellido de una persona.
<html>
<head>
<title>Décimo quinto ejemplo</title>
</head>
<body>
Nombre:
<input type=’text’ name=’nombre’ />
<br />
Apellido:
<input type=’text’ name=’apellido’ />
</body>
</html>
<input type=’password’>
Funciona exactamente igual que en el casoanterior (text), pero permite ocultar elcontenido de lo escrito por el usuario.
El ejemplo típico de uso para este tipo deetiqueta es para preguntar clavespersonales o passwords.
<html>
<head>
<title>Décimo sexto ejemplo</title>
</head>
<body>
Usuario:
<input type=’text’ name=’usuario’ />
<br />
Clave:
<input type=’password’ name=’clave’
</body>
</html>
<input type=’hidden’>
Este tipo de campos no son mostrados enpantalla. Al igual que en los dos casosanteriores permite contener un valor detexto, solo que en este caso sumanipulación no depende directamentedel usuario sino de código en JavaScripto para contener valores enviados desde elservidor.
El ejemplo típico de uso para este tipo deetiqueta es para propagar de una página aotra un cierto valor. Hablaremos mas deesto cuando lleguemos comencemos ahablar de PHP.
<input type=’radio’>
Muestra en pantalla un elemento tiporadio, el cual cuando es combinado conmás opciones del mismo tipo, le permiteal usuario hacer una selección única entrevarias opciones.
Los elementos de radio actúan en conjuntocomo uno solo, es decir, cuando mas deuno de ellos comparten el mismo nombre,
entonces se comportan como opcionesexcluyentes, o sea que seleccionando unode ellos se deseleccionan todos losdemás.
Los atributos principales de los elementosde radio, además de los generales name yid son:
� Checked: indica que la opcióndebe aparecer seleccionada. Esteatributo, al igual que algunos otrosque aparecerán mas adelante, notiene valor. Su uso es meramentedeclarativo. Por ejemplo: <inputtype=’radio’ checked>
� Value: permite asignarle a cadaopción un valor invisible para queuna vez enviado, puedadeterminarse cual opción fue laseleccionada.
Como ejemplo típico de botones de radioen un formulario podemos poner laselección de estado civil, el cual es unvalor único entre un conjunto reducido deopciones.
<html>
<head>
<title>Décimo séptimo ejemplo</title>
</head>
<body>
Género:
<input type=’radio’ name=’gen’ value
<input type=’radio’ name=’gen’ value
<br />
Empleado:
<input type=’radio’ name=’ocu’ value
<input type=’radio’ name=’ocu’ value
</body>
</html>
<input type=’checkbox’>
Muestra en pantalla un elemento tipocheck, es decir, un recuadro paraseleccionar o no una cierta opción.
El atributo principal de los elementos decheckbox es:
� Checked: indica que la opcióndebe aparecer seleccionada o no
<html>
<head>
<title>Décimo octavo ejemplo</title>
</head>
<body>
Experiencia: <br />
<input type=’checkbox’ name=’ex0’
<input type=’checkbox’ name=’ex1’
<input type=’checkbox’ name=’ex2’
</body>
</html>
<input type=’button’>
Muestra en pantalla un botón.
El atributo principal de los elementos tipobotón son:
� Value: indica el nombre que debeaparecer sobre el botón.
Para poder darle utilidad a un botóndebemos programar su comportamiento através de JavaScript. Sin embargo, si
deseas que un botón sirva para enviar unformulario o devolver el mismo a susvalores iniciales, entonces puedes usardirectamente una de las opcionessiguientes.
<html>
<head>
<title>Décimo noveno ejemplo</title>
</head>
<body>
<input type=’button’ value=’Imprimir’
</body>
</html>
<input type=’submit’>
Un elemento tipo submit no es otra cosaque un botón que al ser presionado envíael formulario del cual forma parte.
<input type=’cancel’>
Un elemento tipo cancel es un botón queal ser presionado restaura los valoresiniciales de el formulario del cual formaparte.
Consideracionesfinales
El desarrollo de páginas Web en laactualidad, en lo que al diseño externo serefiere, se realiza usualmente a través deeditores visuales, así que no es extrañoencontrar personas que han desarrolladoal menos una página Web sin tener elmenor conocimiento de HTML. Sinembargo, si vas a trabajar en PHP, tutrabajo habrá de consistir en modificardinámicamente el funcionamiento de lamisma, y para ello, necesitas una base deHTML.
Introducción En este capítulo nos adentraremos porprimera vez en el lenguaje PHP,comenzando por los aspectos generales ylos comandos y estructuras más básicos.Podría decirse que este capítulo es el másimportante de todo el libro, por lo querecomendamos su lectura minuciosa,sobre todo en el caso de aquellos lectoresmenos experimentados en el mundo de laprogramación. Al finalizar este capítulo deberías sercapaz de escribir una página básicausando tus primeros comandos en PHP. Temas desarrollados en este capítulo:
� Estructura general de un
programa en PHP� Comentarios de una línea o
múltiples líneas� Variables, definición, sintaxis y
alcance� Tipos de dato usados en PHP� Constantes, definición y uso� Expresiones, definición y
ejemplos.� Operadores mas comunes
Antes de comenzar
En los capítulos anteriores hicimos unrecorrido superficial por la arquitecturade Internet, a fin de manejar los términosque habrán de aparecer una y otra vez entu trabajo de programador. También nossumergimos, sin bajar demasiado, en elmundo del HTML, el cual debes conoceríntimamente si pretendes tener algo deéxito en el competido mundo deldesarrollo Web. Finalmente ha llegado el momento dehablar PHP. Antes de comenzar,quisiéramos hacerte un par de
recomendaciones. La primera es que practiques los ejemplosque se te proponen. Una cosa es ver elejercicio en el libro y comprenderlo yotra muy distinta es hacerlo para aprenderde los errores. Si lees mucho sobre PHPvas a terminar comprendiéndolo muy bien,pero no sobrevivirás a una aplicación realsi no aprendes a pensar en PHP. La segunda recomendación es que tediviertas. Hay muchas maneras deresolver el mismo problema en estelenguaje. Buscar mejores soluciones a loque ya has resuelto te ayudará a avanzarmás rápidamente y te harás másproductivo.
Hasta aquí los consejos. ¡Hablemos PHP!
Estructura generalde un programa en
PHP Existen diversas maneras de trabajar conPHP. Una de ellas, la mas sencilla, eshacer una página normal HTML que sirvade estructura y luego “invadir” el códigoHTML con etiquetas PHP que realicen lastareas necesarias.
Extensión de los archivos Debes tener en cuenta que para que
Apache le envíe tu página al intérprete dePHP, la extensión del archivo debe ser“.php”.
Etiquetas de inicio y fin deuna sección de código PHP Toda sección de la página que contengaetiquetas PHP debe comenzar con <?phpy terminar con ?>. Otra posibilidadválida es usar <script language="php">y </script>, también existen otrasalternativas menos recomendables como<? Y ?>.
Separación de los comandos Una sección de código PHP es unasecuencia de uno o más comandos ollamadas a funciones separados por puntoy coma. Además, dos o mas comandos PHPpueden ser agrupados en un bloque usandolos caracteres { y }. Mas adelanteexplicaremos la utilidad de estos bloques.
Comentarios Existen dos maneras de escribircomentarios.
Para escribir un comentario de una solalínea solo hay que escribir dos barrasoblicuas consecutivas (//), a continuaciónde las cuales, todo lo que se escriba hastafinalizar la línea se considerará uncomentario. Para escribir comentarios de más de unalínea hay que utilizar el delimitador /*, elcual hará que todas las líneas escritas apartir de él sean consideradascomentarios hasta la aparición deldelimitador de cierre: */.
<?php
// Esto es un comentario
$i = 5; // Estos comentarios no afectan
$j = 8; // la instrucción de la izquierda
/*
Esto es un comentario multilinea
Nada de esto se ejecuta
*/
$k = 9;
?>
Los comentarios en el ejemplo anteriorson invisibles para el intérprete de PHP,por lo que, desde el punto de vista delprograma, lo anterior equivale a:
<?php
$i = 5;
$j = 8;
$k = 9;
?>
Variables
En cualquier lenguaje de programación,una variable es un nombre usado dentrodel lenguaje para referenciar un ciertocontenido. Este llamado contenido de lavariable puede ser un valor simple opuede tener una cierta estructura. Lasvariables, de nuevo dependiendo de lasespecificaciones del lenguaje, podríanrequerir de una declaración antes de serusadas y por lo general, están preparadaspara recibir solo un cierto tipo deinformación.
PHP ofrece un manejo de variables muyflexible y a la vez muy poderoso. Lostipos de dato son fácilmenteintercambiables y la declaración devariables no es necesaria. Además,algunos operadores han sido añadidos allenguaje para que el usuario pueda decidirpor si mismo cuando tomar en cuenta eltipo de los datos y cuando no.
Reglas que debe cumplir elnombre de una variable
� Toda variable debe comenzar conel símbolo de dólar ($).
� El primer carácter del nombre deuna variable puede ser cualquier
letra o el llamado guión bajo (ounderscore character).
� El resto de los caracteres delnombre pueden ser letras, númeroso guiones bajos.
Los nombres de las variables en PHP sonsensibles a mayúsculas y minúsculas, esdecir que las variables $sueldo y $Sueldoson distintas. Hay que ser muy cuidadosocon respecto a esto.
Tipos de dato
Cualquier variable en PHP puede serasignada con datos de cualquier tipo. Másaún, una variable de un tipo puede
cambiar a otro sin ningún problema. Estaflexibilidad trae consigo muchas ventajaspero también podría inducir a errores sino somos cuidadosos.
Los principales tipos de dato son:
� Entero (o integer), permitealmacenar números enterospositivos o negativos.
� Texto (o string), permitealmacenar palabras, frases ocualquier secuencia de caracteres.
� Lógico (o boolean) permitealmacenar solo dos tipos devalores: verdadero y falso.
� Punto flotante (o float) permiteguardar números con decimales.
� Arreglos (o arrays), que actúancomo colecciones de variables decualquier tipo.
� Objetos, que son tiposestructurados que pueden contenerincluso sus propios programas.
� Null, que es el contenido decualquier variable si no se le haasignado ningún valor.
Si ya has trabajado en otros lenguajes deprogramación, seguramente reconocerásla mayoría de los tipos mencionados. Sino es así, no te preocupes que vayamoshablando de ellos a medida que losvayamos necesitando.
Alcance de variables
Este es otro concepto que iremosaclarando a medida que vayamosadentrándonos en otras partes dellenguaje. Sin embargo podemosmencionar que las variables definidas enuna página, existen solo en esa página.Para ser más específicos, pueden serusadas a partir del punto en el que sonasignadas por primera vez en adelante. Mas adelante veremos que esta afirmacióntiene algunas excepciones.
Asignándole contenido a unavariable
Para darle valor a una variable debemosusar el llamado operador de asignación,que en PHP es el signo de igual. Porejemplo:
<?php
// Como asignar un valor numérico
$valor_numerico = 25;
// Como asignar un texto
$valor_textual = ”Esto es un ejemplo”;
?>
Variables devariables
Una de las características del lenguajeque le aporta una tremenda flexibilidad esla posibilidad de expander “macros”. Esdecir, la posibilidad de poder armar elnombre de una variable dentro de otravariable para luego inspeccionar sucontenido.
Existen ocasiones en las que debemosusar una u otra variable dependiendo deuna cierta condición. Para este tipo decasos PHP ofrece la posibilidad de armarel nombre de la variable que deseamosutilizar dentro de una tercera, para luegoacceder al contenido de la variableseleccionada prefijando el nombre de lavariable contenedora por un signo dedólar adicional.
Veamos si podemos aclarar el concepto através de un ejemplo. Supongamos quetenemos tres variables que contienen trestipos de precio de un cierto producto. Losnombres de las variables son $normal,$oferta y $devaluado. Ahora supongamos
que dependiendo de ciertas condicionesqueremos decidir cual de esos preciosdebemos usar. Una posible solución seríala siguiente:
<?php
$normal = 22;
$oferta = 20;
$devaluado = 15;
if ($finDeMes)
$precio = “oferta”;
else {
if ($articuloDeteriorado)
$precio = “devaluado”;
else
$precio = “normal”;
}
echo “El precio seleccionado es: “ . $$precio
?>
En el ejemplo anterior podemos observarque hemos preparado una variable($precio) con el nombre de la variableque contiene el valor a usar. Luego, parasaber el contenido de esa variable cuyonombre tenemos almacenado, hemosusado el doble signo de dólar. De esa
manera hemos accedido no al texto“oferta” (por ejemplo) sino al valor de lavariable $oferta.
Constantes
Una constante es una especie de variableque posee un valor fijo. Las constantes enPHP suelen ser declaradas al principio decada página y sirven para darle claridadal código. Son especialmente útilescuando necesitamos repetir el uso de uncierto valor una y otra vez. Para declarar (asignar el valor) de unaconstante, debemos usar la función define,la cual tiene dos parámetros, el primerode ellos sirve para poner el nombre quedeseamos darle a la constante y el
segundo para asignarle un valor. Los nombres de las constantes siguen lasmismas reglas que los nombres de lasvariables, excepto que ellas no debencomenzar con el signo de dólar.
Es una práctica recomendable el usarsiempre los nombres de constantes enmayúsculas para poder identificarloscomo tales a primera vista. Las constantes se usan del mismo modoque las variables, pero teniendo en cuentaque nunca podemos asignar nuevosvalores sobre ellas.
Ejemplo:
<?php
define(”PI”, 3.14159265);
// La constante PI tendrá un valor de 3.14159265
$radio = 25;
$area = PI * $radio * $radio;
?>
Simbologíautilizada para
explicar la sintaxis
Durante nuestro paseo por los siguienteselementos del lenguaje, iremos mostrandola forma correcta de usar cada uno deellos a través de lo que se llama unadescripción sintáctica, que no es otra cosaque un diagrama que muestra la formaválida en que una instrucción cualquieradeba ser construida.
Pongamos un ejemplo sencillo paraexplicar la metodología:
<variable> = <nombre_de_función>([<parámetros>]);
En la línea anterior estamos indicando losiguiente:
1. Un nombre de una variable(cualquiera).
2. Operador de asignación.3. Un nombre de función
(cualquiera).4. Paréntesis de apertura.5. Opcionalmente pueden haber
parámetros.
6. Paréntesis de cierre.7. Punto y coma.
Un ejemplo de lo descrito en la reglaanterior sería:
$precio = calcular_precio();
O también:
$salario = calcular($neto, $bonos,$deuda);
En ambos casos se está cumpliendo conlas siete mini reglas enumeradasanteriormente.
En general, las reglas de sintaxis queusaremos serán las siguientes:
Elemento Significado
Texto normal Indica que elelemento debeestar escritoprecisamente deesa manera. Esdecir que esobligatorio.
<Texto entresímbolos decomparación>
Indica que debescolocar en esaposición unelemento quecumpla con lodescrito. Porejemplo<variable> indicaque en ese lugar esposible escribiralgo como$cantidad.
[] Siempre que algoesté encerrado encorchetes significaque es opcional.Es decir quepuede o no estar
presente.
¿Qué es una expresión?
Muchos de los ejemplos que verás en lassiguientes páginas hacen referencia a lapalabra “expresión”. Una expresión puedeser desde algo tan simple como un valor(digamos 5) o un texto (por ejemplo“edificio”) o una operación entre dos omas valores (5 + 8 – 2) o operacionesentre valores y variables ($sueldo +$bonos - $descuentos).
Por ejemplo, para describir como se
asigna un valor a una variable, podríamosdecir que puede ser de una de lassiguientes maneras:
<variable> =<numero>;
ó
<variable> =<cadena decaracteres>;
ó
<variable> =<variable>;
ó
<variable> =<variable> +<numero>;
ó
<variable> =<variable> +<variable>;
… y asísucesivamente…
O por el contrario podríamos decirsimplemente que una asignación tiene lasiguiente forma:
<variable> = <expresión>;
Operadores
Los operadores son símbolos que ofreceel lenguaje para permitir efectuaracciones simples sobre variables ovalores individuales, como asignar unvalor, comparar contenidos, incrementarvariables, redondear, etc.
Existen distintos tipos de operadoressegún la tarea que ayudan a realizar. Dehecho, ya hemos mencionado el operador
de asignación, que es el más importantede todos. Pasemos ahora a revisar algunosde los más usados:
Operador básico deasignación
Así como ya mencionáramosanteriormente, el operador de asignaciónpermite otorgarle un contenido a unavariable.
� Operador de asignación
Sintaxis:
<variable> = <expresión>;
Ejemplos:
$i = 5;
$nombre = “Andrea”;
$total = 5 + 4;
Operador de concatenación
Permite unir dos cadenas de caracteres en
una sola.
� Operador de concatenación
Sintaxis:
<variable> = <expresión> .<expresión>;
Ejemplos:
$nombre = “Felipe” . “ Meza”;
$letras = “A” . “B” . “C”;
$cadena = $nombre . $letras;
Operadores aritméticosbásicos
Usados para realizar operacionesaritméticas sencillas como la suma, laresta, la multiplicación y la división.
� Suma
Sintaxis:
<variable> = <expresión> +<expresión>;
Ejemplos:
$total = 20 + 1;
$total2 = $total1 + 5;
� Resta
Sintaxis:
<variable> = <expresión> -<expresión>;
Ejemplos:
$precio = $precio – 5;
$largo = $total - $cortado;
� Multiplicación
Sintaxis:
<variable> = <expresión> *<expresión>;
Ejemplo:
$distancia = $distancia * 3;
� División
Sintaxis:
<variable> = <expresión> /<expresión>;
Ejemplo:
$porcion = $total / 4;
� Resto de la división
Sintaxis:
<variable> = <expresión> %
<expresión>;
Ejemplo:
$sobrante = $total % $porciones;
Operadores de incremento ydecremento
Las operaciones aritméticas dondedebemos incrementar o decrementar enuno el contenido de una variable son muy
frecuentes. Para esos casos PHP haadoptado los operadores unitarios dellenguaje C. Veamos cuales son.
� Incremento
Sintaxis:
<variable>++
Ejemplos:
$total++;
// El ejemplo anterior esequivalente a escribir
$total = $total + 1;
� Decremento
Sintaxis:
<variable>--
Ejemplos:
$total--;
// El ejemplo anterior esequivalente a escribir
$total = $total - 1;
Una variable puede ser usada dentro deuna expresión conteniendo un operador deincremento o decremento. Veamos losejemplos siguientes para comprender estapoderosa característica.
<?php
$a = 5;
$b = 3;
$c = $a + $b;
// El valor asignado a $c es 8
// $a y $b mantienen sus valores
?>
Ahora veamos que sucede si, por ejemplo,decidimos incrementar el valor de $adentro de la tercera asignación.
<?php
$a = 5;
$b = 3;
$c = $a++ + $b;
// El valor asignado a $c sigue siendo 8
// $a ha sido incrementado y ahora vale 6
// $b sigue valiendo 3
?>
Es decir, en una sola instrucciónsucedieron dos cosas. La variable $c hatomado el valor de la suma de $a y $b, yluego, el valor de la variable $a ha sidoincrementado en uno, pasando a tener unvalor de 6.
Existe otra manera de hacer el incremento.Consiste en poner el operador antes delnombre de la variable, en cuyo caso lavariable sería afectada antes de aportar suvalor para la asignación. Veamos comofunciona:
<?php
$a = 5;
$b = 3;
$c = ++$a + $b;
// $a ha sido incrementado y ahora vale 6
// El valor asignado a $c es ahora 9
// $b sigue valiendo 3
?>
En el caso anterior, el incremento de lavariable $a sucede antes de usar su valorpara el cálculo de la suma. Es decir,
primero se incrementó $a para que suvalor sea 6, y luego se calculó la suma, lacual ahora da 9.
Todo lo explicado anteriormente encuanto al uso del operador de incremento++ vale también para el operador dedecremento.
Operadores lógicos
Estos operadores permiten efectuaroperaciones entre dos valores o
expresiones lógicas, es decir, aquellasque representan valores de verdadero ofalso.
� Negación
Sintaxis:
!<expresión>
Ejemplo:
$dia = true;
$noche = !$dia
// Equivale a decir que $noche va
a tomar el valor
// lógico contrario al que tome$dia
� “Y” lógico
Sintaxis:
<variable> = <expresión> &&<expresión>;
Ejemplo:
$comprendo = true;
$practico = true;
$voy_a_aprender = $comprendo&& $practico;
// En el ejemplo anterior, lavariable $voy_a_aprender
// va a tener el valor true solo silas
/ / variables $comprendo y$practico son a su vez trae
� “O” lógico
Sintaxis:
<variable> = <expresión> ||<expresión>;
Ejemplo:
$ha_llovido = false;
$lave_el_auto = true;
$acera_mojada = $ha_llovido ||$lave_el_auto;
// En el ejemplo anterior, lavariable $acera_mojada será
// true si al menos una de las dosvariables es cierta.
� “Y” lógico de evaluacióncompleta
Sintaxis:
<variable> = <expresión> and<expresión>;
Nota:
Funciona en forma similar aloperador && excepto porque esteúltimo no evalúa la segundaexpresión si la primera resultafalsa.
En la práctica, los operadores and y&& retornan el mismo resultado,pero podrías querer usar uno u otrosi necesitas que la parte derecha seejecute o no.
� “O” lógico de evaluacióncompleta
Sintaxis:
<variable> = <expresión> or<expresión>;
Nota:
Al igual que en el caso anterior, eloperador or funciona en formasimilar al operador ||, pero conevaluación completa de ambasexpresiones.
� “O” exclusivo
Sintaxis:
<variable> = <expresión> xor<expresión>;
Ejemplo:
$tiene_azucar = true;
$tiene_sacarina = false;
$bien_endulzado = $tiene_azucarxor $tiene_sacarina;
// Solo puede estar$bien_endulzado si $tiene_azucar o
// si $tiene_sacarina. Nunca si tieneambas cosas.
Más operadores de
asignación
Además del operador de asignación,existen otras maneras de asignar un valora una variable basado en el contenido queella tenga. Es decir, hay un conjunto deoperadores que permiten hacer unaoperación donde a una variable se leasigne un nuevo valor que sea el que yatiene alterado por un operador. Veamosde qué estamos hablando:
<?php
$a = 5;
$a = $a + 3;
// La instrucción anterior puede ser escrita de la siguiente manera
$a += 3;
?>
Veamos los operadores uno a uno.
� Asignación con suma
Sintaxis:
<variable> += <expresión>;
Ejemplo:
$total += 20;
// Equivale a $total = $total + 20;
� Asignación con resta
Sintaxis:
<variable> -= <expresión>;
Ejemplo:
$precio -= $descuento;
// Equivale a $precio = $precio -$descuento;
� Asignación con multiplicación
Sintaxis:
<variable> *= <expresión>;
Ejemplo:
$riesgo *= 2;
// Equivale a $riesgo = $riesgo *2;
� Asignación con división
Sintaxis:
<variable> /= <expresión>;
Ejemplo:
$ganancia /= $personas;
// Equivale a $ganancia =$ganancia / $personas;
� Asignación con resto
Sintaxis:
<variable> %= <expresión>;
Ejemplo:
$personas = 9;
$grupos = 2;
$personas %= $grupos;
// $personas contendrá el restode 9 / 2, es decir 1
� Asignación con concatenación
Sintaxis:
<variable> .= <expresión>;
Ejemplo:
$alfabeto = “abcd”;
$alfabeto .= “efghi“;
// $alfabeto contendrá la cadena"abcdefghi"
� Asignación con "Y" lógico
Sintaxis:
<variable> &= <expresión>;
Ejemplo:
$tiene_licencia = true;
$esta_asegurado = false;
$puede_conducir =$tiene_licencia;
$puede_conducir &=$esta_asegurado;
// La ultima instrucción equivalea haber escrito
// $puede_conducir =$puede_conducir && $esta_asegurado;
� Asignación con "O" lógico
Sintaxis:
<variable> |= <expresión>;
Ejemplo:
$es_animal = false;
$es_vegetal = true;
$es_un_ser_vivo = $es_animal;
$es_un_ser_vivo |= $es_vegetal;
// La ultima instrucción equivalea haber escrito
// $ es_un_ser_vivo = $es_un_ser_vivo || $ es_vegetal;
Operadores condicionales
Este tipo de operadores permitencomparar dos valores y retornar un valorde verdadero o falso. Veamos cada uno deellos:
� Es igual a (sin importar el tipo)
Sintaxis:
<expresión> == <expresión>
Ejemplos:
$numero_1 = 20;
$numero_2 = 5 * 4;
$son_iguales = $numero_1 ==$numero_2;
// En el ejemplo anterior, lavariable $son_iguales va
// a tener el valor true, ya que
ambas variables
// tienen el mismo valor.
$numero_1 = 20;
$numero_3 = "20";
$son_iguales = $numero_1 ==$numero_3;
// En este otro ejemplo, lavariable $son_iguales va
// a tener de nuevo el valor true,ya que ambas variables
// tienen el mismo valor aunquesean de tipos diferentes.
� Es idéntico a (mismo valor ymismo tipo)
Sintaxis:
<expresión> === <expresión>
Ejemplo:
$numero_1 = 20;
$numero_3 = "20";
$son_iguales = $numero_1 ==
$numero_3;
// Si bien ambas variablescontienen un número 20, la
// comparación resulta falsa yaque los tipos de dato
// son diferentes.
� Es distinto a (sin importar eltipo)
Sintaxis:
<expresión> != <expresión>
Ejemplos:
$numero_1 = 20;
$numero_2 = 5 * 4;
$son_distintos = $numero_1 !=$numero_2;
// En el ejemplo anterior, lavariable $son_distintos va
// a tener el valor false, ya queambas variables
// tienen el mismo valor.
$numero_1 = 20;
$numero_3 = "20";
$son_distintos = $numero_1 !=$numero_3;
// En este otro ejemplo, de nuevola variable
// $son_distintos va a tener elvalor false,
// ya que ambas variables tienenel mismo valor (no
// importa si los tipos son igualeso no).
� No idéntico a (distinto valor o
distinto tipo)
Sintaxis:
<expresión> !== <expresión>
Ejemplo:
$numero_1 = 20;
$numero_3 = "20";
$son_distintos = $numero_1 !==$numero_3;
// En este ejemplo, la variable$son_distintos va a tener
/ / el valor true, ya que, aunque
ambas variables tienen
/ / el mismo valor, son de tiposdistintos.
� Menor que
Sintaxis:
<expresión> < <expresión>
Ejemplo:
$numero_1 = 20;
$numero_2 = 25;
$es_menor = $numero_1 <$numero_2;
// En este ejemplo, la variable$es_menor va a tener
// el valor true, ya que el valor de laprimera variable
// es menor que el de la segunda.
� Mayor que
Sintaxis:
<expresión> > <expresión>
Ejemplo:
$numero_1 = 20;
$numero_2 = 25;
$es_mayor = $numero_1 >$numero_2;
// En este ejemplo, la variable$es_mayor va a tener
// el valor false, ya que el valor dela primera variable
// no es mayor que el de la segunda.
� Menor o igual que
Sintaxis:
<expresión> <= <expresión>
Ejemplos:
$numero_1 = 20;
$numero_2 = 25;
$es_menor_o_igual = $numero_1<= $numero_2;
// En este ejemplo, la variable$es_menor_o_igual
// va a tener el valor true, ya que
el valor de la
// primera variable es menor queel de la segunda.
$numero_1 = 20;
$numero_3 = "20";
$es_menor_o_igual = $numero_1<= $numero_3;
// En este ejemplo, la variable$es_menor_o_igual
// va a tener el valor true, ya queel valor de la
// primera variable es igual al de lasegunda.
� Mayor o igual que
Sintaxis:
<expresión> >= <expresión>
Ejemplos:
$numero_1 = 20;
$numero_2 = 25;
$es_mayor_o_igual = $numero_1>= $numero_2;
// En este ejemplo, la variable
$es_mayor_o_igual
// va a tener el valor false, ya queel valor de la
// primera variable no es mayorque el de la segunda.
$numero_1 = 20;
$numero_3 = "20";
$es_mayor_o_igual = $numero_1>= $numero_3;
// En este ejemplo, la variable$es_mayor_o_igual
// va a tener el valor true, ya queel valor de la
// primera variable es igual al dela segunda.
� Es distinto a
Sintaxis:
<expresión> <> <expresión>
Nota:
Este operador es equivalente aloperador !=.
Introducción Este capítulo, aunque es un poco másavanzado, podría considerarse como unacontinuación del anterior en cuanto a queambos presentan la estructura básica detodo programa en PHP. Al igual que hicimos en la introduccióndel capítulo precedente, queremos hacerénfasis en la importancia de comprenderlos conceptos básicos y estructuras en lasque se soporta todo el andamiaje dellenguaje que estamos presentando. En lamedida en que estos aspectos estén clarosen la mente del programador, mayoresserán las oportunidades de desarrollaraplicaciones de mediana y gran
envergadura. Particularmente en esta sección, tepresentamos el concepto y clasificaciónde las estructuras de control y nosadentramos en la descripción de algunasde ellas. Al finalizar este capítulo podrás construiraplicaciones básicas que involucrencondiciones y repeticiones, lo cual unidoa lo aprendido en el anterior, constituye labase conceptual necesaria para laconstrucción de cualquier estructuraprogramática. Temas desarrollados en este capítulo:
� Concepto y clasificación de las
estructuras de control.� Estructuras condicionales en
PHP.� Estructuras iterativas básicas.� Inclusión de archivos.
¿Qué son lasestructuras de
control?
Las estructuras de control en un lenguajede programación son las que permitenalterar el orden de ejecución de los
comandos.
Una estructura de control puede permitirque ejecutemos un conjunto deinstrucciones solo si se ha cumplido unacierta condición. Podemos adicionalmenteindicar una o mas instrucciones que debenejecutarse si la condición no se cumple.También existen otros tipos de estructurasde control permiten repetir un cierto trozodel código por un cierto número de veceso hasta que se cumpla cierta condición.
En líneas generales podríamos decir que
una estructura de control define unacondición, que de cumplirse, habrá deejecutarse un comando o un bloquedefinido a continuación de la misma.
Un bloque no es otra cosa que dos o máscomandos separados por punto y coma yencerrados entre los símbolos de llave. Sino existe un bloque luego de unaestructura de control, entonces se estácondicionando solo la línea siguiente.
Estructurascondicionales
Las primeras estructuras que estudiaremosson aquellas que nos permiten condicionarla ejecución de una porción del código.
El comando if
Este comando sirve para que se ejecutenun cierto número de instrucciones solo sise cumple una determinada condición.
Una condición, no es otra cosa que unaexpresión que puede tomar el valor deverdadero o falso. Típicamente unacondición es una comparación. Tambiénpuede usarse como condición, unavariable que contenga un valor lógico.
Veamos las distintas formas que puedetomar el comando if:
� Comando if
Descripción
Ejecuta un comando o bloque si secumple una condición.
Sintaxis:
if(<condición>)
<comando o bloque>;
Ejemplos:
// Condicionando una solo línea
$maximo = $b;
if ($a > $b)
$maximo = $a;
// Condicionando un bloque
$maximo = $b;
$max_nombre = "b";
if ($a > $b){
$maximo = $a;
$max_nombre = "a";
}
Al comando if puede tomar una forma unpoco mas compleja para indicar un grupode instrucciones alternativo que deberá
ejecutarse solo si la condición del if no secumple. Esto lo hacemos agregando lap a l a b r a else luego del bloque decomandos condicionados.
La estructura básica es la siguiente:
� If con else
Descripción
Igual que el anterior pero define uncomando o bloque a ser ejecutado sila condición no se cumple.
Sintaxis:
if(<condición>)
<comando o bloque>;
else
<comando o bloque>;
Ejemplos:
// Condicionando una solo línea
if ($a > $b)
$maximo = $a;
else
$maximo = $b;
// Condicionando un bloque
if ($a > $b){
$maximo = $a;
$max_nombre = "a";
} else {
$maximo = $b;
$max_nombre = "b";
}
Veamos un ejemplo sencillo:
<?php
$var1 = ”Número ”;
$var2 = 3;
if ($var2 % 2 != 0)
$var1 .= “impar”;
else
$var1 .= “par”;
// Si el valor almacenado en la variable $var2 es par,
// entonces la variable $var1 contendrá el texto “Número par”
// de lo contrario contendrá “Número impar”
?>
Anidando comandos if
Como ya hemos dicho, un comando ifafecta directamente al comando escritodirectamente detrás de él (o detrás de lapalabra else). Si en lugar de un comando,necesitamos afectar a una cantidad mayorde código, entonces definimos un bloque.
Ahora bien, un comando if –incluyendo subloque de ejecución- puede ser visto en sutotalidad como una sola instrucción delprograma. Así que si dentro de inc o ma nd o if, necesitamos poner –
unicamente- otro comando if, nonecesitamos poner un nuevo bloque.
Veamos algunos ejemplos para entenderde qué estamos hablando.
� Comando if con una solainstrucción condicionada: Si secumple la condición <cond>,entonces se ejecutan los comandos1, 2 y 3. Si la condición no secumple, entonces solo los comandos1 y 3 serán ejecutados.
<cmd1>;
if (<cond>)
<cmd2>;
<cmd3>;
� Comando if con un bloquecondicionado: Si se cumple lacondición <cond>, entonces seejecutan los comandos 1, 2, 3, 4 y 5.Si la condición no se cumple,entonces solo los comandos 1 y 5serán ejecutados.
<cmd1>;
if (<cond>){
<cmd2>;
<cmd3>;
<cmd4>;
}
<cmd5>;
� If y else de una sola instrucción:Si se cumple la condición, entoncesse ejecutan los comandos 1, 2 y 4.
Si la condición <cond> no secumple, entonces se ejecutan 1, 3 y4.
<cmd1>;
if (<cond>)
<cmd2>;
else
<cmd3>;
<cmd4>;
� if y else en bloques: Si se cumple<cond> se ejecutan 1, 2, 3, 4 y 9 delo contrario se ejecutan 1, 6, 7, 8 y9.
<cmd1>;
if (<cond>){
<cmd2>;
<cmd3>;
<cmd4>;
} else {
<cmd6>;
<cmd7>;
<cmd8>;
}
<cmd9>;
En los ejemplos anteriores podríamosimaginarnos que cualquiera de esoscomandos es a su vez otro comando if, asíque veamos como queda el primero de losejemplos mencionados, cuando lainstrucción interna es un bloque if.
<cmd1>;
if (<cond1>)
if (<cond2>){
<cmd2>;
<cmd3>;
<cmd4>;
}
<cmd5>;
En el ejemplo anterior tenemos un
comando if con la condición <cond1>que de cumplirse, habrá de ejecutarse unaúnica instrucción dentro de él: otrocomando if.
Debes tener en cuenta que la idea de usarllaves para definir un bloque tiene sentidocuando existen dos o mas comandos, sinembargo, no es un error definir un bloquepara una sola instrucción. Así que si tesientes mas cómodo poniendo bloquesalrededor de un comando if de un solocomando puedes hacerlo.
Un ejemplo donde es recomendable usarlas llaves aún cuando la condiciónaplique sobre un solo comando es si vas adefinir un comando else luego de dos ifanidados. En general, si pones un if dentrode otro y seguidamente pones un else, esteaplicará sobre el if mas interno. Si deseasdarle claridad a tu programa, o si noquieres situaciones imprevistas, usallaves siempre que pongas if anidados.
El comando switch:
Este comando es una especie de extensióndel comando anterior. Se utiliza paraponer dos o más condiciones sobre elresultado de una expresión. Veamos unasituación de este tipo para explicar mejorsu estructura.
Supongamos que hemos desarrollado unaevaluación en línea y al momento demostrar la calificación obtenida por elusuario, queremos mostrar un mensajedistinto para distintos rangos de notas.
Supongamos que las calificaciones sondel 1 al 4 y que queremos mostrar lossiguientes mensajes:
� 1: Muy deficiente.� 2: Deficiente.� 3: Buen trabajo� 4: Excelente
Supongamos además que queremosactualizar una variable con un valorlógico que indique si el usuario aprobó elexamen o no. Consideraremos aprobadouna calificación por encima o igual a 3.
Si deseamos desarrollar este ejemplousando comandos if, se vería de lasiguiente manera:
<?php
$nota = 3; // Calificación del alumno
if ($nota == 1){
$mensaje = “Muy deficiente”;
$aprobado = false;
} else {
if ($nota == 2){
$mensaje = “Deficiente”;
$aprobado = false;
} else {
if ($nota == 3){
$mensaje = “Buen trabajo”;
$aprobado = true;
} else {
$mensaje = “Excelente”;
$aprobado = true;
}
}
}
?>
Ahora bien, el comando switch permiteponer una sola vez la expresión (ovariable) a evaluar, y definir distintos
bloques a ser ejecutados dependiendo delvalor obtenido.
Los bloques dentro de un comando switchno se definen del modo tradicional(usando llaves) sino que se delimitanusando el comando break. Veamos lasintaxis:
� El comando switch
Descripción:
Permite evaluar una expresión ydefinir distintos bloques de ejecución.
Sintaxis:
switch(<expresión>){
case <valor1>:
<comandos>;
break;
case <valor2>:
<comandos>;
break;
…
default:
<comandos>;
}
Ejemplo:
$valor = 5;
switch($valor){
case 0:
$resultado = "cero";
break;
case 1:
$resultado = "uno";
break;
case 2:
$resultado = "dos";
break;
default:
$resultado = "mas de dos";
break;
}
Para ilustrar el uso del comando switch,veamos como podríamos reescribir elejemplo de la evaluación en línea.
<?php
$nota = 3; // Calificación del alumno
switch ($nota){
case 1:
$mensaje = “Muy deficiente”;
$aprobado = false;
break;
case 2:
$mensaje = “Deficiente”;
$aprobado = false;
break;
case 3:
$mensaje = “Buen trabajo”;
$aprobado = true;
break;
case 4:
$mensaje = “Excelente”;
$aprobado = true;
break;
}
?>
En general, el comando switch evalúa la
expresión y "salta" hasta el casecorrespondiente. Desde allí ejecuta todoslos comandos que consigue hasta quellega a un break, momento en el que saltafuera de la estructura.
Sabiendo esto, podemos poner mas de uncase en el mismo sitio para indicar queuno de los bloques se debe ejecutar porcualquiera de esos valores. Para ilustraresto, simplifiquemos el ejemplo anteriorhaciendo que las notas 1 y 2 obtengan elmensaje "No aprobado" y 3 y 4 obtengan"Aprobado".
<?php
$nota = 3; // Calificación del alumno
switch ($nota){
case 1:
case 2:
$mensaje = “No aprobado”;
$aprobado = false;
break;
case 3:
case 4:
$mensaje = “Aprobado”;
$aprobado = true;
break;
}
?>
Una última consideración es que podemosincluir el caso especial default, el cualhabrá de ejecutarse si el valor no secorresponde con ninguna de lascategorías.
Estructurasiterativas
Las estructuras iterativas permitenejecutar uno o más comandos en formarepetida. Existen dos tipos de estasestructuras, las que permiten hacerrepeticiones un número predeterminadode veces, y las que ayudan a repetir hastacumplirse una cierta condición.
El comando for:
Este es uno de los comandos maspoderosos y versátiles de la sintaxis tipo"C", de la cual proviene el lenguaje PHP.Básicamente hace las veces de trescomandos distintos en una sola -y muysimple- estructura.
En su forma más básica, el comando forpermite hacer las siguientes acciones:
� Inicializar una variable en uncierto valor.
� Ejecutar una o más instruccioneslocalizadas dentro de él.
� Incrementar el valor de lavariable en cuestión.
� Comparar el nuevo valor de lavariable con un cierto límitesuperior para detectar si se debe ono repetir el ciclo.
La estructura del comando for es lasiguiente:
� Comando for
Descripción:
Ejecuta un comando o bloque unadeterminada cantidad de veces.
Sintaxis:
for(<inicialización>;<condición>; <incremento>)
<comando o bloque>;
Ejemplos:
// Condicionando una solo línea
$total = 0;
for ($i = 1; $i < 12; $i++)
$total += 1;
// Condicionando un bloque
$suma = 0;
$producto = 1;
for ($i = 1; $i < 12; $i++){
$suma += $i;
$producto *= $i;
}
Veámoslo con un ejemplo. Supongamosque necesitamos calcular el cubo de unnúmero, es decir, queremos saber elresultado de multiplicar al número por si
mismo tres veces. Para ello necesitamosusar tres variables. Una que contenga elnúmero al que tenemos que calcularle elcubo, otra que nos permita calcular elresultado y una más que nos permitallevar la cuenta de las tresmultiplicaciones que hay que realizar.
El algoritmo para resolver ese sencilloproblema, es más o menos como sigue:
1. Asignamos un valor a la variable$numero (valor al que le queremoscalcular el cubo).
2. Asignamos un valor inicial a lavariable $resultado (como vamos a
multiplicar, el valor inicial debe ser1).
3. Asignamos un valor inicial a lavariable $contador (digamos queempieza en cero y que lo vamos aincrementar luego de cadamultiplicación).
4. Asignamos a la variable$resultado el producto demultiplicar su propio contenido porel $numero.
5. Incrementamos en 1 el valor de$contador.
6. S i $contador es menor que 3,entonces repetimos desde el paso 4.
Veamos como podemos escribir esto enPHP utilizando el comando for.
<?php
$numero = 7;
$resultado = 1;
for ($contador = 0; $contador < 3; $contador
$resultado *= $numero;
?>
En general, el comando for define en unasola línea, el valor inicial de la cuenta, encuanto deseamos incrementar ese valor encada ciclo y cual es la condición de
parada. El primer parámetro, el de lainicialización, se ejecuta de primero,luego se ejecuta el bloque de comandos,después de lo cual se ejecuta el últimoparámetro para incrementar el valor de lavariable de control y por último, seevalúa la condición. Si la condición secumple, entonces se vuelve a ejecutar elbloque y el incremento. Así funciona.
El comando for es en realidad maspoderoso de lo mencionado hasta ahora,ya que al conocer su funcionamiento,podemos utilizar sus tres parámetros para
distintos tipos de repeticiones y no solocuentas, pero por ahora pasemos a revisarotros de los comandos iterativos.
El comando while:
No todas las veces que necesitamosrepetir un bloque de código sabemos elnúmero de repeticiones que debemosrealizar. De hecho, en la práctica, sonmuchas las veces que debemos ejecutaruna cierta secuencia y evaluar si la mismadebe ser repetida o no. Para ello existe elcomando while.
La estructura del comando while es comosigue:
� El comando while
Descripción:
Ejecuta un comando o bloquehasta cumplirse cierta condición.
Sintaxis:
while(<condición>)
<comando o bloque>;
Ejemplos:
// Condicionando una solo línea
$total = 0;
for ($i = 1; $i < 12; $i++)
$total += 1;
// Condicionando un bloque
$suma = 0;
$producto = 1;
for ($i = 1; $i < 12; $i++){
$suma += $i;
$producto *= $i;
}
<?php
$num = 0;
$pares = 0;
$impares = 0;
while ($num < 100){
if ($num % 2 == 0)
$pares++;
else
$impares++;
$num++;
}
?>
El ejemplo anterior calcula la cantidad denúmeros pares e impares que existen entre0 y 99.
El comando do while:
Existe una variante del comando anteriorque permite hacer siempre una primeraiteración, para luego evaluar si esnecesario o no repetir el proceso. Es elcomando do…while.
Veamos cual es su sintaxis:
� La variante “do while”
Descripción:
Ejecuta un comando o bloque yrepite hasta cumplirse cierta condición.
Sintaxis:
do
<comando o bloque>;
while(<condición>);
Ejemplos:
// Condicionando una solo línea
$total = 0;
do
$total++;
while ($total < 20);
// Condicionando un bloque
$n = 0;
$res = 1;
do{
$res += $res * $n;
$n++;
} while ($n < 10);
<?php
$reintentos = 0;
do{
// La función hipotética abre_archivo()
// intenta abrir un cierto archivo y retorna
// un valor lógico que indica si lo logró
$exito = abre_archivo();
if ($exito)
$reintentos++;
} while ($reintentos < 3);
?>
Otros tipos de estructuras iterativas
Existen otros tipos de estructurasiterativas más especializadas las cualesfacilitan el trabajo con arreglos.Hablaremos de ellas mas adelante.
Incluyendoprogramas en otros
programas PHP ofrece la posibilidad de aislar partedel código en un archivo independientepara luego incluirlo donde y cuando seanecesario. Esta utilidad permite escribirprogramas mes legibles a la vez haceposible reutilizar las funciones. Haciendo uso de esta característica, quees una característica de casi cualquierlenguaje de programación, el programadorpuede agrupar ciertas funciones en
librerías, es decir, en grupos que tenganuna utilidad común y así incluirlas entodos aquellos archivos donde talesfunciones deban ser llamadas. Los comandos que permiten incluir unarchivo dentro de otro son los siguientes: El comando require Este comando expande el archivomencionado como parámetro en laposición donde él se encuentre. Suutilización es de la siguiente manera:
<?php
require(”Funciones.php”);
?>
El comando require se resuelve almomento de cargar la página, por lo tantono puede ser condicionado de ningunamanera. Todo lo que incluyamosutilizando require se expande dentro delarchivo como si fuese parte de el. El comando include Existen ocasiones en las que deseamosincluir parte del código solo si se cumplealguna condición, o tal vez necesitamosincluir una misma secuencia varias veces,o tal vez deseamos armar dinámicamenteel nombre del archivo a ser incluido.
Para poder resolver cualquiera de lassituaciones anteriores, debemos evitar queel interpretador cargue el archivoautomáticamente. Necesitamos primeroejecutar ciertas instrucciones para poderdecidir si cargar el archivo, o no cargarlo,o cargarlo repetidas veces. Para esoexiste el comando include. El comando include es similar al anterior,pero se diferencia de éste en cuanto almomento en que es ejecutado. Es decir, elcomando require, carga un archivo aciegas, y lo hace al momento de cargar elarchivo principal. El comando includepor su parte, espera hasta que elinterpretador PHP llegue a la línea dondeél se encuentra para incluir el archivo.
La sintaxis de este comando es similar ala del anterior:
<?php
include(”Funciones.php”);
?>
Las variantes require_once einclude_once
Para cualquiera de las dos formas deinclusión de archivos mencionadas, existe
un variante que permite evitar laexpansión de un mismo archivo más deuna vez. Esto podría ser deseable ensituaciones en las que se desea cargar unalibrería que a su vez carga a otraslibrerías.
Es necesario tener presente que elinterpretador generará un error y detendrála ejecución de un archivo si, porejemplo, existen dos funciones con elmismo nombre. Cosa que seguramentehabrá de ocurrir si se carga dos veces unmismo archivo que contiene funciones.
El uso de las variantes mencionadas es
como sigue:
<?php
include_once(”Funciones1.php”);
require_once(”Funciones2.php”);
?>
Introducción En este capítulo te mostramos comoescribir tus propias funciones de usuario,las cuales te permitirán hacer programasmas compactos y fáciles de mantener. Al finalizar este capítulo deberías sercapaz de entender parte de la terminologíaasociada al concepto de programaciónestructurada, y lo mas importante,deberías ser capaz de escribir tus propiasfunciones de usuario. Temas desarrollados en este capítulo:
� Concepto y utilidad de lasfunciones de usuario
� Uso y sintaxis de una función� Alcance de las variables y
parámetros de una función� Tipos de pases de parámetros
Funciones deusuario
En esencia, una función no es más que unfragmento de programa al que, porrazones de reusabilidad o de estructura, leasignamos un nombre.
Las funciones de un lenguaje nos permitensimplificar grandemente los problemascomplejos, y gracias a ello, podemosescribir soluciones a problemas muycomplicados.
En capítulos anteriores hemos visto unacierta cantidad de funciones que ellenguaje trae preparadas para distintosfines. Sin embargo, aún no hemosmencionado la manera en que el usuariopuede definir sus propias funciones.
¿Para que usarfunciones?
Uno de los objetivos fundamentales deuna función es la reutilización, es decir, laposibilidad de no tener que escribir unasecuencia de instrucciones similares una yotra vez.
Una segunda razón –no menos importante-es la llamada “estructuración”. Es decirque mediante la implementación defunciones, podemos dividir la resoluciónde un problema complejo en partes más
simples, de modo que podemosprogramar, probar y eventualmenteintegrar esas partes y lograr nuestrosobjetivos.
Cuando un programa está desarrollado enmodo estructurado, es decir, debidamenteclasificado y dividido en segmentosbásicos, el resultado es mucho más fácilde mantener, ya que dependiendo del tipode errores que pudiéramos tener, nos serásiempre más fácil encontrar el segmentocausante de la falla y repararlo.
A medida que desarrollamos aplicacionesmás grandes y complejas, la necesidad de
estructuración se hace mayor.
Podríamos comparar esto último con latarea de preparar una comida en unacocina. Si el tamaño de los platos a serpreparados diariamente es pequeño,digamos que para una o dos personas,podrían organizarse todos los utensiliosen una simple repisa sin que ello conllevemayores dificultades. Además, toda lacomida puede ser hecha de una sola vez ypor una sola persona.
Sin embargo, en una cocina donde sepreparen cientos de platos al día, elvolumen de utensilios necesarios es de tal
magnitud que no pueden ser simplementeapilados en una repisa gigante. Hace faltapoder predecir fácilmente dondeencontrar cada cosa. Además, al abordarcientos de platos distintos, debemos poderproducir –y reusar- los componentesbásicos como por ejemplo las salsas.
Trabajar estructuradamente no essolamente una buena costumbre. Si lo quese desea producir es de grandesdimensiones, la estructuración esabsolutamente una necesidad.
Sintaxis de unafunción
Toda función de usuario comienza con lapalabra function y el nombre de lafunción. A continuación de esto,encerrados entre paréntesis, aparece lalista de parámetros separados por coma.Luego viene la secuencia de comandosque conforma la función en si encerradosentre llaves.
Una función puede o no retornar un valoral ser ejecutada. De ser así, debemos
asegurarnos de colocar al menos uncomando return antes del final de lafunción. Este comando indica el valor aser retornado.
Veamos un ejemplo de todo lo anterior.
Supongamos que en uno de nuestrosprogramas necesitamos saber si unnúmero se encuentra incluido o no en unrango dado. Para ello podríamosdesarrollar la función en_rango, la cualrecibirá tres parámetros, el número aevaluar, el límite mínimo del rango y ellímite máximo.
Nuestra función deberá comparar elnúmero pasado como primer parámetrocontra los otros dos y determinar si está ono incluido en el rango. Hecho esto,debemos incluir un comando return paradevolver el valor lógico correspondiente.
<?php
function en_rango($val1, $min, $max){
$res = true;
if ($val < $min)
$res = false;
if ($val > $max)
$res = false;
return $res;
}
?>
Uso de una función
Para llamar a una función debemossimplemente escribir su nombre y ponerentre paréntesis los valores con los quedeseamos que trabaje, Además, si lafunción está hecha para retornar unresultado y queremos hacer uso delmismo, sería conveniente almacenar elmismo en una variable o usarlodirectamente como condición de algúncomando.
Veamos un ejemplo basado en la funcióndefinida anteriormente:
<?php
function en_rango($val1, $min, $max){
$res = true;
if ($val < $min)
$res = false;
if ($val > $max)
$res = false;
return $res;
}
$calificacion = 8;
if (en_rango($calificacion, 0, 4))
echo “Deficiente”;
else if (en_rango($calificacion, 5, 7))
echo “Suficiente”;
else if (en_rango($calificacion, 8, 9))
echo “Sobresaliente”;
else
echo “Excelente”;
?>
Del ejemplo anterior podemos resaltaralgunos aspectos:
� Aunque la definición de lafunción está al principio del código,la misma es ignorada por elprocesador hasta que se produceuna llamada. Es decir que laprimera instrucción ejecutable denuestro ejemplo es la asignación dela variable $calificacion.
� Las llamadas a la funciónen_rango son usadas comocondición del comando if. Es decirque dependiendo del valorretornado por la función en cada
caso, se ejecutarán o no loscomandos correspondientes.
� Los parámetros usados en cadallamada pueden ser bien variables,valores explícitos o inclusoexpresiones más complejas.
Alcance de lasvariables y
parámetros de unafunción
Los parámetros usados dentro de ladefinición de una función, llamadostambién parámetros formales, no existenfuera de la función, es decir: son locales ala misma.
Así mismo, cualquier variable que usemos
dentro de una función será también unavariable local. Eso quiere decir que sifuera de la función tenemos otra variablecon el mismo nombre, PHP considerará aambas como variables distintas.
Si deseamos hacer uso dentro de unafunción de una variable que existe en elprograma principal, debemos declararlacomo global dentro de la función. De estamanera el interpretador de PHP podrásaber que nos referimos a la variableexterna. Veamos un ejemplo:
<?php
function saludo($nombreDeUsuario, $titulo
global $idioma;
if ($idioma == ”Español”)
echo “Buenos días $titulo. $nombreDeUsuario
else
echo “Good morning $titulo. $nombreDeUsuario
}
$idioma = ”Español”;
saludo(”Johnny Taylor”, ”Mr”);
?>
Tipos de pases deparámetros
Normalmente los parámetros se usan solopara comunicar valores de inicio a unafunción, así que las variables quepudieran ser colocadas en la llamadacopian sus contenidos en las variables dela función, llamadas parámetros formales.
Si durante el cuerpo de la función elcontenido de una de esas variables escambiado, la variable original quecolocamos en la llamada permanecerá
inalterada. Es decir, que bajo condicionesnormales, la función habrá de trabajar conuna copia de los valores que les pasemos.A esto se le llama pase de parámetrospor valor.
Sin embargo, ocasionalmente puede serque necesitemos llamar a una función ynos convenga obtener de vuelta no solo elvalor retornado, sino que tambiénqueramos que alguno de los parámetrosvuelva alterado de una u otra manera. Estose logra a través del llamado pase deparámetros por referencia.
Hagamos un pequeño cambio sobre
nuestra función en_rango para ilustrar elconcepto. Supongamos que deseamos quela función no solo retorne un valor lógicocomo lo hace hasta ahora, sino quedeseamos obtener un mensaje que indiquela relación del primer parámetro respectoal rango, es decir, si es menor, mayor oestá en medio.
<?php
function en_rango($val1, $min, $max,
$res = true;
$mensaje = ”en rango”;
if ($val < $min){
$res = false;
$mensaje = ”por debajo”;
} else if ($val > $max){
$res = false;
$mensaje = ”por encima”;
}
return $res;
}
$edad = 16;
if (en_rango($edad, 13, 19, $relacion))
echo “La edad indicada pertenece al rango de la adolescencia
else
echo ”La edad indicada está ” . $adolescencia”;
?>
En el ejemplo anterior hemos alterado lafunción para agregar un nuevo parámetro,el cual está precedido por el signo &. Alhacer esto estamos indicando que eseparámetro está pasado por referencia, esdecir, que cualquier cambio que se hagainternamente sobre el parámetro$mensaje, va a afectar también a lavariable $relación. Esto es así porque en
este tipo de pase de parámetros no secopia internamente el contenido de unavariable sobre una nueva sino que se estáusando la misma variable de la llamada.
Si observamos el programa principal,podemos ver que en el texto que semuestra cuando la función retorna FALSE,se utiliza el contenido de la variable$relación, la cual habrá de contener lasfrases “por encima” o “por debajo”.
Omitiendoparámetros
Hay ocasiones en las que al llamar a unafunción, usamos casi siempre un ciertovalor en alguno de los parámetros. Paraestos casos, PHP ofrece la posibilidad deasignar a ese parámetro un valor pordefecto.
Cuando una función tiene un valor pordefecto en uno de sus parámetros, elusuario tiene la posibilidad de ignorar eseparámetro en la llamada, con lo que la
función usará el valor preasignado.Veamos un ejemplo:
<?php
function saludo($nombreDeUsuario, $titulo
echo “Buenos días $titulo. $nombreDeUsuario
}
saludo(”Johnny Taylor”);
saludo(”Joan Parker”, ”Mss”);
?>
En el ejemplo anterior hemos agregado alparámetro título un valor por defecto:“Mr.”. De esta manera, siempre quellamemos a la función saludo omitiendo elsegundo parámetro, la función usará eltítulo por defecto, de lo contrario usará elque le sea enviado.
Es importante resaltar que los parámetrosque sean susceptibles a ser omitidosdeben estar al final de la función.
Introducción Aunque todos los lenguajes deprogramación ofrecen alternativas paramanejar arreglos o colecciones devariables, puede decirse sin temor aequivocaciones que el enfoque que PHPhace de los mismos es a la vez uno de losmás avanzados y sencillos de usar. En este capítulo abordamos todo lorelacionado con la definición ymanipulación de arreglos, lo cualconstituye uno de los puntos fuertes deeste versátil lenguaje. Al finalizar este capítulo esperamos queseas capaz de aprovechar las herramientas
que PHP ofrece para facilitar laresolución de problemas utilizandoarreglos. Temas desarrollados en este capítulo:
� Concepto de arreglos.� Uso y sintaxis de los arreglos en
PHP.� Inicialización de arreglos.� Distintas formas de recorrer
arreglos.
Arreglos en PHP
Tal como mencionáramos anteriormente,un arreglo no es mas que una colección devariables guardadas bajo un mismonombre y diferenciadas entre si por uníndice. Para hacer una comparación con elmundo físico, podemos pensar que unavariable es como una hoja de papel en laque podemos escribir un texto, y unarreglo es un cuaderno donde podemos
tener, digamos, sesenta hojas de papelcada una de ellas con su propio texto. Asíque todas las operaciones que podemoshacer con nuestra hoja de papel, podemostambién hacerlas con –digamos- la página27 del cuaderno.
Cada casilla –o posición- dentro delarreglo es en sí una variable, y eso quieredecir que puede tener los mismos tipos decontenido que éstas. Eso incluye otrosarreglos.
El nombre de un arreglo en PHP esexactamente igual que el nombre de unavariable, solamente que para trabajar con
una de sus posiciones, debemos indicar elíndice usando corchetes.
Pongamos un ejemplo:
Supongamos que tenemos lasevaluaciones de tres alumnos y queremoscalcular el promedio de notas. Podemoshacerlo con variables normales de lasiguiente manera.
<?php
$alumno1 = 5.3;
$alumno2 = 8.1;
$alumno3 = 7.8;
$suma = $alumno1 + $alumno2 + $alumno3
$promedio = ($suma / 3);
?>
El ejemplo anterior es bastante sencillo yfácil de leer, sin embargo no es una buenasolución cuando el número de alumnos esalto, o peor aún, cuando no se conoce deantemano el número de alumnos.
Veamos como podemos escribir el mismoalgoritmo usando arreglos.
<?php
$alumno[1] = 5.3;
$alumno[2] = 8.1;
$alumno[3] = 7.8;
$suma = 0;
for ($i = 1; $i <= 3; $i++)
$suma += $alumno[$i];
$promedio = ($suma / 3);
?>
Existen muchas funciones que ayudan a
trabajar con arreglos. Iremosmencionando muchas de ellas durante estecapítulo, sin embargo en este momentoconviene mencionar la primera de ellas.La función count(), la cual permiteconocer la cantidad de elementoscontenidos en un arreglo.
� Función count
Descripción:
Si el parámetro es un arreglo,retornará el número de elementoscontenidos en él. De lo contrario
retornará 1.
Sintaxis:
count(<variable>)
Retorna:
Número entero que indica elnúmero de elementos contenidos enel arreglo o 1 so el parámetro no esun arreglo.
Ejemplos:
$edades[0] = 25;
$edades[1] = 33;
$edades[2] = 57;
$cantidad = count($edades);
// En el ejemplo anterior,$cantidad tomará el valor
// de 3.
$vehiculos[2005] = 820;
$vehiculos[2006] = 923;
$vehiculos[2009] = 1320;
$vehiculos[2011] = 1043;
$cantidad = count($vehiculos);
// En el ejemplo anterior,$cantidad tomará el valor
// de 4.
Tal como se puede ver en los ejemplosanteriores, en PHP un arreglo no tiene unnúmero predefinido de elementos. Esdecir, los índices no tienen que comenzarpor cero ni por uno, y las posicionesocupadas no tienen porque ser contiguas.
Más aún, en PHP los índices no tienenporque ser números. Podemos usar textoscomo índice para nuestros arreglos, cosa
que le da un tremendo poder a estasestructuras. Veamos una variación de unode los ejemplos anteriores para ilustraresto:
<?php
$alumno[”Carlos”] = 5.3;
$alumno[”Pedro”] = 8.1;
$alumno[”Marcos”] = 7.8;
$suma = $alumno[”Carlos”] $alumno[”Marcos”];
$promedio = ($suma / 3);
?>
Una facilidad adicional que ofrece PHPpara trabajar con arreglos es laposibilidad de omitir los índices a la horade asignar una nueva posición dentro delarreglo. De esta manera PHP asignarácomo índice del nuevo valor almacenado,el siguiente al índice más alto existente (ocero si es el primer elemento agregado alarreglo). Veamos un ejemplo:
<?php
$alumno[] = 5.3; // Equivale a $alumno[0] = 5.3;
$alumno[] = 8.1; // Equivale a $alumno[
$alumno[] = 7.8; // Equivale a $alumno[2] = 7.8
?>
Inicializandoarreglos
Ya hemos visto como asignar uno a unolos contenidos de un arreglo en PHP, sinembargo existe una alternativa mucho maseficiente, y es asignar todos los elementossimultáneamente, esto lo podemos hacerusando la función array().
Veamos un ejemplo:
<?php
$alumno = array(5.3, 8.1, 7.8);
?>
La función array también permite definiríndices personalizados, es decir quepodemos forzar el índice de cualquiera delas posiciones (o de todas ellas)escribiendo los parámetros de la siguientemanera:
<?php
$alumno = array(”Carlos” => 5.3, ”Pedro”7.8);
?>
En el ejemplo anterior tenemos igualmentetres parámetros separados por comas, sinembargo, en cada parámetro estamosindicando el índice y luego el contenido.El resultado es nuevamente un arreglo detres posiciones, que contiene los mismostres valores que en el ejemplo previo,pero en lugar de tener los índices 0, 1 y 2,ahora tiene los índices “Carlos”, “Pedro”y “Marcos”.
� Función array
Descripción:
Retorna un arreglo que contienetantos elementos como parámetros tengala función.
Sintaxis:
array([<indice> => ]<valor>,[<indice> => ]<valor>, …)
Retorna:
Arreglo conformado por loselementos indicados como parámetros.
Ejemplos:
$precios = array(25, 33, 57);
$personas = array(“México”,“Colombia”, “Chile”);
$edades = array(“Juan” => 24,“Andrea” => 31);
Recorriendoarreglos
Los arreglos en PHP son sumamenteflexibles, pueden tener múltiplesdimensiones, pueden tener distintos tiposde contenido, los índices pueden sersecuenciales y generados automáticamenteo pueden ser textos seleccionados anuestra conveniencia.
Para poder manejar toda esa variedad dearreglos, PHP ofrece una amplia variedadde estructuras de control. No existe unaestructura de control en PHP que sea lamejor opción para recorrer cualquier tipode arreglos. Dependiendo del tipo deproblema y de la estructura del arreglo ensi mismo, podrías necesitar una u otra.Así que estar familiarizado con varias essin dudas la mejor decisión.
Recorriendo arreglossecuenciales
a) Usando un comando tipo while
Supongamos que tenemos una listade calificaciones por alumno ydeseamos calcular la calificaciónpromedio. Para ello necesitamosrecorrer cada posición del arreglo eir sumando cada calificación para alfinal dividir esa suma entre elnúmero de alumnos.
El arreglo que vamos a utilizar es elsiguiente:
<?php
$notas[] = 7.8;
$notas[] = 5.0;
$notas[] = 8.1;
$notas[] = 6.6;
$notas[] = 9.3;
$notas[] = 3.8;
?>
Necesitamos una variable en la cualguardar la suma total y otra parasaber en cada paso en que índiceestamos. Para conocer el total deelementos guardados en el arreglo,podemos usar la función count.
<?php
$suma = 0;
$promedio = 0;
$i = 0;
while ($i++ < count($notas))
$suma += $notas[$i];
if (count($notas))
$promedio = $suma / count($notas);
?>
Debemos tener siempre presenteque una división por cero genera unerror. Por lo tanto es convenienteque antes de una división, si eldenominador es sensible de sercero, preguntemos por su contenidoy efectuemos la operación solo si nolo es.
b) Usando un comando tipo for
El mismo ejemplo anterior puedeser escrito mas fácilmente con
ayuda de un comando for, el cual yahemos estudiado anteriormente.
<?php
$suma = 0;
$promedio = 0;
$i = 0;
for ($i = 0; $i < count($notas); $i++)
$suma += $notas[$i];
if (count($notas))
$promedio = $suma / count($notas);
?>
Recorriendo arreglos nosecuenciales
En general, las estructuras de control quemencionaremos para recorrer arreglos nosecuenciales, pueden ser usadas encualquier tipo de arreglos. Sin embargo elcaso contrario no siempre es cierto. Esdecir, los comandos while y for nosiempre pueden ser usados por si solos sino se conocen de antemano los índices osi los mismos no son secuenciales.
a) Usando un comando tipo foreach
Este tipo de comando permiterecorrer todos los elementos de unarreglo, almacenando en cadaiteración el valor corriente y elíndice corriente en un par devariables. Veamos como es susintaxis.
� Función foreach
Descripción:
Recorre cada uno de los elementosque conforman un arreglo.
Sintaxis:
-- obteniendo solo el contenido
foreach(<arreglo> as <contenido>)
<comando o bloque>;
-- obteniendo el índice y elcontenido
foreach(<arreglo> as <indice> =><contenido>)
<comando o bloque>;
Ejemplos:
$notas = array(“Juan” => 6, “Leo”=> 7, “Jose” => 8);
foreach($notas as $nota){
$acumulado += $nota;
}
$notas = array(“Juan” => 6, “Leo”=> 7, “Jose” => 8);
$maximo = 0;
$mejor = “”;
foreach($notas as $alumno =>$nota)
b) Usando las funciones list(), each() yreset()
Existe una característica especial delos arreglos en PHP que permiteutilizarlos como si se tratara debases de datos. Esto es posibleporque el lenguaje guarda dentrodel arreglo la posición corriente.
Este concepto de posición corrientedentro de un arreglo no tieneninguna relación con acceder a loscontenidos a través de índices.Siempre podemos asignar o irdirectamente a cualquier posiciónde un arreglo si indicamos laposición exacta usando un índice.Pero existen ciertas funciones enPHP que “recuerdan” el últimoelemento visitado y nos permitenconocer un contenido a la vez, eincluso avisarnos cuando llegamosal final del arreglo.
Una de esas alternativas es la quepresentamos a continuación.
Consiste de tres funciones que,combinadas con el comando while,permiten recorrer un elemento a lavez. Tales funciones son:
� Función each
Descripción
Cada vez que esta función esllamada con el mismo arreglo comoparámetro retorna un par devalores: el índice corriente y elcontenido corriente. Si el arreglo encuestión ya ha sido recorrido en sutotalidad, la función retorna falso.
Sintaxis:
each(<arreglo>)
� Función list
Descripción
Expone una serie de variablespara ser asignadas de una sola vez apartir de un arreglo.
Sintaxis:
list(<var1>, <var2>, …) =array(<val1>, <val2>, …);
� Función reset
Descripción
Prepara un arreglo para serrecorrido desde el primer elemento.
Sintaxis:
reset(<arreglo>);
Veamos como recorrer un arreglousando estas funciones usando elmismo ejemplo de los casosanteriores:
<?php
$notas[] = 7.8;
$notas[] = 5.0;
$notas[] = 8.1;
$notas[] = 6.6;
$notas[] = 9.3;
$notas[] = 3.8;
$suma = 0;
$promedio = 0;
reset($notas);
while (list($indice, $valor) = each($notas
$suma += $valor;
if (count($notas))
$promedio = $suma / count($notas);
?>
Veamos como funciona:
� El comando reset aplicadosobre el arreglo $notas preparaeste último para ser recorridodesde el principio. Si bien eneste caso no es necesarioaplicarlo ya que todo arreglo queno ha sido movido se encuentraposicionado en el principio de símismo, su utilización permiteprevenir que el programa deje defuncionar en caso de que unrecorrido similar sea aplicadoanteriormente.
� En la primera iteración, elcomando each retorna un arreglode dos posiciones que contienen
el primer índice y el primercontenido del arreglo $notas. Esdecir que retorna un arreglo condos valores, cero y 7.8.
� Estos dos valores sonasignados a las variables $indicey $valor gracias a la funciónlist(). Ambas variables seránusadas dentro del ciclo.
� Como la función each retornóalgo distinto de falso, entonces elc o ma n d o while procede aejecutar el cálculocorrespondiente.
� En la segunda iteración, laf u n c i ó n each retornaránuevamente un arreglo de dosposiciones, esta vez formado porun uno y un 5.0.
� Estos dos valores sonnuevamente asignados a lasvariables $indice y $valor.
� De nuevo, como la funcióneach retornó algo distinto defalso, entonces el comando whileprocede a ejecutar el cálculo.
La secuencia anterior habrá derepetirse hasta llegar al últimoelemento, luego del cual la funcióneach retornará falso y el comandowhile se detendrá.
c) Usando las funciones next() o prev()
y current()
Al igual que en el caso anterior,estas funciones se basan en elmanejo de arreglos como si fuesenbases de datos. Veamos que hacecada una de ellas.
� Función next
Descripción
Avanza la posición corriente delarreglo que es pasado comoparámetro. Retorna verdadero en
caso de que la operación seaexitosa y falso en caso de no existirmás elementos.
Sintaxis:
next(<arreglo>)
� Función prev
Descripción
Retrocede la posición corriente delarreglo que es pasado comoparámetro. Retorna verdadero en
caso de que la operación seaexitosa y falso en caso de no haberningún elemento anterior.
Sintaxis:
prev(<arreglo>)
� Función current
Descripción
Retorna el elemento corrientedentro del arreglo pasado comoparámetro.
Sintaxis:
$elemento = current(<arreglo>);
Volvamos al ejemplo anterior yveamos como podemos escribirlousando next() y current().
<?php
$notas[] = 7.8;
$notas[] = 5.0;
$notas[] = 8.1;
$notas[] = 6.6;
$notas[] = 9.3;
$notas[] = 3.8;
$suma = 0;
$promedio = 0;
reset($notas);
do{
$suma += current($notas);
} while (next($notas));
if (count($notas))
$promedio = $suma / count($notas);
?>
Dado que el comando next() avanzaa la siguiente posición, no podemosusar un ciclo while normal, ya quesi ponemos next() en la condición,habremos avanzado a la segundaposición antes de haber pasado porel ciclo la primera vez. Por ello
hemos usado un ciclo del tipo“do…while”, que nos permiteavanzar luego del cálculo delprimer elemento.
El problema que tenemos con unasolución como esta es que debemosestar seguros de que existe al menosun elemento que procesar, ya que el“do while” nos deja pasarlibremente la primera vez y soloverifica al final si existe o no unnuevo elemento.
Modifiquemos entonces el ejemplopara evitar que falle si el arreglo
está vacío:
<?php
$notas[] = 7.8;
$notas[] = 5.0;
$notas[] = 8.1;
$notas[] = 6.6;
$notas[] = 9.3;
$notas[] = 3.8;
$suma = 0;
$promedio = 0;
if (count($notas)){
reset($notas);
do{
$suma += current($notas);
} while (next($notas));
$promedio = $suma / count($notas);
}
?>
Introducción En este capítulo te nos adentramos en elmanejo de las cadenas de caracteres,también conocidas como strings, lascuales constituyen sin lugar a dudas eltipo de datos mas utilizado en PHP, yaque el objetivo principal del lenguaje esla producción u alteración de textos enHTML. Al finalizar este capítulo tendrásconocimiento de una amplia colección denuevos operadores y funciones ofrecidospor el lenguaje para facilitar el trabajocon textos. Temas desarrollados en este capítulo:
� Concepto y utilización de las
cadenas de caracteres en PHP.� Operadores de asignación,
concatenación y comparación.� Funciones para el manejo de textos.� Formas simplificadas de concatenar
textos.
Trabajando contextos
Uno de los principales tipos de dato entodo lenguaje de programación es elllamado tipo texto (o string), el cual puedeser encontrado en la literatura bajo elnombre de “cadenas de caracteres”, otambién “cadenas de texto”.
Una cadena de caracteres, como sunombre lo indica, no es otra cosa que unasecuencia de letras, números o caracteresespeciales: una frase. Puede ser tanpequeña como para no contener carácteralguno, o tan simple como para conteneruna palabra cualquiera, o puede llegar aser un largo texto conteniendo palabras,signos de puntuación y otros tipos decaracteres especiales.
Las cadenas de caracteres pueden serasignadas directamente a variables PHPpara realizar operaciones, o pueden serescritas sobre el programa que se está
generando. Ya veremos como hacerambas cosas.
Las fronteras entre los tipos de dato enPHP no son del todo rígidas. Esto quieredecir que si una variable contiene unnúmero –por ejemplo- y se desea tratarese valor como si fuese un texto, ellenguaje permitirá hacerlo. Es decir, queel lenguaje permite hacer un cierto cálculocon números y luego incluir el resultadodentro de una cadena de caracteres parapresentarlo por pantalla sin necesidad deestar haciendo conversiones de tipo.
Operadores deasignación y
concatenación
Para trabajar con textos, PHP ofrecealgunos operadores comunes y una grancantidad de funciones. Los operadoresmas básicos, y a la vez los mas usados,son los que permiten las operaciones deasignación y concatenación. Veamos lasintaxis de cada uno de ellos:
� Operador de asignación
Descripción
Usado para asignar un valor auna variable.
Sintaxis:
<variable> = <expresión>;
Ejemplo:
$nombre = “Andrea”;
� Operador de concatenación
Descripción
Usado para pegar un valor acontinuación de otro.
Sintaxis:
<variable> = <texto> . <texto>;
Ejemplo:
$nombre = “Andrea” . “ “ .“Martinez”;
El uso de los dos operadores anteriores esbastante evidente, sin embargo, veamos unpequeño ejemplo para ilustrar su uso:
<?php
$a = ”Cadena”;
$b = ”larga”;
$c = $a . $b;
echo $c; // Escribe el texto: CadenaLarga
$c = $a . “Mas” . $b;
echo $c; // Escribe el texto: CadenaMasLarga
?>
Los dos operadores anteriores pueden sercombinados en uno solo, el cual permiteasignar sobre una variable su propiocontenido, concatenado al final con otrotexto. Veamos la ficha de este nuevooperador:
� Operador de concatenación yasignación
Descripción:
Asigna a una variable el resultadode asignar el valor de ella mismaconcatenado con otro valor.
Sintaxis:
<variable> .= <texto>;
Ejemplo:
$nombre = “Andrea”;
$nombre .= “ “;
$nombre .= “Martinez”;
Ahora veámoslo en acción:
<?php
$a = ”Cadena”;
$b = ”larga”;
$c = $a; // Inicializa la variable con el contenido de $a
$c .= ”Mas”; // Asigna el propio contenido seguido del texto ”Mas”
$c .= $b; // Asigna el propio contenido seguido del contenido de$c
echo $c; // Escribe el texto: CadenaMasLarga
?>
En pocas palabras, el operador descritoanteriormente “acumula” información alfinal de la variable sobre la que se estáasignando.
Comparandocadenas decaracteres
Una de las operaciones más simples yfrecuentes en el manejo de textos es lacomparación. Mediante ella podemossaber si una variable contiene un textodeterminado o si dos variables, porejemplo, contienen el mismo texto.Veamos los operadores de comparaciónque el lenguaje nos ofrece:
� Operador de comparación deigualdad
Descripción:
Compara dos valores e indica si soniguales
Sintaxis:
<texto> == <texto>;
Ejemplos:
$nombre1 = “Andrea”;
$nombre2 = “Andreina“;
if ($nombre1 == $nombre2)
echo “igual contenido”;
else
echo “Distinto contenido”;
if ($nombre1 == “Andrea”)
echo “Nombre1 es Andrea”;
else
echo “Nombre1 no es Andrea”;
� Operador de comparación dedesigualdad
Descripción:
Compara dos valores e indica si sondiferentes
Sintaxis:
<texto> != <texto>;
Ejemplo:
$nombre1 = “Andrea”;
$nombre2 = “Andreina“;
if ($nombre1 != $nombre2)
echo “Distinto contenido”;
else
echo “Igual contenido”;
Siempre que se usen los operadoresanteriores, estaremos comparandocontenidos de variables sin importar eltipo de dato. Esto quiere decir que si unavariable contiene un número y la otracontiene el mismo número pero como
texto, es decir, encerrado en comillas,ambos valores serán considerados comoiguales.
Sin embargo, hay momentos en los quedeseamos saber si dos variables –porejemplo- contienen no solamente el mismovalor, sino además queremos saber si lostipos de las variables son iguales. Paraello se han creado un par de operadoresadicionales. Veamos cuales son:
� Operador de comparación deexactitud
Descripción:
Compara dos valores e indica si soniguales y del mismo tipo
Sintaxis:
<texto> === <texto>;
Ejemplo:
$valor1 = “5”;
$valor2 = 5;
if ($valor1 === $valor2)
echo “igual contenido e igualtipo”;
else
echo “Distinto contenido o tiposdistintos”;
� Operador de comparación de noexactitud
Descripción:
Compara dos valores e indica si sondistintos o de distinto tipo
Sintaxis:
<texto> !== <texto>;
Ejemplo:
$valor1 = “5”;
$valor2 = 5;
if ($valor1 !== $valor2)
echo “Distinto contenido o tiposdistintos”;
else
echo “igual contenido e igualtipo”;
Funciones para elmanejo de textos
El trabajo con cadenas de texto sueleocupar un porcentaje importante de todaaplicación Web, y como podemossuponer, no mucho se puede lograr usandosolo operadores de concatenación,asignación y comparación. Por eso PHPha incluido un robusto número defunciones que permiten hacer una granvariedad de operaciones con textos conrelativamente poco trabajo. Veamosalgunas de estas funciones:
� Función strlen
Descripción:
Retorna el largo de un texto.
Sintaxis:
strlen(<texto>)
Retorna:
Retorna el largo del texto que le espasado como parámetro. En caso deque el texto esté vacío retorna cero.
Ejemplos:
$largo = strlen(“abcdefg”); //Retorna 7
$largo = strlen(“”); //Retorna 0
� Función substr
Descripción:
Retorna una porción del textocolocado como primer parámetro deacuerdo a la posición y extensión
indicadas en los siguientesparámetros.
Sintaxis:
substr(<texto>, <inicio>[,<largo>])
Retorna:
Retorna la porción de <texto> quecomienza a partir del carácter<inicio> y cuya extensión vienedada por el parámetro <largo>.
Si el tercer parámetro es omitido,
entonces el substring retornado seráigual a todos los caracteres de lacadena original a partir de laposición indicada en el segundoparámetro.
Si el primer parámetro es unarreglo, entonces la función retornaNULL.
Ejemplos:
$hora = “10:25:37”;
$h = substr($hora, 0, 2);
$m = substr($hora, 3, 2);
$s = substr($hora, 6);
� Función strpos
Descripción:
Retorna la posición de un textodentro de otro texto.
Sintaxis:
strpos(<texto>, <subtexto>[,<comienzo>])
Retorna:
Retorna la posición de la primeraaparición de <subtexto> dentro de<texto>.
Si el tercer parámetro esespecificado, entonces la búsquedase realizará a partir del carácter queocupe la posición indicada en él.
Si el subtexto no es encontradodentro de texto, entonces el valorlógico FALSE será retornado.
Es conveniente tener en cuenta queen PHP el número 0 y el valorlógico FALSE pueden resultariguales en una comparación simple.Así que si deseamos saber si untexto aparece dentro de otro,debemos preguntar si el resultado es“no identico” a falso (usando eloperador !== en lugar de !=).
Ejemplo:
$texto1 = “abcdefghijk”;
$texto2 = “123”;
if (strpos($texto1, $texto2) !==FALSE)
echo “El texto1 contiene texto2”;
else
echo “El texto1 NO contienetexto2”;
� Función strtoupper
Descripción:
Retorna un texto donde todos loscaracteres alfabéticos han sidoconvertidos a mayúsculas.
Sintaxis:
strtoupper(<texto>)
Retorna:
Retorna el mismo <texto> pasadocomo parámetro pero con todos loscaracteres alfabéticos convertidos amayúsculas.
Ejemplo:
$texto1 = “Abc123*def”;
echo strtoupper($texto1); // EscribeABC123*DEF
� Función strtolower
Descripción:
Retorna un texto donde todos loscaracteres alfabéticos han sidoconvertidos a minúsculas.
Sintaxis:
strtolower(<texto>)
Retorna:
Retorna el mismo <texto> pasadocomo parámetro pero con todos loscaracteres alfabéticos convertidos aminúsculas.
Ejemplo:
$texto1 = “ABC123*Def”;
echo strtolower($texto1); // Escribeabc123*def
� Función trim
Descripción:
Retorna el texto pasado comoparámetro removiendo de él todoslos espacios en blanco del principioy del final.
Sintaxis:
trim(<texto>)
Retorna:
Retorna el mismo <texto>eliminando de él todos los espaciosal principio y al final. Los espacioscontenidos entre las palabras deltexto son respetados.
Ejemplo:
$texto1 = “ Esto es un ejemplo ”;
echo trim($texto1);// Escribe “Estoes un ejemplo”
� Función str_replace
Descripción:
Busca dentro de un texto lasapariciones de un subtexto y lasreemplaza por otro subtexto.
Sintaxis:
str_replace(<texto>, <buscar>,<reemplazar>[, <cuenta>)
Retorna:
Retorna el resultado de reemplazardentro de <texto> todas lasapariciones de <buscar> yreemplazarlas por <reemplazar>.
Si el último parámetro esespecificado, entonces solorealizará el reemplazo esa cantidad
de veces.
Ejemplos:
$texto1 = “esto es un subtexto”;
echo str_replace($texto1, “sub”,“pre”);
// Retorna “Esto es un pretexto”
echo str_replace($texto1, “s”, “S”,2);
// Retorna “ESto eS un Subtexto”
Variables autoexpansivas
Cuando abordábamos el tema de losatributos de las etiquetas en HTML,mencionamos la conveniencia de utilizarlas comillas simples en ese lenguaje yaque las comillas dobles presentabanventajas al ser usadas en PHP. Es hora devolver sobre ese punto.
Uno de los atajos implementados por PHPpara el trabajo con textos es laposibilidad de incrustar el contenido de
una variable dentro de una cadena decaracteres. Veamos de que estamoshablando.
Supongamos que tenemos tres variables,una de ellas contiene el nombre completodel usuario, otra la fecha y una última lahora actual. Supongamos también quequeremos mostrar al usuario una especiede saludo que incluya todos esos valores.Podríamos hacerlo de la siguiente manera:
<?php
$usuario = ”Carlos Tejera”;
$fecha = ”Martes 15 de Agosto de 2011
$hora = ”4:25pm”;
$saludo = ”Hola <b>” . $usuario;
$saludo .= ”</b>, hoy es ” . $fecha;
$saludo .= ” y son las ” . $hora;
echo $saludo;
?>
El anterior ejemplo produciría una cadenade caracteres como la siguiente:
Hola Carlos Tejera, hoy es Martes 15 deagosto de 2011 y son las 4:25pm
Cuando un texto está encerrado entrecomillas dobles en PHP, las variablescolocadas en su interior se auto expanden.Eso quiere decir que podemos incluirvariables completas dentro de los textosentrecomillados y las mismas habrán deexpandirse. Este sencillo truco puede enciertas ocasiones reducir muchas líneasde código.
Veamos como podríamos reescribir elejemplo anterior teniendo en cuenta lo que
acabamos de explicar:
<?php
$usuario = ”Carlos Tejera”;
$fecha = ”Martes 15 de Agosto de 2011
$hora = ”4:25pm”;
$saludo = ”Hola <b>$usuario</b>, hoy es
echo $saludo;
?>
Es importante recalcar el hecho de que lo
indicado anteriormente funcionasolamente cuando se utilizan comillasdobles.
Introducción En este capítulo abordamos uno de losaspectos más importantes de laprogramación Web del lado del servidor,el manejo de bases de datos. Debido a que la audiencia para la que estádirigido este libro no necesariamente estáfamiliarizada con el concepto y uso debases de datos, nos hemos dado a la tareade incluir una introducción bastantebásica tanto del lenguaje SQL como delconcepto y aspectos generales de laprogramación con bases de datos. Al finalizar este capítulo podrás hacerpáginas Web en PHP que sean capaces de
mostrar y manipular informacióncontenida en bases de datos.
Si has trabajado antes con bases dedatos, puedes ir directamente hasta lasección “Trabajando con bases de datosdesde PHP”. Temas desarrollados en este capítulo: � Definición y ejemplo práctico de
base de datos� Criterios para seleccionar una buena
base de datos� Arquitectura de una aplicación Web
con base de datos� Introducción al lenguaje SQL� Aspectos generales del trabajo con
bases de datos desde PHP� Funciones PHP para trabajar con
MySQL
¿Qué es una basede datos?
Una base de datos es un conjunto deinformación, usualmente relacionadaalrededor de un cierto tópico, almacenadade un modo tal que permite realizardistintas consultas sobre ellaeficientemente.
La mejor manera de comprender lo que esuna base de datos es a través de unaalegoría.
Imaginemos por un momento una mesa enuna oficina administrativa de unauniversidad donde se han dispuesto unconjunto de planillas con los datos de losestudiantes inscritos, otro conjunto deplanillas con los datos de los profesores,uno más con los horarios de clase, lascalificaciones de cada uno de losalumnos, la disposición de las aulas, engeneral, toda la información necesariapara controlar y administrar el
funcionamiento de la universidad.
Imaginemos también diferentes grupos depersonas queriendo hacer modificacioneso consultas sobre esa información.Profesores actualizando notas, alumnosconsultando las mismas, personaldirectivo haciendo medicionesestadísticas y personal administrativorealizando nuevas inscripciones.
Si deseamos que todo funcionemanualmente, necesitaríamos contratar avarias personas para administrar los datosde tales planillas. Estos funcionarios seencargarían de buscar los datos
solicitados, modificar datos cuando lessea solicitado, incluir información nueva,todo esto mientras resuelven problemasbásicos como no escribir en una planillaque otro esté modificando, permitirconsultas múltiples, garantizar que sololas personas autorizadas puedan accederal nivel de información que le espermitido y todo esto de la manera masrápida y segura posible.
Una base de datos no es más que elconjunto de información dispuesta sobrenuestra hipotética mesa.
Un Sistema Manejador de Bases de Datos,
sería equivalente al personal alrededor dela mesa, más el conjunto de protocolos,acuerdos y procedimientos que ellostienen para trabajar de la mejor maneraposible.
Cada vez que hablamos de algo comoOracle, MySQL, SQL Server, etcétera,estamos hablando de SistemasManejadores de Bases de DatosRelacionales, comúnmente llamadosRDBMS. Cada uno de ellos, nos permitecrear y administrar una o mas bases dedatos para trabajar distintos sistemas.Todos ellos tienen sus propiascaracterísticas, sus debilidades y susfortalezas.
Como escoger unabase de datos
En la actualidad existe una gran cantidadde bases de datos con diversascaracterísticas, las hay desde las muycaras hasta las gratuitas, desde las querequieren un servidor para ellas solashasta las que funcionan en cualquiercomputador personal, desde las quesirven para calcular estadísticasmundiales hasta las personales.
No existe tal cosa como “la mejor base de
datos”. Cada problema tiene sus propiascaracterísticas y en base a ellas existiráuna base de datos apropiada. Loimportante es evaluar correctamente lasnecesidades para llegar a una buenaopción.
Entre los criterios que normalmente seevalúan a la hora de seleccionar una basede datos están los siguientes:
� Sistema operativo: No todas lasbases de datos funcionan sobrecualquier sistema operativo, así quea la hora de hacer tu selección,debes tomar en cuenta las opciones
disponibles según el S.O. en el quedeseas trabajar.
� Cantidad de usuarios: si deseasdesarrollar una aplicación quefuncione en red con varios usuariosconectados simultáneamente, o sideseas hacer una aplicación Web enla que solo PHP acceda a la base dedatos sin importar la cantidad degente navegando en ella, o si solodeseas hacer una aplicaciónpersonal, deberás escoger un tipodistinto de base de datos.
� Velocidad: Dependiendo delvolumen de datos, de la cantidad deusuarios simultáneos e inclusive lascaracterísticas del equipo en el quefuncione, existirán bases de datosmas capacitadas que otras.
� Facilidad de administración:Según el tipo de base de datos conel que desees trabajar, pudiera serque necesites realizarfrecuentemente labores de soporte,así que evalúa si cuentas conpersonal especializado para hacerel mantenimiento, o si puedes pagara un tercero para que haga esetrabajo, o si deseas aprender yllevar esa carga por ti mismo.
� Escalabilidad: Debes tener encuenta que la base de datos queselecciones no solo sea capaz demanejar el volumen de informacióny el uso inicial de la aplicación,también sería bueno preveer elcrecimiento esperado a corto ymediano plazo para determinar si la
elección habrá de soportar la cargao no.
� Precio: Normalmente esteaspecto es el único evaluado pormuchos usuarios a la hora de hacersu selección. Lo ideal es dejarlopara el final y elegir la opción máseconómica dentro de las quecumplan con todos losrequerimientos anteriores y no alrevés.
En general podemos decir que las basesde dato comerciales mas usadas paragrandes aplicaciones son Oracle y MSSQL Server, ambas son capaces demanejar grandes volúmenes deinformación, muchas conexiones
simultaneas, son costosas y requierenmantenimiento especializado.
En cuanto a las bases de datos personales,es decir, para hacer aplicaciones sencillasde un solo usuario en un solo equipo,existen soluciones como Access.
Para aplicaciones basadas en Internet convolúmenes pequeños o moderados deinformación, la solución mas usada enMySQL, entre otras cosas por ser gratuito.
Arquitectura deuna aplicación Webcon base de datos
En el diagrama mostrado a continuaciónpodemos ver los tres niveles de ejecuciónde los que consta una aplicación Web queutilice bases de datos.
En el lado izquierdo está representado elusuario final, el cual utiliza un navegadorpara ver una página Web en HTML.
En el centro tenemos al servidor Web,Apache en nuestro caso, el cual se encargade despachar al usuario las páginas
solicitadas y de mandar a preprocesarcualquier código servidor (como PHP)que ellas pudieran tener.
Finalmente, en el lado derecho tenemos labase de datos, la cual funciona tambiéncomo un servidor especializado capaz deresponder a solicitudes hechas desde elcódigo PHP.
El lenguaje SQL
Una de las características de la mayoríade las llamadas bases de datosrelacionales, es la posibilidad de accedera ellas utilizando un lenguaje de bases dedatos llamado SQL. Mediante esesencillo, pero poderoso lenguaje podemosinsertar, eliminar, modificar o solicitarcontenidos de una base de datos.
Aunque el lenguaje SQL pretende ser unestándar, en la práctica habremos deconseguir pequeñas variaciones en laimplementación que cada base de datos
hace de él.
El objetivo de este libro no es enseñar eluso del lenguaje SQL, sin embargo,haremos un pequeño recuento de loscuatro comandos principales del lenguajepara luego poder hablar del modo en quelos mismos pueden ser ejecutados desdePHP.
Si ya estás familiarizado con el lenguajeSQL, tal vez desees ir directamente a lasiguiente sección.
Para ilustrar el uso de los distintoscomandos SQL, imaginemos una pequeñabase de datos tipo inventario constituidapor dos tablas:
� Tabla de productos, la cualincluye los siguientes campos:
o Código: Indica el códigoúnico del producto.
o Nombre: Indica el nombrecompleto del producto.
o Descripción: Indica de unmodo un tanto mas amplio lascaracterísticas del producto.
� Tabla de Inventario, incluye lascantidades existentes por producto,sus campos son:
o Código de Producto:Contiene alguno de losvalores de la tabla anterior.
o Cantidad: Existencia delproducto.
El comando INSERT:
Mediante el comando INSERT de SQLpodemos agregar registros en una tabla.La sintaxis es la siguiente:
INSERT INTO <tabla>(<lista_de_campos>) VALUES(<lista_de_valores>);
Donde:
� <tabla> es el nombre de la tablasobre la cual deseamos insertar elregistro.
� <lista_de_campos> correspondea una lista de los nombres físicos delos campos sobre los que se va ainsertar información, separados porcoma.
� <lista_de_valores> es una lista
con la misma cantidad de elementosque la lista anterior, en la que secolocan uno a uno todos los valoresa insertar en cada campo de la otralista.
Es importante mencionar que al insertarun registro en una tabla, no es necesariodarle un valor a todos y cada uno de loscampos de la tabla.
Tomando como referencia una de lastablas mencionadas anteriormente,podríamos escribir algunos ejemplos:
Insert into productos (codigo, nombre)values (1, ‘Azúcar refinada’);Insert into productos (codigo, nombre)values (2, ‘Leche completa en polvo’);Insert into productos (codigo, nombre)values (3, ‘Café molido’);
Nótese que los valores para el campocodigo están puestos directamente y losd e nombre están entre comillas. Esto sedebe a que el campo código es numérico yel otro alfabético.
El comando DELETE:
Tal como su nombre lo indica, elcomando DELETE de SQL elimina uno omas registros de una base de datos segúnuna condición. Su sintaxis es como sigue:
DELETE FROM <tabla> WHERE<condición>;
Donde:
� <tabla> es el nombre de la tablaa la que se le va a eliminar uno omás registros.
� <condición> es unacaracterística que indica el tipo deelementos que debe ser borrado. Encaso de omitirse por completo lacondición, se procederá a eliminartodos los registros.
Volviendo al ejemplo de nuestra tabla deproductos podríamos escribir algo comolo siguiente:
Delete from productos where codigo =2;
El comando anterior elimina
específicamente el registro cuyo código esigual a 2.
Delete from productos where codigo >5 and codigo < 22;
El comando anterior elimina todos losregistros cuyos códigos sean mayores acinco y menores a 22.
El comando UPDATE:
Este comando permite modificar cualquiercampo de cualquier registro, bien seaindividualmente o en forma masivamediante una condición. Su sintaxis es lasiguiente:
UPDATE <tabla> SET<lista_de_asignaciones> WHERE<condición>;
Donde:
� <tabla> es el nombre de la tablasobre la que se desea hacer lamodificación.
� <lista_de_asignaciones> es,como cabe esperar, una lista deasignaciones de valores sobrecampos de la tabla separados porcoma.
� <condición> es unacaracterística que indica el tipo deelementos que debe ser modificado.En caso de omitirse por completo lacondición, se procederá a modificartodos los registros.
Veamos un ejemplo:
update productos set nombre = “Azucarrefinada iportada” where codigo = 1;
El comando anterior alterará el camponombre de todos aquellos registros quecumplan la condición mencionada.
El comando SELECT:
Este comando es el utilizado para extraer
información desde una base de datos. Esun comando simple y a la vez muypoderoso. Comenzaremos estudiándolo ensu forma mas simple e iremos haciendoejemplos cada vez mas complicados parafamiliarizarnos con su funcionalidad.
A diferencia de los comandos anteriores,los cuales ejecutaban órdenes sobre labase de datos, este último habrá de traerde vuelta un conjunto de registros para sumanipulación. Por ahora solo hablaremosde las distintas maneras que el comandonos ofrece para traer esa información. Novamos a ocuparnos sobre como recibir,almacenar o manipular esos datos. Esohabremos de tratarlo mas adelante.
Una vez más recordamos que el objetivode este libro no es aprender SQL. Sideseas adquirir destreza en este lenguajede bases de datos, deberás buscarinformación en bibliografía masespecializada.
Comencemos viendo la sintaxis del usomás básico de un comando SELECT.
SELECT <lista_de_campos> FROM<tabla>;
Donde:
� <lista_de_campos> es una seriede nombres de campos separadospor coma. También podemosreemplazar la lista por un asterisco,en cuyo caso el comando traerá devuelta todas las columnas de latabla.
� <tabla> es el nombre de la tablade la que deseamos extraerinformación.
Para ver como funciona, veamos un par deejemplos:
Select * from productos;
El comando anterior traerá todos loscampos de todos registros de la tabla deproductos, es decir que traerá la tablacompleta. Si la tabla en cuestión poseemucha información, entonces usar elcomando SELECT de esa manera quizásno sea una buena idea.
Select nombre from productos;
En este otro comando estamos solicitandoúnicamente todos los valores del campo
nombre de la tabla de productos.
Usando SELECT conWHERE:
Utilizar el comando SELECT sin ningunacondición no es práctico cuando la tablaque se desea consultar tiene muchosregistros. En esos casos podemos usar lacláusula WHERE de la siguiente manera:
SELECT <lista_de_campos> FROM
<tabla> WHERE <condición>;
Donde:
� <condición> se refiere al filtroque deben cumplir los registros quedeseamos obtener.
Veamos un ejemplo sencillo:
Select nombre from productos wherecodigo < 5;
Como seguramente habrás adivinado, en
el ejemplo anterior solo serán devueltoslos registros cuyos códigos sean menoresque cinco.
Usando SELECT conORDER BY:
Al utilizar la cláusula ORDER BY dentrodel comando SELECT estamos indicandoel orden en que deseamos nos seandevueltos los datos. La sintaxis es comosigue:
SELECT <lista_de_campos> FROM<tabla> ORDER BY<lista_de_campos_2>;
Donde:
� <lista_de_campos_2> se refierea los campos sobre los que seaplicará el orden. Si se indica masde un campo, entonces el primerogenerará el orden principal, y encaso de que mas de un registro tengael mismo valor, se ordenarán por elsegundo de la lista y asísucesivamente.
Ejemplos:
Select codigo, nombre from productoswhere codigo < 5 order by nombre;
Como podemos ver en el ejemploanterior, hemos solicitado los camposcódigo y nombre de la tabla de productoscuyos códigos sean menores que 5 y losresultados los hemos solicitado ordenadospor nombre.
Select codigo, nombre from productoswhere codigo < 5 order by 2;
El ejemplo anterior es exactamente igualque el que lo precede. Solo hemoscambiado la forma de indicar el orden. Enlugar de escribir explícitamente el nombredel campo, hemos puesto un número 2para indicar que el segundo camposolicitado es el que va a determinar elorden del resultado.
Usos más avanzados delcomando SELECT:
El comando SELECT tiene muchas masformas de las que hemos mencionado, porlo que recomendamos ampliar tus estudiosen esta área y sobre todo, ejercitar todo loque vayas aprendiendo.
Por ejemplo, la cláusula GROUP BYdentro del comando SELECT sirve paraobtener subtotales. Es decir, permiteagrupar cientos de registros que tengan uncierto campo con el mismo valor y traer,no los valores individuales, sino cálculossimples como cantidad de registros,sumas, promedios, etc.
La cláusula HAVING puede ser usada enconjunción con el GROUP BY paradeterminar cuales subtotales mostrar ycuales no. Un ejemplo podría ser, traer deuna tabla de ventas los nombres de losproductos y el total de unidades vendidasde cada uno de ellos, solo si las ventassuperan las cien unidades.
Otro aspecto poderoso del comandoSELECT es la posibilidad de combinardos o más tablas dentro de una solallamada. Esto se logra de distintasmaneras, una de ellas es especificandomas de un nombre de tabla luego delFROM y luego añadiendo algunacondición que permita determinar como se
relaciona una tabla con la otra.
Al trabajar un comando SELECT con másde una tabla, conviene usar un alias paracada una de ellas y usarlo como prefijo decada columna que se mencione en elcomando completo.
Un ejemplo de un comando SELECTsobre más de una tabla podría verse de lasiguiente manera:
SELECT al.nombre,
al.apellido, nt.resultadoFROM alumnos al, notas ntWHERE al.codigo = nt.codigo;
En el ejemplo anterior hemos combinadouna hipotética tabla de alumnos, quecontiene al menos los campos para elcódigo del alumno, nombre y apellido delmismo, junto con otra tabla que contienelas notas obtenidas en una ciertaevaluación. En esta última tabla podemossuponer que existen al menos los camposcódigo del alumno y resultado de la
evaluación.
Si prestamos atención a la cláusulaFROM, vemos que hemos mencionadodos tablas separadas por coma, y que paracada una de ellas hemos especificado unaalias.
En el área del WHERE, hemos puesto unacondición que expresa el modo en queambas tablas se relacionan, es decir, quesiempre que el campo código tenga elmismo valor, podemos imaginarnos quelos campos de ambas tablas podríancombinarse para formar una tabla“virtual” con los campos de ambas.
De esta tabla virtual combinada, hemossolicitado extraer los campos nombre yapellido de la tabla alumnos y el camporesultado de la tabla notas.
Trabajando conbases de datos
desde PHP
El lenguaje PHP permite la utilización deuna gran variedad de bases de datos, bienusando comandos directos (que funcionanpara un tipo de base de datosespecíficamente) o a través de tecnologíasabiertas como ODBC.
Las funciones que permiten realizarciertas tareas con bases de datos en PHP
han sido agrupadas en “familias”, demodo que todos los comandos que sirvenpara una cierta base de datos compartenun prefijo común.
Además de ello, la mayoría de losnombres de los comandos que tienen unamisma funcionalidad son similares, porejemplo, los comandos para establecerconexión a las distintas bases de datos enPHP tienen los siguientes nombres:
mysql_connect() Función deMySQL
ora_logon() Función deOracle
sybase_connect() Función deSybase
odbc_connect() Función deODBC
pg_connect() Función dePostgreSQL
ifx_connect() Función deInformix
Dada la similitud entre la manera de usarel lenguaje en una base de datos y otra,podemos estar seguros de que, al menosen lo que se refiere a PHP, no hay muchomás que aprender al cambiar demanejador.
En líneas generales podemos decir que altrabajar con una base de datos desde PHPestaremos haciendo siempre las siguientestareas básicas:
� Conexión al manejador de la basede datos
� Selección de la base de datos conla que se desea trabajar.
� Envío de un comando a serejecutado en la base de datos.
� Solicitud de uno de los registrosobtenidos como resultado de unaconsulta SQL.
� Desconexión de la base de datos.
Existen algunos tipos de tareas
adicionales, sin embargo, lasmencionadas anteriormente constituyenmás del 95% del trabajo a realizar en lamayoría de los proyectos.
Trabajando conMySQL
MySQL es un Sistema Manejador deBases de Datos Relacionales que funcionacomo un servidor para proveer conexión amúltiples usuarios sobre múltiples basesde datos individuales.
La primera versión de MySQL aparecióen 1995, bajo la filosofía de LicenciaPública General de la mano de MySQLAB, la cual hoy en día es subsidiaria deOracle.
Si existe una base de datos que podríallamarse natural para trabajar desde PHP,esta sería sin duda alguna MySQL. Larazón principal podría estar en el hechode que ambas se originaron en entornos decódigo abierto y bajo el sistema operativoLinux.
Hoy en día, MySQL es la escogenciapreferida en la mayoría de los desarrollosWeb de de tamaño pequeño y mediano. Enparte se debe a su facilidad deinstalación, a la disponibilidad endistintos sistemas operativos, a suvelocidad o muy probablemente a su
precio.
Conectando con elmanejador de MySQL:
Para conectarse con un servidor deMySQL hay que especificar siempre tresparámetros distintos. El primero se refierea la identificación del servidor en simismo. Cuando el servidor con el quedeseamos conectarnos está en la mismamáquina en la que trabajamos, podemosusar el texto “localhost”, de lo contrario,podemos poner una dirección por nombre
o hasta un IP.
El segundo y tercer parámetros necesariopara conectarnos corresponden al nombredel usuario y su clave. Ambos valoresdeberán coincidir con las credenciales dealgún usuario debidamente autorizado enel servidor de bases de datos al que nosdeseamos conectar.
PHP permite hacer múltiples conexionesal manejador de bases de datos, cosa quenos permitiría, por ejemplo, trabajar conmás de una base de datos administradapor el mismo manejador o tal vez tenermúltiples conexiones sobre la misma
instancia.
En todo caso, dado que el lenguajepermite múltiples conexiones, el comandoque realiza esa tarea retornará unidentificador de la conexión, de maneraque cualquier operación posterior puedaser acompañada de este valor y asíidentificar cual de ellas estamos usando.
Veamos la sintaxis del comando:
� Función mysql_connect
Descripción:
Establece la conexión con un ciertoservidor de bases de datos MySQL.
Sintaxis:
mysql_connect(<servidor>,<usuario>, <clave>)
Parámetros:
<servidor>: Puede ser unadirección IP, o un URL o la cadena“localhost”. Puede estar seguido deun número de puerto separados por
“:”.
<usuario>: Nombre de un usuariodebidamente autorizado para abrirel manejador de bases de datos.
<clave>: Clave del usuarioespecificado.
Retorna:
Identificador de la conexión(llamado también handler) en casode que la conexión sea exitosa oFALSE en caso de error.
Ejemplos:
$db = mysql_connect(“localhost”,“admin”, “libra”);
$db =mysql_connect(“www.misitio.com”,“admin”, “venecia”);
Cerrando una conexión:
Una conexión a una base de datos MySQLhecha en PHP habrá de cerrarseautomáticamente al terminar de
procesarse la página donde fue abierta. Esdecir, normalmente no es necesario cerrareste tipo de conexiones, sin embargo, encaso de ser necesario, el comando usadopara tal fin es el siguiente:
� Función mysql_close
Descripción:
Cierra una cierta conexión a unmanejador de bases de datosMySQL.
Sintaxis:
mysql_close(<conexión>)
Parámetros:
<conexión>: Número retornado porla función mysql_connect. Si no seespecifica, se cerrará la últimaconexión abierta.
Retorna:
Retorna TRUE si la operaciónfue exitosa o FALSE en caso de error.
Ejemplo:
$db = mysql_connect(“localhost”,“admin”, “libra”);
mysql_close($db);
Seleccionando una base dedatos:
Los dos comandos anteriores se refieren acomo abrir o cerrar una conexión con elmanejador, sin embargo, ese manejador
podría estar manejando dos o más basesde datos, así que es necesario especificarel nombre de la base de datos con la quese desea trabajar. Esto lo podemos hacercon el siguiente comando:
� Función mysql_select_db
Descripción:
Selecciona una base de datos sobrela que actuarán los sucesivos comandos.
Sintaxis:
mysql_select_db(<base_de_datos>,<conexión>)
Parámetros:
<base_de_datos>: Nombre de labase de datos con la que deseamostrabajar.
<conexión>: Identificador retornadopor la función mysql_connect. Si nose especifica, se usará la últimaconexión abierta.
Retorna:
Retorna TRUE si la operaciónfue exitosa o FALSE en caso de error.
Ejemplo:
$db = mysql_connect(“localhost”,“admin”, “libra”);
mysql_select_db (“inventario”,$db);
Ejecutando un comandoSQL:
Una vez establecida la conexión con elservidor y seleccionada la base de datos,estamos preparados para enviar uncomando SQL, bien sea para insertar,modificar o eliminar información, o pararealizar una consulta.
Para cualquiera de esos casos, podemosusar el siguiente comando:
� Función mysql_query
Descripción:
Envía un comando SQL a una ciertabase de datos y retorna un resultado.
Sintaxis:
mysql_query(<comando>,<conexión>)
Parámetros:
<comando>: Texto que contiene uncomando SQL válido para seraplicado a la base de datospreviamente seleccionada.
<conexión>: Identificador retornado
por la función mysql_connect. Si nose especifica, se usará la últimaconexión abierta.
Retorna:
Si el comando enviado es unSELECT, entonces la funciónretorna un identificador si laoperación fue exitosa o FALSE encaso de error. Si el comando es unINSERT, UPDATE o DELETE, seretornará TRUE o FALSE paraindicar el éxito del comando.
El identificador retornado en caso
de consultas, servirá para solicitarcada uno de los registros retornadospor el comando SELECT.
Ejemplo:
$db = mysql_connect(“localhost”,“admin”, “libra”);
if ($db){
if (mysql_select_db (“inventario”,$db)){
$sql = “SELECT * FROMproductos”;
$res = mysql_query($sql, $db);
}
}
Requiriendo un registro:
Tal como vimos en el ejemplo anterior,siempre que se hace una consulta del tipoSELECT a una base de datos,obtendremos como resultado unidentificador, llamado también recurso, elcual no es más que el conjunto de valoresretornados en modo –digamos-inutilizable.
Para poder acceder a cada uno de losregistros almacenados en ese valor tiporecurso, existe una familia de funciones,todas ellas de la forma mysql_fetch.
Cada una de estas funciones extrae deforma secuencial cada uno de los registrosseleccionados. Es decir, la primera vezque llamamos a una función del tipomysql_fetch luego de una selección dedatos, retornará el primer registroseleccionado o FALSE si no existe ningúnregistro. Las siguientes veces quellamemos a ese mismo comando, retornaráel segundo, tercero, cuarto registro hastallegar al final de la selección, momento enel que retornará FALSE.
Es importante destacar que, dado que enPHP los valores FALSE, el número 0 y untexto vacío son equivalentes, el mejormodo de saber si una de estas funcionesha llegado o no al final, es comparando elresultado de la función contra el valorFALSE usando operadores de exactitud(bien sea ===, o también !==).
La diferencia principal entre las distintasfunciones mysql_fetch está en la forma enque cada una de ellas retorna losregistros. Por motivos de simplicidad,vamos a hacer énfasis en solo dos deellas:
� Función mysql_fetch_row
Descripción:
Retorna en forma de arreglosecuencial, uno de los registrosresultantes de la aplicación de uncomando SELECT sobre una basede datos.
Sintaxis:
mysql_fetch_row(<recurso>)
Parámetros:
<recurso>: Identificadorretornado por la función mysql_query.
Retorna:
Arreglo secuencial con loscontenidos de los distintos camposespecificados en el comandoSELECT enviado a la funciónmysql_query.
Si no hay ningún registro queretornar, la función retorna el valorFALSE.
Ejemplo:
$db = mysql_connect(“localhost”,“usr”, “key”);
if ($db){
if (mysql_select_db (“inventario”,$db)){
$sql = “SELECT * FROMproductos”;
$res = mysql_query($sql, $db);
$fila = mysql_fetch_row($res);
while ($fila !== false){
for ($i = 0; $i < count($fila);
$i++)
echo $i . “=“ . $fila[$i] .“<br>”;
$fila = mysql_fetch_row($res);
}
}
}
� Función mysql_fetch_assoc
Descripción:
Retorna en forma de arreglo
asociativo, uno de los registrosresultantes de la aplicación de uncomando SELECT sobre una basede datos.
Sintaxis:
mysql_fetch_assoc(<recurso>)
Parámetros:
<recurso>: Identificadorretornado por la función mysql_query.
Retorna:
Arreglo asociativo con loscontenidos de los distintos camposespecificados en el comandoSELECT enviado a la funciónmysql_query.
Los índices del arreglo retornado contendrán los nombres de loscampos según lo escrito en elcomando SELECT.
Si no hay ningún registro queretornar, la función retorna el valorFALSE.
Ejemplo:
$db = mysql_connect(“localhost”,“usr”, “key”);
if ($db){
if (mysql_select_db (“inventario”,$db)){
$sql = “SELECT cod, nombreFROM productos”;
$res = mysql_query($sql, $db);
$fila = mysql_fetch_row($res);
while ($fila !== false){
echo “Código: “ . $fila[“cod”] .“<br>”;
echo “Nombre: “ .$fila[“nombre”] . “<br>”;
$registro =mysql_fetch_row($res);
}
}
}
Tal como indicamos al principio de estecapítulo, el modo en que se trabaja enPHP con una base de datos, es bastanteparecido a como se trabaja con las otras,así que poco hay que aprender cuando yahemos hecho un primer proyectoconectando con alguna base de datos.
Introducción En este capítulo te presentamos un par deconceptos introducidos en el lenguaje apartir de la versión 4 del mismo, lasvariables globales y súper globales. Estos dos tipos de elementos le brindan alprogramador la posibilidad de accederdirectamente, y desde cualquier parte delcódigo, a cierto tipo de información, locual añade sencillez y legibilidad a losprogramas desarrollados. Al finalizar este capítulo estaráscapacitado para utilizar adecuadamentelos arreglos globales y súper globales, loscuales constituyen la base de lo que
habrás de aprender en el resto del libro. Temas desarrollados en este capítulo:
� Variables globales� Variables súper globales
Variables globales
El alcance natural de cualquier variableen PHP es el contexto en el cual estádefinida. Es decir que una variabledefinida dentro de una función, seráválida solo dentro de esa función,mientras que una variable definida a niveldel script, tendrá valor a lo largo de todoel código del script no incluido dentro defunciones.
Ya hemos mencionado la posibilidad de
utilizar una variable externa dentro de unafunción siempre que declaremos la mismacomo global. Sin embargo, la mejormanera de utilizar una variable dentro deun script (o en cualquiera de sus includes)sin importar si estamos dentro o fuera deuna función es usando un arregloasociativo especial llamado $GLOBALS.
Por ejemplo, si asignamos un valor a lavariable $usuario al principio de unscript, podremos hacer uso de ellaposteriormente en cualquier parte delmismo script excepto dentro de lasfunciones.
Podemos poner en cada función dondedeseemos utilizar esa variable, unapequeña declaración donde indiquemosque al referirnos a $usuario no queremoscrear una variable interna a la funciónsino que queremos utilizar la que existeexternamente.
Una alternativa mas sencilla esreemplazar la variable $usuario por$GLOBALS[“usuario”], de este modopodemos hacer uso de ella dentro o fuerade las funciones sin tener que declararla.
En resumen, el arreglo especial$GLOBALS existe en todas partes, si
queremos hacer que una variable puedaser llamada en cualquier parte de unscript, entonces podría convenirnos nousar una variable en si, sino mas biendefinir una de las posiciones del arreglo$GLOBALS.
Variables súperglobales
Así como el arreglo $GLOBALS existe encualquier parte, existen una serie dearreglos asociativos con las mismascaracterísticas. Se les conoce como SúperGlobales.
Veamos algunos de ellos.
Información sobre elambiente de ejecución -$_SERVER
Este arreglo asociativo contieneinformación relativa al servidor donde seestá despachando la página, losdirectorios definidos, los encabezadosHTML y la ubicación de los scripts.Algunos de índices utilizables son:
� $_SERVER[“PHP_SELF”]Nombre físico del archivo que seestá ejecutando.
� $_SERVER[“argv”]: Arreglocon la lista de los parámetrospasados al script.
� $_SERVER[“argc”]: Número deargumentos pasados al script.
� $_SERVER[“SERVER_ADDR”]:Dirección IP del servidor donde seestá ejecutando el script.
� $_SERVER[“SERVER_NAME”]:
Nombre del servidor donde se estáejecutando el script.
�
$_SERVER[“REQUEST_METHOD”]:Indica el método usado para accesarla página (‘GET’, ‘HEAD’, ‘POST’,‘PUT’, etc.).
�
$_SERVER[“DOCUMENT_ROOT”]:Directorio raíz desde el que se estáejecutando el script.
�
$_SERVER[“HTTP_USER_AGENT”]:Texto que indica el navegador ySistema Operativo utilizado por elusuario.
Variables de ambiente delSistema Operativo - $_ENV:
A través de este arreglo asociativopodemos acceder a las llamadas variablesde ambiente del Sistema Operativo. Porejemplo, si PHP está siendo interpretadoen un servidor Windows, entoncesutilizando el arreglo asociativo $_ENVpodemos acceder a todos los SETs
definidos.
Debido a que la lista de las variables deambiente varía dependiendo del SistemaOperativo, e incluso de la versión delmismo, resultaría inútil hacer una lista deopciones. Sin embargo, si deseas accedera un valor de ambiente como el usuarioWindows que está ejecutando PHP,podrás usar este arreglo.
Valores pasados de unapágina a otra usando el
método GET - $_GET
Al enviar los valores de un conjunto deelementos HTML desde el formulario deuna página a otra usando el método GET,podemos tener acceso a los valoresenviados utilizando el arreglo asociativo$_GET. Pongamos un ejemplo paradescribir su uso:
Supongamos que tenemos una página A, lacual tiene un formulario que usa el métodoGET para llamar a la página B, y digamosque dentro de ese formulario estáncontenidos los elementos HTML <inputtype=’text’ name=’usuario’> e <input
type=’password’ name=’clave’>.
<html>
<head>
<title>Página A</title>
</head>
<body>
<form name=’login’ action=’PaginaB.html
Escriba su usuario:
<input type=’text’ name=’usuario’ />
<br />
Escriba su clave:
<input type=’password’ name=’clave
<br />
<input type=’submit’ value=’Entrar
</form>
</body>
</html>
Ahora supongamos que tenemos unaPaginaB.html, la cual recibirá los valoresescritos por el usuario. Algo como esto:
<html>
<head>
<title>Página B</title>
</head>
<body>
Su usuario es: <?php echo $_GET[”usuario
<br />
Su clave es: <?php echo $_GET[”clave
</body>
</html>
Como podemos ver, cualquier valortransmitido por un formulario usando el
método GET, puede ser recibido del otrolado usando el arreglo superglobal$_GET.
Valores pasados de unapágina a otra usando elmétodo POST - $_POST
El arreglo superglobal $_POST esexactamente igual al anterior. Ambosestán diseñados para recibir los valoresde los elementos HTML enviados desdeuna página a otra a través de unformulario. La única diferencia entre
ambos es que el procesador de PHP haráuso de uno solo de ellos dependiendo delmétodo usado en el formulario. Es decir,si el formulario que fue utilizado parallamar una página usó el método GET,entonces el arreglo superglobal $_GETcontendrá los valores escritos por elusuario. Si por el contrario, el métodousado fue POST, entonces será $_POST elque contenga tales valores.
Valores pasados de unapágina a otra usandocualquier método -
$_REQUEST
En cualquiera de los dos casos anteriores,el procesador de PHP aparte de llenar unarreglo (bien sea $_GET o $_POST) conlos valores enviados, también llenará otroarreglo llamado $_REQUEST con losmismos valores.
Ya que el uso de $_REQUEST esexactamente igual al de los dos arreglosantes mencionados, no es una mala ideahacer siempre uso de $_REQUEST y node los otros arreglos.
Nombres de archivos subidosmediante el tag <inputtype=’file’> de HTML -$_FILES
Cuando se utiliza el elemento HTML<input type=’file’> para hacer un uploadde un archivo, el procesador de PHP creauna entrada en el arreglo superglobal$_FILES con el nombre de los archivossubidos.
HTML es capaz de manejar por si solo la
carga de archivos desde alguna locacióndel usuario hasta el servidor, sin embargo,conociendo el nombre del archivo reciénsubido, pueden hacerse distintasmanipulaciones posteriores usando PHP.
Valores pasados de unapágina a otra mediantesesiones - $_COOKIE y$_SESSION
El arreglo superglobal $_COOKIEcontiene los nombres y valores de todasl as cookies usadas en el sitio, mientras
q u e $_SESSION permite almacenarvalores a los que necesitemos accesar unay otra vez en distintas páginas mientras elusuario este navegando por nuestro sitioWeb.
Dada la importancia de estos dos arreglosen la construcción de sitios donde uncontexto común pueda ser usado encualquier página sin tener que transmitirlotodo el tiempo, hemos decididodedicarles a ellos todo el capítulosiguiente.
Introducción En este capítulo abordamos uno de losconceptos introducidos por NetscapeCommunications desde el año 1994, y quepasó prontamente a constituirse en unestándar de al programación Web, lasllamadas cookies. Al finalizar este capítulo deberías estar encapacidad de entender y utilizar cookiesdesde PHP para recordar datos de tusclientes. Temas desarrollados en este capítulo: � Concepto y utilidad de las cookies� Uso de cookies en PHP
� Operaciones básicas con cookies
¿Qué es una“cookie”?
Una “cookie” es un trozo de informaciónrelacionada con un dominio Web que sealmacena en el disco duro del visitante, yque puede ser luego recuperada por elservidor del dominio en posterioresvisitas.
Desde el punto de vista de unprogramador, podríamos decir que unacookie no es más que una variable que seguarda en el cliente. Técnicamentehablando, podemos decir que es unpequeñísimo archivo de texto que elnavegador guarda en nuestro equipocuando la página se lo solicita.
Los navegadores mas conocidos estánprovistos con un mecanismo para guardary reenviar al servidor ciertos valoresalmacenados en las llamadas cookies.Para poder hacer esto, ellos disponen dealgún directorio oculto a los usuarios en
los que guardan todas las cookiesutilizadas por las páginas visitadas porlos usuarios.
Una página Web programada para utilizarcookies, además de realizar sus funcionesnaturales, puede darle la orden alnavegador de almacenar uno o másvalores. Además, cada vez que una de laspáginas del sitio hace una solicitud alservidor para navegar a otra de ellas,lleva consigo al servidor todos losvalores de las cookies del sitio.
Toda cookie está limitada a un dominioespecífico, por ejemplo
www.misitioconcookies.com. Además,están provistas de un mecanismo decaducidad que le permite al programadorponerle a cada una de ellas una fecha devencimiento.
Desventajas asociadas al usode cookies
Existen sitios Web que hacen usointensivo de las cookies para guardar todo
tipo de información como claves, númerosde tarjetas de crédito y otro tipo de cosas.Personalmente recomiendo ser muycuidadoso a la hora de utilizar este tipo deelementos, ya que pone la información delusuario al alcance de programasmaliciosos.
Otro aspecto por el que no siempre esrecomendable hacer sitios Web quedependan exclusivamente del uso decookies, es que el usuario tiene la opciónde configurar su navegador paradesactivarlas.
Estructura de una Cookie
Básicamente, una cookie contieneinformación acerca de lo siguiente:
� Nombre de la variable: Indica elnombre con el que se va a guardarel valor, por ejemplo “cuenta”, o“fecha” o “teléfono”.
� Valor: Contiene el valor real aser guardado.
� Fecha de expiración: Si no seespecifica, o su valor es cero,
indica que la cookie debe caducartan pronto el usuario cierre elnavegador. De lo contrario, indicala fecha y hora luego del cual elvalor deberá ser descartado.
� Dominio: Nombre del dominiodueño de la información (porejemplowww.misitioconcookies.com)
� Subdominio: Indica el directoriointerno al dominio al que pertenecela cookie. Si se especifica, entoncesl a cookie tendrá valor solo dentrode él y sus directorios internos, sino se especifica, o tiene el valor“/”, la cookie es válida en todas laspáginas del dominio.
Usando cookies enPHP
El manejo de cookies desde PHP essumamente sencillo. El lenguaje proveeuna función poderosa y a la vez fácil deusar para enviar cookies al navegador delusuario y por otro lado provee un arreglosuperglobal para tener a la mano todos losvalores de las cookies que vienen en cadapágina procedentes del computador delusuario.
Guardar una cookie en elcliente.
Para enviar un valor al cliente a serguardado como cookie, existe la siguientefunción:
� Función setcookie
Descripción:
Solicita al navegador guardar unacookie en el equipo del cliente.
Sintaxis:
setcookie(<nombre>[, <valor>[,<expira>[, <subdom>[, <dominio>[,<seguro>[, <solo_HTTP>]]]]]])
Parámetros:
<nombre>: Nombre de la variable.
<valor>: Contenido que se deseaguardar. Si este parámetro esomitido, el navegador procederá aborrar la cookie que contenga elnombre indicado.
<expira>: Indica la fecha y hora de
expiración.
<subdom>: Subdominio donde esválida.
<dominio>: Dominio donde esválida.
<seguro>: Indica si solo su usa enmodo seguro (HTTPS)o no.
<solo_HTTP>: Indica si esinaccesible a lenguajes de script ono.
De los siete parámetros utilizablespara la función, solo el primero esobligatorio.
Ejemplos:
setcookie(“nombre”,$nombre_usuario);
setcookie(“fecha”, date());
setcookie(“sexo”);
Leer los valores de las cookies
En todas las páginas de cualquieraplicación de PHP se puede tener accesoal arreglo superglobal $_COOKIE, el cual
contiene los valores de todas las cookiesválidas para el usuario que solicitó lapágina, según el dominio, subdominio,fecha de caducidad, etc.
En general, el programador PHP debeponer atención a los atributos que leasigna a una cookie al momento deenviarla al navegador del cliente. Sinembargo, para usar su contenido, solodebe consultar el arreglo correspondiente.Si una cookie no es accesible en ciertosubdominio, o ha caducado, entonces PHPno la incluirá en el arreglo. Veamos unpequeño ejemplo:
Supongamos que en nuestra páginaprincipal tenemos algo como lo siguiente:
<?php
setcookie(”hora_de_entrada”, date());
?>
Al omitir el resto de los parámetrosestamos asumiendo que la cookie esválida para todo el dominio y su fecha decaducidad está limitada al tiempo en queel navegador del usuario permanezcaabierto.
En cada una de las páginas visitadas luegode ser ejecutado el comando anterior,podríamos recuperar el valor de lavariable hora_de_entrada mediante lautilización de $_COOKIE.
<?php
echo ”Usted entró a la página principal a las: “ .$_COOKIE[”hora_de_entrada”];
?>
Eliminar una cookiealmacenada en el cliente
Existen momentos en los que unaaplicación necesita eliminar una o máscookies guardadas en el computador delcliente. Por ejemplo, si una de las cookiesutilizadas guarda el nombre de un usuariosuscrito dentro de la aplicación, esdeseable que ese valor esté vigente lasiguiente vez que el usuario regrese dichositio, sin embargo, si el usuario presionaalgún enlace para “des suscribirse” alsitio, es conveniente borrar la cookiecorrespondiente para así dejar dereconocerlo.
Para borrar una cookie se utiliza la mismafunción PHP que utilizamos para crearla,solo que enviamos únicamente elparámetro correspondiente al nombre dela cookie pero omitimos el parámetro delvalor.
<?php
setcookie(”usuario”);
?>
Introducción En este capítulo te presentamos elconcepto de sesiones en la programaciónWeb, el cual constituye la base de uno delos aspectos que ha alcanzado mayordesarrollo en los últimos años como lo esel comercio electrónico. Al finalizar este capítulo tendrás toda lainformación necesaria para desarrollarsitios Web capaces de manejar sesionesde usuario. Temas desarrollados en este capítulo:
� Concepto y ejemplos de sesiones� Características del manejo de
sesiones en PHP� Funciones para el manejo de
sesiones� Metodologías para la
propagación del código de sesión
¿Que es unasesión?
Como ya sabemos, el trabajo de unservidor Web es despachar las páginasque le son solicitadas por los usuarios.Estas solicitudes pueden provenir demuchos usuarios distintos, o en algunoscasos, de un mismo usuario.
Desde el punto de vista del servidor,todas las solicitudes son atendidas como
si proviniesen de usuarios distintos, esdecir que el servidor http por si mismo notiene memoria de lo que un usuario hahecho, de cual página viene ni puedeidentificar de forma precisa elcomputador usado por éste.
Uno podría imaginar, que la dirección IPde cada usuario podría ser el punto departida para saber quien ha hecho cadarequerimiento y así poder reconocer acada uno de ellos. Sin embargo, debemosrecordar que en ciertas condiciones,varios usuarios pueden compartir lamisma dirección. Mas aún, un usuariopodría tener una dirección IP al momentode solicitar una página y otra distinta al
p a s a r a la siguiente si reinicia suconexión.
Una sesión es el tiempo durante el cual unservicio “conoce” al usuario servido y lepermite efectuar una o más operaciones.Normalmente una sesión comienza luegode que el usuario es identificado ytermina, bien porque éste así lo desea obien porque transcurre una cierta cantidadde tiempo de inactividad.
Las sesiones pueden utilizarse para cosas
sencillas como mostrarle al usuario sunombre en pantalla o para operacionesmás delicadas como pagos en línea.
Por lo general, durante el tiempo deexistencia de una sesión, resulta de muchautilidad guardar cierta información deestado, como por ejemplo identificación ynombre del usuario, número de tarjeta decrédito, ultima operación realizada ycosas por el estilo.
Sesiones en nuestravida cotidiana: Loscajeros automáticos
Para comprender con claridad el conceptode sesión, podemos recurrir a un ejemplobastante conocido, las transacciones enlos cajeros automáticos bancarios.
La finalidad de un cajero automático esofrecer a usuarios autorizados laposibilidad de realizar una o mástransacciones sin tener que desplazarse
hasta una agencia bancaria. Para ello debegarantizar la identidad del usuario,permitirle hacer sus transacciones ydetectar momento en que el mismo seretira para evitar que otro pueda hacermal uso de sus recursos.
Especulemos un poco acerca del modo enque ambos lados de la red, los cajeros yel servidor están programados.
Desde el punto de vista delcajero
Para poder atender a los clientes no esnecesario que cada cajero automáticotenga almacenada Ningún tipo deinformación de los usuarios. Basta conque tengan la capacidad de enviar a suservidor una serie de requerimientos deoperaciones sencillas y que este último leindique si puede realizarlas o no.
La primera de las operaciones que todocajero realiza es identificar al usuario.Para ello procede a leer un código deidentificación de una tarjeta y solicitaruna clave de acceso. Ambas cosas,acompañadas probablemente con laidentificación del cajero mismo sonenviadas al servidor quien deberá decidir
si el usuario es reconocido o no.
Si la identificación es válida, el cajerohabrá de recibir probablemente ciertainformación personal del cliente como sunombre y quizás el tipo de cuentas queposee, momento en el cual el aparatoprocederá a ofrecerle al usuario una seriede servicios como retiros, solicitudes desaldo, cambios de clave, etc.
Cada una de estas operaciones, desde elpunto de vista del cajero, no son otra cosaque pedir información al usuario, enviarel requerimiento al servidor y aguardarpor una respuesta.
Una última funcionalidad del cajero, nopor ello la menos importante, es detectarcuando el usuario ha concluido susoperaciones para así enviarle un mensajeal servidor de que ya no habrá de esperarmás requerimientos asociados con éste. Aeste respecto, muchos de esosdispositivos exigen identificación porcada transacción individual, para asípoder garantizar que el usuario no dejeolvidada su tarjeta dentro del equipo. Enestos casos, puede decirse que el fin de lasesión es automático.
Desde el punto de vista delservidor
El servidor de la red de cajeros deberáatender muchas operaciones simultáneasprocedentes de distintos usuarios ydistintos cajeros.
Podríamos pensar que un servidor –apartede completar las transacciones bancarias-tiene la habilidad para guardartemporalmente –digamos que en distintossacos- la información necesaria paraatender a cada uno de los usuarios que seconectan y eliminar un saco una vez quecesa una conexión.
De esta manera, podemos pensar que unaoperación de identificar al usuario no esmás que verificar sus credenciales y deser válidas, preparar un espacio temporaldonde guardar los datos necesarios.
Por cada operación adicional, el servidorsolo necesitará saber que cajero estáhaciendo la solicitud, para identificar el“saco” temporal donde están los datos delusuario y hacer las operacionesrequeridas.
Transcurrido cierto tiempo de inactividad,
o si el cajero correspondiente enviase unaorden de cierre de sesión, el servidorprocederá a eliminar el saco en cuestión.
Como podemos ver, el programa del ladodel servidor será mucho más sencillo sien cada saco guardamos –por ejemplo- elnúmero de cuenta de cada cliente, asícualquier operación de retiro podrárealizarse mediante una única función a lacual le podríamos pasar como parámetrola cuenta de la sesión que se estáatendiendo.
Diferencias respecto a unaaplicación Web
A diferencia del ejemplo de los cajerosautomáticos donde casi con totalseguridad el servidor puede saberexactamente cual de sus cajeros le hacecada solicitud, una aplicación Web nopuede identificar por si sola elcomputador que le hace cadarequerimiento, por lo que es necesariocrear un número único para cada sesiónde modo que el servidor pueda distinguirun requerimiento de otro.
Por otro lado, al realizar una aplicación
Web, podemos olvidarnos del problemade comunicación, ya que los protocolossubyacentes y el programa servidor HTTP(Apache o IIS) se encargarán de escucharlas solicitudes y llamar a una de nuestraspáginas. Todo lo que debemos cuidarentonces es que siempre nos llegue unnúmero apropiado de sesión para podersaber que valores usar.
Sesiones en PHP
La implementación de sesiones en PHP serealiza básicamente a través de archivosde texto guardados por el intérprete en uncierto directorio del servidor. El nombredel archivo de texto correspondiente acada sesión, no es otro que el códigoúnico de la sesión, e internamente, cadaarchivo contiene todos los valores detodas las variables de esa sesión enparticular. Todo esto lo realiza PHP sinnecesidad de nuestra intervención. Sinembargo, hay otras tareas que nos tocarealizar a nosotros y es allí dondedebemos centrar nuestra atención.
En la medida que cumplamos con ciertasnormas que garanticen que el código deuna sesión esté siempre disponible, PHPhabrá de resolver para nosotros elalmacenamiento de las variables de esasesión. De este modo, nosotros podremosdedicarnos simplemente guardar los datosnecesarios en posiciones del arreglo$_SESSION que necesitemos crear. Así,cada vez que queramos guardar o saber elnúmero de cuenta del usuario conectado,solo tendríamos que usar algo como$_SESSION[“cuenta”]. PHP seencargaría de guardar y recargar ese valoren todas nuestras páginas, siempre que elcódigo de la sesión esté disponible.
De esta manera, bastará con que cadapágina Web de nuestra aplicación“recuerde” el número de la sesión, parapoder retomar todos los valorespersonalizados. Este procedimiento dehacer que cada página conozca el númerode sesión que se esta usando se le conocecomo “propagación del identificador desesión”. Existen distintas formas de haceresta propagación:
� El código de sesión puede serguardado del lado del clienteusando lo que se conoce como una“cookie”.
� El código puede ser transmitido
de una página a otra manualmente,bien como parámetro a través delURL de cada página llamada ousando elementos HTMLescondidos –hidden- dentro detodos los formularios.
� Finalmente, existe la posibilidadde delegar en PHP la propagaciónde las sesiones utilizando un settingespecial para tal fin.
Funciones PHPpara el manejo de
sesiones
Existen muchas funciones en PHP paramanejar sesiones, sin embargo, utilizandoun reducido número de ellas es posiblehacer todo lo necesario para proporcionara un sitio Web un adecuado manejo desesiones.
Todas las funciones para el manejo desesiones comienzan con el prefijo
“session_”. Veamos las más importantes:
Inicio de sesión: session_start
La función session_start() crea una nuevasesión o recupera una existente basado enel identificador de sesión que se esteutilizando. En otras palabras, si la páginaen la que se está ejecutando esta funciónrecibe vía GET, POST o vía cookies unavariable llamada PHPSESSID (si es queel nombre no ha sido cambiadopreviamente usando la funciónsession_name), entonces la página habrá
de recuperar la sesión cuyo código vengadado por el contenido de esa variable, delo contrario, habrá de crearse una nuevasesión. Veamos su sintaxis:
� Función session_start
Descripción:
Crea una nueva sesión o recuperauna existente.
Sintaxis:
session_start()
Ejemplo:
session_start();
La llamada a esta función debe colocarseal principio de toda página Web queutilice sesiones, antes de que se produzcacualquier escritura.
Borrando una sesión:session_destroy
Esta función destruye todas las variablesguardadas dentro de una sesión.
La función session_destroy debe serusada cuando se tenga la certeza de que elusuario no debe ser reconocido lasiguiente vez que entre en la página, esdecir que se le deberá requerirnuevamente su identificación.
La sintaxis de la función es como sigue:
� Función session_destroy
Descripción:
Destruye una sesión.
Sintaxis:
session_destroy()
Ejemplo:
session_destroy();
Nombre de la variable desesión: session_name
La función session_name tiene dos usosdistintos. Cuando es usada sin parámetrosretorna el nombre de la variable de sesiónque se está utilizando. De no haber sidocambiada, ese nombre será PHPSESSID.Sin embargo, cuando se desea utilizar unnombre distinto para las variables desesión, entonces se puede pasar el nuevonombre como parámetro a esta función.
La sintaxis es muy sencilla:
� Función session_name
Descripción:
Retorna el nombre de la variable desesión utilizada o la cambia si seespecifica como parámetro.
Sintaxis:
session_name([<nombre>])
Ejemplos:
// Retorna PHPSESSID
echo session_name();
// Cambia el nombre de las sesionespor ID
session_name(“ID”);
Identificador de sesión:session_id
Esta función retorna el código único de lasesión en curso, es decir, el contenido dela variable PHPSESSID.
Al igual que en el caso anterior, si seañade un parámetro a la función, seestaría asignando un valor a tal variable,es decir, se estaría asignando un códigode sesión. Es importante que si se va atrabajar con códigos de sesión generadospor el programador, la llamada a estafunción debe colocarse antes de lallamada a session_start.
Por otro lado debe tomarse en cuenta quesi no hay ninguna sesión en curso, estafunción retornará una cadena decaracteres vacía.
Veamos la sintaxis:
� Función session_id
Descripción:
Retorna el valor de la variable desesión utilizada o cambia el mismosi se especifica como parámetro.
Sintaxis:
session_id([<valor>])
Ejemplos:
// Retorna el código de sesión
echo session_id();
// Cambia el código de sesión por elvalor dado.
session_id(“402318”);
Propagando elcódigo de sesión
Anteriormente mencionamos los tresmétodos principales para la propagacióndel código de sesión. Veamos másdetalladamente cada una de lasalternativas.
Propagación a través decookies
La propagación del código de sesionesusando cookies se establece en el archivode configuración php.ini, modificando elvalor de la variable session.use_cookie.
De estar activadas las cookies para elmanejo de sesiones, la propia funciónsession_start se encargará de buscardentro de las cookies existentes el códigode la sesión actual sin que se requieramayor intervención por parte delprogramador.
La parte menos agradable de utilizar lapropagación de sesiones a través decookies es que el usuario podría
desactivar el uso de éstas en elnavegador, en cuyo caso todo el manejode sesiones de nuestro sitio Web dejaríade funcionar.
Propagación manual:
Este método de propagación es el máslaborioso pero el más seguro, ya que notodos los usuarios permiten el uso decookies en sus navegadores.
El método consiste en cuidar que todas las
llamadas de una página a otra envíen elvalor del código de sesión.
Veamos todas las posibilidades:
� Redireccionamiento usando lafunción PHP header: Todas lasllamadas a otras páginas internas denuestro sitio hechas a través de lafunc i ó n header(), deberán seralteradas de modo que entre losparámetros se incluya el nombre ycódigo de sesión. Veamos unejemplo:
Una llamada que tenga la forma:
<?php
header(”Location: http://www.misitio.com”
?>
Deberá ser cambiada por algocomo:
<?php
$url = ”http://www.misitio.com”;
header(”Location: $url?PHPSESSID=”
?>
O mejor aún:
<?php
$url = ”http://www.misitio.com?”;
$url .= sesión_name() . ”=” . session_id()
header(”Location: $url”);
?>
� Redireccionamiento medianteformularios: Todos los formulariosque llamen a otra página a travésdel atributo action de la etiquetaform, deben incluir un elementooculto cuyo nombre seaPHPSESSID (de no haber sidocambiado) y cuyo valor sea elcódigo de la sesión. Veamos de queestamos hablando:
Una llamada que tenga la forma:
<html>
<head>
</head>
<body>
<form action=’Pagina2.php’>
Producto:
<input type=’text’ name=’producto’
<br />
Precio:
<input type=’text’ name=’precio’ />
<br />
<input type=’submit’ value=’Enviar
</form>
</body>
</html>
Deberá ser cambiada por algocomo:
<html>
<head>
</head>
<body>
<form action=’Pagina2.php’>
Producto:
<input type=’text’ name=’producto’
<br />
Precio:
<input type=’text’ name=’precio’ />
<br />
<input type=’submit’ value=’Enviar
<input type=’hidden’ name=’PHPSESSIDsession_id(); ?>’ />
</form>
</body>
</html>
� Redireccionamiento usandoJavaScript: Todoredireccionamiento escrito enJavaScript a través de la funciónopen() o por asignando unadirección a la propiedad location,debe ser cambiado de forma que segarantice que en la dirección URLse incluya el valor de la sesióncorriente. Por ejemplo:
Si existe una función JavaScript quecontenga algo como:
<html>
<head>
<script language=’javascript’>
function abre_popup(){
open(‘pagina2.php’);
}
</script>
</head>
<body>
<input type=’button’ value=’popup’ onclick
</body>
</html>
Debe ser cambiado de la siguientemanera:
<html>
<head>
<script language=’javascript’>
function abre_popup(){
open(‘pagina2.php?PHPSESSID=<?php echo session_id(); ?>
}
</script>
</head>
<body>
<input type=’button’ value=’popup’ onclick
</body>
</html>
También cada vez que seencuentre algo como lo siguiente:
<html>
<head>
<script language=’javascript’>
function ir_a_2(){
location.href = ‘pagina2.php’;
}
</script>
</head>
<body>
<input type=’button’ value=’Ir a página 2
</body>
</html>
Se debe alterar de la siguientemanera:
<html>
<head>
<script language=’javascript’>
function ir_a_2(){
location.href = ‘pagina2.phpsession_id(); ?>’;
}
</script>
</head>
<body>
<input type=’button’ value=’Ir a página 2
</body>
</html>
Propagación automática:
Para hacer todo el proceso depropagación más sencillo, PHP puedeencargarse de transformar por nosotrostodos los enlaces internos de nuestrositio para que incluyan el session_id.Esto se logra haciendo que la directivasession.use_trans_sid en nuestrophp.ini esté activada (valor igual a"1").
Tal y como dijéramos en las primeraspáginas de este material, el aprendizaje deun lenguaje de programación es similar aldominio de cualquier idioma. No basta
con entender los conceptos. Para obtenerel dominio completo de todo lenguaje hayque practicarlo, y es ese un punto queforzosamente corresponde en exclusiva allector.
Esperamos haber cumplido lo queprometimos al comienzo de este libro, queno es otra cosa que ofrecer en formasencilla al lector poco especializado uncúmulo de conceptos, ejemplos einformación técnica que le permita dar susprimeros pasos en el mundo de laprogramación Web usando el lenguajePHP.
Esperamos igualmente haber transmitido,aunque sea un poco, el gusto por el mundode la programación Web. De haberlogrado esto último, estamos seguros queparte del camino hacia el éxito en esteoficio está garantizado.