document3

621

Upload: cwlmaster

Post on 06-Aug-2015

46 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Document3
Page 2: Document3

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,

Page 3: Document3

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.

Page 4: Document3

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

Page 5: Document3

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

Page 6: Document3

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

Page 7: Document3

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

Page 8: Document3

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

Page 9: Document3

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

Page 10: Document3

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

Page 11: Document3

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

Page 12: Document3

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

Page 13: Document3
Page 14: Document3

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.

Page 15: Document3

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.

Page 16: Document3

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.

Page 17: Document3

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.

Page 18: Document3

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.

Page 19: Document3

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

Page 20: Document3

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

Page 21: Document3

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

Page 22: Document3

lo que ofrece el lenguaje y comoutilizarlo. Los ejemplos están colocadoscuidadosamente al servicio de eseobjetivo.

Page 23: Document3

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

Page 24: Document3

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.

Page 25: Document3
Page 26: Document3

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.

Page 27: Document3

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?

Page 28: Document3

� ¿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?

Page 29: Document3

¿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

Page 30: Document3

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

Page 31: Document3

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

Page 32: Document3

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.

Page 33: Document3

¿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.

Page 34: Document3

� 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

Page 35: Document3

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

Page 36: Document3

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.

Page 37: Document3

¿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.

Page 38: Document3

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.

Page 39: Document3

¿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

Page 40: Document3

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é,

Page 41: Document3

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

Page 42: Document3

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.

Page 43: Document3

¿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

Page 44: Document3

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.

Page 45: Document3

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.

Page 46: Document3

Si deseas programar en PHP, terecomiendo ampliamente que usesApache.

Page 47: Document3

¿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

Page 48: Document3

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

Page 49: Document3

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.

Page 50: Document3
Page 51: Document3

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.

Page 52: Document3

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

Page 53: Document3

¿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.

Page 54: Document3

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

Page 55: Document3

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.

Page 56: Document3

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

Page 57: Document3

<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.

Page 58: Document3

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

Page 59: Document3

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>

Page 60: Document3

<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

Page 61: Document3

aquello que deba ser mostrado.

Page 62: Document3

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.

Page 63: Document3

<html>

<head>

<title>Primer ejemplo</title>

</head>

<body>

Esta es mi primera página enHTML

</body>

</html>

Page 64: Document3
Page 65: Document3

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

Page 66: Document3

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>

Page 67: Document3

<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>

Page 68: Document3
Page 69: Document3

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.

Page 70: Document3

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

Page 71: Document3

</p>

</body>

</html>

Page 72: Document3
Page 73: Document3

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>

Page 74: Document3

<body>

Texto inicial <br /><br /><br /><br/>continuación

<hr />

</body>

</html>

Page 75: Document3
Page 76: Document3

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.

Page 77: Document3

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>

Page 78: Document3

<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>

Page 79: Document3
Page 80: Document3
Page 81: Document3

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

Page 82: Document3

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

Page 83: Document3

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

Page 84: Document3

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>

Page 85: Document3

<img src=’mi_imagen.jpg’ border=’1’

</body>

</html>

Page 86: Document3
Page 87: Document3

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.

Page 88: Document3

<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>

Page 89: Document3
Page 90: Document3

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.

Page 91: Document3

� 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>

Page 92: Document3

<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

Page 93: Document3

</font>

</body>

</html>

Page 94: Document3
Page 95: Document3
Page 96: Document3

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

Page 97: Document3

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.

Page 98: Document3

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>

Page 99: Document3

<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>

Page 100: Document3

</tr>

</table>

</body>

</html>

Page 101: Document3

Existen un par de atributos que pueden

Page 102: Document3

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>

Page 103: Document3

<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>

Page 104: Document3

</body>

</html>

Page 105: Document3
Page 106: Document3

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.

Page 107: Document3

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>

Page 108: Document3

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

Page 109: Document3

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

Page 110: Document3

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

Page 111: Document3

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

Page 112: Document3

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.

Page 113: Document3

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>

Page 114: Document3

