You are on page 1of 448
VUUUUUUUEUEUUYE B Uy Contenido en un vistazo Introduccion... Parte 1: Desarrollar una aplicacion Web con Base de Datos usando PHP y MySQL Capitulo 1: Introduccién a PHP y MySQL 9 Capitulo 2: Preparar su ambiente de trabajo 21 Capitulo 3: Desarrollar una aplicacion Web con base de datos 37 Parte II: La base de datos MySOL ...... Capitulo 4: Construccién de la base de datos ...... sesseesensnnnunsneneeesnenee 67 Capitulo 5: Como proteger los datos 93 Parte Ill: PHP ... Capitulo 6: PHP General 7 Capitulo 7: Bloques de construccién PHP para programas 47 Capitulo 8: Datos entran, datos salen. - 191 Capitulo 9: Mover informacion de una pagina Web a otra Parte IV: Aplicaciones Capitulo 10: Unirlo todo Capitulo 11: Construir un catélogo en linea... ae Capitulo 12: Construir un sitio Web exclusive para miembros Parte V: Los diez mas . Capitulo 13: Diez cosas que querra hacer usando funciones PHP Capitulo 14: Diez descuidos frecuentes en PHP Parte V1: Apéndices .. ‘Apéndice A: Instalacion de MySQL. Apéndice B: Instalacion de PHP Apéndice C: Instalacién y configuracién de Apache woe Indice Tabla de Contenidos Introduccion .. Sobre este libro betes = Convenciones utilizadas en este libro .. 2 Lo que no necesita leer Eee ee aes Suposiciones ingenuas .... Cémo esta organizado este libro fe Parte I: Desarrollar una aplicacion Web con Base de Datos usando PHP y MySQL .. 4 Parte Il: Base de datos MySQL .... 4 Parte Ill: PHP | = 4 Parte IV: Aplicaciones «... = seed 5 5 Parte V: Los diez més ..... Parte VI: Apéndices Iconos usados en este libro a ahora ad6nde ir? .... Parte 1: Desarrollar una aplicacion Web con Base de Datos usando PHP y MySQL .. Capitulo 1: Introduccién a PHP y MySQL . {Qué es una aplicaci6n Web con bases de datos? La base de datos La aplicacion; Mover datos desde y hac MySQL, mi base de datos E Ventajas de MySQL mm C6mo funciona MySQL... Comunicacién con el servidor MySQL. PHP, un movilizador de datos Ventajas de PHP... C6mo funciona PHP MySQL y PHP, la pareja perfecta Ventajas de esta relacién .. Como funcionan juntos MySQL y PHP . Mantenerse al dia con los cambios en PHP y MySQL la base de datos 12 Capitulo 2: Preparar su ambiente de trabajo .. Las herramientas necesarias .... Encontrar un lugar para trabajar Un sitio web de la compaiia .. Una compania de hospedaje de sitios web ... xii PHP Y MySQL Para Dummies, 2da Edicion __ Montar y manejar su propio sitio web Probando, probando, 1, 2, Someter PHP a prueba Someter MySQL a prueba 33 Capitulo 3: Desarrollar una aplicacién Web con base de datos Planear su aplicacion Web con base de datos Identificar lo que espera de la aplicacion 38 Tome en cuenta a los usuarios 40 Hacer que el sitio sea facil de usar AL Dejar espacio para expansiones Escribalo Presentamos los dos ejemplos creados para este libro a2 Cosas para vender 43 Solo para Miembros 43 Disefiar la base de datos M4 Escoger los datos AA Organizar los datos . 4G Disetiar las bases de datos de los ejemplos 51 Proceso del disefio del Catalogo de mascotas 51 Proceso del disefio de! 4rea Sélo para miembros 53 56 Tipos de datos Datos dle caracteres Datos numéricos .. Datos de fecha y hora Datos de enumeracion Nombres de los tipos de datos en MySQL .. alo Un vistazo a los iserios de las bases de datos de los ejemplos Tablas de la base de datos de Cosas para vender ‘Tablas para la base de datos Slo para miembros Desarrollar la aplicacién Construir la base de datos Escribir los programas Parte Il: La base de datos MySQL .... Capitulo 4: Construccién de la base de datos . Cémo comunicarse con MySQL. Construir consultas en SQL Enviar consultas en SQL Construir una base de datos Crear una base de datos nueva Como borrar una base de datos Como agregar tablas a una base de datos 6 Cémo cambiar la estructura de la base de datos 78 Mover datos hacia dentro y hacia fuera de una base de datos 7” a4 6 1e @ @ 16 @ 6 (6.6.6 @ 6 6 6 6 @ 6 4 «4 ao Tabla de Contenidos Agregar informacién eee soe Como recuperar informacion ss mo combinar informaci 89 Cémo actualizar informacidn............. — — 93, Cémo eliminar informacién 94 Capitulo 5: Como proteger los datos . sane Controlar el acceso a sus datos : 95 Comprender los nombres de las cuentas y los hostnames ..........96 Aprender ms sobre contraseias sn. 98 Echemos un vistazo a los permisos 99 Como configurar cuentas MySQL. ne 100 Identificar las cuentas existentes . 102 ‘6mo agregar cuentas nuevas y cambiar permisos ... 102 Como agregar y cambiar ContraseAAs ......mnnnmn 104 Eliminar permisos 00.000 104 Eliminar cuentas. Ss 105 Respaldar sus dat0S ...unnnnmnnnnnne sol 05 Restaurar sus datos .. 108 Como reparar tablas ... 108 Como restaurar de una copia de respaldo ... 10 Parte Il: PHP ...... Capitulo 6: PHP General Agregar una seccién PHP a una pagina HTML... Escribir enunciados PHP Usar variables PHP ... Dar un nombre a una variable .. ened 23 Crear y asignar valores a las variables sacs 124 Lidiar con avisOS 1m 125 Usar constantes PHP 126 Trabajar con néimeros 127 Trabajar con cadenas de earacteres. on... ionromnra awa LD Cadenas entre comillas sencillas versus cadenas entre comillas dobl Juntar cadenas ‘Trabajar con fechas y horas Formatear una fecha : ‘Almacenar una marca de tiempo en una variable ... Usar fechas con MySQL... Comparar valores Hacer comparaciones simples Hacer coincidir cadenas de caracteres con patrones Unir comparaciones con and/or/xor Agregar comentarios a su programa xiii —— XIU PHP Y MySQL Para Dummies, 2da Edicion Capitulo 7: Bloques de construccién PHP para programas Enunciados simples tiles Usar enunciados echo Usar enunciados de asignacion Usar enunciados de incremento .... Usar exit Usar llamados a funciones Cémo crear arreglos Cémo visualizar arreglos Cémo quitar valores de los arreglos 157 Como ordenar arreglo ...-. 158 Como obtener valores de un arreglo ». oe (1 Como moverse por un arreglo ante 162 Arreglos multidimensionales 164 Enunciados condicionales atiles .. 167 Usar enunciados if : 168 171 172 Usar ciclos for 173 Usar ciclos while ... reed 16 Usar ciclos do..while ee 178 Ciclos infinitos anni 179 Escapar de un ciclo free 181 Usar funciones .. . 183 Usar variables en funciones 185 Cémo pasar valores entre una funcién y el programa principal ...186 Usar funciones incorporadas 190 Capitulo 8: Datos entran, datos salen ... Funciones de PHP/MySQL. Hacer una conexion Conectarse al servidor MySQL. Seleccionar la base de datos correcta Enviar consultas SQL... Extraer informacion de una base de datos Enviar una consulta SELECT Extraer y usar los datos —— Usar funciones para extraer datos Obtener informacién del usuario Usar formularios HTML Hacer que los formularios sean dinamicos Usar la informacién del formulario Revisar la informacién .... Dar a los usuarios la oportunidad de escoger, con miltiples botones de envio a 242 Insertar informacién en una base de datos Preparar los datos Tabla de Contenidos Agregar informacién nueva .... 247 Actualizar informacién existente 251 Poner la informaci6n en archivos ..... 254 Usar un formulario para subir el archivo .. 254 Procesar el archivo cargado uu 255 Unir todo 256 Capitulo 9: Mover informacién de una pagina Web a otra ... Mover a su usuario de una pagina a otra .... Mover informaci6n de una pagina a otra Agregar informacion al URL Almacenar informacién mediante cookies Pasar informaci6n con formularios HTML, Usar sesiones PHP Cémo funcionan las sesiones PHP Abrir sesiones Usar variables de sesi6n PHP Sesiones sin cookies : Hacer privadas las sesiones .... Cerrar sesiones PHP Parte IV: Aplicaciones .. Capitulo 10: Unirlo todo ...... Organizar la aplicacion. Organizarse en el nivel de la aplicacion « Organizarse en el nivel del programa Mantenerlo en privado Asegure la seguridad del PC _ No deje que el servidor web muestre los nombres de archivos.....292 Oculte las cosas No confie en la informacién de los usuarios Use un servidor web seguro Completar su documentacién Capitulo 11: Construir un catalogo en linea .. Disefiar la aplicacién .. Mostrar mascotas a los clientes Agregar mascotas al catlogo Construir la base de datos .. Construir la tabla Mascota = Construir la tabla Tipodemascota ... Construir la tabla Color .... Agregar datos a la base de datos .. Disefiar la apariencia Mostrar mascotas a los clientes . Agregar mascotas al catdlogo. xv — XU{ PHP Y MySQL Para Dummies, 2da Edicion _ : Escribir los programas Mostrar mascotas a los clientes Agregar mascotas al catalogo Capitulo 12: Construir un sitio Web exclusivo para miembros Diseftar la aplicacién Construir la base de datos Construir ta tabla Miembros Construir la tabla Entrada Agregar datos a la base de datos Diseiar la apariencia igina inicial de la tienda gina de registro Pagina de bienvenida alos miembros nuevos Secci6n Exclusivo para Miembros Escribir los programas Escribir Pagina inicial de la tienda le mascotas . Escribir Lo Escribir Nuevomiembro Escribir la seccién Exclusivo para Miembros Planear para crecer Parte Us Los diez MaS ccc Capitulo 13: Diez cosas que querré hacer usando funciones PHP. Comuniquese con MySQL Envie un mensaje electrénico Use sesiones PHP Detenga su programa Maneje arreglos ... Revise en busca de variable: Formate valores ‘Compare cadenas con patrones - Averigiie sobre las cadenas .. Cambie las maysculas 0 mindsculas de las cadenas Capitulo 14: Diez descuidos frecuentes en PHP . Faltan puntos y comas No hay suficientes signos de igual Nombres de variables mal escritos Faltan signos de délar .. Comillas revoltosas Output invisible Arreglos numerados Incluir enunciados PHP .. Parejas faltantes Paréntesis y corchetes confusos Tabla de Contenidos Parte V1: Apéndices .. Apéndice A: Instalacién de MySQL ........... En Windows Descargar e instalar MYSQL. ss... Iniciar el servidor MySQL Configurar el servidor para que se inicie cuando se inicie el PC... En Linux/Unix Usar RPM (sélo para Linux) Desde archivos binarios Desde archivos fuente En Mae wees Configurar MySQL... Apéndice B: Instalacion de PHP . . Instalar PHP en Unix/Linux/Mac con Apache... a En Unix/Lin tt wevssnninnusssmnensn En Mac OS X Opciones de instalaci6n sn... Configurar Apache para PHP En Windows ... Configurar su servidor web para PHP Configurar Apache Configurar IS Configurar PHP ... Apéndice C: Instalacién y configuracién de Apache ............409 Seleccionar una version de Apache Instalar Apache En Linux/U En Windows En Mac Configurar Apache Cambiar configuraciones Cambiar la ubicacién de su espacio web . Cambiar el néimero del puerto Indice... xvii Bb ienvenidos al emocionante mundo de las aplicaciones con bases de da- tos para la Web. Este libro brinda las técnicas basicas para crear cual- quier aplicacién con bases de datos para uso en la Web, pero definitivamente le recomiendo que empiece con una que sea bastante simple. En este libro de- sarrollo dos ejemplos de aplicaciones, ambas escogidas para representar dos tipos de aplicaciones frecuentemente encontrados en la Web: catalogos de productos, y sitios restringidos a miembros 0 clientes que requieren que el usuario se suscriba y se registre por medio de una contrasefa. Las aplicacio- nes de ejemplo son lo suficientemente complicadas, requieren mas de un pro- grama y usan un gran de variedad de datos y de técnicas de manipulacion de datos. A la vez son lo su nples de entender y de adaptar a una variedad de sitios web. Después de dominar las aplicaciones simples, podra ampliar el disento basico para incluir toda la funcionalidad que pueda imaginar. Sobre este libro Considere este libro como su gufa amigable para crear aplicaciones con ba- ses de datos para la Web. Este libro esta diseado como texto de referencia, no como un tutor, de modo que no tiene que leerlo de principio a fin, a me- nos que asi lo dese. Puede empezar a leer en cualquier punto del libro, en el Capitulo 1, en el Capftulo 9, dondequiera. He dividido la tarea de crear una aplicacién con bases de datos para la Web en porciones manejables de infor- maci6n, asf que revise la tabla de contenidos y localice el tema que le intere- sa. Sinecesita conocer informacién de otro capitulo para entender el capitulo que esta leyendo, yo haré referencia al naimero del capitulo. Estos son algunos ejemplos de los temas que comento en este libro: jj © Construir y usar una base de datos MySQL + Cémo agregar PHP a archivos de HTML ¥ Usar las caracteristicas del lenguaje PHP ¥ Usar formularios de HTML para obtener informacién de los usuarios Mostrar informacién de una base de datos en una pagina web " Almacenar informacién en una base de datos PHP y MySQL Para Dummies, 2a Edicion pee Convenciones utilizadas en este libro Este libro incluye muchos ejemplos de instrucciones de programacion en PHP, instrucciones de MySQL 0 cédigo HTML. En este libro tales instrucciones se n en un tipo diferente de letra que se ve como la linea siguiente: muest Una instrucctén de programacién en PHP ‘Ademiés, a veces se incluyen dentro del texto de un parrafo trocitos 0 térm nos clave de PHP, MySQL y HTML. Cuando sucede, el texto especial en el pa- rrafo también aparece en el tipo de letra mostrado, diferente del tipo de letra usado en el parrafo. Por ejemplo, este texto es un ejemplo de una instru cin de PHP que muestra el texto exacto dentro del texto del parrato. En los ejemplos, a menudo vera algunas palabras en letra cursiva. Las pala- bras en cursiva son tipos generales que deben ser reemplazados con los nombres apropiados especificamente a sus datos. Por ejemplo, cuando vea un ejemplo como el siguiente SELE 0M nombredetabla CT campol, campo2 F sabré que campol, campo2 y nombredetabla, dado que estén en cursiva, Geben reemplazarse con nombres reales. Cuando use estas instrucciones en un programa, posiblemente lo hard de la siguiente manera SELECT nombre, edad FROM Cliente Ademés, podria ver tres puntos (...) después de una lista en una linea de ejemplo, No es necesario digitar los tres puntos. Los tres puntos solo signifi can que puede tener tantos elementos en la lista como desee. Por ejemplo, cuando vea la linea siguiente SELECT campol.campo2,... FROM nombredetabla no necesita incluir los tres puntos en las instrucciones. Los tres puntos solo significan que su lista de campos puede ser mayor de dos. Significa que pue- de continuar con campo3, campod y asi sucesivamente. Por ejemplo, su ins- truccién podria ser SELECT nombre, edad, estatura, talladelzapato FROM Cliente De vez en cuando también vera algunas cosas en negrita. Pongales atencion porque indican algo que quiero destacar o algo que debe digitar. ewexnsnvnvnnenann nvnnenneanoeeseeaoane2n Introduccion = 3 Lo que no necesita leer Alguna informacion en este libro est mareada como Cosas técnicas con un icono a la izquierda. A veces encontrara estos temas técnicos en un recuadro: Considere esto como informacién que no necesita leer para crear una aplica- cidn con bases de datos para la Web. Esta informacién adicional puede conte- ner detalles mas exhaustivos 0, a veces, describe técnicas que requieren de mas conocimiento técnico para ser ejecutadas. Algunos lectores podrian estar integesados en la informacién o los métodos técnicos adicionales, pero siénta- se en libertad de ignorarlos sino los encuentra interesantes ni atiles. Suposiciones ingenuas Para poder escribir un libro mas especifico en vez de una enciclopedia, he asumido algunas cosas sobre usted, el lector. Asumo que conoce HTML y que ha creado sitios web con HTML. Por lo tanto, aunque uso HTML en muchos ejemplos, no explico HTML. Si no tiene conocimientos sobre HTML, encontra- rd este libro mas dificil de usar. Le sugiero que lea un libro sobre HTML — tal como HTML 4 For Dummies, 4ta Edicién, por Ed Tittel y Natanya Pitts, o HTML 4 For Dummies Quick Reference, 2a Edici6n, por Deborah S, Ray y Eric J. Ray (publicados por Wiley Publishing, Inc.) — y que, antes de empezar este libro, construya algunas paginas web como practica. Le seré particularmente til tener algiin conocimiento sobre formularios y tablas en HTML. Sin embar- go, si es usted una persona impaciente, no le diré que es imposible seguir adelante sin saber algo sobre HTML. Quizé sea capaz de absorber lo suficien- te sobre HTML de este libro para crear su propio sitio web. Si decide conti- nuar sin saber HTML, le sugiero que tenga un libro sobre HTML a la mano para que le ayude cuando necesite averiguar algo sobre HTML que no expli- quemos en este libro, Sivaa seguir adelante sin ninguna experiencia sobre paginas web, tal vez des- conozca algunos conceptos basicos necesarios. Debe saber cémo crear y guar- dar archivos de solo texto con un editor como Notepad, o cmo guardar el archivo como solo texto desde su procesador de palabras (y no en el formato del procesador de palabras). También debe saber dénde colocar los archivos de texto que contienen el cédigo (HTML o PHP) de sus paginas web de modo que las paginas estén a la disposici6n de todos los usuarios con acceso a su si tio Web, y debe saber como mover los archivos al lugar apropiado. No necesita saber como disefar 0 crear bases de datos ni cémo programar. Toda la informacién que necesita saber sobre las bases de datos y la progra- maci6n se incluye en este libro. PHP y MySQL Para Dummies, 2a Edicion Como esta organizado este libro Este libro se divide en seis partes, con varios capitulos en cada parte. El conte- nido va desde una introduccién a PHP y MySQL, pasando por la instalaci6n, la creaci6n y el uso de bases de datos, hasta como escribir programas con PHP. Parte 1: Desarrollar una aplicacién Web con Base de Datos usando PHP y MySQL MySQL en la creacion de a parte brinda un resumen sobre el uso de PHP y aplicaciones con bases de datos para la Web. Describe las ventajas de PHP, de MySQL y del uso conjunto ce ambos. Averiguara como empezar, incluyen- do lo que necesita, como conseguir PHP y MySQL y cémo someter su softwa- rea prueba. Luego aprendera sobre el proceso de desarrollar la aplicaci6n. Parte II: Base de datos MySOL Esta parte explica los detalles sobre cémo trabajar con las bases de datos MySQL. Aprenderé cémo crear una base de datos, como cambiar una base de datos y como mover datos hacia adentro y afuera de una base de datos. Parte III: PHP Esta parte proporciona los detalles sobre como escribir programas en PHP que le permitan a sus paginas web insertar informacién nueva, actualizar i formacidn existente o eliminar informacion de una base de datos MySQL. Aprenderé cémo usar las caracteristicas de PHP que se utilizan para la inte- raccién con las bases de datos y el procesamiento de formularios. Parte IV: Aplicaciones La Parte IV describe las aplicaciones con bases de datos para la Web como un todo. Aprendera como organizar los programas PHP en una aplicacion fun- cional que interactie con la base de datos. Se brindan, describen y explican dos ejemplos completos de aplicaciones. 3 : Introduccion = Parte V: Los diez mas Esta parte presenta algunas listas ttiles de cosas importantes que se deben hacer y que no se deben hacer al desarrollar una aplicacién con bases de da- tos para la Web. Parte VI: Apéndices Esta parte le proporciona las instrucciones para instalar PHP y MySQL a aque- los que necesitan instalar el software por si mismos. El Apéndice C comenta la instalaci6n y el uso de los servidores web, tales como Apache e lS, para aque- Mos que necesitan instalar y administrar el servidor web por si mismos. Iconos usados en este libro Los consejos presentan informaci6n adicional para un propésito especifico. Los consejos le ahorran tiempo y esfuerzo, asi que vale la pena revisarlos. Siempre debe leer las advertencias. Las advertencias enfatizan acciones que debe realizar o que debe evitar para prevenir consecuencias desastrosas. Este icono sefala informacién y procedimientos que son ms técnicos que otras secciones del libro. Esta informacion puede ser interesante y itil, pero no necesita entenderla para usar la informacién en este libro. La funci6n de este icono es ser algo asi como una notita adhesiva: resalta in- formaci6n que vale la pena memorizar. PHP y MySQL Para Dummies, 2a Edicion ¢Y ahora adonde ir? Este libro esta organizado en el orden en el que deben hacerse las cosas. Si es usted un verdadero novato, probablemente debera empezar con la Parte | Ja cual describe cémo iniciar el proceso, incluyendo como disenar las partes de su aplicacion y cémo van a interactuar estas partes. Cuando implemente su aplicacién, debe crear primero la base ce datos MySQL, por lo cual co- mento MySQL antes que PHP. Después de haber entendido los detalles de MySQL y PHP, deberd unirlos en una aplicacién completa, lo cual describo en la Parte IV, Si ya esta familiarizado con cualquiera de las partes de este libro, puede ir directamente a la parte que necesita. Por ejemplo, si esta famillariza- do con el diseno de bases de datos, puede ir directamente a la Parte Hl, donde se describe como implementar el disefio en MySQL. Y si ya conoce MySQL bien, puede leer s6lo la informacién sobre PHP en la Parte IIL Pa ae ae ae ee ae ee ee ee ae ee ee ae a ee ee eee eee eee eee Uy » oe) I ib BD Parte | Desarrollar una aplicacion Web con Base de Datos usando PHP y MySQL La 5a Ola Si = “Mira, iya he buscado ‘cadaveres de bellexas reanimadas' tres veces y ne he encontrado nada!" En esta parte ... E: esta parte, presento un panorama. Describo PHP y MySQL, cémo funciona cada uno de ellos y cémo fun- cionan juntos para convertir su aplicacién Web con base de datos en una realidad. Después de describir sus herra- mientas, le muestro cémo configurar su ambiente de tra- bajo. Le presento las opciones que hay para tener acceso a PHP y MySQL y sefialo qué buscar en cada ambiente. Después de describir sus herramientas y sus opciones pa- ra desarrollar su ambiente, le brindo un panorama del proceso de desarrollo. Hablo sobre planeaci6n, diseno y construccién de la aplicaci6n. Capitulo 1 Introduccion a PHP y MySOL — En este capitulo Averiguar qué es una aplicacién Web con bases de datos Echar un vistazo a PHP | Descubrir como funciona MySQL _ Averiguar cémo funcionan juntos PHP y MySQL A si que tiene que disefar un sitio web interactivo. Tal vez su jefe acaba de ponerlo a cargo del catélogo de productos en linea de la compania. 0 quizé desea desarrollar su propio negocio en la Web. O su hermana desea vender sus cuadros en linea. O se ofrecié como voluntario para montar un si- tio web exclusivo para los miembros de la asociacion de acrobatas de su cir- co. Cualquiera que sea el motivo, habra notado que la aplicacion necesita almacenar informacién (por ejemplo, informacién sobre productos, informa- cién sobre cuadros, contrasefias de los miembros), y por lo tanto requiere de una base de datos. También habra notado que la aplicaci6n debe interactuar dindmicamente con el usuario; por ejemplo, el usuario selecciona un produc- to que desea ver o digita informacién sobre su membresia. Este tipo de sitio. ‘web es una aplicacién Web con base de datos. (HyperText Markup Language), pero crear un sitio web interactivo es un reto nuevo, al igual que disefiar una base de datos. Tal vez le pregunté a tres gu- riis de la informatica conocidos suyos qué debe hacer, y probablemente ellos Je dijeron muchas cosas que no entendi6. Pero en medio de la jerga técnica, seguramente habré escuchado las palabras "rapido" y “facil” y "g cionadas en las mismas oraciones que PHP y MySQL. Ahora desea saber mas sobre c6mo usar PHP y MySQL para desarrollar el sitio web que necesita. r Asumo que anteriormente ha creado paginas web estéticas usando HTML PHP y MySQL trabajan muy bien juntos; es una sociedad dinémica. En este capi- tulo, aprender sobre las ventajas de cada uno, cémo funciona cada uno y como funcionan juntos para producir una aplicacién Web con bases de datos. (Qué es una aplicacion Web con bases de datos? largo plazo, por medio de una base de datos, entonces es una aplicacién Web con base de datos. Este libro le brinda la informacién que necesita para desarro- lar una aplicaci6n Web con base de datos a la cual se pueda tener acceso usan- do exploradores web como Internet Explorer y Netscape Una aplicacion Web con base de datos esta disenada para ayudarle al usuario a realizar una tarea, Puede ser una aplicacién simple que muestre informacion tenia ventana del explorador (por ejemplo, muestra ofertas de trabajo actuales Cuando el usuario selecciona el titulo de un puesto) o puede ser un programa complicado con funcionalidad extendida (por ejemplo, la solicitud para orde- nar un libro en Amazon.com © la solicitud para pujar en eBay), De modo no sorprendente, una aplicacién Web con base de datos consta de tuna base de datos y una aplicacién — s6lo dos partes: © Base de datos: La base de datos es la memoria de largo plazo de su apl- cacién con base de datos para la Web. La aplicacion no puede cumplir su propésito sin la base de datos. No obstante, por si misma la base de datos no es suficiente. Aplicacién: La parte de la aplicaci6n es el programa o grupo de progra- mas que realiza las tareas. Los programas crean la presentaciOn visual que el usuario ve en la ventana del explorador; hacen que la aplicacion | gea interactiva al aceptar y procesar la informacion que el usuario digita | én la ventana del explorador; almacenan informacion en la base de datos y extraen informacion de la base de datos. (La base de datos es instil a menos que se puedan insertar y extraer datos de ella.) Las paginas web que usted ha creado anteriormente solo con HTML son estatic to cual significa que el usuario no puede interactuar con la pagina, Todos los usua rios ven la misma pagina web. Por otro lado, las paginas web dindmicas permiten ‘lusuario interactuar con la pagina. Diferentes usuarios podrian ver paginas web diferentes. Por ejemplo, un usuario que esté viendo el catalogo en linea de los pro- ductos de una tienda de muebles escoge ver informacién sobre sofas, mientras {que otro usuario tal vez escoja ver informacion sobre mesitas para café. Para crear paginas web dinamicas, usted debe usar otro lenguaje aclemas de! HTML. Un lenguaje ampliamente usado para crear paginas web dindmicas es JavaScript JavaScript es itl para varios propositos, tales como pasadas del “* (por ejemplo Parte I: Desarrollar una aplicacin Web con Base de Datos usando PHP y MySQL __ Una aplicaci6n es un programa o un grupo de programas disefiados para ser usa- dos por un usuario final (por ejemplo clientes, miembros, acrobatas circense ttc), Siel usuario final interactda con la aplicacién por medio de un explorador web, la aplicaci6n es una aplicacion para uso en la Web o simplemente una apli cacion web, Sila aplicacion web requiere de almacenamiento de informacion a to Capitulo 1: Introduccién a PHP y MySQL ara resaltar un bot6n de navegacién cuando el usuario mueve el puntero del“ sobre él) 0 aceptar y validar informacién que los usuarios digitan en un formulario web. Sin embargo, noes atl para interactuar con una base de datos. No debe usar- se JavaScript para mover la informacion del formulario web a la base de datos. Por el contrario, PHP es un lenguaje particularmente muy bien adaptado para interac- tuar con bases de datos. PHP puede aceptar y validar la informacion que los usua- rios digitan en un formulario web y también puede mover la informaci6n a una base de datos. Los programas en este libro estén escritos con PHP. La base de datos El coraz6n de una aplicacién con base de datos para la Web es la base de da- tos, la cual es la memoria a largo plazo (ojala mas eficiente que mi memoria a largo plazo) que almacena la informacion de la aplicacién. Una base de datos, es un gabinete archivador electrénico que almacena informacién de una forma ordenada, de modo que uno pueda encontrarla cuando la necesita. Después de todo, guardar informacién seria instil si no se pudiera encontrar. Una base de datos puede ser pequena, con una estructura simple — por ejemplo, una base de datos que contenga los titulos y los nombres de los autores de todos los li- bros que usted posea, Pero una base de datos también puede ser enorme, con una estructura extremadamente compleja — tal como la base de datos que Amazon.com debe tener para guardar toda su informacion. Lainformacién almacenada en las bases de datos viene en muchas variedades. El catélogo en linea de una compaiia requiere de una base de datos para guardar in- formacién sobre todos los productos de la compaiifa. Un sitio web con membre- sia requiere de una base de datos para guardar informacién sobre los miembros. Un sitio web sobre empleos requiere de una base de datos (0 tal vez de dos bases de datos) para almacenar la informacién sobre las ofertas de empleo ¢ informa- cién sobre los curriculum de los solicitantes. La informaci6n que usted planea al- macenar quizé es similar a la informacion que hay guardada en miles de sitios web de Internet, o quiza sea informacién tinica a su aplicaci6n, Técnicamente, el término base de datos se refiere al archivo 0 grupo de arch vos que contiene los datos reales. Se tiene acceso alos datos por medio de un conjunto de programas llamados SABD (Sistema Adminitrador de Bases de Da- tos o Database Management System). Casi todos los SABO actuales son Rela- cionales), en los cuales los datos se organizan y almacenan en un conjunto de tablas relacionadas. En este libro, usamos MySQL porque es un SABD especialmente apropiado para uso en sitios web. MySQL y sus ventajas se discuten en la seccién "MySQL, Mi base de datos” mas adelante en este capitulo, Puede aprender c6- mo organizar y disefar una base de datos MySQL en el Capitulo 3. 12 Parte |: Desarrolla [ Listas de discusion electronicas Esposible encontrar muy buen soportetécrico en las listas de discusion electronicas. Estas listas ‘son grupos de personas que discuten temas es- pecfficos por medio del correo electrénico. Se pueden encontrarlistas electronicas para casito- dos los temas enlos que se pueda pensar:lalote- ria, losofia antigua, cocina, los Beatles, razas de perros, poltica, etc. La discusion se realza por medio del correo electrénico. administrador de Jalista mantiene una lista de distribucién de irec- ciones electronicas paralos que quieran unirse a Jadiscusién. Cuando envia un mensaje alalista de discusién, su mensaje es enviado a toda la lista para que todos lo vean. Por ende, la discusion es un esfuerzo grupaly cualquiera puede responder a cualquier mensaje que le interese. Laslistasde discusi6n electronicastienenel apo- yo de varios patrocinadores. Cualquierindividuo tvorganizacién puede activar una lista. La mayoria de los proveedores de software tiene una o mas listas dedicadas a su software. Lasuniversidades tienen lista para las asignaturas académicas. ‘Ademés, algunos sitios web como Yahoo! Groups Y Topica administranlistas de discusion.Losusua- rios pueden crear una lista nueva 0 unirse auna lista existente por medio de la. aplicacion web. Laslistas electrénicas relacionadas con softwa- reson comola cueva del tesoro del soporte tec nico. Indmero de usuarios de software suscri- tos a listas varia de un centenar a varios mile. Muchos tienen amplia experiencia con el soft- ‘ware, Amenudo los desarrolladores, programa dores y personal de soporte técnico del proveedor del software estan en fa lista. Cual- ‘uiera que sea su pregunta o problema, alguien enlalista probablemente conocela respuesta 0 la soluci6n. Noes probable que usted sea la pri- mera persona en haber experimentado un pro- ‘blema. Cuando plantea una pregunta enuna lista electronica, la respuesta generalmente apare- ce en su casillero en unos pocos minutos. Ade~ més, la mayoria delaslistas mantiene un archivo de discusiones anteriores para que usted pueda buscar respuestas a problemas especificos. Cuando es nuevo en elusode cualquier softwa- re, puede averiguar mucho simplemente unién- dose alas istas de discusién para ese software yleyendo los mensajes durante algunos dias. Por supuesto, PHP y MySQL tienen istas de dis- cusién electrénicas. De hecho, cada uno tiene varias listas de discusién sobre temas especi- ficos, por ejemplo bases de datos y PHP. Puede encontrar los nombres de las listas electrénicas einstrucciones sobre cémo unirse a ellas en los sitios web de PHP y MySQL respectivamente. La aplicacién: Mover datos desde y hacia la base de datos Para que la base de datos sea Gtil, usted debe poder introducirle y extraerle datos. tas para lograrlo, pues interac datos. Un programa se conecta a Ja base de datos Los programas son sus herramien datos para almacenar y recuperar r una aplicacion Web con Base de Datos usando PHP y MySQL a | | ‘aan con la base de Yhace una solcitud: "Tome estos datos y almacénelos en el lugar especiico” otro programa hace esta solicitud: "Encuentre los datos especificados y traigamelos qos programas de aplicacion que interactéan con la base de datos corren cuando el usuario teractita con la pagina web. Por ejemplo, cuando el usuario hace clic en el potdn enviar después de completar un formulario en la web, un programa procesa lainformat nen el formulario y la guarda en una base de datos. Capitulo 1: Introduccién a PHP yMysol =] 3 MySOL, mi base de datos MySQL es un SABD relacional rapido y facil de usar utilizado para bases de datos en muchos sitios web, Desde el principio, la velocidad fue el atributo mas importante para los desarrolladores. En aras de la velocidad, tomaron la decision de otrecer me- nos caracteristicas que sus principales competidores (por ejemplo, Oracle y Syba- se). Sin embargo, aunque MySQL tiene menos caracteristicas que sus competidores comerciales, tiene todas las caracteristicas necesarias para la gran mayoria de desa- rrolladores de bases de datos. Es mas facil de instalar y usar que sus competidores comerciales, y la diferencia en el precio favorece muchisimo a MySQL. MySQL es desarrollado, mercadeado y mantenido por MySQL AB, que es una empresa sueca. La compaiia ofrece dos tipos de licencias: | © Software de fuente abierta: MySQL esta disponible por medio de una GNU GPL General Public License/Licencia Pablica General) sin ningin costo. Cualquiera que cumpla los requisitos para una GPL puede usar el software gratuitamente. Si est4 usando MySQL como base de datos en un sitio web (el tema de este libro), puede usar MySQL gratuitamente, incluso si esta ganando dinero con su sitio web. ¥ Licencia comercial: MySQL esta disponible con una licencia comercial para aquellos que prefieren esta alternativa a la GPL. Si un desarrollador desea usar MySQL como parte de un nuevo producto de software y desea vender el nuevo producto en vez de ponerlo a disposici6n bajo la GPL, el desarrolla- dor debe comprar una licencia comercial. El costo es muy razonable. Encontrar soporte técnico para MySQL no es dificil. Puede unirse a una de varias listas de discusién electrénicas que se ofrecen en el sitio web de MySQL: wnw.mysq] com. Incluso puede buscar en los archivos de la lista electrénica, los cuales contienen una gran base de conocimientos con pre- guntas y respuestas sobre MySQL. Si se siente mas cémodo obteniendo so- porte comercial, MySQL AB ofrece contratos de soporte técnico — con cinco niveles de soporte, que oscilan desde soporte directo por correo electrénico hasta soporte telefénico, con cinco niveles de precios, Ventajas de MySOL MySQL es una base de datos popular entre los desarrolladores Web. Su velo- cidad y pequefio tamafo la hacen ideal para un sitio Web. Suimele a eso el he- cho de ser de c6digo abierto, 0 sea gratis, y tiene alli la razon de su popularidad. Este es un informe minucioso de algunas de sus ventajas: locidad. En consecuencia, el software fue disefiado desde el principio i v Es rapido. La meta principal de los desarrolladores de MySQL fue la ve- con la velocidad en mente. Parte |: Desarrollar una apli -acion Web con Base de Datos usando PHP y MySQL _ 7 Es barato, MySQL es gratis bajo la licencia GPL de cédigo abierto, y el costo de una licencia comercial es muy razonable. * Bs facil de usar. Puede construir una base de datos MySQL. ¢ interactuar con ella usando unas cuantas instrucciones simples en el lenguaje SQL. el cual es el lenguaje estandar para comunicarse con los SABD relacional. Consulte el Capitulo 4 para conocer toda la verdad sobre el lenguaje SQL. Funciona en muchos sistemas operativos. MySQI. funciona en una gran varie- dad de sistemas operativos — Windows, Linux, Mac 0S, la mayorfa de las varie- dades de Unix (incluyendio Solaris, AIX y DEC Unix), FreeBSD, 05/2, Irixy otros. _ Amplio soporte técnico. Una base de usuarios grande brinda soporte gratuito por medio de listas electronicas. Los desarrolladores de MySQL también participan en las listas electronicas. También puede comprar soporte técnico a MySQL AB por un precio modico. Es seguro. El flexible sistema de autorizacion de MySQL permite algunos © todos los privilegios de la base de datos (por ejemplo, privilegios para crear una base de datos 0 borrar datos) a usuarios especificos 0 grupos de usuarios. Las contrasefias se encriptan. Soporta bases de datos grandes. MySQL maneja bases de datos de hasta 50 millones de filas 0 mas. El limite predefinido para el tamafio de archivo de una tabla es de 4GB, pero se puede aumentar (si su sistema operativo lo puede manejar) hasta un limite de 8 millones de terabytes (TB), en teoria, © Se puede personalizar. La licencia GPL de c6digo abierto permite a los programadores modificar el software MySQL para adaptarlo a sus am~ bientes especificos Como funciona MySQL El software de MySQL consta del servidor MySQL, varios programas util tarios que ayudan en la administracién de la base de datos MySQL y alg software de apoyo que necesita el servicor MySQL (usted no debe preocu- parse por nada de esto ahora). El corazén del sistema es el servidor MySQL. El servidor MySQL es el administrador del sistema de base de datos. Maneja todas las instrucciones de su base de datos. Por ejemplo, si desea crear una nueva base de datos, usted debe enviar un mensaje al servidor MySQL que diga “cree una base de datos nueva y Ilamela datosnuevos". Entonces el ser- vidor MySQL crea un subdirectorio dentro de su directorio de datos, nombra el nuevo subdirectorio nuevosdatos y pone los archivos necesarios con el formato requerido en el subdirectorio nuevosdatos. Del mismo modo, para ahadir datos a esa base de datos, usted envia un mensaje al servidor MySQL dandole los datos y diciéndole dénde quiere que anada los datos. Aprendera ‘como escribir y enviar mensajes a MySQL en la Parte Hl de este libro. PHP, Capitulo 1: Introduccion a PHP y MySQL El servidor MySQL debe estar funcionando y esperando érdenes antes de que usted pueda transmitirle instrucciones. Fl servidor MySQL generalmente se configura para que inicie cuando inicia el PC y para que continte funcionan- do todo el tiempo. Esta es la configuraci6n usual para un sitio web. Sin em- bargo, no es necesario configurarlo para que inicie cuando inicia el PC. Sies necesario, puede iniciarlo manualmente en el momento en que desee ingre- sar a la base de datos. Cuando esta funcionando, el servidor MySQL. constan- temente busca mensajes con instrucciones sobre lo que debe hacer. Comunicacién con el servidor MySQL Toda su interaccién con la base de datos se hace mediante mensajes envia- dos al servidor MySQL. Puede enviar mensajes al servidor MySQL de varias maneras, pero este libro se concentra en el envio de mensajes por medio de PHP. El software PHP tiene instrucciones especificas usadas para enviar ins- trucciones al servidor MySQL £1 servidor MySQL debe ser capaz de entender las instrucciones que recibe. Se comunica con él usando SQL (Structured Query Language / Lenguaje Estructu- rado de Consulta), que es el lenguaje estandar que entienden muchos SABD. El servidor MySQL entiende SQL. PHP no entiende SQL, pero no necesita hacerlo: PHP establece una conexién con el servidor MySQL y envia el mensaje en SQL por medio de dicha conexién. E] servidor MySQL interpreta el mensaje en SQL. y sigue las instrucciones. El servidor MySQL envia un mensaje de vuelta, indi ‘cando su estado y lo que hizo (0 reportando un error sino pudo entender 0 se- guir las instrucciones). Para conocer todos los detalles sobre cémo escribir y enviar mensajes en SQLa MySQL, consulte la Parte Il de este libro un movilizador de datos PHP, un lenguaje de programacién disefado especificamente para ser usado en la Web, es su herramienta para crear paginas web dinamicas. Como es rico en caracteristicas que facilitan el diseiio y la programacién web, PHP se usa en mas de 13 millones de dominios (segtin la encuesta de Netcraft en www. php.net /usage..php). Su popularidad continéa creciendo, lo cual sign fica que debe estar cumpliendo muy bien con su funcién. PHP significa PHP: HyperText Preprocessor/Preprocesador de Hipertexto. Cuando Rasmus Lerdorf empez6 a desarrollarlo, se llamaba Personal Home Page tools/Herramientas para una Pagina de Inicio Personal, Cuando se des: rrollé a un lenguaje completo, el nombre se le cambi6 para que estuviera m: a tono con su funcionalidad expandida, 15 16 Parte I: Desarrollar una aplicacion Web con Base de Datos usando PHP y MySQL __ La sintaxis del lenguaje PHP es parecida a la sintaxis de C, asi que si tene fx: ssentiré comodo usando PHP. PHP es incluso mas simple periencia con C, C. PHP tampo- Que C porque no usa algunos de los conceptos mas dificiles de a incluye las capacidades de programacién de bajo nivel de C porque PHP Csté disenado para programar sitios web y no necesita esas capacidades. Lahabilidad de PHP para interactuar con bases de datos es particularmente fuer- te. PHP puede trabajar con précticamente todas las bases de datos de las cuales haya escuchado hablar (y algunas de las que nunca ha ofdo nada), PHP maneja a Conexion con la base de datos y la comunicacion con ella, Usted no necesita cono- Cer los detalles técnicos para conectarse a una base de datos para intercambiar rensajes con ella, Solo debe decirlea PHP el nombre de la base de datos y donde PHP se encarga de los detalles, Se conecta ala base de datos, pasa sus ins- tos y le trae de vuelta la respuesta de la base de datos. est trucciones ala base de dat Hay soporte téenico disponible para PHP. Puede unirse a una de varias istas de dis cucién electrénicas que se ofrecen en elsitio web de PHP (www .php .net),incluyen- Go una lista de bases de datos y PHP. Ademés, hay una interfaz hacia las listas de ddigeusidn en news . php.net, desde donde puede navegar o buscar en los mensajes. Ventajas de PHP La popularidad de PHP esta aumentando rapidamente debido a sus r ventajas Altiples § Es rapido. Como esté empotrado en c6digo HTML, el tiempo de respues- ta.es muy corto. L- Es barato — gratis, de hecho. PHP es prueba de que los almuerzos gra- tis si existen y de que es posible recibir mas de lo que se ha pagado, V- Es facil de usar. PHP contiene muchas caracteristicas y funciones espe- | Gales necesarias para crear paginas web dindmicas. El lenguaje PHP es- ta disefiado para incluirse con facilidad en archivos en HTML © Funciona en muchos sistemas operativos. Funciona en una grant varie- dad de sistemas operativos: Windows, Linux, Mac OS y la mayoria de las variedades de Unix. 1 Amplio soporte técnico. Una gran base de usuarios brinda soporte grax icas, © tuito por medio de las listas de discusi6n electrér 1 Es seguro. El usuario no ve el codigo PHP. | Esta diseiiado para mantener bases de datos. La funcionalidad de PHP 0” fue disefiada para interactuar con bases de datos especificas. Le libera dela necesidad de conocer los detalles técnicos requeridos para comu- nicarse con una base de datos. [| © Se puede personalizar. La licencia de c6digo abiert® les permite a los programadores modificar el software PHP y agregarle o modificar carac- teristicas necesarias para adaptarse a sus ambientes especificos, a = nz nae arn ren rn nO OA. CU DCCUCOOSSOSOSeSCSaC‘(iaRR™s™ti‘C aRESC‘iaeaRSC‘(ik =“ (‘ih O89 ovo ee | Capitulo 1: Introduccién a PHP yMySoL =] 7 Como funciona PHP PHP es un lenguaje de programacién empotrado cuando se usa en paginas web. Esto quiere decir que el c6digo PHP esté empotrado en c6digo HTML. Usted usa etiquetas de HTML para encapsular el lenguaje PHP que empotra en su archivo HTML, del mismo modo en que usarfa otras etiquetas de HTML. Puede crear y editar paginas web que contengan PHP del mismo mo- do en que se crean y editan las paginas HTML comunes. Elsoftware PHP funciona en conjunto con el servidor web. El servidor web es el software que entrega las paginas web al mundo. Cuando digita un URL en suex- plorador web, esta enviando un mensaje al servidor web en ese URLen el cual le pide que le envie un archivo en HTML. El servidor web responde enviando el ar- chivo solicitado. Su explorador lee el archivo HTML y muestra la pagina web. También le pide a un servidor web que le envie un archivo cada vez que hace clic en un vinculo en una pagina web. Ademas, el servidor web procesa un archivo cuando usted hace clic en el bot6n para enviar un formulario en una pagina web. Cuando esta instalado PHP, el servidor web se configura para esperar ciertas extensiones de archivo que contienen instrucciones en lenguaje PHP. A meni do la extensi6n es.php 0. phtil, pero se puede usar cualquier extensién. Cuando el servidor web recibe una solicitud de un archivo con la extension designada, envia las instrucciones HTML sin modificaci6n, pero las instruc- ciones PHP las procesa el software PHP antes de enviarlas al solicitante Cuando se procesan las instrucciones PHP, el servidor web s6lo envia el resul- tado al explorador Web. Las instrucciones en el lenguaje PHP no se incluyen en el resultado que se envia al explorador, asi que el cOdigo PHP es seguro y trans- parente para el usuario, Por ejemplo, en esta simple instruccién en PHP: <2php echo "

Hola Mundo"; ?> <2php es la etiqueta de apertura PHP y ?> es la etiqueta de cierre. echo es una instrucci6n en PHP que le dice a PHP que muestre el texto seguido a con- tinuaci6n. El software PHP procesa la instruccién PHP y el resultado es este:

Hola Mundo que es un instrucci6n comin en HTML. Esta instrucci6n en HTML se entrega al ex- plorador del usuario, El explorador interpreta la oracién como cédigo HTML y muestra una pagina web con un parrafo: Hola Mundo, La instruccién PHP no se en- trega al explorador, de modo que el usuario nunca ve ninguna instruccién en PHP. PHP y el servidor web deben trabajar muy unidos. PHP no esta integrado a todos los servidores web, pero trabaja con muchos de los servidores web més populares. PHP fue desarrollado como un proyecto de la Fundacion de Software Apache; en consecuencia, trabaja mejor con Apache. PHP también funciona con Microsoft IIS/PWS, iPlanet (anteriormente conocido como Netscape Enterprise Server) y otros, 7.8 Parte t:Desarrollar una aplicacion Web con Base de Datos usando PHP y MySQL ‘Aunque PHP funciona con varios servidores web, funciona mejor con Apache. Si puede seleccionar o influir en la seleccién del servidor web usado en su organiza- Gi6n, elija Apache, Por simismo, Apache es una buena elecci6n. Es gratis, de codigo abierto, estable y popular, Actualmente sustenta ams del 60 porciento de todos los sitios web, segiin la encuesta de servidores web en Wws.netcraft. ce Funciona con Windows, Linux, Mac OS y la mayoria de las variedades de Unis. £40 eS g MySOL y PHP, la pareja perfecta MySQL y PHP frecuentemente se usan_ juntos. A menudo se les Hama el dio dinamico, MySQL brinda la parte de la base de datos y PHP brinda la parte de la aplicacién en su aplicacin con bases de datos para la Web. Ventajas de esta relacion Como pareja, MySQL y PHP tienen varias ventajas: cuanto alo rentable, es dificil ganarle a gratis. Son gratis. Ei | Estan diseiados para la Web. Ambos fueron disefiados espect para usarse en sitios web. Ambos tienen un conjunto de caracteristicas dedicadas a crear sitios web dindmicos. amente Son faciles de usar. Ambos fueron disefiados para montar sitios web ré- pidamente. ¥ Son rapidos. Ambos fueron disefiados pensando en la velocidad como meta principal. Juntos brindan una de las maneras mas répidas de entre- gar paginas web dindmicas a los usuarios. Se comunican bien entre si. PHP incluye caracteristicas especi | tacomunicarse con MySQL. No necesita conocer los detalles tecnicos: déjele ese trabajo a PHP. 1 Ambos cuentan con una amplia base de soporte. Ambos tienen bases de usuarios amplias, Como generalmente se usan como pareja, a ment: do tienen la misma base de usuarios. Hay muchas personas dispuestas a ayudarle, incluyendo a los miembros de las listas de discusion electron 's con experiencia en el uso de MySQL y PHP juntos. ce VF Se pueden personalizar, Ambos son de c6digo abierto, lo cual le perm te a los programadores modificar el software de PHP y MySQL para © adaptarlos a sus ambientes particulares. 2ee8#?. 8 @® @ @® @® @® @ 4 ®@ 4 @ 2 24.2 2a 22a i ee Capitulo 1: Introduccion a PHPy MySoL =. J Como funcionan juntos MySQL y PHP PHP brinda la parte de la aplicacién, y MySQL proporciona la parte dela base de datos de una aplicacion con base de datos para la Web. Se usa el lenguaje PHP para escribir los programas que realizan las tareas de la aplicacién, PHP es lo su- ficientemente flexible para realizar todas las tareas que requiera su aplicac Se puede usar para tareas simples (como mostrar una pagina web) 0 para tareas complicadas (tales como aceptar y verificar datos digitados por un usuario. un formulario en HTML). Una de las tareas que su aplicacién debe realizar es troducir informacion en la base de datos, y extraerla; y PHP incluye caracterist cas especificas para usar al escribir programas que deban mover informacion hacia dentro y hacia afuera de una base de datos de MySQL. Las instrucciones PHP se empotran en sus archivos HTML con etiquetas de PHP. Cuando las tareas que debe realizar la aplicacién requieren almacenar 0 recupe- rar datos, usted usa instrucciones PHP especificamente disenadas para interac- tuar con la base de datos MySQL. Se usa una instruccién PHP para conectarse a la base de datos correcta, diciéndole a PHP dénde esta localizada la base de da- tos, su nombre y la contrasefia necesaria para conectarse a ella. La base de datos, no necesita estar en la misma maquina que su sitio web; PHP puede comunicarse ‘con una base de datos a través de una red. Se usa otra instrucci6n PHP para en- viar indicaciones a MySQL. Se envia un mensaje en SQL a través de la conexion dandole instrucciones a MySQL sobre la tarea que usted desea que se realice. MySQL devuelve un mensaje de estado que muestra si ha realizado la tarea exito- samente. Si hubo un problema, devuelve un mensaje de error. Si su mensaje en SQL pidié recuperar algunos datos, MySQL envia los datos que solicit6 y PHP los almacena en una ubicacién temporal donde estaran a su disposici6n. Luego usted debe usar una o mas instrucciones PHP para completar la tarea dela aplicacién, Por ejemplo, puede usar instrucciones PHP para mostrar los datos que recuperd. O puede usar instrucciones PHP para mostrar un mensaje de estado en el explorador, informandole al usuario, por ejemplo, que los datos fueron guardados. 8 oo 08 OU Oo UU , Dado que es un SABD relacional, MySQL puede guardar informacién muy com- pleja. Como lenguaje de programacién, PHP puede realizar manipulaciones de datos muy complejas, ya sean datos que deben modificarse antes de ser guar dados en la base de datos, 0 datos recuperados de una base de datos que de- ben modificarse antes de ser mostrados o usados para otra tarea. Juntos, PHP : y MySQL pueden usarse para crear una aplicacién con base de datos para la Web con un propésito muy complejo y sofisticado. Mantenerse al dia con los cambios en PHP y MySOL PHP y MySQL son software de fuente abierta. Si usted solo ha usado software de los mayores desarrolladores de software —tales como Microsoft, Macromedia o Adobe 20 Parte |: Desarrollar una aplicacién Web con Base de Datos usando PHP y MySQL —se dard cuenta de que el software de c6digo abierto es una especie totalmente di- ferente. Es desarrollado por grupos de programadores que escriben el cOdigo en su tiempo libre, por diversion y sin costo alguno, No hay oficinas corporativas. El software de cédigo abierto cambia con frecuencia, en lugar de una o dos veces al aio, como hace el software comercial. Cambia cuando sus desarrolladores sien ten queesta listo para hacerlo. También cambia répidamente como respuesta a problemas. Cuando se encuentra un problema serio — por ejemplo, una grieta en Ja seguridad —en unos cuantos dias aparece una version nueva que resuelve el problema. Eso sf, no recibiré panfletos llamativos ni verd colorido anuncios en re- vistas durante un afio antes del lanzamiento de una nueva version, Por eso, sino hace un esfuerzo por mantenerse informado, podria perderse el lanzamiento de una versién nueva o desconocer un problema serio con su version actual Visite regularmente los sitios web de PHP y MySQL. Debe conocer la informa- cidn que se publica ahi. Unase a las listas de correo, que a menudo tienen mu- cho trafico. Mientras empieza a conocer PHP y MySQL, la gran cantidad de mensajes electrOnicos en las listas de discusi6n le traerdn informacion valiosa asu casillero de correo electr6nico; puede aprender mucho leyendo esos men- sajes. Muy pronto estar en capacidad de ayudar a otros con base en su propia experiencia, Por lo menos suscribase a lista de correo de avisos, que solo en via mensajes electronicos ocasionalmente. Alli se anuncian los problemas im- portantes y las versiones nuevas. El mensaje electrdnico que recibe de la lista de avisos contiene informacién que debe saber. Ahora mismo, antes de que se le olvide, entre en los sitios web de PHP y MySQL e inscribase en una lista 0 dos enwww.php.net/mailing-lists.php y lists.mysq).com Debe estar al tanto de algunos cambios significativos respecto de versiones anteriores de PHP, pues aplicaciones que funcionan bien en versiones ante riores podrian tener problemas al correr en una versién mas nueva, y vice- versa. Los siguientes son algunos cambios que debe conocer: = Version 5.0.0: Anadi6 soporte para MySQL. 4.1. No incluye automatica- mente soporte para MySQL 4.0; debe incluirse por medio de una opeién cuando se instala PHP. Cambié el nombre del archivo del intérprete de PHP usado con un servidor web de.php a.php-cgi. Version 4.3.1: Arreglé un problema de seguridad en la version 4.3.0. Noes aconsejable continuar corriendo sitios web con la versi6n 4.3.00 anteriores. | Version 4.2.0: Cambié la configuracion predeterminada de register_globals a Off. Es posible que aplicaciones que corran con +} versiones anteriores dependan de que register_globals esté configu- | rado en On y podrian dejar de funcionar con la nueva configuracién. Lo f \ejor es cambiar el cédigo de la aplicacién para que corra con reais f ter_globals configurado en Of f. Version 4.1.0; Introdujo las matrices superglobales. Las aplicaciones escritas con las superglobales (como lo describo en el Capitulo 6) no funcionaran en versiones anteriores. Antes de 4.1.0, debe usar las matri- F ces al estilo antiguo, por ejemplo $HTTP_POST_VARS 2 EO 0 oo UD UU Preparar su ambiente de trabajo Capitulo 2 En este capitulo ‘Tener acceso a PHP y MySQL mediante los sitios web de su compaiia y de empresas de hospedaje de sitios web = Construir su propio sitio web empezando desde cero » Poner a prueba a PHP y MySQL. Ss yrimera tarea, tras haberse decidido a usar PHP y MySQL, es tener ac- ceso a ellos. Quiz a usted le esté esperando, listo con todas las herra- mientas que necesita, un ambiente de trabajo ya montado para el desarrollo de aplicaciones para la web. En caso contrario, sera parte de su trabajo que usted mismo prepare este ambiente de trabajo. Tal vez su trabajo sea crear un sitio web completamente nuevo. En este capitulo describo las herramien- tas que necesita y cémo tener acceso a ellas. Las herramientas necesarias e610 Para montar su sitio web dinémico, necesita tener acceso a las tres herra- mientas de software siguientes: = Un servidor wel } MySQL: El SABD relacional (Sistema Administrador de Base de Datos Re- } lacional/Relational Database Management System) que almacenaré la in- formaci6n de su aplicacién con base de datos para la Web El software que lleva sus paginas web al mundo PHP: El lenguaje de programaci6n que usard para escribir los programas que brindan la funcionalidad dinamica a su sitio web Describo estas tres herramientas detalladamente en el Capitulo 1 22 Parte I: Desarrollar una aplicacion Web con Base de Datos usando PHP y MySQL Encontrar un lugar para trabajar Para crear sus paginas web dinamicas, necesita tener acceso a un sitio web que proporcione sus tres herramientas de software (vea la seccién anter‘or) ‘Todos los sitios web incluyen un servidor web, pero no todos los sitios web proporcionan MySQL. y PHP. Estos son los ambientes mas comunes en los cuales puede desarrollar su sitio web: + Un sitio web montado por una compaiifa en su propio PC: La compa- ia — generalmente el departamento de T! (Tecnologia de informacion) de la compafia — instala y administra el software del sitio web. Su tra- bajo, para los propésitos de este libro, es programar el sitio web, ya sea como empleado de la compania o como contratista ¥ Unsitio web hospedado por una compania de hospedaje web: web se localiza en el PC de la compania de hospedaje web. La compaitia de hospedaje instala y mantiene el software del sitio web y proporciona espacio de su PC para que usted instale los archivos de HTML (HyperText Markup Language/Lenguaje de Marcado de Hipertexto) de un sitio web, Un sitio web que atin no existe: Usted planea instalar y mantener el software del sitio web por si mismo. Podria ser un sitio web de su pro- piedad que est construyendo en su propio PC, o podria ser un sitio web que esta instalando para un cliente en el PC del cliente. Cuanto necesita entender sobre la administracién y operacion del software del sitio web depende del tipo de acceso al sitio que usted tenga. En las pro- ximas secciones, describo estos ambientes con mayor detalle y explico como tener acceso a PHP y MySQL. Un sitio web de la compatia Cuando la compaiia se encarga de manejar el sitio web, usted no necesita en- tender la instalacién y la administracién del software del sitio. La compaiia es responsable de la operacién del sitio web. En la mayoria de los casos, el tio web ya existe y su trabajo es agregar algo, modificar 0 redisenar es web ya existente, En unos cuantos casos, la compaiiia podria estar instalando su primer sitio web, y su trabajo es disefiar el sitio. Cualquiera sea su caso, su responsabilidad es escribir ¢ instalar los archivos de HTML para el sitio web. Usted no es responsable de la operacién del sitio. Usted tiene acceso al software del sitio web mediante el departamento de TI de la compaiia. El nombre de este departamento puede variar en diferentes empresas, pero su funeién es la misma: mantiene los PCs de la empresa funcionando yal da. Si PHP y/o MySQL no estén disponibles en el sitio web de la compaiia, TI ne- cesita instalarlos y ponerlos a su disposicién. PHP y MySQL tienen muchas nan nraninnantiniihhih nih & & fh i bh bb hf O Go Oo 4 ou 0 UYU ow 1. —) bo _b_O- Capitulo 2: Preparar su ambiente detrabajo 23 opciones, pero TI tal vez no entienda cual es la mejor opcidn, e incluso po- dria configurar algunas opciones de un modo inapropiaco para sus proposi- ‘a cambiar las opciones de PHP 0 MySQL, debe solicitar a TI que haga el cambio; usted no podré hacer el cambio por si mismo. Por ejemplo, PHP debe estar instalado de modo que soporte MySQL, asi que si PHP no se est comunicando correctamente con MySQL, TI probablemente tendré que reinstalar PHP con el soporte para MySQL. habilitado. Para que el mundo pueda ver las paginas web de la compaiifa, los archivos de HTML deben estar en un lugar especifico del PC. El servidor web que lleva las paginas web al mundo espera encontrar los archivos de HTML en un directorio especifico. El departamento de TI debe darle acceso al directorio donde deben instalarse los archivos de HTML. En la mayorfa de los casos, usted desarrolla- ray probard sus paginas web en una ubicacion de prueba y luego transferird los archivos completos a su hogar permanente. Dependiendo del acceso que le déTI, usted podra copiar los archivos desde el lugar de prueba hasta el lugar permanente, o bien tendré que transferirlos por medio de FTP (Protocolo de Transferencia de Archivos/File Transfer Protocol), que es un método para co- piar un archivo desde un PC a otro en una red). En algunos casos, por razones de seguridad, los encargados de TI no le darén acceso ala ubicacion perma- nente y preferirén instalar los archivos en esa ubicacién ellos mismos. Para poder usar las herramientas de software para la Web y crear su sitio web dindmico, usted necesita que TI le dé la siguiente informacién: las paginas web. TI debe darle el nombre y la ubicacién del directorio donde se deben instalar los archivos. Ademés, debe saber cémo instalar los archi- vos: copiarlos, enviarlos por FTP, o usando otros métodos. Tal vez necesite una identificacin de usuario y una contrasena para instalar los archivos, j + Laubicacién de las paginas web: Debe saber dénde poner los archivos de | © Elnombre predeterminado del archivo: Cuando los usuarios apuntan sus exploradores hacia un URL, un archivo seré enviado hacia ellos. Elservidor web estd configurado para enviar un archivo con un nombre especifico cuan- doel URL sefala un directorio. El archivo que se envia autométicamente es e! archivo predeterminado. A menudo el archivo predeterminado se llama index.htm o index.html, petoa veces se usan otros nombres como default. htm. Pregunte a TI cémo debe nombrar el archivo predeterminado. i ! f + Una cuenta MySQL: El acceso a las bases de datos MySQL se controla por medio de un sistema de nombres de cuentas y contrasefas. TI confi- © guraré una cuenta MySQL para usted con los permisos apropiados y también le dard el nombre de la cuenta MySQL y su contrasefia. (En el Capitulo 5 explico con detalle las cuentas MySQL.) + La ubicacion de las bases de datos MySQL: Las bases de datos MySQL no tienen que estar ubicadas en el mismo PC que el sitio web. Si las bases de datos MySQL se ubican en un PC diferente al del sitio web, usted necesita saber el nombre del anfitrién (por ejemplo, thor. companyname. com) donde se encuentran las bases de datos. 24 Parte|: Desarrollar una aplicacién Web con Base de Datos usando PHP y MySQL __ La extensi6n del archivo PHI ‘uando se instala PHP, al servidor web |) se le indica que debe esperar instrucciones de PHP en archivos con ex- tensiones especificas. Con frecuencia, las extensiones usadas son php 0. phtm], pero se pueden usar otras extensiones. Las instrucciones PHP en los archivos que no tienen la extensién correcta no seran procesadas. Pregunte a TI cual extensién debe usar para sus programas PHP. Frecuentemente tendré que interactuar con los encargados de'TI, conforme surjan nuevas necesidades. Por ejemplo, tal vez necesite cambiar opciones, tal vez nece- site informacién que le ayude a interpretar un mensaje de error, o tal vez necesite reportar un problema con el software del sitio web. Por eso tener una buena rela- cién con ellos hard su vida mas facil. Acostumbre llevarles galletitas y donas. Una compaiia de hospedaje de sitios web Una compaiiia de hospedaje de sitios web le brinda todo lo que necesita para montar un sitio web, incluyendo espacio en sus PCs y todo el software del si- tio. Solo debe crear los archivos para sus paginas web y pasarlos a la ubica- cién especificada por la compafiia de hospedaje. Millones y millones de companiias ofrecen servicios de hospedaje en la Web. La mayoria cobra una tarifa mensual (generalmente muy pequena), e incluso hay algunas gratuitas. (La mayoria, pero no todas, de las gratuitas tienen co- mo requisito que usted publique anuncios). Generalmente, la tarifa mensual varia dependiendo de los recursos brindados para su sitio web. Por ejemplo, un sitio web con 2MB de espacio en disco para los archivos de su pagina web costaria menos que un sitio con 10MB de espacio en disco. jo web, aseg Cuando busque un lugar para hospedar su rese de que la compahia de hospedaje ofrezca lo siguiente: | PHP y MySQL: No todas las compaiiias brindan estas herramientas, Tal vez tenga que pagar mas por un sitio con acceso a PHP y MySQL; algunas veces tendré que pagar una cuota adicional por usar bases de datos MySQL. k | Una version reciente de PHP: A veces no se ofrecen las versiones mas } recientes de PHP. Ni siquiera debe considerar un sitio web que sélo ten- ga acceso a PHP 3. Necesita PHP 4 por lo menos. Preferiblemente debe- » ria tener acceso a PHP 5. Alelegir una compaiia de hospedaje debe tomar en cuenta estas otras const. deraciones: § Confiabilidad: Necesita una compafia de hospedaje en la cual pueda | confiar: una que no vaya a quebrar repentinamente y desaparecer matia- J na,y una que no use PCs antiguos sostenidos con chicle y alambre para 5 embalar, de esos que pasan mas tiempo cafdos que en servicio. ea a es es 4 ff ® ® # 4 ff fo ff ¢. ff oo ff & & 2 Capitulo 2: Preparar su ambiente de trabajo 1 Velocidad: Las paginas web que se descargan lentamente son un problema, f porque los usuarios se ponen impacientes y se van a otra parte. Las paginas entas pueden ser el resultado de una compafifa de hospedaje que empezé su negocio con escasos recursos y que carece de equipo de buena calidad —o quizé la compania de hospedaje sea tan exitosa que su equipo esta sobrecar- gado por clientes nuevos. De cualquier modo, las compatiias de hospedaje que despliegan las paginas web muy lentamente son inaceptables | Soporte técnico: Algunas compahias de hospedaje no tienen a nadie dispo- nible para responder preguntas 0 resolver problemas. El soporte técnico a menudo se brinda s6lo por correo electrénico, lo cual puede ser aceptable siel tiempo de respuesta es corto. A veces es aconsejable probar la calidad del soporte técnico de la compaiifa llamando al nimero de soporte o pro- bando su tiempo de respuesta enviandoles un correo electronico. + Elnombre del dominio: Cada sitio web tiene un nombre de dominio que los + exploradores web usan para encontrar el sitio en la Web. Cada nombre de do- | minio se registra con el pago de una pequena tarifa anual, de modo que solo un {sitio pueda usarlo, Algunas compaiias de hospedaje le permiten bre de dominio que usted ha registrado independientemente de la compaii de hospedaje; algunas le ayudan a registrar y usar un nombre de dominio nue- vo; y algunas requieren que usted use un nombre de dominio definido por ellas. Por ejemplo, suponga que su nombre es Lola Diseftadora y desea que st. sitio web se llame LolaDisenadora. Algunas companias dle hospedaje le permi- tirdn llamar asu sitio web 0] amuest ra . con, pero algunas requerirén que su sitio se lame Lolamuestra.empresa.com, 0 empresa. com/~Lolamuestra ‘algo parecido. En general, su sitio web se verd mas profesional si usted usa su propionombre de dominio. Respaldos: Los respaldos son copias de los arc! | subase de datos que estan almacenados en caso de que sus archivos 0 base f — dedatos se pierdano se dafen. Debe asegurarse de que la compaitia haga co- pias de respaldo desu aplicacién con frecuencia y rutinariamente, También debe averiguar cuanto tardarn en colocar los respaldos en su lugar para re taurar el funcionamiento normal de su sitio web después de un problema | 1 Caracteristicas: Seleccione las caracteristicas con base en el propdsito de su sitio web. Generalmente las companiia de hospedaje agrupan las caracteristicas en planes, y més caracteristicas = costos mayores. Algu- nas caracteristicas que debe tomar en cuenta son: ‘+ Espacio en disco: ;Cudntos MB/GB de espacio en disco requerira su sitio web? Los archivos de medios, tales como graficos o archi- vos de misica pueden ser bastante grandes. + Transferencia de datos: Algunas companfas de hospedaje cobran por enviar paginas web a los usuarios. Si espera tener mucho tré- fico en su sitio, sera importante considerar este costo, * Direcciones electrénicas: Muchas compaiias de hospedaje le brinda una cantidad de direcciones electr6nicas para su sitio web. Por ejemplo, Parte |: Desarrollar una aplicacién Web con Base de Datos usando PHP y MySQL 26 sisusitioes Lolamuestra. com, usted podria permitirles alos usuarios quele envien mensajes electrénicos a yo@Lo] nuestra .com + Software: Las compaiias de hospedaje ofrecen una buena varie- dad de software para e! desarrollo de aplicaciones para la Web, PHP y MySQL. son el software que comento en este libro, Algunas compaiiias de hospedaje podrian ofrecer otras bases dle datos y al- gunas podrian ofrecer otras herramientas de desarrollo tales como extensiones de FrontPage, software para carritos de compras y va- lidaci6n de tarjetas de crédito. + Estadisticas: A menudo es posible obtener estadisticas relaciona- das con el tréfico en su sitio web, por ejemplo el namero de usua- rios, la hora de acceso, el acceso por pagina web, etcétera Nombres de dominio Cada sitio web necesita una direccién dnica en Ja Web. Esa direccién Gnica que usan los PCs para localizar un sitio web es la direccion IP, la cual es un arreglo de cuatro nimeros entre Oy 255, separados por puntos; por ejemplo, 172.17.204.2 0.192.163.2.33 Como las direcciones IP constan de niimeros y puntos, no son faciles de recordar. Afortunada- mente, la mayoria de las direcciones IP tienen un nombre asociado que es mucho mas facil de recor- dar,tal como amazon.com, www.irs.gov Oo miempresa.com. Unnombre que sea la direc- cién de un sitio web es un nombre de dominio. Un dominio puede ser un PC o muchos PCs interco- nectados. Cuando un dominio se refiere a varios PCs, cada PC en el dominio puede tener su propio nombre. Un nombre que incluya el nombre de un PC individual, tal como thor .miempresa.com, identifica un subdomini. Cada nombre de dominio debe ser ‘nico para ‘que pueda servir como direccién. Por lo tanto, un sistema de registro de nombres de dominio ge rantiza que no haya dos ubicaciones que usen el mismo nombre de dominio. Cualquiera puede re- gistrar un nombre de dominio siempre y cuando el nombre esté libre. Usted puede registrar un nombre de dominio en la Web. Primero, pruebe su nombre de dominio potencial para averiguar siesté disponible. Silo esta, registrelo bajo su nombre o el nombre de su compatia, pagandola tarifa correspondiente. El nombre sera suyo y 10 pdr usar, nadie més podré usarlo Latarifa es- ‘téndar para registrar un nombre de dominio es ‘$35 por afio, No se debe pagar nunca més, pero ‘a menudo hay gangas. Muchos sitios web ofrecen la capacidad de re- gistrar un nombre de dominio, incluyendo los si: tios web de muchas compariias de hospedaje. Una bisqueda en Google (wiw.goog)e. con) de registro de nombre de dominio da como resul- tado més de 3 millones de aciertos. Busque para asegurarse de encontrar el precio més bajo. Ade- més, muchos sitios web le permiten digitar un nombre de dominio para saber quién lo regstr. Estos sitios web hacen una bisqueda de bases de datos de nombres de dominio usando una he- rramienta lamada whois (quién es). Una biisque- da en Google de nombre de dominio whois resulta en 770,000 aciertos. Un par de lugares donde puede ir para hacer una bisqueda whois son Allwhois.com (www. Iwhots .com)y Bet- terWhois.com (ww. bet terwhots: cont. SS ae a. a 2a a a2 @ 2 2-22 a 2222 2 222i Capitulo 2: Preparar su ambiente de trabajo §=-2 7 Una desventaja de hospedar su sitio en una compaiia de hospedaje comer- cial es que usted no tendra control sobre el ambiente de desarrollo, La com- pania de hospedaje de sitios web brinda el ambiente que funciona mejor para élla, probablemente un ambiente configurado para que el mantenimiento sea sencillo, de bajo costo y con un mfnimo de retiro de clientes. La mayor parte de su ambiente lo configura la compaiiia y usted no lo puede cambiar. Solo puede rogarle a la compaiiia que lo cambie. La compaiia no estara anuente a cambiar la configuracion por temor a que un cambio pueda causar proble mas en el sistema de la compania 0 a otros clientes, El acceso alas bases de datos MySQL se controla por medio de un sistema de cuentas y contrasefias que debe mantenerse manualmente, lo cual causa tra- bajo adicional para la compaiiia de hospedaje. Por esta raz6n, muchas compa- iiias de hospedaje no ofrecen MySQL o cobran extra por él. demas, PHP tiene un millon de opciones que puede configurarse, desconfigurarse o recibir mal- tiples valores, La compaiia de hospedaje decide las opciones de configuracin con base en sus necesidades, lo cual puede ser 0 no ideal para sus propésitos. Es bastante dificil investigar las compaiiias de hospedaje de sitios web par- tiendo desde un Gnico punto — una bésqueda en Google.com de hospedaje de sitios web resulta en mas de 6 millones de aciertos. La mejor manera de investigar compaiifas de hospedaje es pidiéndole recomendaciones a las per- sonas que han tenido experiencia con esas compaias. Las personas que han usado una compaiia de hospedaje pueden advertirle si el servicio es lento 0 si los PCs se caen a menudo. Después de recopilar unos cuantos nombres de compaiiias de hospedaje de clientes satisfechos, puede delimitar la lista a la que mejor se adapte a sus propésitos y sea mas rentable. Montar y manejar su propio sitio web Si esta iniciando un sitio web desde cero, necesitaré comprender muy bien el software del sitio. Tiene que tomar varias decisiones relacionadas con el hardware y el software. Tiene que instalar un servidor web, PHP y MySQL, a como mantener, administrar y actualizar el sistema usted mismo, Tomar esta ruta requiere de mas trabajo y mas conocimiento. La ventaja es que tiene el control total sobre su ambiente de desarrollo de aplicaciones web. Estos son los pasos generales que le conduciran a su sitio web dinémico (en las secciones siguientes explico estos pasos con més detalle): 1. Prepare el PC. 2. Instale el servidor web. 3. Instale MySQL. 4, Instale PHP. 28 Parte: Desarrollaruna aplicacién Web con Base de Datos usando PHP y MySQL 80 Si esta empezando desde cero, con nada mas que un espacio vacio donde co- locard el PC, empiece en el Paso 1. Siya tiene un PC en funcionamiento, pero no tiene software de desarrollo web, empiece en el Paso 2. 0 si ya tiene un si- tio web pero no tiene PHP ni MySQL instalados, empiece en el Paso 3 Preparar et PC Su primera decision es escoger cual plataforma de hardware y cual sistema operativo usar, En la mayoria de los casos, escogerd un PC con Linux o Win- dows como sistema operativo. Estas son algunas ventajas y desventajas de estos sistemas operativos: f Linux: Linux es de fuente abierta, asi que es gratis. También tiene ventajas |__ para ser usado como servidor web: corre por largos periodos dle tiempo sin necesidad de ser reiniciado;y Apache, el servidor web mas popular, funciona mejor con Linux que con Windows. Correr Linux en un PC es la opcidn de me- nor costo. La desventaja es que para muchas personas Linux es més dificil de instalar, configurar, administrar ¢ instalarle software que Windows. Windows: A diferencia de Linux, Windows no es gratis. Sin embargo, las § _ ventajas son que la mayoria de personas cree que Windows es mas facil 5 deusar y, como es ampliamente utilizado, muchas personas le pueden ayudar si tiene problemas. Asumiré que comprara un PC con el sistema operativo y el software instala- dos, listos para usar. Es mas facil encontrar un PC que venga con Windows instalado, pero si se consiguen PCs con Linux instalado. Por ejemplo, acttal- mente Dell, IBM y Hewlett-Packard ofrecen PCs con Linux instalado. Siesta construyendo su propio hardware, necesita mas informacion de la que le puedo brindar en el breve espacio de este libro. Si tiene el hardware y planea insta- lar el sistema operativo, Windows es mas facil de instalar, pero Linux se est hacien- do cada dia mas facil. Puede instalar Linux desde un CD, como Windows, peroa menudo debe proporcionar informacién o tomar decisiones que requi nocimiento mas profundo de su sistema. Si usted ya sabe como realizar las tareas de administraci6n del sistema en Windows 0 en Linux (tal como instalar software y ha- cer respaldos), la solucién mas répida es usar el sistema operativo que ya conoce. Si vaa usar PHP y MySQL debe considerar seriamente usar Linux. PHP es un proyecto de la Apache Software Foundation, asi que corre mejor con el servi- dor de Apache. Y Apache corre mejor en Linux que en Windows. Por lo tanto, siel PC ser usado principalmente para correr un sitio web con aplicaciones con bases de datos, Linux es perfectamente adecuado para sus propésites. Hay otras soluciones ademas de un PC con Windows o Linux, pero son menos populares: {J — Con base en Unix: Hay otros sistemas operativos gratuitos basados en Unix disponibles para PCs, tales como FreeBSD (algunos personas lo prefieren a Linux) 0 una versi6n de Solaris que Sun permite descargar gratuitamente. oe _____ Capitulo 2: Preparar su ambiente de trabajo {* Mac: Los equipos Mac pueden usarse como servidores web. Los Mac mas } nuevos vienen con PHP instalado. Instalar PHP y MySQLen Mac OSX es | bastante simple. Sin embargo, hay menos usuarios de Mac, asi que sera diff- cilencontrar ayuda cuando la necesite. Un buen sitio es www . phpmac Como instalar el servidor web Después de configurar el PC debe decidir cudl servidor web instalar. La res- puesta casi siempre es Apache. Apache ofrece las siguientes ventajas: § > Es gratis. ;Hace falta decir algo mas? +» Corre en una gran variedad de sistemas operativos. Apache corre en é Windows, Linux, Mac OS, FreeBSD y la mayoria de las variedades de Unix. ©» Espopular. Aproximadamente el 60 por ciento de los sitios web en § Internet usan Apache, segin encuestas en www .netcraft.com/survey ¥ www. securityspace.com/s_survey/data/. Estonoseriaasisi no funciona- rabien, Ademas, esto significa que un gran ntimero de usuarios podra ayudarlo, } Es confiable. Una vez que Apache esté instalado y funcionando, funcio- naré el tiempo que lo haga su PC. Es muy raro tener problemas de emer- gencia con Apache, Se puede personalizar. La licencia de fuente abierta permite a los pro- gramadores modificar el software de Apache, agregando o modificando médulos para adaptarlo a los ambientes especificos. en un servidor SSL (Capa de “Sockets” /Terminal segura). La seguridad es esencial si va a usar el sitio para comercio electr6nico. ' ' j | Es seguro. Existe software gratuito disponible que convierte a Apache Apache se instala automaticamente al instalar la mayoria de las versiones de Li- rnux. Los Macs més recientes traen Apache instalado. Para la mayorfa de las va- riedades de Unix, hay que descargar el cédigo fuente de Apache y compilarlo uno mismo, aunque hay disponibles algunos binarios (programas ya compila- dos para sistemas operativos especificos). Para Windows, usted necesita insta- lar un archivo binario, preferiblemente en Windows NT/2000/XP, aunque Apache también corre en Windows 95/98/Me. Al momento de escribir esto, Apache 1.3.28 y 2.0.47 son actualmente las versiones estables. (Mas informacién sobre las versiones de Apache esta disponible en el Apéndice C.) Consulte el sitio web de Apache (ht tpd. apache .org) para mayor informaci6n, descargar software, documentacién e instrucciones de instalacién para diversos sistemas operati vos. El sitio brinda amplia documentacién, constantemente mejorada. Hay otros servidores web disponibles. Microsoft ofrece IIS (Internet Informa- tion Server / Servidor de informacién de Internet), el cual es el segundo ser dor web mas popular en Internet, usado en aproximadamente el 27 por ciento de los sitios web. Sun ofrece iPlanet (anteriormente Netscape Enterpri se Server) que sirve a menos de un 5 por ciento de Internet. Hay otros servi- dores web disponibles, pero sus bases de usuarios son ain mas pequefias, 29 ee 3 0 Parte |: Desarrollar una aplicacion Web con Base de Datos usando PHP y MySQL ____ Como instalar MySOL Después de configurar el PC e instalar el servidor web. esti fist® Pitt instalar MySOL. Debe instalar MySQL. antes de instalar PHP, pues debe brindar la ruta al software de MySQL al instalar PHP. Pero antes de instalar MySQL. asegtirese de que realmente necesita jalar- Jo. Quiza ya esté corriendo en su PC, 0 quiza esté instalaclo perv 1 esté co- 1 ofa. Muchas versiones de Linux, por ejemplo, instalan automatic ‘amente MySQL. Esta es la manera de verificar si MySQL. ya est corriendo en su PC: Linux/Unix/Mac: En la linea de comandos, digite lo siguiente: bps -ax 6E0 El resultado ser una lista de programas. Algunos sistemas operative S (generalmente variedades de Unix) tienen opciones diferentes Putt al ceryando ps. Si el comando anterior no produce una lista de programs | Gue estén corriendo, digite man ps para ver cuales opciones debe usar. sla lista de programas que aparece, busque uno lamado nysq)¢ 1 Windows: Si MySQL esta corriendo, deberd verlo en su bandeja de 7 na en la parte inferior de su pantalla, posiblemente como un semiloro mn cana luz verde. Si no puede encontrar este icono lo mas probable es que no esté corriendo. Pero MySQL puede estar instalado aunque no esté corrienclo, quizé no ha ac- teeeie sia es la manera de revisar si MySQL esta instalado en su PC » Linux/Unix/Mac: Digite lo sigulente: find / -name "mysql?" si aparece un directorio llamado mysql, MySQL. ya ha sido ins alado. © Windows: Busque el programa llamado WinMySQLadmin ae, entre 1 Gras funciones, inicia y detiene a MySQL. Probablemente lo encontraré otras neni Inicio (escoja Start®Programs). Sino, bitsquelo en tn diree- \nysql \bin torio MySQL, que probablemente sera 1ySQI. esté instalado pero no se ha activado, esto es lo que debe hacer pa- ra activarlo: 4 Linux/Unix/Mac: ‘ambiese al directorio mysql /bin. s80 Sy Este es el directorio que habré encontrado al verificar si MySQL es- taba instalado. CG 2. Digite safe_mysqld & t Cuando este comando termina, aparece el prompt Capitulo 2: Preparar su ambiente de trabajo ' 3. Verifique que el servidor MySQL se haya activado digitando ps-ax. En la lista de programas que aparece, busque uno llamado mysqld + Windows: 1. Inicie el programa WinMySQLadmin Sino lo puede encontrar en el meni, navegue hacia el programa, que probablemente estar enc: \mysq] \bin\winmysql admin. ¢ xe y haga doble clic en él 2. Haga clic derecho en la ventana WinMySQLadmin. Apareceré un submenti é 3, Seleccione el elemento del ment para su sistema operativo: Win 9x o Win NT que incluye Win 2000 y XP). 4, Haga clic en Start the Server. Si MySQL no esta instalado en su PC, debe descargarlo de wuw.mysql cone instalarlo. El sitio web brinda toda la informacién y el software que necesita. (Econtrara instrucciones de instalacion detalladas en el Apéndice A.) Como instalar PHP Después de instalar MySQL, est listo para instalar PHP. Como mencioné ante- riormente, debe instalar MySQL antes de instalar PHP porque necesita brindar la ruta al software de MySQL cuando instala PHP. PHP no podra comunicarse con MySQL si al instalarse no se compila con soporte para MySQL. Antes de instalar PHP, verifique si ya est instalado. Algunas versiones de Li- nux y Mac, por ejemplo, instalan autométicamente PHP. Para ver si PHP esta talado, busque en su disco cualquier archivo de PHP: v Linux/Unix/Mac: Digite lo siguiente: find / -name “php*" § Windows: Use la opcién Find (escoja StartFind) para buscar php* Siencuentra archivos de PHP, PHP ya esta instalado, y quiz no necesite reins- talarlo, Es posible que incluso si instalé MySQL usted mismo después de insta- lar PHP, lo haya instalado en el lugar donde PHP espera que esté. Pero mejor prevenir que lamentar: Ileve a cabo la prueba que describo en la seccién si- guiente para ver si MySQL y PHP estan funcionando juntos correctamente. Sino encuentra ningiin archivo PHP, PHP no esta instalado. Para instalar PHP, de- be tener acceso al servidor web desu sitio. Por ejemplo, cuando instala PHP con Apache, debe editar el archivo de configuraci6n de Apache. Toda la informacion yel software que necesita los encontrard en el sitio web de PHP (www. phip .net), Enel Apéndice B encontrar instrucciones detalladas para su instalaci 31 32 Patel: Desarotiar ua aplicacion Web con Base de Datos usando PHP y MySOL Probando, probando, 1, 2, 3 Suponga que cree que PHP y MySQL. estan disponibles para ser usados, por alguna de las razones siguientes El departamento de TI de su compaiia o de la compania de su cliente le dio toda la informacién que usted solicité y le dijeron que todo esta listo | para continuar. La compaiia de hospedaje de sitios web le dio toda la informacion que usted necesita y le dijo que todo esté listo para continuar. 1 Siguié todas las instrucciones e instalé PHP y MySQL usted mismo. ‘Ahora debe hacer algunas pruebas para asegurarse de que PHP y MySQL es- tén funcionando correctamente. Someter PHP a prueba Para comprobar si PHP esta instalado y funcionando, siga estos pasos: 1, Encuentre el directorio en el cual deben guardarse sus programas de PHP. Este directorio y los subdirectorios dentro de él son su espacio web. Apa- che llama a este directorio el Documento Raiz. El espacio web predetermi nado de Apache es htdocs en el directorio donde Apache esta instalado. EnllSes Inetpub\wwwroot. En Linux podria ser /var/www/html. Eles- pacio web se puede determinar en tn directorio diferente configurando el servidor web (consulte el Apéndice C). Siesta usando una compania de hospedaje de sitios, el personal le suministrara el nombre del directorio. 2. Cree el siguiente archivo en alguna parte de su espacio web con el nombre test . php. Prueba PHP El archivo debe guardarse en su espacio web para que el servidor web pueda encontrarlo. a wh hh, nae ee,_eanr s&s Capitulo 2: Preparar su ambiente de trabajo 33 3. Dirija su explorador al archivo test.php creado en el Paso 1. Es decir, digite el nombre de su servidor web (www.mifinaempresa.com) en la ventana de direcci6n del explorador. Si su servidor web, PHP y el archivo test . php estan en el mis ‘el que esta haciendo la prueba, puede digitar localhost/test.php no PC en Para que el archivo sea procesado por PHP, usted debe tener acceso al archivo mediante el servidor web, y no escogiendo File?Open desde el ment de su explorador web. Debera ver lo siguiente en el explorador web: Esto es una linea HTML Esto es una linea PHP Debajo de estas lineas deberia ver una gran tabla que muestra toda la in- formacién asociada con PHP en su sistema. Muestra la informacion PHP, la ruta y los nombres de archivos, los valores de las variables y el estado de algunas opciones. La tabla la produce la linea phpin fo( ) en las ins- trucciones de la prueba, Siempre que tenga una pregunta sobre la confi- guracién de PHP, puede usar la instruccién phpinfo() para mostrar esta tabla y revisar las configuraciones. 4, Verifique los valores PHP de los valores que necesita. Por ejemplo, necesita que el soporte para MySQL esté habilitado. Al re~ correr la lista, encuentre la seccién dedicada a MySQL y asegirese de que el soporte para MySQL esté On 5. Si es necesario cambie los valores. Sino tiene acceso administrativo a PHP, debe pedirle al administrador que cambie cualquier valor que deba ser cambiado. Usted mismo podré cambiar los valores si fue usted quien instalé PHP y/o tiene acceso admi- nistrativo a PHP. (En el Apéndice B discuto cmo cambiar la configura- cin de PHP.) Someter MySOL a prueba Si ya sabe que PHP esta corriendo bien, pruebe si tiene acceso a MySQL usando PHP. Solo siga estos pasos: 1. Cree el siguiente archivo en alguna parte de su espacio web con el nombre mysq]_up. php. Puede descargar el archivo de mi sitio web en janet. valade.com. 34 Parte: Desarroliar una aplicacién Web con Base de Datos usando PHP y MySQL mysql_up.php --> <2php Shost=" hostname" ; $user="mysglaccount" ; Spassword="mysq/password” ; mysql_connect ($host, $user, $password); $sql="show status"; $result = mysql_query ($sql) if ($result == 0) echo "Error ". mysql_errno() + mysql_error(). "": else { D

" $row_array ~ mysql_fetch_row($result); for ($j = 0 ( echo “". $row_array[$j]. "" ) echo ""; } »
Variable_nameValue <2php for ($i = 0; $1 < mysql_numrows(Sresult); $i++) | echo "
$3 < mysql_num_fields($result); $i++) 2. Las lineas 6, 7 y 8 del programa deben cambiarse. Estas lineas son thost="host*: Suser="mysq] account $password="mysql password” ; Cambie “Lastname” por el nombre del PC donde esta instalado MySQL, por ejemplo databasehost .mi compaitia.com. Si la base de datos MySQL esta en el mismo PC que su sitio web, puede usar localhost co- mo el nombre del anfitri6n. Cambie mysqlaccountname y mysql password a los valores apropia- dos. (Comento las cuentas y las contraseiias de MySQL en el Capitulo 5). Si su cuenta MySQL no requiere contrasefia, no digite nada entre las co- millas, como sigue: Capitulo 2: Preparar su ambiente detrabajo = 3.5 Spassword: 3. Dirija su explorador a mysql_up. php Deberia ver una tabla con una larga lista de nombres y valores dle varia- bles. No querra ver un mensaje de error o un mensaje de advertencia. No se preocupe por el contenido de la tabla, Lo Gnico importante es que aparezca la tabla, para asi saber que su conexién a MySQL esta funcio- nando correctamente. Si no aparece ningiin mensaje de error o de advertencia, MySQL es! funcionando bien. Si ve un mensaje de error o de advertencia, debe co- rregir el problema que esté provocando el mensaje. Los mensajes de error y advertencia generalmente son muy claros. El siguicn- te es un mensaje de error comin. MySQL Connection Failed: Access denied for user ‘user73@localhost’ (Using password: YES) Lo que este mensaje quiere decir es que MySQL no acepté el ntimero de su cuenta MySQL 0 su contrasefta MySQL. Note que el mensaje dice YS para Using password, pero por razones de seguridad no muestra la contraseiia que usted digit6. Si intent6 con una contrasefia en blanco, el mensaje diria NO. Si recibe un mensaje de error, vuelva a revisar el nimero de su cuenta y su contrasefia. Recuerde que este es su némero de cuenta MySQL, y no su nt mero de cuenta para registrarse en el PC. Sino se puede conectarse con el nimero de cuenta y contrasefia que tiene, deberd contactar al departamento Tloa la compafiia de hospedaje que le dio su némero de cuenta. (Consulte el Capitulo 5 para una discusin mas exhaustiva sobre las cuentas y las contra- sefias de MySQL.) Capitulo 3 Desarrollar una aplicacion Web con base de datos En este capitulo » Planear su aplicacion Seleccionar y organizar sus datos » Disefiar su base de datos Resumen de la construcci6n de su base de datos Resumen de la escritura de los programas para su aplicacion Deve una aplicacion con base de datos para la Web no se reduce a al: 'macenar informacion en bases de datos MySQL y digitar programas en PHP. El desarrollo debe empezar con el planeamiento, Construir las partes de la aplicacién se hace después del planeamiento. Los pasos del desarrollo son: 1. Desarrollar un plan, enumerando las tareas que su aplicacion debe realizar. 2. Disefar la base de datos necesaria para las tareas de su aplicaci 3. Construir la base de datos MySQL, con base en el disefio de la base de datos. 4, Escribir los programas con PHP que realizardn las tareas de la aplicacion. En este capitulo comento detalladamente estos pasos, Planear su aplicacién Web con base de datos ‘Antes de poner un dedo en el teclado para escribir un programa en PHP, debe planear su aplicacién. Este es probablemente el paso més importante en el desarrollo de su aplicacién, Es muy doloroso descubrir, especialmente justo después de haber terminado el tiltimo programa para su aplicacién, que dej6 38 Parte :Desarroliar una aplicacién Web con Base de Datos usando PHP y MySQL eso 3s algo por fuera y que tendra que empezar de nuevo desde el principio. jTam- bién ser4 dificil para su PC (y para sus pies) si usted se libera de sus frustra- ciones patedndolo por toda la habitacion! Un buen planeamiento evita esos dolorosos retrocesos. Ademés, le ayuda a concentrarse en las funciones propias de su aplicacién, lo cual evitard que us- ted escriba partes de la aplicacion que hagan cosas realmente llamativas pero que no tengan ningdin propésito real en la aplicacion terminada. Y si mas de una persona esta trabajando en su aplicacion, el planeamiento garantiza que al final todas las partes encajen. Identificar lo que espera de la aplicacion EI primer paso de la fase de planeamiento es identificar exactamente por qué esta desarrollando su aplicacion y qué espera de ella, Por ejemplo, su propo sito principal podria ser: + Recopilar los nombres y las direcciones de los usuarios de modo que pueda crear una lista de clientes. » Darle a los usuarios logo para clientes. formacion sobre sus productos, como en un caté- | Vender productos en linea, © Brindar soporte técnico a personas que ya poseen sus productos. Después de haber identificado claramente el propésito general de su aplica- cién, haga una lista de lo que exactamente espera que haga la aplicacion. Por ejemplo, si su meta es desarrollar una base de datos con los nombres y las di- recciones de sus clientes para propésitos de mercadeo, la lista de tareas re- queridas de la aplicacién es bastante corta {: Brindar un formulario para que lo Henen los clientes. » Almacenar la informacién de los clientes en una base de datos. Si su meta es vender productos en linea, la lista es un poco més larga: Brindar a los clientes informacién sobre sus productos. + Motivar al cliente para que compre el producto. + Proporcionar una manera para que el cliente ordene el producto en linea. + Proporcionar un método para que el cliente pague por el producto en linea. | Validar el pago de modo que sepa que realmente va a recibir el dinero. j 7 Enviar el pedido ala persona responsable de alistary enviar el producto al cliente. Capitulo 3: Desarrollar una aplicacion Web con base dedatos © 3Q En este punto del proceso de planeamiento, las tareas que desea que su apli- caci6n realice son todavia bastante generales, Puede cumplit cada una de es- tas tareas de muchas maneras diferentes. Ahora debe examinar las tareas de cerca y detallar con exactitud cémo las cumpliré la aplicaci6n. Por ejemplo, si su meta es vender productos en linea, podria ampliar la lista anterior asf ® + Brindar a los clientes informacién sobre sus productos. de productos. Cada categoria es ‘+ Mostrar una lista de las categor' un vinculo. * Cuando el cliente hace clic en el vinculo de una categorfa, aparece la ta de productos de esa categoria. El nombre de cada producto es un enlace. * Cuando un cliente hace clic en el vinculo de un producto, aparece la descripcién del producto. | Motivar al cliente para que compre el producto. | + Presentar descripciones de los productos muy bien escritas y que comuniquen sus cualidades obviamente superiores * Usar fotos que favorezcan a sus productos. ‘+ Hacer que estén disponibles en linea folletos a color sobre los productos. * Ofrecer descuentos por cantidad. 1 Proporcionar una manera para que el cliente ordene el producto en linea. * Incluir un bot6n en el que los clientes puedan hacer clic para indi car su intencién de comprar el producto. * Incluir un formulario que recopile la informacién necesaria sobre el producto que el cliente est ordenando, tal como su tamafio, color, etc. + Calcular y mostrar el costo total de todos los articulos en el pedido. * Calcular y mostrar los costos de envio. k * Calcular y mostrar el impuesto de ventas. * Incluir formularios para que los clientes digiten sus direcciones de envio y de cobro. Proporcionar un método para que el cliente pague por el producto en linea. * Incluir un bot6n en el que los clientes puedan hacer clic para pagar con una tarjeta de crédito. ‘+ Mostrar un formulario que recoja la informacion de la tarjeta de crédito de los clientes. + Validar el pago de modo que sepa que realmente vaa recibir el dinero. El método usual es enviar la informacién de la tarjeta de crédito del & cliente a un servicio de procesamiento de tarjetas de crédito. § > Enviar el pedido a la persona responsable de alistar y enviar el pro- ducto al cliente. GO Pate: Desarolar una aplicacion Web con Base de Datos usando PHP y MySQL __ Bastard con enviar la informaci6n del pedido por correo electronico al departamento de envio. En este punto usted ya debe tener una idea bastante clara de lo que desea dest aplicacion con base de datos. Sin embargo, esto no significa que sis melas MH ao eetambiar (De hecho, sus metas probablemente cambiaran mientras desarrola Suaplicacién y descubre postbilidaces nuevas). Alinicio del proyecto embiset conun plan tan completo como le sea posible, de esa manera se mantend ot centrado y evitara topar con callejones sin salida o desviarse de la meta orgh nal Tome en cuenta a los usuarios Identificar lo que usted espera que haga su aplicacién con base ce datos part Me Neb es solo un aspecto del planeamiento. También debe tomar en cuenta lo que sus usuarios querrén de ella, Por ejemplo, digamos que su meta es rere tanalista con los nombres y las direcciones de sus clientes para propositos I Mercado, zEstaran dispuestos sus clientes a entregar esa informacion? Su aplicacién tiene que cumplir un propésito para los usuarios al igual que pate sted. Sino es as la ignorardn, Antes, por ejemplo, de que los usuarios estén d puestos a darle sus nombres y direcciones, necesitan percibir que al darleesain- formacion se beneficiaran de alguna manera. Estos son ejemplos de por qué te tarfan dispuestos los usuarios a registrar sus nombres y direcciones en su sito: Para recibir un boletin: Para que lo consideren valioso, el boletin debe cu brit la industria relacionada con sus productos. Debe ofrecer noticias y terr dencias, y no solo servir como espacio de mercadeo para sus productos Para participar en una rifa con un buen premio: Quién va a rechafar la oportunidad de ganar unas vacaciones con todos los gastos pagados a Hawai, o una camioneta familiar completamente nueva? Para recibir descuentos especiales: Por ejemplo, periddicamente podria olrecerles a sus clientes descuentos especiales por correo electronico. Para ser notificado sobre productos nuevos 0 mejoras en los produc: tos, tan pronto estén disponibles: Por ejemplo, a los clientes les podria interesar que se les notifique cuando haya actualizaciones de software listas para descargar. 1 Para tener acceso a informacién valiosa: Por ejemplo, debe registrarse en el tioweb de'The New York Times para tener acceso a sus articulos en linea. Agregue, a continuacién, las tareas desde la perspectiva de los clientes a lalis- tade tareas que usted quiere que la aplicacion realice. Por ejemplo, suponga {que ya identificé esta lista de tareas necesarias para montar en linea una ier- da de ventas al detalle: # Brindar un formulario para que lo Hlenen Jos clientes. * Almacenar la informacion de los clientes en una base de datos: SEUEUENEEERRURUDUE Lo, ye 5 Capitulo 3: Desarrollar una aplicacion Web con base de datos Si toma en cuenta el punto de vista del cliente, la lista se amplia un poco: § Presentar una descripcién de las ventajas que tendran los clientes si se registran en el si § Brindar un for mulario para que lo llenen los clientes. § 1 Agregar las direcciones electrénicas de los clientes a la lista de distribu- | ci6n del boletin. Almacenar la informaci6n de los clientes en una base de datos. 1 lista incluye las tareas que usted desea y las tareas que sus usuarios de- sean, tiene un plan para una aplicaci6n web que valdra la pena desarrollar, y que desde el punto de vista de sus usuarios valdra la pena usar. Hacer que el sitio sea fécil de usar Ademas de planear lo que su aplicaci6n web vaa hacer, debe considerar: vaa hacer. Hacer que su aplicacin sea facil de usar es importante: sus clientes no comprardn sus productos si no los pueden encontrar. Y silos clientes no encuen- tran la informaci6n que necesitan en un tiempo relativamente corto, buscaran en otro lugar. En la Web, los clientes siempre pueden irse facilmente para otro lugar. Hacer su aplicaci6n facil de usar es ingenieria de usabilidad. La usabilidad en la Web incluye cosas como: 1 Navegaci6n: Para el usuario debe ser inmediatamente obvio qué hay en su sitio y dénde esté localizado. ¥ Graficos: Los grificos hacen que su sitio sea atractivo, pero los archivos de graficos pueden ser muy lentos de mostrar. Acceso: Algunas decisiones sobre el disefio pueden hacer que su aplica- ci6n sea 0 no accesible a los usuarios con discapacidades tales como problemas visuales, Exploradores: Diferentes exploradores web (incluso versiones diferentes del mismo explorador) pueden mostrar el mismo archivo de HTML (Lenguaje de Marcado de Hipertexto/HyperText Markup Language) en forma diferente. Lausabilidad en la Web es un tema amplio e importante, aunque entrar en mas deta- lles sobre este tema est mas alla del alcance de este libro. Pero no tema, puede en- contrar mucha informacién ttil sobre la usabilidad en la Web —Io adiviné —en la Web. Asegiirese de revisar los sitios web de los expertos en usabilidad Jakob Nielsen (aww .useit. com)y Jarod Spool (ht tp: //wor)d.std..com/~ui eweb/). Vincent Flanders también tiene un sitio divertido lleno de informacién itil sobre el disenio Web en WebPages That Suck..com. Hay libros sobre el tema que también pueden ayudarle, tal como Web Design For Dummies de Lisa Lopuck (Wiley Publishing, In 41 4.2 Partet:Desaroltar una aplicacién Web con Base de Datos usando PHP y MySQL Dejar espacio para expansiones ‘Algo indudable sobre su aplicacion web es que cambiar con el tiempo. Con ‘el paso del tiempo podrian ocurrirsele nuevas funciones para ella, o simple: mente deseard cambiarle algo. O tal vez el software para sitios web mejore de modo que su aplicacién podria hacer cosas que no podia hacer cuando la nonté por primera vez. Cualquiera que sea la raz6n, su sito web cambiaré Cuando planea su aplicacién, debe tener presentes los cambios futuros, Puede disefiar su aplicacién en pasos, tomando en cuenta los cambios planeados. Puede desarrollar un plan en el cual construya una aplicacién hoy que cumplacon ‘sus mas inmediatas necesidades y ponerla a disposicin tan pronto como esté lista. Su plan puede incluir agregar lunciones ala aplicacion tan pronto como pueda desarrollarlas. Por ejemplo, puede construir un catalogo de productos y publicarlo en su sitio web apenas esté listo. En ese momento puede empezar a trar bajar en la funcién para hacer pedidos en linea, la cual agregaré cuando esté lista. No necesariamente podré predecir todas las funciones que deseara tener en su apli- cacién en el futuro, Por ejemplo, podria disefiar su sitio web de viajes con secciones para todos los posibles dlestinos actuales, pero el futuro podria sorprenderte. {Viajes a Marte? ;A Alpha Centauro? A.un universo alterno? Planee suaplicacién Con la lexibilidad necesaria para poder agregarle funcionalidad en el futuro. Escribalo Escriba su plan. A menudo me va a escuchar diciendo esto. Hablo desde la dolorosa experiencia de no escribir el plan. Mientras lo desarrolla, su plan es Jo mas importante en su mente y esta totalmente claro. Pero en unas cuantas semanas se sorprendera al descubrir que se ha nublado absolutamente, mientras su atencién se ocupaba de asuntos mas urgentes, O dentro de un afio querra hacer algunos cambios en la aplicacion y no recordara exacta- mente cémo la disefié. O esta trabajando con un socio para desarrollar una aplicacién y descubre que su socio malentendié su explicacion verbal y desarrollé funciones para la aplicacién que no concuerdan con su plan. Puede evitar todos estos tipos de problemas si lo escribe todo. Presentamos los dos ejemplos creados para este libro En las dos secciones siguientes presento los dos ejemplos de aplicacién con pases de datos para la Web que he creado para este libro. Me refiero a estos dos ejemplos a lo largo de todo el libro para demostrar aspectos sobre el diseno y desarrollo de aplicaciones anererarkieagnheeaei+orainrananrnrnhnr nr 2722722 o ‘Sb 2 Capitulo 3: Desarrollar una aplicacién Web con base dedatos fy} Cosas para vender tienda demascotas y desea que su catélogo brinde alos clientes informaci las mascotas que tiene a la venta. Vender mascotas en linea noes viable, pero atin asi usted est considerando la idea de permitir a los clientes "reservar" mascotas en linea, es decir, antes de que vengan a la tienda a comprarlas. Actualmente la aplica- cién simplemente es un catélogo en linea. Los clientes pueden revisar el catélogo en linea y luego ir a la tienda a comprar la mascota. La informacion sobre todas las mas- cotas se almacena en una base de datos y los clientes pueden buscar en la base de datos la informacién sobre mascotas espectficas 0 tipos de mascotas. Este es su plan para esta aplicacion: Permitirles a los clientes seleccionar sobre cual mascota desean ver informacion, Ofrezca dos métodos de selec * Seleccionar de una lista de vinculos: Mostrar una lista de vinculos que son categorias de mascotas (por ejemplo, perros, gatos, dino- saurios, etc.). Cuando el cliente hace clic en el vinculo de la catego- ria, aparece una lista de mascotas. Cada mascota en la lista es un vinculo hacia una descripeién de la mascota, * Digitar Ios términos de la bisqueda: Mostrar un formulario de bisque- daen el cual los clientes puedan digitar palabras que describen el tipo de ‘mascota que estén buscando. La aplicacion busca en la base de datos las palabras que coinciden y muestra la informacién sobre las mascotas que concuerdan con las palabras dela biisqueda. Por ejemplo, un cliente puede digitar gato para ver una lista de todos los gatos disponibles. Cada gato ena lista es un vinculo hacia la descripci6n de ese gato. ¥ Mostrar una descripcion de la mascota cuando el cliente hace clic en el vinculo. La descripcién esté guardada en una base de datos. Solo para Miembros El segundo ejemplo de una aplicacion con base de datos para la Web se rela- iona con el ejemplo anterior de la tienda de mascotas. Ademas del catélogo en linea, también quiere poner una seccion en el sitio web de su tienda de mascotas que sea s6lo para miembros. Para entrar en esta area del sitio los clientes deben primero inscribirse, proporcionando sus nombres y direccio- nes. En esta secci6n "Solo para miembros", los clientes pueden ordenar ali- mento para mascotas con descuento, averiguar sobre mascotas que han pedido pero que todavia no han llegado, y también tener acceso a articulos con noticias e informacion sobre mascotas y el cuidado de las mascotas. 44 Parte |: Desarrollar una aplicacion Web con Base de Datos usando PHP y MySQL Este es su plan para esta aplicacién: Mostar una descripci6n sobre la informacién y las caracteristicas es- peciales que estan disponibles en la seccién S6lo para miembros. Incluir un area donde los clientes puedan inscribirse a la seccién Sole | para miembros. * Incluir un vinculo hacia el area de inscripcion. ‘ ‘« Mostrar un formulario en el area de inscripcién en el cual los clientes puedan digitar la informacién para inscribirse. i El formulario debe incluir espacio para el nombre de registro del usuario y una contrasefia, asi como cualquier otra informacién que desee recopilar. + Validar Ia informacion que el usuario digi Por ejemplo, verifique que el c6digo postal tenga la longitud correc- ta, que la direcci6n electronica esté en el formato correcto, etc. + Almacenar la informacién en la base de datos. V Incluir una seccién para que ingresen los clientes que ya se han regis: trado en la seccién “Sélo para miembros”. * Mostrar un formulario de entrada que pida al cliente su nombre de usuario y la contrasefia. + Comparar la contrasefia y el nombre de usuario digitados por el clien- te con los nombres de usuario y las contrasefias en la base de datos. Sino se encuentra uno que concuerde, mostrar un mensaje de error. } f © Mostrar la pagina “Sélo para miembros” si el cliente se registra exito- | samente. Diseftar la base de datos Después de haber determinado con exactitud qué hard su aplicacién con base de datos para la Web (consult el inicio de este capitulo si todavia no lo ha hecho), ya esti listo para disenar la base de datos que guardara la informacién que necesita laaplicacién. Disefar la base de datos incluye identificar los datos que necesitay organizar los datos en la forma requerida por el software de la base de datos. Escoger los datos Primero tiene que identificar cual informacién debe estar en su base de da- tos. Con base en la lista de tareas que desea que la aplicaci6n realice, deter- mine cual informacién necesita para completar cada una de esas tareas. =_ a a a ll — Capitulo 3: Desarrollar una aplicacién Web con base dedatos 5 Estos son algunos ejemplos: i Un catélogo en linea necesita una base de datos que contenga informa- cién sobre los productos. | Una aplicacion para hacer nedidos en Iinea necesita una base de datos que pueda guardar la informacion sobre el cliente y la informacién sobre los pedidos i ¥ Un sitio web de viajes necesita una base de datos con informacién sobre | destinos, reservaciones, tarifas, horarios, etcétera En muchos casos, su aplicacién incluiré una tarea que recopile informacion de los usuarios. Tendré que balancear su necesidad de recopilar toda la informacién po- tencialmente stil en la que pueda pensar, contra la renuencia de sus usuarios a dar informaci6n personal — asi como su deseo de evitar formularios en los que habri a que invertir mucho tiempo para poder contestarlos. Una manera es pedir informa- cin opcional. Hay usuarios a quienes no les importara digitarla, pero los usuarios que no estén de acuerdo podran dejar los campos en blanico. Otra posibilidad es ofrecer un incentivo: mientras més largo sea el formulario mas atractivo debe ser el incentivo que necesitara para motivar a los usuarios a llenar el formulario, Un usua- podria estar dispuesto a llenar un formulario muy corto para participar en una rifa que ofrezca como premio dos tiquetes para un estreno cinematografico. Pero si el formulario es largo y complicado, el precio debe ser més valioso, tal como un via- je gratis a California que incluya un tour a un estudio de cine en Hollywood. En la aplicaci6n del primer ejemplo, sus clientes recorren el catalogo en linea buscando informacion sobre las mascotas que tal vez quisieran comprar. A usted le conviene que los clientes vean informacién que los motive a com- prar la mascota. La informacién que debiera estar disponible en la base de datos para ser vista por los clientes es: El nombre de la mascota i Por ejemplo poodle, unicornio y asi sucesivamente Una descripcion de la mascota Una foto de la mascota © El costo de la mascota En la aplicacién del segundo ejemplo, la seccién Sélo para miembros, le con- viene guardar informaci6n sobre los miembros inscritos. La informac! debiera guardar en la base de datos es: f — Elnombre del miembro i ¥ La direccion del miembro El niimero telef6nico del miembro El namero de fax del miembro La direccién electronica del miembro 46 Pantet:des 6J0 SS g | as E71 |) ro arrollar una aplicacién Web con Base de Datos usando PHP y MySQL ‘Tomese tiempo para desarrollar una lista completa de la informacion que neces guardar en su base de datos. Aunque puede cambiar y agregar informacion a si base de datos después de haberla desarrollado, es mas facil incluir fa informacion desde el principio. Ademés, si afiade informacion a la base de datos posteriormen- te_ después de que esta en uso — los primeros usuarios en la base dle datos ten- dran su informacion incompleta, Por ejemplo, sien un momento dado cambia su formulario y empieza a preguntar la edad del usuario, no tendra la edad de las per- sonas que llenaron el formulario antes y que todavia estén en la base de datos. Organizar los datos MySQLes un SABD relacional (Sistema Administrativo de Base de Datos), 10 cual significa que los datos se organizan en tablas. (Consulte el Capitulo I para tnayor informacion sobre MySQL.) Usted puede establecer relaciones entre las tablas en la base de datos. Organizar datos en tablas Las tablas de un SABD relacional se organizan como cualesquiera otras tablas que usted ya conoce, es decir, en filas y columnas, como se muestra en la Fr: 1, Ln campo es el lugar en el cual se cruzan una fila y una columna par- gura 3 ticulares, es decir, una celda individual. a ee Columna 1 Columna2 Columna 3 Columna 4 | Filat | Fila2 | | Figura 3-1 Los datosen | Fila4 | MySQL se = orrizn | Fie | | crates | —— — — Cada tabla se concentra en un objeto (una cosa) sobre el cual se desea guardar informacién. Estos son algunos ejemplos de objetos: ¥ Clientes | Productos Compafias ww Feu’ EEE E OSS YY ob Capitulo 3: Desarrollar una aplivacién Web conbasededatos fy 7 Animales | Cludades ¥ Salas ¥ Libros » PCs | Formas Documentos Proyectos + Semanas Se debe crear una tabla para cada objeto. El nombre de la tabla debe identifi- car claramente los objetos que contiene con una palabra o un término descrip- tivos. El nombre debe ser una cadena de caracteres sin espacios. El nombre de la tabla puede contener letras, ntimeros, lineas de subrayado (_) 0 signos de délares (8). Se acostumbra nombrar la tabla en singular. Asi, un nombre para una tabla de clientes podria ser C1 iente, y una tabla con los pedidos de los, clientes se podria llamar Pedi dode1C1 iente. Eluso de maytisculas y minis culas es significativo en Linux/Unix pero no en Windows: PedidodelCliente y pedidodelcliente son lo mismo para Windows, pero no para Linux o Unix. Enla jerga de las bases de datos, un objeto es una entidad, y una entidad tiene atr- butos. En la tabla, cada fila representa una entidad, y las columnas contienen los atributos de cada entidad. Por ejemplo, en una tabla de clientes cada fila contiene informacion sobre un tinico cliente. Algunos de los atributos en las columnas po- drian ser nombre, apellido, néimero telefénico, edad y otros datos por el estilo, Estos son los pasos a seguir para organizar sus datos en tablas: 1. Nombre su base de datos. Asigne un nombre a la base de datos de su aplicacién. Por ejemplo, una base de datos que contenga informaci6n sobre las familias en un vecin- dario podria Namarse DirectorioFamilias 2, Identifique los objetos. Revise la lista de informacion que desea guardar en la base de dato: no la ha hecho, consulte la seccién "Escoger los datos” anteriormente en este capitulo). Analice su lista e identifique los objetos. Por ejemplo, posiblemente la base de datos Direct or ioF ami | ‘as necesitarfa almacenar lo siguiente: * Nombre de cada miembro de la fami ireccion de la casa + Namero telefonico * Edad de cada miembro de la familia * El cereal que cada miembro de la familia prefiere para desayunar 48 Parte I: Desarrollar una aplicacion Web con Base de Datos usando PHP y MySQL __ Cuando analice esta lista cuidadosamente, se daré cuenta de que esta al: macenando informacién sobre dos objetos: la familia y los miembros de la familia, O sea, la direcci6n y el némero telef6nico son para la familia en general, pero el nombre, la edad y el cereal favorito son para miem- bros individuales de la familia . Defina y nombre una tabla para cada objeto. Por ejemplo, la base de datos Director ioFami lias necesita una tabla Hamada Fami lia y una tabla llamada Miembrodel aFami lia |. Identifique los atributos de cada objeto. Analice su lista de informacién ¢ identifique los atributos que necesita guar- dar sobre cada objeto. Desglose la informacion a guardar en las partes mas pequeiias posibles, dentro deo razonable. Por ejemplo, cuando guarde el nombre de una persona en una tabla, puede desglosar el nombre en nom- bre apellido. Hacer esto le permitira ordenar los datos por apellido, lo cual seria mAs dificil de hacer si el nombre y el apellido estuvieran guarda- dos juntos. De hecho, podria desglosar el nombre en nombre, segundo nombre, primer y segundo apellido, aunque no son muchas las aplicacio- nes que necesitan usar el segundo nombre en forma separada, . Defina y nombre las columnas para cada uno de Ios atributos que Dé a cada columna un nombre que identifique claramente la informacion que hay en esa columna. Los nombres de las columnas deben ser de una sola palabra, sin espacios. Por ejemplo, podria nombrar columnas asi nombre y apellido o primer_nombre y apellido ‘Algunas palabras estn reservadas para el uso especitico de MySQL 0 SQL y no se pueden usar como nombres de columnas. Estas palabras se usan en instru clones $QLo estan reservadas para uso futuro. Por ejemplo ADD. ALL. AND CREATE, DROP, GROUP, ORDER, RETURN, SELECT, SET, TABLE, USE WHERE y muchas, muchas mas no se pueden usar como nombres cle columnas. Para verlla lista completa de palabras reservadas, consulte el manual en linea de MySQLen www.mysq) .com/doc/en/Reserved_words .html . Identifique la clave primaria. Cada fila en una tabla necesita un identificador Gnico. En una misma tabla no puede haber dos filas exactamente iguales. Cuando disefe su tabla, de- ‘da cual columna tiene el identificador tinico, llamado Have primaria. La lave primaria puede estar conformada por la combinacion de mas de una columna, En muchos casos, los atributos de sus objetos no tendran un identificador tnico. Por ejemplo, una tabla de clientes podria no tener un identificador tnico porque dos clientes pueden tener el mismo nombre. Cuando no hay una columna de identificador tinico, debe agregar una co- lumna especificamente para que sea la llave primaria. Frecuentemente, una columna con una secuencia numérica se usa para este propésito. Por ejemplo, en la Figura 3-2 la clave primaria es el campo c}iente_id por- que cada cliente tiene un némero de identificaci6n Gnico, 3 | | 3 | we Vw vv 8 O88 0 8 8 OD i oe cliente_id nombre apellido telefono 27895 John Smith | 555-5555 40565 Joe Lopez | 555-5553 23695 Judy Chang | $55-5552 — 7 | : 27822 Jubal Tudor | 555-5556 Figura 3-2: Un ejemplo : dela tabla 29844 Joan | Smythe | 555-8559 Cliente. Capitulo 3: Desarrollar una aplicacién Web con base de datos AQ 7. Defina los valores predeterminados. Puede definir los valores predeterminados que MySQL. a! pos cuando no se digiten datos en ellos. No e je tener valo- res predeterminados, pero a menudo es ttil. Por ejemplo, si su aplicacion guarda direcciones que incluyen el pais, puede especificar EEUU como predeterminado. Si el usuario no digita ningin pals, se usar EEUU. 8. Identifique columnas con datos obligatorios. Puede definir columnas a las que no se les permitird estar vacias (también lamadas NULL). Por ejemplo, la columna que contiene su clave primaria no puede estar vacia, Eso significa que MySQL no vaa crear la ila si no se guar- da ningdn valor en la columna. El valor puede ser un espacio en blancoo una cadena vacia (por ejemplo,"), pero debe guardarse algiin valor en la columna. Puede determinar que otras columnas, ademas de la que conten- gala clave primaria, indiquen que hay un error cuando estan vacias. Las bases de datos bien disenadas guardan cada trozo de informacion en un solo lugar. Guardarlo en mas de un lugar es ineficiente y crea problemas si hay que cambiar la informacion. Si cambia la informacién en un lugar pero ol- vida cambiarla en el otro lugar, su base de datos tendra serios problemas. Si descubre que esta guardando los mismos datos en varias filas, probablemente necesitard reorganizar sus tablas. Por ejemplo, suponga que esta guardando da- tos sobre libros, incluyendo la direccién de la casa editorial. Cuando digita los da- tos, descubre que esta digitando la direcci6n de la misma editorial en muchas filas, Un modo mas eficiente de almacenar estos datos seria guardar la informa- cién sobre los libros en una tabla y la informacién sobre la editorial del libroen una tabla aparte. Puede definir dos tablas: Libro y Edi torial. Enlatabla Libro, tendré las columnas titulo, autor, fecha_pub y precio. Enlatabla Edi to rial tendrécolumnas tales como nombre. DireccionCalle, ciudad,ete. 50 Parte: Desarrolar una aplicacién Web con Base de Datos usando PHP y MySQL — Figura 3-3: Un ejempio dela tabla Pedido — Como crear relaciones entre tablas Hay tablas en las bases de datos que se relacionan entre si. Con mucha frecuen fila en una tabla estar relacionada con varias filas en otra tabla, Se nec sita una columna para conectar las filas relacionadas en tablas diferentes. En muchos casos, habré que incluir una columna en una tabla para guardar los da- tos que concuerden con los datos en la columna de llave primaria de otra tabla. Un tipo de aplicacion comin que necesita una base de datos con dos tablas re- Jacionadas es una aplicacién para pedidos de clientes. Por ejemplo, una tabla contiene la informacion sobre el cliente, tal como nombre, direcci6n, telefono, ‘ete, Cada cliente puede tener de cero a muchos pedidos. Puede guardar la in- formacidn sobre sus pedidos en la tabla con la informacion del cliente, pero tendria que crearse una fila completamente nueva cada vez que el cliente hi ciera un pedido, y cada fila nueva tendria que contener toda la informacion del cliente, Seria mucho més eficiente guardar los pedidos en una tabla aparte. La tabla Pedidos tendria una columna que contenga la clave primaria de una fila enlatabla Cliente, de modo que el pedido se relacione con la fila correcta en latabla C1 iente. La relacion se muestra en las tablas de las Figuras 3-2 y 33. La tabla Cliente en este ejemplo luce como en la Figura 32 (consulte la see~ cidn anterior). Observe el identificador Gnico (c] iente_id) para cada cliente. La tabla Ped ido relacionada se muestra en la Figura 3-3. Observe que tiene la misma columna ¢liente_id que aparece en a tabla Cliente. De este mo- do, la informacién del pedido en la tabla Pediido se conecta con el nombre y néimero telef6nico del cliente con el que se relaciona en la tabla (1 iente En este ejemplo, las columnas que relacionan la tabla (| iente y la tabla Pe dido tienen el mismo nombre. Podrian tener nombres diferentes siempre y ‘cuando los datos en las columnas fueran los mismos. Num_orden cliente_id numitem costo | nm | ms | ona | mo am | mes | one | ms ee | - wns | sss | dogar | 21000 was | mes | vier | om Sa BP RBeRPRFAR?RA?”A?RaAA?A nA A Capitulo 3: Desarrollar una aplicacién Web con base de datos 5 1 Diseniar las bases de datos de los ejemplos En las dos secciones siguientes, diseiio las dos bases de datos para los dos ejemplos de aplicaciones usados en este libro. Proceso del disetio del Catdlogo de mascotas Suponga que quiere mostrar la siguiente lista de informacion cuando los clientes busquen en su catélogo de mascotas: § — Elnombre de la mascota «Por ejemplo, poodle, unicornio y asi sucesivamente. | Una descripcién de la mascota | Una foto de la mascota © El costo de la mascota En el plan del Catalogo de mascotas, aparece una lista de categorias de masco- tas, Esto implica que cada mascota debe clasificarse en una categoria de ma cotas y que la categoria de mascotas debe almacenarse en la base de datos. Se debe disehar la base de datos Catal ogodeMascot.as siguiendo los pasos presen- tados en la secci6n "Organizar los datos en tablas', anteriormente en este capitulo: 1, Nombre su base de datos. La base de datos para el Catalogo de mascotas se llama Cata] ogode Nascotas. 2. Identifique los objetos. La lista de la informacion es: f sue + El nombre de la mascota (por ejemplo, poodle, unicornio, y as cesivamente.) * Una descripcién de la mascota * Una foto de la mascota + El costo de la mascota + La categoria de la mascota Toda esta informaci6n es sobre mascotas, asi que el tinico objeto para esta lista es Mascota. 3. Defina y nombre una tabla para cada objeto. La aplicacién para el Catalogo de mascotas necesita una tabla llamada Mascota. yO, esarrollar una aplicacién Web con Base de Datos usando PHP y MySQL 4, Identifique los atributos de cada objeto. Ahora debe considerar la informacion en detalle: + El nombre de la mascota: Un solo atributo; por ejemplo poodle, unicornio y asi sucesivamente, Sin embargo, es muy posible que su tienda de mascotas tenga mas de un poodle a la venta al mismo tiempo, Por lo tanto, su tabla necesita un identificador tinico que sirva como clave primari « El namero de identificacin de la mascota: Un néimero secuencial asignado a cada mascota cuando se afade a la tabla. Este nimero es la clave primaria, * La descripci6u de la mascota: Dos atributos: la descripcion escrita de la mascota tal como apareceria en el catélogo impreso y el color dela mascota, « La foto de la mascota: El nombre de la ruta hacia un archivo g co que contenga una hermosa foto de la mascota. fie + El costo de la mascota: La cantidad en efectivo que la tienda pide por la mascota * La categoria de la mascota: Dos atributos: el nombre de la catego- ria a la que pertenece la mascota — por ejemplo perro, caballo, dragon — y una descripci6n de la categoria. ineficiente incluir dos tipos de informaci6n en la tabla Mascota * Lainformacién de la categoria incluye una descripcion de la catego- ria. Como cada categoria puede incluir varias mascotas, incluir la des- cripcién de la categoria en la tabla Mascota daria como resultado que la misma descripcion aparezca en varias filas. Es mas eficiente definir Ja Categoria de la mascota como un objeto con su propia tabla «Sila mascota viene en varios colores, toda la informaci6n de la mas- cota se repetiria en una fila aparte para cada color. Es més eficiente definir Color de la mascota como un objeto con su propia tabla. Las tablas agregadas se llaman TipodeMascota y Colordelatascota 5. Defina y nombre las columnas. LatablaMascota tiene una fila para cada mascota. Las columnas de la tabla Mascota son © Idmascota: Unniimero secuencial tinico asignado a cada mascota © Nombremascota: Nombre de la mascota. * Tipomascota: El nombre de la categoria. Esta es la columna que conecta la mascota con la fila correcta en la tabla TipodeMascota * Descripcionmascote: La descripcién de la mascota. * Precio: El precio de la mascota. una foto dela mascota, © Pix: Elnombre del archivo grafico que conti antehHm amas mf Gf s&h Om mf Capitulo Desarrollar una aplicacion Web con base de datos La tabla TipodeMascota tiene una fila para cada categoria de mascotas Tiene las siguientes columnas: * Tipomascota: El nombre de la categoria de un tipo de mascota. Esta es la clave primaria para esta tabla, Observe que la tabla Mas cota tiene una columna con el mismo nombre. E:ta columna vin- cula esta tabla con la tabla Mascota *Descripciontipo: La descripcién del tipo de mascota. La tabla Colorde] aMascota tiene una fila para cada color de mascota. ‘Tiene las siguientes columnas: ‘*Nombremascota: El nombre de la mascota. Esta es la columna que conecta la fila de color con la fila correcta en la tabla Nascota. *Colormascota: El color de la mascota. 6. Identifique la clave primaria. © Laclave primaria dela tabla Mascota es Idmascota * Laclave primaria de la tabla TipodeMascota es Tipomascota + Laclave primaria de la tabla ColordelaMascota es Nombremascota y Colormascota juntas. 7. Defina los valores predeterminados. No se definen valores predeterminados para ninguna de las tablas. 8. Identifique las columnas con datos obligatorios. A las siguientes columnas no se les permitiré nunca estar vacias: * Idmascota * Wombremascota *Colormascota * Tipomascota Estas son las columnas con claves primarias. No debe permitirse que ha- ya una fila sin estos valores en las tablas. Proceso del disefio del Grea Solo para miembros Suponga que ha creado la siguiente lista de informacion que desea guardar cuan- do los clientes se registren en la seccién Solo para miembros de su. ¥ Nombre del miembro ¥ Direccién del miembro 1 Numero telefonico del miembro 53 Parte |: Desarrollar una aplicacion Web con Base de Datos usando PHP y MySQL _ j — Namero de fax del miembro ¥ Direcci6n electronica del miembro Ademés, también le convendria guardar la fecha en que un miembro se inscri- bey rastrear la frecuencia con la que cada miembro entra a la seccién Solo para miembros. Diseie la base de datos Solo para miembros siguiendo los pasos presentados en la seccién "Organizar los datos en tablas", anteriormente en este capitulo: 1, Nombre su base de datos. La base de datos para la seccién Sélo para miembros se llama riodeMiembros. 2, Identifique los objetos. La lista de informacién es ( t 3 + Nombre de! miembro * Direccién del miembro + Namero telef6nico del miembro ‘+ Namero de fax del miembro * Direccién electronica del miembro * Fecha de inscripcién del miembro + Entradas del miembro ‘Toda esta informaci6n pertenece a los miembros, asi que el Ginico objeto para esta lista es miembro. 3. Defina y nombre una tabla para cada objeto. La base de datos Di rectoriodeNiembros necesita una tabla llamada Miembro. 4. Identifique los atributos de cada objeto. Fijese detalladamente en la lista de informacién: + Nombre del miembro: Dos atributos: nombre y apellido, « Direccién del miembro: Cuatro atributos: direccion fisica, ciudad, esta- doy cédigo postal. Como actualmente usted solo tiene tiendas ce mas- cotas en Estados Unidos, puede asumir que la direccién del miembroes tuna direccién en el formato de direcciones postales de Estados Unidos. * Namero telef6nico del miembro: Un atributo. © Namero de fax del miembro: Un atributo. * Direcci6n electronica del miembro: Un atributo. « Fecha de inscripcién del miembro: Un atributo. Capitulo 3: Desarrollar una aplicacién Web con base de datos Varias piezas de informacién se relacionan con las entradas del miembro en el Area especial: ‘+ El ingreso en la secci6n Solo para miembros requiere de un nom- bre de registro y una contrasefia, Estos dos itemes deben estar al- macenados en la base de datos. * La forma més facil de rastrear las entradas de los miembros es al: macenandbo la fecha y la hora en que el usuario entré en la seccién Sélo para miembros. Como cada miembro puede tener muchas entradas, habré que almace- nar muchas fechas y horas de entrada. Por lo tanto, en lugar de definir el tiempo de entrada como un atributo de! miembro, defina la entrada co- mo un objeto relacionado con el miembro, pero con su propia tabla, La tabla agregada se llama Entrada. El atributo de un objeto de entrada €s su tiempo de entrada (el tiempo incluye la fecha). 5. Defina y nombre las columnas. La tabla Miembro tiene una fila para cada miembro. Las columnas para la tabla Miembro son © Nombreentrada gurarse de que no haya dos nombres de entrada iguales. *Clave * Fechadecreacion * Nombre * Apel ido *calle * Ciudad Estado * CodigoPostal email * Telefono Fax Latabla Entrada tiene una fila para cada entrada: o sea, cada vez.que un miem- bro entra en la secci6n Sélo para miembros. Tiene las columnas siguientes: * Nonbreentrada: Elnombre de registro del miembro que entré. Esta es la columna que vincula esta tabla con la tabla Miembro. Este es un valor Gnico en la tabla Mj embro pero no es un valor dinico en esta tabla * Tiempoentrada: La fecha y hora de entrada. 55 56 Parte: Desarrollar una aplicacién Web con Base de Datos usando PHP y MySOL 6. Identifique la clave primaria. iembro es Nombreentrada * La clave primaria para la tabla * Laclave primaria para la tabla Entrada es Nombreentrada y Tiempo_entrada juntos. 7. Defina los valores predeterminados. No hay valores predeterminados para ninguna de las tablas 8. Identifique las columnas con datos obligatorios. Las siguientes columnas nunca deben estar vacias: * Nombreentrada * Contrasefa + Tiempoentrada Estas columnas son las columnas con la clave primaria, En las tablas nunca debe permitirse que haya una fila sin estos valores. Tipos de datos MySQL almacena informacién en formatos diferentes con base en el tipo de informacién que usted le dice a MySQL que debe esperar. MySQL permite que tipos diferentes de datos se usen de maneras diferentes. Los tipos principales de datos son datos de caracteres, numéricos y de fecha/hora Datos de caracteres Los datos més comunes son los datos de caracteres, es decir, datos que se guar- dan en cadenas de caracteres y que solo se pueden manipular en cacenas. Lan yor parte dela informacion que guardaré sera de este tipo, por ejemplo datos como el nombre del cliente, su direccién, néimero telefonico, descripcién dela mascota, etc. Los datos de caracteres se pueden mover e imprimir. Dos cadenas de caracteres se pueden poner juntas (concatenadas); se puede seleccionar una subcadena de una cadena mas larga, y una cadena se puede sustituir por otra Los datos de caracteres se pueden almacenar en un formato de longitud fija 0 un formato de longitud variable. Formato de longitud fija: En este formato, MySQL reserva un espacio fi- jo para los datos. Si los datos son mas largos que el largo fijado, solo se guardaran los caracteres que quepan en ese largo, y el resto de los ca- racteres no se guardar. Si la cadena es mas corta que la longitud fijada, el espacio extra se deja vacio y se desperdicia. r | _ _______ Capitulo 3: Desarrollar una aplicacién Web con base de datos 5 7 + Formato de longitud variable: En este formato, MySQL guarda la cadena © enuncampo que tiene la misma longitud que la cadena. Atin asi debe es- pecificar la longitud para la cadena, pero si la cadena es mAs corta que la longitud especificada, MySQL usa el espacio requerido en lugar de dejar el espacio extra vacio. Sila cadena es mas larga que el espacio especifica- do, los caracteres extra no se almacenan. Sila longitud de una cadena de caracteres varia muy poco, use el formato de lon- gitud fija. Por ejemplo, una longitud de 10 funciona para todos los c6digos posta- les, incluyendo los que tienen el nimero postal+4. Si el cédigo postal no incluye el ntimero postal+4, solo quedaran cinco espacios vacios. Sin embargo, si su ca- dena de caracteres puede variar mas que unos cuantos caracteres, use el forma- to de longitud variable para ahorrar espacio. Por ejemplo, la descripcién de la mascota podria ser Murciélago pequeito o podria ocupar varias lineas. Asi que seria mejor guardar esta descripci6n en un formato de longitud variable Datos numéricos Otro tipo comin de datos son los numéricos, es decir, datos que se guardan como niimeros. Los ntimeros decimales (por ejemplo 10.5, 2.34567, 23456,7) se pueden guardar asi como los nimeros enteros (por ejemplo, 1, 2, 248). Cuando Jos datos se guardan numéricamente, se pueden usar en operaciones numéri- as tales como suma, resta, elevar al cuadrado, ete. Sin embargo, silos datos no van a usarse en operaciones numéricas es mejor guardarlos como cadenas de caracteres, porque el programador los usara como cadenas de caracteres, No haré falta ninguna conversién. Por ejemplo, probablemente no tendré que sumar los digitos en los ntimeros telef6nicos de los usuarios, asi que el nimero telefonico debiera guardarse como una cadena de caracteres MySQL guarda ndimeros positivos y negativos, pero usted puede pedirle a MySQL que guarde solo ntimeros positivos. Si sus datos no van a ser negati- vos, guarde los datos unsigned (sin signo, es decir, sin usar los signos + 0 —antes del ntimero). La poblacién de una ciudad, por ejemplo, o el ntimero de paginas en un documento nunca serén un néimero negativo. Datos de fecha y hora Un tercer tipo comin de datos son los de fecha y hora. Los datos guardados como fecha se pueden mostrar en diversos formatos de fecha. También se pueden usar para determinar el lapso de tiempo entre dos fechas 0 dos ho- ras, o entre una fecha u hora especificas y alguna fecha y hora ar! 58 Parte |: Desarrollar una aplicacién Web con Base de Datos usando PHP y MySQL Datos de enumeracion Algunas veces los datos solo pueden tener un nimero limitado de valores. Por ejemplo, una columna podria tener como tinicos ‘ralores posibles si y no. MySQL ofrece un tipo de datos llamados de enumeracién para usar con este tipo de datos. Usted le indica a MySQL cuales valores pueden guardarse fen la columna (por ejemplo si, no), y MySQL no guardaré ningén otro valor. a fA FP A Ff Nombres de los tipos de datos en MySOL Cuando usted crea una base de datos debe decile a MySQL, usando los nombres cspecificos de MySQI. para los tips de datos, cudles tipos de datos debe esperar enunacolumnaen particular, La Tabla 3-1 muestra los tipos de datos en MySQL Usados con mas frecuencia en las aplicaciones con bases de datos para la Web, Tabla 3-1 Tipos de datos en MySQL TiposdedatosenMySOL__—_Descricion __CHARUength) Cadena de caracteres de longitud fia. 7 VARCHAR( length) Cadena de caracteres de longitud variable. La cadena més larga que se puede guardar es Jength, que debe estar entre 1 y 255. TEXT Cadena de caracteres de longitud variable con una k InTength) Nimero entero cuyo rango va de — 2147483648 2 42147483647. EI ndmero que se puede mostrar esta limitado por }ength. Por ejemplo,si lengtives, solo los ndmeros de — 999 a 9989 se podran mos trar, aunque los nimeros més altos se quardarén. INT(length) UNSIGNED Némero entero cuyo rango va de 02 4294967295. length es el tamafio del nimero que se podré mostrar. Por ejemplo, si length es 4 solo se mostrarén los nuimeros hasta 9999, aunque los nimeros mas altos se guardar: DECIMAL(length dec) Numero decimal en el cual Jengthes el nime ro de caracteres que se usaran para mostrar ¢l ‘nimero, incluyendo el punto de los decimales, los signos y exponentes, y dec es el ntimero ma- ximo de decimales permitidos. Por ejemplo, 1234 tiene length de 5 y dec de 2 -U_U_D_B Capitulo 3: Desarrollar una aplicacién Web con base de datos 5Q Tipos de datos en MySQL Descripcién (continuacién) Valor de la fecha con afio, mes y dia. Muestra el valor como AAAA-MM-DD (por ejemplo, 2001-04-03}. TIME Valor dela hora con hora, minutos y segundos. Muestra la hora como HH:MM:SS, DATETIME La fecha y hora guardadas juntas. Aparece como AAAA-MM-DD HH:MM:SS. ) Sdlo pueden guardarse los valores en a lista. Ena lista se puede incluir un maximo de 65535 valores, ENUM ("vall",*val2" MySQL permite muchos otros tipos de datos, pero se necesitan con me- nos frecuencia. Para una descripcién de todos los tipos de datos dispo- nibles, consulte la documentacién sobre MySQL en: www.mysql.com/doc/C/o/Column_types . html. Escribalo Insisto en mi usual necedad: Escribalo, Probablemente usted paso bastante tiempo tomando decisiones de disefto para su base de datos. En este punto, las decisiones estan fijadas con firmeza en su mente. No cree que pueda olvidarlas. Sin embargo, suponga que de pronto surge una crisis y tiene que dejar de lado este proyecto du- rante dos meses, Tendria que analizar sus datos y tomar todas las decisiones de di- sefio nuevamente. Eso, claro, puede evitarlo si escribe sus decisiones ahora mismo, Documente la organizacién de las tablas, los nombres de las columnas y to- das las demas decisiones de disefio. Una buena idea de formato es hacerlo en un documento que describa cada tabla en el formato de tabla, con una fila pa- ra cada columna y una columna para cada decisiOn de diseito. Por ejemplo, sus columnas serfan nombre de la columna, tipo de datos y descripcién. Un vistazo a los disetios de las bases de datos de los ejemplos Esta seccién contiene los disefos de las bases de datos de los dos ejemplos de aplicacién con bases de datos para la Web. Parte |: Desarrollar una aplicacién Web con Base de Datos usando PHP y MySQL Tablas de la base de datos de Cosas para vender El diseio de la base ce datos para la aplicacion del tres tablas:Mascota, TipodeHascota y ColordelaMascota. Las Tablas 3-2 hasta 3-4 muestran la organizaci6n de estas tablas. La definicién de la tabla no es inalterable; MySQL le permite cambiar las tablas con mucha facilidad. Por ejem- plo, sifija el tipo de datos para una variable en CHAR( 20) yse da cuenta de qu no és lo suficientemente larga, facilmente podra cambiar el tipo de dato. {télogo de mascotas incluye El disefio de la base de datos es como sigue: Nombre de la base de datos: CatalogodeMascotas Tabla 3-2 Tabla 1 de la Base de datos: Mascota TWomtredeta variable Tipo _———Deseripoidm Idnascota INT(5) Nimero secuencial para la mascota — __ (eveprimarie) Nombremascota __CHAR(25)__Nombredelamascota _Tipomascota CHARCIS) Categoriadelamascota Descripcion VARCHAR( 255} Descripcién de la mascota __mascot nn precio __OECIMAL(9,2)_Preciode la mascota oT pix CHARC15) Nombre de la ruta hacia el archivo gré- fico que contiene la foto de la mascota Tabla 3-3 Tabla 2 de la Base de datos: TipodeMascota “Nombredelavariable Tipo __—~Deseripcién _ Tipomascota CHARIS) Nombre de la categoria de la mascota 2 ae (lave primaria) Descripeion VARCHAR(255) Descripcién de mascota la categoria ren Capitulo 3: Desarrollar una aplicacién Web con base de datos @ 7 Tabla 3-4 Tabla 3 de la Base de datos: ColordelaMascota Nombre de la variable Tipo Descripcién_ Nombremascota CHAR(25) Nombre de la mascota (llave primaria 1) Colormascota CHAR(I5) Nombre del color (lave primaria 2) Tablas para la base de datos Solo para miembros El disefo de la base de datos para la aplicacién de S6lo para miembros inclu- ye dos tablas, Hamadas Miembro y Entrada. Las Tablas 35 y 3-6 documen- tan la organizacion de estas tablas. La definicidn de las tablas no esté fijada de modo inalterable; MySQL le permite cambiar las tablas con facilidad. Si fija el tipo de datos para una variable en CHAR( 25) y se da cuenta de que no es lo suficientemente larga, es facil cambiar el tipo de datos. El disefo de la base de datos es el siguiente: Nombre de la base de datos: DirectoriodeMiembros Tabla 3-5 Tabla 1 de la Base de datos: Miembro ‘Nombredela Tipo Descripcién variable 7 Nombre VARCHAR(20) Nombre para entrar especificado por el entrada usuario (lave primaria) Clave CHAR(255) —_Contrasefia especificada por el usuario Fecha DATE Fecha en que el miambro se inscribié y creacion registré su cuenta Apellido VARCHAR(50) __Apellido del miembro Nombre VARCHAR(40) Nombre del miembro Calle VARCHAR(50) _Direccién fisica del miembro Ciudad VARCHAR(50) Ciudad del miembro Estado CHAR(2) Estado del miembro Codigo CHAR(10) Cédigo postal del miembro postal 62 Parte |: Desarrollar una aj acion Web con Base de Datos usando PHP y MySQL Nombre dela Tipo Descripcién (Continuacion) variable oe email ARCHAR(50) __Direccién electronica del miembro Telefono CHAR(15) Nameroteleténico del miembo Fax HARCI5) Numero de fax del miembro — Tabla 3-6 Tabla 2 de la Base de datos: Entrada Ss ererceom—emss— — Nombre dela Tipo Descripcién variable Nombre CHAR(20) Nombre para entrar especificado por el entrada usvario (lave primaria 1) _ Tiempo DATETIME Fecha y hora de entrada (llave primaria 2} entrada Desarrollar la aplicacion Después de haber creado el plan enumerando las tareas que su aplicacion de- be realizar y de haber desarrollado el disefio de la base de datos, ya esta listo para crear su aplicacién. Primero debe construir la base de datos; luego es- cribira los programas en PHP. Est4 a muy pocos momentos de tener trabajan- do una aplicacién con base de datos para la Web. Bueno, quiza estoy exagerando un poco, pero ciertamente esta progresando. Construir la base de datos Construir la base de datos significa convertir la base de datos disefiada en el papel a una base de datos que funcione. Construir la base de datos es algo in- dependiente de los programas PHP que su aplicaci6n usara para interactuar con la base de datos. Se puede tener acceso a la base de datos usando len- guajes de programacion diferentes de PHP, por ejemplo Perl, C 0 Java. La ba- se de datos guarda los datos de manera independiente. Debe construirla base de datos antes de escribir los programas en PHP. Los progra- mas en PHP se escriben para insertar y extraer los datos de la base de datos, asi que no podra desarrollarlos ni probarlos hasta que la base de datos esté disponible. |—_— —— — — —<$<_-_- — W_ wpoepaermaohrenahainaiirnanaefpfaai#prertinrin s&s ABABA. A a ne Capitulo 3: Desarrollar una aplica in Web con base de datos El diseio de la base de datos nombra y define las tablas que constituyen la base de datos. Para construir la base de datos, usted debe comunicarse con MySQL mediante el lenguaje SQL. Le dice a MySQL que cree la base de datos y que le agregue tablas. Le dice a MySQL como organizar las tablas de datos y qué formato usar para guardar los datos. Las instrucciones detalladas sobre como construir la base de datos se brindan en el Capitulo 4 Escribir los programas ‘Sus programas realizan las tareas necesarias de su aplicacién con base de da- tos para la Web. Crean lo que se muestra al usuario en Ia ventana del navega- dor, Hacen que su aplicaci6n sea interactiva, pues aceptan y procesan la informacién digitada por el usuario en la ventana del navegador. Almacenan informacién en la base de datos y extraen informacion de la base de datos. La base de datos es indtil a menos que puede insertarle y extraerle datos, El plan desarrollado (tal como indiqué en las secciones anteriores de este ca- pitulo) esquematiza los programas que debe escribir. Generalmente cada ta- rea del plan requerir4 de un programa. Si su plan dice que su aplicacién mostrar un formulario, usted necesita un programa para mostrar el formula- rio, Si su plan dice que su aplicacién guardaré los datos de un formulario, ne- cesita un programa que obtenga los datos del formulario y los ponga en la base de datos. El lenguaje PHP fue desarrollado especificamente para escribir apl web interactivas. Incluye la funcionalidad necesaria para hacer que la ra de los programas sea lo menos dolorosa posible, Tiene métodos que se in- cluyeron en el lenguaje especificamente para tomar datos de formularios. Tiene métodos para poner los datos en las bases de datos MySQL, y tiene mé. todos para extraer datos de una base de datos MySQL. En la Parte ill de este libro explico detalladamente las instrucciones necesarias para escribir pro- gramas con PHP. 63 | Ce Parte Il La base de datos MySQL La 5a Ola Por Rich Tennant ‘Nuestra politica de respuesta aufomatizada ante una pérdida de datos en toda la compa gerencia, respaldar los datos exist de mis acciones de la co En esta parte... Ex parte le brinda los detalles relacionados con el trabajo con una base de datos MySQL. Aprendera cé6- mo usar SQL para comunicarse con MySQL. Ademés, des- cubrira cémo crear una base de datos, cémo cambiarla y c6mo extraer e insertar datos en una base de datos. Capitulo 4 Construccion de ta base de datos En este capitulo Usar SQL para hacer solicitudes a MySQL Crear una base de datos nueva mn a una base de datos existente Agregar inforn Consultar la informaci6n en una base de datos existente Eliminar informacién de una base de datos existente Dew de terminar el disefio de su base de datos (consulte el Capitulo 3 si atin no lo ha hecho), estaré listo para convertirlo en una base de datos funcional. En este capitulo aprender cémo construir una base de datos con base en su disefto, y cémo mover datos hacia dentro y hacia fuera de ella, Eldisefo le asigna un nombre a la base de datos y define las tablas que la confor- ‘man. Para poder construir la base de datos debe comunicarle a MySQL el nom- bre dela base de datos y la estructura de las tablas, Posteriormente debera ‘comunicarse con MySQL para agregar datos a la base de datos (0 solicitarle in- formacién). El lenguaje usado para comunicarse con MySQL es SQL. En este capi- tulo, explico cémo crear consultas en SQL y cémo usarlas para construir bases de datos nuevas, asi como para interactuar con bases de datos ya existentes. Como comunicarse con MySOL El servidor MySQL es el administrador de su base de datos Crea bases de datos nuevas. + Sabe donde estan guardadas las bases de datos, | Guarda y recupera informaci6n guiado por las solicitudes (consultas) = que recibe. 68 Parte Il: La base de datos MySQL Para hacer una solicitud que MySQL pueda entender, se deben construir con- sultas en SQL y enviarlas al servidor MySQL. (Para una descripcién mas deta- Nada del servidor MySQL, consulte el Capitulo 1). Las dos secciones siguientes puntualizan c6mo hacerlo. Construir consultas en SOL SQL (Structured Query Language/Lenguaje de consulta estructurado) es el lenguaje informatico usado para comunicarse con MySQL. SQL es pra mente inglés; est4 hecho principalmente de palabras en inglés, colocadas jun- tas en cadenas de palabras muy parecidas a oraciones en inglés, En general (afortunadamente) no es necesario comprender ningdin lenguaje técnico mi terioso para escribir consultas SQL. que funcionen. La primera palabra de una consulta es su nombre, el cual es una palabra de accién (un verbo) que le dice a MySQL qué quiere hacer usted. Las consultas que discuto en este capitulo son CREATE, DROP, ALTER, SHOW, INSERT, OAD, SELECT, UPDATE y DELETE. Este vocabulario basico basta para crear bases de datos en sitios web, e interactuar con ellas. Al nombre de la consulta le siguen palabras y frases — algunas obligatorias y otras opcionales — que le dicen a MySQL cémo realizar la acci6n. Por ejem- plo, siempre debe indicarle a MySQL qué debe crear, y siempre debe decirle en cual tabla insertar datos 0 en cual seleccionar datos. Lasiguiente es una consulta SQL tipica. Como puede ver, usa palabras en inglés SELECT apellido FROM Miembro Esta consulta recupera todos los apellidos guardados en la tabla llamada Hi embro, Por supuesto, consultas mas complicadas (como la siguiente) se parecen menos al inglés: SELECT apellido, nombre FROM Miembro WHERE estado="CA" AND ciudad="Fresno” ORDER BY apellido Esta consulta recupera todos los apellidos y nombres de los miembros que viven en Fresno y los coloca en orden alfabético por el apellido. Esta consulta se parece menos al inglés pero todavia es bastante clara Los siguientes son algunos puntos generales que se deben recordar cuando se construye una consulta SQL, como se ilustr6 en el ejemplo anterior: J Mayssculas:En este libro, pongo las palabras delengusje SQL complet. mente en mayisculas; los elementos de informacién variable (como los parnhnnrnnhnpnfhppAaAnhnppA pNP oY Nn Hv oa ea Capitulo 4: Construcci6n de la base de datos nombres de las columnas) usualmente reciben etiquetas que estén en su mayor parte o totalmente en mindisculas. Lo hice asf para que le fuera mas facil leer los ejemplos, no porque MySQL necesite este formato. No importa silas palabras en SQL. estan en mayéscula o mintiscula; para MySQL select es igual a SELECT y fromes igual a FROM. Por otro lado, sisu sistema opera- tivoes Unix o Linux si es importantes los nombres de las tablas, los nom- bres de las columnas y cualquier otra informaci6n variable est en mayiiscula o mingscula, Cuando se usa Unix o Linux, para MySQL los nom- bres de las columnas deben coincidir con exactitud, de modo que la maytis- culao mindscula de los nombres de las columnas tiene que estar correcta: apellido no es igual a Apellido. No obstante, Windows no es tan quisquilloso como Unix y Linux; desde su perspectiva, apellido y Apellido son iguales. ¥ Espacios: Las palabras en SQL tienen que separarse por uno o mas espa- cios. No importa cudntos espacios use; es lo mismo usar 20 espacios 0 solo 1. SQL tampoco pone ninguna atenci6n al final de la linea. En SQL usted puede empezar una nueva linea en cualquier punto de la instru cién, 0 escribir toda la instruccién en una sola linea Comillas: Observe que en la consulta anterior CA y Fresno estan encerra- das en comillas dobles ("). CAyy Fresno son series de caracteres llamadas cadenas de texto o cadenas de caracteres. (Explico detalladamente las ca- denas més adelante en este capitulo.) En el ejemplo, le esté pidiendo a MySQL que compare las cadenas de texto en la consulta SQL con las cade- nas de texto almacenadas en la base de datos. Las cadenas de texto se en- cierran entre comillas. Cuando compara ntimeros (enteros, por ejemplo) almacenados en columnas numéricas, no hace falta encerrar los ntimeros entre comillas. (En el Capitulo 3 explico los tipos de datos que pueden al- macenarse en una base de datos MySQL), Enviar consultas en SOL Este libro es sobre PHP y MySQL como pareja. Por lo tanto, no describiré la multitud de formas en que pueden enviarse consultas SQL a MySQL, muchas de las cuales no tienen nada que ver con PHP. En su lugar, proporciono un programa PHP simple que usted puede usar para ejecutar consultas en SQL. (Para conocer los detalles sobre PHP y cémo escribir programas en PHP, con- sulte la Parte Ill de este libro). El programa mysq1_send.php tiene una funcién simple: ejecutar consul- tas y mostrar los resultados. Digite el programa en el directorio donde esta desarrollando su aplicacién web (0 descarguelo desde mi sitio web en janet. valade.com), cambie la informacién en las lineas 9— 19, y luego dirija su explorador hacia el programa. La Lista 41 muestra el programa. 69 Parte Il: La base de datos MySQL Lista 4-1: Programa PHP para enviar consultas en SQL a MySQL </head> <body> <?php Shost="hostname"; Suser=" mysqlaccountname "; Spassword="mysql password” ; /* Section that executes query */ 1 f(@$_GETL' form") { 'yes") mysq]_connect ($host, $user, $password); mysq]_select_db($_POST['database']) Squery = stripSiashes($ POSTE ‘query’ 1); $result = mysql_query($query); echo “Database Selected: <b>{$_POST['database']}</b><br> Query: <b>$query</b><h3>Results</n3><hr>"; if(Sresult 0) echo “<b>Error ".mysql_errno().": ".mysql_error(). *</b>": elseif (@mysql_num_rows($result) == 0) echo("<b>Query completed. No results returned. </b><br>"); else ( echo "<table border="1'> <thead> <tr>; for($i = 0;$4 < mysql_num_fields( $result) $i++) ( echo, "<th>*.mysql_field_name( $result, $i). *</th>? 5 , re fg fA neaAaenrananaAaAaaAaaepraanrannanrna 2S YEE EEE DERE UE YE & Capitulo 4: Construccién de la hase de datos 7 J echo." </tr> </thead> <tbody>" for ($i t echo "<tr>"; Srow = mysql_fetch_row( $result); for($j = 0:$j<mysql_num_fields($result);$j++) { 1 echo "</tr>": ) echo "</tbody> </table>"; 1 //end else echo * <hr><br> <form action=\"($_SERVER['PHP_SELF']]\" method=\"POST\"> <input type=‘hidden’ name="query’ value=" $query’> <input type="hidden’ name='database* value={$_POST[ database’ ]}> <input type="submit’ name=\"queryButton\* value=\"New Query\"> $i-< mysqi_num_rows(Sresult); $i++) echo("<td>* . $rowl$i] . "</td>"); <input type="submit' name=\"queryButton\" value=\"Edit Query\*> </form": unset ($form); exit); ) // endif. formeyes /* Section that requests user input of query */ @squery=stripSlashes($_POST[' query']); if (@$_POSTE*queryButton'] != "Edit Query") { Squery ="; > <form action="<?php echo $_SERVER['PHP_SELF'] ?>?form-yes* method="POST"> <table> <tr> <td align=right><b>Type in database name</b></td> <td><input type="text" name="database" value-<2php echo @$_POSTL'database'] ?> ></td> </tr> <tr> <td align="right" valign="top"> <b>Type in SOL query</b></td> <td><textarea name="query” cols="60" rows="10"><?php echo $query 2></textarea> </td> 72 Parte Il: La base de datos MySQL </tr> <tr> <td colspan="2" align="center"><input type="submit” value="Submit Query*></td> <tr> </table> </form> </body></html> Debe cambiar las lineas 9, 10 y 11 del programa antes de poder usarlo. Estas lineas son $host="hostname"; $user="mysqlaccountname”: Spassword="mysq] password" ; Cambie hostname al nombre de! PC donde MySQL esta instalado: por ejem- plo, servidorbasedatos .mi empresa. com. Sila base de datos MySQL esta instalada en el mismo PC que su sito web, puede usar 10ca host como el hostname. Cambie mysglaccountname y mysqlpassword al nombre de la cuenta y de la contrasefia que le dio el administrador de MySQL para que tuviera acceso su base de datos MySQL. Si instalé MySQL usted mismo, una cuenta nom- brada root sin contraseha se instala automaticamente. A veces se instala una cuenta con nombre de cuenta y de contrasefia en blanco. Puede usar la cuen- ta root ola cuenta en blanco, pero es mucho mejor si instala una cuenta pa- ra.uso especifico de su aplicacién web. (Me ocupo detalladamente de las cuentas y las contrasehas MySQL en el Capitulo 5.) Una cuenta llamada root sin ninguna contrasefia no es segura. Debe asignar- Je una contrasena lo mas pronto posible. Una cuenta con el nombre de cuen- tay el de contrasena en blanco es todavia menos segura. Cualquiera podria tener acceso a su base de datos sin necesidad de saber el nombre de la cuen- tani la contrasefia. Si existe, debe borrar esta cuenta (consulte el Capitulo 5). Si su cuenta MySQL no requiere de una contra comillas dobles, asf: ‘efia, no digite nada entre las Spassword=" Después de digitar en mysql_send. php los nombres correctos de hostname, de la cuenta y de la contraseia, estos son los pasos generales que debe se- guir para ejecutar una consulta SQL: 1, Dirija su explorador a nysq]_send. php Verd la pagina web mostrada en la Figura 4-1 2. Digite la consulta SQL en el recuadro de texto grande. ad — Figura 41: Pagina web de consulta sa producida por rysql_send. php —— Capitulo 4: Construccién de la base de datos 73 AT 3. Si la consulta Io requiere, primer recuadro de texto. el nombre de Ia base de datos en el Explico los detalles de cémo escribir consultas especificas en SQLen las siguientes secciones de este capitulo. 4, Haga clic en el bot6n “Submit Query”. La consulta se ejecuta y aparece una pagina que muestra los resultados. Si su consulta tenia un error, apareceré un mensaje de error. Puede probar el programa mysq)_send.php digitando esta consulta de prue- ba en el Paso 2 de los pasos anteriores: SHOW DATABASE En esta consulta no es necesario digitar el nombre de una base de datos, asi que puede saltarse el Paso 3. Cuando hace clic en el botén Submit query en el Paso 4, aparecerd una lista de las bases de datos existentes. En la mayoria de los casos, verd una base de datos llamada Test, que automaticamente se ins- tala cuando se instala MySQL. Ademés, probablemente vera una base de datos Hamada mysql, que MySQL usa para almacenar la informacién que necesita, tal como los nombres de las cuentas, las contrasefias y los permisos. Incluso si no hay bases de datos existentes, su consulta SQL se ejecutaré correctamente. Si ocurre un problema, aparecer4 un mensaje de error. Los mensajes de error de MySQI.son habitualmente muy ttiles para encontrar el problema, Una forma mas rapida de enviar consultas en SQL al servidor MySQL Cuando se instale MySQL, un programa simple basado en texto llamado mysql (oa veces monitor terminal o monitor) también se instala. Los programas que se comunican con servidores se aman software cliente; como se comunica con el servidor MySQL, este programa es un cliente. Cuando digita las solicitudes en SQL en este cliente, la respuesta es devuelta al cliente y aparece en pan- talla. El programa monitor puede enviar consultas a través de una red; no tiene que estar corrien- do en la maquina donde esta almacenada la base de datos. Para enviar consultas en SOL a MySQL usando el cliente mysql, siga estos pasos: 1. Localice el cliente mysql. De manera predeterminada, el programa cliente ny sq] se instala en el subdirectorio bin, den- trodel directorio donde se instalé MySQL. En Unix/Linuxel directorio predeterminado es /usr~ Hocel/mysql/bin 0 /usr/local/bin, En Windows el directorio predeterminado es ¢:\mysql \bin. Sin embargo, el cliente puede haber sido instalado en un directorio diferen- te.0,siusted no es el administrador de MySQL, posiblemente no tenga acceso al cliente mysql Sino sabe donde esta instalado MySQL ono puede correr el cliente, pidale al administrador que ponga el cliente en algin ugar donde o pueda correro que le déuna copia para poneren suPC. 2. Inicie el cliente. En Univ/Linux, digite la ruta yel archivo (por ejemplo /usr/Voca1 /nysql/bin/nysq\).En Windows, abra una ventana de comando y luego digite el nombre de la ruta y del archivo (por ejemplo c: \mysql \bin\mysql .exe). Oprima Enter después de digitar el nombre de la ru- tay del archivo, a menos que esté usando los pardmatros mostrados en el Paso 3. indo el cliente mysq1 para entrar en una base de datos en otra parte de la red, ntes parémetros después del comando mysql: -h host: host es el nombre de la maquina donde se ubica MySQL, u user: user esel nombre de su cuenta MySQL. p: Este pardmetro le pide la contrasefia de su cuenta MySQL. Por ejemplo, si esté en el directorio donde se ubica el cliente mysq1, el comando se veria asf: mysq] -h mysqlhost.mycompany.com -u root -p Oprima Enter después de digitar el comando. igite su contrasefia cuando le sea pedida. El cliente mysq] se inicia y usted vera algo parecido a esto: Welcome to the MySQL monitor. Commands end with ; or \9. Your MySQL connection id is 459 to server version: 4.0.13 Type ‘help:* or ‘\h' for help. Type ‘\c' to clear the buffer. mysql> (continuacién) I : ) Capitulo 4: Construccién de la base de datos (comtinia) 5. Seleccione la base de datos que desea usar. En a linea de comando mysq), digite lo siguiente: use databasename Use el nombre de la base de datos que desea consultar, 6. Enla linea de comando mysq}, digite su consulta SOL, seguida de un punto y coma (),ylue- 90 presione fa tecla Enter, El cliente mysq1 continuara soliciténdole informacion y no ejecutara la consulta hasta que Usted digite un punto y come. La respuesta a la consulta apareceré en pantalla 7. Para salir del cliente mysql, digite quit en la linea de comando y oprima la tecla Enter, | Construiv una base de datos Una base de datos tiene dos partes: una estructura que guarda los datos y los, datos mismos. En las siguientes secciones explico cémo crear la estructura de la base de datos. Primero se crea una base de datos vacia, sin ninguna es- tructura, y luego se le agregan las tablas. Las consultas SQL usadas para trabajar con la estructura de la base de datos son CREATE, ALTER, OROP y SHOW. Para usar estas consultas debe tener una cuenta MySQL con permiso para crear, alterar y botar bases de datos y tablas. Consulte en el Capitulo 5 mayor informacion sobre las cuentas MyS(I. Crear una base de datos nueva Para crear una base de datos nueva y vacia, use la siguiente consulta SQL: CREATE DATABASE nombrebasededatos donde nonbrebasededatos es el nombre que usted le da a la base de datos, Por ejemplo, estas dos consultas en SQL crean las bases de datos de los. ejemplos usados en este libro: CREATE DATABASE CatalogodeMascotas CREATE DATABASE DirectoriodeMiembros gee Algunas compaiias de hospedaje de sitios web no le permitiran crear bases de datos nuevas. Le dardn una base de datos para que la use con MySQL, y solo Podrd crear tablas en esta base de datos. Puede tratar de solicitar otra base de datos, pero necesitard una muy buena raz6n. A MySQL y PHP no les importa 75 DROP DATABASE nombrebasededatos 76 Parte: La base de datos MySOL Use DROP cuidadosamente, pues es irreversible. Después de que una base de que todas sus tablas estén en una sola base de datos, en lugar de organizadas en varias bases de datos con nombres significativos. Solo para los humanos es ms facil seguirle la pista a los proyectos cuando estan organizados. Para comprobar por usted mismo que la base de datos fue verdaderamente creada, use esta consulta SQL: SHOW DATABASES Después de crear una base de datos vacia, puede agregarle tablas. (Mas ade- lante en este capitulo describo cémo agregar tablas a una base de datos). Como borrar una base de datos Puede borrar cualquier base de datos con esta consulta SQL: datos se borra, se perdié para siempre. Y todos los datos que estaban en ella también se pierden. Como agregar tablas a una base de datos Puede agregar tablas a cualquier base de datos, ya sea a una base de datos nueva y vacia creada recientemente, 0 a una base de datos existente que ya tenga tablas y datos en ella. Se usa la consulta CREATE para agregar’ tablas a la base de datos. En los ejemplos de disefio de bases de datos que introduje en el Capitulo 3, la base de datos catalogosdemascotas esta disefada con tres tablas: Masco ta, TipodeMascota y ColordelaMascota. La base de datos Directorio deMiembros esté disefiada con dos tablas: Miembro y Entrada, Como las tablas se crean en una base de datos, debe indicar el nombre de la base de datos donde desea crear la tabla. O sea, cuando use el formulario mostrado en la Figura 4-1, debe digitar el nombre de la base de datos en el campo supe- rior. Sino lo hace veré el mensaje de error No Database Selected. La consulta para agregar una tabla empieza con CREATE TABLE nombredetabla Luego sigue una lista de nombres de columnas con sus definiciones. La infor- macién de cada columna se separa de la informacion de la siguiente columna mediante una coma. La lista completa debe encerrarse entre paréntesis. Cada nombre de columna debe seguirse de su tipo de datos (explico los tipos de da- tos detalladamente en el Capitulo 3) y cualquier otra definicion requerida. Es- tas son algunas definiciones que puede usar: je SevEevdEvEbEvpeEvBUUUEY Capitulo 4: Construcci6n de la base de datos Be NOT nut f > DEFAULT value: Sino se indica ningiin otro valor, este valor se almace- na en la columna cuando se crea la fila. Esta columna debe tener un valor; no puede estar vacia. )_INCRENENT: Use esta definicién para crear un niimero secuencial Conforme se agregan filas, el valor de esta columna aumentara en un ni mero entero desde la tiltima fila que se agreg6. Puede pasar por alto el njimero automético asignandole un valor especifico a la columna. + UNSIGNED: Use esta definicién para indicar que los valores en este cam- po numérico nunca serén niimeros negativos. El dltimo elemento en una consulta CREATE TABLE indica cual columna 0 co: binacién de columnas es el identificador Gnico para la fila, es decir, la clave pri- maria. Cada fila de una tabla debe tener un campo o una combinaci6n de campos diferente para cada fila. Dos filas no pueden tener la misma clave pri- maria. St intenta agregar una fila con la misma clave primaria que una fila ya existente en la tabla, obtendra un mensaje de error y la fila no se agregard. El disefio de la base de datos identifica la clave primaria (tal como describo en el Capitulo 3). Debe especificar la clave primaria usando el siguiente formato: CREATE TABLE Miembro ( loginName VARCHAR(20) NOT NULL PRIMARY KEY, createDate DATE NOT NULL); PRIMARY KEY(nombre_columna) El nombreco/umna se encierra entre paréntesis. Si esta usando una combinaci6n de columnas como clave primaria, incluya todos los nombres de columnas, sepa- rados por comas. Por ejemplo, podrfa designar la clave primaria para la tabla En- trada enla base de datos Director iodeMi embros usandola siguiente consulta: PRIMARY KEY (Nombre_entrada, Tiempo_entrada) La Lista 4-2 muestra la consulta CREATE TABLE usada para crear la tabla jem bro dela base de datos Directors odeMiembros. Si quisiera, podria digitar esa consulta en una sola Iinea. A MySQL no le importa cuantas lineas use. Sin embargo, el formato mostrado en la Lista 4-2 es mas facil de leer. Este formato amigable a los humanos también le ayuda a detectar errores de digitacién. Lista 4-2: Consulta SQL para crear una tabla CREATE TABLE Miembro ( Nombreentrada VARCHAR(20) NOT NULL, Fechacreacion OATE NOT NULL, clave CHAR(255) NOT NULL, Apellido VARCHAR(50), Nombre VARCHAR( 40), calle VARCHAR(50) ciudad VARCHAR(50), estado CHAR( 2), codigopostal CHAR(10),, 78 Parte it:La base de datos MySOL SS emai? VARCHAR( 50), telefono CHAR(15),. fax CHAR(15) PRIMARY KEY(loginName) ) a de los nombres de las columnas en Ia Lista 4-2 esta ence y otro en la tiltima linea) y ja columna. Observe que la list rrada entre paréntesis (uno en la primera linea que hay una coma después de la definicién de cad! no debe usar ninguna palabra Recuerde que, como indiqué en el Capitulo $ columnas. Si lo hace, MySQL. le reservada por MySQL en los nombres de daré un mensaje de error parecido a este: You have an error ‘in your SQL syntax near “order var(20))" at Vine 1 Observe que este mensaje muestra la definicién de la columna que aSQl-no Je gusto y la linea donde encontré la definicién ofensiva, Sin embargo el men saje no dice mucho sobre cuél es el problema. Elerror in your Sal syt tax (error en la sintaxis de SQL) al cual se refiere es haber usado la palabra order, reservada por MySQL, como nombre de una columna, Después de crear una tabla puede solicitar verlarevisar su estructura o¢liminarla ) Para ver las tablas agregadas a una base de datos, use esta consulta SQL: 4 SHOW TABLES | También puede ver la estructura de una tabla con esta consulta: SHOW COLUMNS FROM nombre_tabla © Puede eliminar cualquier tabla con esta consulta: DROP TABLE nombre_tabla tabla, se pierde para siempre. Y todos los datos que estaban en ella tam- i Use DROP cuidadosamente, pues es irreversible. Despu 5 bién se pierden. Cémo cambiar la estructura de la base de datos Su base de datos no esta escrita en piedra, Puede cambiar el nombre de latabla ‘Usando la consulta ALTER; también puede agregar, eliminar o renombrar una co- jumna, o cambiar el tipo de datos y cualquier otro atributo de la columna, El formato bésico de esta consulta es ALTER TABLE nombretabla, seguido por los cambios especificos que esta solicitando, La Tabla 4-1 muestra los que es posible hacer. |_=_ > (= —_(—(- th—_—_ &- = ET tk mellem OmnnelUCUDlUCUlUlCUD Oh iE a Capitulo 4: Construccion de la base de datos 79 Tabla 4-1 Cambios que se pueden hacer con la consulta ALTER __Cambio Descripcién ADD nombre_columna Agrega una columna; defi nicion incluye el finicion tipo de datos y definiciones opcionales ALTER nombre_columna —_Elimina el valor predeterminado de una _SET DEFAULT valor columna ALTER nombre_columy Elimina el valor predeterminado de una DROP DEFAULT umn CHANGE definicion Cambia la definicién de una columna y nombre_columna renombra la columna; defi nici on incluye __nuevo_nombre_columna el tipo de datos y definiciones opcionales DROP nombre_columna Borra una columna, incluyendo los datos que contenga. Los datos no se pueden recuperar. MODIFY nombrecolunna — Cambia la definicién de una columna; definicion def inicion incluye el tipo de datos y definiciones opcionales. RENAME Renombra una tabla nuevo_nombre_columna ‘Cambiar una base de datos no es nada raro. Hay muchas razones por las cua- les podria querer cambiar algo en su base de datos. Por ejemplo, suponga que definié la columna Apel 1ido con VARCHAR( 20) enla tabla Miembro de la ba- se de datos 01 rector iodeMiembros. En ese momento, 20 caracteres parecie- ron suficientes para un apellido, Pero acaba de recibir un memorando anunciando que el nuevo CEO es John Schwartzheimer-Losertman. jAy! MySQL. truncaré su nombre dejando solo las primeras 20 letras, un nombre poco-me- nos-que-deseable para su nuevo jefe. Asi que debe hacer mas ancha su colum: na, y pronto. Envie esta consulta para cambiar la columna en un segundo: ALTER TABLE Member MODIFY Apellido VARCHAR(50) Mover datos hacia dentro y hacia fuera de una base de datos Una base de datos vacfa es como un frasco de galletas vacio: algo muy poco atractivo. Y sondear una base de datos vacia no es mas interesante o fructife- ro que sondear un frasco de galletas vac Una base de datos solo es util en relaci6n con la informacién que guarda. my SO Parte tt: La base de datos MySQL Una base de datos debe ser capaz de recibir informaci6n para almacenar y de entregar informaci6n cuando se le pide. Por ejemplo, la base de datos Direc Lori adeMienbros debe ser capaz de recibir la informacion de los miembros, y también debe ser capaz de entregar la informacion que guarda cuando se le Xotieita, Por ejemplo, si desea averiguar la direcci6n de un miembro en parti ular, la base de datos debe entregarle esta informacion apenas se la pida. Su base de datos MySQL responde a cuatro tipos de solicitud! 1 Agregar informacién: Agregar una fila a una tabla. Cambiar informacion en una fila existente. Esto in- Actualizar informacién blanco dentro de una fila ya existente. cluye agregar datos a un campo en © Recuperar informacién: Buscar datos. Este tipo de solicitud no elimina los datos de la base de datos. de datos Eliminar informacion: Borrar datos de la bas Avveces sus preguntas requerirén informacion de mas de una tabla, Por ejem plo. la pregunta "Cudinto cuesta un dragén verde?" requiere informacion de Iatabla Mascota y de la tabla Col or. Facilmente puede hacer es a SELECT, combinando las tablas. en una sola consult En las secciones siguientes comento cémo recibir y entregar informacion, y también como combinar tablas, Agregar informacion ‘Todas las bases de datos necesitan datos. Una posibilidad es que usted quie- ra agregar datos a su base de datos para que los usuarios puedan verla, por ejemplo en el Catalogo de Mascotas que introduje en el Capitulo 3. Otra posi- bilidad es crear una base de datos vacia para que los usuarios pongan datos en ella, haciendo que la informacion slo esté disponible para usted, como en el ejemplo del Directorio de Miembros. En cualquiera de estos escenarios hay que agregar datos a la base de datos. Sisus datos estén todavia en papel usted puede digitarlos directamente en una bar sede datos MySQL, una fila ala vez, usando consultas SQL. Sin embargo, sitiene tnuchos datos, este proceso podria hacerse muy tedioso y tomaria mucho tiempo digitar la informnaci6n, Suponga que debe agregara su base de datos informacion Sobre 1,000 productos. Asumiendo que digite a la velocidad de la luz y que pueda dligitar una fila por minuto, serfan 16 horas de digitar répidamente— o de editar rapidamente, en todo caso. Se puede hacer, pero no es divertido. Por otra parte suponga que tiene que incluir alos 5,000 miembros de una organizacién en una ba- Sede datos y que toma cinco minutos digitar lainformacién de cada uno. Esto to- maria mas de 400 horas de digitacién, jquién tiempo para eso! aan Pana AnAnnANA dg oma Capitulo 4: Construccién de la base de datos & 7 Sitiene que digitar grandes cantidades de datos, considere algunas alternativas. A veces es una buena opcién escanear los datos. O quizé necesite suplicar por ayuda, opedirla prestada o contratarla. En muchos casos sera mas rapido digitar los datos enun gran archivo de texto que digitar fila por fila en consultas individuales le SQL. La consulta OAD de SQL puede leer datos de un archivo grande de texto (0 i cluso de un archivo de texto pequeno). O sea, si sus datos ya estan en un archi- vo de PC, puede trabajar con ese archivo; no tiene que digitar todos los datos de nuevo. Incluso si los datos estan en un archivo cuyo formato no es de texto (por ejemplo en un archivo de Excel, Access u Oracle), usualmente es posible convertir el archivo a un gran archivo de texto que luego puede ser leido por su base de datos MySQL. Si los datos todavia no estan en un archivo de PC y hay mucha informacion, probablemente sera mas répido digitar los datos en el PC en un gran archivo de texto y transferirlo a MySQL como segundo paso. La mayoria de los archivos de texto pueden ser lefdos por MySQL, pero algunos for- matos son mas faciles de leer que otros. Si est4 planeando digitar los datos en un gran archivo de texto, lea la seccién "Como agregar una enorme cantidad de datos para averiguar cual es el mejor formato para su archivo de texto. Por supuesto que silos datos ya estan en su PC tendra que trabajar con el archivo tal como esté. Como agregar una fila ala vez La consulta INSERT se usa para agregar una fila a una base de datos. Esta consulta le dice a MySQL en cual tabla agregar la fila y cuales son los valores para los campos en la fila. La forma general de la consulta es IWSERT INTO nonbre_tabla (nombre colunna, nobre_coluana,...., nonbre_columa) VALUES (valor, valor,....,valor} Las siguientes reglas se aplican a la consulta INSERT £ Los valores deben enumerarse en el mismo orden en que se enume- + ran los nombres de las columnas. El primer valor en la lista de valores se inserta en la columna que se nombra primero en la lista de columnas; el segundo valor en la lista de valores se inserta en la columna que se nombra de segunda en Ja lista de columnas y asi sucesivamente. Se permite una lista de columnas parcial. No tiene que enumerar todas, las columnas. Las columnas que no se enumeran recibiran su valor prede- terminado o, sino tienen un valor predeterminado, se dejaran en blanco, No es obligatorio usar una lista de columnas. Si esta digitando valores para todas las columnas, no necesita la lista de columnas del todo. Sino se enumeran columnas, MySQL buscar valores para todas las colum- nas, en el orden en el que aparecen en la tabla, + La lista de columnas y la lista de valores debe ser de la misma longi- ud. Sila lista de columnas es mas larga o mas corta que la lista de valo- res, recibiré un mensaje de error como este: Column count doesn't match value count. 82 Parte Il: La base de datos MySQL a La siguiente consulta INSERT agrega una fila a la tabla Miembro: NNSERT INTO Nienbro (Nonbreentrada Fechacreacton, clave Apel Tido, calle,ciudad,estado,codigo_postal email telefone fax VALUES (*bigguy","2001-Dec-2*,*secret* "Smith", "1234 Happy St*."Las Vegas" "WV" "8888 *gsmith@GSmi thConpany .con”."(355) 555-5585" Observe que Nombre no aparece en la lista de los nombres de columnas. No se digita ningtin valor en el campo Nombre. Si Nombre se define como NOT NULL, MySOL no lo permitiria, pero como Nonbre no esta definido como NOT NULL. no hay problema. Ademés, si la definicion para Nombre incluye un va lor predeterminado, se le asignaria ese valor predeterminado, pero como no es asi, el campo se deja vacio. Observe que el valor almacenado para fx es una cadena vacia: a MySQL no le molestan las cadenas vacias. Para ver los datos que digit6 y asegurarse cle que los digité correctamente, use una consulta SQL que recupere los datos de la base de datos, Describo estas consultas detalladamente en "Cémo recuperar informacion’ més adelante en este capitulo, En resumen, a siguiente consulta recupera todos los datos en la tabla Mi enbro: SELECT * FROM Miembro Como agregar una enorme cantidad de datos Si tiene que agregar una gran cantidad de datos que ya estan en un archivo de PC, puede transferir los datos del archivo existente a su base de datos MySQL. La consulta SOL que lee los datos de un archivo de texto es LOAD. La consulta LOAD requiere que especifique la base de datos. Como los datos en una base de datos estan organizados en filas y columnas, el archivo de texto leido debe indicar dénde empiezan y terminan los datos para cada columna y donde termina la fila, Para indicar columnas, un caracter espe- cifico separa los datos de cada columna. Como valor predeterminado, MySQL busca un caracter de tabulaci6n para separar los campos. Sin embargo, sila ta- bulaci6n no funciona para su archivo de datos, puede escoger un caracter dife- rente para separar los campos y decirle a MySQL, en la consulta, que un caracter diferente del de tabulacién separa los campos. También como valor predeterminado, se espera que el final de una linea sea el final de una fila, aun- que puede escoger un caracter especifico para indicar el final ce una linea si es necesario. Un archivo de datos para la tablaMascota seve ast: Uni corniocTAB>cabal1o<TAR>cuerno en espiral<Tab>s000,00¢Tab>/pix/uni corn. Jpg Pegaso<TAB>cabal |ocTA8>alada<Tad>8000..00¢Tab> /pix/pegasus jpg Leon<TAB>gatosTAB>grande:melena en ccuel 10<Tab>Z000.00<Tab>/pix/1 ion. Jpg Un archivo de datos con tabuladores entre los campos es un archivo delim! tado por tabuladores. Otro formato comtin es un archivo delimitado por co- mas, donde las comas separan los campos. Si sus datos estan en otro formato de archivo, debe convertirlo a un archivo delimitado. Capitulo 4: Construccién de la base de datos Para convertir datos de otro formato de archivo a un archivo delimitado, con sulte el manual del software correspondiente o hable con un experto local que entienda el formato actual de los datos. Muchos programas, como Excel, Access u Oracle, le permiten ordenar los datos en un archivo delimitado. En. un archivo de texto, tal vez pueda convertirlo al formato delimitado usando la funcién de buscar y reemplazar de un editor o procesador de palabras. Si tiene un archivo verdaderamente problematico, quiz necesite buscar la ayu da de un experto o de un programador. La forma basica de una consulta LOAD es LOAD DATA INFILE “nombrearchivodatos" INTO TABLE nombre_tabla Esta forma basica puede ir seguida de frases opcionales si desea cambiar al- gunos de los delimitadores predeterminados. Las opciones son FIELDS TERMINATED BY ‘caracter' FIELDS ENCLOSED BY ‘caracter* LINES TERMINATED BY 'caracter* Suponga que tiene el archivo de datos para la tabla Mascota, mostrada ante- riormente en esta secci6n, pero los campos estin separados por comas y no por el tabulador. El nombre del archivo de datos es mascotas .dat, y esta lo- calizado en el mismo directorio que la base de datos. La consulta SQL. para eer los datos en la tabla es LOAD DATA INFILE "mascotas.dat" INTO TABLE Mascota FIELDS TERMINATED BY ',* Para poder usar la consulta LOAD DATA INFILE, la cuenta MySQL debe tener el privilegio FILE en el anfitrién del servidor. En el Capitulo 5 comento los privilegios de las cuentas MySQL. Para ver los datos que carg6, y asegurarse de que estan correctos, use una consulta SQL que recupere los datos de la base de datos. En la seccién si- guiente describo detalladamente estos tipos de consultas. En resumen, use la siguiente consulta para ver y revisar todos los datos de la tabla: SELECT * FROM Mascota Como recuperar informacion El nico propésito de guardar informacion es tenerla a disposicion cuando se necesite. Una base de datos vive para responder preguntas. ;Cudles masco- tas estén a la venta? ;Quiénes son los miembros? ;Cuntos miembros viven en Arkansas? {Hay un lagario a la venta? ,Cudnto cuesta un dragon? ,Cudl es el niimero telefénico de Goliath Smith? Y asi sucesivamente. Se usa la consul- ta SELECT para hacerle preguntas a la base de datos. 83 82 Parte Il: La base de datos MySQL es La siguiente consulta INSERT agrega una fila a la tabla Mi INSERT INTO Miembro (Nowbreentrada,Fechacreacion, clav calle,ciuded,estado,codigo_postal ,enail.telefone fax) UES (*Digguy","2001-Dec-2","secret”, “Smith” “1234 Happy St*,"Las Vegas* NV" "89888". gomith@GSmi thCompany con” .°(555) 955-5555", "") Observe que Nombre no aparece en la lista de los nombres de columnas. No se digita ningan valor en el campo Nonbre. Si Nombre se define como NO NULL. MySQL no lo permitiria, pero como Nombre no esta definido como HOT NULL. no hay problema. AdemAs, sila definicién para Nombre incluye un va- lor predeterminado, se le asignaria ese valor predeterminado, pero como no ‘es asi, el campo se deja vacio. Observe que el valor almacenado para fax es una cadena vacia; a MySQL no le molestan las cadenas vacias. Para ver los datos que digité y asegurarse de que los digité correctamente, use una ‘consulta SOL que recupere los datos de la base de datos, Describo estas consultas detalladamente en "Cémo recuperar informacién" més adelante en este capitulo. En resumen, la siguiente consulta recupera todos los datos en la tabla Miembro SELECT * FROM Miembro Cémo agregar una enorme cantidad de datos Si tiene que agregar una gran cantidad de datos que ya estan en un archivo de PC, puede transferir los datos del archivo existente a su base de datos MySQL. La consulta SQL que Jee los datos de un archivo de texto es LOAD. La consulta OAD requiere que especifique la base de datos. Como los datos en una base de datos estén organizacos en filas y columnas, e archivo de texto leido debe indicar dénde empiezan y terminan los datos para cada columna y dénde termina la fila, Para indicar columnas, un caracter espe- cifico separa los datos de cada columna. Como valor predeterminado, MySQL busca un caracter de tabulacién para separar los campos. Sin embargo, si la ta- bulacién no funciona para su archivo de datos, puede escoger un caracter dife- rente para separar los campos y decirle a MySQL, en la consulta, que un caracter diferente del de tabulaci6n separa los campos, También como valor predeterminado, se espera que el final de una linea sea el final de una fila, aun- que puede escoger un caracter especifico para indicar el final de una linea si es necesario, Un archivo de datos para la tabla Mascota se ve asi Unicornio<TAB>caballocTAB>cuemo en espiral<Tab>S000.00¢Tab?/pix/unicorn. jpg Pegaso<TAB)cabal 1ocTAB>3 lado<Tab>8000.,00<Tab>/pix/pegasus..Jp9 Leon<TAB>gatocTABgrande:melene en uel 10<Tab>2000.00<Tab>/pix/ ton. Jpg Un archivo de datos con tabuladores entre los campos es un archivo deli tado por tabuladores. Otro formato comin es un archivo delimitado por co- mas, donde las comas separan los campos. Si sus datos estan en otro formato de archivo, debe convertirlo a un archivo delimitado. onan -n aaa | = SS SS 2S Se SS SS LeU gtso ES Capitulo 4: Construccién de ta base de datos Para convertir datos de otro formato de archivo a un archivo delimitado, con: sulte el manual del software correspondiente o hable con un experto local que entienda el formato actual de los datos. Muchos programas, como Excel, Access u Oracle, le permiten ordenar los datos en un archivo delimitado, En un archivo de texto, tal vez pueda convertirlo al formato delimitado usando la funcién de buscar y reemplazar de un editor o procesador de palabras. Si tiene un archivo verdaderamente problematico, quiz4 necesite buscar la ayu- da de un experto o de un programador. La forma basica de una consulta LOAD es LOAD DATA INFILE "nombrearchivodatos* INTO TABLE nombre_tabla Esta forma basica puede ir seguida de frases opcionales si desea cambiar al- gunos de los delimitadores predeterminados. Las opciones son FIELDS TERMINATED 8Y ‘caracter' FIELDS ENCLOSED BY 'caracter* LINES TERMINATED BY ‘caracter' Suponga que tiene el archivo de datos para la tabla Mascota, mostrada ante- riormente en esta secci6n, pero los campos estan separados por comas y no por el tabulador. El nombre del archivo de datos es mascotas .dat, y esta lo- calizado en el mismo directorio que la base de datos. La consulta SQL. para leer los datos en la tabla es LOAD DATA INFILE "mascotas.dat" INTO TABLE Mascota FIELDS TERMINATED BY *,* Para poder usar la consulta LOAD DATA INFILE, la cuenta MySQL debe tener el privilegio FILE en el anfitrién del servidor. En el Capitulo 5 comento los privilegios de las cuentas MySQL. Para ver los datos que cargo, y asegurarse de que estén correctos, use una consulta SQL que recupere los datos de la base de datos. En la seccién si- guiente describo detalladamente estos tipos de consultas. En resumen, use la siguiente consulta para ver y revisar todos los datos de la tabla: SELECT * FROM Mascota Como recuperar informacion nes tenerla a disposicién cuando se El Gnico propésito de guardar informac necesite. Una base de datos vive para responder preguntas. Cudles masco- tas estan a la venta? {Quiénes son los miembros? ;Cuntos miembros viven en Arkansas? {Hay un lagarto a la venta? {Cudnto cuesta un drag6n? {ual es el niimero telef6nico de Goliath Smith? Y asf sucesivamente. Se usa la consul- ta SELECT para hacerle preguntas a la base de datos, 83 SA. Partelt:La base de datos MySQL La consulta SELECT més simple y basica es SELECT * FROM nombre_tabla Esta consulta recupera toda la informacién de la tabla. El asterisco (*) comodin que significa todas las columnas. La consulta SELECT puede ser mucho més selectiva. Las palabras y frases en SQL en la consulta SELECT pueden sefalar exactamente la informaci6n n saria para responder su pregunta. Puede especificar cual informacién desea, como desea que se organice y cual es la fuente de Informacién: Puede solicitar tinicamente la informacién (las columnas) que necesi- ta para responder su pregunta. Por ejemplo, puede solicitar solo el nombre y los apellidos para crear una lista de miembros. V Puede solicitar la informacién en algiin orden en particular. Por ejem- plo, puede solicitar que la informacién se clasifique en orden alfabético, Puede solicitar informacién de objetos seleccionados (las filas) en su tabla. (En el Capitulo 3 explico qué son los objetos en las bases de da tos). Por ejemplo, puede solicitar el nombre y el apellido solo de aque- llos miembros cuyas direcciones estén en Florida. Cémo recuperar informacién especifica Para recuperar informacién especifica, enumere Jas columnas que contienen la informacién que desea. Por ejemplo: SELECT nombre_columna, nombre_columna, nombre_columna, FROM nombre_tebla Esta consulta recupera los valores de todas las filas para las columnas indica- das. Por ejemplo, la siguiente consulta recupera todos los nombres y apelli- dos almacenados en la tabla Mienbro SELECT Apellido,Nombre FROM Miembro Puede realizar operaciones mateméticas con las columnas cuando las selecciona. Por ejemplo, puede usarla siguiente consulta SELECT para sumar dos columnas, SELECT coll#col2 FROM nombre tabla puede usar la siguiente consulta: SELECT precio,precio*1.08 FROM Mascota Elresultado es el precio y el precio con el impuesto de ventas del 8 por ciento sumado. Puede cambiar el nombre de una columna cuando la selecciona, as SELECT precio.precio*l 08 AS precioConImpuesto FROM Mascote i? fff Ae 2 2 2 Pf ______ Capitulo 4: Construccién de la base de datos «= @5 La cldusula AS le dice a MySQL que le dé el nombre prec ioConInpuesto ala segunda columna recuperada, Asi, la consulta recupera dos columnas de da- tos: precio y precioConImpuesto En algunos casos usted no deseara ver los valores en una columna, pero si saber algo sobre la columna. Por ejemplo, tal vez quiere saber el valor mas bajo en la columna 0 el valor més alto en la columna. La Tabla 4-2 enumera parte de la informacion disponible sobre las columnas. Tabla 4-2 Informacion que se puede seleccionar Formato SQL Descripcién de la informacion AVG Indica el promedio de todos los valores en Cnombrecoluma) —_nombrecolumna Indica el numero de ilas en las cuales nombrec] umna 2 no est en blanco. Indica el valor mas alto ennombrecolumna (nombrecolumna) MIN Indica el valor mas bajo en nombrecol umna (non sum Indica la suma de todos los valores en nombrecol unna (nombrecolumna) Por ejemplo, la consulta para averiguar el precio més alto en la tabla Mascota es SELECT MAX(precia) FROM Mascota Las palabras de SQL.comoMAX() ¥ SUM() son funciones. SQL ofrece muchas otras funciones ademas de las que aparecen en la Tabla 4-2. Algunas funcion como las de la Tabla 42, brindan informacion sobre una columna. Otras fun- ciones cambian cada valor seleccionado. Por ejemplo, SORT ) indica la raiz cuadrada de cada valor en la columna, y 0AYNAME () indica el nombre del dia de Ia semana para cada valor en la columna fecha, en lugar della fecha verdadera almacenadaen la columna, Hay mas de 100 funciones que pueden usarse en las consultas SELECT. Para conocer las descripciones de todas las funciones, vea la documentacién de MySQL en www .mysq) .com/documentat ion Cémo recuperar datos en un orden especifico ‘Tal vez quiera recuperar los datos en algan orden en particular. Por ejemplo, enla tabla Mi embro, tal vez quiera que los miembros sean organizados en or- den alfabético por apellido. O, en la tabla Hascota, tal vez quiera que las mascotas sean agrupadas por tipo de mascota. | 86 Parte Il: La base de datos MySQL oe En la consulta SELECT. ORDER BY y GROUP BY afectan el orden en que los datos se presentan: ORDER BY: Para ordenar informacién, use la frase ORDER BY nombre_columna Los datos son organizados por nonbrecolumna en orden ascendente. Por ejemplo, siel nonbrecolumna es Apel ido, los datos se presenta- ran en orden alfabético ordenados por el apellido. Puede organizarlos en orden descendente agregando la palabra DESC ai tes del nombre de la columna, Por ejemplo: SELECT * FROM Miembro ORDER BY DESC Apellido GROUP BY: Para agrupar informacién, use la sig GROUP BY nombrecolumna ente frase: Las filas que tienen el mismo valor de nombre_columna_ se agrupan jun- tas. Por ejemplo, use esta consulta para agrupar las filas que tienen un mismo valor de Ti podeMascota: SELECT * FROM Mascota GROUP BY TipodeMascota Puede usar GROUP BY y ORDER BY en una misma consulta. Cémo recuperar datos de una fuente especifica Lomas usual es que no quiera toda la informacién de una tabla. Solo quiere in formaci6n de objetos especificos de una base de datos: o sea, las filas. Hay tres palabras SQL usadas habitualmente para especificar la fuente de la informacién: 1 WHERE: Le permite solicitar informacion de objetos de una base de datos con ciertas caracteristicas. Por ejemplo, puede solicitar los nombres de los miem- bros que viven en California, o puede pedir s6lo las mascotas que sean gatos, LINIT:Le permite limitar el nimero de filas de las cuales se extraerd la informaci6n. Por ejemplo, puede solicitar toda la informacion de las pri- meras tres filas en la tabla. » DISTINCT: Le permite solicitar informacién de solo una fila de filas idénticas. Por ejemplo, en la tabla Entrada puede solicitar el Nonbre_ entrada, pero es pecificar no duplicar nombres, delimitando asila respuesta a un registro para cada miembro. Esto responderia a la pregunta "Ha entrado el miembro alguna vez?" en lugar de la pregunta ";Cudntas veces ha entrado el miembro? La clausula WHERE de la consulta SELECT le permite hacer selecciones bastan- tes complicadas, Por ejemplo, suponga que su jefe le pide una lista de todos los miembros cuyos apellidos empiezan con B, que viven en Santa Barbara y que tienen un § en su ntimero telef6nico o de fax. Estoy seguro de que hay muchos ‘os fara ese tipo de lista. Puede complacer a su jefe y obtener esta lista con la consulta SELECT, usando la clausula WHERE 1) Pee ee ee FS VeVveevVvVvVeeeeeUeUVUeEe Se 8 Capitulo 4: Construccién de la base de datos © & 7 El formato basico de la cléusula WHERE es WHERE expresion AND|OR expresion AND|OR expresion ... expres ion especifica un valor que debe compararse con los valores guarda- dos en la base de datos. Solo se seleccionan las filas que contengan informa- cidn que concuerde con la expresiGn. Puede usar tantas expresiones como necesite, cada una separada por AND w OR. Cuando usa AND, las dos expre- siones conectadas por AND (es decir, tanto la expresién que esta antes de AND como la expresién que esta después de AND) deben concordar para seleccionar la fila. Cuando se usa OR, s6lo una de las expresiones conectadas por 08 debe concordar para seleccionar esa fila Algunas expresiones comunes se muestran en la Tabla 4-3. Tabla 4-3 Expresiones de la clausula WHERE Expresin Fjemplo Resultado columna = valor codigopostal= — Sdlo selecciona las filas "12345" donde 12345 esté almace- nado en la columna lla- mada cOdigo_postal columna > valor codigopostal _Sélo selecciona las filas > "50000" donde e! cédigo postal es columna >= valor columna < valor columna columna BETWEEN valor] AND valor2 columna IN (valori valores) codigoposta >= "5000 codigopostal < "50000" codigopostal <= "50000" codigopastal BETWEEN *20000" AND "30000" codigopostal 1N("90001", *30044") 50001 o mayor Solo selecciona las filas donde el cédigo postal es 50000 0 mayor Sélo selecciona fas filas donde el cédigo postal es 49999 0 menor Solo selecciona las filas donde el codigo postal es 50000 0 menor Sélo selecciona las filas donde et cédigo postales mayora 19999 peromenor a 30001 Solo selecciona las filas donde el cédigo postal es 90001 o 30044 88 _ Parte tt: La base de datos MySQL Expresién Ejemplo Resultado (continuacién) columna NOT IN codigopostal —_Sdlo selecciona las filas (valorl,valor2,..) NOT IN donde el cddigo postal c9o001", es cualquier cédigo 30044") postal con excepcidn de 90001 0 30044 columna LIKE valor codigopostal Selecciona todas las valor puede contene UKE "996" filas donde el codigo rel comodin % (que postal empieza con concuerda con cualquier cadena) y_ (que concuerda con cualquier caracter) columna NOT LIKE zip NOT LIKE — Selecciona las filas valor — valor puede "33" donde el codigo postal contener el comodin % no empieza con 9 (que concuerda con cualquier cadena) y _ {que concuerda con cualquier caracter) Puede combinar cualesquiera de las expresiones de la Tabla 4-3 con AND y OR. En algunos casos debera usar paréntesis para aclarar los criterios de se- leccién, Por ejemplo, puede usar la siguiente consulta para responder la ur- gente necesidad de su jefe por encontrar todas las personas en el Directorio de Miembros cuyos nombres empiecen con B, que vivan en Santa Barbara y que tengan un 8 en su nmtimero telefonico 0 de fax SELECT Apellido,Nombre FROM Miembro WHERE Apellido LIKE "B%" AND ciudad = "Santa Barbara” AND (telefono LIKE "28%" OR fax LIKE "S8%") Observe los paréntesis en la tiltima linea, Sin ellos no obtendré los resultados que le pidi6 su jefe. Sin los paréntesis, cada conector se procesaria en orden del pri- mero al titimo, lo que daria como resultado una lista que incluiria todos los miembros cuyos nombres empiezan con B y que viven en Santa Barbara y cuyos nntimeros telefénicos tienen un 8 en ellos, y todos los miembros cuyo niimero de fax tiene un 8 en ellos independientemente de si viven ono en Santa Barbara e in- dependientemente de si su nombre empieza o no con B. Cuando se procesara el timo OR, se seleccionarfan los miembros cuyas caracteristicas concordaran con laexpresi6n antes de OR ola expresi6n después de 08. La expresion antes ce OR se conecta con las experiencias previas por los AND previos y por ello no es inde pendiente, pero la expresion después de OR sf es independiente, lo cual resultaria enlaseleccién de todos los miembros con un 8 en su niimero de fax. nnn? nh 11-1 ni 1) —_hA— A —_A—_ 1 hn an ee et Capitulo 4: Construccién deta base de datos © &Y LIMIT especifica cudntas filas se pueden recuperar, La forma para LIMIT es LIMIT numeroinicio.numerofilas La primera fila que desea recuperar es numero inicio, y el nimero de filas que desea recuperar es numerofilas. Si numeroinicio no se especifica, se me que es 1. Para seleccionar s6lo los tres primeros miembros que viven en Texas, use esta consulta: SELECT * FROM Miembro WHERE estado="TX" LIMIT 3 Algunas consultas SELECT encontraran registros idénticos, pero en este ¢j plo usted s6lo quiere ver uno —no todos — de los registros idénticos. Para evitar que la consulta recupere todos los registros idénticos, agregue la pala- bra DISTINCT inmediatamente después de SELECT Cémo combinar informacion de tablas En las secciones anteriores de este capitulo, asumi que toda la informacion estaba en una sola tabla. Sin embargo, usted podria querer combinar infor- macién de tablas diferentes. Facilmente puede hacerlo en una sola consulta Se pueden usar dos palabras en una consulta SELECT para combinar infor- maci6n de dos o mas tabla: {| UNION: Se recuperan filas de una o més tablas y se almacenan juntas, una después de la otra, en un solo resultado. Por ejemplo, si su consulta seleccio- 16 6 filas de una tabla y5 filas de otra tabla, el resultado contendré 11 fas. JOIN; Las tablas se combinan una junto a la otra y la informacién se re- cupera de ambas tablas, UNION Se usa UNION para combinar los resultados de dos 0 mas consultas de selec- cién. Los resultados de cada consulta se afiaden al conjunto de resultados se- guidos de los resultados de la consulta anterior. E formato de la consulta UNTON es el siguiente: SELECT consulta UNION ALL SELECT consulta Puede combinar tantas consultas SELECT como necesite. Una consulta SE LECT puede incluir cualquier formato SELECT valido, incluyendo clausulas WHERE, clausulas LIMIT, etc. Las reglas para las consultas son § Todas las consultas SELECT deben seleccionar el mismo ntimero de columnas. 1 Las columnas seleccionadas en las consultas deben contener el mismo ' tipo de datos. S88 Parte tt: La base de datos MySOL __ Expresién Fjemplo __ Resultado (continuacién) _ columna WOT IN codigopostel —_Sélo selecciona las filas (valorl,valor2,.) NOT IN donde el cédigo postal ("900 es cualquier codigo "30044" ) postal con excepcién de 90001 0 30084 colunna LIKE valor codigopostal —_Selecciona todas las valor puede contene UKE "9%" filas donde el codigo, + el comodin% (que postal empieza con $ concuerda con cualquier cadena) y _(que concuerda con cualquier caracter) — colunna NOT LIKE zip NOT LIKE Selecciona las filas valor — valor puede “98 donde el cadigo postal contener el comodin % no empieza con 9 {que concuerda con cualquier cadena) y _ (que concuerda con cualquier caracter) Puede combinar cualesquiera de las expresiones de la Tabla 43 con AND y OR. En algunos casos deberé usar paréntesis para aclarar los criterios de se- leceién, Por ejemplo, puede usar la siguiente consulta para responder la ur- gente necesidad de su jefe por encontrar todas las personas en el Directorio. de Miembros cuyos nombres empiecen con B, que vivan en Santa Barbara y que tengan un 8 en su ntimero telefonico o de fax: ECT Apellido,Nombre FROM Miembro WHERE Apeltido LIKE "B&™ AND ciudad = "Santa Barbar AND (telefono LIKE "%8%" OR fax LIKE "%82") Observe los paréntesis en la tiltima linea, Sin ellos no obtendra los resultados que le pidi6 su jefe. Sin los paréntesis, cada conector se procesaria en orden del pri- meroal dltimo, lo que daria como resultado una lista que ineluiria todos los miembros cuyos nombres empiezan con By que viven en Santa Barbara y cuyos inimeros telef6nicos tienen un 8 en ellos, y todos los miembros cuyo nimero de fax tiene un 8 en ellos independientemente de si viven 0 no en Santa Barbara e in- dependientemente desi su nombre empieza o no con B. Cuando se procesara el {iltimo 08, se seleccionarian los miembros cuyas caracteristicas concordaran con laexpresién antes de 0R o la expresién después de 0R. La expresion antes de OR se conecta con las experiencias previas por los AND previos y por ello noes inde- pendiente, pero la expresion después de OR sies independiente, lo cual resultaria en aselecci6n de todos los miembros con un 8en suniimero de fax. npaAR Capitulo 4: Construccién de labasededatos = OG LIMIT especifica cudntas filas se pueden recuperar. La forma para LIMIT es LIMIT numeroinicio,numerofilas La primera fila que desea recuperar es numeroin‘~io, y el ntimero de filas que desea recuperar es numerofilas. Si numeroinicio no se especifica, se asume que es 1. Para seleccionar sélo los tres primeros miembros que viven en Texas, use esta consulta SELECT * FROM Miembro WHERE estado="TX" LIMIT 3 Algunas consultas SELECT encontrarén registros idénticos, pero en este ejem- plo usted s6lo quiere ver uno — no todos — de los registros idénticos. Para evitar que la consulta recupere todos los registros idénticos, agregue la pala- bra DISTINCT inmediatamente después de SELECT. Como combinar informacion de tablas En las secciones anteriores de este capitulo, asumi que toda la informacién estaba en una sola tabla. Sin embargo, usted podria querer combinar infor- macién de tablas diferentes. Facilmente puede hacerlo en una sola consulta. Se pueden usar dos palabras en una consulta SELECT para combinar infor- macién de dos o més tablas: £ UNION: Se recuperan filas de una o mas tablas y se almacenan juntas, una después dela otra, en un solo resultado. Por ejemplo, si su consulta seleccio- 16 6 filas de una tabla y 5 filas de otra tabla, el resultado contendré 11 filas. + JOIN: Las tablas se combinan una junto a la otra y la informacion se re- cupera de ambas tablas. UNION Se usa UNION para combinar los resultados de dos o mas consultas de selec- cién. Los resultados de cada consulta se afiaden al conjunto de resultados se- guidos de los resultados de la consulta anterior. El formato de la consulta UNTON es el si SELECT consulta UNION ALL SELECT consulta Puede combinar tantas consultas SELECT como necesite. Una consulta SF LECT puede incluir cualquier formato SELECT valido, incluyendo cléusulas WHERE, clausulas LIMIT, etc. Las reglas para las consultas son f Todas las consultas SELECT deben seleccionar el mismo naimero de columnas. g + Las columnas seleccionadas en las consultas deben contener el mismo tipo de datos. mo 90 Parte II: La base de datos MySQL _ El conjunto de resultados contendra todas las filas de la pi guidas de todas las filas de la segunda consulta y asi sucesivamente. Los nombres de las columnas usados en el conjunto de resultados son los nom- bres de las columnas de la primera consulta SELECT El arreglo de consultas SELCT puede seleccionar diferentes columnas de la misma tabla, pero no son comunes las situaciones en las que desea una tabla nueva con una columna en una tabla seguida por otra columna de la misma tabla. Es mucho mas probable que necesite combinar columnas de tablas di ferentes, Por ejemplo, tal vez tenga una tabla de miembros que han renuncia do al club y una tabla aparte de miembros activos. Puede obtener una lista de todos los miembros, activos e inactivos, con la siguiente consulta: SELECT Apellido,Nombre FROM Miembro UNION ALL SELECT apeliido.nombre FROM MiembroAnt iguo El resultado de esta consulta es el apellido y el nombre de todos los miem- bros activos seguidos de los apellidos y nombres de todos los miembros que han renunciado. Dependiendo de cémo organizé sus datos, podria tener nombres repeticos, Por ejemplo, tal vez un miembro renuncié y su nombre esté en la tabla Men brodnt i quo; pero se volvié a inscribir, asi que su nombre se agreg6 a la tabla Hienbro, Sino quiere duplicados, no incluya la palabra ALL. Sino se incluye ALL las lineas repetidas no se agregarén a los resultados. Puede usar ORDER BY con cada consulta SELECT, como comenté en la sec- cidn anterior, o puede usar 0R0£ 8Y con una consulta 1/10" para ordenar todas las filas en el conjunto de resultados. Si desea que ORDER BY se aplique a todo el conjunto de resultados, y no s6lo a la consulta a la que sigue, use un paréntesis, como se indica a continuacién: (SELECT Apellido FROM Miembro UNION ALL SELECT Apellido FROM MiembroAntiguo) ORDER BY Apellido La instruccién UN10N se introdujo en MySQL 4.0. No esta disponible en MySQL 3. Join Combinar tablas una junta a otra se tlama join 0 conjuncién. Las tablas se combinan mediante la coincidencia de datos en una columna: la columna que tienen en co- miin, La tabla de resultados combinada producida por una conjuncién contiene to- das las columnas de ambas tablas. Por ejemplo, siuna tabla tiene dos columnas (lamiembro y estatura), yla segunda tabla tiene dos columnas (Idmiembro y peso), una conjuncién da como resultado una tabla con cuatro columnas: diem bro (dela primera tabla), estatura, Idmiembro (dela segunda tabla) y pe Hay dos tipos comunes de conjuneién: una conjuncién interna y una conjuncién externa. La diferencia entre una conjuncién interna y una conjunci6n externaes el ndamero de filas incluidas en la tabla de resultados. La tabla de resultados produci ADRORANAARANAAARANON ADD Capitulo 4: Construccién dela base de datos Q 7 da por una conjunci6n interna s6lo contiene las filas que existfan en ambas tablas. Latabla combinada producida por una conjuncién externa contiene todas las filas que existian en una tabla con blancos en las columnas de las filas que no existen enla segunda tabla. Por ejemplo, si tab! a] contiene una fila para Joe y una fila pa raSally, yla taba? contiene s6lo una fila para Sally, una conjuncién interna con- tendria solo una fila: la fila para Sally. Sin embargo, una conjuncién externa contendria dos filas —una fila para Joe y una fila para Sally — aunque la fila para Joe tendria un campo en blanco en peso. La tabla de resultados de la conjuncién externa contiene todas las filas de una ta- bla, Si cualquiera de las filas de esa tabla no existe en la segunda tabla, las colum- nas de la segunda tabla estaran vacias. Por supuesto, los contenidos dela tabla de resultados los determina cud tabla contribuye con todas sus filas, lo cual re- quiere que la segunda tabla coincida con ellas. Dos tipos de conjuncién externa controlan cual tabla determina las filas y cual coincide con ella: una LEFT JOIN (conjunci6n izquierda) y una 81GHT JOIN (conjuncién derecha). Se usan diferentes consultas SELECT para una conjuncién interna y los dos ti- pos de conjuncién externa, La siguiente consulta es una conjuncion interna: SELECT listanombrecolumna FROM tablal,tabla2 WHERE tablal.col2 = tabla2.col2 Y estas consultas son conjunciones externas: SELECT listanombreco}umna FROM tablal LEFT JOIN tabla2 ON tablal.coli=tablaz.col2 SELECT listanombrecolumna FROM tablal RIGHT JOIN tablaz ON tablal.coll=tabla2.col2 Enlas tres consultas, tablaly tabla? son las tablas a unir, Se pueden unir mas de dos tablas. En ambas consultas, coll y Co12 son los nombres de las colum- nas que se asocian para unir las tablas. Las tablas se asocian con base en los da- tos en estas columnas. Estas dos columnas pueden tener el mismo nombre o nombres diferentes. Las dos columnas deben contener el mismo tipo de datos. SEeEseEgususEY Como ejemplo de las conjunciones interna y externa, considere un breve for- mulario del Catalogo de Mascotas. Una tabia es Mascota, en la cual las dos columnas NombreMas cota y TipoMascota guardan los siguientes datos: NombreMascota TipoMascota Unicornio Caballo Pegaso Caballo Leon Gato La segunda tabla es Color, en la cual las dos columnas NombreMascota y ColorMascota guardan los siguientes datos: 92 Parte Il: La base de datos MySQL NombreMascota ColorMascota Unicornio blanco Unicornio plateado Pez Dorado inta que requiere informacién de am- guiente consulta: ‘Suponga que necesita hacer una preg bas tablas, Si hace una conjunci6n interna con la si SELECT * FROM Mascota.Color WHERE Mascota.NombreMascota = Co lor.Nombrelascota obtendré la siguiente tabla de resultados con cuatro columnas: Nombretias cota (de Mascota), TipoMascota, NombreMascota (de Color) y Co lorMascota. NombreMascota TipoMascota NombreMascota ColorMascota Unicornio Caballo Unicornio blanco Unicornio Caballo Unicornio plateado Observe que solo lini cornio aparece en la tabla de resultados, porque solo Un} corn io estaba en las dos tablas originales antes de la conjuncién. Por otra parte, suponga que hace una conjuncién externa izquierda con la siguiente consulta: SELECT * FROM Mascota LEFT JOIN Color ON Pet.NombreMascota=Color.NombreMascota Se obtiene la siguiente tabla de resultados, con las mismas cuatro columnas —NombreMascota (de Mascota), TipoMascota, NombreMascota (de Color) y ColorMascota — pero con filas diferentes: NombreMascota TipoMascota NombreMascota ColorMascota Uni cornio Caballo —-Unicornio blanco Unicornio Caballo —Unicornia plateado Pegaso Caballo © <NULL> <NULL> Leon Gato <NULL> <NULL> Esta tabla tiene cuatro filas. Tiene las dos primeras filas que la conjuncién in- terna, pero tiene dos filas adicionales — filas que estén a la izquierda en la ta- bla TipoMascota pero no en la tabla Color. Observe que las columnas de la tabla Color estan en blanco en las dos diltimas filas. Y, en tercer lugar, suponga que hace una conjuncién externa derecha con la siguiente consulta: SELECT * FROM Mascota RIGHT JOIN Color ON Pet.NombreMascota=Color.NombreMascota SUEULELUEUUVLUSUUEUESL Capitulo 4: Construccién de lahase de datos §= 3 Obtendré la siguiente tabla de resultados, con las mismas cuatro columnas pero filas diferentes: NombreMascota TipoMascota NombreMascota ColorMascota Unicornio Caballo Unicornio blanco Unicornio Caballo Unicornio plateado <NULL> <NULL> Pez dorado Observe que estos resultados contienen todas las filas de la tabla Color ala derecha, pero no de la tabla Mascot a. Observe los espacios en blanco en las columnas de la tabla Mascota, la cual tiene una fila para Pez, Las conjunciones de las que he hablado hasta ahora encuentran entradas coincidentes en las tablas. A veces es titil averiguar cuales filas en una tabla no tienen entradas coincidentes en otra tabla, Por ejemplo, suponga que de- sea saber quién no ha entrado nunca en la seccion Solo para miembros. Co- ‘mo tiene una tabla con el nombre de entrada del miembro y otra tabla con las fechas en las que entran los usuarios, puede hacer aquella pregunta usando las dos tablas. Hacer una conjuncién y ver todas las concordancias para tra- tar de ver quién falta seria imposible si hay un gran niimero de usuarios en la tabla. Sin embargo, puede averiguar cuales nombres de entrada no tienen en- tradas registradas en la tabla de entrada haciendo la siguiente consulta: SELECT Nombreentrada FROM Miembro LEFT JOIN Entrada ON Miembro. Nombreentrada-Entrada.Nombreentrada WHERE Entrada.Nombreentrada IS NULL Esta consulta le dara una lista de todos los nombres de entrada en Mi enbro que no estén en la tabla Entrada. Como actualizar informacion Cambiar informacién en una fila existente es actualizar la informacién. Por ejemplo, tal vez necesite cambiar la direccidn de un miembro porque se mu- dé, 0 tal vez tenga que agregar un ntimero de fax que un miembro dejé en blanco cuando inicialmente digité la informac Laconsulta UPDATE es muy directa: UPDATE nombretabia SET columna=valor,columna-vator,... WHERE clausula En a cléusula S€T usted enumera las columnas que deben actualizarse y los valores nuevos que deben insertarse, Enumere todas las columnas que quiera cambiar en una sola consulta. Sin una clausula WHERE, los valores de las colum- 96 La base de datos MySQL nas se cambiaran en todas las filas. Pero con la clausula WHERE puede especifi- car cuales filas actualizar. Por ejemplo, use esta consulta para actualizar una direccion en la tabla Miembro: UPDATE Miembro SET calle="3333 Gian: St", telefono ="555-555-5555 WHERE Nombreentrada="biga Como eliminar informacion Mantenga la informacién en su base de datos al dia borrando la informacién obsoleta, Puede eliminar una fila de una tabla usando la consulta DELETE: DELETE FROM nombretabla WHERE clausule Tenga muchisimo cuidado al usar DELETE. Si usa una consulta DELETE sin una cléusula WHERE, borrara todos los datos en la tabla, Repito: todos los dla- tos. Una vez més: todos los datos. Los datos no se podran recuperar. Esta funcion de la consulta DELETE esta justo al inicio de mi lista no-intente-esto ~en-su-casa. Puede borrar una columna de una tabla usando la consulta ALTER: ALTER TABLE nombretabla DROP nombrecolumne , por supuesto, puede eliminar toda la tabla y empezar de nuevo con: DROP TABLE nombretabla ° DROP DATABASE nombrebasededatos noo PP aoa a PP PAPA Dl BY Capitulo 5 Como proteger los datos En este capitulo Comprender la seguridad de los datos en MySQL. Agregar nuevas cuentas MySQL Modificar cuentas existentes Cambiar contrasenas Hacer respaldos Reparar datos Restaurar datos Jus datos son esenciales en su aplicacién con base de datos para la Web. Alma- cenar y/o presentar datos son las actividades principales de su aplicacién web. Usted ha invertido una considerable cantidad de tiempo desarrollando su base de datos, la cual contiene informacién importante digitada por usted o por sus usua- rios. Por lo tanto, debe protegerla, En este capitulo le muestro cémo hacerlo. Controlar el acceso a sus datos Usted controlar el acceso a la informacién en su base de datos. Debe decidir quién puede ver los datos y quién puede cambiarlos. Imagine lo que sucede- rfa si sus competidores pudieran cambiar la informacion de su catatogo de productos en linea 0 copiar su lista de clientes. Muy pronto lo dejarian fuera del negocio. Es obvio que necesita resguardar sus datos. MySQL brinda un sistema de seguridad para proteger sus datos, Nadie puede tener acceso a su base de datos sin una cuenta. Todas las cuentas MySQL tie- nen los siguientes atributos: Un nombre Un hostname: la maquina desde la cual puede la cuenta tener acceso al servidor MySQL. + Una contrasefta + Un conjunto de permisos a 96 Parte Il: La base de datos MySQL a Para tener acceso & SUS datos, una persona debe usar un nombre de cuenta Pehido y conocer Ia contrasena asociada con esa cuenta, Ademas, esa per sona debe conectarse desde un PC autorizada a conectarse con su base de datos mediante esa cuenta espe ifica. Después de que al usuario se le otorga el acceso alla base de datos. lo que esa persona haga con los datos dlepende de los permisos que se hayan establecide para esa cuenta. A cada cuenta se le permite o se le prohibe realizar operaciones bnsu base de datos, tales como SELECT, DELETE. INSERT, CREATE. DROP, tte. Las configuraciones que especifican qué puede hacer una cuenta se llaman privilegios o permisos. Puede configurar una cuenta con todos los permisos, sin iin permiso 0 con cualquier rango entre esos extremos. Por ejemplo, para tun catlogo en linea de productos, a usted le conviene que los clientes puedan ver la informacién en el catalogo pero que no puedan cambiatla, Cuando un usuario intenta conectarse a MySQL y ejecutar una consulta, MySQL controla el acceso a los datos en dos etapas: 1, Verificacion de la conexion: MySQL verifica la validez del nombre de la cuenta y de la contrasefa y verifica que la conexion provenga de un host autorizado a conectarse ai servidor MySQL usando la cuenta en. ‘cuestion. Si todo esta en orden, MySQL acepta la conexi6n. 2. Verificacién de la solicitud: Después de que MySQL acepta la conexi6n, verifica si la cuenta tiene los permisos necesarios para ejecutar la con sulta especificada. Si es asi, MySQL ejecuta la consulta. Cualquier consulta enviada a MySQL puede fallar porque la conexi6n es rechazada nel primer paso, o porque la consulta no es permitida en el segundo paso. En estos ‘casos aparecerd un mensaje de error que ayuda aidentificar la fuente del problema, En las siguientes secciones describo més detalladamente las cuentas y los permisos, Comprender los nombres de las cuentas y los hostnames Juntos, el nombre de la cuenta y el hostname (el nombre del PC autorizado a ‘conectarse con la base de datos) identifican una cuenta nica, Pueden existir dos cuentas con el mismo nombre de cuenta pero con hostnames diferentes, y pueden tener contrasefias y permisos diferentes. Sin embargo, no puede ha- ber dos cuentas con el mismo nombre y el mismo hostname. El servidor MySQL aceptara conexiones de una cuenta MySQL sélo cuando se conecte desde el hostname. Cuando se prepara una consulta GRANT a REVO KE (las describo mas adelante en este capi julo), se identifica la cuenta MySOL usando tanto el nombre de la cuenta como el hostname, en el siguien- te formato: nombrecuenta@hostname (por ejemplo, root@l oce | host). BSBEBRTELUEUYLUELUEEELED UL Capitulo 5: Como proteger los datos 7 El nombre de la cuenta MySQL no tiene ninguna relacién con el nombre de usuario en Unix/Linux o Windows (también llamado a veces nombre de entra- da). Si esta usando una cuenta MySQL administrativa llamada root, esta no se relaciona con el nombre de entrada root en Unix/Linux. Cambiar el nom- bre de entrada de MySQL no afecta dle ninguna manera el nombre de entrada de Unix/Linux 0 Windows, y viceversa Los hostnames y los nombres de las cuentas MySQL se definen como sigue: + Un nombre de cuenta puede tener hasta 16 caracteres de longitud. Puede usar caracteres especiales en los nombres de las cuentas, por ejemplo espacios o un guiones (-). Sin embargo, no puede usar comod nes en el nombre de la cuenta. © Unnombre de cuenta puede estar en blanco. Si existe una cuenta en MySQL + conelnombreen blanco, cualquier nombre de cuenta sera valido para esa cuenta, Un usuario podria usar cualquier nombre de cuenta para conectarse con su base de datos, esto siel usuario se conecta desde un hostname al que ele permite conectarse a la cuenta con el nombre en blanco y si usa la contra- | seha correcta, de ser necesaria. Puede usar una cuenta con el nombre en blan o si quiere permitir que usuarios an6nimos se conecten con la base de dato: 7 F] hostname puede ser un nombre o una direccién IP. Por ejemplo, | puede ser un nombre como thor.mycompany.com, o una direccién IP (protocolo de Internet) como 192.163.2.33. La maquina en la cual esta instalado el servidor MySQL es localhost. © Pueden usarse comodines en el hostname. Puede usar el signo de por- \centaje (%) como comodin; % funciona para cualquier hostname. Si agre- ga una cuenta para george@%, alguien que use el nombre de cuenta george puede conectarse al servidor MySQL desde cualquier PC. © El hostname puede estar en blanco, Un hostname en blanco equivale a usar % para el hostname. Es posible configurar una cuenta con el nombre de la cuenta en blanco y con el hostname en blanco. Una cuenta tal permitirfa a cualquier persona conectarse con el servidor MySQL usando cualquier nombre de cuenta desde cualquier PC. Una cuenta con el nombre de cuenta en blanco y un signo de porcentaje (%) en el hostname funcionaria del mismo modo. Noes muy probable que quiera tener tal tipo de cuenta. A veces esta cuenta se instala cuando se instala MySQL, pero en esos casos no se le da ningiin privilegio, de modo que no podra hacer nada. Cuando MySQL es instalado, automaticamente instala una cuenta con todos los privilegios: root@1oca host . Esta cuenta se instala sin contrasefia. Cual- quiera que esté conectado al PC donde esta instalado MySQL tiene acceso a MySQL y puede hacer cualquier cosa con él usando el nombre de cuenta root. (Obviamente, root es un nombre de cuenta muy conocido, asi que esta cuenta no es muy segura, Si usted es el administrador de MySQL, agréguele inmediata- mente una contraseiia a esta cuenta) 98 Parte Il: La base de datos MySQL oo & En algunos sistemas operativos se instalan automaticamente otras cuentas, ade- mas de root@1ocaThost. En Windows, por ejemplo, una cuenta llamada root@t podria instalarse sin contraseita de protecci6n, Esta cuenta root con toclos los privilegios puede ser usada por cualquier persona desde cualquier maquina. De- be eliminar esta cuenta inmediatamente, o al menos asigh wrle una contrasefia, Aprender mds sobre contrasefias Acada cuenta se le asigna una contrasefa, Si a una cuenta no se le asigha nin- guna, la contrasefa estard en blanco, y eso significa que no requerira de con- trasefia para usarse. MySQL no impone limites a la longitud de una contraseia, pero a veces algiin otro software en su sistema limitard la longitud a ocho ca- racteres. Si es asi, los caracteres después del octavo serdn eliminados. Como seguridad adicional, MySQL encripta las contrasefias antes de almace- narlas. Eso significa que las contrasefias no se almacenan en los caracteres reconocibles en los cuales se dligitaron. Esta medida de seguridad garantiza que nadie pueda ver y conocer las contrasefias almacenadas. Desafortunadamente, algunas malas personas trataran de tener acceso a sus da- tos adivinando cual es su contrasefia, Usan un software que trata de conectarse usando rapida y sucesivamente diferentes contrasefias, una practica llamada des: itramiento (cracking). A continuaci6n presento algunas recomendaciones para escoger una contraseiia que sea tan dificil de descifrar como sea posible: Use de seis a ocho caracteres. Incluya uno o mas de cada uno de los siguientes: letras en maydiscula, le- tras en mingscula, ntimeros y signos de puntuacion. Nouse el nombre de su cuenta ni ninguna variacion del nombre desu cuenta No incluye ninguna palabra que esté en un diccionario. » No incluya un nombre. No use un niimero telefonico ni una fecha Una buena contrasefia es dificil de adivinar, no incluye palabras de ningtin dic- cionario (incluyendo diccionarios en otras lenguas) y es facil de recordar. Si es muy dificil de recordar tendria que escribirla, lo cual contradice el propésito deusar una contrasefa. Una manera de crear una buena contraseita es usar los primeros caracteres de una de sus frases favoritas. Por ejemplo, podria usar la frase "Todos para uno! (Uno para todos!” para hacer esta contrasel iTpul iupt! Esta contrasefia no incluye nimeros, pero puede arreglar eso usando el nt mero 4 en vez de la letra p. Entonces la contrasefia seria: e_h_a_A_n_A_e_e_e tenn eo on on no Capitulo 5: Como proteger los datos YQ ivausiuaty 0 podria usar el némero 1 en vez de la letra u para representar la palabra uno, Entonces la contrasefia seria ivalsingt Esta contrasena es definitivamente dificil de adivinar. Otra forma de incorpo- Tar ntimeros en su contrasefia es sustituyendo I (uno) por I (ele) o sustituir 0 (cero) por la letra 0. Echemos un vistazo a los permisos Los permisos de las cuentas los usa MySQL para especificar quién puede hacer qué. Cualquier persona que use una cuenta valida puede conectarse al servidor MySQL, pero sdlo podré hacer las cosas aprobadas por los permisos asignados aesa cuenta, Por ejemplo, es posible configurar una cuenta para que los usua- rios puedan seleccionar datos, pero no insertar ni actualizar datos. Se puede asignar permisos a bases de datos, tablas o columnas especificas. Por ejemplo, se puede configurar una cuenta que permita al usuario seleccio- nar datos de todas las tablas en la base de datos, pero que le permita insertar datos s6lo en una tabla y actualizar datos s6lo en una columna de una tabla en particular. Los permisos se conceden usando la consulta GRANT y se deniegan usando la consulta REVOKE. Las consultas GRANT 0 REVOKE deben enviarse usando una cuenta que tenga permiso para ejecutar instrucciones GRANT 0 REVOKE en la base dle datos. Si trata de enviar una consulta GRANT o una consulta REVOKE usando una cuenta que no tenga permiso para hacerlo, obtendra un mensaje de error. Por ejemplo, si trata de conceder un permiso para usar un comando de seleccién y envia la consulta usando una cuenta que no tiene permiso pa- ra conceder permisos, posiblemente verd el siguiente mensaje: grant command denied Los permisos se pueden otorgar y remover individualmente 0 todos a la vez. La Tabla 5-1 enumera algunos de los permisos que puede asignar 0 revocar. Tabla 5-1 Permisos para cuentas MySQL Permiso Descripciéi Todos los permisos Puede alterar la estructura de las tablas 700 Parte ii: La base de datos MySOL Permiso Descripcién (continuacién) CREATE Puede crear bases de datos o tablas nuevas LETE Puede borrar filas en las tablas DROP Puede borrar bases de datos o tablas Puede leer y escribir archivos en el servidor Puede cambiar los permisos en una cuenta MySQL Puede insertar filas nuevas en las tablas Puede leer datos de las tablas SHUTDOWN Puede apagar el servidor MySQL _ UPDATE Puede cambiar datos en una tabla - USAGE No tiene ningun permiso Otorgar ALL. no es una buena idea porque incluye permisos para operaciones administrativas, tales como apagar el servidor MySQL. No es probable que quiera que cualquiera ademés de usted tenga tales privilegios. Como configurar cuentas MySQL Alcrear una cuenta nueva se especifica la contrasena, el nombre de los PCs que pueden tener acceso ala base de datos usando esta cuenta, y los perm 508; pero en cualquier momento puede cambiar estas configuraciones. Toda la informacién de la cuenta se almacena en una base de datos llamada nysq), creada automaticamente al instalar MySQL. Para agregar una cuenta nueva 0 cambiar informacién sobre cualquier cuenta, debe usar una cuenta que tenga los permisos apropiados en la base de datos m Necesita por lo menos una cuenta para tener acceso al servidor MySQL. Cuando se instala, MySQL automaticamente configura algunas cuentas, incluyendo una cuenta con todos los permisos, llamada root. Si tiene acceso a MySQL por me- dio del sitio web de su compaiia o de una compania de hospedaje de sitios web, el administrador MySQL de la compaita debe darle la cuenta; Ja cuenta proba blemente no se llamara root y es posible que no tenga todos los permisos, En lo que resta de esta seccién, describo como agregar y borrar cuentas y cO- ‘mo cambiar las contrasefas y los permisos de las cuentas. Si recibié su cuenta del departamento TI de su compaiiia o de la compahiia de hospedaje de sitios Meo, & 3 Capitulo La base de datos de seguridad de MySOL Cuando es instalado, MySQL automaticamente crea una base de datos llamada mysql. Toda la informacién usada para proteger sus datos se guarda en esta base de datos, incluyendo los nombres de las cuentas, los hostnames, las contraseiias y los permisos, Los permisosse.almacenanen columnas.forma- todecadanombredecolumnaes permission- _ priv, donde permission es cualquiera de los permisosmostrados enla Tabla5-1.Por ejemplo la columna que contiene los permisos ALTER se lla~ maalter_priv. El valor en cada columna de permiso es¥ oN, lo cual significa si(yes) ono. De este modo, por ejemplo en la tabla de usuarios (descrita onl lista siguiente), habria una fla para tuna cuenta yuna columna para al ter_priv.Si el campo de una cuenta bajo al ter_priv con- tiene, la cuenta se puede usar para ejecutar con- sultas ALTER. Si alter_priv contiene N, la cuenta no tiene permiso para ejecutar consultas ALTER. Labase de datos mysql guarda permisos en las cinco tablas siguientes: Tabla user: Esta tabla almacena los per- misos que aplican a todas las bases de da- tos y todas las tablas. Contiene una fila para cada cuenta valida con el nombre del usua- rio, el hostname y la contrasefia. El servidor MySQL rechazaré cualquier conexion pro- veniente de una cuenta que no exista en es- ta tabla ‘Tabla db: Esta tabla almacena permisos que aplican a una base de datos en particu- lar. Contiene una fla para la base de datos, que da permisos a un nombre de cuenta y hostname. La cuenta debe existr en la tabla user para que se le pueda conceder permi- 08. Los permisos concedidos en la tabla user anulan los permisos asignados en esta tabla. Por ejemplo, sila tabla user tiene una fila para la cuenta designer con privilegios INSERT, designer puede insertar datos en to- das as bases de datos. Siuna fila en la tabla cdb muestra N bajo INSERT para a cuenta de- signer en la base de datos CatélogodeMas- cotas, la tabla user anula ese valor y designer podré insertar datos en la base de datos CatalogodeMascotas. ‘Tabla host: Esta tabla controla el acce- 0 a una base de datos dependiendo del host. Le tabla host opera con la tabla db. Si una fila en la tabla db tiene el campo host vacio, MySQL verifica la tabla host para ver, sila tabla db tiene ahi una fila. De esta ma- neta, usted puede permitir el acceso a db desde algunos hosts pero no de otros. Por ejemplo, suponga que tiene dos bases de datos: db1 y db2. La base de datos db! tie- ne informacion muy delicada, y quiere que solo ciertas personas la vean. La base de datos db2 tiene informacién que quiere que todos vean. Si tiene una fila en la tabla db para dbt con el campo host en blanco, pue- de tener dos filas para dbt en la tabla host. Una fila puede conceder todos los permisos a los usuarios que se conecten desde un host especifico, mientras que la otra fila puede denegarles privilegios a los usuarios que se conecten desde cualquier otro host. Tabla tables_priv: Esta tabla almace- na permisos aplicados a tablas espectficas. Tabla columns_priv: Esta tabla alma- cena permisos aplicados @ columnas espe- cificas. Usted puede ver y cambiar las tablas directa~ mente en mysql si esté usando una cuenta con los permisos necesarios. Puede usar consultas SQL tales como SELECT, INSERT, UPDATE y otras. Si tiene acceso a MySQL por medio de empleador, un cliente o una compafila de hos- peda de sitios web, es poco probable que le den una cuenta con fos permisos necesarios. eee eee ess LE 102 Parte t:La base de datos MySOL web, podria recibir un error cuando trate de enviar alguna de las consultas ANT o REVOKE antes descritas. Si su cuenta tiene restricciones para eject tar alguna de las consultas que necesite hacer, debe solicitar una cuenta con mas permisos o pedirle al administrador MySQL que agregue una cuenta nue: va. 0 que haga los cambios que usted requiera Identificar las cuentas existentes u base de datos, necesita una utar la siguiente con- Para averiguar cuales cuentas existen para cuenta que tenga los permisos necesarios. Trate de ej sulta en la base de datos llamada mysq] : SELECT * FROM user Debiera obtener una lista de todas las cuentas. Sin embargo, si tiene acceso a MySQL por medio de su compaiia o de una compania de hospedaje de sitios web, probablemente usted no tiene los permisos necesarios. En ese caso, probablemente recibira un mensaje de error como este: No Database Selected Este mensaje significa que su cuenta no tiene permiso para seleccionar la base de datos ny sq1..O quiza recibir un mensaje de error que diga que no tiene permiso parausar SELECT. Aunque este mensaje es molesto, en agin sentido es bueno. pues muestra que la compaiifa tiene buenas medidas de seguridad. No obstant en otro sentido es malo pues usted no podré ver cuales privilegios tiene su cuen ta. Deberd preguntarle al administrador de MySQL 0 averiguarlo usted mismo in- tentando consultas diferentes y viendo si se le permite ejecutarlas 0 no. Cémo agregar cuentas nuevas y cambiar permisos La forma preferida para tener acceso a MySQL desde PHP es configurando una cuenta especificamente para este propésito, s6lo con los permisos imprescindi- bles. En esta seccion, describo como agregar cuentas nuevas y cmo cambiar permisos. Si su cuenta se la dio el departamento TI de su compaiiia o una compar hia de hospedaje de sitios web, tal vez no tenga los permisos necesarios para crear una cuenta nueva. Sino los tiene, no podré agregar una cuenta ejecutando laconsulta GRANT, y tendra que solicitar una segunda cuenta para usarla con PHP. Si necesita solicitar una segunda cuenta, obtenga una cuenta con permiso restringido (si es posible), pues su aplicacin web ser mas segura si la cuen- ta usada en sus programas PHP no tiene mas privilegios de los necesarios. A Capitulo 5: Como proteger los datos J] 03 La consulta GRANT se usa para configurar cuentas nuevas, para cambiar con- traseiias o para agregar permisos a cuentas ya existentes. Si la cuenta ya exis- te, la consulta GRANT cambia la contrasefia o agrega permisos. Si la cuenta atin no existe, la consulta GRANT agrega una‘cuenta nueva, Este es el formato genera: para una consulta GRANT GRANT permiso (columnas) ON nombretabla TO nombrecuenta@hostname IDENTIFIED BY ‘clave’ Puede usar esta consulta GRANT para crear una cuenta nueva o para cambiar una cuenta existente. Debe llenar la informacién siguiente: § permiso (columnas): Debe indicar por lo menos un permiso. Puede li- 5 mitar cada permiso a una o mas columnas indicando el nombre de la co- | lumna en paréntesis después del permiso. Si no aparece el nombre de la } columna, el permiso se concede a todas las columnas en la(s) tabla(s). | Puede indicar tantos permisos/columnas como necesite, separados por comas. Los permisos posibles se indican en la Tabla 5-1. Por ejemplo, una consulta GRANT podria empezar asi: GRANT select (Apellido,Nombre), update, insert (fechanacimiento) ¥ nombretabla: Indica sobre cual(es) tabla(s) se concede el permiso. Se requiere por lo menos de una tabla. Puede indicar varias tablas, sep: randolas por comas. Los valores posibles para nombretabla son * nombretabla: Toda la tabla llamada nombretab1a en la base de datos actual. Puede usar un asterisco (*) para indicar todas las tablas en la ba- i ‘se de datos actual. Si usa un asterisco y no selecciona una base de datos, el privilegio se concederd a todas las tablas en todas las bases de datos. * nombrebasedatos .nombre.tab]a: Todala tabla llamada nombreta blaen nombrebasedatos, Sidesea indicar todas, puede usar un asteris- co (*) para el nombre dela base de datos o el nombre de a tabla, Usar *.* concede el permiso a todas las tablas en todas las bases de datos. nombrecuenta@hostname: Sila cuenta ya existe, recibe los permisos indicados. Si la cuenta no existe, se afiade. La cuenta se identifica con el nombrecuenta y hostname como pareja. Si una cuenta existe con el nombre de cuenta especificado pero un hostname diferente, la cuenta | existente no se cambia, sino que se crea una nueva. clave: Es lacontrasefa que agrega 0 cambia. No es obligatorio usar una contrasefia. Si no quiere agregar ni cambiar una contrasefia para es- ta cuenta, no incluya la frase IDENTIFIED BY "clave" La consulta GRANT para agregar una nueva cuenta para usar en los programas PHP para la base de datos CatalogodeMascotas podria ser GRANT select ON CatalogodeMascotas.* 10 phpuser@localhost IDENTIFIED BY “A41!14a!' BO 104. Pare t:La base de datos MySOL Cémo agregar y cambiar contrasefias Puede agregar o cambiar contrasenas usando la consulta GRANT. Puede in- cluir como requisito una contraseha cuando agrega una cuenta nueva, tal co- mo describi en la secci6n anterior. Si una cuenta ya existe, puede cambiar su contrasefa usando la siguiente consulta GRANT: GRANT permiso ON * TO nombrecuenta@hostname IDENTIFIED BY ‘clave’ Debe Ilenar la informacién siguiente: | & permiso: Debe indicar por lo menos un permiso en una consulta GRANT & Siel permiso ya ha sido concedido, no cambia © nombrecuenta@hostname: Sila cuenta ya existe, recibe el permiso y la | contrasefia indicados. Si la cuenta no existe, la cuenta se agrega. La © cuenta se identifica con el nombrecuenta y e€] hostname como parej Si una cuenta existe con el nombre de cuenta especificado pero con un hostname diferente, la cuenta no cambia, sino que se crea una nueva. clave: 1 existente. IDENTIFIED BY '* la contrasefia existente se reemplaza con un blanco, dejando la cuenta sin contrasefa. Consulte la seccién "Aprender mas sobre contrasefias”, anteriormente en este capitulo, para leer algunos consejos sobre c6mo escoger una buena contrasefa. contrasena en la consulta GRANT reemplaza la contrasefia suministra una contrasefia vacia usando Eliminar permisos Para revocar permisos use la consulta REVOKE . El formato general es REVOKE permiso (columnas) ON nombretabla FROM nombrecuenta@hostname Debe llenar la informacién siguiente: so (columnas): Debeindicar por lo menos un permiso. Puede re- § perm ‘0 de una o mas columnas indicando el nombre de la co- } vocar cada pert 5 jumna entre paréntesis después del permiso. Sino se indica el nombre de § lacolumna, el permiso se revocaré de todas las columnas en la(s) ta- bla(s). Puede indicar tantos permisos/columnas como necesite, separan- dolos por comas. Los permisos posibles se enumeran en la Tabla 5-1, Por ejemplo, una consulta REVOKE podria empezar a: REVOKE select (Nombre,Apeliido), update, insert (féchanacimiento) .. ? @ __ Capitulo 5: Cémo protegerlosdatos 105 © nombretabla: Indica a cuales tablas se les esté revocando el permiso, {Se debe indicar al menos una tabla. Puede enumerar varias tablas, sepa- randolas por comas. Los valores posibles para nonbretabla son ‘+ nonbretabia: Todala tabla llamada nonbretab]a ena base de di tos actual. Puede usar un asterisco (*) para indicar todas las tablas. Si usa un asterisco cuando no ha seleccionado la base de datos actual, el privilegio se revocaré de todas las tablas en todas las bases de datos. *nombrebasedatos. nombretabla: Toda la tabla llamada nom bretabla en nombrebasedatos. Si desea indicar todas, puede usar un asterisco (*) para el nombre de la base de datos 0 para el nombre de la tabla, Usar *.* revoca el permiso en todas las tablas en todas las bases de datos. k ) nombrecuenta@hostname: La cuenta se identifica con el nonbrecuen ta y el hostname como pareja. Si una cuenta existe con el nombre de cuenta especificado pero un hostname diferente, la consulta REVOKE fa- lard y usted recibira un mensaje de error. Eliminar cuentas Generalmente no es necesario eliminar una cuenta. Si creé una cuenta con permisos que no desea que tenga, s6lo cambie los permisos. Sino quiere usar una cuenta elimine todos los permisos, de modo que con esa cuenta no se pueda hacer nada. Para eliminar todos los permisos de una cuenta, use una consulta REVOKE con la siguiente sintaxis: REVOKE all ON *.* FROM nombrecuenta@hostname Para realmente poder eliminar una cuenta, necesita una cuenta con los permi- sos necesarios en la base de datos mysql. Necesita usar una consulta DELETE en la tabla del usuario en la base de datos mysq1. Si desea mas informacion so- bre la estructura de la base de datos de seguridad mysql, consulte el recuadro “La base de datos de seguridad de MySQL”, unas paginas atras en este capitu- Jo, Tenga cuidado al usar una consulta DELETE, pues con el formato incorrecto podria eliminar la cuenta equivocada o incluso todas las cuentas. Lea los co- mentarios sobre el comando DELETE al final del Capitulo 4. Respaldar sus datos Usted debe tener por lo menos una copia de su valiosa base de datos. Los de- sastres no son frecuentes, pero sf ocurren. El PC donde esta almacenada su base de datos puede fallar y perder sus datos, el archivo puede corromperse, el edificio puede quemarse, etcétera. Las copias de respaldo de su base de datos previenen la pérdida de datos en tales desastres. 106 £0 ss Parte Il: La base de datos MySQL Al menos debe tener una copia de respaldo de su base de datos, almacenada en un lugar aparte, y no en el mismo lugar en el que est la copia que esta usan- do actualmente. Tener mas de una copia — tal vez unas tres — es generalmer te una buena idea. 1 Almacene una copia en una ubicacion facilmente accesible, incluso po- dria ser en e| mismo PC, para reemplazar rapidamente una base de di tos en uso que se haya dafado. » Almacene una segunda copia en otro PC; le sera itil en caso de que el PC falle y la primera copia de respaldo no esté disponible. Almacene una tercera copia en un lugar fisico completamente diferente, pues existe la remota posibilidad de que el edificio verdaderamente se queme. Esta tercera copia no sera necesaria si la segunda copia de res- paldo se almacena via red en un PC ubicado en otro lugar fisico, Sino tiene acceso a un PC fuera del sitio donde pueda respaldar su base de datos, copie su respaldo en un medio portatil, tal como una cinta 0 un CD y gurdelo fuera del sitio. Ciertas companias almacenaran sus res- paldos en sus oficinas a cambio de una mensualidad, o simplemente puede poner el respaldo en su bolsillo y levarselo a casa, Siusa MySQL en el PC de otra persona, tal como el PC de su jefe o de una compa- fifa de hospedaje de sitios web, las personas que le proporcionan acceso son res- ponsables de los respaldos. Deben contar con procedimientos automaticos para hacer respaldos de su base de datos. Cuando evaltia companias de hospedaje de sitios web, una buena pregunta que no debe olvidar hacer es cuales son sus pro- cedimientos de respaldo, Lo que le interesa saber es con cudnta frecuencia hacen copias de respaldo y dénde las guardan. Si cree que sus datos no estan seguros, solicite que se hagan cambios 0 adiciones a los procedimientos de respaldo. Sies el administrador de MySQL, usted es el responsable de hacer los respal- dos. MySQL brinda un programa llamado my sq] dump que puede usar para ha- cer las copias de respaldo; my sq | dump crea un archivo de texto con todas las instrucciones SQL necesarias para recrear toda su base de datos. El archivo contiene las instrucciones CREATE para cada tabla y las instrucciones INSERT para cada fila de datos en las tablas, Puede restaurar su base de datos ejecu- tando el conjunto de instrucciones MySQL. Puede restaurarla en su ubicacion actual o, de ser necesario, puede restaurarla en otro PC. Siga estos pasos para hacer una copia de respaldo de su base de datos en Li- nux/Unix/Mac: 1. Cambiese al subdirectorio bin en el directorio donde esta instalado MySQL. Por ejemplo, digite ed /usr/local/mysql/bin. 2. Digite lo siguiente: mysqldump --user-nombrecuenta --password=clave nombrebasedatos >ruta/nombrearchivorespaldo £0 ss Capitulo 5: Como proteger tos datos 7 (7 donde * nombrecuenta es el nombre de la cuenta MySQL que esta usando para respaldar la base de datos. * clave es la contrasefia de la cuenta. * nonbrebasedatos es el nombre de la base de datos que desea respaldar. + ruta/nonbrearchivorespaldo es la ruta al directorio donde de- sea almacenar los respaldos y el nombre del archivo en el que se almacenaré el resultado SQL. Lacuenta que use tiene que tener permiso para seleccionar. Sila cuentanore- quiere de una contraseita, puede dejar de lado toda la opcién de contrasefia Puede digitar el comando en una linea, sin presionar Enter. 0 puede digitar una barra inversa (\), presionar Enter y luego continuar el comando en otra linea. Por ejemplo, para respaldar la base de datos Catal ogodeMascotas, el comando podria ser mysqidump --user-root --password=bigsecret CatalogodeMascotas \ >/usr/1ocal /mysql /backups/RespaldoCatalogadeMascotas Nota: La cuenta Linux/Unix con la que esté registrado tiene que tener permiso para guardar archivos en el directorio de respaldo Para hacer una copia de respaldo de su base de datos en. pasos: dows, siga estos 1, Abra una ventana de comando. Por ejemplo, escoja Start Programs:2MS-DOS. 2, Cémbiese al subdirectorio bin en el directorio donde esta instalado MySQL. Por ejemplo, digite ed c:\mysql\bin. Digite lo siguiente: mysqldump.exe --user=nombrecuenta --password=contrasena nombrebasedatos >ruta\nonbrearchivorespaldo donde © nombrecuenta es el nombre de la cuenta MySQL que esta usando para respaldar la base de datos. * contrasena es lacontrasefa de la cuenta. © nonbrebasedatos es el nombre dela base de datos que desea respaldar. * ruta\nombrearchivoresplado es la ruta al directorio donde de- sea almacenar los respaldos y el nombre del archivo en que se al- macenaré el resultado SQL. 708 Parte t:La base de datos MySOL La cuenta que use necesita tener permiso para seleccionar. Si la cuenta no requiere de una contraseia, puede dejar de lado toda la opcién de contrasefia, Debe digitar el comando mysq) dump en una sola linea sin oprimir Enter. tas, el Por ejemplo, para respaldar la base de datos Catalogodelta ‘comando podria ser mysaldump.exe --user=root CatalogodeMascotas >RespaldoCatalogadeMascotas Los respaldos deben hacerse en un horario predeterminado, por lo menos una vez al dia. Si su base de datos cambia frecuentemente, seria mejor respal- darla mas a menudo. Por ejemplo, podria ser conveniente respaldar el direc- torio de respaldos cada hora y respaldar todo en otro PC una vez al dia Restaurar sus datos En algin punto una de las tablas de su base de datos podria dafarse y dejar de funcionar. Es inusual, pero sucede. Un problema de hardware, por ejem- plo, o que el PC se apague inesperadamente, puede causar que las tablas se corrompan. Algunas veces una anomalia en los datos que confunda a MySQL puede corromper las tablas. En algunos casos, una tabla corrompida puede hacer que su servidor MySQL deje de funcionar. Este es un tipico mensaje de error que indica que una tabla se ha corrompido: Incorrect key file for table: ‘nombretabla’. En algunos casos es posible reparar la(s) tabla(s) de datos corrompidas usando unutilitario de reparacién incluido con MySQL. Si el utilitario de reparacion no ogra restaurar la(s) tabla(s) corrompida(s) a su funcionamiento normal, no to- do esta perdido; también puede reemplazar la(s) tabla(s) corrompidas con los datos almacenados en una copia de respaldo. En algunos casos la base de datos se podria perder completamente. Por ejemplo, si el PC donde reside su base de datos deja de funcionar y no se puede arreglar, su base de datos actual se perde- 4, pero sus datos no se perderan para siempre; puede reemplazar el PC dahado ‘con un PC nuevo y restaurar su base de datos con la copia de respaldo, Como reparar tablas A menudo es posible arreglar una base de datos dafada. MySQL prove un utilitario, Mamado myisamchk para reparar tablas. Siesta usando MySQL en el PC de suem- pleador o en el de su cliente, o través de una compania de hospedaje de sitios web, debe contactar al administrador de MySQL para que corra my isamchk por usted. ~~ P i? fi Y ae tn no I i BSVUEUBUEBLERDREDE REE D Capitulo 5: Como proteger los datos 1 JQ Si usted es el administrador de MySQL, puede correr ny’ samchk usted mis- mo. Para usar my isamchk en Linux/Unix/Mac, siga estos pasos: 1. Cémbiese al subdirectorio bin en el directorio donde esta instalado MySQL. Por ejemplo, digite ed /usr/local/mysql/bi 2. Detenga el servidor MySQL digitando esta consulta: mysqladmin -w nombrecuenta -p shutdown donde -u nombrecuenta especifica el nombre de la cuenta que usara para conectarse a MySQL. La cuenta debe tener permiso para apagar. Sila cuenta no requiere de una contraseha, deje de lado ~p. Si incluye -p, se le pediré su contrasefa 3. Digite lo siguiente: myisamchk -r ruta/nombrebasedatos/nombretabla.MYI Incluya la ruta completa a su directorio de datos, seguida por el nombre de la base de datos, el nombre de la tabla y NY I. Puede usar un asteris- co (*) como comodin. Por ejemplo, para reparar todas las tablas en la base de datos Catalogodeascotas. podria digitar ./data/CatalogodeMascotas/*.MY1 myisamchk -r La opcién-r es la opci6n para recuperar. Después de digitar la instrucci6n verd como resultado, en la pantalla, cudles tablas se estan revisando. 4, Arranque el servidor MySQL digitando lo siguiente: mysqladmin -u nombrecuenta -p start Para usar myisamchk en Windows, siga estos pasos: 1, Abra una ventana de comando. Por ejemplo, escoja Start*Programs'2MS-DOS. 2. Cémbiese al subdirectorio bin en el directorio donde est instalado MySQL. Por ejemplo, digite ed c:\mysql\bin. 3, Detenga el servidor MySQL digitando mysqladmin -u nombrecuenta -p shutdown donde nombrecuenta es el nombre de una cuenta con permiso para apa- gar. Sila cuenta no requiere de una contrasefa, deje por fuera -p. Si in- cluye -p se le pedira su contrasefia. 4. Digite lo siguiente: myisamchk -r ruta/nombrebasedatos/nombretabla.MYI Incluya la ruta completa a su directorio de datos, seguida del nombre de la_ base de datos, el nombre dela tabla y MY I. Puede usar un asterisco(") como comodin. La opci6n-r es la opci6n para recuperar. Por ejemplo, para reparar todas las tablas en la base de datos Catal ogodeMascotas, podria digitar 710 Pare tt:La base de datos MySOL myisamchk -r Después de digitar esta instrucci6n ver cudles tablas se estan revisando. Espere a que "1S \data\CatalogodeMascotas\*.MYT como resultado, en la pantalla, k termine, 5, Arranque su servidor MySQL. digitando lo siguiente; nysqladmin -u nombrecuenta -p start ‘h correr el utilitario myisamchk nuevamente usando gar de la opci6n -t. La opei quo y mucho mas lento que la opei6n pero mancla al Ia opci6n-r no puede manejar. Cémo restaurar de una copia de respaldo jormal de su ba- como enelcaso de datos actual con la rasa datos almacenada en la copia de respaldo. La copia de respalo conte weifotografia’ de los datos tal como estaban en el momento en quest hizolaco- re Los cambios hechos ala base de datos desde que se hizola copia derespallo Si después de reparar sus datos no se reactiva el funcionamien’o a ediatos, si Su base de datos no esta disponible del todo, Se fallo del PC, puede reemplazar la(s) tabla(s) desu base de después de correr este comando su tabla todavia no funcron® pruebe la opcion-o enh no es umn proceso de reparacion mas ant \guinos cas0S qUE oie ctaran incluidos; usted deberé recrear esos cambios manualmente De nuevo, si su acceso a MySQL es por medio del departamento Thode wna ios web, debe pedir al administrador de MySQL {que restaure su base de datos con la copia de respaldo. Si usted es el adm compafiia de hospedaje de s dittador de MySQL puede restaurarla usted mismo, ral como describi en el Capitulo 4, se construye una base de datos ¢ reando la dase ie datos y luego agregandole tablas. El respaldo que usted crea Cor, el vuilitario mysqi dump es un archivo que contiene todas las instryecior’ aaeetatiras para reconstruir todas las tablas, pero no contiene las instruc nes necesarias para crear la base de datos, Quiz’ su base de datos no exista del todo, 0 quiz exista con una 0 mas ta- plas dafiadas. Puede restaurar toda la base de datos 0 una tabla individual Si ‘estos pasos para restaurar una sola tabla: 1. Sila tabla existe, borre la tabla con la siguiente consulta sQlu: OROP TABLE nombretabla donde nombretabla es la tabla que desea borrar. 2. {ja su explorador hacia mysql_send.php. Consulte en el Capitulo 4 una descripcién de ny sa) send. php SQL O- oN Capitulo 5: Como protegerlos datos J 7 7 3. Copie la consulta CREATE para la tabla desde el archivo de respaldo al formulario en la ventana del explorador. Por ejemplo, escoja Edit’? Copy y Edit®Paste. - 4. Digite el nombre de la base de datos en la cual esté restaurando la tabla. El formulario muestra dénde debe digitar el nombre de la base de datos = 5. Haga clic en Submit. Una nueva pagina web muestra los resultados de la consulta. 6, Haga clic en New Query. 7. Copie una consulta INSERT para la tabla desde el archivo de respaldo al formulario en a ventana del explorador. Por ejemplo, escoja Edit Copy y Edit® Paste. mbre de la base de datos en la cual esté restaurando la tabla. 8. Digite el Elformulario muestra donde debe digitar el nombre de la base de datos. 9. Haga clic en Submit. Una nueva pagina web muestra los resultados de la consulta, 10. Haga clic en New Query. 11. Repita los Pasos 7 — 10 hasta que todas las consultas INSERT del ar- chivo de respaldo hayan sido enviadas. Sisus consultas INSERT para la tabla son tantas que si se enviaran una ana nose terminaria nunca—o si simplemente hay demasiadas tablas — puede enviar to- das las consultas en el archivo de respaldo de una sola vez siguiendo estos pasos: 1. Si alguna de las tablas en el archivo de respaldo existe, bérrela con la siguiente consulta SQL: DROP TABLE nombretabla donde nonbretab)a es la tabla que desea borrar, 2. Cambiese al subdirectorio bin en el directorio donde esta instalado MySQL. En Linux/Unix/Mac Digite el comando cd para cambiar al directorio correcto (por ejemplo, digite ed /usr/local/mysql/bin). En Windows, a, Abra una venta de comando, Por ejemplo, escoja StarteProgramst?Accessories*®Command Prompt b. Digite un comando ed para cambiarse al directorio correcto (por ejemplo, digite ed c:\mysql\bin). 3. Digite el comando que envia las consultas SQL en el archivo de respaldo. 11.2. Parte it:La base de datos MySOL En Linux/Unix/Mac: Digite nysql -w nonbrecuenta -p nionbrebasedatos < ruta/nonbrearchivorespaldo donde nombrecuenta es una cuenta con permiso para crear. Sila cuenta no requiere de contrasefia, deje por fuera la -p. Si usala-pse le pedirA su contrasefta. nombrebasedatos es la base de datos existente en la cual quiere crear todas las tablas. Use la ruta y el nombre del ar- chivo completos para el archivo de respaldo. Por ejemplo, un coman- do para restaurar la base de datos Catal ogodeMascotas podria ser aysqi -w root -p CatalogodeNascotas < /usr/archivosrspaldo/Catalogode Hascotas. bak En Windows: Digite nysql -w nonbrecuenta -p nonbrebasedatos < ruta\nonbrerespaldo donde nonbrecuenta es una cuenta con permiso para crear. Sila cuenta no requiere de contraseia, deje por fuera lap. Si usa la-p se le pedir la contrasefia. nombrebasedatos es la base de datos existente donde desea construir todas las tablas. Use la ruta y el nombre del ar- chivo completos para el archivo de respaldo, Por ejemplo, un coman- do para restaurar la base de datos CatalogodeNascotas podria ser sql -u root -p CatalogodeMascotas < c:\nysql \bak\CatalogodeNascotas.bak Las tablas podrian tardar un poco en restaurarse. Espere que el coman- do termine. Si ocurre algan problema aparecera un mensaje de error. Si no hay problemas no vera ningtin mensaje. Cuando el comando termina, aparece la linea de comando. Para restaurar s6lo tablas seleccionadas del archivo de respaldo, prepare un archivo que contenga Gnicamente las consultas para las tablas selecctonadas que desea restaurar. Luego siga los Pasos 1 — 3 de la lista anterior. En el paso 3 digite el nombre de la ruta o el nombre del archivo con el subconjunto de consultas que desea en sustitucion de todo el archi (0 de respaldo. Sila base de datos no existe del todo, debe crearla antes de usar las consul- tas en el archivo de respaldo para reconstruir todas las tablas. Para restaurar a base de datos cuando no hay queda nada de ella, use los pasos siguientes: 1. Agregue las siguientes dos lineas a la parte superior del archivo de respaldo: CREATE DATABASE nombrebasedatos; use nombrebasedatos; npr | ee ee SS Se 2S Se donde nombrebasedatos es el nombre de la base de datos que desea restaurar. Por ejemplo, los comandos para la base de datos Catalogo deMascotas son CREATE DATABASE CatalogodeMascotas; use CatalogodeMascotas; Nota: Asegiirese de afiadir un punto y coma (;) al final de cada linea. 2. Cambiese al subdirectorio bin en el directorio donde esta instalado MySQL. En Linux/Unix/Mac Digite un comando ed para cambiarse al directorio correcto (por ejemplo, digite ed /usr/local/mysql/bin). En Windows: a. Abra una ventana de comando. Por ejemplo, escoja Start“>Programs b. Digite un comando ed para cambiarse al directorio correcto (por ejemplo, digite cd ¢:\mysql\bin). \ccessoriest?Command Prompt 3. Digite el comando que envia las consultas SQL en el archivo de respaldo. En Linux/Unix/Mac. Digite esto: mysql -u nombrecuenta -p < ruta/nombrearchivorespaldo donde nombrecuenta es una cuenta con permiso para crear. Sila cuenta no requiere de una contrasena, deje por fuera la -p. Si usa la -p se le pedira la contrasefia. Use la ruta y el nombre del archivo completos para el archivo de respaldo. Por ejemplo, un comando para restaurar la base de datos podria ser mysql -u root. -p < /usr/archivosrespaldo/CatalogodeMascotas. bak En Windows: Digite esto: mysql -u nombrecuenta -p < ruta\nombrearchivorespaldo donde nombrecuenta es una cuenta con permiso para crear. Sila cuenta no requiere de contrasena, deje por fuera la -p. Si usa la-p se le pedird la contrasefta, Use la ruta y el nombre del archivo com- pletos para el archivo de respaldo. Por ejemplo, un comando para restaurar la base de datos Catal ogodeMascotas podria ser mysq1 =u root -p < c:\mysql\bak\Catalogodemascotas..bak Capitulo 5: Como protegerlos datos] 7 3 17G Partet:La base de datos MySQL Las tablas podrian tardar un poco en restaurarse. Espere que el coman- do termine. Si ocurre algiin problema aparecerd un mensaje de error. no hay problemas no vera ningdn mensaje. Cuando el comando haya ter minado, aparecera la linea de comando. Si ha seguido estos pasos, su base de datos estard restaurada con todos los datos que contenia en e! momento en que se hizo la copia de respaldo. Si los datos cambiaron después de que se hizo la copia, los cambios se habrin per- dido. Por ejemplo, si se agregaron mas datos después de que se hizo la copia de respaldo, los datos nuevos no pueden restaurarse. Si sabe cuales cambios se hicieron, incléyalos manualmente en la base de datos restaurada. Parte Il PHP La 5a Ola Por Rich Tennant ATEN — eAW g JABS 3eASATAG THAT IU2HOD “Su base de datos ya no se puede reparar, pero antes de darle nuestra recomendacién de respalde, déjeme hacerle una pregunta. Guantas fichas cree que cabrian en las paredes de su sala de computo? En esta parte. . . E esta parte, aprenderé como usar PHP para su apli- ‘caci6n con base de datos para la Web. Estos son alg hos de los temas que se describen: = Como agregar PHP a archivos HTML, Las caracteristicas de PHP que son titiles para cons- truir una aplicacién con base de datos para la Web Como usar las caracteristicas de PHP + Como usar formularios para recopilar informacién de los usuarios ¥ C6mo mostrar informaci6n de una base de datos en una pagina web Cémo almacenar datos en una base de datos & 1 Como mover informacién de una pagina web a otra Aprender todo lo que necesita saber para escribir los, programas PHP que usted necesita, aw | das | das be | es | cs fi T A 7. a Capitulo PHP General En este capitulo Agregar secciones PHP a los archivos HTML, p» Escribir enunciados PHP Usar variables PHP )» Comparar valores en las variables PHP Documentar sus programas f 0s programas son la parte de aplicacién de su aplicacién con base de da- tos para la Web. Los programas realizan las tareas. Crean y muestran las nas web, aceptan y procesan la informaci6n que envian los usuarios, al- dela ba- pag macenan la informacién en la base de datos, extraen la informac se de datos y llevan a cabo todas las demas tareas necesarias PHP, el lenguaje que usted usa para escribir sus programas, es un lenguaje de scripting disefiado especificamente para usarse en la Web. Es su herramienta para crear paginas web dinamicas. Tiene caracteristicas disefiadas para ayu- darle a programar las tareas que necesitan las aplicaciones web dinamicas. Eneste capitulo, describo las reglas generales para escribir programas PHP, re- glas que aplican a todos los enunciados PHP. Piense en estas reglas como las re- glas generales de gramatica y puntuacién. En los capitulos restantes de la Parte Ill, usted aprender sobre caracteristicas y enunciados especificos de PHP y so- bre como escribir programas PHP para cumplir con tareas especificas. Agregar una seccién PHP a una pagina HTML PHP es un socio de HTML (Lenguaje de Marcado de Hipertexto: HyperText Mar- kup Language, en inglés) que expande sus capacidades. Le permite a un programa HTML hacer cosas que no puede hacer por si mismo. Por ejemplo, los programas en HTML pueden mostrar paginas web, y el HTML tiene caracteristicas que le per- miten a usted formatear dichas paginas web. E] HTML también le da la posibilidad 178 Pare:PHP_ Como el servidor web procesa archivos PHP Cuando un explorador es conducido hacia un ar- chivo HTML regular con una extensién.h tm) o.htm, el servidor web envia el archivo, taly co- mo esté, al explorador. Este procesa el archivo y muestra la pagina web descrita porlas etiquetas HTMLenel archivo. Cuando un buscador es con- ducido hacia un archivo PHP (conuna extensién php}, el servidor web busca las secciones en PHP en el archivo yas procesa, enlugar de sim- plemente enviar el archivo tal y como esté al ex- plorador. Los pasos que el servidor web usa para procesar un archivo PHP son los siguientes: 1, El servidor web empieza a escanear el ar- chivo en modo HTML. Asume que los enun- ciados estan en HTML y los envia al explorador sin procesar. 2. El servidor web continéa en modo HTML hasta toparse con una etiqueta PHP de apertura (<?php) 3. Altoparse con una etiqueta PHP de apertu- ra, el servidor web cambia al modo PHP. A esto se le lama a veces escapar de HTML. El servidor web luego asume que todos los enunciados son enunciados PHP y ejecuta los enunciados PHP. Si hay output, éste es enviado por el servidor al explorador. 4, Elservidorweb continia en elmodo PHPhas- ‘tatopar con.una etiqueta PHP de cierre ( ?>). 5. Cuando el servidor web encuentra una eti- queta PHP de cierre, regresa al modo HTML Continda escaneando y el ciclo se repite desde el Paso 1 | de desplegar graficos en sus paginas web y reproducir archivos de miisica, Pero el HTML solo no le permite interactuar con la persona que visualiza la pagina Web. EL HTML es casi interactivo. O sea, los formularios en HTML permiten a los usuarios digitar la informacion que la pagina web esta disefiada para recop lar: sin embargo, usted no puede tener acceso a esa informacion sin usar un Ienguaje diferente a HTML. PHP procesa la informacion de los formularios sin necesidad de un programa aparte, y da espacio para realizar otras tareas teractivas también. Las etiquetas HTML se usan para incorporar los enunciados en lenguaje PHP a los programas HTML. El archivo del programa tiene una extensién.php. EL administrador PHP puede definir otras extensiones, tales como. pht} .php4 o.php5, aunque.php es la mas comin. Entonces, en este libro, yo asumiré que la extensi6n. php es para los programas PHP. Los enunciados en lenguaje PHP se encierran en etiquetas PHP con la siguiente forma: <?php D> E20 ce Ss A.veces se puede usar una versién més corta de las etiquetas PHP. Puede in- tentar usar <? and ?> sin el php. Si las etiquetas cortas estan activadas, pue- de ahorrarse algo de digitacién. Capitulo 6: PHP General 7 JQ PHP procesa todos los enunciados entre las dos etiquetas PHP. Una vez que la seccion PHP se ha procesado, se descarta. 0 bien, si los enunciados PHP pro- ducen output, la seccién PHP es reemplazada por dicho output. El explorador no ve la seccién PHP; s6lo su output, silo hay. Para mas informacién sobre es- te proceso, revise el cuadro: "Cémo el servidor web procesa archivos PHP”, Como ejemplo, voy a empezar con un programa que despliega iHo1@, Mundo! ena ventana del explorador. (Es una especie de tradici6n: el primer programa que se es- cribe en cualquier lenguaje es el programa jHola, Mundo! Tal vez usted haya escrito ‘un programa Hola, Mundo! la primera vez que aprendié HTML) La Lista 6-1 muestra un programa HTML que despliega i Hola, Mundo! en a ventana del buscador, Lista 6-1: Programa jHola, Mundo! en HTML. <html> <head><titleHola, Mundo Program

iola, Mundo! Si dirige su explorador hacia este programa HTML, vera una pagina web que dice iHola, Mundo!! en la ventana del explorador. La Lista 6-2 muestra un programa PHP que hace exactamente lo mismo: muestra iHola, Mundo! en la ventana del buscador. Programa jH Hola, Mundo Program <2php echo “

iHola, Mundo 2 Si dirige su explorador hacia este programa, muestra exactamente la misma pagina web que el programa HTML en la Lista 6-1 oH No vea el archivo directamente con su explorador. Es decir, no escoja ey i Filet Opens>Browse en el ment de su explorador para navegar hasta el archivo y hacer clic en él. Debe dirigirse hacia el archivo digitando su \@ / URL, como lo describo en el Capitulo 2. Si ve el cédigo PHP aparecer en la as ventana del buscador en lugar del output esperado, es probable que us- ted no se haya dirigido hacia el archivo usando su URL. 120 Parte tn: PHP _ So En este programa PHP, la seccién PHP es <2php echo “ Las etiquetas PHP encierran sélo un enunciado: un enunciado echo. Fl enun- Gado echo es un enunciado PHP que usaré con mucha frecuencia. Simple- mente produce como output el texto entre comillas dobles PnmeRneAA Fr No hay ninguna regla que diga que usted debe digitar el PHP en lineas separa- das. Se podria incluir perfectamente el PHP en el archivo en una sola linea, ‘como sigue: <2php echo * Cuando la seccién PHP se procesa, se reemplaza con el output. En este caso, el output es

iHota, Mundo! Si reemplaza la secci6n PHP en la Lista 6-2 con el output anterior, el programa ahora luce exactamente igual que el programa HTML en la Lista 6-1. Si dirige su explorador a cualquiera de los dos programas, verd la misma pagina web. Si usted observa el cédigo fuente que el explorador ve (en el explorador, escoja digo Fuente), vera el mismo c6digo fuente para ambos programas, Escribir enunciados PHP La secci6n PHP que usted agrega a su archivo HTML consta de un arreglo de enunciados PHP. Cada enunciado PHP es una instruccién para que PHP haga ‘algo. En el programa jHola, Mundo! mostrado en la Lista 6-2, la seccién PHP ‘contiene s6lo un enunciado PHP simple. El enunciado echo ordena a PHP a mostrar como output el texto entre comillas dobles. Los enunciados PHP terminan con un punto y coma (;). PHP no nota los espa- ios en blanco ni los finales de lineas. Contintia leyendo un enunciado hasta topar con un punto y coma o la etiqueta PHP de cierre, sin importar cudntas Iineas abarque el enunciado. Omitir el punto y coma es un error comin, el cual da como resultado un mensaje de error que se ve ast Parse error: expecting ~',*' or °';'' in /hello.php on line 6 Observe que el mensaje de error le indica el nimero de la linea donde se en- contré con problemas. Esta informaci6n le ayuda a localizar el error en su programa, Este mensaje de error probablemente significa que se omiti6 el punto y coma al final de la linea 5. £30 eS g S810 Capitulo 6: PHP General J D 7 Le recomiendo escribir sus programas PHP con un editor que enumere las neas, Si su editor no le permite especificar a cual linea usted desea ir, tendra que contar las lineas manualmente desde la parte superior del archivo cada vez que reciba un mensaje de error. Hallaré muchos editores que sirven para editar PHP en phpeditors.1inuxbackup.co.uk Avveces, un grupo de enunciados se combina para formar un bloque. Un blo, que se encierra entre llaves ( { } .Un bloque de enunciados se ejecuta en con- junto. Un uso comin para los bloques es en un blogue condicional, en el cual los enunciados se ejecutan s6lo cuando ciertas condiciones son verdaderas. Por ejemplo, usted quizés quiera que su programa haga lo siguiente: if (el cielo esta azul) ( poner correa a dragon; sacar a dragon a pasear por el parque; ) Estos enunciados se encierran entre llaves para garantizar que se ejecuten como bloque. Si el cielo est4 azul, tanto poner Ta correa a dragon como sacar a dragon a pasear por el parque se ejecutardn. Si el cielo no es- t4 azul, ninguno de los enunciados se ejecutara (ni la correa, ni la caminata).. Los enunciados PHP que usan bloques, tales como los enunciados if (los cua- les explico en el Capitulo 7), son enunciados complejos. PHP lee el enunciado complejo en su totalidad, sin detenerse en el primer punto y coma que en- cuentre. PHP sabe que probablemente se topara con uno o mas bloques, y busca la Have de cierre del dltimo bloque en los enunciados complejos. Ob- serve que hay un punto y coma antes de la llave final. Este punto y coma es obligatorio, pero no hace falta un punto y coma después de la llave final, Si usted quisiera, podria escribir toda la secci6n PHP en una sola linea larga, siempre y cuando separara los enunciados con puntos y comas y encerrara los bloques entre llaves. Sin embargo, un programa escrito asi seria imposible de leer, Por ende, usted deberia poner los enunciados en lineas separadas, excep- to en aquellas ocasiones cuando haya enunciados realmente cortos, Observe que los enunciados dentro de los bloques estan sangrados. La sangria no es necesaria para PHP. Se usa estrictamente para facilitar la lectura. Usted de- beria usar sangrias en los enunciados de un bloque, para que los lectores del script puedan saber mas facilmente dénde empieza y dénde termina un bloque. En general, a PHP no le importa si las palabras claves del enunciado estén en ma- ylsculas 0 miniisculas. Echo, echo, ECHO y eCHo son todos iguales para PHP. 122 Parte itt: PHP me Mensajes de error y advertencias PHP treta de ser de ayuda cuando surgen pro- blemas. Proporciona mensajes de error y ad- vertencias como sigue: 1 Mensaje de error: Usted recibe este men- saje cuando el programa tiene un problema que no lo deja correr. El mensaje contiene tanta informacién como sea posible, para asi ayudarle @ identificar el problema. Un mensaje de error comin es Parse error: parse error in ci\catalog\test.php on line 6 Con frecuencia, usted recibe este mensaje de error porque ha olvidado un punto y co ‘ma, un paréntesis 0 una llave, 1 Mensaje de advertencia: Usted recibe este mensaje cuando e! programa ve un proble- ‘ma que no es lo suficientemente serio co- mo para evitar impedir que el programa corra, Los mensajes de advertencia no sig- nifican que el programa no puede ejecutar- se; el programa continiia corriendo, Mas bien, los mensajes de advertencia le indi- can que PHP cree que probablemente ha- ya algo malo. Usted deberia identificar el origen de la advertencia y luego decidir si necesita arregtarlo. Generalmente, es asi. Aviso: Usted recibe un aviso cuando PHP ve una condici6n que podria ser un error 0 que podria estar perfectamente bien. Los avisos, como las advertencias, no causan que el script deje de correr. Los avisos tie- nen menor probabilidad de indicar proble- mas serios que las advertencias. Los avisos sélo le dicen que usted esta haciendo algo inusual y es mejor revisar nuevamente lo que esté haciendo para asegurarse de que realmente lo quiere hacer. Una razén comin por la cual podria recibir un aviso es si esté haciendo eco de varia- bles que no existen. He aqui un ejemplo de lo que usted podria ver en ese caso: Notice: Undefined variable: age in testing.php on line 9 Observe que todos los tipos de mensajes indi- can el nombre del archivo que esté causando problemas y el ndmero de la linea donde se en- contré el problema. PHP tiene varios tipos de mensajes de error yad- vertencia, El tipo que se envia depende del nivel de mensajes de error al cual se haya configura do PHP. Esimportante ver todos los mensajes de error, pero tal vez usted no quiera ver todas las. advertencias y avisos. Amenudo el nico proble- ma con un aviso es el desagradable mensaje; o! cédigo hace exactamente lo que usted desea que haga. O bien, tal vez prefiera ver los avisos durante el desarrollo pero no una vez que la ap cacién esté siendo usada por los clientes. Para cambiar el nivel de mensajes de error, de manera que su sitio web muestre mas 0 menos mensajes, usted debe ser el administrador PHP. Edite el archivo php.ini en su sistema, Contiene una seccién que explica los niveles de mensa- jes de error y cémo configurarlos. Cambie la i nea que establece su nivel de mensajes de error y luego guarde el archivo php. ini edi- tado. Nota: Probablemente tendra que reiniciar su servidor web antes de que los cambios en el archivo de configuracién de PHP surtan efecto. Siusted no es el administrador PHP de su sistema ynottiene acceso a php. ini, puede agregar un ‘enunciado. cualquier programa que establezcael nivel dereporte de mensajes s6lo para ese progra- ma, Para fijar el nivel de mensajes de error, agre- ue el siguiente enunciado al inicio del programa: aaaaPAPaPPAAAAaAnnAnA’D Capitulo 6: PHP General 1 23 error_reporting (OPTIONS); Para ver todos los errores pero no los avisos, OPTIONS es.un cédigo que le dice a PHP que US#!9 siguiente: nivel de reporte de errores usar. Para vertodos _error_reporting( ALL & ~£ NOTICE); ‘os errores, use lo siguiente: OPTIONS puede ser cualquiera de los codigos error_reporting(£ ALL): descritos en el archivo php.ini. Usar variables PHP | Las variables son recipientes usados para guardar informaci6n. Una variable tiene un nombre y, en la variable, se almacena informaci6n. Por ejemplo, us- ted podria nombrar una variable $edad y almacenar el némero 12 en ella Después de almacenar informaci6n en una variable, se puede usar posterior- mente en el programa. Uno de los usos mas comunes para las variables es guardar la informacién que un usuario digita en un formulario, Dar un nombre a una variable ‘Alponer nombres a las variables, recuerde las siguientes reglas: + Todos los nombres de variables llevan el signo de délar ($) delante de ellas. Esto le dice a PHP que es el nombre de una variable. + Los nombres de variables pueden ser de cualquier longitud. Los nombres de variables pueden incluir letras, néimeros y rayas tinicamente. Los nombres de variables deben empezar con una letra 0 una raya. No pueden empezar con un ntimero. ‘ © Las letras maytisculas y las minisculas no son equivalentes. Por ejem- plo, nombre y $Nombre no son la misma variable. Si usted almacena formaci6n en $nombre, no puede tener acceso a esa informacién usan- do el nombre de variable $Nombre tO Al denominar variables, use nombres que indiquen claramente qué informa- & ci6n esta en la variable. Usar nombres de variables como $varl, $var2, $A © $8 no contribuye con la claridad del programa. Aunque a PHP no le impor- ta qué nombre usted escoja para la variable y no se confundird, la gente que trate de seguir el programa tendra muchos problemas recordando cuales va- riables guardan cual informacin. Nombres de variables como Snonbre , $edad y $Totaldelpedido son mas descriptivas y dtiles. ee 124 Pare: PHP Crear y asignay valores a las variables Las variables pueden guardar ntimeros 0 cadenas de caracteres. Para almacenar informacion en variables, simplemente se usa un signo de igual (-). Por ejemplo, Jos cuatro siguientes enunciados PHP asignan informaci6n a variables: $edad = 12 Sprecio = 2.55; Snumero=-2; Snombre = "Goliat Perez” Observe que la cadena de caracteres esta encerrada entre comillas, no asi los niimeros. Los detalles sobre cémo usar ntimeros y caracteres se describen mas adelante en este capitulo, (Consulte: "Trabajar con nimeros" y "Trabajar con cadenas de caracteres".) ‘Ahora, usted puede usar cualquiera de estos nombres de variables en un enunciado echo para ver el valor en esa variable. Por ejemplo, is usa el si guiente enunciado PHP en una seccién PHP: echo $eda el resultado es 12. Si incluye la siguiente linea en un archivo HTML:

Su edad es . el resultado en la pagina web es Su edad es 12 Cada vez que ponga informacion en una variable que no existia antes, usted crea esa variable. Por ejemplo, suponga que usa el siguiente enunciado PHP: Snombre = "Jorge": Si este enunciado representa la primera vez que usted menciona la variable Snombre, este enunciado crea la variable y la establece en "Jorge". Si tiene tuna configuracién previa del enunciado Snombre en “Maria”, este enuncia- do cambia el valor de Sombre a "Jorge ‘También puede eliminar informacién de una variable. Por ejemplo, el siguien- te enunciado quita informacién de la variable Seda¢ : Sedad = ""; La variable $edad existe pero no contiene ningéin valor, Eso no quiere decir que Sedad no que $edad se establezca en 0 porque cero es un valor. Signific almacena ninguna informacion. Seev,veuesuesbsi E’UUEUE YU UU YD H = Capitulo 6: PHP General J] DS Usted puede ir més alla y destruir la variable usando este enunciado: unset (Sedad) ; Una vez que se haya ejecutado este enunciado, la variable $edad dejard de existir. Una variable guarda su informacién para todo el programa, no s6lo para una sola seccién PHP. Si una variable se establece en "si" al inicio de un archivo, seguiré guardando "si" al final de la pagina, Por ejemplo, suponga que su ar- chivo tiene los siguientes enunciados:

itola, Mundo! itola otra vez, Mundo!
<2php echo Snombre: » El enunciado echo en la segunda seccién PHP mostraré Jaime. La pagina web resultante de estos enunciados es iHola, Mundo! iHola otra vez, Mundo! Jaime Lidiar con avisos Si usa un enunciado que incluya una variable que no exista, probablemente recibir un aviso. Dependeré del nivel de mensajes de error al cual esté confi- gurado PHP. Recuerde que los avisos no son lo mismo que los mensajes de error; su aparicién no significa que el programa no puede correr: el programa continia corriendo. Los avisos sélo le dicen que esta haciendo algo fuera de lo comtin y debe revisarlo para asegurarse de que lo que esta haciendo es realmente lo que quiere hacer. (Vea el cuadro: "Mensajes de error y adverten- cias",) Por ejemplo, suponga que usted usa los siguientes enunciados: unset ($edad); echo Sedad; Sedad2 = Sedad; Podria ver dos avisos: uno para el segundo enunciado y uno para el tercero. Los avisos se verdn asi Notice: Undefined variable: edad in testing.php on line 9 126 Parte Ill: PHP JO. si Sg Suponga que usted definitivamente quiere usar estos enunciados. El progra- ‘ma funciona exactamente como desea que lo haga. Los tinicos problemas son los molestos avisos. Puede evitar la aparicién de avisos en un programa in- sertando el signo de arroba (@) en el punto donde el aviso se emitiria, Por ejemplo, puede evadir los avisos generados por los enunciados anteriores, si cambia los enunciados como sigue unset (Sedad); echo @edad; Sedad2 = @Sedad; Siusted es el administrador PHP, puede cambiar el nivel de mensajes de error pa aque los avisos no aparezcan. Para ver los detalles sobre como hacerlo, consul te el cuadro: "Mensajes de error y advertencias", en otra parte de este capitulo. Usar constantes PHP Las constantes PHP son muy parecidas a las variables. A las constantes se les da un nombre, y se almacena un valor en ellas. Sin embargo, las constantes son constantes; es decir, el programa no puede cambiarlas. Una vez que us- ted establece un valor para una constante, permanece igual. Si us6 una cons: tante para la edad y la fij6 en 29, no se puede variar. {No seria maravilloso tener 29 alos para siempre? Las constantes se usan cuando se utiliza informaci6n en varios lugares en el programa, y no cambia durante el programa, Es ttil establecer una constante para el valor al inicio del programa y usarla a través de todo el programa. Al crear una constante en lugar de una variable, usted se asegura de que no se cambiard accidentalmente. Al asignarle un nombre, usted sabra instantanea- mente de qué informacién se trata. Y, al establecer una constante una vez al inicio del programa (en vez de usar el valor a lo largo del programa), usted puede cambiar el valor en un lugar si necesita cambiarse, en lugar de perse- guirlo por varios lugares en el programa para cambiarlo. Por ejemplo, usted podrfa establecer una constante que sea el nombre de la compaiiia y una constante para la direcci6n de la compaiia, y usarlas donde sea que las necesite. Luego, si la compafiia se traslada, usted podria simple- mente cambiar el valor en la direcci6n de la compania al inicio del programa, y no haria falta hallar todos los lugares en su programa que hicieron eco de la direccién de la compahia para cambiarla. Las constantes se establecen usando el enunciado define. El formato es define("nombredeconstante" ,"valordeconstante"); eVwv vw ©) YY 8 8 8 8 DY 8 8 YY © & oF tp Capitulo 6:PHP General J 27 Por ejemplo, para fijar una constante con el nombre de la empresa, use el guiente enunciado: define( "EMPRESA" "Tienda de mascotas ABC"); Ahora, use la constante en su programa cada vez que necesite el nombre de su compai echo Empresa: Cuando se hace un eco de una constante, no puede encerrarla entre comillas. Si lo hace, hard eco del nombre de la constante, y no del valor. Se puede ha- cer un eco de una constante sin nada, como se muestra en el ejemplo ante- rior, o encerrandola entre paréntesis. Los nombres de constantes pueden ser los mismos que se usan para las va bles, aunque los nombres de constantes no empiezan con el signo de dolar (8). Por convencién, las constantes reciben nombres escritos en maytisculas, para poder ver facilmente que son constantes. Sin embargo, a PHP realmente no le importa cémo se denomina la constante. Usted puede almacenar una cadena 0 un ndmero en ella, El enunciado siguiente esta perfectamente bien para PHP: define (TEDAD",29): Eso si, no espere que la Madre Naturaleza le crea. Trabajar con nimeros PHP le permite realizar operaciones aritméticas con ntimeros. Las operacio- nes aritméticas se indican mediante dos numeros y un operador aritmético. Por ejemplo, un operador es el signo mas (+), de modo que usted puede indi- car una operacién matematica asf: 142 ‘También puede llevar a cabo operaciones matematicas con variables que contengan numeros, como sigue: $n sn2 $sum = Sil + $n2; La Tabla 6-1 muestra los operadores aritméticos que puede usar, 1.26 Parte tnt: PHP oO Usar Suponga que usted definitivamente quiere usar estos enunciados. Fl progra: ma funciona exactamente como desea que lo haga. Los tinicos problemas son Jos molestos avisos. Puede evitar la aparicién de avisos en un programa in- sertando el signo de arroba (@) en el punto donde el aviso se emitiria. Por ejemplo, puede evadir los avisos generados por los enunciados anteriores, cambia los enunciados como sigue: unset (Sedad) echo @Sedad: Sedad2 = @Sedad; "; Verd lo siguiente en la pagina web: 25.00 sprintf puede hacer otras cosas ademas de formatear los lugares de los de- cimales. Para mas informaci6n sobre c6mo usar sprintf para formatear va- lores, consulte el Capitulo 13. Si desea separar los miles en su ndmero mediante comas, puede usar: number_format. El siguiente enunciado crea un formato en délares con comas: Sprice ~ 25000; $f_price = number_format($price, 2): echo "$f_pricecbr>” Verd lo siguiente en la pagina web: 25,000.00 E12 enel enunciado number_format establece el formato en dos espacios decimales. Usted puede usar cualquier niimero para obtener cualquier nime- ro de espacios decimales. Trabajar con cadenas de caracteres Una cadena de caracteres es un arreglo de caracteres. Los caracteres son letras, rniimeros y signos de puntuaci6n. Cuando un niimero se usa como carécter, no es ms que un carécter almacenado, al gual que una letra. No se puede usar en ope- raciones aritméticas. Por ejemplo, un néimero telef6nico se almacena como una cadena de caracteres porque s6lo necesita almacenarse: no hace falta sumarlo ni multiplicario. SSS ee eee ee 130 Parte: PHP oo Cuando usted almacena una cadena de caracteres en una variable, le indica a PHP donde empieza y dénde termina la cadena usando comillas dobles 0 sen- cillas. Por ejemplo, los dos siguientes enunciados son iguales: $string = "iHola, Mundo!" $string = ‘iHola, Mundo! ‘Suponga que desea almacenar una cadena como $string = ‘El restaurante Tom's es bueno’; echo $string: Estos enunciados no funcionaran pues, cuando PHP ve la (comiilla sen pués de Tom, piensa que este es el final de la cadena y despliega lo sigui E1 restaurante Tom Usted debe decirle a PHP que interprete la comilla sencilla (’) como un apéstrofo y nal de una cadena, Puede hacerlo usando una barra inclinacka (\) fren- lano nocomo el fit tealacomilla sencilla. La barra inversa le indica a PHP que la comiilla sen tiene ningiin significado especial; simplemente es un apéstrofo. Esto se llama escu pardel cardcter, Use los siguientes enunciados para desplegar toda la cadena: $string = 'E] restaurante Tom\"s es bueno’ echo $string; Asimismo, cuando encierra una cadena entre comillas dobles, también debe usar la barra invertida delante de cualquier comilla doble en la cadena. Cadenas entre comillas sencillas versus cadenas entre comillas dobles Las cadenas de comillas sencillas y las que tienen comillas dobles se manejan en formas diferentes. Las cadenas entre comillas sencillas se almacenan lite- ralmente, exceptuando \’, que se almacena como un apéstrofo. En las cade- nas entre comillas dobles, las variables y algunos caracteres especiales se evaliian antes de almacenar la cadena. Estas son las diferencias mas impor- tantes en el uso de comillas dobles o sencillas al escribir programas: Manejar variables: Si usted encierra una variable entre comillas dobles < PHP usa el valor de la variable. Sin embargo, si la encierra entre comillas sencillas, PHP usa el nombre literal de la variable. Por ejemplo, si usa los © enunciados siguientes: -9-Aene Ahan cc aA ona ne SEBEEUEELEUEUEE YEU EU YU ® — $resultadol = "Sedad' Sresultadoz = ‘Sedad echo $resultadol: echo "
"; echo $resultado: el output es 12 sedad Iniciar una linea nueva: Los caracteres especiales \n le dicen a PHP = que empiece una nueva linea. Cuando usa comillas dobles, PHP empieza una linea nueva en. \n; pero, con comillas sencillas, \n es una cadena li teral, Por ejemplo, al usar los siguientes enunciados: Scadenal = "Cadena entre \ncomillas dobles™ Scadena2 = ‘Cadena entre \ncomillas sencillas': cadenal da el siguiente output Cadena entre com] las dobles y cadena? da este output Cadena entre \ncomillas sencillas + Insertar un tabulador: Los caracteres especiales \t le dicen a PHP que * inserte un tabulador. Cuando se usan comillas dobles, PHP inserta un ta- { bulador en \t pero, con comilla sencillas, \t es una cadena literal. Por © ejemplo, cuando se usan los siguientes enunciados: "Cadena entre \tcomillas dobles"; “Cadena entre \tcomillas sencillas's Scadenal Scadena2 cadenal da el siguiente output Cadena entre — comillas dobles y cadena2 da este otro output | Cadena entre \tcomillas sencillas Las comillas que encierran la cadena entera determinan el tratamiento de va- riables y caracteres especiales, incluso si hay otro conjunto de comillas den- tro de la cadena. Por ejemplo, vea los enunciados siguientes: Snumero = 1 $cadenal = "Hay 'Snumero’ personas en fila."; §cadena2 = ' Hay ‘Snumero' personas esperando."; echo $cadenal,*
\n"; echo $cadena2; El output es el siguiente: Hay ‘10" personas en fila. Hay “$numero” personas esperando Juntar cadenas Usted puede juntar cadenas, mediante un proceso llamado concatenacién, usando un punto (). Por ejemplo, puede juntar cadenas con los siguientes enunciados: Scadenal = "iKola’; ScadenaZ = ‘Mundo! "; Sunacadena = Scadenal.$cadena2; echo $unacaden El enunciado echo da el siguiente output iHolaMundo! Observe que no aparece ningiin espacio entre Hola_y Mundo. Esto es porque no se incluyeron espacios en ninguna de las dos cadenas que se unieron. Us- ted puede agregar un espacio entre las palabras usando el siguiente enuncia- do de concatenacién en lugar del anterior: Sunacadena = $cadenal." *.$cadena2; Puede usar.= para agregar caracteres a una cadena existente. Por ejemplo, puede usar los siguientes enunciados en lugar de los enunciados anteriores: Sunacadena= "iHola"; Sunacadena.= " Mundo!” echo $unacadena; Elenunciado echo dara el siguiente output: iHola Mundo! Usted también puede deshacer cadenas. Puede separarlas en un cardcter dado buscar una subcadena en una cadena. Puede usar funciones para realizar estas y otras operaciones en una cadena. Explico estas funciones en el Capitulo 7 Trabajar con fechas y horas Las fechas y horas pueden ser elementos importantes en una aplicacién con base de datos para la Web. PHP tiene la capacidad de reconocer fechas y horas y manejarlas en forma diferente que las cadenas de caracteres simples. Las fe- a, i nam SUEBEUBESGEUEEUE ESL Capitulo 6: PHP General § 1 33 chas y horas se almacenan en el PC en un formato llamado marca de tiempo. No obstante, este no es un formato en el cual ni usted ni yo quisiéramos ver la fecha. PHP convierte las fechas de su anotaci6n en una marca de tiempo que el PC puede entender, y de la marca de tiempo a un formato que sea familiar a las personas. PHP maneja las fechas y horas usando funciones incorporadas. El formato de marca de tiempo es una Marca de tiempo Unix, el cual es un ni- mero entero que representa el niimero de segundos desde el | de enero de 1970 00:00:00 GMT (Greenwich Mean Time) hasta la hora representada por la marca de tiempo. Este formato facilita el calculo del tiempo entre dos fechas: s6lo reste una marca de tiempo de la otra. Formatear una fecha La funci6n que usaré més a menudo es date. date convierte una fecha u ho- ra del formato de marca de tiempo al formato que usted especifique. El for- mato general es Smifecha = date(* formato”, $timestamp): Stimestanp es una variable con una marca de tiempo almacenada, Uste guard6 anteriormente la marca de tiempo en la variable, usando una funcién PHP que describiré posteriormente en esta secci6n. Si #timest amp no se in- cluye, la hora actual se obtendré del sistema operativo y se usard. Asi, usted puede obtener la fecha de hoy con el siguiente enunciado: Shoy = date(*Y/d/m"): Si hoy es 10 de agosto, 2003, este enunciado devuelve 2003/10/08 El formato es una cadena que especifica el formato de la fecha que usted de- sea almacenar en la variable. Por ejemplo, el formato "yy-m-d" da como re- sultado 038-10, y "M4. yyy" da ago.10.2003. La Tabla 6-2 indica algunos de los simbolos que puede usar en la cadena formato. (Para una lista completa de simbolos, consulte la documentacién en www.php net.) Las partes de la fecha se pueden separar con guiones (-), puntos (.), diagonales (/) 0 espacios. Tabla 6-2 Simbolos para formato de fechas ‘Simbalo Significado Ejemplo Mes en texto, abreviado ene Mes en texto sin abreviar enero (continia) — 13. Parte mt: PH ee Tabla 6-2 (continuacién) aR oo ooo __ Simbolo Signiticado no Mes en nimeros precedido por ceros Mes en nimeros sin cero precedente ee qd Dia del mes; dos digitos precedidos por ceros i Dia del mes sin el cero precedente 1 Dia de la semana en texto, sin abreviar ___viemes o Dia de la semana en texto, abreviado vie w Dia dela semana en nimeros De0 (domingo) (sébado) Y Aio en cuatro digitos moe Ty Ato en dos digitos a 9 Hora entre 0 y 12 sin ceros precedentes 2.10 _ “6 Hora entre Oy24sin ceros precedentes 2,15 b Hora entre 0y 12 precedida por ceros 1,10 K Hora entre 0 y 24 precedida por ceros 00,23 _ Minutos s_ Segundos a amo pm en mindsculas am, A AM 0 PM en mayiisculas AM, PM Almacenar una marca de tiempo en una variable Puede asignar una marca de tiempo con la fecha y hora actuales a una varia~ ble con los siguientes enunciados: Shoy = time(); Otra forma de almacenar una marca de tiempo actual es mediante el enunciado Shoy = strtotime(*today"); | _ Capitulo 6: PHP General 1 35 Puede almacenar marcas de tiempo especificas usando strtot ime con va- rias palabras claves y abreviaturas que se parecen mucho al ingles. Por ejem- plo, puede crear una marca de tiempo para enero 15, 2003, asi $Fechaclave = strtotime(* january 15 2003"): str ime reconoce las siguientes palabras y abreviaturas: £ 1 Nombres de meses: Los nombres de los doce meses y sus abreviaturas » Dias de la semana: Los siete dias de la semana y algunas abreviaturas «1 Unidades de tiempo: Ao, mes, quin gundo, am, pm ‘ena, semana, dia, hora, minuto, se- 1 Algunas palabras itiles en inglés: ago, now, last, next, this, tomorrow, yesterday 1 Menos y mis: + or © Todos los niimeros | © Las zonas de tiempo: Por ejemplo, gmt (Greenwich Mean Time), pdt (Pacific Daylight Time) y akst (Alaska Standard Time) Puede combinar las palabras y abreviaturas de varias maneras, Todos los si guientes enunciados son validos: $Fechaclave = strtotime(*tomorrow"); # manana a esta hora $Fechaclave = strtotime(*now.+ 24 hours"); $Fechaclave = strtotime(last saturday"): $Fechaclave = strtotime("8pm + 3 days"); $Fechaclave = strtotime(*2 weeks ago"): # hace dos semanas exactas $Fechaclave = strtotime("next year gmt"); #1 de hoy en un ano $Fechaclave = strtatime("this 4am"); #4 AM hoy Si quisiera saber hace cuanto tiempo fue $Fechaclave, podria restarla de Shoy. Por ejemplo: Stiempotranscurrido = $hoy - $Fechaclave: Esto le da el ntimero de segundos entre la fecha importante y hoy. O use el enunciado $ tiempotranscurrido =(($hoy - $Fechaclave)/60)/60 para averiguar el ntimero de horas desde esa fecha clave, 2S 2 YS DD DS Db Ob Ue OU > 136 Parew: PHP Usar fechas con MySOL A menudo, usted desea almacenar una fecha en su base de datos MySQL. Por ejemplo, tal vez quiera almacenar la fecha en que un cliente hizo un pedido o la hora en que un miembro se conect6. MySQL también reconoce fechas y ho- ras y las maneja en forma diferente a las cadenas de caracteres simples. No obstante, MySQL no las maneja igual que PHP. Para usar fechas y horas en su aplicaci6n, usted necesita entender tanto cémo PHP maneja las fechas (cosa que describf en las secciones anteriores) y cmo las maneja MySQL. Ce ¢ mento los tipos de datos DATE y DATETIME para MySQL en detalle en el ‘apitulo 3. A continuacién, le presento un resumen: + DATE: Las columnas de fechas en MySQL esperan que las fechas tengan el aiio primero, luego el mes y, por iltimo, el dia. El ano puede ser yyy 0 yy Elmes puede ser nn 0 n. Elia puede ser dd o d. Las partes dela fecha se pueden separar con un guién (), una diagonal (/), un punto (.) 0 un espacio. DATETIME: Las columnas de horas en MySQL esperan tanto la fecha co- mo la hora. Fl fecha se formatea como lo describi en la vifleta anterior La hora aparece después de la fecha, en el formato hh :nm: 55 Las fechas y horas deben tener el formato correcto de MySQL para almacenarlas en su base de datos. Las funciones PHP pueden usarse para formatear. Por ejemplo, us~ ted puede formatear la fecha de hoy en el formato MySQL.con este enunciado: Stoday = date("Y-m-d"): Puede formatear una fecha especifica usando el enunciado SimportantDate = date(*Y.m.d",strtotime("Jan 15 2003"): Luego puede almacenar la fecha formateada en una base de datos con una consulta SQL como sigue: UPDATE Miembro SET createDate>"$today” Comparar valores En los programas a menudo se usan enunciados condicionales, Es decir, si al go €s verdadero, su programa hace una cosa pero, si no lo es, su programa hace algo diferente. He aqui dos ejemplos de enunciados condicionales: if el usuario es un nino muestre el catalogo de juguetes if el usuario no es un nino muestre el catalogo de equipo electronico nRPARARRAR BSEEEUBBEBIBEEEUETE 88 UO OD ee _apituto PHP General 37 Para saber cuales condiciones existen, el programa debe hacer preguntas. Su Programa luego realiza la tarea con base en las respuestas. Algunas pregun- tas (condiciones) que usted podria querer plantear (y las acciones que po- dria desear que se lleven a cabo) son + (El cliente es un nifto? Si es asf, despliegue el catdlogo de juguetes {Cual producto tiene més ventas? Despliegue el mas popular primero. 5 i j + ;Digit6 el cliente la contrasefa correcta? Si es asi, despligue la pagi | web exclusiva para miembros, + # {Elcliente vive en Ohio? Sies asi, despliegue el mapa de las tiendas en Ohio. Para hacer una pregunta en un programa, usted crea un enunciado que com- para valores. El programa prueba el enunciado y determina si el enunciado es falso o verdadero. Por ejemplo, puede formular las preguntas anteriores asi ji — Elcliente es menor de 13 aitos. {Falso o verdadero? Si es verdadero, des- 1 pliegue el catalogo de juguetes. 5 Las ventas del producto 1 son més altas que las del producto 2. {Falso 0 | verdadero? Si es verdadero, despliegue el Producto 1 primero; si es fal- so, despliegue el Producto 2 primero. { ~ La contrasena del cliente es secreto. {Falso verdadero? | muestre la pagina web exclusiva para miembros. es verdadero, ¥ Elcliente vive en Ohio. ;Falso 0 verdadero? Si es verdadero, despliegue un mapa con la ubicacién de las tiendas en Ohi Las comparaciones pueden ser bastante simples. Por ejemplo, jes el primer valor mas grande que el segundo valor? ,0 mas pequefio? ,0 igual? Pero a ve- ces hay que fijarse en las cadenas de caracteres para ver si tienen ciertas ca- n lugar de ver sus valores exactos. Por ejemplo, usted podria icar cadenas que empiecen con $ 0 cadenas que se parezcan a ntimeros telefénicos. Para este tipo de comparaciones, se compara una cade- na con un patrén, cosa que describo en la secci6n: "Hacer coincidir cadenas de caracteres con patrones", mas adelante en este capitulo. Hacer comparaciones simples Las comparaciones simples comparan un valor con otro. PHP ofrece varias for- mas de comparar valores. La Tabla 6-3 muestra las comparaciones disponibles. 138 Parte: PHP __ Tabla 6-3 Valores comparados Comparaciéon Descripcion {Son los dos valores iguales? | segundo valor? > Es el primer valor mayor q > 2Es el primer valor mayor que 0 igual al segundo valor? < UEs el primer valor menor que el segundo valor? c GEs el primer valor menor que o igual al segundo valor? ! {Son los dos iguales diferentes entre si? © {Son los dos valores diferentes entre si? isted puede comparar tanto nimeros como cadenas. Las cadenas se comparan ak fabéticamente, y todos los caracteres en mayiisculas van antes que-los caracteres, en miniisculas. Por ejemplo, SS viene antes que Sa. Los caracteres que son signos de puntuaciGn también tienen un orden, y un carécter se puede considerar mayor que otro. Sin embargo, comparar una coma con un punto no tiene mucho valor praetico Las cadenas se coparan con base en su cédigo ASCII (American Standard Code for Information Interchange). En el conjunto de caracteres ASCII, a cada caracter se le asigna un cédigo ASCII que correspond a un ntimero decimal entre 0 y 127 Cuando se comparan cadenas, se comparan con base en este cédigo, Por ejem- plo, elniimero que representa la coma es 44, punto corresponde al 46, Porlo tanto, si se compara un punto con una coma, el punto resulta mas grande, Las comparaciones a menudo se usan para ejecutar enunciados sélo bajo cier- tas condiciones. Por ejemplo, en el ejemplo siguiente, el bloque de enunciados s6lo se ejecuta cuando la comparacion $tiempo ~~ "I ]uvia" es cierta: if ( Stiempo == "Iluvia" 1 sacar sombrilla; cancelar el paseo: , PHP revisa la variable $t i empo para ver si el clima es igual a "| luvia". Sies asi, PHP ejecuta los dos enunciados. Si $+ iempo no es igual a") )uv ia", PHP no ejecuta los dos enunciados. El signo de comparaci6n es dos signos de igual juntos (==). Uno de los errores mas comunes es usar un sélo signo de igual para una comparacién. Un s6lo jgno de igual pone el valor dentro de la variable. Entonces, un enunciado co- moif ($tiempo ~ "Iluvia")estableceria $tiempo en 11uvia,en lugar de verificar si el tiempo ya igualé a luvia y, por lo tanto, seria siempre verdadero. ee Capitulo 6: PHP General J 39 Por ejemplo, aqui hay una soluci6n al problema de programacién presentado al comienzo de esta secci6n. El problema es si el usuario es un nino muestre el catalogo de juguetes si el usuario no es un nino muestre el catalogo de equipo electronico Para determinar si un cliente es un adulto, usted compara la edad del cliente con la edad en la cual se considera adulto a un cliente. Debe decidir a qué edad el cliente dejar de interesarse por los catalogos de juguetes y empezara a inte- resarse mas cn los catélogos de equipo electronico, Suponga que decide que 13 parece ser la edad correcta. Entonces, usted pregunta si el cliente es menor que 13 aitos al comparar la edad del cliente con 13. Si la edad es menor que 13, muestra el catélogo de juguetes; si la edad es 13 0 mas de 13, muestra el catalo- go de equipo electr6nico, Estas comparaciones tendrian el siguiente formato $edad < 13 (des 1a edad del cliente menor que 132) Sedad >= 12 (des Ta edad del cliente mayor que o gual a 132) Una forma de programar las acciones condi enunciados: ionales es usar los siguientes si (Sedad < 13) Sestatus si ($edad >= 13) Sestatus = Estos enunciados le indican a PHP que compare la edad del cliente con 13. En el primer enunciado, si la edad del cliente es menor que 13, el estatus del cliente se establece en “menor”, En el segundo enunciado, si la edad del clien- tees igual ao mayor que 13, el estatus del cliente se fija en "adul to". Luego, usted muestra el catélogo de juguetes a los clientes cuyo estatus sea tenor y muestra el catalogo de equipo electrénico a aquellos cuyo estatus sea adu! to. Aunque puede escribir estos enunciados si més eficientemente, los enun ciados mostrados aqui funcionaran bien. En el Capitulo 7 se presenta una descripcién completa de los enunciados condicionales. Hacer coincidir cadenas de caracteres con patrones A veces, usted necesita comparar cadenas de caracteres para ver si conc ler- dan con ciertas caracteristicas, y no si concuerdan con valores exactos. Por ejemplo, podria querer identificar cadenas que empiecen con $ 0 cadenas que tengan ntimeros en ellas. Para este tipo de comparaciones, se comparan las cadenas con patrones. Estos patrones son expresiones regulares, 140 Pare: PHP ___ _ Usted probablemente haya usado algiin tipo de coincidencia de patrones en el pa- sado, Por ejemplo, cuando usa un asterisco (*) como comodin al buscar archivos (dir s*.doc 0 }5 s*.txt),usted esté haciendo patrones coincidir. Ast, c* txt es un patron. Cualquier cadena que empiece con cy que termine con lacade na.txt, con cualesquiera caracteres entre la ¢ y.txt, concuerde con el patron. Las cadenas cow. txt, ©3333. txt y c3c4. txt todas coinciden con el patron, Usar expresiones regulares es s6lo una variacion mas complicada de usar comodines, El uso mas comtin para concordar patrones en las paginas web es verificar el input de un formulario. Sila informacién no tiene sentido, usted seguramente no querré almacenarla en su base de datos. Por ejemplo, siel usuario digita un nombre en un formulario, usted puede chequear si parece un nombre real al comparar patrones. Ya sabe que un nombre consta principalmente de letras y espacios. Otros caracte- res validos podrian ser un guion () (como en el nombre SmithKline) y una comilla sencilla (?): por ejemplo, en O'Hara. Usted puede revisar el nombre al establecer un patron que sea una cadena s6lo con letras, espacios, guiones y comillas sencillas, ¥ Juego cotejarlo con el nombre en el patr6n. Si el nombre no concuerda (es dk contiene caracteres que no estan en el patrén, tal como ndimeros 0 un signo de pre- gunta (?)) no es un nombre real. Los patrones consisten en caracteres literales y caracteres especiales. Los ca racteres literales son earacteres normales, sin ningtin otro significado espe- cial, Una c es una ¢ sin mas significado que ser una de las 27 letras del ‘lfabeto espaiol, Los caracteres especiales tienen significados especiales en el patron, tal como el asterisco (*) cuando se usa como comodin. La Tabla 6-4 muestra los caracteres especiales usados en los patrones. Tabla 6-4 Caracteres especiales usados en patrones ado Ejemplo Concuerda No concuerda_ Caracter —Signil a Inicio de linea ne casa micasa $ Final de linea cs tic stick Cualquier - Cualquier al caracter solo cadena que contenga por lo menos dos caracteres Cardcter lean lean, len loan precedente opcional ) Agrupacaracteres (ean lean fen, In literales en una cadena que debe concordar exactamente Capitulo 6: PHP General 1 4 1 Cardcter —Significado Fjemplo Concuerda No concuer ti Encierra un conjunto 1fea]n len, fan fean, In de caracteres lite-ales opcionales - Representa todos los_m{a-c]n man,mbn, ——-mdn, mun, caracteres entre men man dos caracteres + Uno 0 mas de pue Puertall1, puerta, los elementos (1-3) + puertal3i puertass anteriores * Cero o mas de puerta puerta, puertad, los elementos (1-3) puerta3tl puerta445 anteriores Ct Los nimeros de al2,5) aa,aaaaa a, XS inicio y final en un rango de repeticiones \ Elsiguiente caracter_m\*n mn men, mean es literal © | |) Unconjunto de (Tom| Tomy) Tom, Tommy Thomas, To cadenas alternas Los caracteres literales y especiales se combinan para crear patrones, los cuales a veces son patrones largos y complicados. Una caclena se compara con el patron y, si concuerda, la comparacién es verdadera. A continuacié hay algunos ejemplos de patrones con un desglose del patron y muestras de cadenas que concuerdan y otros que no concuerdan: jf *LA-2].* —Cadenas que empiezan con una letra maytiscula © °[A-Z] — Letra maydscula al inicio de la cadena + .* — Una cadena de caracteres que tiene uno 0 mas caracteres de longitud Cadenas que concuerdan: igmoslo otra vez, Sam *Yo Cadenas que no concuerdar: + oigémoslo otra vez, Sam *yo 142 Pare: PH i | Po Querido (hijo|hermano) ~ Dos cadenas alternas * Querido — Caracteres literales * (hijofhermano) ~ Hijo o hermano Cadenas que concuerdan: * Querido hijo * Mi Querido hermano Cadenas que no concuerdan: * Querido Goliat * hijo *[0-91{5]}(\-[0-9114])25 ~ Cualquier cédigo postal * °T0-9115) ~ Cualquier cadena de cinco nimeros © \) = literal 0-9] (4) ~ Una cadena de nimeros de cuatro caracteres de longitud + (.)2-~ Agrupa las dos diltimas partes del patron y las hace opcionales Cadenas que concuerdan’ + 90001 = 90002 — 4323 Cadenas que no concuerdan: +9001 12-4321 ».4@.+\.com$ - Cualquier cadena con \cluida que termine en.com «+ — Cualquier cadena de uno 0 mas caracteres al inicio + @ — Una @ (signo de arroba) literal. @ no es un cardcter especial «+ ~ Cualquier cadena de uno 0 més caracteres *\. = Un punto literal * com$ — Una cadena com literal al final de la cadena. Cadenas que concuerdan’ * maria@suempresa.com Cadenas que no concuerdan: + maria@suempresa.net © @maria.com Puede comparar una cadena con un patrén usando ereg. El formato general es ereg( “patron” cadena); 142. Pare: PHP + Querido (hijo|hermano) ~ Dos cadenas alternas + Querido ~ Caracteres literales * (nijo|hermano) ~ Hijo o hermano Cadenas que concuerdan: * Querido hijo + Mi Querido hermano Cadenas que no concuerdan: * Querido Goliat * hijo *(0-91{5)(\-[0-9114))2$ ~ Cualquier cédigo postal © °[0-91(5) ~ Cualquier cadena de cinco nimeros © \- = literal + (0-9]14} ~ Una cadena de ntimeros de cuatro caracteres de longitud * (.)2 = Agrupa las dos tiltimas partes del patron y las hace opcionales & — Cadenas que concuerdan: + 90001 i = 90002 — 4323 © Cadenas que no concuerdan f +9001 ' ©12—4321 +\..com$ ~ Cualquier cadena con @ incluida que termine en.com © = Cualquier cadena de uno 0 més caracteres al i io © @ — Una @ (signo de arroba) literal. @ no es un caracter especial * + — Cualquier cadena de uno 0 més caracteres ©\. = Un punto literal * com — Una cadena com literal al final de la cadena. Cadenas que concuerdan: * maria@suempresa.com Cadenas que no concuerdan: ‘ + maria@suempresa.net © @mariacom Puede comparar una cadena con un patron usando ereg. El formato general es ereg(*patron” cadena); ‘ Unir Capitulo 6: PHP General El patron o la cadena pueden ser literales, como sigue: ereg(*[0-9)*", "1234"; © se puede almacenar en variables, asf: ereg( patron, $cadena): Para usar crea para verificar el nombre que un usuario digit6 en un formula- rio, compare el nombre con un patron, como sigue ereg("*{A-Za-z" -]+$",Snombre) El patron en este enunciado hace lo siguiente: Usa" y § para indicar el inicio y el final de la cadena. Eso aque todos los caracteres en la cadena deben concordar con el patron, jerra todos los caracteres literales permitidos en la cadena entre [ ]. No se permite ningiin otro caracter. Los caracteres permitidos son letras ma- isculas y mindsculas, un apéstrofo (’), un espacio en blanco y un guidn (). Le Usted puede especificar un rango de caracteres usando un gui6n dentro de los corchetes [ ]. Cuando hace eso, como en A-2 arriba, el gui6n no representa un + caracter literal. Ya que usted quiere incluir un guign como cardcter literal per | mitido en su cadena, debe agregar un guién que no esté entre otros dos carac- teres, Eneste caso, el guidn se incluye al final dela lista de caracteres literales. } » sigue la lista de caracteres literales entre corchetes (_] con un +. El sig- e no de mas significa que la cadena puede contener cualquier ntimero de los caracteres dentro de [] pero debe contener al menos un caracter. comparaciones con and/or/xor A veces una comparacién es suficiente para verificar una condicién pero, a menudo, usted debe plantear mas de una pregunta, Por ejemplo, suponga que su compania ofrece catélogos para diferentes productos en distintos idiomas, Usted debe saber cual producto desea ver el cliente y en qué idioma necesita verlo, Este es el formato general para un arreglo de comparaciones: conparacion andjor{xor comparacion andjor|xor conparacion and|or|xor Las comparaciones estan conectadas por medio de una de las tres palabras si- guientes: f and: Ambas comparaciones son verdaderas ¥ or: Una de las comparaciones 0 ambas comparaciones son verdaderas. § > xor: Una de las comparaciones es verdadera pero no ambas. | 143 nmneanobnhnapaAthAaAnwnmphAaAaAAnA fn ARP AR A eB 14 Parte in: PHP La Tabla 6-5 muestra algunos ejemplos de comparaciones miiltiples. Tabla 6-5 Comparaciones miltiples Condicién ____Escierta si _ _ Scliente =~ "Smith" El cliente se apellida Smith o Jones. or $cliente == "Jones" _ Scliente == "Smith" Elcliente se apeida Smithy el cliente vive nd ScustState = OR" en Oregon. Smith El cliente se apellida Smith o el cliente vive $cliente or $custState == "OR en Oregon o ambas. Scliente == "smith" cliente se apellida Smith, el cliente xor $custState == "OR" vive en Oregén — pero no amas. Scliente!= "Smith El oliente tiene cualquier apellido menos and $custage < 13 ‘Smith y tiene menos de 13 afios de edad. Usted puede encadenar juntas tantas comparaciones como sea necesario. Las comparaciones que usan and se prueban primero, seguidas de las com- paraciones que usan xor y, finalmente, se prueban las que usan or. Por ejem- plo, la siguiente es una condicién que incluye tres comparaciones: sedad 300 and snombre 200 or Sedad "Goliat" i el nombre del cliente es Goliat y tiene 300 afos de edad, este enunciado es verdadero. El enunciado también es verdadero si el cliente tiene 200 afos, in- dependientemente de cual sea su nombre. Esta condicién no es verdadera si el cliente tiene 300 afos, pero su nombre no es Goliat. Usted obtiene estos re- sultados porque el programa chequea la condicion como sigue: 1, Se compara and. El programa revisa $edad_para ver sies igual a 300, y revisa Snombre para ver si es igual a Go! iat. Siambos concuerdan, la condicion es verdadera, y el programa no necesita revisar 0°. Si s6lo una o ninguna de las variables es igual alos valores designados, la prueba continta 2, Se compara or. El programa revisa $edad para ver si es igual a 200. Si es asi, la condicién es verdadera. Si no lo es, la condicién es falsa Usted puede cambiar el orden en el cual se hacen las comparaciones usando paréntesis. La palabra entre paréntesis se evalia primero. Por ejemplo, usted puede reescribir el enunciado anterior con paréntesis como sigue: ( $edad 200 or $edad == 300 ) and fnombre == “Goliat™ Los paréntesis cambian el orden en el cual se revisan las condiciones. Ahora, or se verifica primero. Esta condicién es verdadera si el nombre del cliente Capitulo 6: PHP General es Goliat y tiene 200 0 300 aftos. Usted obtiene estos resultados porque el programa chequea la condicién como sigue: 1. Se compara or. El programa revisa $edad para ver si es igual a 200 0 300. Si e- asi, esta parte de la condicién es verdadera. Sin embargo, la ‘comparaci6n en el otro lado de and también debe ser verdadera, de mo- do que la prueba contintia 2, Se compara and. El programa revisa Snombre para ver si es igual a Go- liat. Si es asi, la condicién es verdadera. Si no lo es, la condici6n es falsa Use los paréntesis libremente, incluso cuando cree que conoce el orden de las comparaciones. Usar paréntesis innecesarios no hace ningiin daito, pero obtener resultados inesperados de las comparaciones si. Si esté familiarizado con otros lenguajes, tal como C, quizds haya usado | | (para or) y && (para and) en lugar de las palabras. Los simbolos | | y && fu cionan PHP también. El enunciado $a < $b && $c > Sb es tan valido como elenunciado $2 < $b and $c > $b. El signo 1! se revisa antes de la pala- bra or, y el signo && se revisa antes de la palabra and. Agregar comentarios a su programa Los comentarios son notas que estan insertadas en el programa mismo. Ad dir a sus programas comentarios que describen su propésito y lo que hacen es esencial. Es importante para el factor loterfa; 0 sea, si usted se gana la lo- teria y se retira a una vida lujosa en la costa francesa, alguien mas tendra que terminar la aplicaci6n. La nueva persona necesita saber qué debe hacer su programa y cémo lo hace. De hecho, los comentarios lo benefician a usted también. Tal vez deba revisar el programa el préximo aio, cuando los deta- Iles estén enterrados profundamente en su mente, debajo de un montén de proyectos més recientes. Use comentarios libremente. PHP los ignora; los comentarios son para los hu- manos, Puede insertar comentarios en su programa en cualquier parte, siem- pre y cuando le diga a PHP que son comentarios. El formato para los comentarios es J* texto de comentario mas. texto de comentario */ Sus comentarios pueden ser tan largos 0 tan cortos como lo necesite. Cuan- do PHP ve el cddigo que indica el inicio de un comentario (/*), ignora todo hasta ver el cédigo que indica el final del comentario (*/). Elsiguiente es un posible formato para los comentarios al inicio de cada programa: — — PORARARAAHRARAANARA 146 Pare ut: PHP nombre: catalog.php descripcion: Programa que muestra descripciones de pro ductos. Las descripciones se almacenan en una base de datos. Las descripciones de los productos se seleccionan de la base de datos con base en la ca tegoria que el usuario digita en un formulario. escrito por: Lola Designer creado: 2/1/02 modificado: 3/15/02 " Usted deberia usar comentarios a lo largo del programa para describir lo que el programa hace. Los comentarios son especialmente importantes cuando Jos enunciados del programa son complicados. Use comentarios tal como el siguiente con frecuencia: J* Obtenga 1a informacion de 1a base de datos */ j* Verifique si el cliente tiene mas de 18 anos de edad */ 7* Agregue 10s cargos por envio al total del pedido */ PHP también tiene un formato para comentarios cortos. Usted puede especi- ficar que una sola linea es un comentario usando el signo de libras (#) 0 dos diagonales (//) de la manera siguiente: # Esta es 1a linea 1 del comentario 7/ Esta es 1a linea 2 del comentario ‘También puede usar # 0 // en el centro de una linea para sefialar el inicio de un comentario, PHP ignorara todo desde el # 0 // hasta el final de la linea. Es- to es iitil para comentar un enunciado en particular, como en el ejemplo si- guiente: $promedio = $Totalpedido/Snarticulos // compute precio promedio Aveces, usted realmente quiere enfatizar un comentario. El siguiente formato hace un comentario mas vistoso: {HEHE HHH HHH HHH df Revise bien esta secciont HE HHH HEH HH HHH Los comentarios PHP no se incluyen en el cédigo HTML que se envia al explo- rador del usuario. El usuario no ve estos comentarios. weuvvievevwv" ola World!
a Mundo: echo “Aqui estoy!": Aqui_estoy! Aqui estoy! echo “Hola Mundo!
\n"; Hola Mundo!
Hola Mundo! echo “Aqui estoy!" Aqui estoy!" Aqui estoy! La Tabla 7-2 resume las diferencias entre las etapas en la creaci6n cle una pa- gina web con PHP. Para observar estas diferencias mas de cerca, tome en cuenta los dos siguientes enunciados echo echo “Linea 1 echo "Linea 2’ usted pone estas lineas en un programa, probablemente esperarfa que la pagina web mostrara lo siguiente: Linea 1 Linea 2 Sin embargo, este no es el output que obtendra. La pagina web realmente se veria asi: Linea Linea 2 Si se fija en el c6digo fuente para la pagina web, vera exactamente lo que se envia al explorador, que es esto: Linea 1Linea 2 Observe que esta la linea que aparece como output y se envia al explorador contiene exactamente los caracteres a los cuales usted hizo eco: nada ma: nada menos. Las cadenas de caracteres a las cuales usted hizo eco no conte- nian espacios, de modo que ningiin espacio aparece entre las lineas, Ademés, observe que las dos lineas aparecen en la misma linea. Si desea em- pezar una linea nueva, debe enviar una sefal indicando el inicio de una nueva linea. Para sefialar que una linea nueva inicia aqui en PHP, debe hacer eco del caracter especial \n. Cambie los enunciados echo a lo siguiente: PHP echo “linea 1\n echo “linea 2" Ahora obtuvo lo que queria, ;verdad? Bueno, en realidad, no. Ahora se ve lo siguiente en la pagina web: linea 1 linea 2 Si se fija en el cédigo fuente, vera esto: linea 1 linea 2 Entonces, el cardcter \n hizo lo suyo: empez6 una linea nueva en el output. Sin embargo, el HTML muestra el resultado en la pagina web como una linea, Si usted desea que el HTML despliegue dos lineas, debe usar una etiqueta, tal como la etiqueta
. Entonces, cambie el cardcter PHP especial al final de la linea a una etiquete HTML, a: echo "linea 1
"; echo "linea 2° Ahora veré lo que quiere en la pagina web: linea 1 linea 2 Si se fija en el cédigo fuente para este resultado, vera esto’ linea i
linea 2 Use \n libremente. De lo contrario, su cédigo fuente en HTML tendra lineas real- mente largas, Por ejemplo, si nace echo de un formulario largo, éste podria consistir en una sola linea larga en el cédigo fuente, aunque se vea bien en la pa gina web. Use \n para separar el c6digo fuente en HTML et ‘Tomarse el tiempo adicional de agregar estas separaciones valdra la pena si de- be resolver algtin problema en la pagina web que no luce como usted esperaba Es mucho més facil examinar el cédigo fuente si no mide un kilémetro de largo. Usar enunciados de asignacion Los enunciados de asignaci6n son enunciados que asignan valores a las variables. El nombre de la variable se indica alla izquierda del signo de igual; el valor por asignar ala variable se detalla a la derecha del signo de igual. Este es el formato general: $nombrevariable ~ valor; El valor puede ser un valor tinico 0 una combinacién de valores, incluyendo los valores en las variables. Una variable puede guardar ntimeros 0 caracteres pero Sueur Ve Ve Vv eee obo eb) Ye ee Capitulo 7: Bloques de construccién PHP para programas] 53 no ambos a la vez. Por lo tanto, un valor no puede ser tna combinacién de néme- ros y caracteres. Los siguientes son enunciados de asignacién validos: Snumero $numero = 241; $numero = (2 - 1) * (4 * 5) -17; Snumero2 = $numero + 3; $cadena = “Hola Mundo"; $cadena2 = $cadena." Otra vez!"; Si combina ntimeros y cadenas en un valor, no obtendra un mensaje de error; simplemente no obtendré el output esperado. Por ejemplo, los siguientes enunciados combinan nimeros y cadenas: Snumero = 2: Scadena = "Hola"; Scombinado = $numero + $cadena; Scombinado2 = $numero.$cadena; echo $combinado; echo
; echo $combinado2; El output de estos enunciados es 2 (Scadena es evaluado como 0) 2Hola (Snumero es evaluado como. un caracter) Usav enunciados de incremento ‘A menudo una variable se usa como contador. Por ejemplo, suponga que de- sea asegurarse de que todos vean el logotipo de su compaitia; por eso, lo juestra tres veces. Usted establece una variable en 0. Cada vez que desplie- gue el logotipo, agrega 1 ala variable. Cuando e valor de la variable llegue a3, usted sabra que es momento de dejar de mostrar el logotipo. Los siguientes enunciados muestran el uso de un contador: Scontador=0; Scontador = $contador + 1; echo Scontador: Estos enunciados darian como output 1. Puesto que los contadores se usan tan a menudo, PHP le proporciona atajos. Los siguientes enunciados tienen el mismo efecto que los enunciados anteriores: $contador= Scontador++; echo Scontador; Este enunciado echo también da como output 1 porque ++ suma 1 al valor ac- tual del $contador. O bien, puede usar el siguiente enunciado: Be 15 Parte: PHP Scontador--: ador. Este enunciado resta I del valor actual del aritmética diferente. Puede Avveces, usted podria querer hacer ut.a operac usar cualquiera de los atajos siguientes: Scontadort+=2; $contador--3; $contador*=2; $contador/ tos enunciados suman 2 al $contador, restan 3 del $contador, multiplican el $contador por 2y dividen el Scontador entre 3, respectivamente. Usar exit En ocasiones, usted quiere que el programa deje de ejecutarse, que simplemente se detenga en algén punto en medio del programa. Por ejemplo, siel programa encuentra un error, a menudo usted prefiere que se detenga en lugar de continuar con mas enunciados. El enunciado exit detiene el programa. No se ejecuta ningan otro enunciado después del enunciado exit, Elformato de un enunciado exit es exit(*mensaje"); mensaje es el mensaje que se despide como output cuando el programa se despide. Por ejemplo, podria usar el enunciado exit("El programa esta retirandose"); n puede parar el programa con el enunciado die, como s Tambi die("El programa este muriendo"); El enunciado die es igual que el enunciado exit. die es solamente otro nombre para exit. A veces, es mucho mas divertido decir die Usar llamados a funciones Las funciones son bloques de enunciados que realizan ciertas tareas especili- cas. Imagine las funciones como mini-programas o subprogramas. El bloque de enunciados se almacena bajo un nombre de funci6n, y usted puede ejecutar el bloque de enunciados en cualquier lugar que desee al lamar a la funci6n por ‘su nombre. (Puede consultar los detalles sobre c6mo usar funciones en la sec- cidn "Usar funciones”, mas adelante en este capitulo.) a — Capitulo 7: Bloques de construccién PHP para programas] 5 5 n indicando su nombre seg Usted puede Hamar a una func ldo de parente. sis, como sigue: nombrefuncion(): Por ejemplo, podria tener una funcién que extraiga todos los nombres de los clientes que viven en cierto estado de la base de datos y despliegue los nom- bres en una lista en el formato apel1ido, nombre, Usted escribe los enun- ciados que llevan a cabo estas tareas y los almacena como una funcidn bajo el nombre conseguirnombres. Luego, cuando usted lama a la funcién, debe especificar cual estado. Puede usar el siguiente enunciado en cualquier lugar de su programa para obtener la lista de nombres de clientes que viven en ese estado en particular, el cual en este caso es California: conseguir_nombres('CA"); El valor entre paréntesis se entrega a la funcién para que ésta sepa cual esta- do usted esta especificando. Esto es pasar el valor. Se puede pasar una lista de valores PHP brinda muchas funciones incorporadas. Por ejemplo, en el Capitulo 6, comento una funci6n incorporada llamada unset. Usted puede anular una va- riable llamada $testvar usando este llamado de funcién: unset(Stestvar); Usar arreglos PHP Los arreglos son variables complejas. Un arreglo almacena un grupo de valores bajo un éinico nombre de variable. Un arreglo es aitil para almacenar valores rela- cionados. Por ejemplo, usted puede almacenar informacién sobre una camisa (tal como tamafo, color y precio) en un solo arreglo llamado $ infocami sa. Us- ted puede facilmente manejar, tener acceso a y modificar la informacion en un arreglo. Por ejemplo, PHP tiene varios métodos para clasificar un arreglo, Las siguientes secciones le dan los detalles sobre los arreglos. Cémo crear arreglos La forma mas simple de crear un arreglo es asignar un valor a una variable con corchetes ({ ]) al final de su nombre. Por ejemplo, suponienco que usted no haya usado una referencia para $nascotas anteriormente en el programa, el enunciado siguiente crea un arreglo llamado $mascotas: BVBUREUUUE YE $mascotas[1} = "dragon"; A 156 Parte: PHP En este punto, se ha creado un arregto llamado $nascotas, la cual tiene solo un valor: dragon. Luego, use los enunciados siguientes: smascotas(2] Smascotas(3] "unicornio": “tigre” Ahora el arreglo $nascotas contiene tres valores: dragon, unicornio y tigre Un arreglo se puede considerar como una lista de parejas de claves y valores Para obtener un valor en particular, usted especifica la clave entre corchetes. En el arreglo anterior, las claves son niimeros: 1, 2 y 3. Sin embargo, también puede usar palabras como claves. Por ejemplo, los enunciados siguientes Crean un arreglo de capitales estatales: Scapitales{'CA'] = "Sacramento": $capitales{'TX'] = "Austin" Scapitales['OR'] = "Salem"; Usted puede usar atajos en lugar de escribir enunciados de asignaci6n sepa rados para cada niimero. Un atajo usa los siguientes enunciados $mascotas[] = "dragon"; $mascotas[] unicornio” Smascotas[] ~ “tigre”: Cuando usted crea un arreglo usando este atajo, a los valores se les asignan automaticamente claves que son nameros de serie, empezando con el nime- 10 0. Por ejemplo, el enunciado siguiente echo "$mascotasl0J": nvia el siguiente resultado: dragon El primer valor en un arreglo con un indice numerado es 0, a menos que us- ted deliberadamente lo establezca en un néimero diferente. Un error comin al trabajar con series es pensar que el primer namero es 1, y no 0. Un atajo mucho mejor aan es usar el enunciado siguiente: $mascotas = array( “dragon”, "unicornio",*tigre"); Este enunciado crea la misma serie que el atajo anterior. Asigna némeros co- mo claves, empezando con 0. Usted puede usar un enunciado parecido para crear series con palabras como claves. Por ejemplo, el enunciado siguiente crea el arreglo de capitales estatales: Scapitales = array( "CAT => “Sacramento”, "TX" => "Austin®, "OR" => "Salem" ); ose VEREUEUREUUEUDSE Capitulo 7: Bloques de construccién PHP para programas 15 7 Como visualizar arreglos Se puede hacer eco del valor de un arreglo asi: echo $capitales[‘TX']; Si usted incluye el valor del arreglo en un enunciado echo mas largo que esté encerrado entre comillas dobles, tal vez deba encerrar el nombre del valor del arreglo entre llaves, a: echo "La capital de as es (Scapitales(*Tx']}
Puede ver la estructura y los valores de cualquier serie usando el enunciado print_r. Para mostrar el arreglo $capita les, use el enunciado siguiente: print_r(Scapitales): ste enunciado print_r dard el siguiente output: Array i {CA} => Sacramento [TX] => Austin Tor] -> Salem ) Este output muestra la clave y los valores para cada elemento en el arreglo. El resultado apareceré en la pagina web con HTML, lo cual significa que se des- plegard en una linea larga. Para ver el resultado en la web en el formato itil que describo aqui, envie etiquetas HTML que indiquen al explorador que muestre el texto tal como lo recibe, sin cambiarlo, usando los enunciados siguientes: echo “

”
print_r($cap
echo *
’ ales): Como quitar valores de los arreglos A veces, usted necesita eliminar completamente un valor de un arreglo. Por ejemplo, suponga que tiene la siguiente serie: $mascotas = array( "dragon, “unicornio", “tigre. "ora", "escorpion” ); Esta serie cuenta con cinco valores. Ahora usted decide que ya no desea ven- der escorpiones en su tienda de mascotas, por lo cual usa el enunciado si- guiente para tratar de retirar escorpion del arreglo: 158 Parte wt: PHP $mascotas(4] Aunque este enunciado establece $mascotas[4] en una cadena vacfa, no lo remueve del arreglo. Usted todavia tiene un arreglo con cinco valores; uno de los valores es vaciol. Para eliminar completamen'e un elemento del arreglo, necesita usar destruitlo, como sigue unset ($mascotas[4]); Ahora su arreglo s6lo cuenta con cuatro valores. Como ordenar arreglo Una de las caracteristicas més atiles de los arreglos es que PHP las puede cla- sificar. PHP almacena originalmente los elementos de un arregio en el orden en que usted los crea. Si usted muestra el arreglo entero sin cambiar el or- ‘den, los elementos apareceran en el orden en que fueron creados. A menudo, usted desea cambiar ese orden. Por ejemplo, tal vez desee mostrar el arreglo en orden alfabético por valor 0 por ciave. PHP puede distribuir los arreglos de varias formas. Para distribuir un arreglo que tiene nimeros como claves, use el enunciado sort como sigue: sort($mascotas); Este enunciado clasifica segtin los valores y les asigna claves nuevas que son los ndimeros apropiados. Los valores se clasifican por nameros primero, se- guidos por las mayiisculas y, finalmente, las mindsculas. Por ejemplo, cons dere el arreglo $mascotas, creado en la secci6n anterior: Smascotas[0] = "dragon"; $mascotas[1] = ‘unicornio"; $mascotas[2] - "tigre": Después de usar el enunciado sort siguiente sort($mascotas); el arreglo se transforma en $mascotas{0] = "dragon": $mascotas{l] = "tigre"; $mascotas(2] = *unicornio™: EVES UEESCSEEO EEE FS Capitulo 7: Bloques de construccién PHP para programas] 5Y Siusa sort() para ordenar un arreglo con palabras como claves, las claves cambiaran a nameros, y las palabras claves se perderan. Para distribuir series que tengan palabras como claves, use el enunciado asort como sigue: asort(Scapitales); Este enunciado clasifica las capitales por valores, y retiene la clave original para cada valor en lugar de asignar una clave numérica. Por ejemplo, consi- dere el arreglo de capitales estatales creada en la secci6n anterior: $capitales['CA'] = *Sacramento*; Scapitales['TX'] = "Austin": Scapitales['OR'] ~ "Salem"; Después del siguiente enunciado de clasificacion asort(Scapitales); el arreglo se convierte en Scapitales'TX"] = "Austin"; Scapitales['CA‘] = "Sacraments Scapitales['OR'] = "Salem"; Observe que las claves permanecieron con el valor cuando los elementos fue- ron reordenados. Ahora los elementos estan en orden alfabético, y la clave estatal correcta todavia esta con la capital estatal correspondiente. Si las cla- ves hubieran sido nimeros, los niimeros estarian ahora en un orden diferen- te. Por ejemplo, si el arreglo original fuera Scapitales(1] = "Sacramento"; Scapitales[2] = "Austin"; Scapitales(3] = "Salen™ después de un enunciado asort, la nueva serie seria Scapitales[2] = Austin Scapitales[1] - Sacramento Scapitales[3] = Salem Dudo que usted quiera usar asort en un arreglo con claves numéricas. Hay varios otros enunciados sort que ordenan de otras formas. La Tabla 7-3 incluye todos los enunciados sort disponibles. 160 Parte mt: PHP Tabla 7-3 Maneras en que se pueden ordenar las series =a re eee Enunciado sort Quéhace sort (Snonbrearreglo) Ordena segiin valor; asigna némeros nuevos como claves asort(Snombrearreglo) Ordena segén valor; mantiene la misma clave rsort(Snombrearreglo) Ordena segin valor en orden inverso;, asigna nimeros nuevos como claves arsort(Snombrearreglo) Ordena segtin valor en orden inverso; mantiene la misma clave brearre ksort($nom Ordena segin clave krsort($nombrearreglo) Ordena segin clave en orden inverso usort(Snombrearreglo, Ordena segiin funcién (vea: “Usar nombrefuncion) funciones’, mas adelante en este capitulo) Como obtener valores de un arreglo Usted puede recuperar cualquier valor individual de un arreglo al acceder a 41 directamente. He aqui un ejemplo: SCAcapital = Scapitales['CA']: echo $CAcapital ; El output de estos enunciados es Sacramento usted usa un elemento que no existe en el arreglo en un enunciado, apare- cera un aviso. (Puede leer sobre los avisos en el Capitulo 6.) Por ejemplo, su- ponga que usa el siguiente enunciado: ScAcapital - Scapitales['CAx']: Si el arreglo $capi tales existe pero ningin elemento tiene la clave CAx, verd el siguiente aviso: Notice: Undefined index: CAx in d:\testserie.php on line 9 Capitulo 7: Bloques de construccién PHP para programas JQ 7 Recuerde que un aviso no causa que el script se detenga. Los enunciados después del aviso continuardn ejecuténdose. Pero, como no se ha puesto nin- gin valor a $CAcap ital, los enunciados echo siguientes reproduciran un es- pacio en blanco. Puede evitar que el aviso aparezca usando el simbolo @: @$CAcapital = $capitales{'CAx"]; Usted puede obtener varios valores de un arreglo simulténeamente usando el enunciado 1st 0 todos los valores de un arreglo usando el enunciado extract. El enunciado 1st obtiene los valores de un arreglo y los pone en variables. Los siguientes enunciados incluyen un enunciado | ist Sinfocamisa = arreglo ("grande", "azul", 12.00 sort ($infocamisa); list(Sprimervalor,$segundovalor) = $infocamisa: echo $primervalor, "
": echo $segundovalor, "
"; La primera linea crea el arreglo $infocami sa. La segunda linea ordena el arreglo. La tercera establece dos variables llamadas $primervalor y $segun dovalor y copia los dos primeros valores en $infocamisa en las dos varia- bles nuevas, como si usted hubiera usado los dos enunciados $primervalor=$infocamisal0]: $segundovalor=$infocamisa( 1]; El tercer valor en $infocam# sa no se copia en una variable porque solo hay dos variables en el enunciado 1st. El output de los enunciados echo es azul grande Observe que el resultado esté en orden alfabético, y no en el orden en el cual Jos valores fueron introducidos. Esta en orden alfabético porque el arreglo se ordené después de haberse creado. Usted puede extraer todos los valores de un arreglo con palabras como cla- ves usando extract. Cada valor se copia en una variable con un nombre que se corresponde con la clave. Por ejemplo, los siguientes enunciados obtienen toda la informacion de $infocam#sa y hacen eco de ella: extract (Sinfocamisa) ; echo “su talla es Stalla: su color es $color: su precio es $precio": El output de estos enunciados es su talla es grande; su color es azul; su precio es 12.00; 162. raret:PHP Cémo moverse por un arreglo ‘A menudo usted querra hacer algo a cada valor de un arreglo. Tal vez quiera hacer eco de cada valor, almacenar cada valor en la base de datos o sumarle seis a cada valor en el arreglo. En jerga técnica, moverse por todos y cada uno de los valores de un arreglo se conoce como iteraci6n. A veces, también se le llama atravesar, Estas son dos maneras de moverse por un arreglo: 1 Manualmente: Mueva el puntero de un valor del arreglo a otro Usar foreach: Muévase automaticamente por el arreglo, desde el inicio hasta el final, de valor en valor Moverse manualmente por un arreglo Usted puede moverse por un arreglo manualmente usando el puntero. Para hacerlo, piense en el arreglo como una lista. Imagine al puntero sehalando un. valor en la lista. El puntero permanece en el valor hasta que usted fo mueva. Después de moverlo, se queda ahi hasta que lo mueva de nuevo. Puede mo- ver el puntero mediante las siguientes instrucciones: current(Snombrearreglo) : Se refiere al valor que esta actualmente deba- jo del puntero; no mueve el puntero f > next(snombrearreglo): Mueve el puntero hasta el valor que est des- © pués del valor actual V previous( $nombrearreglo): Mueve el puntero hasta el valor que est an- © tes de la ubicaci6n actual de! puntero end($nombrearreg]o) : Mueve el puntero hasta el ditimo valor en el arreglo 1 reset ($nombrearreglo) : Mueve el puntero hasta el primer valor en el arreglo Los siguientes enunciados lo mueven manualmente por un arreglo con las ca- pitales estatales: $valor = current (Scapiteles): echo "$valor
": Svalor = next. (Scapitales); echo *$valor
"; Svalor = next ($capitales): echo "$valor
"; ‘A menos que usted haya movido el puntero anteriormente, éste se ubica en el primer elemento cuando usted empieza a moverse por el arreglo. Si piensa que el puntero del arreglo puede haber sido movido anteriormente en el script o si su output del arreglo parece empezar en alguna parte del centro, use el enunciado reset antes de empezar a moverse, como sigue: reset ($capitales); VV YEeVeuevuvVUuiUUBUUeUUuU 8b & Capitulo : Bloques de construccién PHP para programas. Alusar este método para moverse por un arreglo, usted necesita un enuncia- do de asignaci6n y un enunciado echo para cada valor en el arreglo: en este caso, para cada uno de los 50 estados de los Estados Unidos. El output es una lista de todas las capitales estatales. Este método le da fleaibilidad. Se puede mover por un arreglo de cualquier mane- ra: no s6lo de valor en valor, Puede moverse hacia atras, ir directamente al final, saltar un valor de por medio usando dos enunciados next seguidos, o cualquier método que le sea ail. Sin embargo, si quiere moverse por todo el arreglo de pri cipio a fin, de valor en valor, PHP brinda for each, el cual hace exactamentelo que necesita de forma mis eficiente. foreach se describe en la siguiente seccion. Usar foreach para moverse por un arregto foreach se mueve por el arreglo de valor en valor y ejecuta el bloque de enunciados usando cada valor en el arreglo. El formato general es foreach( $nombrearregio as $nombreciave => snombrevalor ) i ' bloque de enunciados; Complete la informacién siguiente: § nombrearreglo: El nombre del arreglo por la cual usted se esté moviendo § nombrectave: El nombre de la variable donde desea almacenar la clave | Elnombreclave es opcional. Sino escribe §nomreclave ~>, el valor se t § pondré en snombrevalor & nombrevalor: El nombre de la variable donde desea almacenar el valor Por ejemplo, el siguiente enunciado foreach se mueve por el arreglo de muestra de las capitales estatales y repite una lista: Scapitales = array ( "CA" => "Sacramento", "TX" => "Austi TOR" => "Salem* ): ksort (Scapitales); foreach ( Scapitales as $estado => $ciudad ) { } echo "Sciudad, Sestado
"; Los enunciados anteriores dan el siguiente output en la pagina web: Sacramento, CA Salem, OR Austin, TX Usted puede usar la siguiente linea en lugar de la linea foreach en los enun- ciados anteriores: 164 PoromseHe foreach ( Scapitales as $ciudad ) Cuando usa este enunciado foreach, sélo la ciudad aparecerd en el output, Entonces, usted puede usar el siguiente enunciado echo: echo “$ciudad
™; El output con estos cambios es Sacramento Salem Austin Cuando foreach empieza a moverse por un arreglo, mueve el puntero al principio del arreglo. Usted no necesita volver a establecer un arreglo antes de moverse por el con foreach Arreglos multidimensionales En las secciones anteriores de este capitulo, describo arreglos que son una so- la lista de parejas de claves y valores. Sin embargo, en algunas ocasiones, tal vez usted desee guardar valores con mas de una clave. Por ejemplo, suponga que desea almacenar los precios de estos productos juntos en una variable: camisa, 20.00 pantalones, 22.50 © manta, 25.00 4 colcha, 50.00 | limpara, 44.00 1 alfombra, 75.00 Puede almacenar estos productos en un arreglo como sigue: $preciosproductos [*camisa‘] = 20.00; spreciosproductos {‘pantalones'] = 22.50: Spreciosproductos ['manta'] = 25.00; Spreciosproductos ['calcha'} = 50.00 $preciosproductos ['lampara’] = 44.00; $preciosproductos ['alfombra’] = 75.00; ‘Su programa puede facilmente registrar esta serie cada vez que necesite sa- ber el precio de un articulo, Pero suponga que tiene 3.000 productos. Su pro- grama necesitaria rebuscar entre 3 000 productos para encontrar el que tenga camisa o alfombra como clave. —»-a-n-a-e-n-n nn | =a = =| =| =| =| 3 = =) 2 =} = Figura 7 un arreglo de series. Capitulo 7: Bloques de construccién PHP para programas 165 Observe que la lista de productos y precios incluye una gran variedad de pro- ductos, los cuales pueden clasificarse en grupos: ropa, ropa de cama y mue- bles. Si usted clasifica los productos, el programa sélo tendria que registrar una clasificacién para encontrar el precio correcto. Clasificar los productos seria mucho més eficiente. Puede clasificar los productos al poner los pre- cios en un arreglo multidimensional, como sigue: $preciosproductos ['ropa'J{'camisa = 20.00; $preciosproductos [‘ropa' ]["pantalones'] = 22.50; Spreciosproductos ‘ropa de cama‘ J['manta"] : $preciosproductos ‘ropa de cama‘}[*colcha'] = 50.00; $preciosproductos [‘muebles"]{'lampara’] = 44.00; Spreciosproductos [‘muebles']['alfombra'] = 75.00: Este tipo de arreglo es un arreglo multidimensional, ya que es como un arreglo de se- ries. La Figura 7-1 muestra la estructura de $preciosproductos como un arreglo de series. La figura muestra que preci osproductos tiene tres parejas de claves y va- lores, Las claves son ropa, ropa de cama y muebles. El valor para cada clave es un arreglo con dos parejas de claves y valores. Por ejemplo, el valor para la clave ropa es Spreciosproductos clave valor clave valor ropa camisa 20.00, pantalones 2250, ropade manta 2500 cama colcha 50.00 muebles lampare. 44.00 alfombra 75.00 $preciosproductos es una arreglo bidimensional. PHP también puede en- tender series multidimensionales de cuatro, cinco, seis o més niveles de pro- fundidad. Sin embargo, a mi me empieza a doler la cabeza cuando trato de comprender un arreglo con mas de tres niveles de profundidad. La posil dad de confusién aumenta cuando el niimero de dimensiones aumenta. Usted puede obtener los valores de un arreglo multidimensional usando los mismos procedimientos que se utilizan con un arreglo unidimensional. Por ejemplo, puede tener acceso a un valor directamente con esta enunciado: Spreciocamisa - $preciosproductos{*ropa' ]['camisa‘]: ‘También puede repetir el valor: echo $precfosproductost*ropa’ If" camisa']; — Sin embargo, si usted combina el valor entre comillas dobles, debe usar laves ia el nombre de la variable espacio, como sigue: para encerrar el nombre de la variable. E1$ que ini debe estar inmediatamente después de (, sin ningi 166 reseneene ! una camisa es \${Spreciospraductos[' ropa" JL" camisa")|* echo "EI precio Observe la diagonal inversa (\) frente al signo de délar (8). La diagonal inver- e sa le dice a PHP que $ es un signo de dolares literal y no el inicio del nombre de una variable. El output es E1 precio de una camisa es $20 Usted puede moverse por un arreglo multidimensional usando enunciados foreach (descritos en la secci6n anterior). Necesita un enunciado foreach para cada serie. Un enunciado foreach esta dentro de otro enunciado fo- reach, Poner enunciados dentro de otros enunciados se llama anidar. i Como un arreglo bidimensional, tal como Spreciosproductos, contiene dos series, hacen falta dos enunciados foreach para moverse por ella. Los enun- cciados siguientes toman los valores del arreglo multidimensional y las pre- sentan en una tabla en HTML: echo "" foreach( $preciosproductos as Scategoria ) A t foreach( Scategoria as $producto => $precio ) i $f_price = sprintf("%01.2f", Sprecio); echo “": ) 1 echo "
$producto:\$$F_price
"; ‘igura 7-2 muestra la pagina web producida por estos enunciados en PHP. Figura 7-2: Salida en la pagina web para el arregio rmultidimen- sional. ow ‘tse 010 foe TWewgeqr@ggpgcoagna Capitulo 7: Bloques de construccién PHP para programas Asi es como el programa interpreta estos enunciados 1, Da como output la etiqueta table. 2, Entresaca la primera pareja de clave y valor en el arreglo $preciosproduc tos yalmacena el valor en la veriable $categor ia. El valor es un arreglo. 3. Extrae la primera pareja de clave y valor en el arreglo $categoria. AF macena la clave en $productoy almacena el valor en $precio. 4, Da el formato correcto al valor en $precio para dinero, 5. Hace echo de una fila en la tabla para el producto y su precio. 6, Vaa la siguiente pareja de clave y valor en el arreglo $categor ia 7. Formatea el precio y repite la siguiente fila de la tabla para el producto y su precio. 8, Como no hay mAs parejas de clave y valor en $categoria, el enunciado foreach interno termina. 9. Va ala siguiente pareja de clave y valor en el enunciado foreach exter- no. Pone el siguiente valor en $categor ia, el cual es un arreglo. 10. Repite el procedimiento en los Pasos 2 — 9 hasta llegar a la altima pare- ja de clave y valor en la diltima serie de $categor ia. Termina el enuncia- do foreach interno. El enunciado foreach externo termina. 11, Da como output la etiqueta /table para terminar la tabla. En otras palabras, el enunciado foreach externo empieza con la primera pareja de clave y valor en el arreglo. La clave es ropa, y el valor de esta pareja es un arreglo que se pone en la variable Scat egor a. El enunciado foreach interno luego se mueve por el arreglo en $categor ia. Cuando llega ala diltima pareja de clavey valor en §categor ia, acaba. El programa regresa entonces al ciclo exter no, el cual continga con la segunda pareja de clave y valor... y asi sucesivamente hasta que el enunciado foreach externo legue al final del arreglo. Enunciados condicionales utiles Unenunciado condicional ejecuta un bloque de enunciados solo cuando se cum- plen ciertas condiciones. Estos son dos tipos de enunciados condicionales tttiles: § enunciado if: Establece una condici6n y la prueba. Si la condicién es verdadera, se ejecuta el bloque de enunciados. + enunciado switch: Establece una lista de condiciones alternativas. So- mete a prueba la condicién para determinar si es verdadera y ejecuta el bloque de enunciados apropiado. Describo estos enunciados en mas detalle en las dos siguientes secciones. 168 Panem:pap Usar Un enunciado if pregunta si ciertas condiciones existen. Un bloque de enun- ciados se ejecutaré dependiendo de cuales condiciones se cumplan. El forma: to general de un enunciado condicional if es if ( condicton { } elseif fl ) else { ) bloque de enunciados bloque de enunciados blogue de enunciados Elenunciado jf consta de tres secciones sonnet SORIA: AN ORES TOI vels Esta secci6n es obligatoria. Prueba la condicié elseif: Esta seccién es opcional. Prueba una condicién. Usted puede usar mas de una secci6n e| seif silo desea. seccién no prueba una con ciados. Si el programa ha entrado a esta seccion, significa que la seccion ify todas las secciones e] se1f no son verdaderas. enunciados if ) ( condicion ... ) « Sila condicién es verdadera: El bloque de enunciados se ejecuta. Una vez que los enunciados se hayan ejecutado, el programa conti- iia con los siguientes enunciados, después del enun cional; si el enunciado condicional contiene secciones e1 s e1se, el programa las pasa por alto. * Sila condicién no es verdadera: El bloque de enunciados no se ejecuta, El programa pasa a la siguiente instrucci6n, la cual puede ser una instruccion eseif, una else o la siguiente instruccién después del enunciado condicional if « Si la condici6n es verdadera: E! bloque de enunciados se ejecuta. Una vez ejecutado el bloque de enunciados, el programa continiia con el siguiente enunciado después del enunciado condicional; st el enunciado if contiene secciones ¢1 seif adicionales o una sec- cin ese, el programa las pasa por alto. « Sila condicion no es verdadera: FI bloque de enunciados no se ejecuta. El programa pasa a la siguiente instrucci6n, la cual puede ser elseif, else ola siguiente instruccién después del enun: do condicional if. e: Esta seccidn es opcional. Sélo se permite una secci6n else. Esta ion; en cambio, ejecuta el bloque de enun- ee | EE —— ________ Capitulo 7: Bloques de construccién PHP para programas 1 GQ Cada secci6n del enunciado condicional if prueba una condici6n que consis- te en una o mas comparaciones. Una comparacién hace una pregunta que puede ser falsa o verdadera, Algunas condiciones son gan: $a < $b $c In "Hello" La primera comparacién pregunta si $2 es igual a 1; la segunda pregunta si $2 es mas pequefia que $5; la tercera comparaci6n pregunta si $c noes igual a"He 110". Usted puede usar dos 0 mas comparaciones en una condici6n conectando- lascon and, or o xor.Comento en detalle como comparar valores y usar mas de una comparacién en el Capitulo 6. El siguiente ejemplo usa las tres secciones del enunciado condicional if. Suponga que usted tiene versiones en alemén, fran cés, italiano e inglés del catélogo de sus productos. Desea que su programa muestre la version correcta del idioma con base en dénde vive un cliente. Los ‘enunciados siguientes fijan una variable a la version correcta del catalogo (de- pendiendo del pais donde vive el cliente) y establecen un mensaje en el idioma correcto. Entonces, usted podra mostrar un mensaje en el idioma apropiado. if (Spais == “Alemania* ) ( $version = “aleman"; Smensaje ~ " Sie sehen unseren Katalog auf Deutsch"; ) elseif (Spais { "Francia" ) $version = “frances” Smensaje = * Vous verrez notre catalogue en francais"; ) elseif (Spais == "Italia" ) { $version = "italiano"; $mensaje = " Vedrete i1 nostro catalogo in Italiano"; ) else ( $version = “ingles": $mensaje = "You will see our catalog in English"; } echo *$mensaje
"; Elenunciado condicional if procede como 1. Compara la variable $pais con "Alemania’. Si son iguales, $version se establece en “aleman", $mensae se fija en aleman y el programa salta hasta el enunciado echo. Si $pais noes iguala Alemania, $versiony $mensaje no se establecen, y el programa pasa a la seccion e1 seif 2. Compara la variable $pais con "Francia". $i son iguales, $version y $mensaje se establecen, y el programa pasa al enunciado echo. Si $pais no es igual a Francia, version y $mensaje nose fijan, yel programa pa- saala segunda seccién e1 sei f ——————————=____ EE ——————— 170 Pare: PHP 3, Compara la variable Spais con "Italia’ Sison iguales, $yers1¢ yel programa pasa al enunciado echo. Si $pais no es igual altalin "ital ian Se fijaen $version y $nensajenose establecen, y el programa pasa a la seccion else, 4. $version seestablece en inglés, y Smensaje grama continda con el enunciado echo. Observe que sdlo se hace echo del mensaje en este ejemplo. informacion titil que se Ia variable $version se almacena porque versi6n e puede usar mas adelante en el programa. £30 +f contiene un solo enunciado, las Haves 0 if (Spais *= "Francia") tl } gversion = “frances”: Podria escribirla como sigue: "Francia" ) frances if ($pais Sversion se fija en inglés. El pro- n embargo, Cuando el bloque a ejecutarse por cualquier secci6n del enunciado condicional son necesarias, Veamos: si el ejem- plo anterior hubiese tenido un Gnico enunciado en los bloques, como sigue: Este atajo puede ahorrarle algo de digitacién pero, cuando se usan varios ‘enunciados if, puede ocasionar confusién. Usted puede tener un enunciado condicional if dentro de otro enunciado cor Sietonal if. Poner un enunciado dentro de otro se llama anidar. Por ejemplo, Suponga que necesita contactar a todos los clientes que viven en Chile, Pla- nea enviarles un mensaje electronico a los que tienen direccion electronica y tina carta a aquellos que no la tengan. Puede identificar los grupos de elien- tes usando las siguientes enunciados if anidados: "chile" ) if ( Spaiscliente fl if ( $direccionemail { 1 else ( $metodocontacto = "carta"; $metodocontacto = “email® ) Ise $hetodocontacto = “no se necesita": aaa | Capitulo 7: Bloques de construccién PHP para programas] 7’ 7 stos enunciados primero revisan si el cliente vive en Chile. Si el cliente vive alli, el programa busca una direcci6n electronica, Si la direcci6n electronica esta en blanco, el método de contacto se fija en carta. Sila direccién electré- nica no esta en blanco, el método de contacto es emai}. Si el cliente no vive en Chile, la secci6n e1se establece el método de contacto para indicar que el cliente no sera contactado del todo. Usar enunciados switch En la mayorfa de las situaciones, los enunciados condicionales if funcionan nejor. No obstante, a veces usted tiene una lista de condiciones y desea eje- cutar diferentes enunciados para cada una de las condiciones. Por ejemplo, suponga que su programa calcula el impuesto de ventas. Como maneja las variaciones en el impuesto de ventas en diferentes lugares? El enunciado switch fue disenado para este tipo de situaciones. El enunciado switch prueba el valor de una variable y ejecuta el bloque de enunciados para el valor que concuerda con la variable, El formato general es switch ( Snombrevariable ) ( case valor: bloque de enunciado break; case valor bloque de enunciados: break; default: bloque de enunciad break; ' El enunciado switch prueba el valor de $nonbrevariable. El programa lue- go pasa a la secci6n case para ese valor y ejecuta los enunciados hasta llegar al enunciado break o al final del enunciado switch. Si no hay una secci6n ca- se para el valor de Snombrevari able, el programa ejecuta la seccién de Fault. Usted puede usar tantas secciones case como necesite. La seccién default es opcional. Si usa una seccién default, se acostumbra ponerla al final, aunque puede colocarse en cualquier parte, Los siguientes enunciados establecen el impuesto de ventas para los diferen- tes estados de los Estados Unidos HP switch ( Sestadocliente ) { case "OR" Staseimpuestoventas = break: case "CAT: $tasaimpuestoventas break; default: Simpuestoventas ~ break: 0; ) Jinpuestoventas = Scostototalpedido * Stasaimpuestoventas: En este caso, elimpuesto de ventas para Oregon es 0, el de California es e100 por ciento,y para los demas estados es e150 por clento. El enunciado s¥1 0" ieyaelvalor de $estadoc! ientey pasaala seccion que concuertle con el var Tor Por ejemplo, si Sestadoc] iente es TX, el programa ejecuta la seccion de faulty establece $tasaimpuestoventas en.5. Después del enunciado su} ch, tlprograma computa $inpuestoventas en.5 veces el costo del pedido, Los enunciados break son esenciales en la seccfon case. Si una seccion case no ineluye un enunciado breek, el programa no deja de ejecutarse al final dela se: aa ce El programa continGa ejecutando los enunciados después de! final dela sreeion case, hasta la siguiente seccl6n case, y contintia hasta llegar al final del a mnciado switch (otal vez un enunciado break en una seccién case posterior) La tiltima secci6n case en un enunciado switch en realidad no requiere de un eaunciado break. Este puede omitirse, Sin embargo, es una buena idea in- cluirlo por razones de claridad. Usar ciclos Los ciclos, los cuales se usan con frecuencia en los programas, establecen un Dlo- que de enunciados que se repite. A veces, el ciclo se repite un nimero especitico de aoe por ejemplo, un ciclo para hacer eco de todas las capitaes estatales de los Es- tacos Unidos necesita repetirse 50 veces. Algunas veces, e ciclo se repite hasta que Vierta condicidn exista, Por ejemplo, un ciclo que despliega informacién del produc: topara todos los productos necesita repetirse hasta que haya mostrado todos los productos, sin importar cuantos productos haya. Estos son los tres tipos de ciclos: © Ciclo for basico: Establece un contador; repite un bloque de enuncia- dos hasta que el contador alcance un niimero espectlico Ciclo while: Fija una condici6n; verifica la condicién; y, si es verdade- ra, repite un bloque de enunciados, ' ‘ i ‘ % © © © © & © © I i OD ip Capitulo 7: Bloques de construccién PHP para programas] 73 § ~ Ciclo do. .while: Establece una condicién; ejecuta un bloque de enun- — _ ciados; verifica la condici6n; si la condicién es verdadera, repite el bloque *® de enunciados. Describo cada uno de estos ciclos en detalle en las secciones siguientes. Usar ciclos for Los ciclos for mas basicos se basan en un contador. Usted fija los valores in cial y final para el contador, ademas de cémo el contador se incrementa. El formato general es for (valorinicial;condicionfinal; incremento) { , bloque de enunciados: Rellene los siguientes valores: ¥ valorinicial: Un enunciado que establece una variable para que sea su contador y la fija a su valor inicial. Por ejemplo, el enunciado $i=1; es- tablece $i como la variable contador y la establece en igual a 1. Frecuen- temente, la variable contador empieza con 0 6 1. El valor inicial puede ser una combinaci6n de ntimeros (2 + 2) 0 una variable. + condicionfinal: Un enunciado que establece su valor final. Siempre y cuando este enunciado sea verdadero, el bloque de enunciados sigue re- pitiéndose. Cuando este enunciado no es verdadero, el ciclo termina. Por ejemplo, el enunciado $i<10; fija el valor final para el ciclo en 10. Cuando $i es igual a 10, el enunciado ya no es verdadero (porque $i ya no es menor que 10), y el ciclo deja de repetirse. El enunciado puede in- cluir variables, como $1"; } iS16=3 S144) 174 Parte: PHP __ £30 2 Sg Los enunciados en el bloque no necesitan tener sangria, A PHP no le importa tee ean eangrados 0 no, Sin embargo, usar sangria en los blogues le ayuda mucho a entender el programa, El output de estos enunciados es 1. iHola, Mundo! 2. iHola, Mundo! 3. Hola, Mundo! Los ciclos for son particularmente iitiles para moverse en ciclo por un arreglo. Suponga que usted tiene un arreglo de nombres de clientes y desea Gesplegarlos todos. Puede hacerlo facilmente con un ciclo: for ($i=0;$1<100; $144) echo "Snombresclientes($11
": 1 Eloutput despliega una pagina web con una lista de todos los nombres de vfentes, uno en cada linea. En este caso, usted sabe que tiene cien nombres ce alientes: pero imagine que no sabe cusntos clientes hay en esta lista. Le pregunta a PHP cuéntos valores hay en el arreglo y usar ese valor en su ciclo, for. Por ejemplo, puede usar los siguientes enunciados: for ($i=0;$i": Ciclos for avanzados La estructura de un ciclo for es bastante flexible y le permite construr ciclos para cast cualquier propasito. Un ciclo for tiene este formato general: for ( enunciados iniciales; enunciados condicionales; enunciados finales) bloque de enunciados; 1 Donde Los enunciados iniciales se ejecutan una vez al inicio del ciclo. 1 Los enunciados condicionales se prueban para cada iteracién del ciclo Capitulo 7: Bloques de construccién PHP para programas Los enunciados finales se ejecutan una ver al final del ciclo | Cada una de las secciones de enunciados se separa con un punto y coma ().Cada seccién puede ccontener tantos enunciados como sean necesarios, separadas por comas. Culquier seccién pue- | deestarvacia El siguiente ciclo tiene enunciados en las tres secciones: for (Sin0,$5=1;5t<=4;$1 +4, $]44) { St = $i + 85: echo "$t
"; El output de estos enunciados es 5 El ciclo se ejecuta en el siguiente orden: 1, Laseccién inicial, la cual contiene dos enunciados, se ejecuta; $i se establece en Oy $se es: tablece en. 2. La seccién condicional que contiene un enunciado se evalia. Es St menor que o igual a 4? Si, entonces el enunciado es verdadero. El ciclo continda ejecuténdose 3. Los enunciados en el bloque de enunciados se ejecutan. $t se convierte en igual a $i més $j, lo cual es 0+ 1, lo cual es igual a 1. Después, St se repite para dar el output 1 4, La seccién final, fa cual contiene dos enunciados, se ejecuta: Sit+ y $i++. Se le suma uno a $i para que sea igual a 1, y Ise suma a $j para que sea igual a 2 5. La seccién condicional se evaliia. Es $t menor que 0 igual a 4? Como St es igual a 1 en este punto, el enunciado es verdadero. El ciclo continda ejecuténdose. 6. Los enunciados en el bloque de enunciados se ejecutan. $tse hace igual que Si mas $j, que es 1+2, lo cual equivale a 3. Luego, $t se repite para dar el output 3. 7. La seccién final, que contiene dos enunciados, se ejecuta: Si++ y Sj++. Se suma uno a Si para que sea igual a 2, y 1 se suma a $j para que sea igual a3. 8. La seccién condicional se evaltia. Es $t menor que 0 igual a 4? Como ahora Stes igual a 3, el enunciado es verdadero. E! ciclo continda ejecuténdose. 9. Los enunciados en el bloque de enunciados se ejecutan. St se hace igual a $i més §}, lo cual es 2+3, lo cual equivale a 5. Después, St se repite para dar como output . 10. La seceién final, la cual contiene dos enunciados, se ejecuta: $i++ y $)++. Se suma uno a $ipa- ra que sea igual a 3, y 1 se suma a $j para que se igual a4. 11. La seceién condicional se evalia. 2Es $t menor que o igual a 4? Como St ahora equivale a §, el ‘enunciado no es verdadero. El ciclo no continiia ejecuténdose. El ciclo termina, y el programa continda hacia el siguiente enunciado después del final del ciclo. Se ee Ee! 175 176 Parte i: PHP Observe que el valor final es sizeof Snonbrescl ientes). Este enunciado averigua el nimero de valores en el arreglo y usa ese ntimero. De este modo, gu ciclo se repite exactamente el n~imero de veces que corresponde con el namero de valores en el arreglo. numérico es 0, ano ser que usted ro diferente, Un error comtin cuan- vez de 0. Fl primer valor en un arreglo con un ind:ce deliberadamente lo establezca en un name ido se trabaja con series es pensar que el primer namero es 1 en Usar ciclos while Un ciclo whi 1¢ continéa repitiéndose siempre y cuando ciertas condiciones sean verdaderas. El ciclo funciona como sigue: 1. Usted establece una condicion. jo de cada ciclo. 2. La condicion se prueba al ini la condici6n no es ver- 3, Sila condicion es verdadera, el ciclo se repite. dadera, el ciclo se detiene. El formato general de un ciclo while es while ( condicion ) bloque de enunciados 1 Una condici6n es cualquier expresin que pueda ser falsa 0 verdadera. Las comparaciones, tales como las que se presentan a continuaci6n, a menudo se usan como condiciones. (Para informaci6n detallada sobre cémo usar com- paraciones, consulte el Capitulo 6). $prueba <= 10 $pruebal == $prueba2 $a a= "sit y $b f= "si" Sapellido |= "Perez" Siempre y cuando la condicion sea verdadera, el ciclo se repetira. Cuando la con- Gicidn resulte falsa, el ciclo se detendra. Los siguientes enunciados configuran tun ciclo whi 1e que registra un arreglo en busca de un cliente apellidado Perez Sclientes = serie( "Huang", "Perez", “Herrera” ); Svariabledeprueba = "no"; $k = 0; while ( $variabledeprueba "si if (Sclientes[$k] == "Perez" ) i S FOF OF FU 1 Capitulo 7: Bloques de construccion PHP para programas Svariabledeprueba = "sit; echo “Perez
"; kets Estos enunciados muestran lo siguiente en una pagina web: Huang, no Perez Perez El programa ejecuta los enunciados anteriores de esta manera: 10. 1. 12. 13. Establece las variables antes de empezar el ciclo: $clientes (un arreglo con tres valores), $variabledeprueba (una variable de prueba estable- cida en "no") y $k (una variable contador establecida en 0). Empieza el ciclo probando si $variabledeprueba != "si" es verdade- ra. Como $var iabledeprueba se fij6 en "no", el enunciado es verdade- 10, de modo que el ciclo continia. . Prueba el enunciado if. 2Es $clientes[$k] *= "Perez" verdadero? En este punto, $k es 0, por lo cual el programa verifica $1 ientes(0J.Dado que $clientes[0] es "Huang", el enunciado noes verdadero. Los enun- ciados en el bloque if no se ejecutan, y el programa pasa al enunciado el se. . Ejecuta el enunciado en el bloque ese. El bloque e1 se da como output lalinea "Huang, no Perez". Esta es la primera linea del output. Suma uno a $k, que ahora es igual a 1. lo. Llega al final del c . Vaal inicio del ciclo. Prueba la condici6n nuevamente. ;Es $variabledeprueba != "si" verdadera? Como $variabledeprueba no ha cambiado y todavia esta establecida en "no", es verdadera, de modo que el ciclo continiia. Prueba la condicién if. {Es $clientes[$k] == “Perez” verdadera? Eneste punto, $k es 1, por lo cual el programa revisa $1 ientes(1] Como $clientesf1] es "Perez", el enunciado es verdadero. Enton- ces, el ciclo entra al bloque if. Ejecuta los enunciados en el bloque if. Establece $variabledeprueba en"si", Da como output "Perez". Esta es la segunda linea del output Suma uno a $k, que ahora se convierte en 2. Llega al final del ciclo, Va al inicio del ciclo. 177 178 Parte: PHP __ 14, Prueba la condicién de nuevo. Es svariabledepruebs thera? Como svar iabledeprueba ha cambiado y ahora es no es verdadera. BI ciclo se detiene. en"si que sea infinito; 0 sea, tn ciclo que conti Es posible escribir un ciclo whi srsele, escribir un cl- nae para siempre. Usted puede, facilmente y sin proponé rig en el cual la condicion siempre sea verdadera, Si la condicién nunca se coor falga, el ciclo nunca acaba. Para una descripei6n de 10s clos infinitos, Vonsulte la seccién "Ciclos infinitos”, mas adelante en este capitulo. Usar ciclos do..while recidos a los ciclos while. Un ciclo do. .W Los ciclos do. .wh Te son muy pal sean ve Hoe vevntinda repitiendose siempre y cuando ciertas condicione Yaderas, Usted establece una condicion. La condlicion se prueba al final de coat cielo, Sila condicion es verdadera, el ciclo se repite. © ando la condi: cin no sea verdadera, el ciclo se detiene. :1 formato general para un ciclo do. .whi Te es do bloque de enunciados ) while ( condicion )+ Los siguientes enunciados establecen un ciclo que busca al cliente apellidado perez, Este programa hace lo mismo que el programa en la secci6n anterior, elcual usa un ciclo while: Herrera’ J+ "Perez Sclientes = array( “Huang $variabledeprueba = "no": sk = 0: do "Perez" ) if (Sclientes($k} $variabledeprueba ~ "Si echo *Perez
": } else { echo "Sclientes[$k], no Perez else ( echo "Sclientes[$k], no Perez
"; I Skt 1 Este es el programa con un ligero cambio: Sclientes = array ( "Huang", "Perez", “Herrera” ): $variabledeprueba = “no” while ( $variabledeprueba ! t Sk = 0; if (Sclientes($k] "Perez" ) Svariabledeprueba ~ "si": echo *Perez
" } else ( echo “$clientes[$k], no Perez
"; ) Skt: J El pequefio cambio es mover el enunciado $k ~ 0; desde afuera del c cia adentro del ciclo. Esta pequeia modificacién lo converte en un ciclo sin fin. El output de este programa cambiado es Huang, no Perez Huang, no Perez Huang, no Perez Huang, no Perez Esto se repetira para siempre. Cada vez que el ciclo corra, reconfigura $k a0. Luego obtiene $clientes[0]y hace echo de él. Al final del ciclo, $k se incre: menta a 1. No obstante, cuando el ciclo empieza de nuevo, $k se restablece nue- vamente en 0, En consecuencia, s6lo el primer valor en el arreglo, Huang, es leido, El ciclo nunca llega al apellido Perez, y Svariabledeprueba nunca se establece en "si". El ciclo es interminable. No se avergiience si escribe un ciclo infinito, Le garantizo que el mejor de los ex pertos en programaci6n del mundo ha escrito muchos ciclos infinitos. No es na- da serio. Si usted esta probando un programa y obtiene output en su pagina web que se repite infinitamente, se detendra por si solo en pocos instantes. El tiempo predeterminado es de 30 segundos, pero el periodo de pausa puede haber sido Capitulo 7: Bloques de construccién PHP para programas] & 1 cambiado por el administrador PHP. Usted también puede hacer clic en el boton Stop en su buscador para detener el despliegue en su buscador. Después, aver por quéel ciclo se esta repitiendo indefinidamente y arréglelo. Un error comin que puede originar un ciclo infinito es usar un tinico signo de igual (=) cuando deberia haber usado dos signos de igual (==). Un signo de igual, {inico almacena un valor en una variable; el signo de igual doble prueba si dos valores son iguales. Si escribe la siguiente con-licién con un solo signo de igual: while ($variabledeprueba = "si*) siempre sera verdadera. La condicion simplemente fija $variabledeprueba igual a "si". Esto no es una pregunta que pueda ser falsa. Probablemente, lo que usted quiso escribir es esto: si") while (Svariabledeprueba Esta es una pregunta que quiere saber si $variabledeprueba es igual asi", ala cual puede responderse como falso o verdadero, Usted puede salvaguardar sus programas de este error en particular cambiando la condiciéna "si" == $variabledeprueba. Es menos logico de leer, pero protege contra el problema del signo de igual Gnico. Si usa un solo signo de igual en lugar deuno doble en esta condicién, obtendré un error, yel programa no correrd Otro error comin es dejar por fuera el enunciado que incrementa el contador. Por ejemplo, en el programa ilustrado anteriormente en esta seccién, si usted deja por fuera el enunciado $k++;, $k siempre sera 0, y el resultado es un ciclo infinito. Escapar de un ciclo Avveces usted desea que su programa escape de un ciclo. PHP proporciona dos enunciados para este propésito: § break: Sale completamente de un ciclo y contintia con los enunciados del programa después del ciclo. + continue: Saltaal final del ciclo donde la condicién se prueba. Sila condi- cidn resulta positiva, el programa contintia desde el principio del ciclo. break y continue generalmente se usan en un enunciado condicional break, en particular, se usa mas a menudo en enunciados switch, como comenté anteriormente en el capitulo. Los siguientes dos conjuntos de enunciados muestran la diferencia entre continue y break. Los primeros enunciados usan el enunciado break. 182 Parte: PHP __ Scontador = 0; while ( Scontador <5 ) { Scontador++: IF ( $contador == 3) ( echo "break
” break: : gcho "Final del ciclo while: contador=$contador
"s } echo “Despues del ciclo break

"; Los enunciados siguientes usan el enunciado continue: Scontador = 0; while ( Scantador <5 ) ( Scontador++ If ( $contador ( 3) echo “continue
*: continue; dcho “Final del ciclo while: contador=Scontadorcbr>"; echo “Despues del ciclo continue
"; Estos enunciados construyen dos ciclos iguales, excepto que el primero usa break. y el segundo usa continue. El output de estos primeros enunclados que usan el enunciado break aparece en su explorador como sigue: Final del ciclo while: contador=1 Final del ciclo while: contador=2 break Despues del ciclo break Bi output del segundo grupo de enunciados con el enunciado continue es el siguient Final del ciclo while: contador Final del ciclo while: contador=2 continue Final del ciclo while: contador-4 Final del ciclo while: contador=5 Despues del ciclo continue El primer ciclo termina con el enunciado break, Elciclo se detiene y pasa ine mediatamente al enunciado después del ciclo. El segundo ciclo no termina Con el enunciado cont inue. Simplemente impide la tercera repeticion del c Cloy salta de regreso al principio del ciclo. Lego termina el ciclo, con la Cua: tay quinta repeticiones, antes de continuar el enunciado después del ciclo SEETEUUUTUTEY Capitulo 7: Bloques de construccién PHP para programas 18} Un uso para los enunciados break es asegurarse contra los ciclos infinitos. Los si- guientes enunciados dentro de un ciclo pueden detenerlo en un punto razonable: Spruebadint initott: if (Sprueba4infinito > 100 ) { break; Si usted esté seguro de que su ciclo nunca deberia repetirse mas de 100 ve- ces, estos enunciados impedirén que el ciclo se haga infinito, Use cualquier némero que le parezca razonable para el ciclo que esta construyendo. Usar funciones we Las aplicaciones a menudo realizan la misma tarea en diferentes puntos en el programa o en diferentes programas, Por ejemplo, su aplicacion podria mos- trar el logotipo de la compaiiia en varias paginas web distintas 0 en difere tes partes del programa. Suponga que usa los siguientes enunciados para desplegar el logotipo de la compaiiia: echo ‘


", "\n": echo ‘
"."\n™ echo "

","\n"; Puede crear una funcién que contenga los enunciados anteriores y darle el hombre de mostrar_logot ipo, Entonces, cada vez que el programa necesite mostrar el logotipo, usted s6lo debe lamar a la funcién que contiene los enunciados con un simple Hamado de fun: n, como sigue: mostrar_logotipo(); Observe los paréntesis después del nombre de la funcién. Estos son obligato- rios en un llamado de funcién, pues le dicen a PHP que esta es una funcién, Usar una funcién ofrece varias ventajas: 1 Menos digitaci6n: Basta con digitar los enunciados una sola vez: en la funci6n. Para siempre después de eso, usted simplemente usa el llamado de funcién y nunca tendré que digitar los enunciados de nuevo. Lectura mas facil: La linea most rar_logot ipo() es mucho mas fécil de ' entender para una persona con un solo vistazo. | Menos errores: Después de haber escrito su funcién y haberle arreglado é todos sus problemas, funcionara correctamente cada vez que la use. 184 Pare: PHP | * Mas facil de cambiar: Si decide cambiar cémo debe realizarse la tarea, s6lo hace falta cambiarla en un lugar. Basta con cambiar la funci6n; no hay necesidad de buscar en cien lugares diferentes de su programa don- de llevé a cabo la tarea y cambiar el cddigo cien veces. Por ejemplo, su- ponga que cambié el nombre del archivo de grificos donde guerda el logotipo de la compaiiia, Usted cambia el nombre del archivo en un I gar, la funci6n, y operara correctamente en todos los demas lugares Puede crear una funcién poniendo el cédigo en un bloque de funciones. El formato general es function nombredelafuncion() i bloque de enunciados; return; ’ Por ejemplo, usted crea la funcién para mostrar el logotipo de la compania con los siguientes enunciados: function mostrar_logotipo() { echo "
". "\n echo ‘
", "\nt echo "

","\n"; return; 50" 1 Elenunciado return detiene la funcién y regresa al programa principal. El ‘enunciado return al final de la funci6n no es obligatorio, pero hace que la funci6n sea més facil de entender. El enunciado return a menudo se usa para un final condicional de una funcién. Imagine que su funcién despliega un catélogo de equipo electrénico, Podria usar el siguiente enunciado al inicio de la funci6n: if ( $edad < 13 ) return: Sila edad del cliente es menos de 13 aftos, la funci6n se detiene y el catdlogo de equipo electrénico no se mostrara. Usted puede poner funciones en cualquier parte del programa, pero la practi- ‘ca comin es poner todas las funciones juntas al inicio o al final del archivo del programa. Las funciones que planea usar en mas de un programa pueden estar en un archivo separado. Cada programa tiene acceso a las funciones del archivo externo. Para més informacién sobre la organizacién de aplicaciones en archivos y como tener acceso a archivos separados, revise el Capitulo 10. | Capitulo 7: Bloques de construccién PHP para programas 1&5 Observe que la funcién del ejemplo es bastante simple. No usa variables, y no comparte ninguna informacién con el programa principal. Sélo realiza una tarea independiente cuando se la llama. Usted puede usar variables en fun- ciones y pasar informacién de una funcién al programa principal, siempre y cuando conozca las reglas y limitaciones. Las secciones restantes en este ca- pitulo le explican c6mo usar variables y pasar valores. Usar variables en funciones Usted puede crear y usar variables que sean locales a la funcién. O sea, puede crear y usar una variable dentro de su funci6n. Sin embargo, la variable no es- tara disponible fuera de la funci6n; no esta disponible para el programa pr pal. Usted puede lograr que la variable sea disponible usando un enunciado especial llamado g1oba1 , el cual hace que una variable sea disponible en cual quier lugar del programa. Por ejemplo, la funci6n siguiente crea una variable: function formato_nombre () ( Sprimer_nombre = "Goliat"; Sapellido = "Pere $nombre = $apellido.", ".Sprimer_nombre: 1 Formato_nombre(); echo "$nombre” Estos enunciados no producen ningan output. En el enunciado echo, $nombre no contiene ningin valor. La variable Snombre se cred dentro de la funcion, de modo que no existe fuera de ella, Puede crear una variable dentro de una funcién que exista fuera de la funcion usando el enunciado g1 oba1. Los enunciados siguientes contienen la misma funci6n, con un enunciado g]oba1 afiadido: function formato_nombre() ( Sprimer_nombre = "Goliat": $apellido - "Perez"; global $nombre; Snonbre = $apellido.", ".$primer_nombre; } Formato_nombre(): echo "Snombre": El programa ahora repite esto: Perez, Goliat Elenunciado g1oba1 permite que la variable esté disponible en cualquier ubicacion del programa, Usted debe crear la variable global antes de poder 186 rare: PHP usarla. $i el enunciado g1 oba1 sigue al enunciado de asignacion Sniombre, el programa no produce ningiin output Las mismas reglas aplican cuando usted est usando una variable que fue creada en el programa principal. No puede usar una variable que haya sido creada fuera de una funci6n en la funci6n, a menos que la variable sea global, como se muestra en los enunciados siguientes: $primer_nombre = "Goliat"; Sapellido = "Perez"; function formato_nombre() global $primer_nombre, $apell ido; Snombre = $apellido.", ".Sprimer_nombre; echo "$nombre”; 1 formato_nombre( Sinousa el enunciado 9] oba!, $apellido y $primer_nombre dentro dela funcién son variables diferentes, creadas cuando usted les da un nombre. No tie- nen valores. El programa no producirfa ningan output sin el enunciado gba! Como pasar valores entre una funcion y el programa principal Usted puede pasar valores hacia dentro de la funcién y recibir valores de la funci6n. Por ejemplo, imagine que escribe una funcién para sumar el impues- to de ventas correcto a un pedido. La funcién tendria que saber el costo del pedido y en cual estado vive el cliente. La funcién necesitarfa enviar de vuel- ta el monto del impuesto de ventas. Pasar valores a una funcion Puede pasar valores a una funcién poniendo los valores entre paréntesis cuando llama a la funci6n, como si nonbredefuncion(valor,valor,...)i Por supuesto, las variables no pueden simplemente aparecer, La funcién de- be estar esperandolas. El enunciado function incluye los nombres de las variables para los valores que esta esperando, como sigue: function nombredefuncion( $nombrevariablel ,$nombrevar table { ‘enunciados return; Sei S> i) ©) ©) © &) © © s) Capitulo 7: Bloques de construccién PHP para programas] & 7 Por ejemplo, la siguiente function calcula el impuesto de ventas: function calcular_impuestodeventas($cantidad, $estadocl iente) { switch ( Sestadocliente ) ( case "OR" : Stasaimpuestoventas break case "CA" : $tasaimpuestoventas = 1.0; break default: Stasaimpuestoventas =. break; ) Stasaimpuestoventas = $cantidad * Stasaimpuestoventas; echo "$impuestoventas
"; } Sprecio = 2000.00; Sestadocliente = "CAT calcular_impuestodeventas( $precio, sestadocliente); La primera linea muestra que la funcién espera dos valores, como sigue function calcular_impuestodeventas(Scanti dad, $estadocl iente) La Giltima linea es el llamado de funcién, el cual pasa dos valores a la funci6n calcular_impuestodeventas, como los espera. El monto del pedido y el es- tado donde vive el cliente se pasan. El output de este programa es 2000 por- que la tasa del impuesto de ventas para California es del 100 por ciento. Usted puede pasar tantos valores como necesite. Los valores pueden ser va- riables o valores, incluyendo valores que se calculen, Los siguientes llamados de funcién son validos: calcular_impuestodeventas (2000, *CA"); calcular_impuestodeventas (2*1000,"*): calcular_impuestodeventas (2000,"C*."A"); Los valores se pueden pasar en un arreglo, La funcién recibe la variable como un arreglo. Por ejemplo, los siguientes enunciados pasan un arreglo: $seriedenumeros = array( 100, 200); sumarnumeros ($seriedenumeros); La funcién recibe todo el arreglo. Por ejemplo, suponga que la funcién empie- za con el siguiente enunciado: function sumarnumeros ($numeros) 188 Parte itt: PHP snc‘ on puede incluir enunciados tales como Lavariable Snunieros es un arregio, La fu return $numeros[01 + $numerost1]: Es decir, el primer valor en lalis- lista que la funcion espera ente. Si sus valores no estan Los valores pasados se pasan segiin post ta que usted pasa se usa como el primer valor 6h la el segundo se usa para el segundo, y ast suces Va en el mismo orden, la funcion usard el valor ‘equivocado al realizar la tarea. Por ejemplo, en caicular_inpuest deventas, podriallamaraca\cular im cerekodeventas para que pase valores en el orden equivocado, como sigue: te, $valordelpedido)s calcular_impuestodeventas(sestadocl ten + del pedido, el cual establece en 0 pordue ero en $valorde! pe s. Eloutput seria 0. La funci6n usa el estado como el valor ti valor pasado es una cadena, Establece el estado al nim creas al eual no concordaria con ninguna de sus categor! stablece el valor faltante en una (0.20 para un nimero. Si envia de- jonales. via suficientes valores, la funci6n e: na variable en cadena, funcién ignora los valores adi Sino em cadena vacia para masiados valores, la fe valores a una funci6n, podria recibir un Si pasa el niimero equivocado di igue, dependiendo del nivel de mensajes de mensaje de advertencia, como si error para el cual PHP esté configurado. vaentage Missing argunent 2 for compute.satestax() Im /LeSt7 FHP on Vine 5 Para mas detalles sobre los mensajes de advertencia, consulte el Capitulo 6. Puede fijar valores predeterminados para usarse cuando un valor no se pase. rae lezes predeterminados se establecen cuando usted escribe la funeién asignando un valor predefinido para el valor © Tos valores que esté esperar do, como sigu function sumar_2_numeros(Snuml=1 , $num $total = $numl + $num2; return $totals 1 Si uno de los valores no se pasa (0 sino se pasa ninguno), la funcién usa los si Jores predefinidos asignados, Pero, si se pasa un valor éste se usa en lugar Nh valor predeterminado, Por ejemplo, usted podria usar uno de los siguien- tes llamados: sumar_2_numeros (2,2)5 sumar_2_numeros (2) + sumar_2_numeros(); Los resultados son, en orden consecutivo: YVUVUUBDEUUEDEOUE DD Capitulo 7: Bloques de construccién PHP para programas J] &Y $total = 4 Stotal = 3 Stotal = 2 Obtener un valor de una funcion Cuando usted llama a una funcién, puede pasar valores como se describié ante- riormente. La funci6n también puede devolver un valor al programa que la llam6. Use el enunciado return para regresar un valor al programa que ha emitido el lla- ‘mado. El programa puede almacenar el valor en una variable o usarlo directamen- te; por ejemplo, puede usarlo en un enunciado condicional. Elenunciado return también devuelve el control al programa principal; es decir, detiene la funcién. El formato general del enunciado return es return valor; (0 de la secci6n anterior, yo hice eco ientes enunciados: Por ejemplo, en el programa de imput del impuesto de ventas usando los Simpuestodeventas = $monto * $tasaimpuestodeventas: echo “$impuestodeventas
"; Podria devolver el impuesto de ventas al programa principal, en lugar de ha- cer eco de él, usando el siguiente enunciado: Simpuestodeventas = smonto * $tasaimpuestodeventas; return $impuestodeventas; De hecho, yo podria usar un atajo y enviarlo de regreso al programa principal con un enunciado: return $monto * $tasaimpuestodeventas: Elenunciado return envia el impuestodeventas de regreso al programa principal y termina la funcién. El programa principal puede usar el valor en cualquiera de las formas usuales. Los enunciados siguientes usan el llamado de funci6n de manera valida: Simpuestodeventas ~ calcular_impuestodeventas( Sprecio, Sestadocl iente); $costototal = $precio + calcular_impuestadeventas( sprecio, festadocliente) ; if ( calcular_impuestodeventas(Sprecio, $estadocliente) > 100000.00 ) $echo "Gracias, muchas, muchas, muchas gracias
"; 190 Parte m:PHP ———________— foreach($pedidocliente as -$monto) ( stotal = $onto + calcular_impuestodeventas(Smonto, $estadocl vente); echo "Su total es Stotal
": 1 Un enunciado return puede devolver solo un valor. Sin embargo, el valor dewuelto puede ser un arreglo, de modo que usted en realidad puede devol ver muchos valores desde una funci6n. Puede usar enunciados return en un enunciado condicional para devolver titerentes valores para diferentes condiciones. Por ejemplo, la siguiente fun- cin devuelve una de dos cadenas diferentes: function comparar_valores($valorl,$valor2) ( if(Svalorl < $valor2) { return “menor que"; ) else ( return "no menor que’ ’ ) ‘Aunque la funcién contiene dos enunciados return, sélo una va a ejecutarse, dependiendo de los valores en $valorl y $valor2 Usar funciones incorporadas Las muchas funciones integradas de PHP son una de las razones por las cua- les PHP es tan poderoso y stil para las paginas web. Las funciones incluidas ten PHP son funciones normales. No son muy diferentes de las que usted mis- mo puede crear. Pero PHP ya ha hecho el trabajo por usted. Deseribo algunas de las funciones incorporadas en este capitulo y capitulos anteriores, Por ejemplo, vea el Capitulo 6 para més informacion sobre las fu Giones unset y number_format. Algunas funciones muy dtiles para interac- tuar con su base de datos MySQL se comentan en el Capitulo 8. Otras funciones atiles se incluyen en la Parte V de este libro. Y, por supuesto, todas las funciones se enumeran y describen en la documentacion PHP, en el sitio web de PHP: www. php.net /docs. php. BSEEUVUVUEUVUUUDUEUEUUSD Capitulo 8 Datos entran, datos salen En este capitulo Conectarse a la base de datos Obtener informacién de la base de datos Usar formularios HTML con PHP Extraer datos de un formulario HTML Procesar la informacion que los usuarios digitan en formularios HTML Almacenar datos en la base de datos Usar funciones para insertar y extraer datos de la base de datos Pw. MySQL funcionan muy bien juntos. Esta sociedad dinémica hace que PHP y MySQL sean tan atractivos para el desarrollo de aplicaciones con bases de datos para la Web. Ya sea que usted tenga una base de datos Ile- na de informacién que quiere poner a la disposicin de los usuarios (como un catélogo de productos) o una base de datos que est esperando para que los usuarios la rellenen (por ejemplo, una base de datos de membresia), PHP. y MySQL trabajan juntos para implementar su aplicaci6n Una de las caracteristicas mas fuertes de PHP es su habilidad para interac- tuar con bases de datos. PHP provee funciones que hacen de la comunica- cién con MySQL algo extremadamente simple. Se usan las funciones de PHP para enviar consultas SQL. a la base de datos. No hace falta conocer los deta- Iles de la comunicaci6n con MySQL; PHP se encarga de eso. Usted nada mas necesita saber sobre las consultas SQL. y cémo usar las funciones de PHP, En capttulos anteriores de este libro, describo las herramientas que se usan para construir una aplicacién con base de datos para la Web. Usted averigua cémo construir consultas SQL en el Capitulo 4 y como construir y usar los bloques de construcci6n del lenguaje PHP en los Capitulos 6 y 7. En este capt- tulo, descubriré como usar estas herramientas para las tareas especificas, que una aplicacién con una base de datos para la Web debe realizar. 192 Parte: PHP a Funciones de PHP/MySOL Las funciones incorporadas de PHP se usan para interactuar con MySQL. Es- tas funciones se conectan al servidor MySQL, seleccionan la base de datos correcta, envian consultas SQL. y llevan a cabo otras comunicaciones con la base de datos MySQL. Usted no necesita conocer los detalles sobre la inte- racci6n con la base de datos, ya que PHP se encarga de todos los detalles. Us. ted s6lo debe saber cémo usar las funciones. En este momento, PHP (empezando por la versién 5) cuenta con dos conjuntos de funciones para interactuar con MySQL. Un conjunto de funciones se usa para inte- ractuar con la versi6n 4.0 de MySQL, 0 versiones anteriores. El otro conjunto de funciones se usa para interactuar con la versi6n 4.1 de MySQL y las posteriores. Alo largo de este libro, mis ejemplos y programas muestran las funciones que trabajan con MySQL versién 4.0. Al momento de escribir este libro, la versidn actual estable de MySQL es la versi6n 4.0. Ademis, las funciones de PHP que se usan con MySQL versién 4.1 se describen en la documentacién del sitio web de PHP como experimentales, con una advertencia: Use esta ex- tensin bajo su propio riesgo. Por el momento, la version 4.1 de MySQL sélo esté disponible como software alpha, definido en el manual de MySQL como sigue: Esta publicacién contiene una gran seccién de codigo nuevo que no ha si- do probabo at 100%. Por lo tanto, estoy escribiendo este libro con base en el uso de MySQL 4.0 y de las funciones de PHP que trabajan con esta vers Las funciones de PHP que se usan con MySQL 4.0 tienen el siguiente formato general mysql_funcion(valor.valor.. La segunda parte del nombre de la funcién es especitica a la funcién, general- mente una palabra que describe lo que hace la funcién, Ademés, la funcién requiere que se pasen uno o mas valores, y que se especifiquen cosas tales como la conexién con la base de datos, la ubicacién de los datos, ete. A conti- nuacién, dos de las funciones que se discuten en este capitulo: mysql_connect ($conectar) : mysqi_query(*enunciado SQL". $conectar); Para cuando usted lea este libro, es probable que MySQL 4.1 sea la version actual estable de MySQL. Si es asi, puede usar MySQL 4.1 y las funciones que trabajan con dicha versién. Al momento de escribir este libro, las funciones discutidas en él son las mismas para MySQL 4.0 y MySQL 4.1 excepto por un cambio en el nombre. Los nombres de las funciones que se usan con MySQL. 4.1 empiezan con mysql i_ en vez de mysq1_. Asi, las funciones mostradas arriba tendrfan los siguientes nombres si se usan con MySQL 4.1 mysql i_connect ($conectar); mysql i_query(Sconectar, "enunciado SQL"); wowelUcvwreCUcrmCUcrelClUh Te ereuCUcrmCUc Trl TlhUCUOWmhUCUC ]WrmhU—CTWThCUCTHTmhMC—C WLC SSC DCM | Capitulo &: Datos entran, datossalen 1 3 ionalidad y la sintaxis de las funciones son iguales o muy similares. Por ejemplo, observe la diferencia entre las dos siguientes funciones. mysql_query($sql,$conectar); mysqli_query($conectar, $sql): Observe que el orden de los elementos pasados es distinto. Esto es asi para varias funciones. Esta discusi6n se refiere a las funciones mysqli tal y como son ahora. Las fu ciones mysqli pueden cambiar, por supuesto. Si una de las funciones nlysqli no parece funcionar como debiera, revise el manual para hallar cualquier di- ferencia de uso posible. Lai anadida al nombre es por improved (mejorado); este conjunto de funcio- nes MySQL es proporcionado por la extensi6n mejorada de MySQL. En este momento, no se incluye soporte para mysqli en PHP en forma predetermina- da, Debe activarse cuando se instala PHP. Sin embargo, para cuando MySQL 4.1 sea la version estable, es probable que my sq! i sea parte de PHP sin necesidad de activarlo especificamente, Para ver la condici6n actual de mysql i, revise la documentacién en www. php.net /manual/en/ref.mysqli.php Hasta el momento de escribir esto, usted puede usar la siguiente opcién de instalaci6n para activar mysqli: --with-mysqli-DIR DIR es la ruta hacia el directorio donde se encuentra un programa llamado mysql_conf1g, el cual fue instalado cuando se instalé MySQL 4.1 Hacer una conexion Antes de poder almacenar o extraer datos, usted debe conectarse a la base de da- tos. La base de datos podria estar en el mismo PC con sus programas PHP, 0 po- dria estar en un PC diferente. Usted no necesita saber los detalles sobre la conexién con la base de datos, porque PHP maneja todos los detalles. Todo lo que necesita saber es el nombre y la ubicacién de la base de datos. Imagine la cone- xi6n alla base de datos como una conexi6n telefénica. No hace falta conocer c6mo las palabras se trasladan de un teléfono a otro. Usted sélo debe saber es el cbdigo de Area y el nimero telef6nico. La compaiia telefénica maneja los detalles. Después de conectarse a la base de datos, usted envia consultas SQL a la ba- se de datos MySQL usando una funcién de PHP disefiada especificamente pa- ra este propésito. Puede enviar tantas consultas como necesite. La conexi6n permanece abierta hasta que usted especificamente la cierre o el programa termine. Asimismo, en una conversacién telefonica, la conexién permanece abierta hasta que usted la termine al colgar el teléfono. 194 Parte Ill: PHP Conectarse al servidor MySQL El primer paso para comunicarse con su base de datos MySQL es conectarse al servidor MySQL. Para hacerlo, usted debe saber el nombre del PC donde se loca- liza la base de datos, el nombre de su cuenta MySQL y la contrasena para su cuen- ta MySQL. Para abrir la conexi6n, use la funcidn mysql_connect como sigue: $conexion-mysq]_connect (C'direccion”*"cuentamysq|","clave") or die ("mensaje"): Complete la siguiente informacion: ¥ direccion: Elnombre del PC donde MySQL esta instalado: por ej servidordb.miempresa .com. Sila base de datos MySQL esté en el mi PC que su sitio web, puede usar | oca| host como el nombre del PC. Si informaci6n esta en blanco ("), PHP asume que es 1oca|host > cuentamysq): En nombre de su cuenta MySQL. (Discuto las cuentas MySQL en detalle en el Capitulo 5). Puede dejar esta informacién en. blanco (""), lo cual significa que cualquier cuenta puede conectarse; pe- ro, generalmente, esa es una mala idea por razones de seguridad, clave: Lacontraseiia de su cuenta MySQL. Si su cuenta MySQL no re- quiere de una contrasena, no digite nada entre las comillas: mensaje: Elmensaje que se envia al buscador si la conexién fala. La conexidn falla si el PC o la red estan caidos o si el servidor MySQL. no es té corriendo. También puede fallar si la informacién brindada no es co- rrecta: por ejemplo, si hay un error de digitacién en la contrasenia, Seria bueno que usara un mensaje descriptivo durante el desarrollo, | comotio se pudo conectar al servidor, pero use un mensaje ma | general adecuado para los clientes una vez que la aplicacién esté en uso, ) talcomo£} catalogo de mascotas no esta disponible por e momento favor intente de nuevo mas tarde. La direccion incluye un ntimero de puerto necesario para la conexidén. Casi siempre, el numero del puerto es 3306. En algunas pocas ocasiones, el admi- nistrador de MySQL necesita configurar MySQL para conectarse a un puerto diferente. En esos casos, el ntimero de puerto es obligatorio para la conexion. El namero de puerto se esp ica asi nombrehuespe: jumeropuerto. Por ejemplo, usted podria usar localhost :8808 Conestos enunciados, mysa)_connect trata de abrir una conexién con el PC nom brado, usando el nombre de la cuenta y la contraseita proporcionados. Sila conex- {6n falla, el programa deja de correr en ese punto envia el mensaje al explorador. El siguiente enunciado se conecta al servidor MySQL en el PC local usando una cuenta MySQL llamada cata] ogo que no requiere de una contrasefia: — Capitulo 8: Datos entran, datos salen 195 Manejo de errores en MySQL Las funciones mysql. tales como mysql_connect y mysql_query, se usan en el lenguaje PHP para interactuar con las base de datos MySQL Si una de estas funciones no se ejecuta co- rrectamente, se envia un mensaje de error MySQL con informacién sobre el problema. Sin embar- go, este mensaje de error no sera enviado al explorador, a menos que el programa lo mande deliberadamente. Estas son las tres formas comunes de lamar a las funciones my sql: Llamara la funcién sin manejo de errores. La funcién es llamada sin ningtin enunciado que brin- de mensajes de error. Por ejemplo, la funcién my sq1_connect se puede llamar como sigue: $conexion = mysql_connect ($huesped, Susuario, $clave); Si este enunciado falla (por ejemplo, la cuenta no es valida), la conexién no se hace, pero los. enunciados restantes en el programa continéan ejecuténdose. En muchos casos, esto no es til porque algunos de los enunciados en el resto del programa (tal como extraer 0 almacenar datos en la base de datos) podrian depender de contar con una conexidn abierta Llamar a la funcién con un enunciado die. La funcién es llamada con un enunciado die que | envia un mensaje al buscador. Por ejemplo, la funcién nysq]_connect se puede lamar asi: Sconexion = mysql_connect ( Shuesped, $usuaria, $clave) or die ("No se pudo conectar al servidor Sieste enunciado alla la conexién no se hace y el enunciado die se ejecuta. El enunciado die detiene el programa y envia el mensaje al exploradar. Sila conexidn no se puede establecer, nin- atin otro enunciado se ejecuta. Usted puede poner el mensaje que desee en el enunciado die. + Llamar a fa funcién en un enunciado if. La funcién es llamada usando un enunciado if que ejecuta un bloque de enunciados sila conexién falla. Por ejemplo, la funcién mysql_con- nect. puede llamarse ast: if (1$conexion = mysql_connect Shuesped, $usuario, $clave)) i $mensaje = mysql_error(); echo "$mensajecbr>"; die); ) Siesta conexién falla, los enunciados en el bloque i f se ejecutan, La funcién mysql_error devuelve el mensaje de error de MySQL y lo quarda en la variable $mensa,je. Luego, se hace eco al mensaje de error. Elenunciado de termina el programa, de modo que ningdn otro enun- ciado se ejecuta. Note el! (signo de admiracién) en el enunciado i f. | significa "not". En otras palabras, el enunciado jf es verdadero si el enunciado de asignacién no es verdadero. Elmanejo de errores que usted quiera incluir en su programa dependerd de lo que espera que su- ceda en el programa, Al desarrolar el programa, se espera que ocurran algunos errores. Por en- de, durante el desarrollo, usted probablemente querré un manejo de errores que sea mas descriptvo, tal como el tercer método de la lista anterior. Por ejemplo, suponga que esté usando una cuenta llamada root para tener acceso a su base de datos y que comete un error de dgita- cién, como en los enunciados siguientes: 196 Pare it PHP _ ee die,talcomoE] catalogo de mascotas no método con un enunciado general en el mensaje favor intente de nuevo mas tarde. esta disponible por el momento. Por snuesped = Toca) nests | $usuario = "raz": $contrasena Ff (ifconexin = mysql_connect (Shuesped, Susuario, $contrasena)) t $mensaje = mysql_error(); echo "$mensaje
": die): ) Como digits *ra2” en lugar de “ra 2’, veria un mensaje de error parecido al siguiente: Acceso negado al usuario: ‘raz@locaThost" (Contrasena usada: NO) Este mensaje de error tiene Ia informacién que usted necesita para averiguar cuél es el problems: muestra su nombre de cuenta con el error de digitacion. Sin embargo, una vez que su programa este ‘corriendo y los clientes lo estén usando, usted probablemente no querré que sus usuarios vean un mensaje de errr téenico como el anterior. En cambio, usted seguramente preferré usar el segundo $conexion = mysql_connect ("localhost "catalogo” ,"*) ‘or die ("No se pudo conectar al servidor."): Por razones de seguridad, es una buena idea almacenar la informaci6n de la cone- xidn en variables y usar las variables en el enunciado de conexién, como sigue: Shuesped="1ocalhost"; Susuario="catalogo": $clave=""; Sconexion = mysql_connect($huesped, Susuario, $clave) or die ("No se pudo conectar al servidor."); ‘i 6 AA A a 4 a Ca De hecho, para tener atin mas seguridad, usted puede poner los enunciados de asignacién para los datos sobre la conexién en un archivo separado, en un jugar oculto, de modo que el nombre de la cuenta y la contrasefia no estén ni siquiera en el programa. Le explico como hacerlo en el Capitulo 10 La variable $conexi on contiene informacién que identifica la conexion. Us ted puede tener mas de una conexion abierta al mismo tiempo usando mas de un nombre de variable. Una conexi6n permanece abierta hasta que usted la cierre o el programa termine. Una conexién se cierra ast: mysql_close( $nombreconexion) ; Por ejemplo, para cerrar la conexi6n del ejemplo anterior, use este enunciado: mysql_close(Sconexion); pRB EY pRURUED I Capitulo &: Datos entran, datos salen] Q 7 Seleccionar la base de datos correcta Una vez establecida y abierta la conexién con el servidor MySQL, usted nece- sita decirle a MySQL con cual base de datos desea interactuar. U mysql_select_db como sigue: Sdb = mysql_select_db("nombrebasededatos", Snombreconexion) or die ("mensaje"); Rellene la siguiente informacion: | nombrebasededatos: El nombre de la base de datos. § = nombreconexi on: Lavariable que contiene los datos sobre la conexi6n. Si usted no introduce una conexién, PHP usa la tiltima conexion que fue abierta. { — mensaje: El mensaje que se envia al explorador si la base de datos no 4 se puede seleccionar. La seleccién podria fallar porque la base de datos | no fue encontrada, lo cual generalmente es el resultado de un error de digitacion en el nombre de la base de datos Por ejemplo, usted puede seleccionar la base de datos Catalogodemascotas con el siguiente enunciado: $b = mysql_select_db( "Catalogodemascotas", $conexion) or die ("No se pudo seleccionar la base de datos." Si mysq|_se]ect_db no puede seleccionar la base de datos, el programa se detiene en este punto y el mensaje No se pudo seleccionar la base de datos se envia al explorador, Por razones de seguridad, es una buena idea almacenar el nombre de la base de datos en una variable y usar la variable en el enunciado de conexidn, co- mo sigue: $basededatos = "Catalogodemascotas*; $db = mysq]_select_db($basededatos,$conexion) or die ("No se pudo seleccionar 1a base de datos. De hecho, para mayor seguridad atin, usted puede poner el enunciado de asig- nacién para el nombre de la base de datos en un archivo separado, en una ubi- cacién escondida (tal como se sugirié para los enunciados de asignacién para lainformacién conexién), de modo que el nombre de la base de datos no esté ni siquiera en el programa, Le explico cémo hacerlo en e! Capitulo 10, La base de datos permanece seleccionada hasta que usted explicitamente se- leccione una base de datos diferente. Para seleccionar una base de datos di- ferente, s6lo use un nuevo enunciado de funcion mysql_select_db. 198 Porte: PHP Enviar consultas SOL Una vez abierta la conexion con el servidor MySQL, y cuando PHP sepa con cual base de datos usted desea interactuar, usted envia su consulta SQL. La Consulta es una solicitud al servidor MySOL de que almacene, actualice 0 re- Cupere algunos datos. (Consulte e! Capitulo 4 para més informacién sobre el lenguaje SQL y como construir consultas en SQL). Para interactuar con la base de datos, ponga su consulta SQL en una variable y enviela al servidor MySQL usando la funcién mysql_query, como en el ejem- plo siguiente: $consulta = "SELECT * FROM Mascota”: $resultado = mysqi_query(Sconsulta) or die ("No se pudo ejecutar la consulta."): La consulta se ejecuta en la base de datos seleccionada para la tiltima cone- xi6n que usted abri6, Si fuera necesario (si usted tuviera mas de una cone xién abierta, por ejemplo), puede enviar la consulta a un servidor dela base de datos especifico asi Sresultado = mysql_query(Sconsul ta. $conexion) or. die ("No se pudo ejecutar la consulta. La variable $resul tado guarda informacién sobre el resultado de la ejecu- Gon de la consulta. La informacién depende de sila consulta obtiene infor macién de la base de datos o no: § 1 Para consultas que no obtienen datos: La variable $resul tado contiene infor: macidn sobre sila consulta se ejecut6 satisfactoriamente 0 no. Si fue exitosa, $resultado se establece en VERDADERO; sino lofue, $resu} tado seestablece ‘en FALSO, Algunas consultas que no devuelven datos son INSERT y UPDATE. + Para consultas que devuelven datos: La variable tresu| tado contiene |” unidentificador de resultado que identifica dénde estan los datos obte- | nidos, y no los datos obtentdos en si, Algunas consultas que si devuel © ven datos son SELECT y SHOW. El uso de comillas dobles y simples puede resultar algo confuso al asignar la cadena de consulta a $consul ta. En realidad, las comillas se usan en dos ni- Veles: las comillas necesarias para asignar la cadena a $consul ta y las comi Tlas que son parte de la consulta en lenguaje SQL. Las siguientes reglas le ayudarén a evitar problemas con las comillas: § Use comillas dobles al comienzo y al final de la cadena, | Use comillas simples antes y después de los nombres de variables. 4 Use comillas simples antes y después de cualquier valor literal Los siguientes son ejemplos de cémo asignar cadenas de consulta: Capitulo 8: Datos entran, datos salen 1 QQ Sconsulta = "SELECT nombre FROM Mienbro’ Sconsulte = "SELECT nonbre FROM Miembro WHERE apel]ido="Pere2"*: Sconsulta = “UPDATE Miembro SET apell ido=" $apel1ido'"; La cadena de consulta misma no incluye un punto y coma (;). Por lo tanto, no ponga un punto y coma dentro de la diltima comilla, El nico punto y coma es- taal final; este es el punto y coma de PHP que termina el enunciado. Extraer informacion de una base de datos Extraer informaci6n de una base de datos es una tarea comin en las aplica- ciones con bases de datos para la Web. Estos son dos usos comunes dados a la informacion de una base de datos: = Use la informacién para ejecutar enunciados condicionalmente. Por ejem- © plo, usted podria obtener la ciudad de residencia del Directorio de miembros yenviar diferentes mensajes alos miembros que viven en ciudades distintas. | Despliegue la informaci6n en una pagina web. Por ejempto, tal vez us- ) ted quiera mostrar informacién sobre productos en su base de datos Para poder usar la informaci6n de una base de datos en un programa, usted necesita poner la informacion en variables. Después, puede usar las variables en enunciados condicionales, enunciados echo u otros enunciados. Extraer informacién de una base de datos es un proceso que consta de dos pasos: 1. Se construye una consulta SELECT y se envia a la base de datos. Cuando la consulta se ejecuta, los datos seleccionados se almacenan en una ubi- cacién temporal. 2, Se mueven los datos de la ubicacién temporal a las variables y se usan en el programa. Enviar una consulta SELECT La consulta SELECT se utiliza para obtener datos de una base de datos. Las consultas SELECT se escriben en lenguaje SQL. (Discuto la consulta SELECT en detalle en el Capitulo 4.) Para extraer datos de la base de datos, construya la consulta SELECT que ne- cesita, almacénela en una variable, y luego envie la consulta a la base de da- tos. Los siguientes enunciados seleccionan toda la informacién de la tabla ascotas en la base de datos Catal ogodemascotas: Sconsulta = "SELECT * FROM Mascota"; $resultado = mysql_query($consulta) or die (*Ho se pudo ejecutan 1a consulta."): 200 Parte i: PHP _ Lafuncién mysql_query extrae los datos solicitados por la consulta SELECT Y Tos almacena en tina ubicacién temporal. Imagine que estos datos se almacenan cn una tabla, parecidaa la tabla MySQL, con la informaci6n en filas y columnas. Lafuncién devuelve un identificador de resultado que contiene la informacion ne- esaria para encontrar la ubicaci6n temporal donde los datos estan almacenadibs a loc enunelados anteriores, eidentificador de resu) tado se pone en la variable Grecut tado. Elsiguiente paso después de ejecutar la funcién es mover los datos desde su ubicacién temporal hacia variables que se puedan usar en el programa. Sia funcion falla (por ejemplo, si la consulta es incorrecta) $resu] tado con jene FALSO Extraer y usar los datos La funci6n nysql_fetch_array se usa para extraer los datos de su ubica- ‘on temporal, La funci6n extrae una fila de datos de la ubicacion temporal La tabla temporal de datos podria contener sélo una fila de datos o, mas pro- bablemente, su consulta select podria dar como resultado mas de una fila de datos en la tabla temporal de datos. Si necesita tomar mas de una fila de da tos de la ubicacion temporal, use la funcién mysq1_fetch_array en un ciclo Extraer una fila de datos Para mover los datos de su ubicacién temporal y ponerlos en variables que pue- than usarse en su programa, se utiliza la funcién PHP mysql_fetch_orrey. El formato general de la funci6n nysq]_fetch_array es $112 = mysq)_fetch_array( $ident ificadorderesul tado, tipodearreg|0); Este enunciado toma una ila de la tabla de datos en la ubicacién temporal, la po- heen una variable de arreglo llamada $f i 13. Complete la siguiente informacion: V identi ficadorderesul tado: La variable que senala hacia la ubicacion temporal de los resultados. © tipodearregto: Eltipo de serie en la cual se pone los resultaclos. Puede ser uno de dos tipos de series o ambos tipos. Use uno de los valores siguientes « MYSQL_NUM: Un arreglo con una pareja de clave y valor para cada columna en Ia fila, la cual usa ndmeros como claves. @ MYSOL_ASSOC: Unarreglo con una pareja de clave y valor para ca da columna en la fila, la cual los nombres de columnas como claves. « MYSQL_80TH: Un arreglo con ambos tipos de claves. En otras pala- bras, el arreglo tiene dos parejas de clave y valor para cada colum- ha: uno con un néimero como clave y uno con el nombre de la columna como clave. Si no se especifica el tipo de serie en el Hama: do de fanci6n, se asume que es MYSQL_BOTH. ee ae oe ee se TREES EI es sv Vevey SY eS 8 8 8 bo YD eB ose, Capitulo 8: Datos entran, datos salen 2() 7 Lafuncion mysql_fetch_srray extrae una fila de datos de la ubicacion tem- poral. En algunos casos, una fila es lo tinico que usted seleccion6. Por ejemplo, para verificar la contrasefia digitada por un usuario, s6lo necesita obtener la contraseita del usuario de la base de datos y compararla con la contraseiia que elusuario digits. Los siguientes enunciados revisan una contrasefia: Sentradadelusuario = "secreta"; _// contrasefla digitada por e] usuario en el formulario $consulta = "SELECT contrasena FROM Miembro WHERE nonbredeentrada='asmith'* $resultado = mysql_query(Sconsul ta) or die ("No se pudo ejecutar 1a consulta."): $fila = mysql_fetch_array($resul tado,MYSQL_ASSOC) ; if ( $entradadelusuario == $fila{'clave'] ) ( echo “Entrada aceptada
": enunciados que muestran las paginas web exclusiva para miembros } else ( echo “Clave invalida
": enunciados que permiten al usuario probar otra contrasena J Observe los siguientes puntos sobre los enunciados anteriores: = La consulta SELECT solicita Gnicamente un campo (contrasena) de una b fila (a fila para gsmitn). i La funcién mysql_fetch_array devuelve un arreglo llamado $fi12 con nombres de columnas como claves. ¥ Elenunciado i f compara a contrasefia que el usuario digit6 (sent rada- deusuar‘o) conla contrasefa obtenida de la base de datos (5fi lat 'con- ‘trasena" J) para ver si son iguales, usando los dos signos de igual ( ¥ Sila comparacién es verdadera, las contrasefias concuerdan, y el bloque if (el cual muestra las paginas web exclusivas para miembros) se ejecuta. i i; | ' ¥ Sila comparacién noes verdadera, el usuario no digit6 una contrasefia que concuerda con la contrasena almacenada en la base de datos, y el blo- que ese se ejecuta. El usuario ve un mensaje de error que le indica que la contrasefia no es correcta y se le devuelve a la pagina web de registro. PHP brinda un atajo que resulta conveniente para usar variables recuperadas con la funcién mysq!_fetch_array. Usted puede usar la funcién extract, la cual divide el arreglo en variables que tienen el mismo nombre que la clave. Por ejemplo, puede usar la funcién extract para reescribir los enunciados anteriores para comprobar la contrasefia. Asi se hace: 202 Pane m: PAP Sentradadeusvario = "secreta’; #clave que el usuario digito ene] formulario HTML Sconsulta = "SELECT contrasena FROM Miembro WHERE nombredeentrada="gsmith'"; gresultado = mysql_query(Sconsulta) bre. die (*No se pudo ejecutar 1a consulta.") gfila = mysqi_fetch_array($resul tado,MYSQL_ASSOC) : extract($fila): if ( Sentradadeusuario ( sclave ) echo “entrada aceptada
" ence tados que muestran las paginas web exclusivas para mienbros } else echo "clave invalidacbr>": ecunciados que permiten a1 usuario probar otra contrasené ' Usar un ciclo para obtener todas las filas de datos Si seleccioné mas de una fila de datos, use un ciclo para extraer todas las fi- las de la ubicacion temporal. Los enunciados del ciclo en el bloque de ciclos des ae ina ila de datos y la procesan. Bi ciclo se repite hasta que todas las filas se hayan recuperado. Puede usar un ciclo while oun ciclo for para re- cuperar esta informacion. (Para mas detalle sobre los ciclos while y for, consulte el Capitulo 7.) La manera mas comtin de procesar la informacion es usar un ciclo whi Te €0 mo sigue: unile ( $fila = mysql_fetch_array(Sresul tado)) i ' Este ciclo se repite hasta haber recuperado la iltima fila. Si usted desfara mplemente hacer eco de todos los datos, por ejemplo. usaria un ciclo Pare cido al siguiente: bloque de enunciados viminmigi while ( $fila = mysgl_fetch_array(Sresultado)) ( extract ($fila); echo "STipo_mascota: $Nombre_mascotacbr> [an ah nn ho Uk Ue COD ’ _Anora,fijese en el ejemplo de e6mo obtener informacién para la aplicacion Ca- talogo de mascotas. Asuma que el Catalogo de mascotas tiene una tabla llamada Mascota con cuatro columnas: Idmascota. Tipomadescota, Descripcion mascota y precio. La Tabla &1 muestra un conjunto de datos de muestra par ralatabla Mascota BSEeEEELE UE YU ee _ Capitulo 8: Datos entran, datos salen 2()3 Tabla 8-1 Datos de muestra para la tabla Mascota __Nombremascota Tpomascota Descripcidnmascota_ Precio Unicornio Caballo _Cuerno en espiralcentrado ent trente 10000 __ Pegaso Caballo Volador; alas brotan de su espalda _ 15000 Pony Caballo Muy pequefio; a mitad del tamafio 500 de un caballo estandar Dragén asiatico Dragén Cuerpo serpentino 30000 Dragén medieval Dragén Cuerpo parecido al de una lagartija 30000 Leén _ Gato 2000 Grifo Gato Cuerpo de le6n; cabeza de aguila; alas 25000 El programa 1istadodemascota. php en la Lista 81 selecciona todos los caba- Nos dela tabla Mascota y despliega la informacién en una tabla HTML en la pa- gina web. La variable $3 pomascot a contiene informacion que un usuario digité en un formulario, Lista 8- 2php 7* Programa: 1istadodeMascotas..php * Descripcion: Muestra todas las mascotas en 1a categoria seleccionada. : Muestra elementos del Catalogo de mascotas / > Catalogo de mascotas
": while (fila = mysql_fetch_array(Sresultado)) { extract($fila); $f_precio = number_format($precio,2): echo *\n $Nombremascota\n $Descripcionmascota\n Std align="right’ >\$$f_precio\n
\n"s 1 echo *\n": > La Figura 8-1 muestra la pagina web desplegada por el programa de la Lista 8 I. La pagina web muestra los elementos Mascote para el | podemascota ca allo; el despliegue esta formateado como una tabla HTML. Be resale oH melee ns Figura La pagina wob resul- tante de listado demasco tas.php. — YP Pf eee Capitulo 8: Datos entran, datos salen El programa de la Lista 8-1 usa un ciclo whi Te para extraer todas las filas de la ubica- cin temporal, En algunos casos, quizés usted necesite usar un ciclo for . Por ejem- plo, sidebe usar un nimero en su ciclo, un ciclo for es més itil que uno whi le. Para usar un ciclo for, necesita saber cuadntas filas de datos se selecciona- ron, Puede averiguar cuantas filas hay en el almacenaje temporal usando la funcién PHP mysq)_nun_rows como sigue: Snfilas = mysql_num_rows($resultado) ; La variable $nf i145 contiene el ntimero de filas almacenadas en la ubicacién temporal. Usando este niimero, usted puede construir un ciclo for para obte- ner todas las filas, como sigue: for ($i=0;$1<$nfilas; $i++) ( Sfila = mysql_fetch_array($resultado)) bloque de enunciado: ' Por ejemplo, el programa en la Lista 8-1 muestra los elementos Mascota del ti- po cabal 10. Suponga que usted desea numerar cada elemento. La Lista 82 muestra un programa, | i stanumerada_. php, ef cual despliega una lista nume- rada usando un ciclo for. Lista 8-2: Muestra una lista numerada de elementos del Catdlogo de mascotas Catalogo de mascotas <2php Susuario=*catalogo": Shuesped="localhost*; Sclave="*; Sbasededatos = "Catalogodemascotas": Sconexion = mysql_connect (Shuesped, Susuario,$clave) or die ("No Se pudo conectar al servidor *); Sdb = mysql_select_db(Sbasededatos , $conexion) or die ("No se pudo seleccionar 1a base de datos"); Stipomascota = "caballo"; //caballo fue digitado en un formulario por un usuario Sconsulta = "SELECT * FROM Mascota WHERE tipomascota='$tipomascota’": Sresultado = mysql_query(Sconsulta) or die ("No se pudo ejecutar 1a consulta. $nfilas = mysql_num_rows(Sresultado); Pe 205 206 rare wi PAP /* Mostrar los resultados en una tabla */ echo "

Caballos* echo "\n \n Std align="right >\$$f_precio\n \n": que resulta de usar el ciclo for en este La Figura 8-2 muestra la pagina web parece antes de cada elemento Nascota programa, Observe que un niimero al en esta pagina web. en een penn ree een a Horses Figura 8-2: Pagina web resultante de pet Descrip- Capitulo 8: Datos entran, datos salen 2() 7 Usar funciones para extraer datos En la mayoria de las aplicaciones, los datos se obtienen de la base de datos. Amenudo, usted extrae datos en mas de una ubicacién de su programa 0 mas de un programa en sa aplicaci6n. Las funciones (bloques de enunciados que realizan ciertas tareas especificas) estén disefiadas para tales situacio: nes. (Le explico las funciones en detalle en el Capitulo 7.) Una funci6n para extraer datos de una base de datos puede ser realmente muy atl, Cada vez que el programa necesite extraer datos, usted llama a la funci6n, Las funciones no s6lo le ahorran mucha digitacién, sino que también hacen que el programa sea mas facil de seguir. Por ejemplo, considere un catélogo de productos, como el Catilogo de mas- cotas. Necesitar extraer informaci6n sobre un producto especifico muchas veces. Puede escribir una funcién que extraiga los datos y luego usar dicha funcién cada vez que los necesite. La lista 83 para el programa obt ienedatos. php muestra cémo usar una funci6n para extraer datos. La funci6n en la Lista 83 obtendré la informacion para cual- quier mascota en el Catalogo de mascotas. La informacién sobre la mascota se pone en un arreglo, y el arreglo se devuelve al programa principal. El programa principal puede luego usar la informacién de cualquier forma que quiera. En este caso, hace eco de la informacién de la mascota en una pagina web, Lista 8-3: Extrae datos de una base de datos usando una funcion <2php 7* Programa: obtieneDatos php * Descripcion: Extrae datos de una base de datos usando una function */ Catalogo de mascotas <2php $usuario="catalogo Shuesped="1ocalhos: $clave $conexion = mysql_connect (Shuesped, usuario, $clave) or die ("No Se pudo conectar al servidor"); SInfomascota = extraerInfomascota(*Unicornio"); 7/Vamar funcion $f_precio - number_format($Infomascotal‘precio’],2): echo "

($Infomascotal ‘Nombremascota’]}
\n Descripcion: ($Infomascotal ‘Descripcionmascota' ]}
\n Precio: \${$Infomascotal ‘precio’ }}\n" 208 Panew:PHP D> <2ptp function extraerInfomascota($Nombremascota) ( $db = mysql_select_db("Catalogodemascotas”) or die ("No se pudo seleccionar la base de datos $consulta = "SELECT * FROM Mascota WHERE Nombremascota=' $Nombremascota’"; $resultado = mysql_query($consulta) or die ("No se pudo ejecutar 1a consulta. return mysql_fetch_array($resultado,MYSQL_ASSOC) ; } » La pagina web muestra Unicornio Descriocion: cuerno en esoiral centrado en la frente Precio: $10,000.00 Observe lo siguiente sobre el programa en la Lista 8:3 | El programa es mas facil de leer con el lamado de fun n de lo que seria i todos los enunciados de la funcién estuvieran en el programa principal. § Usted se puede conectar con el servidor MySQL una vez-en el programa principal y Hamar a la funci6n m uchas veces para extraer los datos. Sila conexién estuviera en la funci6n en lugar de en el programa principal, se conectaria cada vez que usted llamara la funcién. Es mas eficiente co- Si tiene sélo una conexi n, mysq]_select_db usara esa conexién. Si tic~ ne més de una conexi6n, usted puede pasar la conexion y usarla en su Hamado de funcién mysq\_select_db. Si su aplicacién sélo usa una ba- se de datos, usted puede seleccionarla una vez en el programa principal en lugar de seleccionarla en la funcién. El llamado de funcién envia la cadena "tinicornio”. En la mayoria de los casos, el llamado de funci6n usar4 el nombre de una variable. | nectarse s6lo una vez, si es posible. - | i y 1 EB programa crea la variable $ Infomascota para recibir los datos de la 1 fun © eneles un arreglo. (on. $Infomascota es un arreglo porque la informacién almacenada La funci6n anterior es muy simple: devuelve una fila de los resultados como arreglo. Pero las funciones pueden ser mas complejas. La seccion anterior proporciona un programa para extraer todas las mascotas de un tipo espe fico. El programa obt i enenascotas.. php en la Lista 84 usa una funcién para el mismo proposito. La funcién devuelve un arreglo multidimensional con los datos de mascota para todas las mascotas del tipo especificado. r - bp Lp bs be b bs - bo bs @Wagg@qQgs;#aiwqga Capitulo 8: Datos entran, datos salen 2QVQ ista 8-4: Muestra una lista numerada de mascotas usando una funcion Catalogo de mascotas <2php Susuario="catalogo" ; Shuesped="IocaThost" ; Sclav Sconexion = mysql_connect (Shuesped, Susuario.$clave) or die (*No Se pudo conectar al servidor"); SInfo_mascotas ~ extraertipodemascotas("caballo"); 7/\amar funcion /* Mostrar los resultados en una tabla */ echo "Caballos" echo “

\n \n $Nombremascota
": for ($i=1;$i<=pesode($Infomascotas) ;$i++) { $f_precio = number format (SInfomascotas[$i IL precio’],2); echo. "Ctr>\n \n \n \n \n \n"; echo “\n"; ) echo “\n"; 2> <2php function extraertipodemascotas (STi pomascota) { Sdb = mysql_select_db("Cata]ogodemascotas") or die ("No se pudo seleccionar la base de datos"); Sconsulta = "SELECT * FROM Mascota WHERE Tipomascotax’$Tipomascota’"; Sresultado = mysql_query($consulta) or die ("No se pudo ejecutar 1a consulta. sj 1; while ($fila=mysq\_fetch array($resultado,MYSQL_ASSOC)) { S 1 210 ranew:PHP } > Elp 1 2. foreach ($fila como Snombrecolumna => $valor) { $serie($j]{Snombrecolumna} = $valor: sieti ' return Sserie: rograma en la Lista 8-4 procede como sigue: . Se conecta con el servidor MySQL. en el programa principal. Llama a la funcién extraertipodemascotas. Pasa "cabal |o" como ua cadena de caracteres y también establece $1nfomascotas para que pueda recibir los datos devueltos por la fun 3, La funci6n selecciona la base de datos Cato] ogodemascotas. 4, La funcién envia una consulta para extraer todas las filas con cabal10 2 10. MW. 12. 13. 14, . Inicia un ciclo foreach. Elci en la columna Ti podemascota. Los datos se almacenan en una tabla en una ubicacién temporal. La variable § resul tad identifica la ubi de la tabla temporal Establece un contador. + es un contador que se incrementa en cada ciclo. Empieza en | antes del ciclo, Inicia un ciclo whi Te. La funci6n intenta extraer una fila de la tabla tem- poral de datos y resulta exitosa. Si no hubiera filas para extraer en la ubicacién temporal, el ciclo whi1e terminarfa. clo se mueve por la fila y procesa cada campo. Almacena los valores en el arreglo. $1nfomascotas es un arreglo multidimensional. Su primera clave es un némero, el cual esta esta- blecido por el contador. Como esta es la primera vez que se atravie- sa el ciclo whi le, el contador, $j, es ahora igual a 1. Todos los campos en la fila se almacenan en $Infomascotas con el nombre de la columna como clave. (Explico las series multidimensionales en detalle en el Capitulo 7.) Incrementa el contador. $j aumenta en 1. Llega al final del ciclo while. Regresa al inicio del ciclo while. Repite los Pasos 6 — 11 para cada fila en los resultados. Devuelve $serie al programa principal. $serie contiene todos los datos para todas las filas seleccionadas. $infomascotas recibe datos de la funcién, Todos los datos se pasan. La Figura 8-3 muestra la estructura de $Infomascotas después de que la funcién ha terminado de ejecutarse. Capitulo 8: Datos entran, datos salen 2] 7 r es |e homtemasctl ——suicoio (eretonmacoal “era xp cence tena Figura 8-3 treet ‘et estruc- la Inonbesscts]—=popisa tura del Iueseipcenmasctal des oten de usa acreglo mu! tec 000 tidimensio- [elleebrmacets] pony nal $Info [dregs nese] Spr tunis deceit mascotas treet oo ee | - 15. El programa principal envia las Descripciones de las mascotas al ex- plorador en una tabla HTML. Los datos apropiados se insertan desde el arreglo $Infomascotas. La pagina web resultante del programa en la Lista 84 es idéntica a la pagina web mostrada en la Figura 8-2, la cual es producida por un programa que no usa una funci6n. Las funciones no producen output diferente. Cualquier pro- grama que se pueda escribir usando una funci6n, también puede escribirse n usar la funcion. Las funciones s6lo facilitan la programacién. Obtener informacion del usuario ‘Muchas aplicaciones estan disetadas para formular preguntas que los usua- rios responden digitando informaci6n. A veces, la informacién se almacena en tuna base de datos; otras, la informacién se usa en enunciados condicionales para entregar una pagina web individual. Algunas de las tareas mas comunes de las aplicaciones que requieren que los usuarios respondan preguntas son + Hacer pedidos en linea: Los clientes deben selec gitar la informaci6n sobre el envio y el pago. jonar productos y di- » Inscribirse: Muchos sitios requieren que los usuarios proporcionen al- guna informaci6n antes de recibir ciertos beneficios, tales como tener acceso a informacion especial 0 a software que se puede descargar. - Registrarse: Muchos sitios restringen el acceso a sus paginas. Los usua- rios deben digitar el nombre de una cuenta y una contrasefa antes de poder ver las paginas web. © Ver informacién seleccionada: Muchos sitios permiten a los usuario: __especificar cual informacién desean ver. Por ejemplo, un catalogo en Ii- © nea podria permitir a los usuarios digitar el nombre del producto 0 se- leccionar una categoria de productos que desean ver. Las preguntas se formulan mediante formularios HTML. El usuario responde las preguntas digitando informacién en el formulario 0 seleccionando ele- PHP _ entos de una lista. Bl usuario luego hace clic en un boton para enviar 1a ine pants gn del formulario. Cuando el formulario es enviado, la informacion en ise pasa a un segundo programa separado, el cual procesa Ia informacion En las siguientes secciones, no le informo sobre el HTML requerido Para mos: trar un formulario; asumo que usted ya conoce HTML. (Sino lo conoce 0 fe: tre talun refrescamiento, consulte HTML 4 For Dummies, dta Edicion, por Ed TTittel y Natanya Pitts; Wiley Publishing, Inc.). Lo que si le digo es corm cate PHP para desplegar los formularios en HTML y procesar la informacion que Jos usuarios digitan en el formulario. Usar formularios HTML Los formularios HTML son muy importantes para los sitios web interactivos fasted no conoce los formularios HTML, debera leer la seccion de formula. vios en algen libro sobre HTML. Para desplegar un formulario usando PHP, puede hacer alguna de las siguientes operaciones: 1 Use enunciados echo para hacer eco del HTML para un formulario. Por ejemplo: \n

$i. ($Infomascotas[$i JL ‘Nombremascota‘}) ($nfomascotaL$i ]E‘Descripcionmascota'})\$$f_precio

\n* foreach(Setiquetas como $campo=>$etiqueta) ( echo “ “ite 1 echo "

D> Observe lo siguiente en cuanto a muestra formulario. php, tal y como apa- rece en la Lista 8-6: Se crea un arreglo que contiene las etiquetas usadas en el formulario. Las claves son los nombres de los campos. # El script procesaformular io. php eva el nombre del script que co- | rre cuando el formulario se envia. La informacion en el formulario se © enviaa procesaformulario.php, el cual procesa la informaci¢ 216 Parte lt: PHP ee {j 7 Bl formutario se formatea con una tabla HTML, Las tablas son una par- te importante del HTML. Si usted no esta familiarizado con las tablas HTML, consulte HTML 4 For Dumuies, 4ta Edicién, por Ed Tittel y Natan- ya Pitts (Wiley Publishing, Inc.) El script hace un ciclo por el arreglo Set iquetas con un enunciado | foreach. El cédigo HTML para una fila de la tabla es el output de ¢ ada ci- | elo. Los valores de serie apropiados se usan en el codigo HTML 980 Por razones de scguridad, siempre incluya max] ength (define el ntimero de ca- Ss racteres que los usuarios pueden digitar en el campo) en su enunciado HTML, Limitar el ntimero de caracteres ayuda a prevenir que personas malintenciona- das digiten cédigos maliciosos en los campos de su formulario. Sila informa: ‘cidn seré almacenada en una base de datos, establezca | ongi Ludmaxima al mismo néimero del ancho de la columna en la tabla de la base de datos. Cuando Goliat Pérez rellena el formulario mostrado en la Figura 85 (creado por el programa en la Lista 8-6) y lo envia, el programa pro cesaformulario.php corre y produce el siguiente output: primernombre ~ Goliat segundonombre = apellido = Perez calle = 1234 calle Alta ciudad = Gran Ciudad estado = TX codigo postal = 88888 En procesa formu] ario. php, todos los elementos del arreglo incorporado $_POST se despliegan, ya que ambos formularios mostrados en esta secci6n usa- ron el método POST, tal como lo hace la mayorfa de los formularios. Hay otras se- ties incorporadas, ademas del arreglo $__POST, como se aprecia en la Tabla 82, — Figura 8-5: Formulario para intro- ducir la di- reccién del cliente. — Capitulo 8: Datos entran, datos salen 2 ] 7 La misma informacién esta disponible en dos conjuntos de arreglos. Use los arreglos mas nuevos (cuyos nombres empiezan con _) porque pueden usarse en cualquier parte, incluso dentro de una funci6n. (Le explico las funciones y el uso de variables dentro de las funciones en el Capitulo 7). Estas series, lla- madas superglobales 0 autoglobales, fueron introducidas en PHP 4.1.0. Los arreglos mas viejos, con nombres largos como $H11P_POST_VARS, deben ha- cerse globales antes de poder usarse en una funcién, como explico en el Capi- tulo 7. Las series mas viejas s6lo deberian usarse cuando usted se ve forzado a usar una versién de PHP mas vieja que PHP 4.1.0. Hacer que los formularios sean dindmicos PHP trae nuevas capacidades a los formularios HTML. Como usted puede usar variables en los formularios PHP, sus formularios ahora pueden ser dindmicos. Estas son las principales capacidades que PHP proporciona a los formulatios: ff Usar variables para mostrar la informacién en los campos de texto de entrada e Usar variables para crear listas dinémicas de las cuales los usuarios pue- den hacer selecciones | Usar variables para construir listas dindmicas de botones de opcin © Usar variables para construir listas dinémicas de casillas para marcar Desplegar informacién dindmica en los campos det formulario Cuando usted despliega un formulario en una pagina web, puede poner infor- macién en los campos en lugar de s6lo mostrar un campo vacio. Por ejemplo, sila mayorfa de sus clientes vive en Estados Unidos, podria automaticamente stom introducir EEUU en el campo del pais cuando pide a los clientes su direcciéon, Registrar arreglos largos Una nueva configuracion php.ini, introducida _racién a desactivada (Off), para que PHP no en PHP§, le permite evitar que PHP cree lcs vigios haga este trabajo adicional ylargos arreglos autométicamente. Es altamente improbable que usted necesite usarlas, a no ser {que estéutlizando algunos scrits viejos que con tengan las variables largas. La linea siguiente en php. ini controla esta configuracién: Aunque la configuracién actual predetermina- da es On, eso podria cambiar. La configuracin predeterminada podria cambiar a Of fF en una versién futura. Si esta usando scripts viejos y obtiene errores en lineas que contienen las se- }_VARS, verifique {a configuracion de php.ini para las series lar- gas. Podria estar desactivada (Off), y los arregios largos que necesitan los scripts més Viejos no se estan siendo creadas del todo. register_long_arrays = On ries largas, como SHTTP_G En este momento, esta configuraci6n esta acti- vada (On) en forma predeterminada. A menos ‘que usted corra los vejos scripts que necesitan los viejos arreglos, deberia cambiar la configu- 218 parte wi PHP elcliente realmente vive en los Estados Unidos usted le habra ahorrado al- jo de digitacion, Y si el cliente no vive en los Estados Unidos, simplemente puede reemplazar EEUU con el pais apropiado. Ademds, si el programa auto- praticamente ingresa EEUU como el valor en ‘el campo, usted sabe que esa in- formacion no contendré errores. Para mostrar tun campo de texto que contiene informacion, usa e iguiente formato para los enunciados HTML del campo de input value="EEUU"> Direccion del Cliente</titTe></head> <body>” setiquetes = serie( "primernonbre”=>"Priner Nombre:". segundoNombre*=>"Apel Vido:” « scalle"=>"Direccion de 1a calle >*Ciudad:", _s- VF VV Ve VeEeveOUVEChUGECUULUUUDODLUWDG Capitulo 8: Datos entran, datos salen 27 *estado"=>*Estado:". "codigopostal"=>"Codigo_postal :"); Susuario="admin" ; Shuesped="localhost"; Sclave Sbasededatos = "DirectoriodeMienbros” : Snombreentrada = "gperez"; // nombre de registro del usuario Sconexion = mysq)_connect($huesped, Susuario,$clave) or die ("No me pude conectar al servidor"): $db = nysql_select_db($basededatos, $conexion) or die ("No sé pudo seleccionar 1a base de datos"); Sconsulta = "SELECT * FROM Miembro WHERE nombreentrada~'snombreentrada‘"; Sresultado = mysql_query($consuita) or die ("No sé pudo ejecutar 1a consulta $fila = mysal_fetch_array($resuitado) : echo “<p align="center'> shi align='center'>Direccion de Snombreentrada</hl>\n": echo “<br><p align="center"> <font size="+1"><b>Por favor verifique 1a informacion a continuacion y cambie cualquier dato que esta incorrecto. </b></font> <hr>": echo “<form action='procesaDireccion.php’ method='POST'> <table width='95%" border="0' cellspacing= cellpadding='2'>\n"; foreach($etiquetas as, $campo=>Setiqueta) { echo "<tr> <td align='right'> <B>{SetiquetalScampo}} <br ></td> <td><input type="text" nam Scampo’ value="Sfila[Scampo)’ size="65" maxlength="65"> </td> <stry: 1 echo "</table> <div align="center!><p><input type="submit’ value='Enviar Direccion'> </p></div> </form>": 2 </body></html> Observe lo siguiente en el programa en la Lista 87: Fl enunciado del formulario transfiere la acci6n al programa proces adi reccion.php. Este programa procesa la informacion en el formulario y ac- tualiza la base de datos con cualquier informacion que el usuario cambi6. Este es un programa que usted mismo escribe. Verificar los datos en un formulario y guardar informacién en la base de datos se discuten més adelante en este ca- ¥ ' 220 Pare lt: PHP____ aoE0 pitulo, en las sect base de datos’ nes "Revisar la informacion” y "Poner informacién en una Cada campo de input en el formulario recibe un nombre. La informa- cidn en el campo de input se almacena en una variable que tiene el mis mo nombre que e! campo de input. 1 El programa da a los nombres de campos en el formulario los mismos nombres de las columnas en Ia base de datos. Esto simplifica el movi miento de la informacién entre la base de datos y el formulario; no re- quiere de la transferencia de informacién de una variable a otra. Los valores de la base de datos se muestran en los campos del formu- lario con el parémetro valor en el enunciado del campo de input. El parametro valor muestra el valor apropiado del arreglo $112, la cual contiene datos de la base de datos. 4 Por razones de seguridad, siempre incluya max1ength en su enunciado HTML. maxlenath define el nimero de caracteres que un usuario puede digi: tar en el campo. Sila informacion sera almacenada en una base de datos, es tablezca maxlength al mismo numero del ancho de la columna en la tabla de la base de datos. La Figura $6 muestra la pagina web resultante del programa en la Lista 8-7. Lainfor- macion en el formulario es la informacion que esté almacenada en la base de dat Construir listas de seleccion Un tipo de campo que usted puede usar en un formulario HTML es una lista de selecci6n. En vez de digitar en un campo, sus usuarios seleccionan de una lista, Por ejemplo, en un catélogo de productos, usted podria prover una lis- ta de categorias entre las cuales los usuarios pueden seleccionar lo que de- sean ver. O bien, el formulario para las direcciones de los usuarios podria iIncluir una lista de paises que los usuarios pueden seleccionar. 0 los usua- rios podrian ingresar una fecha seleccionando el mes, dia y ao de una lista Use las listas de selecci6n siempre que sea factible. Cuando el usuario selec ciona un elemento de una lista, usted podré estar seguro de que el elemento es correcto, sin errores ortograficos, caracteres extraios u otros problemas introducidos por los errores de digitacién de los usuarios. Una lista de selecci6n en HTML para las categor tas tiene el siguiente formato: s en el Catalogo de masco- <form action="procesaformulario.php” metho: éselect name="Tipomascota"> <value de 1a option="caballo">cabal lo <value de 1a option ="gato” selected>gato < value de 1a option ="dragon*>dragon </select>    i <input type="submit® value=" </form>: posT"> Seleccione el tipo de mascota "> Capitulo &: Datos entran, datos salen 22] Address for gsmith lease check the information below and change any informatio Fist Nane: Sia ee ‘Sweet Address: [EGR 2 Suate codes Formulario que muestra la direccién del usuario, La Figura 8-7 muestra la lista de seleccién que estos enunciados HTML produ- cen. Observe que gato es la opcién escogida cuando el campo se muestra por primera vez. Usted determina esta selecciGn predeterminada incluyendo se lected en laetiqueta de opcién. igura 8-7; Un campo de selec- cién para el Catélogo de mascotas Cuando el usuario hace clic sobre la flecha en la casilla de lista desplegable de selecci6n, toda la lista se despliega, como se aprecia en la Figura 88, y el usuario puede seleccionar cualquier elemento de la lista. Observe que gato esta seleccionado hasta que el usuario seleccione un elemento diferente. Alusar PHP, sus opciones pueden ser variables, Esta capacidad le permite construir listas de selecci6n dinamicas. Por ejemplo, usted debe mantener la Ses ¥VUCELEEUE Ob 222 Porto wt: PHP lista estatica de categorfas de mascotas mostrada en el ejemplo anterior. Si anade una categoria nueva de mascota, debe agregar una etiqueta de opcion jmanualmente, Sin embargo, con las variables PHP, usted puede construir la lista en forma dindmica a partir de las categorias en la base de datos. Cuando anada una nueva categoria en la base de datos, la nueva categoria se agrega- Ha automaticamente a su lista de selecci6n sin necesidad de cambiar el pro- grama PHP. La Lista 88 para el programa construi rse lect. php construye tna lista de seleccion de categorias de mascotas a partir de la base de datos. per Ete Eek Mew Uncampo | iaaas fer de selec: = cidn para el Catalogo de mascotas con una lis: ta desple- gable. Lista 8-8: Programa para construir una lista de seleccion <2php 7* Nombre del programa: construirselect.php * Descripcion: £1 programa construye una Vista de Seleccion a partir de la base de datos. 4 » <html> chead><title>Tipos de mascotas <2php Susuario="catal ogo" : Shuesped="local host”: Sclave=""i Sbasededatos = “CatalogodeMascotas"; Sconexion = mysql_connect (Shuesped, usuario, $clave) ‘or die ("No se pudo conectar al servidor "); $db = mysql_select_db(Sbasededatos, Sconexion) or die ("No se pudo seleccionar la base de datos"): $consulta = “SELECT DISTINCT Tipomascota FROM Mascota ORDER BY Tipomascota”; sresultado = mysqi_query($consulta) ‘or die ("No se pudo ejecutar 1a consulta."): (continia) ft -f-ft i-i rn hh hehe hh hr ft hn = = = = = = = = = = = => = 2 os Capitulo 8: Datos entran, datos salen 223 /* crea un formulario que contiene 1a lista de seleccion */ echo "\n"; while ($fila © mysql_fetch_array($resultado)) { extract($fila); echo " text’ nam *primer_nombre* tect taper right>(Sarregto_etiquetal 'segundo_nonbr We caa>cinput, type="text’ name~'segundo_nombre size-"65" ve ixlength="65" value="$segundo_nonbre’ > {Sarreglo_etiquetat'apellido'2}: cedy. Cinput type="text’ name="apel Lido: size="65" T xtengthe" 65" value="Sapellido">

Para revisar si hay vacios, el programa hace lo siguiente: 1. Establece un arreglo de etiquetas de campo. Fstas etiquetas $° Trt eatne etiquetas en el formulario, y también se usan para mostrar la lista de informacién faltante. 2, Se musve en ciclo por todas las variables pasadas desde el formulario, Se visando si hay vacios. Las variables estén en el arreglo § POST. Cual- ‘quier campo en blanco que se encuentre se agrega a un arreglo de cam- pos en blanco $arreglo blanco. —— Capitulo 8: Datos entran, datos salen 23 7 3. Revisa si se encontraron campos vacios. Verifica el niimero de elemen- tos en $arreglo_blanco. 4, Sino se encontré ningiin campo en blanco, salta al mensaje de bienvenida. 5. Si encontré uno 0 més campos en blanco: i, Muestra un mensaje de error. Este mensaje explica al usuario que falta alguna informacion obligatoria, il, Muestra una lista de informacién faltante. Hace un ciclo por $serie_planco y muestra la(s) etiqueta(s). iil, Despliega el formulario. Como el formulario incluye nombres de variables en el atributo valor, la informaci6n que el usuario digit6 anteriormente se recupera de $_POST y se despliega, iv. Sale. Se detiene después de desplegar el formulario. El usuario de- be hacer clic en el bot n Submit para continuar. Recuerde. Los programas que procesan formularios usan la informacién del for- mulario, Si usted los corre por si solos, no tienen ninguna informacion que se ha- ya pasado del formulario y no correrdn correctamente. Estos programas fueron hechos para correr cuando el usuario oprime el bot6n Submit para un formulario. No se olvide del enunciado ex: t. Sin el enunciado ex‘ t, el programa continua ria y mostraria el mensaje de bienvenida después de mostrar el formulario. La Figura 8-13 muestra la pagina web que resulta si el usuario no digité su pri- mer 0 segundo nombre. Observe que la lista de informaci6n faltante no inclu- ye el segundo nombre, pues éste no es obligatorio. Adems, observe que la informacién digitada originalmente por el usuario en el formulario todavia aparece en los campos del formulario, Verificar ef formato de la informacion Cuando los usuarios deben digitar informacién en un formulario, usted puede esperar cierto ntimero de errores de digitacion. Puede detectar algunos de estos errores cuando el formulario es enviado, hacérselos saber al usuario y luego solicitarle que vuelva a digitar la informacién. Por ejemplo, si el usuario digita 899776 en el campo del c6digo postal, usted sabe que esto no es co- rrecto para los Estados Unidos. Esta informaci6n es muy larga para ser un c6- digo postal y muy corta para ser el cédigo postal +4. Usted también debe protegerse de los usuarios maliciosos, usuarios que po- drian querer daiiar su sitio web o su base de datos, 0 robar informacién suya ode sus usuarios, No querré que los usuarios digiten etiquetas HTML en los campos del formulario: algo que podria tener resultados inesperados cuando se envia a un explorador web. Una etiqueta particularmente peligrosa seria una etiqueta de script que permite a un usuario introducir un programa en el campo de un formulario. 238 Parte rae Elresultado de procesar un formula fio con in formacion faltante, — tee - sate we SO a Pe RS Si usted revisa cada campo en busca de su formato esperado, puede pescar errores y protegerse de la mayoria del contenido malicioso. Sin embargo, ve- rificar la informacién es un asunto delicado, Usted quiere hallar tantos datos incorrectos como sea posible, pero no desea bloquear ninguna informacion legitima. Por ejemplo, cuando revisa un ntmero telef6nico, podria limitarlo a nameros. El problema con esta verificacién es que rechazaria nimeros telet6- nicos legitimos en el formulario 555-5555 u (888) 555-5555. Por eso, usted también debe permitir guiones (), paréntesis () y espacios. Podria limitar et campo a.una longitud de 14 caracteres, incluyendo paréntesis, espacios y guiones, pero esto rechazaria nimeros del extranjero o ntimeros que incl ryan una extensién. En resumidas cuentas: Usted debe pensar culdadosamen- te cual informacién desea aceptar 0 rechazar para cualquier campo. Puede verificar la informaci6n en el campo usando expresiones regulares, las cuales son patrones. Usted compara la informacién en el campo con el pa- tron para ver si concuerda. Si no concuerda, la informacién en el campo es incorrecta, y el usuario debe digitarla de nuevo. (Consulte el Capitulo 6 para més sobre las expresiones regulares.) En general, estos son los enunciados que se usan para revisar campos: if ( fereg("patron®,$nombredevariable) ) { echo mensaje de error; volver a mostrar el formulario; exits 1 echo "Bienvenido"; Capitulo 8: Datos entran, datos salen 239 Observe que la condicién en el enunciado if es negativa. O sea, el ! (signo de admiracién) significa "not". Entonces, el enunciado if realmente dice: Sila variable no concuerda con el patr6n, ejecute el bloque if. Por ejemplo, suponga que usted desea revisar un campo de input que contiene el apellido del usuario. Puede esperar que los apellidos contengan letras y no ni- meros, y posiblemente caracteres como un apéstrofo y un guidn (como en O'Hara y SmithsJones, respectivamente) y también espacios (como en Van Dyke). Ademas, es dificil imaginar un nombre que tenga mas de 50 caracteres. Asi, us ted puede usar los siguientes enunciados para chequear un apellido: if ( lereg(*[A-Za-z" -]{1,50)",$apellido) { echo mensaje de error; volver a mostrar el formulario; exitQ: 1 echo "Bienvenido"; Si quiere incluir un guién (-) como parte de un conjunto de caracteres per- mitidos encerrados entre corchetes ([ } ), debe indicar el guién al inicio 0 al final de la lista. De otro modo, si lo pone entre dos caracteres, el programa lo interpretara como el rango entre los dos caracteres, como en A— la seccién anterior, usted aprendi6 cémo verificar cada campo del formu- Jario para garantizar que no haya vacios, Ademés de esta accién, probable- mente también querrd verificar todos los campos que tienen datos para asegurarse de que los datos tengan un formato aceptable. Puede chequear el formato haciendo unos cuantos cambios simples al programa en la Lista 8-12. La Lista 8-13 muestra el programa modificado llamado cheque todos . php Lista 8-13: Programa que revisa todos los datos en los campos de un formul: <2php 7* Nombre del programa: chequeaTodos..php * Descripcion: £1 programa revisa todos los campos de) formulario para ver si hay campos en blanco o tienen el formato incorrecto. 7 > Campos vacios <2php (> establece una serie de etiquetas de campos */ Sarreglo_etiquetas= array ( "primer_nonbre™ => “Primer Nombre ‘segundo_nombre* => "Segundo Nombre 4 tapellido,* => "apellido", telefono" => "telefono"): foreach ($_POST as $canpo => Svalor) i 2G0 Pare: PHP /* verificar cada campo excepto el] segundo nombre por si hay campos en blanco */ if ( $yalor ) { i if (Scampo != *segundo_nombre") $arregio_blancot$campo) = "blanco": , elseif (Scampo imer_nombre* o Scampo *segundo_nonbre* © $campo == “apellido * ) bmw | if Clereg("*(A-Za-2" -111,0}8",$POSTEScampol) ) Sma1_formatofScampo} - "malo"; 1 } elseif (Scampo i “telefono") Gf (lereg("*L0-9)( -3(7,.20) ((Lxx] | (ext) | (ex) 20-1200 91{1,7))29", $valor)) malo" : $mal_formatol$campo} ) ,! }* si cualquier campo no esta bien, mostrar un mensaje de error y el formulario */ if (@sizeof($arreglo_blanco) > 0 or @sizeof($mal_formato) > 0) i tt (@sizeof(Sarreglo_blanco) > 0) /* mostrar mensaje de informacion faltante */ echo *No completo uno o mas de los campos obligatorios. Debe digitar:
"; J* mostrar 1a lista de la informacion faitante */ foreach($arregio_blanco como $campo => $valor) i echo "anbsp ;4nbsp: : {$arreglo_etiquetas($campo]}
” 1 } 4 (@sizeof($mal_formato) > 0) { /* mostrar mensaje de informacion incorrecta */ echo *Uno o mas campos tienen informacion que parece incorrecta, Corrija el formato de:
"; y* mostrar 1a lista de 1a informacion incorrecta */ foreach($nal_formato as Scampo => $valor) 1 echo “unbsp; anbsp; ($arreglo_etiquetas[$campo])
"; ) 1 J* volver @ mostrar e]_formulario */ $primer_nombre = $_POSTL'primer_nombre* $segundo_nombre =. POSTE" segundo_nonbr Sapeilido ~ $_POST{ ape] 1ido" I: Stelefono = S-POST(‘telefono']; echo. "


{Sarreglo_etiquetast 'primer_nonbre*] }:
<8>(Sarreglo_etiquetas[ ‘telefono']}: telefono’ size='65'
(Setiquetas[$campo]}
Cinput. typ size="69" maxlength="65" value=" (Sprimer_nombre}' >
[Serreglo_etiquetal telefono’): Ciaput, type="text" name="telefono” sizer"6s) rtiength="65" value='Stelefono'> ($arregio_etiquetast" segundo_nonbre' 1} :
(Sarreglo_etiquetast ‘apellido'}): d
.

"; exitO: 1 echo “Bienvenido”; > Estas son las diferencias entre este programa y el programa de la Lista 8-12: 1 Este programa crea dos series para los datos problema. Crea Sserie_blanco, al igual que el programa anterior. Pero este programa también crea §ma1_formato para los campos que contienen informa- cién con un formato no aceptable. | Este programa hace un ciclo por $ma1_formato para crear una lista se- parada de datos problematicos. Si hay campos vacfos, crea un mensaje de error y enumera los campos con problemas, al igual que el programa ante- rior. Si hay campos con un formato inaceptable, este programa también ‘crea un segundo mensaje de error y enumera los campos problematicos. La pagina web en la Figura 8-14 es el resultado obtenido cuando el usuario acciden- talmente digita su primer nombre en el campo del segundo nombre y también digi- taun sinsentido como niimero telefbnico. Observe que aparecen dos mensajes de error, los cuales muestran que el campo del primer nombre esta en blanco yel campo del niimero telefénico contiene informacién incorrecta. 242 Pane: PHP — Figura 8-14: Elresultado de procesar tun formula rio tanto con informacion faltante co: mo con in- formacién incorrecta, — Dar a los usuarios la oportunidad de escoger, con multiples botones de envio Usted puede usar mas de un bot6n Submit en un formulario. Por ejemplo, en un formulario para pedidos del cliente, podria usar un bot6n que diga Enviar pedido y otro que diga Cancelar pedido. Sin embargo, s6lo puede enumerar un programa en la parte act ion=nombreprograma de su etiqueta formu) aro, lo cual significa que los dos botones corren e! mismo programa, PHP resuelve este problema. Usando PHP, usted puede procesar el formulario de manera diferente, dependiendo de en cual botén el usuario haga clic. Los siguientes enunciados crean un formulario con dos botones de envio:


Observe que los campos para los botones de envio tienen un nombre: mostrar_boton. Cada uno de los campos tiene un valor diferente. Cualquiera de los dos botones en que el usuario haga clic establece el valor para $mostrar_boton. El programa dosbotones . php en la Lista 8-14 procesa el formulario anterior. ee =." i se Nae ER tet Rane: {yen aa Capitulo 8: Datos entran, datos salen 24 3 Lista 8-14: Programa que procesa dos botones de envio Direccion o Numero telefonico del cliente <2php Susuario="admin"; Shuesped="localhost"; Sclave=""; Sbasededatos - “Directoriodemiemros": Sconexion = mysql_connect (Shuesped, $usuario,$clave) or die ("No se pudo conectar al servidor"); $db = mysql_select_db( $basededatos,, $conexion) or die ("No sé pudo seleccionar 1a base de datos”); if ($_POSTE'mostrar_boton’] == "Mostrar Direccion") 1 Sconsulta = "SELECT calle, ciudad, estado, codigopostal FROM Miembro WHERE apellido=*$_POSTLapellidol Sresultado = mysql_query($consulta) or die ("No se pudo ejecutar la consulta."); Stila = mysql_fetch_array($resultado) ; extract (Stila echo "S$calle
$ciudad, $estado $codigo_postal
"; ) else ( Sconsulta = "SELECT telefono FROM Miembro WHERE apellido="$_POSTLapellidol'": Sresultado = mysql_query($consul ta) or die ("No se pudo ejecutar la consulta."): $file = mysql_fetch_array(Sresultado); echo “Telefono: ($fila{* telefono’ ]}
"; y 2» El programa ejecuta diferentes enunciados, dependiendo de cual botén se ha presionadbo. Si el usuario hace clic en el bot6n de la direcci6n, el programa da ‘como output la direccién que corresponde al nombre enviado en el formula- rio; si el usuario hace clic en el bot6n Mostrar ntimero telef6nico, el progra- ma muestra el ntimero de teléfono. 244 Pore: PHP ___ Insertar informacién en una base de datos Su aplicacién probablemente necesite almacenar datos en su base de datos. Por ejemplo, su base de datos podria almacenar informacién que un usuario digité en un formulario para su uso; un Directorio de miembros es un buen ejemplo de es- to. Obien, su base de datos podria almacenar datos temporalmente durante la aplicacién. De cualquier modo, usted almacena datos enviando consultas SQLa MySQL. (Le explico las consultas SQL en detalles en el Capitulo 4.) Preparar los datos Debe preparar los datos antes de almacenarlos en la base de datos. Preparar los datos incluye lo siguiente: Poner los datos en variables Asegurarse de que los datos estén en el formato esperado por la base de datos Depurar los datos Poner los datos en variables Los datos se almacenan envidndolos a la base de datos en una consulta SQL. Usted almacena los datos en variables ¢ incluye los nombres de las variables en la con- sulta, Este proceso es simple si se usa PHP. El usuario proporciona la mayoria de os datos que usted desea almacenar por medio de un formulario, Como comenté anteriormente en este capitulo, PHP almacena los datos en una variable con el nombre del campo del formulario, en forma invisible y automatica, sin necesidad de queusted mismo los almacene. Usted nada mas usa las variables que PHP pro- porciona. Ocasionalmente, querré almacenar la informaci6n que usted mismo ge- nera, tal como la fecha de hoy o el nimero del pedido de un cliente. S6lo debe «guardar esta informaci6n en una variable, para poder incluirla en una consulta. Usar el formato correcto Aldisefar su base de datos, usted establece el tipo de datos para cada co- lumna. Los datos que desea almacenar deben concordar con el tipo de datos de la columna en la cual los desea almacenar. Por ejemplo, si la columna es- pera datos del tipo de mimeros enteros, los datos deben ser niimeros. O sila columna espera datos que sean fechas, los datos enviados deben tener un formato que MySQL reconozca como una fecha. Si usted manda datos con el formato incorrecto, MySQL igualmente los almacenard, pero puede ser que no almacene el valor que usted espera. Estos son los detalles de como MySQL almacena datos para los tipos de datos usados mas frecuentemente: [SHAR 0 VARCHAR: Almacena cadenas. MySQL almacena practicamente cualquier dato enviado a una columna de caracteres, incluyendo nimeros 0 fechas, como cadenas. Cuando usted creé la columna, especificé su long- £0 3s jatos entran, datos salen tud. Por ejemplo, si especificé CHAR( 20}, sdlo 20 caracteres se podran alma- | cenar.Sienvia una cadena que tenga més de 20 caracteres, slo los primeros 20 caracteres se almacenarén. Los caracteres restantes se eliminan. Establezca max ength para cualquier campo de input de texto en un for- mulario a la misma longitud del ancho de la columna en la base de datos donde se almacernardn los datos. De ese modo, el usuario no podra digi- tar mas caracteres de los que puede almacenar la base de datos. | INT o DECIMAL: Almacena ntimeros. MySQL trataré de interpretar cualquier dato enviado a una columna de niimeros como un ndimero, ya sea que tenga sentido o no. Por ejemplo, podrfa interpretar una fecha como un ntimero, ¥ Us ted terminaria con un ntimero como 2001.00. Si MySQLes incapaz de interpre- tarlos datos enviados como un niimero, guardaré 0 (cero) en la columna, DATE: Almacena fechas. MySQL espera fechas como ntimeros con el aiio primero, después el mes y, por tiltimo, el dfa. El aio puede tener dos © cuatro digits (2001 6 01). La fecha puede ser una cadena de ntimeros, bien, se puede separar cada parte con un guién (.), un punto (.) 0 una diagonal (/). Algunos formatos validos para las fechas son 20011203, 980103, 2001-3-2 y 2000.10.01. Si MySQL no puede interpretar los datos enviados como una fecha, almacena la fecha como 0000-00-00. | ENUM: Almacena s6lo los valores que usted permitié cuando creé la ¢o- { tumna. $i envia datos que no son permitidos, MySQL almacena un 0. En muchos casos, los datos se recopilan en un formulario y se almacenan en la base de datos tal y como estan. Por ejemplo, los usuarios digitan sus nombres enun formulario, y el programa los almacena. Sin embargo, en algunos casos, los datos deben cambiarse antes cle ser almacenados, Por ejemplo, si un usua- rio digita una fecha en un formulario en tres listas de seleccién separadas para mes, dia y ao (como describo en la secci6n "Construir listas de seleccién”, an- teriormente en este capitulo), los valores en los tres campos deben juntarse en una sola variable. Los siguientes enunciados juntan los campos: SexpDate = $_POSTL'expYear'].*-": SexpDate.= $_POSTL'expMonth'}."-": $expDate.= $_POSTL'expDay'J: Otro caso en el cual usted podria querer cambiar los datos antes de almace- narlos es cuando esta guardando nimeros telef6nicos. Los usuarios digitan los nimeros de teléfono en una variedad de formatos, usando paréntesis, ra- yas, puntos o espacios. En vez de almacenar esta variedad de formatos en su base de datos, usted podria s6lo guardar los nimeros. Luego, al recuperar un néimero telefénico de la base de datos, puede formatearlo como quiera antes de mostrarlo. El siguiente enunciado retira caracteres de la cadena: 2 Stelefono = ereg_replace("{ )(.-]"."*,$_POSTE ‘telefono’ J); La funcién ereg_rep]ace usa expresiones regulares para buscar un patrén. La primera cadena que se pasa es la expresién regular con la cual debe coin- cidir. Si cualquier parte de la cadena concuerda con el patrén, es reemplaza- 245 —— EE ————— 246 Panett PAP __——_______—— _ _— da por la segunda cadena. En este caso, la expresion regular es ( )(. 1.0 cual significa cualquiera de los caracteres entre los corchetes. La segunda ca- dena es "”, la cual es una cadena sin nada. Por lo tanto, cualquier espacio, pa- réntesis, puntos o guiones en la cadena son reemplazados por nada. Depurar los datos La secci6n anterior "Obtener informaci6n del usuario," la cual describe el uso de los formularios HTML, discute ‘como verificar los datos en Jos formularios. Los usuarios pueden digitar datos en un campo de texto, ya sea. accidental o malicio- samente, los cuales pueden causar problemas para su aplicacion, su base deda- tos 0 sus usuarios. Revisar los datos y aceptar ‘s6lo los caracteres esperados para la informacién solicitada. puede evitar muchos problemas. Sin embargo, us- ted puede pasar algo por alto. ‘Ademds, en algunos casos, la informacion que el usuario digita debe permitir basicamente: cualquier cosa. Por ejemplo, usted normalmente no permitiria los caracteres < y> en un campo. No obstante, po- dria existir una situaci6n en Ja cual el usuario, necesite digitar estos caracteres tal vez al digitar una formula 0 especificacion técnica que los requiera. PHP brinda dos funciones que pueden depurar Jos datos, hasta convertirlos en inofensivos: yt strip_tags: Esta funcidn retira todo texto encerrado entre delos: da- 6 tos. Busca un < de apertura y lo elimina junto con todo lo demas, hasta en- contrar un > de cierre o llegar al final de la cadena. Usted puede incluir etiquetas especificas que desea permitir. Por ‘ejemplo, el siguiente enunciado ee todas las etiquetas de una cadena de caracteres excepto "): 1 htm)special chars: Esta funcién cambia algunos caracteres &spe i Jes que tienen significado para HTMLa un formato HTML ave permita ‘n ningéin significado especial. Los cambios son mostrarlos «< se convierte en <: +> bse convierte en Sats #4 b se convierte en Samp; De esta forma, los caracteres < y > se pueden mostrar web sin ser interpretados por HTML como etiquetas. EI © ciado cambia estos caracteres especiales: $apellido = htmispecialchars($apel! ido) ¢ nuna pagina iguiente enun- Si usted esta seguro de que no desea permitir a sus usuarios digitar nits aa veeter co en un campo de un formulario, use strip_tags. Sin embargo, Si desea permitir los caracteres <0 >, puede almacenarlos con seguridad des- pués de que hayan sido procesados mediante ntnl speci Ichars tra funcin que deberia usar antes de almacenar los datos en su base de datos cee. Los usuatios amenudo digitan espacios al inicio o al final de un campo Capitulo 8: Datos entran, datos salen 2 7 de texto sin querer. Tr imelimina cualquier espacio al inicio 0 al final, para que no sean almacenados. Use el siguiente enunciado para eliminar estos espacios: Sapellido = trim($_POST[' apellido']); Agregar informacion nueva Se usa la consulta INSERT (descrita en el Capitulo 4) para ahadir informacién nueva a la base de datos. INSERT agrega una fila nueva a una tabla en una ba- se de datos. El formato general es Sconsulta = "INSERT INTO nombredetabla (col,col,col...) VALUES (‘var',*var‘,'var’...) Sresultado = mysql_query($consul ta) or die ("No se pudo ejecutar 1a consulta. Por ejemplo, los enunciados para almacenar el nombre y ntimero telef6nico que un usuario digité en un formulario son $primer_nombre = "Goliat™: // del campo dei formulario Sapellido = "Perez"; {/ del campo del fornulario Stelefono = "555-555-5555" 7/ del campo del formulario Sconsulta = “INSERT INTO Miembro (apellido,primer_nombre, telefono) VALUES (‘$apel lido’, '$primer_nombre’,"$telefono")"; Sresultado = mysq]_query(Sconsulta) or die ("No Se pudo ejecutar 1a consulta. La Lista 8-15 muestra un programa llamado guardartelefono. php, el cual almacena un nombre y numero telef6nico de un formulario. Lista 8-15: Programa que almacena datos de un formulario <2phj 7° Nombre de) programa: guardaTe} efona- oho * Descripcion: ET programa revisa todos los campos del formujario en busca de campos vacios y formato incorrecto. Guarda los campos correctos en una base de datos. “7 > Numero telefonico del miembro <2php Sprimer_nombre = strip_tags(trim(S_POSTL'primer_nombre’])); Sapellido = strip_tags(trim($_POSTL"apellido'})); Stelefono = strip_tags(trim(s_POSI[‘telefono"})): Stelefono = ereg_replace("[)(..-]","",$telefono); /* verificar informacion del formulario */ 248 Parte: PHP J* establecer serie de etiquetas de compos */ Sarreglo_etiquetas - array( “primer_nombre" => “Primer nombre", tapellido" => "Apel lido™, "telefono" => "Telefono*); foreach ($_POST as $campo => Svalor) /* reyisar cada campo en busca campos en blanco */ if C$valor == "* ) Sarreglo_blancol $campo} Vanco”; 1 elseif ( ereg("(nombre)",$campo) ) { if (lereg("*CA-Za-z' ~]{1,50)$",$_POSTLScampo}) ) ( 1 ) elseif ($campo if(lereg("*£0-9)( ~117,20) ((Lxx] | (ext) |(exd)70 -12L0 9111.7) 28", Svalor) $ma1_formatol$campo] = "malo": “telefono") { , | } // terminar foreach para $_POST 7* si algun campo no esta bien, mostrar mensaje de error y formulario */ if (@sizeof(Sarreglo blanco) > 0 0 @sizeot(snal_formato) > $ma1_formato[$campo] = "malo": {f (@sizeof(Sarregio_planco) > 0) /* desplegar mensaje de informacion faltante */ echo "No completo uno o mas campos obligatorios. Debe digitan:
" /* mostrar la lista de informacion faltante */ foreach($arreglo_blanco as $campo => $valor) { echo “  :4nbsp: {$arreglo_etiquetas($campo]
} } if (@sizeof(smal_formato) > 0) ( 7* mostrar mensaje de informacion incorrecta */ echo "Uno 0 mas campos tienen informacion que parece ser incorrecta. Corrija el formato de:
"s, J* desplegar lista de informacion incorrecta */ foreach($mal_formato as Scampo => $valor) { echo *  nbsp s  {Sarreglo_etiquetas[ $campo]]
J* volver a mostrar formulario */ LRARRRRE EEE EE ') Capitulo &: Datos entran, datos salen DAY echo "


(Sarreglo_etiquetast 'primer_nombre “Tis /br> {$arreglo_etiquetas[ 'apellido']}:< 7B>

"; exit ) else "1/34 Vos datos estan bien Susuario="admin®; Shuesped="locaThost": Sclave=""; $basededatos ~ "Directoriodemiembros Sconexion = mysql_connect ($huesped, Susuario,$clave) ‘or die ("No se pudo conectar al servidor*): Sdb = mysq)_select_db($basededatos,, Sconexion) ‘or die ("No se pudo seleccionar la base de datos"); Sconsulta = “INSERT INTO Miembro (apel lida. primer_nombre, telefono) VALORES C'$apellido".$primer_nonbre’ , “$telefono")": Sresultado = mysql_query (Sconsulta) or die ("No se pudo ejecutar Ta consulta."): echo "Miembro nuevo agregado a 1a base de datos
"; »! Este programa amplia el programa en la Lista 8-14. Revisa los datos en el formu lario en busca de campos vacios o formatos incorrectos, y le pide al usuario que ‘vuelva a digitar los datos cuando encuentra un problema. Silos datos estén bien, el programa los recorta, los depura y los almacena en la base de datos. : PHP El programa en la Lista $-15 es un programa de demostracién, el cual muestra ‘cémo afadir una sola linea a una tabla de una base de datos. Si usted usa este programa, s6lo puede agregar un cliente a la base de datos, pues el programa ho crea ni inserta un nombre de registro tinico. Es necesario borrar el cliente que agregé antes de poder correr el programa nuevamente. Este no es un pro- grama que se usarfa para agregar clientes en una situacion real, Tan s6lo se tra- ta de un programa de demostracién muy sencillo para mostrar los principios que se necesitan. La Lista 12-3 en el Capitulo 12 es un ejemplo de un programa real para afiadir clientes, el cual seria til en una aplicacién web verdadera. Su aplicacién podria necesita almaceanr datos en varios lugares diferentes. Una funcién que almacena datos de un formulario puede ser muy dtil. La si guiente es una {uncién que almacena todos los datos en un formulario: funcion guardadatos( $datosformulario, $nombretabla) i if (1is_array($datosformutarto)) l return FALSE: exit: 1 foreach (Sdatosformulario como $campo svalor) $$datosformulario [$campo} = trim($$datosformulario [$campo]); $$datosformulario [$campo] = strip_tags($sdatosformula- rio [$campo)): if ($campo == "telefono") ( [$campo] = S$datosformulari "*§ $datosformulario [$campo] ereg_replace("L)(.- } $serie_campol ]=$campo: Sserie_valor{ J=$$datosformulario ($campo}; Scampos=implode(",”,$serie_campo): $valores=imp]ode('","",$serie_valor); Sconsulta = "INSERT INTO Snombre_tabla ($campos) VALORS (\"$valores\")": Sresultado ~ mysql_query(Sconsul ta) or die ("No se pudo ejecutar Ta consulta."): return TRUE: ) La funci6n devuelve TRUE sitermina de insertar los datos sin ningéin error. Al principio, la funcién verifica silos datos pasados efectivamente son un arreglo. Si $datosformularionoes un arreglo, la funcion se detiene y devuelve FALSE. Observe que esta funcién sélo trabaja si los nombres de los campos en el for- mulario son iguales a los nombres de las columnas en la tabla de la base de datos. Ademas, observe que esta funcién asume que usted ya esta conectado al servidor MySQL y ha seleccionado la base de datos correcta. Al usar esta funci6n, esta es la altima parte del programa en la Lista 8-15: Capitulo 8: Datos entran, datos salen DS 7 else //si los datos estan bien ( Salmacenado ~ guardadatos($_POST,"Miembro"); echo “Nuevo miembro agregado a la base de datos
"; ' 2» Observe cuanto més facil de leer es este programa, con la mayoria de los enun- ciados en la funcion. Mas atin, esta funcién trabaja para cualquier formulario, siempre y cuando los nombres de los campos en el formulario sean iguales a los de las columnas en la tabla de la base de datos. Si la funci6n no es capaz de ejecutar la consulta, detiene la ejecucidn en ese punto e imprime el mensaje de error "No se pudo ejecutar Ta consulta". Sihay alguna circunstancia en Ja cual la consulta podria fallar, usted debe tomarla en cuenta Actualizar informacion existente La informacién existente se actualiza con la consulta UPDATE, tal y como des- cribo en el Capitulo 4. Actualizar significa cambiar datos en las columnas de filas que ya estén en la base de datos: no afadir filas nuevas a la tabla de la base de datos. El formato general es $consulta = "UPDATE nombretabla SET col-valor WHERE col=valor’ Sresultado = mysql_query($consulta) or die ("No se pudo ejecutar 1a consulta."); 10 de Goliat Por ejemplo, los enunciados para actualizar el ntimero telef6ni Pérez son $primer_nombre = “Goliat": // del campo del formulario Sapellido = "Perez"; 1/ del campo del formulario Stelefono = "555-555-5555" // del campo del formulario Sconsulta = "UPDATE Miembro SET telefono="$telefono’ WHERE apellido="$apellido* AND primer_nombre="$primer_nombre'*; $resultado = mysql_query($consulta) or die ("No se pudo ejecutar la consulta."); Sino usa una clausula WHERE en una consulta UPDATE, el campo SET se esta- blece para todas las filas. Kara vez es eso lo que usted desea hacer. La Lista 8-16 muestra un programa llamado actual izantelefono.php, el cual almacena un nombre y un némero telef6nico de un formulario, 252 Panett: PHP Lista 8-16: Programa que actualiza los datos Numero telefonico del miembro "Primer nombre*, Ssiqga@qiaqiqia “apellido" => "Apellido*, “telefono” => *Telefono"}; foreach ($_POST as $campo => $valor) /* revisar cada campo en busca de campos en blanco */ if ( $valor == "* ) $arreglo_blancol$campo] = “blanco”: ) elseif ( ereg("(nombre)",$campo) ) { if Clereg("*[A-Za-z* -]{1,50)$",$_POSTEScampol]) ) : $mal_formato[$campo] = "malo": } elseif ($campo == "telefono") { if(lereg(**C0-9)( -1(7,20) ((LxX] | (ext) | (ex))2f -1200 93(1,7))78",$valor)) $mal_formatof campo] = "malo™; } 3} 7* si algun campo/no estaba bien, mostrar mensaje de error y formulario */ iF (@sizeot(farregie. blanco) > 0 or @sizeof($mal_formato) > { if (@sizeof(Sarreglo_blanco) > 0) /* desplegar mensaje de informacion faltante */ echo *No completo uno 0 mas de Tos campos ob] igatorios. Capitulo 8: Datos entran, datos salen 253 Debe digitar:
/* mostrar. lista de informacion faltante */ foreach(sarreglo_planco. as Scampo =? svalor) echo “   nbs} $arreg]o_etiquetas[$campo]}
} f (@sizeof($mal_formato) > 0) /* desplegar mensaje de informacion incorrecta */ echo "lino 0 mas campos tienen informacion que parece incorrecta. Corrija el formato de:
"; /* esplegar lista de informacion incorrecta */ foreach($mal_formato as Scampo => Svalor) ( echo “Anbsp: :  {$arreglo_etiquetas{ campo] }
) ) /* volver a mostrar el formulario */ echo "


0' cellspacing="0° {Sarreglo_etiquetasl' primer_nombre" ]} : {$arreglo_et iquetasl'apel 1ido" J) : {Sarreg]o_etiquetasl' telefono’ ]}:

"; exit: } else //si los datos estan bien { Susuario="admin” Shuesped="localhost"; $claves"": Sbasededatos = “Directoriodemiembros”: Sconexion = mysql_connect ($huesped, Susuario, Sclave) 25 ly Parte nt: PHP or die ("No se pudo conectar a) servidor’): Sab ~ mysq)_select _db(Sbasededatos., $conexion) om Gter-tano se pudo seleccionar 1a base de datos"): Sconsulta = "UPDATE Miembro SET telefono-"$telefono’ WHERE apellido="Sapel)ido" AND primer_nombre=' sprimer_nombre’ "+ $resultado = mysql_query (consul ta) or die ("No se pudo ejecutar 1a consulta." .mysqi_error()): echo * El numero telefonico del miembro se ha ‘actualizado
": > El programa de la Lista 816, el cual actualiza la base de datos, cu idénti- eoee ia Lista 8-15, que agrega datos nuevos. Usar una consulta JPOATT ¢ ete programa (en lugar de la Consulta INSERT usada para anadir datos nue- Goa) es la principal diferencia. Ambos programas verifican los datos Y luego Jos dlepuran porque ambos programas almacenan datos en la base de datos. Poner la informacion en archivos Avveces, usted desea recibir un archivo completo de informacion dew) vss tho. tal como curriculos de usuarios para su sitio de busqueda de empleos, 0 fotos para su sitio web de dlbum fotogratico. O bien, imagine que esta cons- truyendo el catélogo a partir de informacién suministrada por el departamen- to dle Ventas. Junto con el texto descriptivo sobre el producto, quiere iit Ventas le proporcione una foto del producto. Usted puede ofrecer un formula rio que Ventas puede usar para cargar un archivo de imagen Usar un formulario para subir el archivo Puede mostrar un formulario que permite al usuario cargar un archivo ust do un formulario HTML disenado para dicho proposito. El formato general del formulario es el siguiente
Cinput type="File* name="archivo_usuario">
Observe los puntos siguientes en relacion con el formulario: Capitulo 8: Datos entran,datos salen 255 {7 ELatributo enctype se usa en la ctiqueta form. Usted debe fijar este atri- {| buto en mult ipart/form-data al subir un archivo, para garantizar que el archivo llegue correctamente | Seincluye un campo oculto que envia un valor (en bytes) para MAX_FILE. SI ZE. Siel usuario trata de cargar un archivo que es mas grande que este valor, no podrd hacerlo, Usted puede fijar este valor hasta un maximo de 2MB. Sinecesi ta subir un archivo mds grande, debera cambiar la configuraci6n predetermina- da para upload_max_filesize in php.ini aunntmero mayor antes de enviar un valor superior a 2MB para MAX_FILE_SI7£ en el campooculto, + El campo de input que carga el archivo es del tipo File. Observe que {el campo tiene un nombre (archi vo_usuar ia), al igual que los otros ti- pos de campos en un formulario, El nombre de archivo que el usuario di- gita en el formulario se envia al programa de procesamiento y esta disponible en el arreglo incorporado llamado FILES. Le explico la es- tructura e informacién en FILES en la siguiente secci6n. Cuando el usuario envia el formulario, el archivo se sube a una ubicaci6n tem poral. El script que procesa el formulario necesita copiar el archivo a otra ubi cacién, pues el archivo temporal se borra tan pronto como el script termina, Procesar el archivo cargado La informacién sobre el archive subido se almacena en el arreglo PHP incorpora- da llamada $_FILES. Hay un arreglo de informacién disponible para cada archi- vo que haya sido cargado, por lo cual $_ FILES es un arreglo multidimensional. Como con cualquier otro formulario, usted puede extraer la informacién del arreglo usando el nombre del campo. La siguiente es el arreglo disponible de $_FILES para cada archivo que se carga. $_FILESC ‘nombrecampo' }['nombre'] S$ FILESE‘nombrecampo' I[*tipo' } $_FILES[ ‘nombrecampo' }["nombre_temporal"] $_FILES['nombrecampo'J{‘tamafo') Por ejemplo, suponga que usa el siguiente campo para subir un archivo, co- mo se mostré en la seccién anterior: Siel usuario sube un archivo llamado test .txt usando el formulario, el arreglo resultante que puede usar el programa de procesamiento luce mas 0 menos asi: $_FILESLarchivo_usuario]{nombre] = test.txt S_FILESLarchivo_usuario][tipo] = texto/simple $_FILESCarchivo_usuario]Lnombre temporal] = O:\MINNT\php92C. tmp S_FILESLarchivo_usuariol[tamano] = 436 256 Parte: PHP _ Enestaserie, nombre es el nombre del archivo que se subi, t ipo es-el tipo de ar- chivo, nombre_temporal es laruta/nombre de archivo del archivo temporal y 435 es el tamaho. Observe que el nombre contiene s6lo el nombre de archivo, pe- ro nombre_temporal incluye la ruta del archivo ademas del nombre de archivo. rRRR* Siel archivo es demasiado grande para cargarse, el nombre_tenporal enel arreglo se establece en 11inguno, y el tamano se establece en 0. El programa de procesamiento debe mover el archivo subido desde la ubicaci6n temporal hasta una ubicacién permanente. El formato general del enunciado que mueve el ar- chivo es el siguiente move_uploaded_file( ruta/nombrearchivotemporal, ruta/nombrear chivopermanente) ; ruta/nombrearchivotemporal esta disponible en el elemento incorporado del arreglo $_FILESL'nombrecampo" . r ['archivo_temporal"). ruta/nombrea chi vopermanente es la ruta hacia el archivo donde usted desea almacenar el ar- chivo. El siguiente enunciado mueve el archivo subido en el campo de input, el cual tiene el nombre archi vo_usuar-io, mostrado anteriormente en esta seccion: move_uploaded_file($_FILES[ ‘archi vo_usuario" ]L‘nombre_temporal'] "cz \datos\new_file.txt") Eldirectorio de destino (en este caso, ¢: \datos) debe existir antes de poder mover el archivo hacia él. Este enunciado no crea el directorio de destino. La seguridad es un asunto importante cuando se trata de cargar archivos. Per- mitir que extrafios suban archivos a su PC es riesgoso; podria haber archivos maliciosos. Usted probablemente querra revisar los archivos en busca de tan- tos factores como sea posible después de que haya sido cargados, usando enunciados condicionales para chequear las caracteristicas del archivo, tales ‘como el tipo y tamaho de archivo esperados. En algunos casos, para tener cluso mas seguridad, seria una buena idea cambiar el nombre del archivo, de modo que los usuarios no sepan dénde estn sus archivos 0 como se Haman. Unir todo Un ejemplo completo de un script se muestra en la Lista 8-17. Este programa des- pliega un formulario para que el usuario suba un archivo, guarda el archivo subi- doy luego muestra un mehsaje después de que el archivo haya sido cargado exitosamente. Es decir, este programa despliega el formulario y lo procesa. El programa espera que el archivo subido sea un archivo de imagen, y lo prueba para asegurarse de que lo sea, pero cualquier tipo de archivo se puede subir. El c6digo HTML para el formulario esté en el archivo que se muestra en la Lista 8- 18, Una pagina web que despliega el formulario aparece en la Figura 8/15. Capitulo 8: Datos entran, datos salen D5 7 Lista 8-17: Script que sube un archivo usando un formulario POST E] archivo no se subio exitosamente. Verifique e1 tamafio del archivo. El archivo debe ser menor que 500K.
include("form_upload. inc"); exit; ! if(lereg("image",$ _FILES('pix'IJ['type'])) #16 { echo "E1 archivo no es una imagen. Por favor intente con otro archivo.
"; include("form_upload. inc"); exit: } else #23 ( Sdestino = ‘cz\datos'.*\\".$ FILESE*pix' JE ‘nonbre*}; Sarchivo_temporal = $_FILESE’pix']{‘*nombre_temporal'] move_uploaded_file($archivo temporal, $destino); echo "

E1 archivo se subio exitosamente: ($_FILESE" pix" }Etnombre"}) ({$_FILESL "pix" ]{*tamannioo']))

"; 1 ) > Aiadi nimeros al final de algunas de las lineas del script. El script se discute a continuaci6n, con referencia a estos niimeros: 5 Esta linea es un enunciado jf que prueba si el formulario ha sido enviado. Sino, el formulario se muestra incluyendo el archivo que contiene el cédi- go del formulario. El archivo que se incluye se muestra en la Lista 8-18, 9 Esta linea empieza un bloque e1 se que se ejecuta si el formulario se ha enviado. Este bloque incluye el resto del script y procesa el formulario en- viado y sube el archivo. 11 Esta linea es un enunciado if que prueba sil archivo se subié exitosamen- te. Sino, un mensaje de error se despliega, y el formulario vuelve a aparecer. lario para cargar. 258 Parte wt: PHP _______ — 16 Esta linea es un enunciado if que prueba si el archivo es una imagen. S no, un mensaje de error se desplega, y el formulario vuelve a aparecer. 23 Esta linea inicia un bloque @) se que se ejecuta si el archivo ha sido subi- do exitosamente. El archivo se mueve a su destino permanente, y apare- ce un mensaje que indica que el archivo se ha subido. La Lista 8-18 muestra el archivo que se incluye usado para mostrar el formu- Lista 8-1 ‘Archivo incluido que muestra el formulario para subir un archivo Subir un archivo
    <1i>Digite e7 nombre de archivo de la foto del producto que desea subir o use el boton Buscar para navegar por el archivo de imagenes. i .
  1. cuando la ruta hacia el archivo de la foto aparece en e €] campo de texto, haga clic en el boton Upload Picture.

Observe que el archivo incluido no contiene cédigo PHP, s6lo codigo HTML. Elformutario que permite alos usuarios elegir un archivo para subir se muestra en la Figura 8-15. El formulario tiene un campo de texto para digitar el nombre del archivo yun bot6n Browse que permite al usuario navegar hasta el archivo y seleccionarlo. igura 8-15: Formulario || trtrtirrcghrme mt que permite [2 Seesaw seme sseiat e a los usua ris subir un archiva de imagen. — Capitulo § Mover informacion de una pagina Web a otra En este capitulo Mover a su usuario de una pagina a otra Mover informacion de una pagina a otra Agregar informacion a un URL Echar un vistazo a las cookies Usar campos ocultos en los formularios Descubrir sesiones PHP L mayoria de los sitios web constan de mas de una pagina web. Esto inclu- 'ye paginas web estiticas que usted tal vez haya desarrollado en el pasado. Con las paginas web estaticas, los usuarios hacen clic en los vinculos para mo- verse de una pagina a la siguiente. Los usuarios hacen clic en un vinculo de una pagina web, y una nueva pagina aparece en su explorador. Cuando los usuarios se mueven de pagina en pagina de este modo, no se transfiere informacién dela primera pagina ala segunda. Cada pagina nueva que se envia al explorador del usuario es independiente de cualquier otra pagina que el usuario haya visto an- teriormente. Con las paginas web dinémicas, usted quizas necesite transferir nformacién de una pagina a otra. Si usted es un desarrollador de avanzado HTML, probablemente tenga algo de experiencia con métodos limitados para transferir informaci6n de una pagina a la siguiente usando formularios HTML y CGI (Common Gateway Interface) 0 cookies. Sin embargo, PHP es mucho mas poderoso para pasar informacién de una pagina web a otra. Mover a su usuario de una pagina a otra ‘Al usar slo HTML, usted proporciona vinculos para que el visitante pueda ir de una pagina a otra en su sitio web. Cuando usa PHP, sin embargo, tiene tres opciones para mover a st usuario de una pagina a otra: 260 rare PHP ———___—— ee 1 Vineulos: Puede hacer eco de las etiquetas HTML que despliegar vinew- Io. Elformato general de un enunciado HTML que despliega un vinculoes newpage.php*>Texto que e7 usuarios ve como vinculo i esta ten medio del archivo en alguna parte la pé- gina web apareceré en la etiqueta, yno al inicio del archivo. ?cadena=cadena: Elsigno de interroga- in permite agregar informacién al final del URL La informacién en formularios que usan el método get se pasa al final del URL en el formato nombredecampo=valor. Usted puede agregar informacion al final de un URL para pasarta a otra pagina. PHP auto- méticamente obtiene informacién del URL y la pone en series incorporadas. Usted puede pasar mas de un par de cadena=cadena separando cada par con un signo (8: por ejemplo, 7estado=CA&ci udad=hogar. a 262 Panew:PHP Enunciados que deben ir antes del output Algunos enunciados PHP sélo pueden usarse antes de enviar cualquier output. Los enunciados header y setcookie, ylas funciones session (todos ellos descritos en este capitulo), de- ben ir antes de enviar cualquier output. Si usted usa uno de estos enunciados después de enviar output, verd el siguiente mensaje: Cannot add header information headers already sent £1 mensaje también proporcionaré el nombre del archivo eindicaré cus linea envié et output anterior O bien, tal vez usted no vea un mensaje del todo; la pagina nueva simplemente no aparecera. (El que ‘vea un mensaje de error ono dependera del nivel de mensajes de error al que esta configurado PHP; Consulte el Capitulo 6 para més detalles), Los enunciados siguientes falarén porque el mensaje hea der no es el primer output: comprobar encabezado Se envian tres lineas de c6digo HTML antes del enunciado header. Los siguientes enunciados funcionarén, aunque no tienen mucho sentido: comprobar encabezado . Las siguientes enunciados fallarén: <2php header("Location: http://empresa.com"); 2» comprobar encabezado cinta La razén porla cual estos enunciadosfallan no es facilde ver pero, siusted observa cuidadosamen- {e,notard un espacio sencillo en blanco antes dela etiqueta PHP de apertura. Este espacio vacioes output para el explorador, aunque la pagina web resultante se vea vacia, Porlo tanto, el enunciado header falla porque hay output antes de él. Este es un error comin, dificil de detectar. Pir AL ad Capitulo 9: Mover informacién de una pagina Web a otra 263 dos a cont

Capitulo 9: Mover informacién de una pagina Weba otra 265 He aqui dos razones por las cuales tal vez no quiera pasar informacion en el URL: Seguridad: El URL aparece en la linea de direccién del explorador, lo cual significa que la informaci6n afiadida al URL también se ve. Si lai necesita ser segura, usted no querrd exhibirla tan pablicamente. Por ejem- plo, si esté moviendo una contrasefia de una pagina a la siguiente, proba- blemente no desea pasarla en el URL. Ademas, el URL puede ser marcado como favorito por el usuario. Puede haber razones por las cuales usted no £ quiera que sus usuarios guarden la informaci6n aitadida al URL. id de la cadena: Hay un limite sobre la longitud del URL. El limite difiere segin el tipo y la versi6n del explorador, pero siempre hay un mite. Por lo tanto, si est4 pasando mucha informacién, quizés no haya espacio para ella en el URL. Agregar informacién al URL es muy atil para una transferencia rapida y senc- Ila de datos. Por ejemplo, suponga que desea proporcionar una pagina web donde los usuarios puedan actualizar su ntimero telef6nico. Usted quiere que el formulario se comporte de la siguiente manera: 1. Cuando el usuario despliega el formulario por primera vez, el nimero telel6- nico dela base de datos aparece en el formulario, ce modo que el usuario puede ver cual es el niimero almacenado actualmente en la base de datos. 2. Cuando el usuario envia el formulario, el programa revisa el niimero tele- fonico para ver si el campo esté en blanco o si est en un formato que no podria ser un ntimero de teléfono. 3. Siel ndmero telefénico resulta correcto, se almacena en la base de datos. 4, Siel ndimero telefénico esta en blanco o tiene datos incorrectos, el progra- ma vuelve a enseiiar el formulario. Sin embargo, esta vez usted no quiere mostrar los datos de la base de datos. Por el contrario, desea mostrar los datos incorrectos que el usuario digit6 y envié en el campo del formulario, El programa most rarte1efono. php en la Lista 9-1 muestra cémo usar el URL para determinar si esta es la primera vez que se muestra el formulario o una subsiguiente. El programa muestra el nimero telefénico para el nombre de registro del usuario y permite al usuario cambiarlo. Lista 9- <2php 7* Nombre del programa: mostrarTel. php * Descripcion: Muestra el numero telefonico recuperado de ja base de datos y permite al usuario cambiarto, rograma que muestra el numero telefénico en un formulario */ 2 Mostrar numero telefonico <2php © 266 Parte: PHP $huesped="localhost* $usuario="admin”; $clave=""; $basededatos="Director iodemiembros"; Snombre_entrada = "gperez"; // pasado de 1a pagina i anterior Sconexion = mysql_connect ($huesped, susuario, $clave) or die ("No se pudo conectar a] servidor "): Sdb = mysql_select_db( $basededatos , $conexion) or die ("No sé pudo seleccionar la base de datos") if (@$_GETE'primero] == "no") 1 i $telefono = $_POST(' telefono]: Ff Clereg("*0-9)( -J17,20) ((Cxx] | (ext) | (ex)) 20-3200 9111,7})2$" ,Stelefono) or $telefono == 7") echo "

£] numero telefonico parece no ser valido.
} else 1 Sconsulta = "UPDATE Miembro SET telefono='$telefono" WHERE nombrenetrada~' §nombreentrada’ Soutput = mysgl_query(Sconsulta) or die ("No se pudo ejecutar 1a consulta."); echo "Numero telefanico ha sido actualizado.
*; exit: } ) else { Sconsulta = "SELECT telefono FROM Miembro WHERE nombreentrada="$nombreentrada’ Soutput = mysgl_query($consulta) or die ("No se pudo ejecutar 1a consulta $fila = mysql_fetch_array ($output); extract($fila): ) /* Mostrar telefono del usuario en formulario */ echo “
!

$nombrenetrada
ered emma Post'> "0" cellspacing="0" $telefono’ > 20° value oN Capitulo 9: Mover informacién de una pagina Web aotra 267 i‘
"; D Observe los siguientes puntos claves sobre este programa: + Elmismo programa despliega y procesa el formulario. Elnombre de este programa es most rarte]etono.. php. Observe que la etiqueta formnular i oin- cluye act ion=mostrartelefono. php, lo cual significa que, cuando el usuario hace clic en el bot6n de envio, el mismo programa corre nuevamente. » Se agrega informacién al URL. La etiqueta formu]ario incluye ac tion=mostrartelefono.php?first-no, Cuando el usuario hace clic en el botén de envio y mostrartelefano. php corre por segunda vez, la varlable $primero se pasa con el valor "1 PPR EO + El valor que se pasé para primero en el arreglo incorporado $_GET se revisa al inicio del programa. Esto es para ver si esta es la primera vez que el programa corre. Si $_GET[primero] es igual a "no’, el niimero telef6nico se revisa. | $_GET[primero] sélo es igual a no si el formulario esta siendo enviado. $_GEI [primero] no es igual a no si esta es la primera vez que se atra- viesa por el programa, DY * Siel ntimero telefénico esta bi y el programa termina. mn, se almacena en la base de datos * Si el ndmero de teléfono no esta bien, aparece un mensaje de error. > Si $_GET[primero] no es igual a "no", el ntimero de teléfono se recupe- | rade la base de datos. En otras palabras, si $_GET [primero] no es igual a no, se trata de la primera vez que el programa corre. El programa § — deberia conseguir el nimero telefonico de la base de datos. V Siel programa alcanza los enunciados que despliegan el formulario, éste | sera mostrado. Si esta no es la primera vez que se atraviesa por el programa y 5 seenvi6 un numero telefénico correcto, el niimero se almacena en la base de datos, y el programa se detiene. Nunca llegar hasta los enunciados que des pliegan el formulario. En todos los demas casos, el formulario se mostraré. El formulario desplegado por el programa en la Lista 9-1 se muestra en la Fi gura 9-1: se ilustra la apariencia de la pagina web al aparecer por primera vez. Observe que el URI. en el campo de direccién del explorador no tienen ningu- na informaci6n afiadida, La Figura 9-2 muestra los resultados cuando un usuario digita un ndmero tele- fonico sin sentido en el formulario de la Figura 9-1. Observe que el URL en el campo de direccidn del explorador tiene ahora ?primero=no agregado al final. 268 Pare PHP ee io th — Figura 941: Formulario HTML para actualizar tun ndmero telefénico. — Jo and correct iif necessary: — Figura 9-2: Formulario HTML cuan- do un usua- rio envia un numero teleténico sin sentido. —— \ \ ( Capitulo 9: Mover informacién de una pagina Web a otra 2OQ Almacenar informacion mediante cookies Usted puede almacenar informaci6n como cookies. Las cookies son pequefias canti- dades de informacién que contienen parejas var ab le=va lor, parecidas alas pa- rejas que pueden agregarse al URL. El explorador del usuario almacena las cookies enel PC del usuario, Su aplicacién puede luego obtener la cookie de cualquier pagi- naweb. Por qué se les llama cookies (galletas, en inglés) es uno de los grandes miste- rios de la vida, Tal vez sea porque, a primera vista, parecieran ser algo maravilloso; pero, al examinarlas més de cerca, usted se da cuenta de que no le hacen muy bien Para algunas personas en algunas situaciones, las cookies no son ttiles para nada. A primera vista, las cookies parecen resolver todo el problema de mover datos de pagina en pagina. S6lo meta una cookie en el PC del usuario y consigala cuando la necesite. De hecho, la cookie se puede almacenar de modo tal que permaneceré ahi después de que el usuario deje su sitio y estara disponible cuando el usuario entre a su sitio web de nuevo, un mes después. Problema r suelto! Bueno, no realmente. Las cookies no estén bajo su control: estan bajo el control del usuario. El usuario puede en cualquier momento borrarlas. De he- cho, los usuarios pueden configurar sus exploradores para rehusarse a acep- tarlas. Y muchos usuarios las rechazan o las borran rutinariamente. Muchos usuarios no se sienten cémodos con la idea de que un extraio almacene cosas en sus PCs, especialmente archivos que permanecen alli incluso después de dejar el sitio web del extrafio. Es una actitud comprensible. Sin embargo, defi- nitivamente limita la utilidad de las cookies. Si su aplicacién depende de ellas y el usuario las tiene desactivadas, su aplicaci6n no funcionara para él. Las cookies fueron diseiadas originalmente para almacenar pequefias cantida- des de informacién por periodos cortos de tiempo. A menos que usted especi- ficamente configure la cookie para permanecer durante un perfodo mas largo de tiempo, ésta desaparecera cuando el usuario deje su sitio web. Aunque las cookies son titiles en algunas situaciones, usted probablemente no las nece: taré en su aplicaci6n con base de datos para la Web, por estas razones: j Los usuarios configurar sus exploradores para rechazar cookies. A me- | nos que usted sepa con certeza que todos sus usuarios tendran las coo- 4 kies activadas 0 pueda solicitarles que las activen (y espera que ellos respondan favorablemente), las cookies son un problema. Si su aplica- cin depende de ellas, no funcionaré si estan desactivadas. » PHP tiene caracteristicas que funcionan mejor que las cookies. Empezan- do con PHP 4, PHP incluye funciones que crean sesiones y almacenan infor- macién que est disponible durante toda la sesi6n, Esta caracteristica de sesiones es mas confiable y muchos mas facil de usar que las cookies para 4 poner lainformacién disponible en todas las paginas web en una sesién. Las sesiones no funcionan para almacenar informacién a largo plazo, pero las bases de datos MySQL pueden usarse con ese propésito. Puede almacenar datos en su base de datos. Su aplicacién incluye una base de datos donde puede almacenar y recuperar datos, la cual gene- 270 Pane PHe ralmente es una mejor soluci6n que una cookie. Los usuarios no pueden borrar los datos en su base de datos en. forma inesperada. Como usted estd usando una base de datos en esta aplicacion, puede usarla para cualquier almacenamiento de datos que necesite, especialmente el alma- | | Cenamiento a largo plazo. Las cookies son mas ttiles para aplicaciones © que no hacen uso de bases de datos. Las cookies se almacenan por medio de la funcin set cook ie. El formato general es setcookie( "variable", "valor"); variable es el nombre de la variable, pero no incluya el signo de dolar (8). Este enunciado almacena la informacién s6lo hasta que el usuario salga de su sitio web. Por ejemplo, el siguiente enunciado setcookie("estado”,"CA"); almacena CA enuna variable cookie lamada estado. Después de configurar Ja cookie, a informacion estara disponible para sus otros programas PHP en clelemento de un arreglo incorporado como $_ COOKIE Ces tad]. No neces ta hacer nada para obtener la informaci6n de la cookie. PHP to hace autom: ticamente. La cookie no estar disponible en el programa donde esta configurada. El usuario debe ir a otra pagina o volver a mostrar la pagina ac- tual antes de que la informacién de la cookie pueda usarse. Las cookies también estan disponibles en un arreglo llamado $#TTP_COOKIE “Vans con los nombres de variables como claves. Por ejemplo, el valor en la Cookie configurada en el ejemplo anterior también se puede usar como SHTTP_COOKTE. VARSL' estado’ J. Esta serie integrada debe usarse si est usando una versiGn de PHP anterior a PHP 4.1. Si desea que la informacién almacenada en una cookie permanezca en un ar- chivo enel PC del usuario después de que el usuario éste abandone su sitio web, configure su cookie con un tiempo de expiracién, como sigue: setcookie( "variable", "valor", tiempodeexptracion); El valor t iempodeexpiraci on establece el tiempo cuando la cookie expirard tiempodeexp i raci on generalmente se establece usando la funcion time 0 mkt ine como sigue: time: Esta funcién devuelve el tiempo actual en un formato que el PC |” puede entender. Se usa la funcién time mas un ntéimero de segundos para Establecer el tiempo de expiraci6n de la cookie, como se muestra en los enunciados siguientes: setcookie( "estado", "CA", time()+3600); //expira en 1 hora setcook!e "Nombre* sHonbre,t¥me()+(3786400)2// expira en as Capitulo 9: Mover informacién de una pagina Web aotra 27 7 & mkt ime: Esta funcién devuelve una fecha y hora en un formato que el § PC puede comprender. Usted debe proporcionar la fecha y hora desea- | das en el siguiente orden: hora, minuto, segundo, mes, dia y ajo. $i cual- quier valor no se incluye, se usa el valor actual, La funcién mkt ime se utiliza para configurar el tiempo de expiracién de una cookie, como se 4 muestra en los enunciados siguientes: setcookie("estado","CA" mktime(3.0,0.4,1,2003)); a //expira @ las 3:00 AM el 1 de abril, 2003, | setcookie(estado", "CA", mktime(12,0,0,,.)): //expira al mediodia de hoy Puede remover una cookie al establecer su valor en nada. Cualquiera de los cnunciados siguientes retira la cookie: setcookie( "nombre setcookie( "nombre", **); Empero, la funcién set. cookie tiene una limitacién importante. S6lo puede usarse antes de enviar cualquier output. No se puede establecer una cookie a Ja mitad de un programa, después de haber hecho eco de algtin output hac la pagina web. Consulte el cuadro "Enunciados que deben ir antes del out- put’, anteriormente en este capitulo. Pasar informacion con formularios HTML El modo mas comin de pasar informacién de una pagina aotraes a través de for- mularios HTML. Un formulario HTML se despliega con un bot6n de envio. Cuan- do el usuario hace clic en el bot6n, la informacién en los campos del formulario se pasa al programa incluido en la etiqueta del formulario. El formato general es
El.uso més comin de un formulario es recopllar informaci6n de los usuarios (el cual comento en detalle en el Capitulo 8). Sin embargo, también se pueden usar formularios para pasar otros tipos de informaci6n usando campos ocul- tos, los cuales se agregan al formulario y se mandan con la informacién que el usuario digit6. De hecho, usted puede crear un formulario que tenga énica- mente campos ocultos. Siempre necesitaré un bot6n de envio, y la pagina nueva no se desplegara hasta que el usuario no haga clic en él, pero no hace falta incluir ningtin campo para que el usuario complete. Por ejemplo, los enunciados siguientes pasan el color de fondo preferido por el usuario a la proxima pagina cuando el usuario hace clic en un botén llama- do Siguiente pagina: 272 Parte lt: PHP __ 4, Obtiene las variables del archivo de la sesi6n para cada nueva pagina de sesi6n: Cuando un usuario abre una pagina nueva que es parte de la sesion, PHP consigue las variables del archivo usando el niimero de identificacion de sesiGn que fue pasado de la pagina vieja y lo pone en el arreglo incorporado $_SESSION. Usted puede usar los elementos del arreglo con el nombre de la variable como clave, y tienen el valor que usted asigné en la pagina anterior, Las sesione no funciona a menos que track_vars esté activado. A partir de PHP 4.0.3, track-vars siempre esta activado. Para versiones anteriores a 4.0.3, la opein ~enable-track- vars deberia usarse al instalar PHP. Si los usuarios tienen las cookies desactivadas, las sesiones no funcionaran a no ser que trans~sid esté activado. Aprenda cémo activar y desactivar trans-sid mis adelante, en la seccién "Usar variables de sesion PHP Abrir sesiones Usted deberia abrir una sesién en cada pagina web. La sesion se abre con la funcién session_start, como sigue: session_start(): La funcién primero revisa si hay un niimero existente de identificacién de sesion. Si encuentra uno, configura el arreglo $_SESSION.Sino encuentra ninguno, em- pieza una sesién nueva al crear un nuevo ntimero de identificacién de sesién. Puesto que las sesiones usan cookies si el usuario las tiene activadas, session_start esta sujeto a la misma limitacién que las cookies. O sea, se debe llamar a la funcion session_start antes de enviar cualquier out- put. Puede leer los detalles completos en el cuadro "Enunciados que deben ir antes del output”, anteriormente en este capitulo, Usted puede decirle a PHP que cada pagina en su sitio deberia empezar auto- maticamente con session_start. Para hacer esto, edite el archivo de confi- guracion php. ini. Siusted es el administrador de PHP, puede editar este archivo; de lo contrario, pida al administrador que lo haga, Busque la varia- ble session. auto_start y establezca su valor en 1. Tal vez deba reiniciar el servidor web antes de que esto surta efecto. Con auto_start activado, no necesita agregar session_start al principio de cada pagina. Usar variables de sesién PHP Cuando desea guardar una variable como una variable de sesi6n (es decir, una que esté disponible en otras paginas web que el usuario podria visitar; guardela en el arreglo $_SESSION, ast $_SESSIONL' nombredevariable'] = valor; 274 Panett: PHP ___ oo . ’ El valor de la variable estara entonces disponible en el arreglo $ SESSION en otras paginas web. Por ejemplo, usted puede almacenar el estado donde vive el usuario usando el siguiente enunciado: " $_SESSIONE'estado'] = "CA": Luego puede utilizar $_SESSIONE' estado ] en cualquier otra pagina web, y tendra el valor CA Los dos siguientes programas muestran cémo usar sesiones para pasar informa- cin de una pagina a la proxima. E] primer programa, test session] .phpenla Lista 9-2, muestra la primera pagina donde empieza la sesion. La Lista 9-3 mues- trael programa testsess ion2. php para la segunda pagina de una sesién, Lista 9- " : Empezar una sesion tle>Prueba de pagina Sesiones 1 ira la proxima pagina "> D Observe que dos variables estan configuradas en este programa para que sean pasadas a la segunda pagina. Se crea la variable de sesiGn sess i on_var. ‘AdemAs, se despliega un formulario con una variable oculta form_var, la ‘cual también se pasa a la segunda pagina cuando se oprime el botén de en- vio. Ambas variables estan establecidas en “prueba”. Lista 9-3: Segunda pagina de una sesion <2php session_start(); D Prueba de pagina Sesiones 2</titler</head> <body> <aphp echo “session_var = {$ SESSTON['s']}<br>\n" gotcha: formar = {$ POSTE’ form_var’ 1) <br>\n* <body></tm > | Capitulo 9: Mover informacién de una pagina Web aotra 275 Dirija su buseador a testsession 1 php y luego haga clic en el botdn de envio que dice Ir a la siguiente pagina. Entonces, verd el siguiente output de sessionTest2. php session_var = prueba form.var = prueba Como las sesiones funcionan de maneras diferentes para los usuarios con las cookies activadas y aquellos que las tienen desactivadas, usted deberia probar los dos programas en ambas condiciones, Para desactivar las cookies en su ex- plorador, se cambian las configuraciones para las opciones o preferencias. Para desactivar las cookies en Internet Explorer, siga estos pasos: 1, Escoja Herramientas'> Opciones de Internet. Se abre el recuadro de didlogo Opciones de Internet. 2. Haga clic en la pestafia Seguridad en IE 5.5 0 la pestaita Privacidad en 1E6. 3. Haga clic en el icono de Internet para resaltarlo. 4. Haga clic en el bot6n Nivel Personalizado, Aparece el recuadro de didlogo Configuracién de Suguridad 5. Desplicese hasta la seccién Cookies y seleccione Deshabilitar para ca- da una de las configuraciones de cookie. 6. Haga clic Aceptar. Para desactivar las cookies en Netscape Navigator, siga estos pasos: 1. Escoja Editar’>Referencias. 2. Resalte Avanzadas. 3. Marque Deshabilitar Cookies. 4. Haga clic en Aceptar. Si el output de testsession2 muestra un valor en blanco para $session_var cuando desactiva las cookies en su buscador, probable- mente sea porque trans sid no esta activado. Puede activarlo en su archivo pip. ini. Encuentre la siguiente linea: session.use_trans_sid = 0 no puede arreglar este problema, toda- n Cambie el 01a 1 paraactivar trans-sid via puede usar sesiones, pero debe pasar el ntimero de identificacion de la sesi en sus enunciados de programaci6n, ya que PHP no lo pasar automaticamente cuando las cookies estan desactivadas. Para més detalles sobre cOmo usar sesio- nes cuando trans-sidno esta activado, consulte la siguiente secci6n, |: PHP — ert Para PHP 4.1.2 oanterior, trans-sid no esta disponible a menos que haya si do activado usando la opcion --enable-trans-sid cuando PHP se compil. Sesiones sin cookies Muchos usuarios desactivan las cookies en sus exploradores. PHP revisa el ex: plorador del usuario para ver si se permiten las cookies y se comparta de acuer- do con esto. Siel buscador del usuario permite cookies, PHP hace lo siguiente: & v Establece la variable $PHPSESS10 igual al nimero de identificaci6n de la sesion. + Usa cookies para mover $PHPSESSID de una pagina a otra J explorador del ustiario no acepta las cookies, PHP hace lo siguiente: Establece una constante llamada SID. La constante contiene una pareja variable=valor que luce como PHPSESSID=unalargacadenadenumeros |» Podria mover el niimero de identificacién de sesién de una pagina a otra, y podria no hacerlo, dependiendo de si trans-sid esta activado. Si | estd activado, PHP pasa el ntimero de identificacion de la sesi6n; si est 5 desactivado, PHP no pasa el niimero. Activar trans-sid tiene ventajas y desventajas. La ventaja es que las sesiones funcionan sin problemas incluso cuando los usuarios desactivan las cookies. ‘También es mucho més facil programar sesiones con trans-sid activado. La desventaja es que el ntimero de identificacin de sesin a menudo se pasa en ] URL. En algunas situaciones, este némero no deberia mostrarse en la direc- cin del explorador. Ademas, cuando el niimero esté en el URL, el usuario lo puede marcar como favorito. Luego, si el usuario regresa a su sitio usando la marca de favorito con el mimero de identificacién de sesion en ella, el nuevo numero de identificacion de sesi6n de la visita actual se puede confundir con el ntimero viejo de la visita anterior, y probablemente cause problemas. Sesiones con trans-sid activado Cuando trans. sid esta activado y el usuario tiene las cookies desactivada: PHP automaticamente envia el nimero de identificaci6n de sesién en el URL ‘© como un campo oculto en un formulario. Si el usuario se mueve a la pagina siguiente usando un vinculo, una funcién header 0 un formulario con el méto- do get, el nimero se agrega al URL. Si el usuario se mueve a la pagina siguien- te usando un formulario con el método post, el ntimero se pasa en un campo oculto. PHP reconoce $PHPSESSID como el nimero de identificacién de la se- sin y maneja la sesion sin ninguna programacion especial de su parte. Capitulo 9: Mover informacién de una pagina Webaotra D7 7 El ntimero de identificaci6n de la sesi6n s6lo se anade alos URLs de las pagi nas en su sitio web. Si el URL de la pagina siguiente incluye el nombre de un servidor, PHP asume que el URL esté en otro sitio web y no afiade el namero de identificacién de la sesi6n. Por ejemplo, si su enunciado de vinculo es <a_href="paginanueva. php"> PHP afadira el mimero de identificacién. Sin embargo, si su enunciado es <a href="HTTP://www. empresa. com/paginanueva.php"> PHP no lo agregara. Sesiones con trans-sid desactivado Cuando trans~sidno esta activado, PHP no envia el nimero de ident de la sesi6n a la siguiente pagina cuando los usuarios tienen las cookies desac- tivadas. Més bien, usted mismo debe enviar el niimero de identificacion. Afortunadamente, PHP proporciona una constante que usted puede usar pa- ra mandar la identificaci6n de sesién usted mismo. Una constante es una va~ riable con informacién que no puede modificarse. (Describo las constantes en el Capitulo 6). La constante que PHP proporciona se llama SID y contiene una pareja variable=valor que usted puede agregar al URL, como sigue: <a href="paginasiguiente.php2?<?php echo SID2>" > pagina si- guiente </a> Este enunciado de vinculo agrega un signo de interrogacién (2) y la constante SID a1 URL. SID contiene el nimero de identificacién de sesién, formatea- do como variable=valor. El output de echo 51D luce mas 0 menos asi: PHPSESS1D=877c22163d8df9deb342c7333cfe3Ba7 Por lo tanto, el URL que se envia es <a bref*"paginasiguiente. phpZPHPSESSI0=677¢22163d8df9deb242c7333cFe3Ba7> pagina siguiente </a> Por alguna de varias razones (las cuales comento en la seccién "Agregar in- formacién al URL’, anteriormente en este capitulo), tal vez usted no quiera que el nimero de identificaci6n de la sesi6n aparezca en el URL mostrado por el explorador. Para impedirlo, puede mandar el ntmero de identificacion en un campo oculto de un formulario usando el método post. Primero, consi- ga el niimero de identificacién de la sesién; Iuego envielo en un campo ocul- to, Los enunciados para hacerlo son 278 Pane itt: PHP <?php §PHPSESSID = session_id()s echo "<form action="paginasiguiente.php’ method=" POST’? <input. tyne="oculto' nombres" PHPSESSID" valor="$PHPSESSID! > <input type: f </form>": Pagina siguiente'> D Estos enunciados hacen lo sig 1. Almacenan el nimero de identificaci6n de la sesién en una variable Ila. mada $PHPSESS10. Usan la funcién sess ion_id, la cual proporciona el niimero de identificaci6n de la sesi6n actual 2. Mandan $PHPSESSIO en un campo oculto de un formulario, En la pagina nueva, PHP autométicamente usar $PPSESS10 para conseguir cualquier variable de sesi6n, sin ninguna programacion especial de su parte Hacer privadas las sesiones Las funciones de sesion de PHP son ideales para sitios web que son restringidos y requieren que los usuarios se registren con un nombre ce ingreso yuna contrase- ha Esos sitios web indudablemente tienen muchas paginas, y usted no querra que el usuario deba conectarse en cada pagina. Las sesiones PHP pueden deter- ninar si el usuario se ha registrado ono, y rechazar el acceso alos usuarios que no estén registrados, Puede usar sesiones PHP para hacerlo siguiente: 1. Mostrar a los usuarios una pagina de registro, 2 “un usuario se registra satisfactoriamente, establece y almacena una variable de sesién. 3, Cada vez que el usuario vaya a una pagina nueva, revisa la variable de sesion para ver si el usuario se ha registrado. 4, Siel usuario ya se registré, muestra la pagina, 5, Si el usuario no se ha registrado, muestra la pagina de registro, Para verificar si un usuario se ha registrado, agregue los siguientes enuncia- dos en la parte superior de cada pagina <?php session_start( if ( @S_SESSION( login’) ci) header("Location: paginaderegistro.php"): exitt 1 > i — iN N Capitulo 9: Mover informacién de una pagina Web aotra D 79 En estos enunciados, $_SESSION(1ogin1_es una variable de sesién que se establece en "si" cuando el usuario se registra. Los enunciados verifican si $_SESSION( Jogin] es igual a'"si". Sino lo es, el usuario no esta registrado, y se le envia ala pagina de registro. Si $_SESSTONL1ogin] es igual asi’, el programa sigue adelante con el resto de los enunciados en la pagina web. Cerrar sesiones PHP Para sesiones restringidas en las cuales los usuarios deben registrarse, a me- nudo usted quiere que los usuarios se desconecten cuando hayan terminado. Para cerrar una sesién, use el enunciado siguiente session_destroy(): Este enunciado se deshace de toda la informaci6n sobre variables de sesién almacenada en el archivo de sesién. PHP ya no pasa el nimero de identifica- ion de la sesion a la siguiente pagina. No obstante, el enunciado no afecta a las variables que estén configuradas en la pagina actual: siguen teniendo los mismos valores. Si desea eliminar las variables de la pagina actual (ademas de impedir que pasen a la pagina siguiente) suprimalas con este enunciado: unset($_SESSION ); PURE URERURE D Parte IV Aplicaciones Por Rich Tennant “La nueva tecnologia realmente me ha ayudado a organiaarme. Guardo los informes de mis proyectos debaje del PC, los presupuestos debajo de mi PC portatil, y los memorandos debaje de mi lecalisader’. En esta parte... E esta parte, usted aprende a tomar el pan y la infor macién para iniciar ce la Parte I, la informacién sobre MySQL de la Parte Il y la informacion sobre PHP de la Parte Illy a juntarlo todo en una sola aplicacién con base de da- tos para la Web. Los Capitulos 11 y 12 le presentan dos apli- caciones de muestra, incluyendo sus bases de datos y todos sus programas PHP. Capitulo 10 Unirlo todo En este capitulo Organizar toda su aplicaci Organizar programas indi ales Hacer que su aplicacién sea segura Documentar su aplicaci6n L: capitulos anteriores de este libro le brindan las herramientas necesa- rias para construir su aplicaci6n con base de datos para la Web. En la Parte |, usted aprendié como funcionan PHP y MySQL y cémo tener acceso a ellos. Ademas, descubrié qué debe hacerse para construir su aplicacién y en qué orden hacerlo. En la Parte Il, averigué cémo construir y usar una base de datos MySQL. En la Parte Ill, descubrié cudles caracteristicas tiene PHP y c6- mo usarlas. Ademés, esta parte también explic6 cémo mostrar informacion en una pagina web, recopilar informacién de los usuarios y almacenar la in- formaci6n en una base de datos. Ahora, esté listo para unirlo todo. En este capitulo, le muestro cémo juntar todas las piezas para formar una aplicacién completa. Para hacerlo, usted debera 8 Organizar la aplicacion Asegurarse de que la aplicaci6n es segura 5 Documentar la aplicacién Aqut le describo cada uno de los pasos en detalle. Organizar la aplicacion Organizar la aplicacién es para beneficio suyo. En lo que respecta a PHP, la aplicacin podria tener 8 millones de enunciados PHP en una sola linea de un archivo del PC. A PHP no le importan las lineas, las sangrias ni los archivos. Sin embargo, los humanos escriben y dan mantenimiento a los programas para la aplicacién, y los humanos si necesitan organizacién. Las aplicaciones requie- ren de dos niveles de organizacién: 284, Pare tv: Aplicaciones oe, ) Elnivel de la aplicacién: La mayoria de las aplicaciones necesita mas de un programa para tener funcionalidad completa. Usted debe dividir + fas funciones de la aplicaci6n en un conjunto organizado de programas Elnivel del programa: La mayoria de los programas realizan mas de una tarea especitica, Es necesario dividir las tareas del programa en sec- ciones dentro del programa. Organizarse en el nivel de la aplicacion En general, las aplicaciones con bases de datos parala Web consisten en uh programa por pagina web. Por ejemplo, tal vez usted tenga un programa que proporcione un formulatio para recopilar informacion y un programa para al vaconar la informacion en una base de datos, el cual le dice al usuario que los datos han sido almacenados. Otro fundamento de la organizaci6n es un programa por tarea principal. Por ejem plo, usted podria tener un programa para presentar el formulario y un programa que v macene los datos en una base de datos. Para las aplicaciones web, la mayoria de jas tareas importantes conilevan enviar una pagina web. Recopilar los datos de los usuarios requiere de una pagina web paraeel formulario HTML (Hyper Text Markup Language 6 Lenguaje de Marcado de Hipertesto, por sus siglas en inglés); proporcicr nar informacion sobre los productos alos clientes requiere de paginas web:y cuan- do usted almacena datos en una base de datos, generalmente desea enviar una pagina de confirmacién al usuario indicando que los datos fueron almacenados Un programa por pagina web o un programa por tarea principal no es una rela, sino inas bien una gufa. La nica regla relacionada con la organizaci6n es que deta debe ser clara y fécil de entender. Y esto es totalmente subjetivo. Aun asi, Ja organizacion de una aplicacion como el Catalogo de mascotas no necesita ser demasiado complicada. Suponga que el disefio del Catilogo de mascotas exige {que la primera pagina enumere todos los tipos de mascotas (tales como gatos perros y pajaros) entre los cuales el usuario puede seleccionar. Entonces, van Fo el usuario haya seleccionado un tipo, todas las mascotas en el catdlogo para ese tipo se muestran en la siguiente pagina web. Una organizacion razonable se- tia tener dos programas: uno para mostrar la pagina con los tipos de mascotas yotro para mostrar las mascotas segiin el tipo de mascota escogido. Estas son algunas sugerencias adicionales para organizar sus programas: + Escoja nombres muy descriptivos para los programas en su aplicacién. Los nombres de los programas son parte de la documentaci6n que hace que su aplicacién se pueda entender. Por ejemplo, nombres ities para los programas del Catalogo de mascotas serian MostrarT iposdemasco tas.php y MostrarMascotas. php. Seacostumbra, aunque no es requ sito, empezar los nombres de programas con una letra mayiscula. El uso de mayasculas 0 minasculas no es importante para los nombres de los | programas en PCs con Windows, pero si es muy importante para PCs con Capi lo 10:Uniriotodo DES Unix/Linux. Ponga atencién a las letras maytisculas y mindsculas de mo- do que sus programas puedan correr en cualquier PC si fuese necesario. + Ponga los archivos de los programas en subdirectorios con nombres significativos. Por ejemplo, ponga todos los archivos de imagenes en un | directorio llamado imagenes. Si sélo tiene tres archivos, podria bastar- ¥ leun solo directorio, pero buscar entre docenas de archivos un archivo © especifico puede hacerle perder mucho tiempo. Organizarse en el nivel del programa Un programa individual bien organizado es muy importante por las siguien- tes razones: f © Es mas facil de escribir. Cuanto mejor organizado esté su programa, ms facil sera para usted leerlo y comprenderlo, Puede ver lo que el pro- grama hace y arreglar cualquier problema con mayor rapidez. « Esmés fécil para otros entenderlo. Tal vez otros necesiten comprender su programa, Después de cobrar esa enorme herencia y partir hacia la Isla, del Mar del Sur que compr6, alguien mas tendra que darle mantenimiento < asuaplicaci6n. {| * Esmés facil para usted darle mantenimiento. Sin importar cuan a fondo usted la pruebe, su aplicacién probablemente tendra uno o dos proble- mas. Cuanto mejor organizado sea su programa, més facil ser para usted encontrar y reparar los problemas, especialmente seis meses después. Esmiés facil de cambiar. Tarde o temprano, usted o alguien mas debera cam- biar el programa. Las necesidades de los usuarios podrian cambiar. Las nece- sidades de su negocio podrian cambiar. La tecnologia podria cambiar. La capa de ozono podria cambiar, Por una raz6n u otra, el programa necesitara modificarse. Averiguar qué hace el programa y como lo hace, para poder cambiarlo, resulta mucho més facil si esta bien organizado. Le garantizo que usted no recordaré los detalles; s6lo deberé poder entender el programa. Las siguientes reglas produciran programas bien organizados. No quisiera Ila- marlas reglas, porque puede haber razones en cualquier ambiente especifico para romper una 0 més de las reglas, pero le recomiendo pensar cuidadosa- mente antes de romper cualquiera de las reglas siguientes: Jf — Divida los enunciados en secciones para cada tarea especifica. Empiece cada F __seccién con un comentario que describa lo que hace la secci6n, Separe las sec- J clones entre agregando lineas en blanco. Por ejemplo, paraelCatdlogo de ‘mascotas, el primer programa podria tener tres secciones para tres tareas: 1, Hacer eco del texto introductorio, tal como el encabezado de la pagina to de apertura */.Siel programa hace echo aunagran cantidad de texto y graficos complicados, usted podria dividirlo en més de una sec- | ylos emunciados. El comentario antes dela seccién podria ser /* tex cion, talcomo /* titulo y logotipo */ y /* enunciados */. 2. Extraer una lista de tipos de mascotas de la base de datos. Si esta seccién es larga y complicada, puede dividirla en secciones mas pequefias, tales como 1) conectarse con la base de datos; 2) ejecu- tar la consulta SELECT; y 3) poner los datos en variables. . Crear un formulario que muestre una livta de seleccion de los ti- pos de mascotas. Los formularios a menudo son largos y complic dos, Puede ser titil tener una seccién para cada parte del formulario. 1 Use sangrias. Use sangria en los bloques de enunciados PHP. Por ejemplo, sangre los bloques if y whi 1e como lo he hecho yo en el cédigo de mues- tra para este libro. Si hay bloques anidados dentro de otros bloques, use una sangria adicional para el bloque anidado. Es mucho mas facil ver don- de empiezan y terminan los bloques cuando estan sangrados, lo cual, a su vve7, facilita la comprensién de lo que hace el programa. Poner sangrias en os enunciados HTML también puede resultar atl. Por ejemplo, si usted pone sangrias en las lineas entre las etiquetas de apertura y cierre para tun formulario o entre la etiqueta <table> ylaetiqueta </table>, puede ver mas facilmente qué hacen los enunciados. Use comentarios libremente. Definitivamente, alada comentarios al in cio para explicar lo que hace el programa. Y agregue comentarios para cada seccién. Ademas, comente cualquier enunciado que usted conside- re que no es obvio, o enunciados en los cuales cree haber hecho algo de un modo poco comin. Si le tomé un rato averiguar cémo hacer algo, es probable que amerite un comentario. No olvide los comentarios cortos al final de las lineas; a veces, s6lo una palabra o dos son de gran ayuda. + Use enunciados simples. A veces los programadores se dejan llevar por la idea de usar cédigos concisos, con lo cual sacrifican la legibilidad. Ani- dar seis llamados de funci6n uno dentro de otro puede ahorrar algunas neas y teclazos, pero también haré que el programa sea mas dificil de leer. V Repita los bloques de enunciados. Si se da cuenta que esta digitando las mismas diez lineas de enunciados PHP en varios lugares de! programa, puede mover ese bloque de enunciados hacia otro campo y llamarlo cuando lo necesite. Una linea en su programa que diga extreaerDatos() es mucho mas facil de leer que las diez lineas que extraen los datos. Es mas, si necesita cambiar algo en dichas lineas, puede hacerlo en un archi- vo externo en vez de tener que encontrarlo y cambiarlo en una docena de lugares diferentes en su programa. Hay dos maneras de repetir enuncia- dos: las funciones y los enunciados inc] ude. El Capitulo 7 explica como escribir y usar funciones. Las dos secciones siguientes explican el uso de funciones y enunciados include en la organizacién de su programa, Use constantes. Si su programa usa el mismo valor muchas veces, tal como el impuesto de ventas de su estado, puede definir una constante al princi pio del programa para crear una constante llamada CA_SALES_TAX que ¢s.97 y usarla cuando la necesite. Definir una constante que le brinde un nombre al nimero ayuda a cualquiera que lea el programa a entender cual es el ndimero; ademés, si alguna vez necesita cambiarlo, s6lo debera cam- biarlo en un lugar. Las constantes se describen en detalle en el Capitulo 6. fl Capitulo 10: Unirlo todo 2S 7 Usar enunciados include PHP le permite poner enunciados en un archivo externo (o sea, un archivo sepa- rado de su programa) e insertar el archivo donde quiera en el programa, usando el enunciado include. Los archivos ‘ nc] ude son muy titiles para almacenar un bloque de enunciados que se repite. Se agrega un enunciado include donde quiera usar los enunciados en lugar de afadir todo el bloque de enunciados en varios lugares diferentes. Este enunciado hace que sus programas sean mucho més cortos y faciles de leer. El formato de un enunciado include es a f i include("nombredearchi vo"); Elarchivo puede tener cualquier nombre. A mime gusta usar la extensi6n. i n< Los enunciadios en el archivo se incluyen tal y como estan, en el punto donde se usa el enunciado include. Los enunciados se incluyen como HTML, no PHP. Por lo tanto, si desea usar enunciados PHP en su archivo include, debe incluir eti- quetas PHP en el archivo inc] ude. De lo contrario, todos los enunciacos en el at- chivo include se vern como HTML serén enviados como output en la pagina web sera tal y como estén, Estas son algunas maneras de usar archivos include para organizar sus programas: Ponga todo o la mayoria de su HTML en archivos include. Por ejemplo, si su programa envia un formulario al explorador, ponga el HTML para el for- mulario en un archivo externo. Cuando necesite enviar el formulario, use un enunciado include. Poner el HTML en un archivo inc} ude es una buena idea si el formulario se muestra varias veces. Es incluso una buena idea si se muestra slo una vez, pues hace que su programa sea mucho mas facil de leer. Los programas en los Capitulos 11 y 12 ponen el cédigo HTML para los formularios en archivos separados ey haga include alos archivos cuando los formularios se despliegan. Almacene la informacién necesaria para tener acceso a la base de da- tos en un archivo separado de su programa. Almacene los nombres de las variables en el archivo como sigue: <tphp Shuesped="Tocalhost"; Susuario="raiz™: Scontrasena=""; D Observe que este archivo necesita etiquetas php porque el enunciado_ include inserta el archivo como HTML. Incluya este archivo en la parte superior de cada programa que necesite conectarse a la base de datos. Si cualquier informaci6n (tal como la contrasefia) cambia, simplemente cambie la contrasefia en el archivo inc] ude. No necesita buscar entre todos los archivos del programa para cambiar la contrasefa. Para un po- co mas de seguridad, es una buena idea usar un nombre de archivo en- gaiioso, y no uno obvio como claves_secretas. inc. i I 288 Pane: Aplicaciones _ + 1 Ponga sus funciones en archivos include. Usted no necesita tener los ‘enunciados para las funciones en el programa; puede ponerlos en un arch vo include, Sicuenta con muchas funciones, organice las funciones que se relacionan en varios archivos include, tal como funciones_dedatos. inc y funciones_delformul ario. inc, Use enunciados inc] ude al principio de sus programas, y enumere las funciones que se usan en el programa + Almacene los enunciados que todos los archivos en su sitio web tienen ‘en comiin. La mayoria de los sitios web tiene muchas paginas web con mu- chos elementos en comin. Por ejemplo, todas las paginas web empiezan con etiquetas <html>, <head> y <body>. Siusted almacena los enuncia- dos comunes en un archivo include, puede incluirlos en cada pagina web, Jo cual garantizaré que todas sus paginas se vean iguales. Por ejemplo, us- ted podria tener los siguientes enunciados en un archivo include: <html> chead><title><?php echo $title 22 gp align="center" >
100" Si incluye este archivo al inicio de cada programa en su sitio web, se ‘ghorraré mucha digitaci6n, y sabra que todas las paginas concuerdan. ‘Ademés, si desea modificar algo de la apariencia de todas sus paginas, solo debera cambiarlo en un lugar: el archivo inc] ude. Puede usar un enunciado similar, como sigue: include_once( "nombredearchivo"); Este enunciado evita que los archivos include con variables parecidas se so- brescriban unos a otros. Use incl ude_once cuando incluya sus funciones. Puede usar el nombre de una variable para el nombre de archivo, asi include ("$nombredearchivo"): Por ejemplo, usted quizas desee mostrar mensajes diferentes en dias diferes tes. Puede almacenar estos mensajes en archivos con el nombre del dia en que el mensaje deberfa desplegarse. Por ejemplo, podria tener un archivo lla- mado dom. inc con el siguiente contenido:

No se preocupe. Duerma hasta tarde. No hay trabajo hoy.

Y archivos parecidos para todos los dias de la semana. Los enunciados si- guientes se pueden usar para mostrar el mensaje correcto para el dia actual: Shoy = fecha(*D"); include(*$hoy".*- inc"): il w tt too

You might also like