Está en la página 1de 42

ACCESO A DATOS CON PHP

Por: MSC Adolfo Luna Snchez Octubre de 2012

Contenido
1. Introduccin a XAMPP ............................................................................................................ 3 2. Introduccin al lenguaje PHP ................................................................................................ 14 3. Scripts php y el lenguaje HTML ............................................................................................. 28 4. Proveedores de Datos .......................................................................................................... 31 5. Conexiones y Resultsets ....................................................................................................... 33 6. Presentacin de Datos .......................................................................................................... 42 7. Validacin y Seguridad de los datos ...................................................................................... 42

1. Introduccin a XAMPP
XAMPP es un paquete formado por un servidor web Apache, una base de datos MySQL y los intrpretes para los lenguajes PHP y Perl. De hecho su nombre corresponde a la abreviatura de estos, X (para cualquier sistema operativo), A (Apache), M (MySQL), P (PHP) y P (Perl). XAMPP es independiente de plataforma y tiene licencia GNU GPL. Existen versiones para Linux (probado para SuSE, RedHat, Mandrake y Debian), Windows (Windows 98, NT, 2000, XP y Vista), MacOS X y Solaris (desarrollada y probada con Solaris 8, y probada tambin con Solaris 9). Una de las ventajas de XAMPP es que de una forma muy sencilla y rpida permite montar en una computadora personal un entorno de desarrollo de cualquier aplicacin web que use PHP y base de datos. La configuracin por defecto de XAMPP tiene algunas deficiencias de seguridad por lo que no es recomendable usarla como una herramienta para produccin, sin embargo con algunas modificaciones es lo suficientemente seguro para ser usada como servidor de sitios web en internet. Desde LAMPP (Linux AMPP) si se puede hacer una instalacin segura en la ruta "/opt/lampp/lampp security". Instalacin El instalador se puede obtener en la pgina oficial de XAMPP. Si se desea usar una versin para Windows se puede obtener en http://www.apachefriends.org/en/xampp-windows.html. En este documento se muestra como instalar XAMPP en una mquina con Windows XP Pro. Tambin se puede instalar sin instalador descomprimiendo el ZIP directamente en la computadora.

Una vez descargado el instalador, al ejecutarlo inicia con la siguiente ventana ....

Elegimos el idioma y pulsamos OK

Pulsamos el botn Next.

Seleccionamos la carpeta destino donde se instalar la herramienta.

En este paso podemos elegir instalar los distintos mdulos como servicios de Windows. Para el ejemplo slo vamos a hacerlo para el Apache y MySQL.

Cuando la instalacin termine hacemos click en el botn Finish. Administracin Una vez instalado correctamente XAMPP vamos a ver las posibles opciones de configuracin y administracin de la herramienta y sus mdulos instalados, para ello arrancamos el panel de control de XAMPP.

En este panel de control podemos ver todos los mdulos instalados. Para cada mdulo podremos parar su servicio (Stop), arrancarlo (Start), ver su estado (Stop / Running), marcarlo como servicio (checkbox Svc) y entrar en su panel de administracin (Admin). Para probar que la instalacin de XAMPP fue exitosa basta con poner en el navegador "http://localhost"o "http://127.0.0.1"y nos aparecer la aplicacin de administracin web. En ella tenemos un seccin de administracin web de XAMPP, una seccin de insteresante demos y otra con herramientas incluidas en el paquete como phpMyAdmin, FileZilla FTP, Webalizer, etc.

En la primera seccin podremos ver toda la informacin relativa al PHP instalado (phpinfo()). Adems tenemos toda la documentacin online de cada uno de los componentes y mdulos incorporados en la herramienta. Como se coment anteriormente XAMPP se desarroll inicialmente para entornos de desarrollo y no para entornos de produccin, como se puede ver en la opcin de chequear seguridad hay muchos agujeros y deficiencias. Para solucionar estos agujeros vaya a este enlace "http://localhost/security/xamppsecurity.php " antes de publicar nada en un website.

En la seccin de herramientas hay dos bastante interesantes, phpMyAdmin y Conmutador PHP. La primera de ellas, phpMyAdmin es una herramienta muy conocida que permite administrar el servidor MySQL que instal. Antes de empezar a trabajar con esta herramienta hay que configurar algunas opciones. Inicialmente MySQL crea un usuario por defecto llamado root sin password. Para poder cambiar la password de root se debe acceder a la administracin de MySQL a travs del Panel de Control de XAMPP. Despus de guardar los cambios, hay que modificar el archivo "config.inc.php" situado en "$HOME_XAMPP/phpMyAdmin/" y editar las siguientes lneas:

En este archivo se configurarn las variables necesarias para que phpMyAdmin pueda acceder a MySQL, las ms importantes son auth_type para el tipo de autenticacin, user y password. Para la variable auth_type podemos poner el mtodo de autenticacin http y cuando accedamos a phpMyAdmin nos aparecer una ventana para introducir el usuario y password de MySQL. Sin embargo, si ponemos como mtodo de autenticacin config debemos poner en las variables user y password el usuario y password de MySQL y de esta forma acceder directamente a phpMyAdmin sin preguntar nada el usuario.

Otra herramienta interesante es el conmutador de PHP, es decir, una forma rpida de cambiar la configuracin de PHP de PHP 4 a PHP 5 y viceversa. Para poder conmutar el PHP antes tenemos que detener el servidor Apache. Despus de esto slo tenemos que ejecutar el script "phpswitch.bat" situado en la carpeta principal de la instalacin de XAMPP.

10

Despus de ejecutar el script hay que comprobar que la conmutacin se ha realizado correctamente.

11

Ejemplo Para probar el correcto funcionamiento del servidor se puede usar un sencillo ejemplo realizado en PHP, el cual se conecta a base de datos y recupera datos de una determinada tabla. Para esto las aplicaciones web se deben copiar dentro de la carpeta "htdocs" que se encuentra situada en la carpeta principal de la instalacin de XAMPP. Dentro de htdocs se crea otra carpeta para uso exclusivo de la aplicacin web a alojar. Para este ejemplo se usa una carpeta llamada "tutorial" y dentro de ella se coloca el archivo index.php.

El cdigo que se puede usar para probar la configuracin de PHP es el siguiente:

12