<body>

Lo lamento.<br />

El navegador que estas usando no soporta marcos.

</body>

</noframes>

</frameset>

</html>

Page 115: Document3

En el ejemplo anterior estamos indicando

Page 116: Document3

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

Page 117: Document3

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>

Page 118: Document3

<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>

Page 119: Document3

Lo lamento.<br />

El navegador que estas usando no soporta marcos.

</body>

</noframes>

</frameset>

</html>

Page 120: Document3

En el anterior ejemplo hemos puesto uno

Page 121: Document3

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.

Page 122: Document3

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

Page 123: Document3

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.

Page 124: Document3
Page 125: Document3

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

Page 126: Document3

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>:

Page 127: Document3

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

Page 128: Document3

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

Page 129: Document3

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.

Page 130: Document3

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

Page 131: Document3

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

Page 132: Document3

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>

Page 133: Document3

<option value=’3’>Electricista</option>

<option value=’4’>Reportero</option>

</select>

</body>

</html>

Page 134: Document3
Page 135: Document3

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:

Page 136: Document3

� 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>

Page 137: Document3

</head>

<body>

Descripción:

<textarea rows=’5’ cols=’40’>

Este es un ejemplo de texto dentro de un textarea

</textarea>

</body>

</html>

Page 138: Document3
Page 139: Document3

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

Page 140: Document3

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

Page 141: Document3

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:

Page 142: Document3

� 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:

Page 143: Document3

<input type=’text’ name=’nombre’ />

<br />

Apellido:

<input type=’text’ name=’apellido’ />

</body>

</html>

Page 144: Document3
Page 145: Document3

<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>

Page 146: Document3

</head>

<body>

Usuario:

<input type=’text’ name=’usuario’ />

<br />

Clave:

<input type=’password’ name=’clave’

</body>

</html>

Page 147: Document3
Page 148: Document3

<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.

Page 149: Document3

<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,

Page 150: Document3

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>

Page 151: Document3

� 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>

Page 152: Document3

</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>

Page 153: Document3
Page 154: Document3

<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

Page 155: Document3

<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>

Page 156: Document3
Page 157: Document3

<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

Page 158: Document3

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>

Page 159: Document3

</html>

Page 160: Document3
Page 161: Document3

<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.

Page 162: Document3

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.

Page 163: Document3
Page 164: Document3

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:

Page 165: Document3

� 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

Page 166: Document3

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

Page 167: Document3

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.

Page 168: Document3

Hasta aquí los consejos. ¡Hablemos PHP!

Page 169: Document3

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

Page 170: Document3

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 ?>.

Page 171: Document3

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.

Page 172: Document3

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

Page 173: Document3

$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:

Page 174: Document3

<?php

$i = 5;

$j = 8;

$k = 9;

?>

Page 175: Document3

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.

Page 176: Document3

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

Page 177: Document3

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

Page 178: Document3

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.

Page 179: Document3

� 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

Page 180: Document3

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

Page 181: Document3

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”;

?>

Page 182: Document3
Page 183: Document3

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.

Page 184: Document3

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

Page 185: Document3

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)

Page 186: Document3

$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

Page 187: Document3

manera hemos accedido no al texto“oferta” (por ejemplo) sino al valor de lavariable $oferta.

Page 188: Document3

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

Page 189: Document3

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.

Page 190: Document3

Ejemplo:

<?php

define(”PI”, 3.14159265);

// La constante PI tendrá un valor de 3.14159265

$radio = 25;

$area = PI * $radio * $radio;

?>

Page 191: Document3

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.

Page 192: Document3

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.

Page 193: Document3

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);

Page 194: Document3

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.

Page 195: Document3

<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

Page 196: Document3

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

Page 197: Document3

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>;

ó

Page 198: Document3

<variable> =<variable> +<variable>;

… y asísucesivamente…

O por el contrario podríamos decirsimplemente que una asignación tiene lasiguiente forma:

<variable> = <expresión>;

Page 199: Document3

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

Page 200: Document3

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

Page 201: Document3

