Desarrollo Web Con PHP y MySQL

Descripción completa

Views 191 Downloads 2 File size 32MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Razones para leer este libro ........................................................................................... Objetivos que puede alcanzar con este libro ............................................................. Concepto de PHP ............................................................................................................ Novedades de la versi6n 4.3 de PHP .......................................................................... Concepto de MySQL ....................................................................................................... Razones para utilizarPHPy MySQL .......................................................................... Alguna de las cualidades de PHP ................................................................................ Rendimiento ................................................................................................................ Integraci6n de base de datos ................................................................................... Bibliotecas incorporadas .......................................................................................... Coste .............................................................................................................................. Aprendizaje de PHP ............................................................................................... Portabilidad ................................................................................................................. C6digo fuente .............................................................................................................. Algunas de las ventajas de MySQL ............................................................................ Rendimiento ................................................................................................................ Bajo coste ...................................................................................................................... Facilidad de uso ......................................................................................................... Portabilidad ................................................................................................................. C6digo fuente .............................................................................................................. C6mo estd organizado este libro .................................................................................. . Finalmente .........................................................................................................................

31 32 33 33 34 34 35 35 35 36 36 36 36 36 37 37 37 37 37 37 38 38

.

......................................................................................39 1. Curso acelerado de PHP ..........................................................................40

Parte I Uso de PHP

Uso de PHP ....................................................................................................................... 42 Aplicaci6n de ejemplo: Bob's Auto Parts ................................................................... 42 El formulario de pedidos ........................................................................................ 43 Procesamiento del formulario .............................................................................. 44 C6mo incrustar PHP en HTML .................................................................................... 45 Estilos de etiquetas PHP ........................................................................................... 46 Instrucciones de PHP ................................................................................................ 47 Espacios en blanco ..................................................................................................... 47 Comentarios ................................................................................................................ 48 C6mo agregar contenido dinimico ............................................................................. 49 Llamada de funciones ............................................................................................... 49 Funci6n date() ............................................................................................................. 50 C6mo acceder a las variables de formulario ............................................................. 50 Variables de formulario ............................................................................................ 50 Concatenaci6n de cadenas ....................................................................................... 53 Literales y variables ................................................................................................... 54 Identificadores ............................................................................................................ 54 Variables declaradas por el usuario ............................................................................ 55 Asignacidn de valores a variables ............................................................................... 55 Tipos de variables ............................................................................................................ 55 Tipos de datos de PHP .............................................................................................. 56 Control de tipos ............................................................................................................... 56 Conversi6n de tipos .................................................................................................. 57 Variables de tip0 variable ........................................................................................ 57 . Constantes ......................................................................................................................... 58 Ambito de variables ........................................................................................................ 58 Operadores ........................................................................................................................ 59 Operadores aritmeticos ............................................................................................ 60 Operadores de cadena ............................................................................................... 61 Operadores de asignaci6n ....................................................................................... 61 Devoluci6n de valores de asignaci6n .............................................................. 61 Combinacidn de operadores de asignaci6n .................................................... 62 Increment0 y decrement0 previo y posterior ................................................ 62 Referencias ............................................................................................................. 63 Operadores de comparaci6n .................................................................................... 63 El operador iguales ............................. :.............................................................. 63 Otros operadores de comparaci6n ................................................................... 64 Operadores 16gicos ........................................................................... ........................ 64 Operadores bit a bit ................................................................................................... 65 Otros operadores ........................................................................................................ 66 Operador ternario ................................................................................................. 66

.

Operador de supresi6n de error ........................................................................ 66 Operador de ejecucibn ......................................................................................... 67 Uso de operadores: calcular 10s totales de 10s formularios ................................... 67 Precedencia y asociatividad: evaluacidn de expresiones ....................................... 69 Funciones de variables ................................................................................................... 70 C6mo probar y establecer tipos de variables ...................................................... 70 C6mo probar el estado de las variables ................................................................ 71 Reinterpretacibn de variables ................................................................................. 72 Estructuras de control ..................................................................................................... 72 Toma de decisiones con estructuras condicionales ................................................ 72 Las instrucciones if .................................................................................................. 72 Bloques de c6digo ...................................................................................................... 73 Instrucciones else ...................................................................................................... 73 Instrucciones elseif ................................................................................................. 74 Instrucci6n switch ...................................................................................................... 75 Comparacidn de condiciones diferentes............................................................... 77 Iteracibn: repeticion de acciones .................................................................................. 77 Bucles while ................................................................................................................. 78 Los bucles for y foreach ............................................................................................ 80 Bucles do ...while ......................................................................................................... 81 C6mo salir de una estructura de control o una secuencia de comandos ............ 81 Siguiente paso: guardar el pedido del cliente ......................................................... 82

.

2 Almacenamiento y recuperacibn de datos

........................................ 84

C6mo guardar datos para su lectura posterior ..................................................... 86 Almacenamiento y recuperaci6n de 10s pedidos de Bob ........................................ 86 Introducci6n a1 procesamiento de archivos .............................................................. 87 * C6mo abrir un archivo .................................................................................................. 88 Modos de archivo ....................................................................................................... 88 Uso de fopen() para abrir un archivo .................................................................... 88 C6mo abrir archivos a travks de FTP o HTTP ..................................................... 91 Problemas a1 abrir el archivo ................................................................................... 91 C6mo escribir en un archivo ................................................................................... 93 Parimetros de fwrite() ........................................................................................ 94 Formatos de archivo .......................................................................................... 94 C6mo cerrar un archivo .................................................................................................. 95 Lectura desde un archivo ............................................................................................... 95 Apertura de un archivo para su lectura: fopen() ................................................ 96 C6mo saber cuindo parar: feof() ............................................................................ 97 C6mo leer linea a linea: fgets(). fgetss() y fgetcsv() ........................................ 97 Lectura de todo el archivo: readfile(). fpassthruo. file()................................... 98 Lectura de un caricter: fget()+................................................................................ 99 Lectura de una longitud arbitraria de bytes: fread()........................................ 99 Otras funciones de archivo utiles .............................................................................. 100

fndice de contenidos

Comprobaci6n de la existencia de un archivo: file-exists() ........................... 100 C6mo averiguar el tamaiio de un archivo: filesize() ........................................ 100 Eliminaci6n de un archivo: unlink() ................................................................... 100 Navegaci6n dentro de un archivo: rewind(). fseek() y ftell() ........................ 101 Bloqueo de archivos ......................................................................................................102 La opci6n mis acertada: 10s sistemas de administracibn de base 103 de datos ................................................................................................................. Problemas con el uso de archivos planos ........................................................... 103 C6mo resolver estos problemas ............................................................................ 104 105 Lecturas adicionales ...................................................................................................... 105 A continuaci6n ...............................................................................................................

.

3 Uso de matrices

.......................................................................................106

i Q ~ es k una matriz? ................................................................................................ 108 Matrices indexadas numkricamente .......................................................................... 108 Inicializaci6n de matrices indexadas numkicamente .................................... 109 Acceso a 10s contenidos de matrices ................................................................... 109 Uso de bucles para acceder a la matriz ............................................................... 110 111 Matrices asociativas ...................................................................................................... Inicializaci6n de una matriz asociativa .............................................................. 111 C6mo acceder a elementos de matriz .................................................................. 111 Uso de bucles con matrices asociativas .............................................................. 111 113 Matrices multidimensionales ...................................................................................... 117 C6mo ordenar matrices ................................................................................................ 117 Uso de sort() .............................................................................................................. Uso de asorto y ksort() para ordenar matrices asociativas ............................ 117 Inversi6n del orden .................................................................................................. 118 Ordenaci6n de matrices~multidimensionales......................................................... 118 Ordenaciones definidas por el usuario .................................................. :............ 118 Ordenaciones de usuario inversas ....................................................................... 120 Reordenaci6n de matrices ............................................................................................ 120 Uso de shuffle() ........................................................................................................ 121 Uso de array-reverse() ............................................................................................ 122 Carga de matrices desde archivos ............................................................................. 123 Otras manipulaciones de cadenas ............................................................................. 125 Navegaci6n dentro de una matriz con each(). current(). reset(). end(). next(). pas(). and prev() ................................................................... 126 Aplicaci6n de cualquier funci6n a cada elemento de una matriz: array-walk() ................................................................................................ 126. C6mo contar elementos de una matriz: count(). sizeof(). and array-count-values() ......................................................................................... 128 Conversi6n de matrices en variables escalares: extract() ............................... 129 130 Lecturas adicionales ...................................................................................................... 130 A continuaci6n ............................................................................................................... %

Desarrollo W e b con PHP y MySQL

............................

4. Manipulaci6n de cadenas y expresiones regulares 132 Aplicaci6n de ejemplo: Smart Form Mail ................................................................. 133 Aplicaci6n de formato a cadenas ............................................................................... 136 Limpieza de cadenas: chop(). Itrim() y trim().................................................... 136 Aplicaci6n de formato a cadenas para presentaciones ................................... 136 Uso de formato HTML: la funci6n nl2br() .................................................... 136 Aplicaci6n de formato a una cadena para su impresi6n ........................... 137 Cambio de mayusculas y minusculas en una cadena ................................ 139 Aplicaci6n de formato a las cadenas para su almacenamiento: Addslashes0 y StripSlashes() .................................................................... 140 C6mo combinar y dividir cadenas con funciones de cadena .............................. 141 Uso de explode(). implode() y join() .................................................................... 142 Uso de strtok() .......................................................................................................... 142 Uso de substr() .......................................................................................................... 143 Comparaci6n de cadenas ............................................................................................ 144 Ordenaci6n de cadenas.strcmp(). strcasecmp() y strnatcmpo ....................... 144 Comprobaci6n de la longitud de una cadena con strlen() ............................. 145 C6mo buscar subcadenas y reemplazarlas con funciones de cadena ............... 145 Busqueda de cadenas en cadenas: strstr(). strchr(). strrchr(). stristr() ......... 146 Busqueda de la posicion de una subcadena: strpos(). strrpos() .................... 147 Sustituci6n de subcadenas: str-replace(). substr-replace() ...........................148 Introduccidn a las expresiones regulares ................................................................. 149 Los fundamentos ...................................................................................................... 150 Conjuntos y clases de caracteres .......................................................................... 150 Repetici6n .................................................................................................................. 152 Subexpresiones ......................................................................................................... 152 Recuento de subexpresiones ..................................................................................152 Anclajes a1 principio o a l final de una cadena ................................................... 152 Bifurcaci6n ................................................................................................................. 153 Cdmo buscar coincidencias de caracteres especiales ...................................... 153 Resumen de 10s caracteres especiales ................................................................. 153 Uso de estos elementos en Smart Form .............................................................. 154 Busqueda de subcadenas con expresiones regulares ........................................ 155 Sustituci6n de cadenas con expresiones regulares ................................................ 156 Divisidn de cadenas con expresiones regulares .....................................................156 Comparaci6n de funciones de cadenas y funciones de expresiones regulares ................................................................................... 157 Lecturas adicionales ...................................................................................................... 157 A continuaci6n ............................................................................................................... 157

...............................

5. Reutilizaci6n de c6digo y creaci6n de funciones 158 ~ P o qud r reutilizar cbdigo? .......................................................................................... 160 Costes .......................................................................................................................... 160 Legibilidad ................................................................................................................. 160

fndice de contenidos

Uniformidad .............................................................................................................. 160 Uso de require() e include() ......................................................................................... 161 Uso de require() ........................................................................................................ 161 Extensiones de nombre de archivo y require() .................................................. 162 Etiquetas de PHP y require() ................................................................................. 162 Uso de require() para plantillas de sitios Web ........................................................ 163 Uso de auto-prepend-file y auto-append-file ................................................. 167 Uso de include()........................................................................................................ 168 Uso de las funciones de PHP ...................................................................................... 170 Llamada de funciones ............................................................................................. 170 C6mo llamar a una funci6n no definida ............................................................. 171 Funciones y el uso de may6sculas y min6sculas ........................................ 172 ~ P o qu6 r deberia crear funciones propias? .............................................................. 173 Estructura b6sica de una funci6n ............................................................................... 173 Designaci6n de funciones ....................................................................................... 174 Parfimetros ....................................................................................................................... 175 177 Ambito .............................................................................................................................. Llamadas por referencia frente a llamadas por valor ........................................ 179 Final de las funciones .................................................................................................... 180 C6mo devolver valores desde funciones ................................................................. 182 Bloques de c6digo .................................................................................................... 182 Recursi6n ......................................................................................................................... 183 Lecturas adicionales ...................................................................................................... 185 A continuaci6n ............................................................................................................... 185

.

6 PHP orientado a objetos

........................................................................186