<?php echo(Mi primera aplicacin en PHP.<br>Probando el servidor Apache.); ?>

Este cdigo se deber colocar en un archivo de texto simple y guardarlo con el nombre index.php dentro de la carpeta indicada anteriormente. Para poder ver las aplicaciones creadas basta con introducir en la barra de direcciones del navegador la ruta relativa a partir de la carpeta "htdocs" justo despus de "http://localhost" (en el ejemplo "http://localhost/tutorial").

13

2. Introduccin al lenguaje PHP


PHP significa Hypertext Preprocessor, aunque originalmente significaba Personal Home Page Tools. Los archivos PHP normalmente se denominan con la extensin php, php3 o phtml. El PHP es un lenguaje embebido en pginas HTML y que se ejecutan el servidor. Productos similares y propietarios son Active Server Pages (ASP) de Microsoft, ColdFusion de Allaire y Java Server Pages (JSP) de Sun. PHP es fcil de aprender comparado con otros mecanismos para obtener la misma funcionalidad. A diferencia de JSP o CGI basados en C, PHP no requiere un conocimiento exhaustivo del lenguaje de programacin. A diferencia de Perl, PHP tiene una sintaxis muy fcil de comprender y a diferencia de ASP, no requiere conocer ms de un lenguaje de programacin o de la instalacin de mdulos externos o comerciales para realizar tareas ms complicadas no previstas en el lenguaje ms usado (Visual Basic Script). La mayora de las funciones ms tiles estn predefinidas:

Acceso a bases de datos: ODBC, Oracle, Postgres, SQL Server, MySQL, Informix, Interbase, SyBase, mSQL, dBase Conectividad: HTTP, FTP, COM, YP/NIS, SNMP, Sockets, CORBA, LDAP Servicios Correo y Noticias: POP, IMAP, SMTP, NNTP Textos y Grficos: XML, HTML, PDF, GD, Flash Funciones Matemticas. POSIX: semforos, memoria compartida, acceso a archivos, expresiones regulares, cronmetros Comercio Electrnico: Cybercash, Verisign Formularios. Encriptacin y Compresin: MD5, Gzip, Bzip2, OpenSSL

Sintaxis, Variables y Salida PHP es bastante flexible, ms que intentar ser estricto y forzar una disciplina en la programacin, enfatiza conveniencia para el programador ms que la correccin. El PHP tiene un conjunto mnimo de reglas que hay que seguir, caso contrario podremos ver los mensajes de error tipo "Parser error in line XXX". Sintaxis La sintaxis del PHP es similar a la del lenguaje C, o sea, muy sencilla. Si no sabe como escribir una instruccin, pruebe primero como lo hara en C, y si no funciona acuda al manual.

14

PHP ignora los espacios en blanco


$valor=2+2;

es equivalente a
$valor <TAB>= 2 + 2;

oa
$valor = 2 + 2;

PHP es a veces sensitivo a maysculas-minsculas En algunos casos PHP no es sensitivo a las maysculas o minsculas, como en el caso de nombres de funcin o construcciones del lenguaje (if, then. else, while, for, etc.), pero para otros s que lo es, por ejemplo para nombres de variables.
<? $total = 100; print "El total es $total <br>"; print "El total es $Total <br>"; ?>

La salida del programa anterior ser: El total es 100 El total es Las sentencias son expresiones que terminan en punto y coma La tpica sentencia en PHP es una asignacin:
$saludos = "Bienvenidos a PHP";

Los bloques de construccin ms pequeos son las palabras indivisibles, tal como nmeros (2.718281), cadenas ("uno, dos, tres"), variables ($saludos), constantes (TRUE, FALSE) y las construcciones que definen el lenguaje (if, then ). Estas palabras se separan de las dems por espacios en blanco o caracteres especiales que hacen de separador, como parntesis, operadores, llaves, etc. Los siguientes elementos en complejidad son las expresiones, que son una combinacin de palabras que tienen un valor. Las expresiones ms simples estn formadas por una sola palabra, como un nmero o una variable. Expresiones simples pueden ser combinadas con operadores para formar expresiones ms complejas, por ejemplo $variable + 2 * 3. Evaluacin de expresiones Cada vez que el intrprete encuentra una expresin, la expresin es inmediatamente evaluada. Esto significa que el PHP primera evala los elementos ms pequeos y luego las combina y obtiene su resultado. Por ejemplo en
$total = 2 * 3 + 4 * 5 + 6;

15

los pasos imaginarios de evaluacin sern:


= = = = 6 + 4 * 5 + 6 6 + 20 + 6 26 + 6 32

Finalmente el valor 32 es asignado a la variable $total. Asignaciones El tipo ms comn de expresin en la asignacin, donde el resultado de una expresin es almacenado en una variable. La forma es el nombre de la variable, que comienza siempre con el smbolo $, seguido de un smbolo igual y a continuacin la expresin a evaluar.
$ocho = 2 + 2 + 2 +2;

Una cosa importante a recordar es que las asignaciones son expresiones y por la tanto tambin tienen un resultado, el mismo que se asigna a la variable:
$doce = 4 + ($ocho = 2 + 2+ 2+ 2);

Expresiones y Sentencias Normalmente hay dos razones para usar una expresin en PHP: 1. por su valor, 2. por su efecto secundario. El valor de una expresin es aquello que se pasa para la evaluacin de expresiones ms complejas, los efectos secundarioes es aquello que ocurre como resultado de una evaluacin. Los casos ms tpicos de efectos son la asignacin de resultados a una variable, imprimir algo en la pantalla del usuario o cambiando valores en una base de datos. Aunque las sentencias son expresiones, no estn incluidas en expresiones ms complejas, lo que significa que la nica razn para usar una sentencia es el efecto secundario.
print("Hola"); // el efecto secundario es imprimir en la pantalla 2 + 2 + 2; // no tiene sentido $seis = 2 + 2+ 2; // el efecto secundario es la asignacin

Construccin de Bloques Aunque las sentencias no pueden ser combinadas como las expresiones, se puede poner una serie de sentencias en cualquier permitido agrupndolas con "{" y "}". Por ejemplo, la construccin if est formada por una verificacin (entre parntesis) seguido de una sentencia que es ejecutada si la condicin es verdadera.
if ( 3 == 2+1) print ("Si, es tres!!!<br>");