Sintaxis:

<variable> = <expresión>;

Ejemplos:

$i = 5;

$nombre = “Andrea”;

$total = 5 + 4;

Operador de concatenación

Permite unir dos cadenas de caracteres en

Page 202: Document3

una sola.

� Operador de concatenación

Sintaxis:

<variable> = <expresión> .<expresión>;

Ejemplos:

$nombre = “Felipe” . “ Meza”;

$letras = “A” . “B” . “C”;

$cadena = $nombre . $letras;

Page 203: Document3

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:

Page 204: Document3

$total = 20 + 1;

$total2 = $total1 + 5;

� Resta

Sintaxis:

<variable> = <expresión> -<expresión>;

Ejemplos:

$precio = $precio – 5;

$largo = $total - $cortado;

Page 205: Document3

� Multiplicación

Sintaxis:

<variable> = <expresión> *<expresión>;

Ejemplo:

$distancia = $distancia * 3;

� División

Page 206: Document3

Sintaxis:

<variable> = <expresión> /<expresión>;

Ejemplo:

$porcion = $total / 4;

� Resto de la división

Sintaxis:

<variable> = <expresión> %

Page 207: Document3

<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

Page 208: Document3

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

Page 209: Document3

$total = $total + 1;

� Decremento

Sintaxis:

<variable>--

Ejemplos:

$total--;

// El ejemplo anterior esequivalente a escribir

$total = $total - 1;

Page 210: Document3

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

Page 211: Document3

?>

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

Page 212: Document3

?>

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:

Page 213: Document3

<?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,

Page 214: Document3

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

Page 215: Document3

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

Page 216: Document3

a tomar el valor

// lógico contrario al que tome$dia

� “Y” lógico

Sintaxis:

<variable> = <expresión> &&<expresión>;

Ejemplo:

$comprendo = true;

Page 217: Document3

$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:

Page 218: Document3

<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.

Page 219: Document3

� “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.

Page 220: Document3

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>;

Page 221: Document3

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>;

Page 222: Document3

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

Page 223: Document3

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;

Page 224: Document3

// 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:

Page 225: Document3

$total += 20;

// Equivale a $total = $total + 20;

� Asignación con resta

Sintaxis:

<variable> -= <expresión>;

Ejemplo:

$precio -= $descuento;

// Equivale a $precio = $precio -$descuento;

Page 226: Document3

� Asignación con multiplicación

Sintaxis:

<variable> *= <expresión>;

Ejemplo:

$riesgo *= 2;

// Equivale a $riesgo = $riesgo *2;

Page 227: Document3

� Asignación con división

Sintaxis:

<variable> /= <expresión>;

Ejemplo:

$ganancia /= $personas;

// Equivale a $ganancia =$ganancia / $personas;

� Asignación con resto

Page 228: Document3

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

Page 229: Document3

Sintaxis:

<variable> .= <expresión>;

Ejemplo:

$alfabeto = “abcd”;

$alfabeto .= “efghi“;

// $alfabeto contendrá la cadena"abcdefghi"

� Asignación con "Y" lógico

Sintaxis:

Page 230: Document3

<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;

Page 231: Document3

� 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;

Page 232: Document3

// 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:

Page 233: Document3

� 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

Page 234: Document3

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.

Page 235: Document3

� Es idéntico a (mismo valor ymismo tipo)

Sintaxis:

<expresión> === <expresión>

Ejemplo:

$numero_1 = 20;

$numero_3 = "20";

$son_iguales = $numero_1 ==

Page 236: Document3

$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>

Page 237: Document3

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;

Page 238: Document3

$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

Page 239: Document3

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

Page 240: Document3

ambas variables tienen

/ / el mismo valor, son de tiposdistintos.

� Menor que

Sintaxis:

<expresión> < <expresión>

Ejemplo:

$numero_1 = 20;

$numero_2 = 25;

Page 241: Document3

$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>

Page 242: Document3

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.

Page 243: Document3

� 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

Page 244: Document3

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.

Page 245: Document3