Conceptos orientados a objetos .................................................................................. 187 188 Clases y objetos ...................................................................................................... Polimorfismo ............................................................................................................. 189 Herencia ..................................................................................................................... 189 Creaci6n de clases, atributos y operaciones en PHP ........................................ 190 Estructura de una clase ........................................................................................... 190 Constructores ............................................................................................................ 191 Instanciaci6n ................................................................................................................... 191 Uso de 10s atributos de clase ....................................................................................... 192 Llamadas a operaciones de clase ............................................................................... 194 Implementaci6n de la herencia en PHP .................................................................... 195 Reemplazamientos ................................................................................................... 196 Herencia m6ltiple .................................................................................................... 197 Diseiio de clases ............................................................................................................. 198 Escritura del c6digo para nuestra clase .................................................................... 199 A continuaci6n ............................................................................................................... 207

Parte I1. Uso de MySQL ............................................................................ 209

7. Diseiio de la base de datos Web

........................................................... 210

Conceptos de base de datos relacionales ................................................................. 212 Tablas .................................................................................................................... 212 Columnas ............................................................................................................. 212 Filas ........................................................................................................................ 213 Valores .................................................................................................................. 213 Claves .................................................................................................................... 213 Esquemas .............................................................................................................. 214 Relaciones ............................................................................................................. 214 Como disefiar nuestra base de datos Web ............................................................... 215 Piense en 10s objetos del mundo real que esti modelando ............................ 215 C6mo evitar el almacenamiento de datos redundantes .................................. 216 Uso de valores de columna unicos ....................................................................... 217 Selecci6n de claves 16gicas ..................................................................................... 218 Reflexiones sobre las preguntas que desea formular a la base de datos .....218 Evite disefios con varios atributos vacios .......................................................... 219 Resumen de 10s tipos de tablas ............................................................................. 219 Arquitectura de base de datos Web ......................................................................... 220 Arquitectura .................................................................................................................... 220 Lecturas adicionales ..................................................................................................... 221 A continuaci6n ............................................................................................................... 221

.

8 Creaci6n de la base de datos Web

....................................................... 222

Nota sobre el uso del monitor de MySQL ................................................................ 224 C6mo registrarse en MySQL ....................................................................................... 225 Creaci6n de bases de datos y usuarios ..................................................................... 226 Creaci6n de la base de datos ................................................................................. 226 Usuarios y privilegios .................................................................................................. 227 Introduction a1 sistema de privilegios de MySQL ................................................. 227 Principio de asignaci6n del privilegio mas bajo ............................................... 227 C6mo configurar usuarios: el comando GRANT ............................................. 228 Tipos y niveles de privilegio ................................................................................. 229 El comando REVOKE .............................................................................................. 231 Ejemplos de uso de GRANT y REVOKE ............................................................. 232 C6mo configurar un usuario para la Web ............................................................... 233 C6mo cerrar la sesidn como administrador ....................................................... 233 Uso de la base de datos correcta ................................................................................ 233 Creaci6n de tablas de base de datos .......................................................................... 234 iCuil es el significado del festo de las palabras clave? .................................. 235 Tipos de columna ................................................................................................... 236 C6mo examinar la base de datos con SHOW y DESCRIBE ............................ 238 Identificadores de MySQL ........................................................................................... 239 Tipos de dato de columna ............................................................................................ 240 Tipos numericos ....................................................................................................... 241

fndice de contenidos

Tipos de fecha y hora ......................................................................................... Tipos de cadena .................................................................................................. Lecturas adicionales ...................................................................................................... A continuaci6n ..............................................................................................................

.

9 C6mo trabajar con la base de datos de MySQL

242 244 245 246

................................248

iQue es SQL? .................................................................................................................. 250 Inserci6n de datos en la base de datos ...................................................................... 250 Recuperaci6n de datos de la base de datos ............................................................. 252 Recuperaci6n de datos con criterios especificos ...............................................253 Recuperaci6n de datos desde varias tablas ........................................................ 256 Combinaciones sencillas de dos tablas ............................................................... 256 Combinacidn de varias tablas .......................................................................... 257 Busqueda de filas que no coincidan ............................................................... 258 Uso de otros nombres para designar tablas: 10s alias ................................ 260 Resumen de 10s tipos de combination .......................................................... 260 Recuperaci6n de datos con u n orden dado ........................................................ 261 Agrupacidn y agregaci6n de datos ...................................................................... 262 C6mo escoger las filas que recuperar .................................................................. 264 Actualizaci6n de registros en la base de datos ....................................................... 264 Alteraci6n de tablas tras su creacidn ......................................................................... 265 Eliminacidn de registros de la base de datos .......................................................... 267 Eliminaci6n de tablas .................................................................................................... 267 Eliminaci6n de una base de datos entera ................................................................. 267 Lecturas adicionales ...................................................................................................... 268 A continuaci6n ............................................................................................................... 268

-

10. Acceso a la base de datos de MySQL desde la Web con PHP .

.......270

Funcionamiento de las arquitecturas de base de datos ........................................ 272 Pasos bdsicos para consultar una base de datos desde la Web ........................... 275 Comprobaci6n y filtrado de datos entrantes ...........................................................275 C6mo configurar de una conexi6n ............................................................................ 277 Selecci6n de una base de datos .................................................................................. 278 Cdmo consultar la base de datos ............................................................................... 279 Recuperacidn de resultados de consulta .................................................................. 279 Desconexi6n de una base de datos ............................................................................ 281 C6mo colocar nueva informacidn en la base de datos ........................................ 281 Otras funciones utiles PHP y MySQL ....................................................................... 284 Liberaci6n de recursos ............................................................................................ 285 Creaci6n y eliminacidn de bases de datos .......................................................... 285 Otras interfaces de base de datos y PHP .................................................................. 285 Uso de una interfaz de base de datos generics: PEAR DB ................................... 286 Lecturas adicionales ...................................................................................................... 288 A continuacidn ............................................................................................................... 289

.

11. MySQL Avanzado

................................................................................

290

An6lisis detallado del sistema de privilegios ......................................................... 291 La tabla de usuario .................................................................................................. 292 Las tablas db y host ............................................................................................. 294 Las tablas tables-priv y columns-priv ............................................................... 295 Control de acceso: jc6m0 utiliza MySQL las tablas de concesi6n de privilegios? ..................................................................................................... 296 Actualizaci6n de privilegios: jcu6nd0 surten efecto 10s cambios? ..............297 C6mo proteger la bases de datos MySQL ................................................................ 297 MySQL desde el punto de vista del sistema operativo ...................................297 Contraseiias ......................................................................................................... 298 Privilegios de usuario ...................................................................................... 299 Aspectos relacionados con la Web ............................................................... 299 C6mo obtener m6s informaci6n sobre bases de datos ..........................................300 C6mo obtener informaci6n con SHOW ............................................................ 300 C6mo obtener informaci6n con DESCRIBE .......................................................302 Compresi6n del funcionamiento de las consultas con EXPLAIN ................303 C6mo agilizar consultas con indices .......................................................................306 Trucos de optimizaci6n general .................................................................................307 Optimizaci6n del diseiio ........................................................................................ 307 Permisos ..................................................................................................................... 307 Optimizaci6n de tablas ..................................................................................... 307 Uso de indices ........................................................................................................... 308 Uso de valores predeterminados .......................................................................... 308 Uso de conexione permanentes ............................................................................ 308 Otras sugerencias ................................................................................................. 308 Tipos diferentes de tabla ...................................................................................... 308 Carga de datos desdeun xchivo ............................................................................... 309 C6mo realizar una copia de seguridad de la base de datos MySQL .................310 Restablecimiento de la base de datos MySQL ........................................................ 310 Lecturas adicionales ...................................................................................................... 311 A continuaci6n ............................................................................................................... 311

.

........................................313 12. Creacibn de un sitio Web de comercio electrbnico ......................... 314

Parte I11 Comercio electrbnico y seguridad

j C ~ 6 1es nuestro objetivo? ........................................................................................... 315 Tipos de sitios Web comerciales ................................................................................ 316 Medios publicitarios en linea ................................................................................ 316 No suministrar informaci6n importante ....................................................... 317 Mala presentaci6n .............................................................................................. 317 No responder a la informaci6n generada por el sitio Web ....................... 317 No actualizar el sitio .......................................................................................... 318

fndice de contenidos

No realizar el seguimiento del 6xito del sitio .............................................. 318 Recogida de pedidos de articulos y servicios .................................................... 319 Preguntas sin respuesta .................................................................................... 321 Confianza ............................................................................................................. 321 Facilidad de uso .................................................................................................. 322 Compatibilidad ................................................................................................... 323 Suministro de servicios y articulos digitales ..................................................... 323 C6mo afiadir valor a 10s articulos y servicios ................................................... 324 Recorte de costes ...................................................................................................... 324 Riesgos y amenazas ....................................................................................................... 325 Piratas informfiticos ................................................................................................. 325 Fracaso en la atraccidn de suficiente negocio .................................................... 326 Fallos de hardware ................................................................................................... 326 Fallos de alimentacih. comunicaci6n1 red y distribuci6n ............................. 327 Competencia .............................................................................................................. 327 Errores de software .................................................................................................. 327 Cambios en las politicas e impuestos gubernamentales ................................. 328 Limites de la capacidad del sistema .................................................................... 328 Por qu6 estrategia optar ............................................................................................... 328 A continuaci6n ............................................................................................................... 329

.

.

13 Aspectos de seguridad relacionados con el comercio electr6nico 330 Importancia de la informaci6n ................................................................................... 332 Amenazas contra la seguridad ................................................................................... 332 Exposici6n de datos confidenciales ..................................................................... 333 P6rdida o destrucci6n de datos ............................................................................. 335 Modificaci6n de 10s datos ...................................................................................... 335 Errores en el software ...... ...................................................................................... 336 Malas especificaciones t6cnicas ...................................................................... 337 Suposiciones err6neas hechas por 10s desarrolladores ............................. 337 Pruebas incompletas .......................................................................................... 337 Repudio ...................................................................................................................... 338 Equilibrio entre usabilidad. rendimiento. coste y seguridad .............................. 339 Creaci6n de una politica de seguridad ..................................................................... 340 Principios de autenticaci6n .................................................................................... 340 Uso de la autenticaci6n ................................................................................................ 341 Fundamentos de la encriptaci6n ................................................................................ 342 Encriptacih de clave privada ............................................................................... 343 Encriptaci6n de clave publica ..................................................................................... 344 Firmas digitales .............................................................................................................. 344 Certificados digitales .................................................................................................... 345 Servidores Web seguros ............................................................................................... 347 Auditorias y registros ................................................................................................... 348 Cortafuegos ..................................................................................................................... 349

Desarrollo W e b con PHP y MySQL

Copia de seguridad de 10s datos ................................................................................ 349 Copia de seguridad de 10s archivos generales .................................................. 350 Copia de seguridad y restauraci6n de bases de datos MySQL .....................350 Seguridad fisica .............................................................................................................. 350 A continuaci6n ............................................................................................................... 351

.

14 Implementaci6n de la autenticacibn con PHP y MySQL ...............352 Identificaci61-1de visitantes .......................................................................................... 353 Implementaci6n del control de acceso ...................................................................... 355 Almacenamiento de contraseiias ......................................................................357 Cifrado de contraseiias ........................................................................................... 360 Protecci6n de piginas multiples ...........................................................................361 Autenticaci6n bisica .....................................................................................................362 Uso de la autenticacidn bisica en PHP ..................................................................... 363 Uso de la autenticaci6n bisica con 10s archivos .htaccess de Apache ..............365 Autenticaci6n b k i c a con IIS ................................................................................. 368 Uso de la autenticacibn mod-auth-mysql ...............................................................371 Instalaci6n de mod-auth-mysql ...................................................................... 371 ~Funcionb?................................................................................................................. 372 Uso de mod-auth-mysql ........................................................................................ 372 Creaci6n de su propio sistema de autenticaci6n .................................................... 373 Lecturas adicionales ...................................................................................................... 374 A continuation ............................................................................................................... 374

.

15 Implementaci6n de transacciones seguras con PHP y MySQL

.... 376

Como suministrar transacciones seguras ................................................................377 El equipo del usuario ..............................................................................................378 . Internet ....................................................................................................................... 380 Su sistema ............................................................................................................... 381 Us0 SSL .........................................................................................................:............382 Filtrado de la entrada de 10s usuarios .....................................................................385 Suministro de un almacenamiento seguro .............................................................. 386 LPor quk almacenar numeros de tarjeta de crkdito? .............................................. 387 Uso de encriptaci6n en PHP ........................................................................................ 388 Instalaci6n de GPG ..........................................................................................388 C6mo probar GPG ..............................................................................................391 Lecturas adicionales ....................................................................................................396 A continuaci6n ............................................................................................................396