Si queremos que se ejecuten varias sentencias en vez de una sola, lo que hacemos es agrupar aquellas sentencias:

16

if ( 3 == 2+1) { print ("Si, es tres!!!<br>"); print ("y no era cuatro.<p>"); }

El sangrado, aunque ignorado por el intrprete del PHP, es muy importante para la comprensin de los programas. Comentarios Los comentarios son porciones del programa que se ponen slo para facilitar la comprensin de lectores, lo primero que hace el intrprete de PHP es quitar todos los comentarios del programa. La forma de los comentarios en PHP estn heredados de varios lenguajes de programacin muy usados en entornos UNIX. Comentarios Tipo C
/* Este es un comentario * similar al del lenguaje C */

Hay que tener en cuenta que los comentarios de este tipo no pueden estar anidados:
/* Este comentario /* dar unos errores horribles en la ltima */ palabra */

Comentarios de una lnea: // y # Estos tipos de comentarios estn heredados del C++, Java, Shell y Perl.
// esta es una lnea // esta es la segunda lnea # esto tambin es un comentario # y tambin este ltimo.

Variables La forma principal de almacenar valores en el medio de un programa son las variables. Las cosas ms importantes a recordar son:

Todas las variables en PHP comienzan con el smbolo dlar $ (heredado del Shell y Perl) El valor de una variable es igual al valor ms recientemente asignado. Las variables son asignadas con el operado '=', con la variable a la izquierda del operador y la expresin a evaluar a la derecha. Las variables no necesitan ser declaradas antes de ser usadas. Las variables no tienen un valor intrnseco, sino que toman el tipo del ltimo valor asignado. Las variables que se usan antes de ser asignadas tienen un valor por defecto.

17

Verificacin de asignacin previa Se puede verificar que una variable haya sido previamente asignada con la funcin IsSet():
if(IsSet($a)) print ("la variable tiene el valor $a"); else print ("la variable a no ha sido asignada");

mbito de las variables El mbito (scope) es el trmino tcnico para definir el comportamiento de un nombre, funcin o variable, dentro de un programa. Puede darse el caso que el nombre tenga el mismo comportamiento y significado en todo el programa (global) o que el mismo nombre se comporte de manera diferente en distintas partes del programa. En este ltimo caso decimos que el mbito de esas variables es local. En PHP, cualquier variable que no est dentro de una funcin tiene mbito global y su valor se encuentra disponible en toda la extensin de la ejecucin del programa. En otras palabras, si se asigna un valor a una variable al principio del programa, el nombre de la variable tiene el mismo significado para el resto del programa y tendr siempre el mismo valor. La asignacin de un valor a una variable no afectar a las variables con el mismo nombre en la ejecucin del PHP de otras pginas ni tampoco a la ejecucin del mismo programa PHP cuando es invocado por conexiones diferentes. La pregunta de si una variable persiste a travs de las diferentes etiquetas PHP, es decir si se puede salir del modo PHP, volver a entrar luego y usar las mismas variables con los mismos valores de una asignacin previa. Si, no hay problemas.
Ejemplo1.php <html> <head> <? $nombre = "Adolfo"; ?> <title>Saludos</title> </head> <body> <p> <? print ("Hola, soy $nombre"); ?> </p> </body> </html>

Salida La mayora de las construcciones del PHP se ejecutan silenciosamente, es decir no producen ninguna salida hacia la pantalla del usuario. Si se desea enviar texto al navegador del usuario se deben usar las funciones de salida.

18

Echo y print Las dos construcciones bsicas para generar salida son echo y print. Aunque al principio su sintaxis puede parecer un poco confusa (como en los ejemplos vistos hasta ahora), esto se debe a que son construcciones bsicas del lenguaje y no funciones, por lo tanto se puede o no usar parntesis.
echo "Hola mundo"; echo ("Hola Mundo"); print "Hola mundo"; print ("Hola mundo"); print (3.1415926);

Variables y Cadenas Se pueden usar echo y printf para imprimir de forma combinada cadenas y variables.
Ejemplo2.php <html> <head> <title>Animales</title> </head> <body> <? $animal = "cabra"; $lugar = "montaas"; $patas = 4; print ("La $animal vive en las $lugar y tiene cuatro patas<br>"); ?> </body> </html>

Comillas simples vs. comillas dobles Es uso de las comillas simples o dobles cambia el comportamiento. Si, como en el ejemplo anterior, se usan comillas dobles, el PHP interpolar (cambiar) los nombres de variables que encuentre por su valor. En cambio si se usan comillas simples, el PHP lo tomar con una cadena que debe imprimirse tal cual han sido escritas.
Ejemplo3.php <html> <head> <title>Animales</title> </head> <body> <? $animal = "cabra"; $lugar = "montaas"; $patas = 4; print ('La $animal vive en las $lugar y tiene cuatro patas<br>'); ?>

19

</body> </html>

Lo que producir el siguiente resultado:


La $animal vive en las $lugar y tiene cuatro patas

Printf Es posible generar una salida con formatos ms complejos mediante el uso de la funcin printf, con una sintaxis similar al lenguaje C o Perl.
Ejemplo4.php <html> <head> <title>Animales</title> </head> <body> <? $animal = "cabra"; $lugar = "montaas"; $patas = 4; printf( "El %s vive en las %s y tiene %d patas<br>", $animal, $luga r, $patas); ?> </body> </html>

Tipos Todos los lenguajes de programacin tienen un sistema que especifican los diferentes tipos de datos que pueden aparecer en los programas. Normalmente los diferentes tipos corresponden a la forma en que representan los valores en la memoria mediante una serie de bits. El sistema de tipos en PHP es extremadamente sencillo y flexible lo que facilita la tarea de los programadores. Los tipos bsicos de PHP son enteros (integers), flotantes (doubles), lgicos (Booleans), cadenas (strings), vectores (arrays) y objetos.

Integers son nmeros enteros, sin punto decimal, como 133. Doubles son nmeros de punto flotante, como 3.1416 o 0.001 o 41.0. Booleans son valores lgicos y slo permiten TRUE o FALSE. Strings son secuencias de caracteres como "El PHP 4 es muy simple" o 'PHP no es complicado'. Arrays son una coleccin de datos indexados por alguna clave.