� 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

Page 246: Document3

$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

Page 247: Document3

// primera variable es igual al dela segunda.

� Es distinto a

Sintaxis:

<expresión> <> <expresión>

Nota:

Este operador es equivalente aloperador !=.

Page 248: Document3
Page 249: Document3

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

Page 250: Document3

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

Page 251: Document3

estructuras de control.� Estructuras condicionales en

PHP.� Estructuras iterativas básicas.� Inclusión de archivos.

Page 252: Document3

¿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

Page 253: Document3

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

Page 254: Document3

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.

Page 255: Document3
Page 256: Document3

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.

Page 257: Document3

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

Page 258: Document3

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)

Page 259: Document3

$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á

Page 260: Document3

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.

Page 261: Document3

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;

Page 262: Document3

// Condicionando un bloque

if ($a > $b){

$maximo = $a;

$max_nombre = "a";

} else {

$maximo = $b;

$max_nombre = "b";

}

Veamos un ejemplo sencillo:

Page 263: Document3

<?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”

?>

Page 264: Document3

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 –

Page 265: Document3

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.

Page 266: Document3

<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.

Page 267: Document3

<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.

Page 268: Document3

Si la condición <cond> no secumple, entonces se ejecutan 1, 3 y4.

<cmd1>;

if (<cond>)

<cmd2>;

else

<cmd3>;

<cmd4>;

Page 269: Document3

� 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>;

Page 270: Document3

<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.

Page 271: Document3

<cmd1>;

if (<cond1>)

if (<cond2>){

<cmd2>;

<cmd3>;

<cmd4>;

}

<cmd5>;

En el ejemplo anterior tenemos un

Page 272: Document3

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.

Page 273: Document3

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:

Page 274: Document3

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:

Page 275: Document3

� 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:

Page 276: Document3

<?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){

Page 277: Document3

$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

Page 278: Document3

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.

Page 279: Document3

Sintaxis:

switch(<expresión>){

case <valor1>:

<comandos>;

break;

case <valor2>:

<comandos>;

break;

default:

<comandos>;

Page 280: Document3

}

Ejemplo:

$valor = 5;

switch($valor){

case 0:

$resultado = "cero";

break;

case 1:

$resultado = "uno";

break;

case 2:

Page 281: Document3

$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.

Page 282: Document3

<?php

$nota = 3; // Calificación del alumno

switch ($nota){

case 1:

$mensaje = “Muy deficiente”;

$aprobado = false;

break;

case 2:

$mensaje = “Deficiente”;

$aprobado = false;

break;

Page 283: Document3

case 3:

$mensaje = “Buen trabajo”;

$aprobado = true;

break;

case 4:

$mensaje = “Excelente”;

$aprobado = true;

break;

}

?>

En general, el comando switch evalúa la

Page 284: Document3

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".

Page 285: Document3

<?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”;

Page 286: Document3

$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.

Page 287: Document3

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:

Page 288: Document3

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.

Page 289: Document3

� 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.

Page 290: Document3

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;

Page 291: Document3

// 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

Page 292: Document3

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

Page 293: Document3

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.

Page 294: Document3

<?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

Page 295: Document3

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

Page 296: Document3

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.

Page 297: Document3

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>;

Page 298: Document3

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;

Page 299: Document3

$producto *= $i;

}

<?php

$num = 0;

$pares = 0;

$impares = 0;

while ($num < 100){

if ($num % 2 == 0)

$pares++;

else

Page 300: Document3

$impares++;

$num++;

}

?>

El ejemplo anterior calcula la cantidad denúmeros pares e impares que existen entre0 y 99.

El comando do while:

Page 301: Document3

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.

Page 302: Document3

Sintaxis:

do

<comando o bloque>;

while(<condición>);

Ejemplos:

// Condicionando una solo línea

$total = 0;

do

$total++;

while ($total < 20);

Page 303: Document3

// Condicionando un bloque

$n = 0;

$res = 1;

do{

$res += $res * $n;

$n++;

} while ($n < 10);

<?php

$reintentos = 0;

do{

Page 304: Document3

// 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

Page 305: Document3

Existen otros tipos de estructurasiterativas más especializadas las cualesfacilitan el trabajo con arreglos.Hablaremos de ellas mas adelante.

Page 306: Document3

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

Page 307: Document3

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”);

Page 308: Document3

?>

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.

Page 309: Document3

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.

Page 310: Document3

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

Page 311: Document3

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

Page 312: Document3

como sigue:

<?php

include_once(”Funciones1.php”);

require_once(”Funciones2.php”);

?>

Page 313: Document3
Page 314: Document3

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

Page 315: Document3

� Uso y sintaxis de una función� Alcance de las variables y

parámetros de una función� Tipos de pases de parámetros

Page 316: Document3

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.

Page 317: Document3

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.

Page 318: Document3

¿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

Page 319: Document3

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

Page 320: Document3

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

Page 321: Document3

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.

Page 322: Document3
Page 323: Document3

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

Page 324: Document3

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.

Page 325: Document3

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)