.

.

.....................................................397 16. Interacci6n con el sistema de archivos y el servidor ....................... 398

Parte IV TCcnicas avanzadas de PHP

Introducci6n a la carga de archivos ........................................................................... 400

fndice d e contenidos

HTML para la carga de archivos .......................................................................... 400 Un inciso sobre seguridad .................................................................................. 401 C6digo PHP para procesar la tarea de carga del archivo ...............................402 Problemas habituales .............................................................................................. 407 Uso de las funciones de directorio ............................................................................. 407 Lectura desde directorios ....................................................................................... 408 C6mo obtener informaci6n sobre el directorio actual ..................................... 409 Creaci6n y eliminaci6n de directorios ................................................................. 409 Interaction con el sistema de archivos ..................................................................... 410 C6mo obtener informaci6n de archivo ............................................................... 410 Cdmo cambiar las propiedades de archivo ........................................................ 413 Creaci6n. eliminaci6n y desplazamiento de archivos ..................................... 413 Uso de funciones de ejecuci6n de programas ......................................................... 414 Interacci6n con el entorno: getenv() y putenv() ..................................................... 417 Lecturas adicionales ...................................................................................................... 418 A continuaci6n ............................................................................................................... 418

17. Uso de funciones de red y de protocolo ........................................420 Descripci6n general de protocolos ............................................................................ 421 Envio y recepci6n de correos electr6nicos ...............................................................422 Uso de otro sitio Web .................................................................................................... 423 Uso de funciones de busqueda de red ...................................................................... 426 Uso de FTP ....................................................................................................................... 430 Uso de FTP para realizar una copia o reproducir un archivo ........................430 Conexi6n a1 servidor FTP remoto ................................................................... 433 Inicio de sesi6n en el servidor FTP ................................................................. 433 Comprobaci6n del momento temporal de la actualizaci6n de archivos ....,....... .....................:.............................................................. 434 Descarga del archivo ......................................................................................... 435 Cierre de la conexi6n ......................................................................................... 436 Carga de archivos ..................................................................................................... 436 Como evitar 10s tiempos de espera ...................................................................... 437 Uso de otras funciones de FTP .............................................................................. 437 Comunicaciones de red genbricas con CURL...........................................................438 Lecturas adicionales .................................................................................................... 440 A continuation ............................................................................................................... 441

.

18 Administracih de la fecha y la hora

................................................ 442

C6mo obtener la fecha y la hora en PHP ..................................................................443 Uso de la funci6n date()..........................................................................................443 Marcas de tiempo de Unix .....................................................................................445 Uso de la funci6n getdate() .................................................................................... 446 Validaci6n de fechas ................................................................................................ 447 Conversi6n entre formatos de fecha de PHP y MySQL ........................................ 447

Desarrollo W e b colt PHP y MySQL

Cilculos de fecha ........................................................................................................... 449 Uso de funciones de calendario .................................................................................. 450 Lecturas adicionales ...................................................................................................... 451 A continuacidn ............................................................................................................... 451

.

19 Creacion de imiigenes

..........................................................................452

Configuraci6n de compatibilidad de imigenes en PHP .......................................453 Formatos de imagen ...................................................................................................... 454 JPEG ............................................................................................................................ 455 PNG .............................................................................................................................455 WBMP ....................................................................................................................... 455 GIF ............................................................................................................................... 455 Creaci6n de imigenes ................................................................................................... 456 Creacion de un lienzo .............................................................................................. 458 Dibujo o impresi6n de texto en la imagen .......................................................... 458 Generaci6n del grafico final ................................................................................. 460 Liberaci6n de recursos ............................................................................................461 Uso de imigenes generadas automiticamente en otras piginas .......................462 Uso de texto y fuentes para crear imigenes ............................................................463 Lienzo base ................................................................................................................466 C6mo ajustar el texto sobre el b o t h ................................................................... 466 Colocaci6n del texto ................................................................................................470 C6mo escribir el texto en el b o t h ...................... ................................................. 470 Para terminar .......................................................................................................... 471 Dibujo de figuras y representaci6n grifica de datos ........................................ 471 Otras funciones de imagen .......................................................................................... 478 Lecturas adicionales ..................................................................................................479 A continuaci6n ................... ........................................................................................479 ;

.

20 Uso del control de sesi6n en PHP

.......................................................480

Qu6 es el control de sesi6n ..........................................................................................481 Funcionalidad de sesi6n bisica ..................................................................................482 Qu6 es una cookie .................................................................................................... 482 Configuraci6n de cookies desde HTTP ...............................................................483 Uso de cookies con sesiones ...........................................................................483 Almacenamiento del Id . de sesi6n ...................................................................484 Implementaci6n de sesiones simples ........................................................................484 Inicio de sesion ....................................................................................................... 484 Registro de variables de sesi6n ............................................................................. 485 Uso de variables de sesi6n ..................................................................................... 485 Anulaci6n del registro de variables y eliminaci6n de la sesi6n .................... 486 Ejemplo de sesi6n sencilla ........................................................................................ 487 Configuraci6n del control de sesi6n .........................................................................489 Implementaci6n de autenticaci6n con el control de sesi6n .................................490

fndice de contenidos

Lecturas adicionales ...................................................................................................... 496 A continuaci6n ............................................................................................................... 497

21 . Otras caracteristicas utiles ..................................................................498 Uso de comillas migicas .............................................................................................. 499 EvaluaciBn de cadenas: eval()..................................................................................... 500 Finalizaci6n de ejecuci6n: die y exit .......................................................................... 501 Serializaci6n .................................................................................................................... 502 C6mo obtener informaci6n sobre el entorno PHP ................................................. 503 C6mo saber qu6 extensiones se han cargado .................................................... 503 Identificaci6n del propietario de la secuencia de comandos .........................504 C6mo saber cuindo se ha modificado una secuencia de comandos .................................................................................................. 504 Carga dinimica de extensiones .................................................................................. 504 Modificacih temporal del entorno de ejecuci6n .................................................. 505 C6mo resaltar fuentes ................................................................................................... 506 A continuaci6n ............................................................................................................... 506

Parte V. Creaci6n de proyectos PHP y MySQL practicos

...................509

22. Uso de PHP y MySQL en grandes proyectos ................................... 510 Aplicaci6n de ingenieria de software a1 desarrollo Web ...................................... 512 Planificaci6n y ejecuci6n de un proyecto de aplicaci6n Web .............................. 513 Reutilizaci6n de c6digo ................................................................................................ 514 C6mo escribir c6digo mantenible .............................................................................. 514 Estindares de codificaci6n ..................................................................................... 515 Convenciones de-nompnclatura ...................................................................... 515 Comentarios de c6digo ..................................................................................... 516 Sangrados ............................................................................................................. 517 Divisi6n del c6digo .................................................................................................. 518 Uso de una estructura de directorios estindar .................................................518 C6mo documentar y compartir funciones internas ......................................... 519 Implementaci6n del control de versi6n .................................................................... 519 Selecci6n de un entorno de desarrollo ...................................................................... 520 Documentaci6n de nuestros proyectos ..................................................................... 521 Prototipos ........................................................................................................................ 521 SeparaciBn de 16gica y contenido ............................................................................... 522 Optimizaci6n de c6digo ............................................................................................... 523 Uso de optimizaci6n sencilla ................................................................................. 523 Uso de productos Zend ........................................................................................... 524 Comprobaciones ............................................................................................................ 524 Lecturas adicionales ...................................................................................................... 526 A continuaci6n ............................................................................................................... 526

Desarrollo Web con P H P y M y S Q L

Errores de programacibn ............................................................................................. 530 Errores sinticticos .................................................................................................... 530 Errores de ejecuci6n ................................................................................................. 531 Llamadas a funciones que no existen ............................................................ 533 Lectura o escritura de archivos .................................................................... 533 Interacci6n con MySQL u otras bases de datos ........................................... 534 Conexiones a redes de servicios ..................................................................... 535 Comprobaci6n de entrada de datos incorrecta ........................................... 536 Errores 16gicos .......................................................................................................... 537 Ayuda de depuraci6n de variables ............................................................................ 538 Niveles de informes de errores ................................................................................... 540 Modificaci6n de 10s parimetros de informes de error .......................................... 541 C6mo desencadenar nuestros propios errores ........................................................ 543 Procesamiento correct0 de errores ............................................................................ 543 A continuaci6n ............................................................................................................... 546

.

.........

24 C6mo generar autenticacihn y personalizaci6n de usuarios 548 El problema ................................................................................................................... 550 Componentes de la solucion ....................................................................................... 550 Identificaci6n y personalizaci6n de usuarios .................................................... 550 551 Almacenamiento de marcadores .......................................................................... Recomendaci61-1de marcadores ............................................................................ 551 Presentaci6n de la soluci6n ......................................................................................... 551 Implementaci6n de la base de datos ......................................................................... 554 Implementaci6n del sitio bisico ................................................................................. 555 Implementaci6n de la aut~nticaci6nde usuarios ................................................... 558 Registro ..................:.................................................................................................... 558 Conexi6n .................................................................................................................... 563 Desconexi6n .............................................................................................................. 567 Modificaci6n de contrasefias ................................................................................. 568 Restablecimiento de contrasefias olvidadas ...................................................... 570 Implementaci6n del almacenamiento y recuperaci6n de marcadores .............. 575 C6mo afiadir marcadores ....................................................................................... 575 C6mo mostrar marcadores .................................................................................... 578 Eliminaci6n de marcadores .................................................................................. 579 Implementaci6n de recomendaciones ...................................................................... 581 Conclusi6n y posibles ampl'iaciones ......................................................................... 585 A continuaci6n .............................................................................................................. 585

........................................

25. Construcci6n de un carro de la compra 586 El problema .................................................................................................................... 588 Componentes de la soluci6n ....................................................................................... 588

fndice de contenidos

Generaci6n de un catdogo en linea ..................................................................... 588 C6mo realizar el seguimiento de las compras de un usuario mientras compra ............................................................................................................. 588 Pagos ........................................................................................................................... 589 Interfaz de administracibn ..................................................................................... 589 Presentaci6n de la soluci6n ......................................................................................... 590 Implementaci6n de la base de datos ......................................................................... 594 Implementaci6n del catdogo en linea ...................................................................... 596 Enumeraci6n de categorias .................................................................................... 598 Enumeraci6n de libros en una categoria ............................................................. 601 C6mo mostrar detalles sobre un libro ................................................................. 602 Implementaci6n del carro de la compra ................................................................. 604 Uso de la secuencia de comandos show-cart.php ...........................................604 C6mo ver el carro ................................................................................................... 607 C6mo afiadir articulos a1 carro ............................................................................. 610 C6mo guardar el carro actualizado ..................................................................... 611 Impresi6n de un resumen en la barra de encabezado ..................................... 612 C6mo salir ................................................................................................................. 613 Implementaci6n del pago ............................................................................................ 618 Implementacidn de una interfaz de administracibn .............................................. 620 Ampliaci6n del proyecto .............................................................................................. 628 Uso de un sistema existente ........................................................................................ 628 A continuaci6n ............................................................................................................... 628

.

26 Creaci6n de un sistema de administraci6n de contenidos

............. 630

El problema ..................................................................................................................... 631 Requisitos de la soluci6n ..............................................................................................632 Modificaci6n del contenido ........................................................................................ 632 Introducci6n de contenido en el sistema ............................................................ 632 FTP ......................................................................................................................... 632 Metodo de carga de archivos ...........................................................................633 Cambios en linea ................................................................................................633 Bases de datos frente a almacenamiento en archivos ......................................633 Estructura de documentos .....................................................................................634 Uso de metadatos .......................................................................................................... 635 Formato del resultado ...................................................................................................635 Manipulaci6n de imigenes ..........................................................................................637 Disefio y presentaci6n de la soluci6n ........................................................................639 Disefio de la base de datos ...........................................................................................640 Implementaci6n ............................................................................................................. 642 Interfaz de usuario ................................................................................................... 642 Sistema ........................................................................................................................ 646 Busquedas .................................................................................................................. 654 Pantalla del editor .................................................................................................... 657

Desarrollo W e b con PHP y MySQL

Ampliaci6n del proyecto .............................................................................................. 658 A continuaci6n .............................................................................................................. 659