20

Strings
$str1 = "Una cadena con comillas dobles"; $str2 = 'Una cadena con comillas simples'; $str0 = "" //Cadena vaca

Comillas simples A excepcin de unos pocos casos, las cadenas con comillas simples se almacenan y leen literalmente a como fueron escritas. El siguiente cdigo
$literal = 'La $variable no se ver'; print ($literal);

producir el siguiente resultado.


Mi $variable no se ver.

Las comillas dobles dentro de una cadena limitada por comillas simples no "corta" la cadena, sino que son almacenadas como un carcter norma. La siguiente lnea es legal:
$literal = 'No estamos usando " para limitar esta cadena';

Si se quiere almacenar el carcter ' dentro de la cadena, no es tan complicado, solo hay que escaparlo.
$literal = 'Esta cadena est limitada por \' ';

Comillas dobles Las cadenas limitadas por comillas dobles son procesadas de dos maneras por el PHP: 1. Algunos caracteres que comienzan con barra invertida ('\') son reemplazados por caracteres especiales. 2. Los nombres de variables (que comienzan con $) son reemplazados por una representacin de cadena del valor que almacenan. Los caracteres especiales son:

\n se reemplaza por un carcter de salto de lnea. \r se reemplaza por un "retorno de carro" (<ENTER>) \t se reemplaza por una tabulacin \$ se reemplaza por un smbolo dlar ($) \" se reemplaza por comillas dobles

\\ se reemplaza por una barra invertida ('\'). Interpolacin de variables

Siempre que aparezca un smbolo $ que no haya sido escapado, el PHP intenta interpretarlo como un nombre de variable e inserta el valor de la variable en la cadena. Las reglas son:

21

Si la variable tiene como valor una cadena, dicha cadena es insertada en la cadena actual (si est limitada por comillas dobles). Si la variable tiene un valor que no sea del tipo String, primero se convierte a un String y luego es insertado.

Si la variable no tiene ningn valor asignado, no se inserta nada. Probar la salida de las siguientes instrucciones:
$esto = "esto"; $aquello = "aquello"; $lo_otro = 1.00016 print("$esto, $sin_valor, $aquello+$lo_otro");

Arrays El PHP ofrece la posibilidad de agrupar un conjunto de valores para almacenarlos juntos y referenciarlos por un ndice. Probar la salida del siguiente cdigo:
<? print "Mi_array es $mi_array<BR>"; print "Mi_array[5] es $mi_array[5]<BR>"; $mi_array[5] = "Posicin 6ta"; print "Mi_array[5] es $mi_array[5]<BR>"; print "Mi_array es $mi_array<BR>"; ?>

que produce la siguiente salida:


Mi_array es Mi_array[5] es Mi_array[5] es Posicin 6ta Mi_array es Array

Strings como ndices Los ndices puedes ser del tipo numrico (entero) o una cadena de forma indistinta.
$comida["Italia"] = "Pastas"; $comida["Mxico"] = "Salsas"; $comida["Espaa"] = "Carnes";

Verificacin de Tipos. gettype(arg) Retorna un string representando el tipo de argumento: integer, double, string, array, object o unknown type. is_int(arg), is_integer(arg), is_long(arg) Retorna verdadero si arg es de tipo entero, falso en caso contrario.

22

is_double(arg), is_float(arg), is_real(arg) Retorna verdadero si arg es un double, falso en caso contrario. is_bool(arg) Retorna verdadero si arg es del tipo Boolean (TRUE o FALSE) y falso si no lo es. is_string(arg) Retorna verdadero si arg es un string. is_array(arg) Retorna verdadero si arg es un array. is_object(arg) Retorna verdadero si arg es un objeto. Control de Flujo Es casi imposible hacer programas tiles si no pudisemos hacer que la ejecucin del programa dependiese de determinados valores. Este tipo de ejecucin requiere de estructuras de control que indican que partes del cdigo deben ejecutarse en distintas situaciones. Hay dos tipos bsicos de estructuras de control: 1. Selectivas (branches): if-else-elseif, switch-case 2. Ciclos (loops): while, do-while, for Expresiones Booleanas Todas las estructuras de control tienen dos partes:

test, que determina que parte del resto de la estructura se ejecuta. El test funciona evaluando una expresin Booleana.

cdigo, como una rama separada de cdigo o el cuerpo de un ciclo. La forma ms sencilla de expresiones Booleana son las constantes TRUE y FALSE:
if(TRUE) echo "Esto siempre se imprime"; else echo "Esto nunca se imprime";

o de forma equivalente:
if(FALSE) echo "Esto nunca se imprime"; else echo "Esto siempre se imprime";

23

Operadores Lgicos Los operadores lgicos combinan otras expresiones lgicas para producir un nuevo valor lgico (o Booleano).,
and, &&: Verdadero si ambas condiciones son verdaderas or, ||: Verdadero si una de las condiciones es verdadera. !: Verdadero si la expresin de la derecha es falsa, falso si la expresin de la derecha es

verdadera. xor: Verdadero si alguna, pero no ambas, de las condiciones es verdadera. Operadores de Comparacin
== (igual): Verdadero si ambos argumentos son iguales. != (distinto): Verdadero si ambos argumentos son distintos. < (menor que): Verdadero si el argumento de la izquierda es menor que el de la derecha.

(mayor que) Verdadero si el argumento de la izquierda es menor que el de la derecha. <= (menor o igual): Verdadero si el argumento de la izquierda es menor o igual que el de la derecha. >= (mayor o igual) Verdadero si el argumento de la izquierda es mayor o igual que el de la derecha. === (idntico): Verdadero si ambos argumentos son del mismo tipo y tienen el mismo valor. Ramificacin Las dos estructuras principales son if y switch. If es muy utilizada y es la primera estructura que se aprende. Switch es til para los casos en que tengamos mltiples ramas que dependen de la evaluacin de un solo valor. If-else
if (test) sentencia-1 if (test) sentencia-1 else sentencia-2 if($a < $b) print ("A es menor que B<br>"); else print("B es menor que A<br>");

if($a < $b) { print ("A es menor que B<br>"); print ("A vale $a<br>"); } else

24

print("B es menor que A<br>");

elseif El elseif se suele usar cuando tenemos comparaciones en cascada:


if($dia == 1) print("Primer da"); else if ($dia == 2) print("Segundo da"); else

Se puede reemplazar por:


if($dia == 1) print("Primer da"); elseif ($dia == 2) print("Segundo da"); elseif

Haced pruebas con el if e intentad poner cdigo HTML en el medio saliendo del modo PHP: Switch
switch ($dia) { case: 1: print("Primer da"); break; case 2: print("Segundo da"); break; }

Ciclos While
while(condicin) sentencia while(FALSE) print("Esta instruccin nunca se ejecuta"); while(TRUE) print("Hummm creo que nunca saldremos de este ciclo"); ejemplo5.php <? $i = 0; while($i < 100) {

25

print("i vale $i<br>"); $i = $i + 1; // es equivalente $i++; } ?>

For
for(expresin inicial; test de finalizacin; expresin de final de loop) sentencia ejemplo6.php <? for ($i=0; $i< 100; $i++) { print("i vale $i<br>"); } ?>

Do-while El do-while es similar al while excepto que la verificacin se realiza al final del ciclo, es decir que el ciclo se ejecuta por lo menos una vez.
do sentencia while (expresin); ejemplo7.php <? $i = 0; do { print("i vale $i<br>"); $i = $i + 1; // es equivalente $i++; } while ($i < 100); ?>

Funciones Todos los lenguajes de programacin modernos proveen capacidades de abstraccin de procedimientos que facilita enormemente la programacin y el mantenimiento del cdigo. El mecanismo de PHP (al igual que C) es la funcin. Hay dos clases de funciones: 1. Provistas por el propio lenguaje: phpinf, strtok, exit 2. Definidas por el propio programador. La sintaxis bsica para el uso (llamado) de funciones es el nombre de la funcin seguida, entre parntesis, de una lista de expresiones separadas por coma:

26

nombre_funcion(expresion_1, expresion_2, , expresion_N)

Cuando el PHP encuentra una llamada a una funcin, primero evala las expresiones especificadas como argumentos y usa sus resultados como valores de entrada a la funcin. Despus de la ejecucin de la funcin, si hay algn valor de retorno, es el resultado de la expresin de llamada a funcin. Todas las llamadas a funciones son expresiones de PHP, y como cualquier otra expresin, hay dos razones por las que puede interesar llamar una funcin: por el valor que devuelve o por su efecto secundario. El valor devuelto por una funcin es el valor de la expresin, se puede hacer lo mismo que se hace con una expresin normal.
$resultado = sqrt(25); $resultado = sqrt(5 * 5) + sqrt($resultado);

Definicin de Funciones Las funciones de usuario no son obligatorias en PHP, sin embargo facilitan la programacin en caso que el cdigo se vuelva extenso o requiera la ejecucin de tareas complejas. Un funcin es un trozo de cdigo al cul se le da un nombre y que puede ser llamada una o varias veces desde distintas partes del programa. La sintaxis es:
function nombre_de_funcion $argumento_N) { sentencia_1; sentencia_2; } ($argumento_1, $argumento_2, ,

La palabra reservada function indica el inicio de la definicin de la funcin. El nombre de la funcin debe ser construido de forma similar a las variables, puede estar formado de letras, nmeros y "_" y no debe comenzar con un nmero. Los argumentos son variables de mbito local en la funcin. Las operaciones que hace el intrprete cuando encuentra una llamada a funcin son: 1. El PHP busca la funcin por el nombre, si no est definida genera un mensaje de error. 2. Sustituye los valores de las expresiones en las llamadas en las variables indicadas como argumentos de la funcin. Los valores son pasados por copia, no por referencia. 3. Las sentencias en el cuerpo de la funcin son ejecutadas. Si alguna de las sentencias ejecutadas es un return, devuelve ese valor, caso contrario la funcin finaliza en la ltima sentencia ejecutada y no devuelve ningn valor.

27

3. Scripts php y el lenguaje HTML


Las instrucciones PHP estn embebidas en HTML. Una pgina PHP es una pgina normal HTML que con unas marcas especiales le indican al servidor que deben interpretarse. Por ejemplo:
Ejemplo8.php <html> <head> <title>Saludos</title> </head> <body> <p>Hola, <? /* Ahora pasamos a modo PHP */ $nombre = "Adolfo"; $apellido = "Luna"; echo "soy $nombre $apellido"; ?> </p> </body> </html>

Cuando un cliente solicita esta pgina, el servidor web la procesa en forma secuencial desde el principio al final buscando secciones PHP limitadas por <? y ?>. En caso de encontrarlas, las compila y ejecuta. Si todo se ejecuta de forma normal, producir la siguiente pgina HTMLs:
<HTML> <HEAD> <title>Saludos</title> </head> <body> <p>Hola, soy Adolfo Luna</p> </BODY> </HTML>

El resultado es idntico a si hubiese sido escrito el texto manualmente. Esto tiene algunas consecuencias:

PHP puede ser agregado rpidamente al cdigo HTML producido por editores HTML interactivos. PHP facilita la interaccin entre diseadores y programadores. No se necesita re-escribir cada lnea de cdigo HTML en un lenguaje de programacin. PHP reduce costos y aumenta la eficiencia.

28

Agregar PHP a HTML PHP es totalmente compatible con HTML y no tomar en cuenta la inclusin de applets, Javascript, etc., simplemente los ignorar. Se puede usar cualquier mtodo para generar HTML y luego se puede agregar PHP en l. Para indicar las secciones PHP se deben usar etiquetas especiales, este proceso es llamado "escape del HTML". Las etiquetas vlidas son: 1. Etiquetas cannicas PHP: <?php 2. Etiquetas cortas (tipo SGML): <? 3. Estilo ASP: <% ?> ?>

%> (se debe verificar que est habilitada esta opcin en el php.ini </SCRIPT>

4. Etiquetas estilo HTML: <SCRIPT LANGUAGE="PHP">

Ejemplo9.php <HTML> <HEAD> <TITLE>Los primeros programas en PHP</TITLE> </HEAD> <BODY> <? print ("Hola mundo cruel");?> </BODY> </HTML> Otra variante en este ejemplo es cambiar la funcin print por phpinfo() y analizar los

resultados obtenidos. Entrar y Salir del Modo PHP En cualquier momento se puede entrar y salir del modo PHP. Todo lo que est entre las etiquetas de escape es considerado PHP, todo lo que est afuera es ignorado, no hay trmino medio. Por ejemplo es vlido:
Ejemplo10.php <?php $id=1; ?> <FORM METHOD="POST" ACTION="Ejemplo10.php"> <P>Nombre: <INPUT TYPE="TEXT" NAME="nombre" SIZE=20> <P>Id: <INPUT TYPE="TEXT" NAME="id" VALUE="<? echo $id ?>"> <INPUT TYPE="SUBMIT" VALUE="Enviar"> </FORM>

Inclusin de archivos PHP Otra forma de agregar cdigo PHP al HTML es poniendo el cdigo PHP en otro archivo e invocarlo mediante la funcin include. Por ejemplo, un archivo llamado ejemplo11.inc contiene solamente el siguiente cdigo:

29

Ejemplo11.inc <? $novia = "Shakira"; print $novia; ?> Ejemplo11.php <HTML> <HEAD> <TITLE>Una carta sincera</TITLE> </HEAD> <BODY> <P>Tienes que creerme si te digo que no puede vivir sin ti querida <? include("ejemplo11.inc"); ?>. El nombre "<? include("ejemplo11.inc"); ?>" resuena en mis odos. </BODY> </HTML>

Hay que tener cuidado, el texto que se incluye del archivo ejemplo4.inc no est en modo PHP, sino que est en modo HTML. Esta es la razn que tengamos que volver a poner las etiquetas PHP para pasar a modo PHP nuevamente dentro del archivo incluido. Tambin se suele usar la funcin require en vez de include. Aunque include es ms flexible, require es ms rpido. include tambin permite la inclusin de HTML debido a que se interpreta en modo HTML.

30

4. Proveedores de Datos
La relacin entre PHP y bases de datos es muy estrecha y beneficiosa. De hecho, cuando se habla de Web y PHP, es muy difcil que no se mencione tambin a una base de datos. Despus de todo, la Web est pensada para almacenar y permitir los accesos a cantidades enormes de informacin. Mientras mayor sea la cantidad de informacin y ms alta la frecuencia de actualizacin de un sitio web, mayor es su valor y sus ventajas sobre otros medios.

Tal vez la mayor ventaja de PHP sobre sus competidores es la integracin con los sistemas de bases de datos y el soporte nativo a las distintas bases de datos existentes, libres y comerciales.

Crear Bases de Datos en MySQL Usando phpMyAdmin accedemos a una pantalla como la siguiente:

31

En la parte izquierda (en el sector ms oscuro) esta el listado de base de datos y a la derecha hay una serie de informacin. Si la base de datos ya existe hacemos clic en la misma, caso contrario, escribimos en el formulario de la derecha donde dice crear nueva base de datos o en ingls create new database con el nombre que nosotros queremos y hacemos clic en el botn crear. Hasta ahorita nuestra db no contiene ninguna tabla. Crear Tablas Para hacerlo nos vamos al formulario donde dice crear nueva tabla en la base de datos e incluimos el nombre que queremos usar, y en el siguiente campo del formulario debemos incluir el numero de campos que queremos que contenga nuestra tabla.

Se nos abre un nuevo formulario con los 5 campos para completar, en donde dice campo o field dependiendo el idioma de phpMyAdmin, ah colocamos el nombre que queremos que tengan nuestros campos. En tipo o type vamos a poner el tipo de dato que vamos a usar.

Los ms utilizados son varchar, char, int, tinyint, text, datetime, timestamp y enum. Los tipos varchar y char son similares, siempre que se utilicen estos dos tipos, hay que declarar la longitud de los mismos, si prestan atencin al lado de declarar el tipo, tienen que declarar tambin la longitud. Los char tienen un mximo de 255 caracteres (los varchar tambin). Por ejemplo si declaramos un char de 30, se aadirn espacios a la derecha hasta la longitud especifica si lo que se incluye es algo menos a estos caracteres. De todas formas cuando se recuperan los datos, estos espacios se borran. Los varchar tambin son cadenas de caracteres pero la diferencia es que la longitud es variable. Tambin posee un mximo de 255 caracteres (para las versiones anteriores a MySql 5.0.3 y de 65.535 para las superiores), pero la diferencia principal con los char es que solo se almacenan los caracteres utilizados, si yo declaro un campo con 255 caracteres pero almaceno solo la palabra Hernn, no voy a ocupar el resto del espacio. En los dos casos, si asignan un valor mayor al declarado, la cadena de caracteres se trunca. Por ello eso existe Text.

Text es tambin una cadena de texto pero esta permite almacenar mucha ms informacin incluidos espacios en blanco y saltos de lnea. Estos campos son utilizados en general para almacenar informacin recibida a travs de campos de tipo textarea (recuerden la clase de formularios).

Los int y tinyint son para almacenar nmeros enteros, el rango con signo del tinyint es de -128 a 127 y sin signo de 0 a 255. Y los int son bastante ms grandes, con signo van del -2147483648 a 2147483647 y sin signo de 0 a 4294967295.

32

Entre los tipos de datos de fecha y hora los dos ms comunes son datetime y timestamp. La diferencia practicamente esta en la forma en que guarda la informacin, datatime para el valor 0 la guarda como 0000-00-00 00:00:00 y timestamp como 00000000000000. La diferencias practicas entre uno u otro es que por ejemplo TIMESTAMP admite fechas entre 1970 y 2037 solamente, a diferencia de DATETIME que admite desde el rango 1001-01-01 00:00:00 al 9999-1231 23:59:59. Una de las ventajas que puede tener TIMESTAMP es que el campo se puede poner que se actualice al momento de cambiar cualquier otro valor almacenado, es muy comn utilizar este tipo para guarda la fecha de modificacin de una lnea.

Por ltimo, enum tambin corresponde al tipo de datos de caracteres, como el char y el varchar, la diferencia es que hay que especificar que valores queremos que se puedan utilizar, y solo se va a poder completar el campo con estos valores.

A continuacin se muestra un ejemplo para crear una tabla agenda.

Crear Base de Datos en Sql Server 2000 Microsoft SQL Server 2000 es un conjunto de componentes que trabajan juntos para cubrir las necesidades de almacenamiento y anlisis de datos de los sitios Web de mayor tamao y de sistemas de procesamiento de datos corporativos. Los temas de la arquitectura de SQL Server describen cmo trabajan juntos los diferentes componentes para administrar datos de un modo eficaz. Para crear una base de datos debemos utilizar el Administrador Corporativo.

33

Administrador Corporativo de SQL Server Para entrar debemos irnos al men INICIO- PROGRAMAS - MICROSOFT SQL SERVER ADMINISTRADOR CORPORATIVO, enseguida nos mostrar la consola con los servidores de SQL Server que se unen por grupos y cada grupo puede tener varios servidores en este caso solo tenemos un grupo y tenemos tambin un solo servidor que toma el nombre de la pc, ste se crea automticamente al instalar SQL Server. Para crear una base de datos escogemos la carpeta base de datos clic derecho y NUEVA BASE DE DATOS de ah ponemos el nombre de la base de datos y listo.

Crear Tablas Una vez creada la base de datos podemos crear tablas dentro de ella. En este caso se vamos a crear un tabla dentro de la base de datos BDCOMPRA, de las opciones que aparecen debemos escoger TABLAS clic derecho NUEVA TABLA.

34

Aqu estamos definiendo los campos que tendr esa tabla, se pone el nombre del campo, se escoge el tipo la longitud y marcamos si queremos permitir valores nulos caso contrario lo desmarcamos. Si queremos establecer clave principal a algn campo lo seleccionamos y hacemos clic en el icono de la llave o sino clic derecho y establecer clave principal. Una vez terminado de definir los campos de la tabla lo guardamos y el ponemos un nombre (Se guarda haciendo clic en el icono de guardar o simplemente cerrando la ventana) Una vez cerrada la tabla si hubiera que hacer alguna modificacin seleccionamos la tabla clic derecho DISEAR TABLA.

Para llenar datos a la tabla Clic derecho a la tabla Abrir Tabla y DEVOLVER TODAS LAS FILAS. Para llenar datos en SQL Server es muy similar a Access.

35

5. Conexiones y Resultsets
La interaccin entre php y las bases de datos se realiza a travs de herramientas propias del lenguaje Php, por un lado, y escribiendo las solicitudes a la base de datos en un idioma universal, SQL (Structured Query Language) por otro, que se encuentra en todas las bases de datos. PHP contiene una amplia variedad de herramientas para conectarnos con bases de datos, pudiendo realizar conexiones simultneas y todo tipo de consultas para obtener. Los pasos para acceder desde PHP a una base de datos son los siguientes: Conectar con el servidor de bases de datos Seleccionar una base de datos Enviar la instruccin SQL a la base de datos Obtener y procesar los resultados Cerrar la conexin con el servidor de bases de datos. En PHP, las funciones de conectividad son especficas del gestor de base de datos al que se realiza la conexin. Los nombres de las funciones relativas a conectividad comienzan con un prefijo del gestor. Por ejemplo: Mysql: mysql_ SQL Server: mssql_ Oracle: Ora_ Informix: ifx_ dBase: dbase_ Ingres: ingres_ Las funciones concretas de PHP que realizan estas operaciones se describen Operacin Funcin Mysql Conectar con el servidor de bases de datos mysql_connect() Seleccionar una base de datos mysql_select_db() Enviar la instruccin SQL a la base de datos msql_query() Obtener y procesar los resultados mysql_num_rows() y mysql_fetch_array() Cerrar la conexin con el servidor de bases mysql_close() de datos a continuacin. Funcin SQL Server mssql_connect() mssql_select_db() mssql_query() mssql_num_rows() mssql_fetch_array() mssql_close()

Con esos elementos ya podemos crear un script de conexin a la base de datos y poder utilizar las funciones de PHP predefinidas para interactuar con la misma. Conexin a la base de Datos Si se quiere acceder a una base de datos desde PHP, primero debemos conectarnos al servidor. Los requisitos bsicos para conectarse son la IP del servidor de base de datos (o el nombre del equipo servidor), el nombre de usuario y contrasea de conexin, y el nombre de la base de datos a la que queremos conectarnos. Ejemplo:

$enlace = mysql_connect($hostname, $user, $password);

si se usan variables, o
$enlace = mysql_connect('localhost', 'master', 'laclave');

en el caso de constantes.

36

Para trabajar con una base de datos de SQL Server y conectarse a ella se utiliza tambin la funcin de conexin, pero en este caso es mssql_connect.
<? $conectID = mssql_connect("NombreServidor","sa",""); mssql_select_db("Northwind"); mssql_close($conectID); ?>

Los argumentos son opcionales, si no se especifican se supone "localhost" para el servidor, el mismo usuario que el servidor web para el usuario y clave vaca. La funcin mysql_connect retorna una conexin o enlace (link) a la base de datos que luego ser usado para ejecutar los comandos SQL. El uso y almacenamiento de dicho valor es opcional, ya que la mayora de las funciones de MySQL usan por defecto la ltima conexin. En caso de que se tengan varios enlaces o conexiones, hay que especificar cul usar. Supongamos que tenemos nuestro archivo noticias.php, lo primero que tenemos que hacer es conectar con la base de datos:
<? // datos de configuracion $ip = localhost; $usuario = nombre_de_usuario_que_conecta_con_la_db; $password = password_de_la_db; $db_name = nombre_de_la_base_de_datos_que_usamos; // conectamos con la db $conn = mysql_connect($ip,$usuario,$password) or die(); ?>

Luego de establecida la conexin hay que seleccionar una base de datos:


mysql_select_db($database);

si se usa variable o
mysql_select_db('simple');

si se usan constantes.
<? // seleccionamos la base de datos $huboerror = mysql_select_db($db_name,$conn) or die(); ?>
Conexiones Persistentes

Cada vez que un cliente se conecta y solicita una pgina PHP que se conectar a una base de datos, el proceso del Apache que lo ejecuta debe establecer la conexin al momento que se ejecuta el mysql_connect o mssql_conect. Esta operacin normalmente involucra arrancar un nuevo proceso del servidor SQL, por lo que se produce un retardo (latencia) en la ejecucin y visualizacin de la pgina. Para evitar que se arranque un nuevo proceso por cada conexin a la base de datos, el SQL del PHP permite especificar conexiones persistentes. En este tipo de conexiones, la conexin se

37

mantiene abierta y podr ser reutilizada ms tarde en otra ejecucin. Por lo tanto el servidor SQL no acaba, sino que espera por nuevas peticiones, lo que acelera muchsimo la ejecucin de los programas. Para ello no hay nada ms que usar la funcin equivalente mysql_pconnect o mssql_pconnect:
$enlace = mysql_pconnect($hostname, $user, $password);

Operaciones de Insercin, Actualizacin y Borrado Para realizar este tipo de operaciones se debe enviar la instruccin SQL a la base de datos mediante la funcin mysql_query(). Esta devuelve un identificador true (dependiendo de la instruccin) si la instruccin se ejecuta correctamente y false en caso contrario Sintaxis:
$consulta = mysql_query (instruccin, $conexion);

Ejemplo:
$consulta = mysql_query (Insert into usuarios values(1,marcos,marcos@hotmail,mark2004), $conexion) or die (Fallo en la consulta);

Para realizar updates y eliminaciones es la misma forma de uso. Consultas y Resultsets Para obtener y procesar los resultados de una consulta se puede usar: mysql_num_rows(), mysql_fetch_array() o mssql_num_rows(), mssql_fetch_array() En el caso de que la instruccin enviada produzca unos resultados, mysql_query() devuelve las filas de la tabla afectadas por la instruccin. La funcin mysql_num_rows() devuelve el nmero de filas afectadas Para obtener las distintas filas del resultado se utiliza la funcin mysql_fetch_array(), que obtiene una fila del resultado en un array asociativo cada vez que se invoca Sintaxis:
$nfilas = mysql_num_rows ($consulta); $fila = mysql_fetch_array ($consulta); Ejemplo:

38

Obtencin de las filas:

$consulta = mysql_query(select * from noticias promociones,$id_coneccion); $nfilas = mysql_num_rows ($consulta); if ($nfilas > 0) { for ($i=0; $i<$nfilas; $i++) { $fila = mysql_fetch_array ($consulta); print Ttulo: . $fila[titulo]; print Fecha: . $fila[fecha]; } } mysql_close ($conexion);
Obtener la Lista de Bases de Datos

where

categora

Lo primero que haremos es conectarnos a la base de datos y seleccionar las base de datos existentes en el servidor. Ello se logra con la funcin mysql_list_dbs que retorna un resultado consistente en la lista de base de datos. Luego slo queda recorrer toda la lista con la funcin mysql_fetch_object e imprimir el nombre de cada base de datos.
<? $con=mysql_pconnect() or die ("No pude conectarme"); echo "<B>Connectado</B><P>"; $db_list = mysql_list_dbs($con); while ($row = mysql_fetch_object($db_list)) { echo $row->Database . "<br>"; } mysql_close($con); ?>

Listar el contenido de una tabla

En el siguiente ejemplo listaremos todo el contenido de la tabla secciones y tambin el nmero secciones que existen. Las funciones que se usan son:
mysql_select_db: Esta funcin selecciona una base de datos para ser usada en las

siguientes funciones. Si la funcin se ejecuta correctamente (en enlace es correcto y la base de datos existe) devuelve TRUE, caso contrario FALSE.
mysql_query: Ejecuta un comando SQL y retorna un resultado (cursor) que mantiene la

informacin necesaria para "recorrer" el conjunto de filas que cumplen con la condicin especificada en el SELECT. Si el comando se ejecuta correctamente (la sintaxis es correcta,

39

las tablas y columnas existen y tenemos permiso para hacer un SELECT) devuelve TRUE, caso contrario devuelve FALSE.
mysql_affected_rows: Esta funcin nos devuelve la cantidad de filas afectadas o seleccionadas con el comando anterior. Es similar a la funcin mysql_num_rows, pero

adems puede ser usada para UPDATE o DELETE.


mysql_fetch_array: Esta es una funcin muy potente y eficiente, ya que recupera de la

base de datos la siguiente fila que nos interesa y pone todos los datos en un array que puede ser accedido de dos formas: con un ndice numrico como un array normal, o como un array asociativo usando los nombres de las columnas especificados en el SELECT: En el ejemplo lo usamos como un array asociativo con los nombres de las columnas "id" y "nombre".
<? $con=mysql_pconnect() or die ("No pude conectarme"); mysql_select_db("simple", $con) or die("No puedo acceder a la base de datos"); echo "Seleccionando de simple<br><hr>"; $resultado=mysql_query("select * from secciones", $con); $items = mysql_affected_rows($con); echo "Nmero de filas: $items <p>"; while( ($fila=mysql_fetch_array($resultado)) ) { echo $fila["id"] . ": " . $fila["nombre"] . "<p>"; } mysql_close($con); ?>

Insertar filas desde un formulario

En el siguiente ejemplo mostramos como definir un formulario sencillo y luego insertar los valores del formulario en una tabla. En el ejemplo lo que hacemos es permitir insertar campos a la tabla "secciones". Como se puede observar, no empleamos ninguna funcin nueva, sino que hacemos uso de la instruccin SQL INSERT en la funcin mysql_query ya usada en el ejemplo anterior. El funcionamiento del programa es muy sencillo, define un formulario que un solo campo (nombre) y la accin del formulario es el mismo script PHP. Al principio del programa verificamos si la llamada es desde el formulario (mediante la verificacin de la variable $submit), si es as, insertamos el valor de la variable "nombre" (definida en el formulario) en una nueva fila de la tabla "secciones". Notar que no especificamos el valor de "id" ya que este valor es generado automticamente por el MySQL (ver el autoincrement del create).

40

<?php if ($submit) { $db = mysql_pconnect("localhost"); mysql_select_db("simple",$db); $sql = "INSERT INTO secciones (nombre) VALUES ('$nombre')"; $result = mysql_query($sql); echo "Informacin introducida.\n"; } else{ ?> <form method="post" action="<?php echo $PHP_SELF?>"> Nombre:<input type="Text" name="nombre"><br> <input type="Submit" name="submit" value="Enter information"> </form> <?php } // end if ?>

41

6. Presentacin de Datos 7. Validacin y Seguridad de los datos

42