Page 326: Document3

$res = false;

return $res;

}

?>

Page 327: Document3

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:

Page 328: Document3

<?php

function en_rango($val1, $min, $max){

$res = true;

if ($val < $min)

$res = false;

if ($val > $max)

$res = false;

return $res;

}

Page 329: Document3

$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”;

?>

Page 330: Document3

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

Page 331: Document3

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.

Page 332: Document3

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

Page 333: Document3

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:

Page 334: Document3

<?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”);

?>

Page 335: Document3
Page 336: Document3

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á

Page 337: Document3

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

Page 338: Document3

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){

Page 339: Document3

$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

Page 340: Document3

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

Page 341: Document3

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”.

Page 342: Document3

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

Page 343: Document3

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”);

?>

Page 344: Document3

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.

Page 345: Document3
Page 346: Document3

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

Page 347: Document3

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.

Page 348: Document3

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

Page 349: Document3

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

Page 350: Document3

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;

Page 351: Document3

$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.

Page 352: Document3

<?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

Page 353: Document3

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

Page 354: Document3

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;

Page 355: Document3

$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);

Page 356: Document3

// 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

Page 357: Document3

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);

?>

Page 358: Document3

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

Page 359: Document3

?>

Page 360: Document3

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

Page 361: Document3

$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);

?>

Page 362: Document3

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:

Page 363: Document3

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:

Page 364: Document3

$precios = array(25, 33, 57);

$personas = array(“México”,“Colombia”, “Chile”);

$edades = array(“Juan” => 24,“Andrea” => 31);

Page 365: Document3

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.

Page 366: Document3

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

Page 367: Document3

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;

Page 368: Document3

$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.

Page 369: Document3

<?php

$suma = 0;

$promedio = 0;

$i = 0;

while ($i++ < count($notas))

$suma += $notas[$i];

if (count($notas))

$promedio = $suma / count($notas);

?>

Page 370: Document3

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

Page 371: Document3

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);

?>

Page 372: Document3

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.

Page 373: Document3

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

Page 374: Document3

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>)

Page 375: Document3

<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 = “”;

Page 376: Document3

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.

Page 377: Document3

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.

Page 378: Document3

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.

Page 379: Document3

Sintaxis:

each(<arreglo>)

� Función list

Descripción

Expone una serie de variablespara ser asignadas de una sola vez apartir de un arreglo.

Sintaxis:

Page 380: Document3

list(<var1>, <var2>, …) =array(<val1>, <val2>, …);

� Función reset

Descripción

Prepara un arreglo para serrecorrido desde el primer elemento.

Sintaxis:

reset(<arreglo>);

Page 381: Document3

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;

Page 382: Document3

$notas[] = 3.8;

$suma = 0;

$promedio = 0;

reset($notas);