27. Creacibn de un servicio de correo electronic0 basado en la Web ... 660 El problema ..................................................................................................................... 661 Componentes de la soluci6n ....................................................................................... 662 Presentaci6n de la soluci6n ......................................................................................... 663 Configuraci6n de la base de datos ............................................................................. 665 Arquitectura de secuencias de comandos ................................................................667 Conexi6n y desconexi6n .............................................................................................. 673 Configuraci6n de cuentas ............................................................................................ 676 Creaci6n de una nueva cuenta .............................................................................. 678 Modificaci6n de una cuenta existente ................................................................ 680 Eliminaci6n de una cuenta ..................................................................................... 680 Lectura de correo ........................................................................................................ 681 Selecci6n de una cuenta ......................................................................................... 681 C6mo ver 10s contenidos del buz6n de correo ................................................ 684 Lectura de un mensaje de correo .......................................................................... 687 C6mo ver encabezados de mensaje ..................................................................... 690 Eliminaci6n de correo ............................................................................................. 691 Envio de correo ............................................................................................................... 692 Envio de un nuevo mensaje ................................................................................... 692 C6mo responder o reenviar correo ...................................................................... 694 Ampliaci6n del proyecto .............................................................................................. 695 A continuaci6n ............................................................................................................... 696

28. Creaci6n de un gestor de listas de correo

.

........................................ 698

. El problema .....................................................................................................................

699 Componentes de la soluci6n ....................................................................................... 700 Definici6n de una base de datos de listas y suscriptores ............................... 700 Carga de archivos ..................................................................................................... 701 Envio de correo con archivos adjuntos ...............................................................701 Presentaci6n de la soluci6n ........................................................................................ 702 Definici6n de la base de datos .................................................................................... 704 Arquitectura de la secuencia de comandos ............................................................. 706 714 Implementaci6n del inicio de sesi6n ......................................................................... Creaci6n de una nueva cuenta .............................................................................. 715 Conexi6n .................................................................................................................... 717 Implementaci6n de funciones de usuario ................................................................ 720 C6mo ver las listas ................................................................................................... 720 C6mo ver informadm de listas .......................................................................... 725 C6mo ver archivos de listas ................................................................................... 727 Suscripciones y anulaci6n de suscripciones ...................................................... 728 Modificaci6n de la configuraci6n de una cuenta .............................................. 729

fndice de contenidos

Modificaci6n de contraseiias ................................................................................. 730 Desconexidn .............................................................................................................. 732 Implementacidn de funciones administrativas ...................................................... 732 Creaci6n de una nueva lista .................................................................................. 733 Carga de un nuevo boletin informativo ............................................................. 735 Procesamiento de la carga de varios archivos ................................................... 737 Vista previa del boletin informativo ................................................................... 742 Envio del mensaje .................................................................................................... 743 Ampliaci6n del proyecto .............................................................................................. 749 A continuaci6n ........................................................................................................... 749

.

29 Creaci6n de foros Web

....................................................................750

El problema ..................................................................................................................... Componentes de la soluci6n ....................................................................................... Presentaci6n de la soluci6n ......................................................................................... Diseiio de la base de datos ........................................................................................... C6mo ver el Arb01 de articulos .................................................................................... Despliegue y repliegue ........................................................................................... C6mo mostrar 10s articulos .................................................................................... Uso de la clase treenode ......................................................................................... Cdmo ver articulos individuales ................................................................................ Cdmo afiadir nuevos articulos .................................................................................... Ampliaciones .................................................................................................................. Uso de un sistema existente ........................................................................................ A continuacidn ...............................................................................................................

.

752 752 754 755 758 760 763 764 770 772 778 779 779

.......................

30 Generaci6n de documentos personalizados en PDF 780 El problema ................................................................................................................... 781

.

Evaluacidn de formatos de documento .................................................................... 782 Papel ............................................................................................................................ 782 ASCII ........................................................................................................................... 783 HTML .......................................................................................................................... 783 Formatos de procesadores de texto ..................................................................... 783 Formato de texto enriquecido ............................................................................... 784 Postscript ................................................................................................................... 785 Formato de documento portable .......................................................................... 785 Componentes de la soluci6n ....................................................................................... 786 Sistema de preguntas y respuestas ...................................................................... 786 Software de generaci6n de documentos ............................................................. 787 Software para crear una plantilla RTF ........................................................... 787 Software para crear una plantilla PDF .......................................................... 787 Software para crear PDF mediante programaci6n ..................................... 788 Presentaci6n de la solucion ......................................................................................... 788 C6mo responder a las preguntas .......................................................................... 790

Desarrollo Web con P H P y MySQL

Cdmo calificar las respuestas ................................................................................ 792 Generacidn de un certificado RTF ........................................................................ 794 Generacidn de un certificado PDF a partir de una plantilla .......................... 797 Generacidn de un documento PDF por medio de PDFlib ............................... 801 Una secuencia de comandos Hello World para PDFlib ..................................801 Generacidn de nuestro certificado con PDFlib .................................................. 805 Problemas con 10s encabezados ................................................................................. 812 Ampliacidn del proyecto .............................................................................................. 813 Lecturas adicionales ...................................................................................................... 813

.

31 Conexibn a servicios Web con XML y SOAP

..................................814

El problema ..................................................................................................................... 815 Cdmo entender XML ..................................................................................................... 816 Servicios Web ................................................................................................................. 820 SOAP ........................................................................................................................... 820 WSDL .......................................................................................................................... 821 Componentes de la solucidn ..................................................................................... 822 Creacidn de un carro de la compra ...................................................................... 822 Uso de las interfaces de servicios Web de Amazon ........................................ 822 Andisis de XML ................................................................................................. 823 Uso de SOAP con PHP ............................................................................................ 823 Almacenamiento en cache ...................................................................................... 824 Presentacidn de la solucidn ........................................................................................ 824 Aplicacidn principal .............................................................................................. 828 Cdmo mostrar 10s libros de una categoria ......................................................... 834 Obtencidn de un AmazonResultSet .................................................................. 836 Uso de XML sobre HTTP ........................................................................................ 844 Uso de SOAP ........,....... .......................................................................................... 850 Almacenamiento de datos en cache ..................................................................... 852 Creacidn del carro de la compra ........................................................................... 854 Cdmo salir a Amazon .............................................................................................. 857 Instalacidn del cddigo del proyecto ........................................................................... 858 Ampliacidn del proyecto .............................................................................................. 859 Lecturas adicionales ...................................................................................................... 859

.

.................................................................................... 861 A . Instalacibn de PHP y MySQL .............................................................. 862 Parte VI . ApCndices

Ejecucidn de PHP como interprete CGI o como mddulo ..................................... 864 Instalacidn de Apache. PHP y MySQL en Unix ...................................................... 864 Instalacidn binaria .................................................................................................. 865 Instalacidn desde cddigo fuente ...................................................................... 8 6 5 Instalacidn de MySQL ...................................................................................... 866 Instalacidn de PDFlib ......................................................................................... 868

fndice de contenidos

Instalaci6n de CURL........................................................................................... 869 Instalacion de PHP ............................................................................................. 869 Fragmentos de c6digo de httpd.conf ................................................................... 872 ~Funcionala compatibilidad con PHP? .............................................................. 873 ~FuncionaSSL? ......................................................................................................... 874 ...................................................................................................... 875 ~ l t i m o pasos s Instalaci6n de Apache. PHP y MySQL en Windows ........................................ 875 Instalaci6n d e MySQL en Windows ..................................................................... 876 Definici6n de la ruta .......................................................................................... 878 Eliminaci6n del usuario an6nimo ................................................................... 878 Definici6n de la contraseiia raiz ...................................................................... 879 Instalaci6n de Apache en Windows ..................................................................... 879 Instalaci6n de PHP en Windows .......................................................................... 881 Uso de Installshield ........................................................................................... 881 Instalacion.manual ............................................................................................. 881 Como aiiadir PHP a su configuraci6n de Apache ....................................... 883 C6mo aiiadir PHP y MySQL a Microsoft IIS y PWS .................................. 883 Pruebas .................................................................................................................. 884 Instalaci6n de PEAR ...................................................................................................... 884 Configuraciones adicionales ....................................................................................... 885

.

B Recursos Web

.........................................................................................

Recursos PHP .................................................................................................................. Recursos especificos de MySQL y SQL ..................................................................... Recursos para Apache ................................................................................................. Desarrollo Web ...............................................................................................................

.

886 887 889 889 890

.......................................................................892

C Contenido del C D - R O N

Contenido del CD-ROM ............................................................................................. 893 Windows .................................................................................................................... 893 Linux / Unix ................................................................................................................ 894 L6alo antes de abrirlo ....................................................................................... 894

Indice alfabdtico

..........................................................................................895

Bienvenidos a Desarrollo Web con PHP y MySQL. Estas piginas recogen 10s conocimientos fruto de nuestras experiencias con PHP y MySQL, dos de las herramientas de desarrollo Web rnis actuales. En esta introduccidn, trataremos 10s siguientes aspectos: Razones para leer este libro Objetivos que se pueden akanzar utilizando este libro Qu6 es PHP y MySQL y por qu6 son unas herramientas geniales Una repaso general a las ultimas funciones de PHP 4 Cdmo esti organizado este libro Empecemos.

Razones para leer este libro En este libro se explica cdmo crear sitios Web interactivos, desde 10s formularios de pedidos rnis sencillos hasta 10s sitios de comercio electr6nico rnis complejos y seguros, y lo que es mis, con ayuda de tecnologias de cddigo abierto. Este libro va dirigido a lectores con un conocimiento bisico de HMTL y con cierta experiencia de programacidn con lenguajes actuales, aunque no es necesario

que hayan programado para Internet o utilizado una base de datos relacional. Los lectores con menos experiencia en programaci6n tambien podrin aprovechar este libro aunque tardarin un poco mas en digerir sus conceptos. Hemos intentado tratar 10s conceptos bisicos, aunque se aborden ripidamente. Este libro va dirigido a personas que deseen dominar PHP y MySQL para crear un sitio Web comercial o de gran tamafio. Puede que tenga experiencia con otros lenguajes de desarrollo Web. Si asi fuera, este libro le ayudari a ponerse a1 dia ripidamente. La raz6n que nos ha animado a escribir este libro es que todos 10s manuales sobre PHP que conociamos eran bisicamente guias de referencia de funciones. Estos libros resultan utiles pero no sirven para mucho cuando nuestro jefe o un cliente nos piden crear un carro de la compra para un sitio Web. Hemos intentado que 10s ejemplos resulten iitiles. De hecho, gran parte de su c6digo se puede utilizar directamente en un sitio Web o bastaria con pequefias modificaciones para hacerlo.

Objetivos que puede alcanzar con este libro La lectura de este libro le permitiri crear sitios Web reales y dinAmicos. Si ha desarrollado sitios Web utilizando simple HTML, ya conoceri las limitaciones de este enfoque. El contenido estitico de 10s sitios desarrollados unicamente con HTML es exactamente eso, estitico. Estos sitios no varian a menos que se actualicen fisicamente. Los usuarios no pueden interactuar con el sitio de forma significativa. El uso de un lenguaje como PHP y una base de datos como MySQL permite crear sitios Web dinimicos, es decir, susceptibles de personalizaci6n y dotados de informaci6n en tiempo real. En este libro nos hemos centrado deliberadamente en aplicaciones del mundo real, incluso en 10s capitulos introductorios. Comenzamos por analizar un sencillo sistema de pedidos en linea y aprovecharemos para examinar 10s distintos componentes de PHP y MySQL. Abordaremos aspectos relacionados con el comercio electr6nico y la seguridad mientras desarrollamos un sitio Web real y le mostraremos c6mo implementarlos en PHP y MySQL. En la secci6n final del libro, comentaremos c6mo abordar proyectos del mundo real y le guiaremos a travks del disefio, planificaci6n y construcci6n de 10s siguientes ocho proyectos: Autenticaci6n d e usuario y personalizaci6n Carros de la compra Sistemas de administracidn de contenido Correo electr6nico basado en la Web Administradores de listas d e correo Foros Web

Desarrollo W e b con PHP y MySQL

Generacidn de documentos. Conexidn a servicios Web con XML. Puede utilizar estos proyectos directamente o modificarlos para ajustarlos a sus necesidades. Se han seleccionado porque creemos que representan las ocho aplicaciones Web mhs comunes desarrolladas por programadores. Si sus necesidades son distintas, este libro deberia servirle de ayuda para lograr sus objetivos.

Concepto de PHP PHP es u n lenguaje d e secuencia d e comandos d e servidor diseiiado especificamente para la Web. Dentro de una phgina Web puede incrustar cddigo PHP que se ejecutarh cada vez que se visite una pdgina. El cddigo PHP es interpretado en el servidor Web y genera cddigo HTML y otro contenido que el visitante verh. PHP fue concebido en 1994 y es fruto del trabajo d e un hombre, Rasmus Lerdorf. Ha sido adoptado por otras personas d e talent0 y ha experimentado tres trasformaciones importantes hasta convertirse en el producto actual. En octubre de 2002, era utilizado por mhs de nueve millones de dominios de todo el mundo y su numero crece rhpidamente. Si desea conocer el numero actual de sitios que utilizan este lenguaje, visite el sitio h t t p : //www.p h p . net/usage. php. PHP es un producto de cddigo abierto, lo que quiere decir que puede acceder a su cddigo. Puede utilizarlo, modificarlo y redistribuirlo sin coste alguno. Las siglas PHP equivalian inicialmente a Personal Home Page (PBgina de inicio personal) pero se modificaron de acuerdo con la convencidn de designacidn de GNU (del ingles, Gnu's Not Unix, Gnu no es Unix) y ahora equivale a PHP Hipertext Preprocessor (PreprocesZdor a e hipertexto PHP). En la actualidad, PHP esth en su versidn 4. Esta versidn incorpora mejoras importantes a1 lenguaje que comentaremos en la siguiente seccidn. La direccidn Web de la phgina de PHP esth disponible es http: / / www.php.net. La direccidn de la pdgina de Zend (la compafiia cuyos fundadores disefiaron PHP4) se encuentra en http: / / www.zend.com.

Novedades de la versi6n 4.3 de PHP Si ha utilizado PHP anteriormente, observar6 una serie de mejoras importantes en la version 4.3. La mayor parte de las funciones de entrada y salida utilizan ahora un enfoque de secuencias unificado, lo que significa que se pueden abrir archivos fhcilmente, asi como conexiones HTTP, HTTPS y FTP.

Introduccidn

PEAR ya ha salido de su versi6n beta y dispone de un instalador sencillo. La biblioteca gr6fica GD se ha incorporado a PHP La compatibilidad con Apache se sigue considerando como experimental, per0 mejora constantemente. Un ejecutable pensado para su uso con secuencias de linea de comandos que se incorpora de manera predeterminada a1 instalar PHP.

Concepto de MySQL MySQL es un sistema para la administracidn de bases de datos relacional (RDBMS) r6pido y d i d o . Las bases de datos permiten almacenar, buscar, ordenar y recuperar datos de forma eficiente. El servidor de MySQL controla el acceso a 10s datos para garantizar el uso simult6neo de varios usuarios, para proporcionar acceso a dichos datos y para asegurarse de que s610 obtienen acceso a ellos 10s usuarios con autorizacidn. Por lo tanto, MySQL es un servidor multiusuario y d e subprocesamiento mdtiple. Utiliza SQL (del ingles Structured Query Language, Lenguaje de consulta estructurado), el lenguaje est6ndar para la consulta de bases de datos utilizado en todo el mundo. MySQL lleva disponible desde 1996 per0 su nacimiento se remonta a 1979. Ha obtenido el galard6n Choice Award del Linux Journal Readers en varias ocasiones. MySQL se distribuye bajo una licencia de cddigo abierto en la actualidad, per0 tambikn existen licencias comerciales.

Razones para u t i l ~ a rPHP y MySQL A1 desarrollar un sitio de comercio electrbnico, se pueden utilizar una gran cantidad de productos diferentes: Hardware para el servidor Web Un sistema operativo Software de servidor Web Un sistema de administraci6n de base de datos Un lenguaje de secuencia de comandos o de programaci6n Algunas de estas opciones dependen de otras. Por ejemplo, no todos 10s sistemas operativos se ejecutan sobre todo el hardware ni todos 10s lenguajes de secuencia de comandos se pueden conectar a bases de datos, etc. En este libro no vamos a prestar mucha atencidn a1 hardware, ni a 10s sistemas operativos ni a1 software de servidor Web. No ser6 necesario. Una de las ventajas

Desarrollo W e b con P H P y MySQL

de PHP es que estti disponible para Microsoft Windows, para muchas versiones de Unix y para cualquier servidor Web completamente funcional. MySQL resulta igualmente verstitil. Para demostrarlo, 10s ejemplos de este libro se han escrito y probado en dos configuraciones muy utilizadas: Linux con el servidor Web Apache Microsoft Windows 2000 con Microsoft Internet Information Server (11s) Sea cual sea el hardware, sistema operativo y servidor Web que elija, le recomendamos que considere seriamente la opci6n de utilizar PHP y MySQL.

Akuna de las cualidades de PHP Entre 10s competidores principales de PHP se puede citar a Perl, Microsoft Active Server Pages (ASP), Java Server Pages (JSP) y Allaire ColdFusion. En comparaci6n con estos productos, PHP cuenta con muchas ventajas, entre las que se encuentran las siguientes: Alto rendimiento Interfaces para una gran cantidad de sistemas de base de datos diferentes Bibliotecas incorporadas para muchas tareas Web habituales Bajo coste Facilidad de aprendizaje y uso Portabilidad

.L

Acceso a1 c6digo abierto A continuaci6n se comentan en mtis detalle estas cualidades.

Rendimiento PHP es muy eficiente. Mediante el uso de un unico servidor, puede servir millones de acceso a1 dia. Los indicadores comparativos de rendimiento publicados por Zend Technologies (http: / / www.zend.com) muestran que PHP supera ampliamente a sus competidores en esta faceta.

Integracion de base de datos PHP dispone de una conexi6n propia a todos 10s sistemas de base de datos. Ademtis de MySQL, puede conectarse directamente a las bases de datos de

lntroduccidn

PostgreSQL, mSQL, Oracle, dbm, filepro, Hyperwave, Informix, InterBase y Sybase, entre otras. El uso de ODBC (del inglbs Open Database Connectivity Standard, Est6ndar de conectividad abierta de base de datos) permite establecer una conexi6n a cualquier base de datos que suministre un controlador ODBC. Entre ellas, se incluyen 10s productos de Microsoft, y muchos otros.

Bi bliotecas incorporadas Como se ha diseiiado para su uso en la Web, PHP incorpora una gran cantidad de funciones integradas para realizar utiles tareas relacionadas con la Web. Puede generar im6genes GIF a1 instante, establecer conexiones a otros servicios de red, enviar correos electr6nicos, trabajar con cookies y generar documentos PDF, todo con unas pocas lineas de c6digo.

Coste PHP es gratuito. Puede descargar la ultima versi6n de http:/ /www.php.net cuando lo desee sin coste alguno.

Aprendizaje de PHP La sintaxis de PHP se basa en otros lenguajes de programaci61-1,principalmente en C y Perl. Si ya conoce C o Perl, o u n lenguaje d e tip0 C como C++ o Java, no tardar6 nada en utilizar PHP de manera productiva.

Portabilidad PHP estd disponible para una gran cantidad de sistemas operativos diferentes. Puede escribir c6digo PHP en todos 10s sistemas operativos gratuitos del tip0 Unix, como Linux y FreeBSD, versiones comerciales de Unix, como Solaris y IRIX o en las diferentes versiones de Microsoft Windows. Su c6digo funcionar6 sin necesidad de aplicar ninguna modificaci6n a 10s diferentes sistemas que ejecute PHP.

C6digo fuente Dispone de acceso a1 c6digo fuente de PHP. A diferencia de 10s productos comerciales y de c6digo cerrado, si desea modificar algo o agregar un elemento al programa, puede hacerlo con total libertad. No necesitara esperar a que el fabricante publique parches, ni tendr6 que preocuparse porque el fabricante cierre sus puertas o decida abandonar el producto.

Desarrollo W e b con PHP y MySQL

Algunas de las ventajas de MySQL Entre 10s competidores principales de MySQL, se puede citar a PostgreSQL, Microsoft SQL Server y Oracle. MySQL cuenta con muchas ventajas, entre las que se encuentran las siguientes: Alto rendimiento Bajo coste Facilidad de configuraci6n y aprendizaje Portabilidad Accesibilidad a c6digo fuente A continuaci6n se comentan en mds detalle estas cualidades.

Rendimiento MySQL es muy rdpido. Si lo desea, puede consultar la pdgina de indicadores comparativos de sus desarrolladores en el sitio Web mysql.com. Estos indicadores revelan en muchos casos una diferencia de velocidad abismal con respecto a 10s productos de la competencia.

Bajo coste MySQL estd disponible de manera gratuita, bajo una licencia de c6digo abierto, o por un precio reducido en forma de licencia comercial si resultara necesario para su aplicaci6n.

-

Facilidad de uso Las bases de datos mis modernas utilizan SQL. Si ha utilizado otros RDBMS, no deberia tener problemas para adaptarse a este sistema. MySQL resulta ademds rnds sencillo de configurar que otros productos similares.

PortabiIidad MySQL se puede utilizar en una gran cantidad de sistemas Unix diferentes asi como bajo Microsoft Windows.

C6digo fuente Como en el caso de PHP, puede obtener y modificar el c6digo fuente de MySQL.

lntroduccidn

C6mo estd organizado este libro Este libro se divide en cinco partes principales. La parte I, "Uso de PHP", proporciona una visi6n general de las partes fundamentales del lenguaje PHP. Los ejemplos escogidos son ejemplos del mundo real utilizados para desarrollar un sitio de comercio electr6nico y no c6digo sin utilidad priictica. Esta secci6n se inicia con el capitulo "Curso acelerado". Si ya tiene experiencia en programaci6n con PHP, puede repasar riipidamente esta secci6n. Si ha trabajado antes con PHP o acaba de llegar a1 mundo de la programaci611, conviene que se detenga un poco m6s sobre ella. La parte 11, "Uso de MySQL" aborda 10s conceptos y el disefio implicado en el uso de sistemas de bases de datos relacionales como MySQL, el uso de SQL, la conexi6n de la base de datos MySQL a1 mundo con PHP y temas avanzados sobre MySQL, como la seguridad y la optimizaci6n. La parte 111, "Comercio electr6nico y seguridad" trata alguno de 10s temas generales implicados en el desarrollo de un sitio de comercio electr6nico utilizando cualquier lenguaje. El aspect0 m b importante es la seguridad. Seguidamente, explicaremos c6mo utilizar PHP y MySQL para autenticar usuarios y recoger, transmitir y almacenar datos de manera segura. La parte IV, "Tkcnicas avanzadas de PHP", trata de manera detallada alguna de las funciones principales que integra PHP. Se han seleccionado aquellos grupos de funciones que tienen una mayor probabilidad de aparici6n a1 crear un sitio de comercio electr6nico. Aprenderii a interactuar con el servidor, a interactuar con la red, a generar imiigenes, a manipular fechas y horas y variables de sesibn. En la parte V, "Construcci6n de proyectos pricticos con PHP y MySQL", trata temas del mundo real como la gesti6n de proyectos de gran tamafio y funciones de depuraci6n. Se incluyen proyecos de ejemplo que muestran el potencial y la versatilidad de PHP y MySQL. -

Finalmente Esperamos que disfrute de este libro y que se lo pase tan bien aprendiendo a utilizar PHP y MySQL como lo hicimos nosotros cuando empezamos a utilizar estos productos. Es un placer trabajar con ellos. En poco tiempo, podrii unirse a 10s miles de desarrolladores que utilizan potentes y robustas herramientas para desarrollar sitios Web din6micos y en tiempo real.

En este capitulo se realiza un ripido repaso de la sintaxis y de las estructuras de lenguaje de PHP. Si ya programa en PHP, puede utilizar este capitulo para colmar sus lagunas de conocimientos. Si tiene experiencia en programaci6n con C, ASP u otro lenguaje de programaci611, este capitulo le ayudari a ponerse a1 dia riipidamente. En este libro aprender5 a utilizar PHP a travks de una serie de ejemplos del mundo real, tornados de nwstr-xperiencia en el desarrollo de sitios de comercio electr6nico. Por regla general, 10s textos sobre programaci6n utilizan ejemplos muy simples para explicar elementos de sintaxis. Nosotros hemos decidido no seguir esta prictica. Nos hemos dado cuenta de que lo que el lector quiere con frecuencia es poder ver un sitio ya creado y operativo, para entender c6mo se utiliza el lenguaje, en lugar de otra guia de sintaxis y funciones sin mayor inter& que un manual en linea. Pruebe 10s ejemplos, introddzcalos y ciirguelos desde el CD-ROM, modifiquelos, dividalos en partes y aprenda a unirlas de nuevo. En este capitulo comenzaremos por presentar un ejemplo de un formulario de product0 en linea para aprender a utilizar las variables, operadores y expresiones en PHP. Tambien analizaremos 10s tipos de variables y el orden de precedencia de 10s operadores. Le ensefiaremos a acceder a variables de formulario y a manipularlas para calcular 10s totales y 10s impuestos correspondientes en un pedido de cliente. Seguidamente, desarrollaremos un ejemplo de formulario de pedido en linea utilizando nuestra secuencia de comandos de PHP para validar 10s datos. Examina-