while (list($indice, $valor) = each($notas

$suma += $valor;

if (count($notas))

$promedio = $suma / count($notas);

?>

Page 383: Document3

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

Page 384: Document3

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.

Page 385: Document3

� 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()

Page 386: Document3

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

Page 387: Document3

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

Page 388: Document3

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.

Page 389: Document3

Sintaxis:

$elemento = current(<arreglo>);

Volvamos al ejemplo anterior yveamos como podemos escribirlousando next() y current().

<?php

$notas[] = 7.8;

$notas[] = 5.0;

Page 390: Document3

$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))

Page 391: Document3

$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

Page 392: Document3

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

Page 393: Document3

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;

Page 394: Document3

if (count($notas)){

reset($notas);

do{

$suma += current($notas);

} while (next($notas));

$promedio = $suma / count($notas);

}

?>

Page 395: Document3
Page 396: Document3

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:

Page 397: Document3

� 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.

Page 398: Document3

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”.

Page 399: Document3

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á

Page 400: Document3

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.

Page 401: Document3

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:

Page 402: Document3

� Operador de asignación

Descripción

Usado para asignar un valor auna variable.

Sintaxis:

<variable> = <expresión>;

Ejemplo:

$nombre = “Andrea”;

Page 403: Document3

� Operador de concatenación

Descripción

Usado para pegar un valor acontinuación de otro.

Sintaxis:

<variable> = <texto> . <texto>;

Ejemplo:

$nombre = “Andrea” . “ “ .“Martinez”;

Page 404: Document3

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

Page 405: Document3

?>

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:

Page 406: Document3

Asigna a una variable el resultadode asignar el valor de ella mismaconcatenado con otro valor.

Sintaxis:

<variable> .= <texto>;

Ejemplo:

$nombre = “Andrea”;

$nombre .= “ “;

$nombre .= “Martinez”;

Page 407: Document3

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

?>

Page 408: Document3

En pocas palabras, el operador descritoanteriormente “acumula” información alfinal de la variable sobre la que se estáasignando.

Page 409: Document3

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:

Page 410: Document3

� Operador de comparación deigualdad

Descripción:

Compara dos valores e indica si soniguales

Sintaxis:

<texto> == <texto>;

Ejemplos:

$nombre1 = “Andrea”;

Page 411: Document3

$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”;

Page 412: Document3

� Operador de comparación dedesigualdad

Descripción:

Compara dos valores e indica si sondiferentes

Sintaxis:

<texto> != <texto>;

Ejemplo:

$nombre1 = “Andrea”;

Page 413: Document3

$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

Page 414: Document3

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

Page 415: Document3

Descripción:

Compara dos valores e indica si soniguales y del mismo tipo

Sintaxis:

<texto> === <texto>;

Ejemplo:

$valor1 = “5”;

$valor2 = 5;

Page 416: Document3

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

Page 417: Document3

Sintaxis:

<texto> !== <texto>;

Ejemplo:

$valor1 = “5”;

$valor2 = 5;

if ($valor1 !== $valor2)

echo “Distinto contenido o tiposdistintos”;

else

Page 418: Document3

echo “igual contenido e igualtipo”;

Page 419: Document3

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:

Page 420: Document3

� 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.

Page 421: Document3

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

Page 422: Document3

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,

Page 423: Document3

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);

Page 424: Document3

$s = substr($hora, 6);

� Función strpos

Descripción:

Retorna la posición de un textodentro de otro texto.

Sintaxis:

strpos(<texto>, <subtexto>[,<comienzo>])

Page 425: Document3

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.

Page 426: Document3

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)

Page 427: Document3

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.

Page 428: Document3

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

Page 429: Document3

� Función strtolower

Descripción:

Retorna un texto donde todos loscaracteres alfabéticos han sidoconvertidos a minúsculas.

Sintaxis:

strtolower(<texto>)

Retorna:

Page 430: Document3

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:

Page 431: Document3

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.

Page 432: Document3

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.

Page 433: Document3

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

Page 434: Document3

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”

Page 435: Document3
Page 436: Document3

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

Page 437: Document3

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

Page 438: Document3

$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

Page 439: Document3

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

Page 440: Document3

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

Page 441: Document3