remos el concept0 de valores booleanos y presentaremos ejemplos de uso de if,else, del operador ? : y de la instruction s w i t c h . Por ultimo, analizaremos el tema de 10s bucles para lo cual escribiremos c6digo de PHP con el que generar tablas HTML repetitivas. Entre 10s temas clave que se analizarrin estan 10s siguientes: Como incrustar PHP en HTML Como agregar contenido dinrimico C6mo acceder a variables de formulario Identificadores Variables declaradas por el usuario Tipos de variables Asignacion de valores a variables Constantes Ambito de variables Operadores y su prioridad Expresiones Funciones de variables Toma de decisiones con i f , e l s e y s w i t c h

Uso de PHP Para realizar 10s ejemplos dk ese capitulo, asi como 10s del resto del libro, necesitar6 disponer de acceso a un servidor Web con PHP instalado. Para sacar el mriximo partido a 10s ejemplos y casos prricticos que se presentarrin, deberia ejecutarlos e intentar modificarlos. Para ello, necesitar6 un banco de pruebas sobre el que experimentar. Si no tiene PHP en su equipo, deberri instalarlo o pedirle a su administrador del sistema que lo haga en su lugar. En el apkndice A encontrarri las instrucciones y en el CD-ROM se incluye todo lo necesario para instalar PHP en UNIX y Windows NT.

Aplicacion de eiemplo: Bob's Auto Parts Una de las aplicaciones mris comunes de cualquier lenguaje de secuencia de comandos de servidor es el procesamiento de formularios Web. Empezaremos nuestro estudio de PHP implementando un formulario para Bob's Auto Parts, una compafiia

Desnrrollo Web corz P H P y MySQL

d e repuestos d e coches. El ccidigo utilizado para este ejemplo se incluye en el directorio correspondiente del CD.

p

5 y ~ L d u - kc'p l qqc4$f3s

Por el momento, el programador de HTML d e la empresa d e Bob ha creado un formulario d e pedido para los repuestos que vende la empresa. En la figura 1.1 se ilustra el aspecto del formulario. Resulta bastante sencillo y es muy parecido a 10s que se pueden encontrar e n Internet. Lo primero clue Bob quiere saber es qu6 pide el cliente, obtener el total del pedido e incluir 10s impuestos que se deben pagar. En el listado 1.1se recoge parte del codigo HTML asociado a esta pigina. En este ccidigo debe fijarse en dos &as importantes.

I

I1

BOWS

~

~Parts t o

Order Form Item Tires

oil Spark Plu~,s

Quantity

rI r-

Figura 1.1. El formulario inicial d e pedido d e B o b solo registra productos y cantidades

Listado 1.1, orderform.html. Codigo HTML correspondiente al formulario basico de pedido de Bob

1 . Curso acelerado de P H P

En primer lugar, hemos establecido la accibn del formulario en el nombre de la secuencia de comandos PHP que procesard el pedido del cliente. (Escribiremos esta secuencia de comandos a continuacibn.)Por regla general, el valor del atributo ACTION es el URL que se cargari cuando el usuario pulse el botbn de envio. Los datos indicados por el usuario en el formulario se enviarin a este URL a traves del metodo especificado en el a t r i b u t o ~ ~ya ~ sea ~ o GET ~ , (ajuntado al final del URL) o POST (enviado como un paquete diferente). En segundo lugar, deberia fijarse en 10s nombre s de 10s formularios t i r e q t y, o i l q t y Y s p a r k q t y . Utilizaremos estos nombres de nuevo en nuestra secuencia de comandos de PHP. Por ello, resulta importante asignar nombres significativos a 10s campos de formulario que Sean sencillos de recordar a1 escribir la secuencia de comandos de PHP. Algunos editores de PHP generan nombres de campo del tip0 camp02 3 de manera predeterminada. Estos campos resultan dificiles de recordar. Su vida como programador de PHP resultari mucho m i s sencilla si estos nombres reflejan 10s datos que se introducen en el campo. Es aconsejable adoptar un estindar de codificacibn para nombres de campos de manera que todos 10s nomljres $el sitio utilicen el mismo formato. De esta forma le resultar6 m6s sencillo recordar, por ejemplo, si abrevib una palabra en el nombre de un campo o si utilizb guiones bajos para representar espacios.

Procesamiento del formulario Para procesar el formulario, tendremos que crear la secuencia de comandos mencionada en el atributo A C T I O N de la etiqueta FORM llamada p r o c e s s o r d e r php. Abra su editor de texto y Cree este archivo. Escriba el siguiente cbdigo:

.

< t i t l e > B o b l s Auto P a r t s

< h l > B o b t s Auto P a r t s < / h l > 0rder Results

-

Order

Results

Desnrrollo We6 con P H P !I MySQL

Como observar6, todo lo que hemos escrito hasta ahora es simple c6digo HTML. Ha llegado el momento de agregar algo de c6digo PHP a nuestra secuencia de comandos.

Agregue las siguientes lineas debajo del encabezado < h 2 > :

Guarde el archivo y cfirguelo en el navegador. Para ello, rellene el formulario de Bob y haga clic sobre el b o t h Submit Order. El resultado deberia parecerse a1 ilustra-

-

Bob's Auto Parts Order Results Order processetl.

F i g u r a 1.2. El texto pasado a la instruccion echo de PHP se refleja en el navegador

Fijese en c6mo se incrust6 el codigo de PHP que escribimos dentro de un archivo HTML de aspecto normal. Intente visualizar el c6digo fuente en su navegador. Deberia mostrarse la siguiente secuencia:

No se ve ninguna secuencia de PHP ya que el intbrprete de PHP ha recorrido la secuencia de comandos y la ha sustituido con su resultado. Por lo tanto, se puede generar c6digo HTML limpio y visible a partir de PHP desde cualquier navegador. En otras palabras, el navegador del usuario no necesita entender PHP. Este hecho ilustra de forma resumida el concept0 de secuencias de comandos del lado del servidor. El c6digo PHP se ha interpretado y ejecutado en el servidor Web, lo que difiere de JavaScript y de otras tecnologias de cliente que se interpretan dentro del navegador Web del equipo de un usuario. El c6digo de archivo se compone de cuatro elementos: HTML Etiquetas PHP Instrucciones PHP Espacios en blanco Tambibn podemos agregar Comentarios La mayor parte de las lineas de este ejemplo son sencillo c6digo HTML.

Estilos de etiquetas P H P En PHP existen cuatro estilos diferentes de etiquetas que podemos utilizar. Los siguientes fragmentos de c6digo son equivalentes: Estilo XML

~ s t es e el tip0 de etiqueta que utilizaremos en el libro. Se trata del estilo de etiqueta preferido que usar con PHP 3 y 4. El administrador del servidor no puede desactivarlo lo que garantiza su disponibilidad para todos 10s servidores. Este estilo de etiqueta se puede utilizar con documentos XML (del inglbs Extensible Markup Language, Lenguaje de marcado extensible). Si tiene previsto utilizar XML en su sitio, deberia utilizar este estilo de etiqueta. Estilo corto

Este estilo de etiqueta es el mAs simple y sigue el estilo de una instrucci6n de procesamiento SGML (del inglbs Standard Generalized Markup Language, Lenguaje de marcado generalizado estAndar).Para utilizar este tip0 de etiqueta (la mAs corta), debe habilitar el padmetro s h o r t t a g s en el archivo de configuraci6n o compilar PHP para que utilice este tipode etiquetas. En el aphdice A encontrarA mAs informaci6n sobre su instalaci6n.

Desarrollo Web con PUP y MySQL

Estilo SCRIPT

Este estilo de etiqueta es la mis larga y le resultari familiar si conoce JavaScript o VBScript. Puede utilizarla si estA usando un editor HTML que d6 problemas con otros estilos de etiquetas. Estilo ASP

Este estilo de etiqueta es el que utilizan las PAginas activas de servidor (ASP). Se puede utilizar si ha activado el parimetro asp tags. Puede recurrir a este estilo de etiquetas si est6 utilizando un editor diseiiado para ASP o si ya ha programado en ASP.

lnstrucciones de PHP Para indicarle a1 interprete de PHP qu6 hacer, se introducen instrucciones de PHP entre las etiquetas de cierre y las etiquetas de apertura. En este ejemplo, s610 utilizamos un tip0 de instrucci6n: echo '

Order processed.

';

Como habri supuesto, la funci6n de la instrucci6n echo es muy sencilla: imprime (o repite) la cadena pasada en el navegador. Si examina la figura 1.2, el resultado devuelto es la cadena "Order processed" en el ventana del navegador. Como observark a1 final de la instrucci6n echo aparece un punto y coma. Este signo se utiliza para separar instrucciones en PHP como si se tratara de un punto a1 escribir frases en espaiiol. Si ha programado antes en C o en Java, estarA familiarizado con el uso del punto y coma con dicha funci6n. Uno de 10s errores de sintaxis m i s comunes a1 programar es olvidarse de introducir 10s puntos y comas. Sin embargo, resulta igualmente sencillo descubrir el error y corregirlo.

Espacios en blanco Los caracteres de espaciado como las lineas nuevas (retornos del carro), 10s espacios y 10s tabuladores se conocen como espacios en blanco. Como probablemente sepa, 10s navegadores ignoran 10s espacios en blanco en HTML. Y otro tanto hace el motor de PHP. Examine 10s siguientes dos fragmentos de HTML: Welcome to Bob's Auto Parts!

What w ~ u l dyou llke to order today?



Y Welcome Autc Parts!

to Bob's

1 . Curso acelerado de P H P

What would you like to order today?



Estos dos fragmentos de HTML devuelven el mismo resultado a1 representarlos en el navegador. Sin embargo, conviene utilizar espacios en blanco en HTML para mejorar la legibilidad del c6digo. Y otro tanto se puede decir de PHP. El uso de espacios en blanco no es obligatorio per0 facilita la lectura del c6digo si colocamos cada instrucci6n en una linea separada. Por ejemplo: echo 'hello ' echo 'world';

;

echo 'hello ';echo 'world';

son equivalentes, pero la primera versi6n resulta m6s sencilla de leer.

Comentarios Los comentarios son exactamente eso, comentarios. Su funci6n es la de proporcionar indicaciones para aqu6llos que leen el c6digo. Los comentarios se pueden utilizar para explicar el objetivo de la secuencia de comandos, qui6n la escribi6, por qu6 se escribi6 de esa forma, cuando se modifico por ultima vez, etc. Por regla general, todas las secuencias de comandos de PHP incluyen comentarios, salvo las m8s sencillas. El intbrprete de PHP ignorar6 cualquier texto de un comentario. En concreto, el analizador de PHP omite 10s comentarios que equivalen a espacios en blanco. PHP admite el uso de comentarios del estilo de C, C++ y secuencias de comandos del nucleo. A continuaci6n se recoge un-comentario del estilo de C multilinea que puede aparecer a1 inicio de una se?uencia de comandos de PHP: / * Autor: Bob Smith Modificado por ultima vez: 10 d e Abril Esta secuencia d e comandos procesa pedidos d e clientes

*/

Los comentarios multilinea deben empezar y acabar con el simbolo I*. Como ocurre en C, 10s comentarios en linea no se pueden anidar. T a m b i h se pueden utilizar comentarios de una sola linea, bien en estilo de C++: echo '

Order processed.

'; / / Empezar a imprirnir el pedido

o en estilo de secuencia de comandos del nucleo: echo

'

Order processed.

';

#

Ernpezar

a

imprirnir

el

pedido

En ambos casos, todo lo que venga despu6s del simbolo de comentario (# o / / ) se considera con un comentario hasta el final de la linea y el final de la etiqueta de PHP, segun qu6 ocurra primero.

Desnrrollo Web corr P H P y MySQL

Hasta ahora, no hemos utilizado PHP para hacer algo que no pudiesemos conseguir con HTML. La raz6n principal para utilizar un leguaje de secuencia de comandos d e servidor es suministrar contenido dindmico a 10s usuarios de un sitio. Se trata d e una aplicaci6n importante porque el contenido que cambia e n funci6n d e las necesidades del usuario o con el tiempo garantiza la vuelta d e 10s visitantes. PHP nos permite realizar esta tarea d e manera sencilla. Vamos a empezar por un ejemplo sencillo. Sustituya el c6digo d e PHP del archivo p r o c e s s o r d e r . php por el siguiente c6digo:

En este fragmento, se utiliza la funci6n d a t e ( ) integrada en PHP para indicar a1 cliente la fecha y la ahora a la que procesar el pedido. Esta informacion serA diferente cada vez que se ejecute la secuencia d e comandos. En la figura 1.3 se ilustra el resultado d e ejecutar la secuencia d e comandos en una ocasi6n: -1iYlx D1rem6n[€I hnp /I #ebsewef/drapleflIprocessorder php

Bob's Auto Parts

- 88 (3 11

-

order Gesults Order processed al04:11. 3 1st Januay

Figura 1.3. La funcion date() devuelve una cadena de fecha con formato

Llamada cle FIJ nciones Examine la llamada a la funci6n date ( ) . Se trata de la forma general que adoptan las llamadas d e funci6n. PHP incorpora una extensa biblioteca d e funciones que puede utilizar para desarrollar aplicaciones Web. La mayor parte d e estas funciones pasan y devuelven datos.

1 . Curso acelerado de P H P

Examine la siguiente llamada de funci6n:

Fijese en que estamos pasando una cadena (datos de texto) a la funci6n dentro de un par de parhtesis. Esta operaci6n se conoce como llamar a1 argumento o parhmetro de la funci6n. Estos argumentos son 10s datos de entrada utilizados por la funci6n para devolver resultados especificos.

La funci6n d a t e ( ) espera a que el argumento que se le pase sea una cadena de formato, que represente el estilo que se desea utilizar para devolver 10s datos. Cada una de las letras de la cadena representa una parte de la fecha y la hora. H es la hora en formato 24 horas, i son 10s minutos precedidos de un cero cuando resulte necesario, j es el dia del mes sin utilizar un cero inicial, s representa el sufijo ordinal (en este caso "th" del ingles) y F es el nombre completo del mes. (En un capitulo posterior se incluye una lista completa de 10s formatos que admite la funci6n d a t e ( ) ).

Como acceder a las variables de formulario El 6nico objetivo de utilizar el formulario de pedido es recoger el pedido del cliente. Con PHP resulta muy sencillo obtener 10s detalles de lo que acaba de escribir el cliente, per0 el metodo exacto depende de la versi6n del lenguaje que est4 utilizando y de un parhmetro del archivo php.ini.

-

-

Variables de formulario Dentro de una secuencia de comandos de PHP, podemos acceder a cada uno de 10s campos del formulario como una variable de PHP cuyo nombre se relaciona con el nombre del campo del formulario. En PHP 10s nombres de variables se reconocen porque comienzan con el signo del d6lar ($). Un error habitual es olvidarse de incluir este simbolo. Puede acceder a 10s contenidos del t i r e q t y de las siguientes formas: Stireqty $-POST[ 'tireqty'] $HTTPPPOSTPVARS['tireqtyq]

/ / estilo corto / / estilo intermedio / / estilo largo

En este ejemplo, y a lo largo del libro, se utiliza el estilo largo para hacer referencia a las variables de formulario per0 puede crear versiones cortas de las variables para facilitar su uso. Se trata de una opci6n prhctica y segura de procesar 10s datos que funcionarh en todos 10s sistemas sea cual se su versi6n o configuraci6n.

Desarrollo Web con P H P y MySQL

En su c6dig0, puede utilizar otro enfoque, per0 para ello deberia conocer las diferentes opciones. En resumen: El estilo corto es prictico, per0 requiere activar el parimetro de configuraci6n register global s.(El valor predeterminado varia de una versi6n a otra de PHP.) En eGe estilo resulta sencillo cometer errores que podrian convertir a su c6digo en inseguro. El estilo intermedio resulta bastante prictico, per0 hizo su aparici6n en la versi6n PHP 4.1.0, por lo que no funcionari en las versiones antiguas. El estilo largo es el estilo que incluye m i s detalles, per0 es el unico que garantiza el funcionamiento del c6digo en todos 10s servidores, con independencia de su configuraci6n. Sin embargo, tenga en cuenta que se considera como obsoleto y que es probable que con el tiempo acabe desapareciendo. Nuestra intenci6n es que el codigo de ejemplo utilizado en el libro funcione sin necesidad de ninguna modificaci6n en la mayor cantidad de sistemas posibles. Por esta raz6n, hemos optado por el estilo largo, per0 puede escoger otro mbtodo. En el estilo corto, 10s nombres de las variables utilizadas en la secuencia de comandos son iguales a 10s nombres de 10s campos del formulario HTML. No es necesario declarar las variables en la secuencia de comandos o adoptar ninguna medida para crear dichas variables. Se pasan en la secuencia de comandos bisicamente de la misma forma que se pasan argumentos a una funcion. Si ha escogido este estilo, puede utilizar una variable como $tireqty. El campo ti rdqty del formulario crea la variable $tireqt y en la secuencia de comandos de procesamiento. El uso del estilo corto exige la activaci6n de un comando llamado register gl oba 1s en el archivo de configuracion php .ini.En PHP, desde la versi6n 4.2.0 en adelante, este parimetro esti desactivado de manera predeterminada. Por el contrario, en las versiones anterioreS'est6 activado. Resulta prictico disponer de este tip0 de acceso a las variables, per0 antes de activar el parimetro register global s conviene conocer las razones que han llevado a1 equipo de desarrollo de PHP a dejarlo desactivado. Como hemos dicho, este tip0 de acceso a las variables resulta practico, per0 es proclive a cometer errores de programaci6n que podrian comprometer la seguridad d e las secuencias d e comandos. Si las variables d e funci6n se convierten automiticamente en variables globales, no existiri una diferencia clara entre las variables creadas por nosotros y las variables no fiables procedentes directamente del usuario. Si no asignamos un valor inicial a nuestras variables, 10s usuarios de las secuencias de comandos pueden pasar variables y valores en forma de variables de formulario que se mezclarin con las nuestras. Si se opta por utilizar el estilo corto para acceder a las variables, es aconsejable asignar un valor inicial a las variables. El estilo medio implica la recuperaci6n de variables de formulario de una de las matrices $ POST, $ GET y $ REQUEST.Una de estas matrices contendra 10s detalles de tod& las variables de formulario. La variable utilizada dependeri del mbtodo

1. Curso acelerado de P H P

utilizado para enviar el formulario, POST o GET, respectivamente. Ademds, todos 10s datos enviados a trav6s de 10s m6todos POST y GET estardn disponibles a trav6s de $-REQUEST. Si el formulario se envia por el metodo POST, 10s datos introducidos en el camPO ti reqty se almacenardn en $ POST [ ' ti reqty ' ] . Si el formulario se envia utilizando GET, 10s datos se almacenarin en $ GET [ ' tireqt y 1 . En cualquiera de 10s dos casos, 10s datos estardn disponibles e i $ REQUEST [ ' tireqty ' 1 . Estas matrices se incluyen dentro de 10s conocido; conjuntos superglobales. Volveremos sobre ellos a1 examinar el dmbito de las variables. Si estd utilizando una versi6n antigua de PHP, puede que no disponga de acceso a $ POST o $ GET. En las versiones anteriores a la 4.1.0, esta informaci6n se almacenaba enlas matrices SHTTP POST VARS y SHTTP GET VARS.Este estilo es el que llamaremos estilo largo y sFpuedFutilizar con vewione; antiguas y nuevas de PHP, per0 ha sido considerado como obsoleto por lo que es probable que no funcione en las versiones futuras. En este estilo no existe un equivalente de $-REQUEST. Si estd utilizando el estilo largo, puede acceder a la respuesta del usuario a trav6s d e $ ~ T T pPOST VARS['tireqtyl] o$HTTP GET VARS['tireqtyl]. A lo largo deeste libro, hemos intentado indicar a6nde no funcionard el c6digo con las versiones antiguas de PHP. Los ejemplos utilizados se han probado con la versi6n 4.3 de PHP, por lo que es posible que a veces resulten incompatibles con versiones anteriores a la 4.1.0. Por lo tanto, le recomendamos que utilice la versi6n actual. Como habrd observado, en el c6digo no se comprueba el contenido de las variables para garantizar que se introducen datos correctos en 10s campos del formulario. Intente introducir datos err6neos deliberadamente para observar qu6 ocurre. Cuando termine de leer este capitulo, es probable que desee agregar algun tip0 de validaci6n de datos a la secuencia de comandos. Vamos a examinar el ejemplo. Como 10s nombres de v'ariable resultan un tanto pesados en el estilo lago y nos vamos a basar en un tip0 de variables conocidas como matrices, que no se analizardn de lleno hasta un capitulo posterior, comenzaremos por crear copias que resulten sencillas de utilizar. Para copiar el valor de una variable en otra, puede utilizar el operador de asignaci6n, que en PHP es el signo igual (=). La siguiente linea de c6digo crea una nueva variable denominada $ t i re q t y y copia. 10s contenidos d e $ HTT P- PO STVARS [ ' tireqt y ' 1 dentro de la nueva variable: Coloque el siguiente bloque de c6digo a1 inicio de la secuencia de comandos de procesamiento. El resto de secuencias de comandos de este libro que procesen datos desde un formulario contendrdn un bloque similar a1 inicio. Como no se generard ningun resultado, no importa si se coloca por encima o por debajo de la etiqueta ni de otras etiquetas de HTML con las que se inicie la pdgina. En nuestro caso, solemos colocar este bloque a1 inicio de la secuencia de comandos para asegurarnos de que resulta fdcil de encontrar.

Desarrollo W e b con P H P y MySQL

El c6digo crea tres nuevas variables $ t i r e q t y , $ o i l q t y y $ s p a r k q t y y las configura para que contengan 10s datos enviados a traves del metodo POST desde el formulario. Para que la secuencia de comandos haga algo visible, agregue las siguientes lineas a la parte final de la secuencia de comandos de PHP: echo '

Your order is as follows: < / p > ' ; echo Stireqty.' tires
I ; echr Soilqty.' bottles of oil
=

izquierda

>

izquierda

+-.

izquierda

*I%

derecha

-!

derecha

[

n la

new

- ++ - (entero) (doble) (cadena) (matriz) (objeto) @ 1

1 . Curso acelerado de P H P

Fijese en que el operador con mayor prioridad no se ha analizado todavia: 10s parhtesis. El efecto de 10s parentesis consiste en incrementar la prioridad de todos 10s elementos incluidos en su interior. Esto simbolos permiten alterar las reglas de prioridad cuando resulte necesario. Recuerde la siguiente seccibn del 6ltimo ejemplo: Stotalamount

=

Stotalamount

+

+

(1

Staxrate);

Si hubieramos escrito Stotalamount

=

Stotalamount

+

1

+

Staxrate;

el operador de multiplicaci6n, que tiene precedencia sobre el operador de suma, se aplicaria en primer lugar, lo que nos daria un resultado incorrecto. El uso de 10s parentesis permite forzar el calculo de la subexpres i o n 1 + $ taxra te en primer lugar. Puede utilizar tantos parentesis como desee en una expresibn. En primer lugar se calcular6n 10s mas internos.

Funciones de variables Antes de abandonar el mundo de las variables y de 10s operadores, vamos a examinar las funciones de variables de PHP. Se trata de una biblioteca de funciones que permite manipular y probar variables de distintas formas.

Como probar y establecer tipos de variables La mayor parte de estas-fundones se utilizan para probar el tip0 de una variable. Las dos mas generales son gett ype ( ) y settype ( ) . Estas tienen 10s siguientes prototipos de funciones; es decir, lo que esperan 10s argumentos y lo que devuelven. string gettypeimixed var); boo1 settype (mixed var, string type);

Para utilizar gett ype ( ) , la pasamos en una variable. Determinara su tipo y devolvera una cadena que contenga el tip0 de nombre o "tipo desconocido" si no es uno de 10s tipos estandar, es decir, entero, doble, cadena, matriz u objeto. Para utilizar sett ype ( ) , le pasamos una variable cuyo tip0 deseemos modificar y una cadena que contenga un nuevo tip0 para dicha variable a partir de la lista anterior. Podemos utilizarla de la siguiente forma: $a = 56; echo gettype($a).'
I ; settype($a, 'double'); echo gettype($a).'
I ;

Desarrollo Web con PHP y MySQL

Cuando se llama a g e t t y p e ( ) por primera vez, $ a es de tip0 entero. Tras llamar a s e t t y p e ( ) , el tip0 se convierte en doble. PHP tambien incorpora funciones para probar tipos. Cada una de estas toma una variable como argument0 y devuelve t r u e o f a 1s e . Las funciones son: is-array() is-double(), is-float(), is-real() (Toda la misma funci6n) is-long(), is-into, is-integer() (Toda la misma funci6n)

Como probar el estado de las variables PHP dispone de varias formas de probar el estado de una variable. La primera de estas formas es i s s e t ( ) , que consta del siguiente prototipo: boo1 isset(rnixed var);

Esta funci6n toma el nombre de una variable y devuelve t r u e si existe y f a 1 s e en caso contrario. Puede eliminar una variable utilizando u n s e t ( ) . Este es su prototipo: void

unsetirnixed

var);

Esta funci6n suprime la variable si se pasa y devuelve t r u e . Por ultimo, tenemos la funci6n e m p t y ( ) . Esta funci6n comprueba si existe una variable y si contiene un valor no vacio o distinto a cero y devuelve t r u e o f a l s e segun el caso. Su sintaxis es lasiguiente: boolean emptyimixed var);

Vamos a examinar un ejemplo del uso de estas funciones. Intente agregar el siguiente cddigo a su secuencia de comandos temporalmente: echo echo echo echo

isset($tireqty); issetisnothere); empty($tireqty); ernpty($nothere);

Actualice la pigina para ver 10s resultados. La variable $ t i r e q t y deberia devolver t r u e de i s s e t ( ) con independencia del valor introducido o de si se introdujo algun valor en el campo del formulario. Que sea e m p t y ( ) o no depende del valor introducido. La variable $ n o t h e r e no existe, por lo que generard f a l s e desde i s s e t ( ) y t r u e desdeempty ( ) . Estas funciones pueden resultar utiles para asegurarnos de que el usuario rellen6 10s campos apropiados del formulario.

1 . Curso acelerado de PHP

Reinterpretacion de variables Puede lograr el equivalente de convertir una variable llamando a una funcibn. En este sentido, existen tres funciones utiles: int intval(mixed var); float doubleval(mixed var); string strvalimixed var);

Cada una de &as acepta una variable como entrada y devuelve el valor de la variable convertida en el tip0 apropiado. En este libro, y en la documentaci6n de php.net, se utiliza el tip0 de datos mixed. Este tip0 de datos no existe, per0 como PHP es tan flexible en materia de procesamiento de tipos, gran parte de las funciones pueden tomar muchos (o todos) 10s tipos de datos como argumento. Para identificar 10s argumentos en 10s que se permiten utilizar muchos tipos se utiliza mixed.

Estructuras de control Las estructuras de control de un lenguaje permiten controlar el flujo de la ejecuci6n de un programa o secuencia de comandos. Las estructuras de control se pueden agrupar en estructuras condicionales (o de bifurcaci6n) y en estructuras de repeticibn, o bucles. En las siguientes secciones se examinarhn las implementaciones especificas de cada una de ellas en PHP.

Toma de decisiones'con estructuras condicionales Si deseamos responder 16gicamente a las entradas de nuestros usuarios, nuestro c6digo debe ser capaz de tomar decisiones. Esta funci6n recae sobre las estructuras condicionales.

Las instrucciones if Podemos utilizar una instrucci6n if para tomar una decisi6n. Debemos darle una condici6n a la instrucci6n if para que la utilice. Si la condicidn fuera t r u e , se ejecutar6 el siguiente bloque de c6digo. Las condiciones de las instrucciones if deben ir incluidas entre parhtesis. Por ejemplo, si mandamos un pedido en el que no se incluyan neumriticos, latas de aceite ni bujias en el sitio de Bob, probablemente se deber6 a que se ha pulsado accidentalmente el b o t h Submit En lugar de indicarnos "Order processed", la pigina podria devolver un mensaje mucho m6s util.

Desnrrollo Web con P H P y MySQL

Cuando el visitante realiza un pedido sin n i n g h articulo, podriamos indic5rselo. Para ello podemos utilizar la siguiente instrucci6n i f :

La condici6n que estamos utilizando es S t o t a l q t y == 0. Recuerde que el operador iguales (==) se comporta d e manera distinta a1 operador d e asignacion (=). L a c o n d i c i 6 n $ t o t a l q t y == 0 ser6 trueporloque$totalqtyesigualacero. Si $ t o t a l q t y no es igual a cero, la condici6n s e r i fa 1 s e . Cuando la condici6n sea t r u e , la instruccidn e c h o se ejecutari.

A menudo necesitaremos ejecutar m5s d e una instrucci6n dentro de una secuencia condicional como i f . No es necesario colocar una nueva instrucci6n i f para cada una de ellas. En su lugar, podemos agrupar un nGmero de instrucciones en un bloque. Para declarar un bloque, encigrrelo entre llaves: if4

Stotalqry

==

0

1

i echo ' < f o n t c o l o r = r e d > '; echcs 'You rlisl n n t o r d e r ; i n y t h i r l q echc~ f,)nt.>' ;

t h e previous p a g e ! ' k : r

/:.I;

'%'/

I

Las tres lineas d e c6digo encerradas entre llaves forman ahora un bloque d e codigo. Si la condici6n es t r u e , se ejecutar5n las tres lineas. Si la condici6n es f a l s e , se ignorarin las tres lineas.

Como se menciono anteriormente, en PHP no es importante la disposicion del codigo. Sin embargo, conviene sangrarlo por cuestiones de legibilidad. Las sangrias nos permiten distinguirde un vistazo que lineasse ejecutaran solo si se cumplen una condicion, que instruccionesse agrupan en bloques yque instrucciones forman parte de bucles o funciones. En 10s ejemplos anteriores, se ha sangrado la instruccion que depende de la instruccionif y las instruccionesque forman el bloque.

lnstrucciones else Con frecuencia no s610 querra decidir si desea que se ejecute una acci6n sin0 seleccionar una entre un conjunto d e ellas. Las instrucciones e l s e permiten establecer la adopci6n de una accion alternativa cuando la condicidn de una instrucci6n i f resulte f a l s e . Queren~osavisar a 10s

1. Curso acelerado de PHP

clientes de Bob si envian una pedido sin ningtin articulo. Por otra parte, si realizan un pedido, en lugar de una advertencia, queremos mostrarles lo que han pedido. Si reorganizamos nuestro c6digo y agregamos una instrucci6n e l s e , podemos mostrar un aviso o un resumen de 10s articulos solicitados. if (

Stotalqty

==

0

)

I e c h o 'You d i d n o t o r d e r a n y t h i n g o n t h e p r e v i o u s p a g e ! < b r

/ > I ;

I else

I echo S t i r e q t y . ' t i r e s < b r / > I ; echo S o i l q t y . ' b o t t l e s of o i l < b r / > I ; echo S s p a r k q t y . ' s p a r k plugs
I ;

I

Podemos desarrollar procesos 16gicos mds complejos anidando instrucciones i f . En el siguiente c6dig0, no s610 se mostrard el resumen si la condici6n $ t o t a l q t y == 0 resulta ser cierta, sin0 que ademds cada linea del resumen s610 se mostrar6 si se cumple su propia condici6n. i f ( Stotalqty

==

0)

i e c h o 'You d i d n o t o r d e r a n y t h i n g on t h e p r e v i o u s p a g e ! < b r t else

/ > I ;

i if

( $tireqty>O ) echo S t i r e q t y . ' t i r e s < b r / > I ; i f ( $oilqty>O ) echo S o i l q t y . ' b o t t l e s of o i l < b r i f ( Ssparkqty>O ) echo S s p a r k q t y . ' s p a r k p l u g s < b r /

I

-

-

/ > I ;

> I ;

lnstrucciones elseif Para muchas de las decisiones que tomamos suele haber mds de dos opciones. Podemos crear una secuencia de varias opciones utilizando la instrucci6n e 1s e i f . Esta instrucci6n es una combinaci6n de e l s e e i f . A1 suministrar una secuencia de condiciones, el programa puede comprobar cada una de ellas hasta que encuentre una que sea t r u e . Bob ofrece un descuento por grandes pedidos de neum6ticos. La oferta se articula de la siguiente forma: Menos de 10 neumdticos, sin descuento De 10 a 49,5% de descuento De 50 a 99,10% de descuento 100 o mds de 100,15% de descuento

Desarrollo W e b con PHP y MySQL

Podemos crear cddigo para calcular el descuento utilizando condiciones e instrucciones i f y e 1 s e i f . Necesitamos utilizar el operador AND ( & &) para combinar las dos instrucciones en una. S t i r e q t y < 10 $ d i s c o u n t = 0; e l s e i f ( S t i r e q t y >= $ d i s c o u n t = 5; e l s e i f ( S t i r e q t y >= $discount = 10; e l s e i f ( S t i r e q t y >= $discount = 15; i f (

i 1 0 & & S t i r e q t y < s e l e c t name="findM> I1m a r e g u l a r customer < o p t i o n v a l u e = "bM.>TV a d v e r t i s i n g < o p t i o n v a l u e = " c M > P h o n ed i r e c t o r y < o p t i o n v a l u e = " d M > W o r d o f mouth



I . Curso ncelerndo de P H P

k c h m Edlabn Ver Fmntos Henam~entas Ayuda Dtrembn

I& hnp Ilwebserverlcheplerl lordedorm2 hlml

Bob's Auto Parts Order Form Item Tires

oil Spark Plugs

Quantity

r r r

How did you find Bob's Il'rn a regular customer3 Phone directory

Figura 1.6. El formulario de pedidos pregunta a 10s visitantes como encontraron el sitio Bob's Auto Parts

Este c6digo d e HTML agrega una nueva variable de formulario cuyo valor ser6 "a", "b", " c " , o " d " . Podriamos procesar esta nueva variable con una serie d e instrucciones i f y e l s e i f como la siguiente:

Como alternativa podriamos utilizar una instrucci6n switch:

Desarrollo Web corl P H P y MySQL

La instruccion s w i t c h se cornporta d e una forma ligeramente diferente a una instrucci6n i f o e l s e i f.Una instruccion i f afecta s610 a una instruccidn a menos clue se utilicen llaves de manera deliberada para crear bloques d e instrucciones. Una instruccion s w i t c h se cornporta d e fornia contraria. Cuando se activa un caso en una instruccion s w i t c h , PHP ejecutara las instrucciones hasta que alcance una instrucci6n b r e a k . Sin una instrucci6n b r e a k, la instrucci6n s w i t c h ejecutaria todo el ccidigo situad o detris del caso que resultara ser cierto. A1 alcanzar la instrucci6n b r e a k, se ejecutara la linea de c6digo situada tras la instruccion s w i t c h .

Si no estci familiarizado con estas instrucciones, es probable que se este preguntando c u d es la mejor. Sin embargo, no podemos d a r una respuesta exacta a esta pregunta. No hay nada que pueda hacer con una o varias instrucciones e l s e , e l s e i f o s w i t c h que no puede hacerse con un conjunto de instrucciones i f . Deberia intentar utilizar aquella opci6n que le resulte m i s sencilla de leer Con el tiempo ir6 aprendiendo a seleccionar una u otra.

'teraci6n: rcpctici6n d e acciones Una de las cosas para las que 10s ordenadores han demostrado siempre ser buenos es automatizar tareas repetitivas. Si hay algo que necesite hacer d e la misma forma una serie d e veces, puede utilizar un bucle para repetir partes d e un programa. Bob quiere una tabla que muestre el coste d e envio en funcion d e la distancia a la que se estA enviando el pPtquefe. El coste se puede calcular con una sencilla f6rmula. Queremos clue la tabla d e costes d e envio se parezca a la ilustrada en la figura 1.7.

Distance Cost

Figura 1.7. Esta tabla muestra el coste de envio en funcion de la distancia

1. Curso acelerado de PHP

El listado 1.2 incluye el c6digo HTML utilizado para mostrar esta tabla. Como observarfi, el c6digo es largo y repetitivo. Listado 1.2.freight.htrnl: la tabla de costes de envio de Bob

Convendria delegar en un ordenador barato e incansable la tarea de escribir este c6digo de HTML en lugar de recurrir a un humano que se aburriria con facilidad (y a1 que habria que pagar). Las instrucciones de bucle hacen que PHP ejecute una instrucci6n o un bloque de manera repetida.

Bucles while El tip0 de bucle mfis sencillo en PHP es el bucle w h i l e . Como en el caso de las instrucciones i f , se basan en una condici6n. La diferencia entre un bucle w h i l e y una instrucci6n i f es que &ta ejecuta el siguiente bloque de c6digo si la condici6n resulta ser t r u e . Un bucle w h i l e ejecuta el bloque repetidamente mientras la condici6n sea t r u e . Los bucles w h i l e se utilizan cuando no se sabe cufintas iteraciones resultarfin necesarias para que la condici6n resulte cierta. Si el nfimero de iteraciones debe ser fijo, considere la posibilidad de utilizar el bucle f o r .

Desarrollo Web con PHP y MySQL

La estructura b6sica de un bucle while es la siguiente:

El siguiente bucle mostrar6 10s n6meros d e l l a1 5. Snum = 1; while (Snum