indicado anteriormente funcionasolamente cuando se utilizan comillasdobles.

Page 442: Document3

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

Page 443: Document3

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

Page 444: Document3

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

Page 445: Document3

¿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.

Page 446: Document3

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

Page 447: Document3

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

Page 448: Document3

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,

Page 449: Document3

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.

Page 450: Document3
Page 451: Document3

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

Page 452: Document3

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

Page 453: Document3

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.

Page 454: Document3

� 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

Page 455: Document3

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

Page 456: Document3

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.

Page 457: Document3

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.

Page 458: Document3

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

Page 459: Document3

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.

Page 460: Document3

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

Page 461: Document3

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.

Page 462: Document3

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.

Page 463: Document3

� 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:

Page 464: Document3

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

Page 465: Document3

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:

Page 466: Document3

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:

Page 467: Document3

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.

Page 468: Document3

� <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

Page 469: Document3

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.

Page 470: Document3

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>;

Page 471: Document3

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.

Page 472: Document3

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

Page 473: Document3

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.

Page 474: Document3

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>;

Page 475: Document3

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:

Page 476: Document3

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

Page 477: Document3

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

Page 478: Document3

<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

Page 479: Document3

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:

Page 480: Document3

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.

Page 481: Document3

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.

Page 482: Document3

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:

Page 483: Document3

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.

Page 484: Document3

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

Page 485: Document3

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,

Page 486: Document3

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

Page 487: Document3

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.

Page 488: Document3

De esta tabla virtual combinada, hemossolicitado extraer los campos nombre yapellido de la tabla alumnos y el camporesultado de la tabla notas.

Page 489: Document3

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

Page 490: Document3

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

Page 491: Document3

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.

Page 492: Document3

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

Page 493: Document3

adicionales, sin embargo, lasmencionadas anteriormente constituyenmás del 95% del trabajo a realizar en lamayoría de los proyectos.

Page 494: Document3

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.

Page 495: Document3

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

Page 496: Document3

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

Page 497: Document3

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

Page 498: Document3

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

Page 499: Document3

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

Page 500: Document3

“:”.

<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:

Page 501: Document3

$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

Page 502: Document3

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.

Page 503: Document3

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.

Page 504: Document3

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

Page 505: Document3

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:

Page 506: Document3

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:

Page 507: Document3

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:

Page 508: Document3

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

Page 509: Document3

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

Page 510: Document3

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

Page 511: Document3

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);

}

Page 512: Document3

}

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.

Page 513: Document3

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.

Page 514: Document3

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:

Page 515: Document3

� 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>)

Page 516: Document3

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.

Page 517: Document3

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);

Page 518: Document3

$i++)

echo $i . “=“ . $fila[$i] .“<br>”;

$fila = mysql_fetch_row($res);

}

}

}

� Función mysql_fetch_assoc

Descripción:

Retorna en forma de arreglo

Page 519: Document3

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:

Page 520: Document3

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.

Page 521: Document3

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>”;

Page 522: Document3

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.

Page 523: Document3
Page 524: Document3

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

Page 525: Document3

habrás de aprender en el resto del libro. Temas desarrollados en este capítulo:

� Variables globales� Variables súper globales

Page 526: Document3

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

Page 527: Document3

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.

Page 528: Document3

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

Page 529: Document3

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.

Page 530: Document3

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.

Page 531: Document3

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.

Page 532: Document3

� $_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”]:

Page 533: Document3

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.

Page 534: Document3

$_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

Page 535: Document3

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

Page 536: Document3

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

Page 537: Document3

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:

Page 538: Document3

<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>

Page 539: Document3

<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

Page 540: Document3

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

Page 541: Document3

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 -

Page 542: Document3

$_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.

Page 543: Document3

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

Page 544: Document3

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

Page 545: Document3

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.

Page 546: Document3
Page 547: Document3

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

Page 548: Document3

� Operaciones básicas con cookies

Page 549: Document3

¿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.

Page 550: Document3

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

Page 551: Document3

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

Page 552: Document3

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

Page 553: Document3

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.

Page 554: Document3

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,

Page 555: Document3

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.

Page 556: Document3
Page 557: Document3

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.

Page 558: Document3

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.

Page 559: Document3

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

Page 560: Document3

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.

Page 561: Document3

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

Page 562: Document3

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:

Page 563: Document3

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.

Page 564: Document3

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”];

?>

Page 565: Document3

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.

Page 566: Document3

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”);

?>

Page 567: Document3
Page 568: Document3

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

Page 569: Document3

sesiones en PHP� Funciones para el manejo de

sesiones� Metodologías para la

propagación del código de sesión

Page 570: Document3

¿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

Page 571: Document3

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

Page 572: Document3

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

Page 573: Document3

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.

Page 574: Document3

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

Page 575: Document3

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

Page 576: Document3

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

Page 577: Document3

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.

Page 578: Document3

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.

Page 579: Document3

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.

Page 580: Document3

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,

Page 581: Document3

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.

Page 582: Document3

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

Page 583: Document3

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.

Page 584: Document3

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.

Page 585: Document3

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.

Page 586: Document3

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

Page 587: Document3

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.

Page 588: Document3

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

Page 589: Document3

“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á

Page 590: Document3

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()

Page 591: Document3

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

Page 592: Document3

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:

Page 593: Document3

� Función session_destroy

Descripción:

Destruye una sesión.

Sintaxis:

session_destroy()

Ejemplo:

session_destroy();

Page 594: Document3

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:

Page 595: Document3

� 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:

Page 596: Document3

// Retorna PHPSESSID

echo session_name();

// Cambia el nombre de las sesionespor ID

session_name(“ID”);

Identificador de sesión:session_id

Page 597: Document3

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.

Page 598: Document3

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.

Page 599: Document3

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”);

Page 600: Document3
Page 601: Document3

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

Page 602: Document3

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

Page 603: Document3

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

Page 604: Document3

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:

Page 605: Document3

<?php

header(”Location: http://www.misitio.com”

?>

Deberá ser cambiada por algocomo:

<?php

$url = ”http://www.misitio.com”;

header(”Location: $url?PHPSESSID=”

Page 606: Document3

?>

O mejor aún:

<?php

$url = ”http://www.misitio.com?”;

$url .= sesión_name() . ”=” . session_id()

header(”Location: $url”);

?>

Page 607: Document3

� 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>

Page 608: Document3

<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>

Page 609: Document3

Deberá ser cambiada por algocomo:

<html>

<head>

</head>

<body>

<form action=’Pagina2.php’>

Producto:

<input type=’text’ name=’producto’

Page 610: Document3

<br />

Precio:

<input type=’text’ name=’precio’ />

<br />

<input type=’submit’ value=’Enviar

<input type=’hidden’ name=’PHPSESSIDsession_id(); ?>’ />

</form>

</body>

</html>

Page 611: Document3

� 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>

Page 612: Document3

<script language=’javascript’>

function abre_popup(){

open(‘pagina2.php’);

}

</script>

</head>

<body>

<input type=’button’ value=’popup’ onclick

</body>

</html>

Page 613: Document3

Debe ser cambiado de la siguientemanera:

<html>

<head>

<script language=’javascript’>

function abre_popup(){

open(‘pagina2.php?PHPSESSID=<?php echo session_id(); ?>

}

Page 614: Document3

</script>

</head>

<body>

<input type=’button’ value=’popup’ onclick

</body>

</html>

También cada vez que seencuentre algo como lo siguiente:

<html>

<head>

Page 615: Document3

<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>

Page 616: Document3

Se debe alterar de la siguientemanera:

<html>

<head>

<script language=’javascript’>

function ir_a_2(){

location.href = ‘pagina2.phpsession_id(); ?>’;

}

Page 617: Document3

</script>

</head>

<body>

<input type=’button’ value=’Ir a página 2

</body>

</html>

Propagación automática:

Page 618: Document3

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").

Page 619: Document3

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

Page 620: Document3

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.

Page 621: Document3

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.