Your SlideShare is downloading. ×
  • Like
  • Save
Taller php
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply
Published

 

Published in Education , Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
405
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Taller de PHP(Del 27 de Octubre al 1 de Diciembre de 2001)(Personal Home Page)Hypertext PreprocessorPAT. Pedro César Santana MancillaUNIVERSIDAD DE COLIMAFacultad de Telemática
  • 2. Taller de PHP pecesama1ÍndiceÍndice ……………………………………………………………………………………………………Capitulo I.- IntroducciónCorta historia de PHP ……………………………………………………………¿Qué es PHP? ……………………………………………………………………………………¿Qué se necesita para que funcione PHP? ……………Iniciar con PHP ……………………………………………………………………………Capitulo II.- Programación con PHPSeparación de instrucciones ……………………………………………Comentarios en PHP ……………………………………………………………………Variables ……………………………………………………………………………………………Variables variables …………………………………………………………………Tipos de datos ………………………………………………………………………………Enteros ………………………………………………………………………………………………………………Números en punto flotante ………………………………………………………………Cadenas ………………………………………………………………………………………………………………Caracteres protegidos …………………………………………………………………………Operadores de comparación ………………………………………………………………Operadores Lógicos …………………………………………………………………………………Operadores de Asignación …………………………………………………………………Operadores Bit Bit …………………………………………………………………………………Constantes …………………………………………………………………………………………Sentencias de control ……………………………………………………………if...else …………………………………………………………………………………………………………if...elseif...else …………………………………………………………………………………switch...case...default ……………………………………………………………………while ……………………………………………………………………………………………………………………do...while ………………………………………………………………………………………………………for …………………………………………………………………………………………………………………………Vectores (tablas) ………………………………………………………………………Tablas multidimensionales ………………………………………………………………Formularios ………………………………………………………………………………………Botón de comando ………………………………………………………………………………………Cuadro de texto …………………………………………………………………………………………Cuadro de texto con barras de desplazamiento ……………Casilla de verificación o checkbox ………………………………………Botón de radio u opción ……………………………………………………………………Menú desplegable ………………………………………………………………………………………Campo oculto …………………………………………………………………………………………………Capitulo III.- Almacenamiento de lainformaciónArchivos ………………………………………………………………………………………………Fopen ……………………………………………………………………………………………………………………Fwrite …………………………………………………………………………………………………………………Fread ……………………………………………………………………………………………………………………Bases de datos ………………………………………………………………………………¿Qué es MySQL? ……………………………………………………………………………………………………1455514141516161617171718181818192121232324242526282929293031323234393940404141
  • 3. Taller de PHP pecesama2Características principales de MySQL …………………………………………Instalando MySQL Server ……………………………………………………………………………Conectándose y desconectándose al servidor MySQL ……Creando y usando una base de datos ………………………………………………Visualización de las bases de datos existentes en elservidor MySQL ……………………………………………………………………………………………………Selección de una base de datos …………………………………………………………Creación de una base de datos ……………………………………………………………Creación de tablas …………………………………………………………………………………Ingreso de Datos a las tablas ……………………………………………………Recuperación de la Información …………………………………………………MySQL Front ………………………………………………………………………………………PHP para bases de datos MySQL ………………………………………Conectarse ……………………………………………………………………………………………………Agregar registros ……………………………………………………………………………………Modificar registros ………………………………………………………………………………Eliminar registros …………………………………………………………………………………Conceptos básicos sobre ODBC …………………………………………PHP con ODBC ……………………………………………………………………………………Conectarse ……………………………………………………………………………………………………Agregar ………………………………………………………………………………………………………………Modificar …………………………………………………………………………………………………………Eliminar ……………………………………………………………………………………………………………Capitulo IV.- Funciones de redCookies …………………………………………………………………………………………………Funcionamiento ……………………………………………………………………………………………Cómo usar las cookies …………………………………………………………………………Ejemplo de uso de cookies ………………………………………………………………Sesiones ………………………………………………………………………………………………Inicialización de la sesión …………………………………………………………Error común ……………………………………………………………………………………………………Carrito de compra ……………………………………………………………………………………Envió de e-mails …………………………………………………………………………Envió de e-mails con attachments ………………………………4243464747474848494950545455565859646464646567676868696971717274
  • 4. Taller de PHP pecesama3Capitulo IIntroducción
  • 5. Taller de PHP pecesama4Corta historia de PHPPHP es un lenguaje creado por una gran comunidad de personas. El sistema fuedesarrollado originalmente en el año 1994 por Rasmus Lerdorf como un CGI escrito en Cque permitía la interpretación de un número limitado de comandos. El sistema fuedenominado Personal Home Page Tools y adquirió relativo éxito gracias a que otraspersonas pidieron a Rasmus que les permitiese utilizar sus programas en sus propiaspáginas. Dada la aceptación del primer PHP y de manera adicional, su creador diseñó unsistema para procesar formularios al que le atribuyó el nombre de FI (Form Interpreter) y elconjunto de estas dos herramientas, sería la primera versión compacta del lenguaje: PHP/FI.La siguiente gran contribución al lenguaje se realizó a mediados del 97 cuando sevolvió a programar el analizador sintáctico, se incluyeron nuevas funcionalidades como elsoporte a nuevos protocolos de Internet y el soporte a la gran mayoría de las bases de datoscomerciales. Todas estas mejoras sentaron las bases de PHP versión 3. Actualmente PHP seencuentra en su versión 4, que utiliza el motor Zend, desarrollado con mayor meditaciónpara cubrir las necesidades actuales y solucionar algunos inconvenientes de la anteriorversión. Algunas mejoras de esta nueva versión son su rapidez -gracias a que primero secompila y luego se ejecuta, mientras que antes se ejecutaba mientras se interpretaba elcódigo-, su mayor independencia del servidor web -creando versiones de PHP nativas paramás plataformas- y un API más elaborado y con más funciones.Gráfica del número de dominios y direcciones IP que utilizan PHP.Estadística de Netcraft.En el último año, el número de servidores que utilizan PHP se ha disparado,logrando situarse cerca de los 5 millones de sitios y 800.000 direcciones IP, lo que le haconvertido a PHP en una tecnología popular.
  • 6. Taller de PHP pecesama5¿Qué es PHP?El lenguaje PHP es un lenguaje de programación de estilo clásico, es decir, es unlenguaje de programación con variables, sentencias condicionales, ciclos (bucles),funciones…. No es un lenguaje de marcado como podría ser HTML, XML o WML. Estámás cercano a JavaScript o a C, para aquellos que conocen estos lenguajes.Pero a diferencia de JavaScript que se ejecuta en el navegador, PHP se ejecuta en elservidor, por eso nos permite acceder a los recursos que tenga el servidor como por ejemplopodría ser una base de datos. El programa PHP es ejecutado en el servidor y el resultadoenviado al navegador. El resultado es normalmente una página HTML pero igualmentepodría ser una pagina WML.Al ser PHP un lenguaje que se ejecuta en el servidor no es necesario que sunavegador lo soporte, es independiente del browser, pero sin embargo para que las páginasPHP funcionen, el servidor donde están alojadas debe soportar PHP.¿Qué se necesita para que funcione PHP?Versión compilada de PHP (http://www.php.net).Un servidor web (Apache, PWS, IIS, Etc.).Si desea manejar base de datos se recomienda Mysql Server(http://www.mysql.com).Iniciar con PHPInstalar el servidor WEB.Trabajaremos con sistemas operativos Microsoft Windows (2000 Professional y XPProfessional), por lo que vamos a instalar un IIS (versión 5 para w2k y 5.1 para wXP).
  • 7. Taller de PHP pecesama6Para instalarlo tenemos que seguir los siguientes pasos:Ir al panel de control de Microsoft Windows©Seleccionar lo opción Agregar o quitar programasSeleccionar la opción de Agregar o quitar componentes y ahí elegir laopción Servicios de Internet Information Server (IIS)
  • 8. Taller de PHP pecesama7Tenemos que esperar a que se instaleDespués de estos pasos ya esta instalado nuestro servidor de web quenecesitamos para ejecutar páginas de Internet.La forma de saber si se ha instalado correctamente nuestro servidor es tecleando en la barrade direcciones de nuestro navegador (Internet Explorer o Netscape Navigator) la siguientedirección http://localhost y nos debe aparecer la siguiente página web:
  • 9. Taller de PHP pecesama8Instalar el modulo de PHP.Los pasos para instalar el modulo de PHP son los siguientes:Al iniciar el programa de instalación veremos la siguiente pantalla.La siguiente pantalla es la de bienvenida, solo hay que presionar el botón deNext >.La pantalla que sigue es la licencia de PHP, si la aceptamos debemos depresionar I Agree.
  • 10. Taller de PHP pecesama9Lo que sigue es elegir el tipo de instalación, cuenta con dos opciones,estándar y avanzado, para nuestras necesidades elegiremos la formaestándar, por lo tanto seleccionamos el botón de radio que dice Standar.Ahora tendremos que elegir el directorio en el cual se instalará el PHP, elinstalador trae por default el directorio C:PHP, lo dejaremos así, por lotanto presionamos Next.Lo que nos pide la siguiente pantalla son los datos para el administrador delsistema por si falla algo en PHP, para este curso solo presionamos Next,pero también puede introducir una dirección válida.
  • 11. Taller de PHP pecesama10Ahora se nos pregunta el tipo de servidor que estamos utilizando, como yahabía mencionado antes, asaremos IIS versión 5 y 5.1, por lo tantoseleccionamos el botón de radio que tiene la opción de Microsoft IIS 4 orhigher.La siguiente pantalla nos avisa que ya esta listo para instalar PHP, así quesolo presionamos Next.Veremos como va el proceso de la instalación.
  • 12. Taller de PHP pecesama11La siguiente pantalla lo que nos dice es que seleccionemos que parte del IISqueremos que ejecute PHP, como solo tenemos instalado el servicio de web,solo nos presenta esa opción, pero con eso es suficiente, así queseleccionamos el checkbox que dice WWW Service Master Properties.Por ultimo nos dice que la instalación se ha completado y estamos listo paraejecutar PHP en nuestro servidor.La forma de saber si se ha instalado correctamente el PHP en nuestro servidorhaciendo un pequeño programita PHP, el mas básico que nos servirá de prueba para ver sise ha instalado correctamente, entonces abrimos un editor de texto cualquiera (con el cualharemos nuestros programas PHP, puede ser el NotePad), y escribimos las siguienteslíneas:<?phpinfo();?>después de escribir estas líneas guardamos nuestro archivo en el directorioc:inetpubwwroottaller el cual va a ser nuestro directorio de trabajo para este curso,(como información, el IIS utiliza como directorio raíz el directorio c:inetpubwwroot), lepondremos al archivo prueba.php ahora tecleamos en la barra de direcciones de nuestro
  • 13. Taller de PHP pecesama12navegador (Internet Explorer o Netscape Navigator) la siguiente direcciónhttp://localhost/taller/prueba.php y nos debe aparecer la siguiente página web:si no aparece esta página, entonces esta mal instalado el PHP y hay que volverlo a instalar,aunque hay algunas ocasiones que se necesita reiniciar el sistema para que funcione.
  • 14. Taller de PHP pecesama13Capitulo IIProgramación con PHP
  • 15. Taller de PHP pecesama14Ahora que ya tenemos instalado nuestro servidor y el modulo de PHP, podemosiniciar ha hacer programas PHP, pero ¿Cómo hacerlos?, un ejemplo nos aclarará las cosas:<html><head><title>Ejemplo PHP</title></head><body><?php echo "Hola, este es un ejemplo con PHP"; ?></body></html>Podemos ver que no es lo mismo que un script CGI escrito en otro lenguaje deprogramación como Perl o C -- En vez de escribir un programa con muchos comandos paracrear una salida en HTML, escribimos el código HTML con cierto código PHP embebido(introducido) en el mismo, que producirá cierta salida (en nuestro ejemplo, producir untexto). El código PHP se incluye entre etiquetas especiales de comienzo y final que nospermitirán entrar y salir del modo PHP.Pero cuales son estas etiquetas especiales de comienzo y final??, esto nos lleva aque hay 4 formas de salir de HTML y entrar en modo PHP, las cuales son las siguientes:• <? echo (“Forma 1"); ?>• <?php echo(“Forma 2"); ?>• <script language="php"> echo (“Forma 3"); </script>• <% echo("Etiquetas tipo ASP"); %>Separación de instruccionesLas instrucciones se separan igual que en C o Pascal terminando cada sentencia conun punto y coma.La etiqueta de cierre ( ?> ) también implica el fin de la sentencia, así lo siguiente esequivalente:<?php echo "Esto es una prueba"; ?><?php echo "Esto es una prueba" ?>Comentarios en PHPPHP soporta comentarios tipo C, C++ y Shell de Unix. Por ejemplo:<?phpecho “Prueba"; // Comentario tipo C++ para una línea?>
  • 16. Taller de PHP pecesama15<?php/*Esto es un comentario multilíneaotra línea más de comentario*/echo "Esto es aún otra prueba"; ?><?phpecho "Prueba"; # Comentario tipo shell de Unix?>VariablesAntes de ver como se utilizan las variables en PHP veremos una pequeñaintroducción a las variables, para los que no conozcan que es una variable.Una variable consiste en un elemento al cual le damos un nombre y le atribuimos undeterminado tipo de información. Las variables pueden ser consideradas como la base de laprogramación.De este modo podríamos escribir en un lenguaje ficticio:a="perro"b="muerde"La variable que nosotros llamamos "a" posee un elemento de información de tipotexto que es "perro". Asimismo, la variable "b" contiene el valor "muerde".Podríamos definir una tercera variable que fuese la suma de estas dos:c=a+bSi introdujésemos una petición de impresión de esta variable en nuestro lenguajeficticio:imprimir(c)El resultado podría ser:perro muerdePodríamos de la misma forma trabajar con variables que contuviesen números yconstruir nuestro programa:a=3b=4c=a+b
  • 17. Taller de PHP pecesama16imprimir(c)El resultado de nuestro programa sería:7En PHP las variables se representan como un signo de pesos seguido por el nombrede la variable. El nombre de la variable es sensible a minúsculas y mayúsculas.$var = "Santana";$Var = "Pedro";echo "$var, $Var";// produce la salida “Santana, Pedro"Variables variablesA veces es conveniente tener nombres de variables variables. Dicho de otro modo,son nombres de variables que se pueden establecer y usar dinámicamente. Una variablenormal se establece con una sentencia como:$a = "Hola";Una variable variable toma el valor de una variable y lo trata como el nombre deuna variable. En el ejemplo anterior, Hola, se puede usar como el nombre de una variableutilizando dos signos de peso. p.ej.$$a = "mundo";Probemos las siguientes sentencias:echo "$a ${$a}";echo "$a $Hola";Los dos no regresarán “Hola mundo”Tipos de datosEnteros:Los enteros se puede especificar usando una de las siguientes sintaxis:$a = 1234; # número decimal$a = -123; # un número negativo$a = 0123; # número octal (equivalente al 83 decimal)$a = 0x12; # número hexadecimal (equivalente al 18 decimal)
  • 18. Taller de PHP pecesama17Números en punto flotante:Los números en punto flotante ("double") se pueden especificar utilizandocualquiera de las siguientes sintaxis:$a = 1.234;$a = 1.2e3;Cadenas:El único operador de cadenas que existen es el de concatenación, el punto. Pero nose preocupen, PHP dispone de toda una gama de funciones que nos permitirán trabajarcómodamente con las cadenas.$a = "Hola";$b = $a . "Mundo"; // Ahora $b contiene "Hola Mundo"En este punto hay que hacer una distinción, la interpretación que hace PHP de lassimples y dobles comillas. En el segundo caso PHP interpretará el contenido de la cadena.$a = "Mundo";echo = Hola $a; //Esto escribirá "Hola $a"echo = "Hola $a"; //Esto escribirá "Hola Mundo"Si la cadena está encerrada entre dobles comillas ("), las variables que estén dentrode la cadena serán expandidas (sujetas a ciertas limitaciones de interpretación). Como en Cy en Perl, el carácter de barra invertida ("") se puede usar para especificar caracteresespeciales:Caracteres protegidosn Nueva línear Retorno de carrot Tabulación horizontal Barra invertida$ Signo del dólar" Comillas dobles[0-7]{1,3}La secuencia de caracteres que coincida con la expresión regular esun carácter en notación octalx[0-9A-Fa-f]{1,2}La secuencia de caracteres que coincida con la expresión regular esun carácter en notación hexadecimal
  • 19. Taller de PHP pecesama18Operadores de Comparación:$a < $b $a menor que $b$a > $b $a mayor que $b$a <= $b $a menor o igual que $b$a >= $b $a mayor o igual que $b$a == $b $a igual que $b$a != $b $a distinto que $bOperadores Lógicos:$a AND $b Verdadero si ambos son verdadero$a && $b Verdadero si ambos son verdadero$a OR $b Verdadero si alguno de los dos es verdadero$a !! $b Verdadero si alguno de los dos es verdadero$a XOR $b Verdadero si sólo uno de los dos es verdadero!$a Verdadero si $a es falsoOperadores de Asignación:$a = $b Asigna a $a el contenido de $b$a += $b Le suma a $b a $a$a -= $b Le resta a $b a $a$a *= $b Multiplica $a por $b y lo asigna a $a$a /= $b Divide $a por $b y lo asigna a $a$a .= $b Añade la cadena $b a la cadena $aOperadores Bit a bitLos operadores bit a bit te permiten activar o desactivar bits individuales de unentero.ejemplo nombre resultado$a&$bYSe activan los bits que están activos tanto en $a como$b.$a|$bOSe activan los bits que están activos en $a o que lo estánen $b.$a^$bXor ("o exclusiva")Se activan los bits que están activos en $a o en $b perono en ambos a la vez.~$a No Se activan los bits que no están activos en $a.$a<< Desplazamiento a la Desplaza los bits de $a, $b posiciones hacia la izquierda
  • 20. Taller de PHP pecesama19ejemplo nombre resultado$b izquierda (por aritmética binaria, cada posición desplazadaequivale a multiplicar por dos el valor de $a)$a>>$bDesplazamiento a laderechaDesplaza los bits de $a, $b posiciones hacia la derecha(por aritmética binaria, cada posición desplazadaequivale a dividir entre dos el valor de $a)Para demostrar el uso de algunos operadores mostraré algunos ejemplos en PHP:El siguiente programa calcula el salario de un trabajador con un impuesto<html><body><?php$SalarioTrabajador = 3500;$Impuesto = 20; // Porcentaje$SueldoReal = $SalarioTrabajador - (($SalarioTrabajador /100) * $Impuesto);echo “Sueldo del trabajador sin impuesto:$SalarioTrabajador<BR>”;echo “Con el impuesto :$SueldoReal”;?></body ></html>Programa en PHP que calcula el área de un triangulo cuya formula es a=(b*h)/2<?php$Base=15;$Altura=12;$Area = ($Base * $Altura)/2;printf (“El area del triangulo es: $Area”);?>Programa que dados 2 números calcule la suma, resta, multiplicación, división, y modulo.<?php$Num1=8;$Num2=5;printf(“La suma de $Num1 y $Num2 es: <b>%d</b><br>”, $Num1 +$Num2 );printf(“La resta de $Num1 y $Num2 es: <b>%d</b><br>”, $Num1- $Num2 );printf(“La multiplicación de $Num1 y $Num2 : <b>%d</b><br>”,$Num1 * $Num2 );printf(“La division de $Num1 y $Num2: <b>%0.2f</b><br>”,$Num1 / $Num2 );printf(“El modulo de $Num1 y $Num2 es <b>%0.1f</b><br>”,$Num1 % $Num2 );?>Constantes
  • 21. Taller de PHP pecesama20PHP define varias constantes y proporciona un mecanismo para definir más entiempo de ejecución. Las constantes son como las variables, salvo por las doscircunstancias de que las constantes deben ser definidas usando la función define(), y queno pueden ser redefinidas más tarde con otro valor.Las constantes predefinidas (siempre disponibles) son:__FILE__El nombre del archivo de comandos que está siendo interpretadoactualmente. Si se usa dentro de un archivo que ha sido incluido o requerido,entonces se da el nombre del archivo incluido, y no el nombre del archivopadre.__LINE__El número de línea dentro del archivo que está siendo interpretado en laactualidad. Si se usa dentro de un archivo incluido o requerido, entonces seda la posición dentro del archivo incluido.PHP_VERSIONLa cadena que representa la versión del analizador de PHP en uso en laactualidad.PHP_OSEl nombre del sistema operativo en el cuál se ejecuta el analizador PHP.TRUEValor verdadero.FALSEValor falso.E_ERRORDenota un error distinto de un error de interpretación del cual no es posiblerecuperarse.E_WARNING
  • 22. Taller de PHP pecesama21Denota una condición donde PHP reconoce que hay algo erróneo, perocontinuará de todas formas; pueden ser capturados por el propio archivo decomandos.E_PARSEEl interprete encontró sintaxis inválida en el archivo de comandos. Larecuperación no es posible.E_NOTICEOcurrió algo que pudo ser o no un error. La ejecución continúa. Losejemplos incluyen usar una cadena sin comillas como un índice "hash", oacceder a una variable que no ha sido inicializada.Las constantes E_* se usan típicamente con la función error_reporting() paraconfigurar el nivel de informes de error.Se pueden definir constantes adicionales usando la función define().Nótese que son constantes, con una constante sólo se pueden representar datosescalares válidos.Veremos un ejemplo del uso de estas constantes:<?phpfunction report_error($archivo, $linea, $mensaje) {echo "Un error ocurrió en $archivo en la línea $linea:$mensaje.";}report_error(__FILE__,__LINE__, "Algo esta mal!");?>Ahora veremos como definir nuestras propias constantes:<?phpdefine("CONSTANTE", "Hola mundo.");echo CONSTANTE; // muestra "Hola mundo."?>Sentencias de controlLas sentencias de control permiten ejecutar bloque de códigos dependiendo de unascondiciones. Para PHP el 0 es equivalente a Falso y cualquier otro número es Verdadero.if...else
  • 23. Taller de PHP pecesama22La sentencia if...else permite ejecutar un bloque de instrucciones si la condición esVerdadera y otro bloque de instrucciones si ésta es Falsa. Es importante tener en cuenta quela condición que evaluemos ha de estar encerrada entre paréntesis (esto es aplicable a todasla sentencias de control).if (condición) {Este bloque se ejecuta si la condición es VERDADERA} else {Este boque se ejecuta si la condición es FALSA}Existe una forma sencilla de usar la sentencia IF cuando no tenemos que usar el elsey solo tenemos que ejecutar una línea de código.if ($a > 4) echo "$a es mayor que 4";Ahora realizaremos un ejemplo con mas con IF el cual consistirá en un pequeñojuego de adivinanzas el cual necesitará de dos archivos adivina.htm y adivina.php, en esteejemplo se utilizará un formulario, lo cual aun no hemos visto, se usa solo para muestra,por el momento no es muy importante conocer esa teoría sino un poco mas adelante.adivina.htm<HTML><BODY><FORM METHOD=GET ACTION="adivina.php">En que numero del 1 al 10 estoy pensando?<INPUT NAME="adivina" TYPE="Text"><BR><BR><INPUT TYPE=SUBMIT></FORM></BODY></HTML>adivina.php<HTML><HEAD></HEAD><BODY><?phpsrand((double)microtime()*1000000);$Numero = rand(1,10);if ($adivina > $Numero) {echo "Fue muy grande"; echo "<BR>Yo pensé el número$Numero. Lo siento no ";}if ($adivina < $Numero) {
  • 24. Taller de PHP pecesama23echo "Fue muy pequeño"; echo "<BR>Yo pensé el número$Numero. Lo siento no ";}?>GANASTE</BODY></HTML>if...elseif...elseLa sentencia IF...ELSEIF...ELSE permite ejecutar varias condiciones en cascada.Para este caso veremos un ejemplo, en el que utilizaremos los operadores lógicos.<?phpif ($nombre == ""){echo "Tú no tienes nombre";} elseif (($nombre=="eva") OR ($nombre=="Eva")) {echo "echo "Tu nombre es EVA";} else {echo "Tu nombre es " . $nombre;}switch...case...defaultUna alternativa a if...elseif...else, es la sentencia switch, la cuál evalúa y comparacada expresión de la sentencia case con la expresión que evaluamos, si llegamos al final dela lista de case y encuentra una condición Verdadera , ejecuta el código de bloque que hayaen default. Si encontramos una condición verdadera debemos ejecutar un break para que lasentencia switch no siga buscando en la lista de case. Veamos un ejemplo.<?phpswitch ($dia) {case "Lunes":echo "Hoy es Lunes";break;case "Martes":echo "Hoy es Martes";break;case "Miercoles":echo "Hoy es Miercoles";break;case "Jueves":echo "Hoy es Jueves";break;case "Viernes":echo "Hoy es Viernes";break;case "Sábado":echo "Hoy es Sábado";break;case "Domingo":echo "Hoy es Domingo";
  • 25. Taller de PHP pecesama24break;default:echo "Esa cadena no corresponde a ningún día de lasemana";}?>whileLa sentencia while ejecuta un bloque de código mientras se cumpla una determinadacondición.<?php$num = 1;while ($num < 5) {echo $num;$num++}?>Podemos romper un ciclo while utilizando la sentencia break.<?php$num = 1;while ($num < 5) {echo $num;if ($num == 3){echo "Aquí nos salimos n";break}$num++}?>do...whileEsta sentencia es similar a while, salvo que con esta sentencia primero ejecutamosel bloque de código y después se evalúa la condición, por lo que el bloque de código seejecuta siempre al menos una vez.<?php$num = 1;do {echo $num;if ($num == 3){echo "Aquí nos salimos n";break}$num++} while ($num < 5);?>
  • 26. Taller de PHP pecesama25forEl ciclo for no es estrictamente necesario, cualquier ciclo for puede ser sustituidofácilmente por otro while. Sin embargo, el ciclo for resulta muy útil cuando debemosejecutar un bloque de código a condición de que una variable se encuentre entre un valormínimo y otro máximo. El ciclo for también se puede romper mediante la sentencia break.<?phpfor ($num = 1; Snum <=5; $num++){echo $num;if ($num == 3){echo "Aquí nos salimos n";break}}?>A continuación muestro las 4 formas en que se puede usar el ciclo for./* ejemplo 1 */for ($i = 1; $i <= 10; $i++) {print $i;}/* ejemplo 2 */for ($i = 1;;$i++) {if ($i > 10) {break;}}print $i;}/* ejemplo 3 */$i = 1;for (;;) {if ($i > 10) {break;}print $i;$i++;}/* ejemplo 4 */for ($i = 1; $i <= 10; print $i, $i++) ;Hay que realizar los siguientes programas con ciclos.· Imprima los números del 1 al 100
  • 27. Taller de PHP pecesama26for ($i = 1; $i <= 100; print $i."<br>", $i++) ;· Imprima los números pares del 1 al 100for ($i = 2; $i <= 100; print $i."<br>", $i=$i+2) ;· Un programa que le des un número y obtenga su tabla de multiplicar (tablas.php)tablas.php<?php$numero=4;for ($i=1; $i<=10; $i++){echo $i." x ".$numero." = ".$i*$numero."<br>";}?>Vectores (tablas)Las tablas (o array en inglés), son muy importantes en PHP, ya que generalmente,las funciones que devuelven varios valores, como las funciones ligadas a las bases dedatos, lo hacen en forma de tabla.En PHP disponemos de dos tipos de tablas. El primero sería el clásico, utilizandoíndices:<?php$ciudad[] = "París";$ciudad[] = "México";$ciudad[] = "Roma";$ciudad[] = "Sevilla";$ciudad[] = "Londres";print ("yo vivo en " . $ciudad[1] . "<BR>n");?>Esta es una forma de asignar elementos a una tabla, pero una forma más formal esutilizando la función array<?php$ciudad = array("París", "Roma", "Sevilla", "Londres");//contamos el número de elementos de la tabla$numelentos = count($ciudad);//imprimimos todos los elementos de la tablafor ($i=0; $i < $numelentos; $i++){print ("La ciudad $i es $ciudad[$i] <BR>n");}?>
  • 28. Taller de PHP pecesama27Sino se especifica, el primer índice es el cero, pero podemos utilizar el operador =>para especificar el índice inicial.$ciudad = array(1=>"París", "Roma", "Sevilla", "Londres");Un segundo tipo, son las tablas asociativas, en las cuáles a cada elemento se leasigna un valor (key) para acceder a él.Para entenderlo, que mejor que un ejemplo, supongamos que tenemos una tabla enal que cada elemento almacena el número de visitas a nuestra web por cada día de lasemana.Utilizando el método clásico de índices, cada día de la semana se representaría porun entero, 0 para lunes, 1 para martes, etc.$visitas[0] = 200;$visitas[1] = 186;Si usamos las tablas asociativas sería$visitas["lunes"] = 200;$visitas["martes"] = 186;o bien,$visitas = array("codigo">$visitas = array("lunes"=>200;"martes"=>186);Ahora bien, recorrer una tabla y mostrar su contenido es sencillo utilizando losíndices, pero ¿cómo hacerlo en las tablas asociativas?. La manipulación de las tabasasociativas se a hace través de funciones que actúan sobre un puntero interno que indica laposición. Por defecto, el puntero se sitúa en el primer elemento añadido en la tabla, hastaque es movido por una función:current - devuelve el valor del elemento que indica el punteropos - realiza la misma función que currentreset - mueve el puntero al primer elemento de la tablaend - mueve el puntero al último elemento de la tablanext - mueve el puntero al elemento siguienteprev - mueve el puntero al elemento anteriorcount - devuelve el número de elementos de una tabla.Veamos un ejemplo de las funciones anteriores:<?php$semana = array("lunes", "martes", "miércoles", "jueves","viernes", "sábado", "domingo");
  • 29. Taller de PHP pecesama28echo count($semana); //7//situamos el puntero en el primer elementoreset($semana);echo current($semana); //lunesnext($semana);echo pos($semana); //martesend($semana)echo pos($semana); //domingoprev($semana);echo current($semana); //sábado?>Recorrer una tabla con las funciones anteriores se hace un poco enredoso, para ello serecomienda utilizar la función each().<?php$visitas = array("lunes"=>200, "martes"=>186,"miércoles"=>190, "jueves"=>175);reset($visitas);while (list($clave, $valor) = each($visitas)){echo "el día $clave ha tenido $valor visitas<BR>";}?>La función each() devuelve el valor del elemento actual, en este caso, el valor delelemento actual y su clave, y desplaza el puntero al siguiente, cuando llega al finaldevuelve falso, y termina el bucle while().Tablas multidimensionalesLas tablas multidimensionales son simplemente tablas en las cuales cada elementoes a su vez otra tabla.<?php$calendario[] = array (1, "enero", 31);$calendario[] = array (2, "febrero", 28);$calendario[] = array (3, "marzo", 31);$calendario[] = array (4, "abril", 30);$calendario[] = array (5, "mayo", 31);while (list($clave, $valor ) = each($calendario)){{$cadena = $valor[1];$cadena .= " es el mes número " . $valor[0];$cadena .= "y tiene " . $varlor[2] . " días<BR>";echo $cadena;}?>La función list() es más bien un operador de asignación, lo que hace es asignarvalores a unas lista de variables. En este caso los valores son extraídos de una tabla por lafunción each().
  • 30. Taller de PHP pecesama29FormulariosLos Formularios no forman parte de PHP, sino del lenguaje estándar de Internet,HTML, pero como éstos van a aparecer muchas veces durante el curso, vamos a dedicaresta algunas líneas a ellos.Todo formulario comienza con la etiqueta <FORM ACTION="lo_que_sea.php"METHOD="post/get">. Con ACTION indicamos el script que va procesar lainformación que recogemos en el formulario, mientras que METHOD nos indica la formaen que se enviarán datos post o get. La etiqueta </FORM> indica el final del formulario.A partir de la etiqueta <FORM> vienen los campos de entrada de datos que puedenser:Botón de comando:<input type="submit" value="enviar" name="enviar">Cuadro de texto:<input type="text" name="nombre" size="20" value="jose">Veamos un ejemplo con PHP:Las siguientes dos paginas tienen el objetivo de preguntar cual es tu equipo de fútbolfavorito y desplegar en otra pagina el seleccionado (equipo.htm y equipo.php).equipo.htm<html><title>Equipo Favorito</title><body><form method=post ACTION=”equipo.php”>Cual es tu equipo de fútbol favorito ?<input name=”equipo” type “TEXT”><br><br><input type=submit></form></body><html>
  • 31. Taller de PHP pecesama30equipo.php<html><body>Tu equipo favorito es:<?php Echo “<h1><B>$equipo</B></h1>”; ?></body></html>Hay que poner especial atención en el parámetro name de un elemento delformulario ya que es el mismo nombre con el que se le referenciará en php, comopudimos ver en el ejemplo anterior el elemento <input name=”equipo” type “TEXT”> lomanejamos en php como $equipo, así es con todos los elementos de formularios.Cuadro de texto con barras de desplazamiento:<textarea rows="5" name="descripcion" cols="20">Es de color rojo</textarea>Ahora veamos un ejemplo con PHP:Programa PHP que pide WebSites favoritos y los muestra como salida (sites.htm ysites.php).sites.htm<html><title>Web Sites Favoritos</title><body><form method=POST ACTION=”sites.php”>Mencióname algunos de tus WebSites Favoritos:<br><textarea name=”websites” cols=”50” rows=”5”>http://http://http://http://</textarea><br><br><input type=submit></form></body><html>sites.php<html><body>
  • 32. Taller de PHP pecesama31Tus webs favoritos son:<br><?php Echo “<h3><B>$websites</B></h3>”; ?></body></html>Casilla de verificación o checkbox:<input type="checkbox" name="cambiar" value="ON">Ahora veamos un ejemplo con PHP:Programa que pregunta lo que haces al levantarte y lo despliega como salida(checkboxes.htm y checkboxes.php).checkboxes.htm<HTML><HEAD></HEAD><BODY><FORM METHOD=POST ACTION=”checkboxes.php”>Qué haces en cuanto te levantas?<br><br>Lavarme la cara<INPUT NAME=”sel1” TYPE=”Checkbox”VALUE=”Lavarse la Cara”><BR>Asearse la boca<INPUT NAME=”sel2” TYPE=”Checkbox”VALUE=”Asearse los dientes”><BR>Desayunar<INPUT NAME=”sel3” TYPE=”Checkbox” VALUE=”Desayunar”><BR><BR><INPUT TYPE=SUBMIT></FORM></BODY></HTML>checkboxes.php<html><body><?phpif (isset($sel1))Echo “$sel1 <br>”;if (isset($sel2))Echo “$sel2 <br>”;if (isset($sel3))Echo “$sel3 <br>”;?></body></html>
  • 33. Taller de PHP pecesama32Botón de radio u opción:<input type="radio" value="azul" checked name="color">Ahora veamos un ejemplo con PHP:Programa que nos presenta una suma, nosotros tenemos que elegir la respuesta entretres opciones posibles y la salida nos muestra la opción que elegimos (radio.htm yradio.php).radio.htm<HTML><BODY><FORM METHOD=GET ACTION=”radio.php”>Cuantos son 2 + 2?<BR><BR><INPUT NAME=”Resp” TYPE=”Radio” VALUE=”44”>44<BR><INPUT NAME=”Resp” TYPE=”Radio” VALUE=”22”>22<BR><INPUT NAME=”Resp” TYPE=”Radio” VALUE=”4”>4<BR><BR><INPUT TYPE=SUBMIT></FORM></BODY>radio.php<HTML><BODY><?php Echo “seleccionaste $Resp”;?></BODY></HTML>Menú desplegable:<select size="1” class="codigo"><select size="1" name="dia"><option selected value="lunes">lunes</option><option>martes</option><option value="miercoles">miercoles</option></select>
  • 34. Taller de PHP pecesama33Ahora veamos un ejemplo en PHP:Programa que pregunta opciones para armar una computadora y despliega lasopciones elegidas (lista.htm y lista.php).lista.htm<HTML><HEAD></HEAD><BODY><FORM METHOD=GET ACTION=”lista.php”>Elije la computadora a comprar<BR><BR><SELECT NAME=”compu”><OPTION>Pentium</OPTION><OPTION>Celeron</OPTION><OPTION>K6</OPTION><OPTION>MAC</OPTION></SELECT><BR><BR>Selecciona los dispositivos de la computadora?<BR><BR><SELECT NAME=”dispo[]” MULTIPLE><OPTION>KIT MULTIMEDIA</OPTION><OPTION>QUEMADORA</OPTION><OPTION>WEB CAM</OPTION><OPTION>MICROFONO</OPTION></SELECT><BR><BR><INPUT TYPE=SUBMIT></FORM></BODY></HTML>lista.php<HTML><BODY><?phpEcho “Seleccionaste una computadora: <B>$compu</B>con:<br>”;Echo “$dispo[0]<br>”;Echo “$dispo[1]<br>”;Echo “$dispo[2]<br>”;Echo “$dispo[3]<br>”;?></BODY></HTML>
  • 35. Taller de PHP pecesama34Campo oculto:<input type="hidden" name="edad" value="55">Este último tipo de campo resulta especialmente útil cuando queremos pasar datosocultos en un formulario.Ahora pasemos a ver ejemplos que necesitan mas código PHP, como son ciclos yarrays, implementándolos en conjunto con los formularios.Para el uso del FOR un programita para créditos bancarios (banco.htm ybanco.php).banco.htm<HTML><HEAD></HEAD><BODY><B>Crédito bancario</B><FORM METHOD=POST ACTION="banco.php"><BR>Cual de estos paquetes te interesa tomar?<BR><BR><INPUT NAME="valor" TYPE="Radio" VALUE=1000>Nuestro paquetede $1,000 Con el 5.0% interes<BR><INPUT NAME="valor" TYPE="Radio" VALUE=5000>Nuestro paquetede $5,000 Con el 6.5% interes<BR><INPUT NAME="valor" TYPE="Radio" VALUE=10000>Nuestro paquetede $10,000 Con el 8.0% interes<BR><BR>Cuanto es lo que deseas pagar al mes ?<INPUT NAME=pagomes TYPE=Text SIZE=5><BR><BR><INPUT TYPE=SUBMIT VALUE="Pulse aquí para calcular"></FORM></BODY></HTML>banco.php<HTML><HEAD></HEAD><BODY><?php$Duracion=0;switch ($valor) {
  • 36. Taller de PHP pecesama35case 1000:$Interes = 5;break;case 5000:$Interes = 6.5;break;case 10000:$Interes = 8;break;default:echo "No seleccionaste ningun paquete favor depresionar el boton back y seleccionar alguno";exit;}while ($valor > 0){$Duracion = $Duracion + 1;$Mensualmente = $pagomes - ($valor * $Interes/100);if ($Mensualmente<=0){echo "Tu necesitas hacer pagos mas grandes!";exit;}$valor = $valor - $Mensualmente;}echo "La duracion es de: $Duracion meses con unporcentaje de intereses del $Interes.";?></BODY></HTML>El siguiente programa demuestra como se pueden trabajar los array como elementoshash (estados.php y capital.php).estados.php<html><head><title>Estados de México</title></head><body bgcolor="#FFFFFF">De que estado te gustaría conocer su capital?<?$Estados=array(1=>"Colima","Jalisco","Sinaloa");echo "<form method=post action=capital.php>";echo "<select name=estado>";for ($counter=1; $counter<4; $counter++)echo "<option value=$counter>$Estados[$counter]</option>";echo "</select><br><br>";echo "<input type=submit>";echo "</form>";?></body></html>
  • 37. Taller de PHP pecesama36capital.php<html><head><title>Capitales</title></head><body bgcolor="#FFFFFF"><?php$Capital=array(1=>"Colima","Guadalajara","Culiacan");for ($counter=0;$counter<4;$counter++){if ($counter==$estado){echo "la capital del estado elegido es&Capital[$counter]";}}?></body></html>Como podemos observar los dos archivos tienen extensión .php, esto se debe a quees necesario ejecutar código php en los dos, para poder formar dinámicamente las dospáginas.Para tener más material con formularios realizaremos un programa PHP quecontenga varios elementos de formulario juntos:Desarrollar un programa en PHP que pida el Nombre (textbox), el apellido(textbox), la edad (textbox), domicilio (text area), seleccione el rango de sueldo que legustaría ganar (listbox) y que seleccione como considera así mismo su desempeño laboral(radio button). El programa no aceptará curriculums que elijan un sueldo muy bajo, ni unsueldo extremo, ni tampoco si se considera pésimo (minicu.htm y minicu.php).minicu.htm<HTML><HEAD></HEAD><BODY><B>Minicurriculum </B><FORM METHOD=POST ACTION="minicu.php">Nombres:<INPUT NAME="nombres" TYPE="Text">Apellidos:<INPUT NAME="apellidos" TYPE="Text">Edad:<INPUT NAME="edad" TYPE="Text"SIZE="3"><BR><BR>Domicilio:<TEXTAREA NAME="Domicilio" ROWS=4 COLS=40></TEXTAREA><BR>
  • 38. Taller de PHP pecesama37<BR>Que salario deseas ganar?<SELECT NAME="Salario"><OPTION VALUE=0> Menos de $1000</OPTION><OPTION VALUE=1000>Entre $1,000 y $3,000</OPTION><OPTION VALUE=3000>Entre $3,000 y $5,000</OPTION><OPTION VALUE=5000>mas de $5,000</OPTION></SELECT><BR><BR>Como consideras tu desempeño?<BR><BR><INPUT NAME="Desempe" TYPE="Radio" VALUE=0>Pesimo<BR><INPUT NAME="Desempe" TYPE="Radio" VALUE=5>Regular<BR><INPUT NAME="Desempe" TYPE="Radio" VALUE=10>Excelente<BR><BR><INPUT TYPE=SUBMIT VALUE="Presione cuando este listo(a)"><INPUT TYPE=RESET VALUE="Borra todo"></FORM></BODY></HTML>minicu.php<HTML><BODY>Sr(a) <?php Echo "$nombres $apellidos ";?>en base a su edad (<?php Echo "$edad";?>) y sus aspiraciones <br>económicas y su auto estimación hemos determinado que:<br><?phpecho "Salario deseado: $Salario <br>" ;echo "Su desempeño elegido: $Desempe <br>";if ((($Salario==0) OR ($Salario ==5000)) OR ($Desempe ==0)){Echo "Usted no cumple los requisitos para ser parte denuestra empresa";}else{Echo "Usted cumple satisfactoriamente nuestrasaspiraciones";}?></BODY></HTML>
  • 39. Taller de PHP pecesama38Capitulo IIIAlmacenamiento de lainformación
  • 40. Taller de PHP pecesama39Archivosfopenfopen -- Abre un archivo o una URLDescripciónint fopen (string filename, string mode [, int use_include_path])Si filename comienza con "http://" (no es sensible a mayúsculas), se abre unaconexión HTTP 1.0 hacia el servidor especificado y se devuelve un apuntador de archivo alcomienzo del texto de respuesta.No maneja redirecciones HTTP, por eso se debe incluir una barra final cuando setrata de directorios.Si filename comienza con "ftp://" (no es sensible a mayúsculas), se abre unaconexión ftp hacia el servidor especificado y se devuelve un apuntador al archivorequerido. Si el servidor no soporta ftp en modo pasivo, esto fallará. Se pueden abrirarchivo via ftp para leer o para escribir (pero no ambas cosas simultáneamente).Si filename no comienza con nada de lo anterior, el archivo se abre del sistema dearchivos, y se devuelve un apuntador al archivo abierto, si el abrir el archivo falla, lafunción devuelve false.mode puede ser cualquiera de lo siguiente:• r - Abre para sólo lectura; sitúa el apuntador del archivo al comienzo delmismo.• r+ - Abre para lectura y escritura; sitúa el apuntador del archivo al comienzodel archivo.• w - Abre para sólo escritura; sitúa el apuntador del archivo al comienzo delarchivo y trunca el archivo con longitud cero. Si el archivo no existe, trata decrearlo.• w+ - Abre el archivo para lectura y escritura; sitúa el apuntador del archivo alcomienzo del archivo y trunca el archivo con longitud cero. Si el archivo noexiste, trata de crearlo.• a - Abre sólo para escribir (añadir); sitúa el apuntador del archivo al final delmismo. Si el archivo no existe, trata de crearlo.• a+ - Abre para lectura y escritura (añadiendo); sitúa el apuntador del archivo alfinal del mismo. Si el archivo no existe, trata de crearlo.Además, mode puede contener la letra b. Esto es útil para sistemas que diferencianentre archivos binarios y de texto (es inútil en Unix). Si no se necesita, será ignorado.
  • 41. Taller de PHP pecesama40Puede usarse el tercer parámetro opcional y fijarlo a "1".fwritefwrite -- Escribe archivos en modo binarioDescripciónint fwrite (int fp, string string [, int length])fwrite() escribe el contenido de string al fichero apuntado por fp. Si se da elargumento length, la escritura acaba antes de que length bytes sean escritos o se alcance elfinal de string, lo que ocurra primero.freadfread -- Lee archivos en modo binarioDescripciónstring fread (int fp, int length)fread() lee hasta length bytes del apuntador de fichero referenciado por fp. Lalectura acaba cuando length bytes se han leido o se alcanza EOF, lo que ocurra primero.Con esta teoría ya podemos realizar nuestro propio contador de visitas en nuestrositio web, así sabremos que tan popular es nuestro sitio, es necesario tener permisos deescritura en nuestro directorio donde va a estar el contador (contador.php).contador.php<?php$contador_archivo="c:/inetpub/wwwroot/taller/conta.dat";if (!($fp=fopen($contador_archivo,"r")))die("No se encontro $contador_archivo");$contador=(int)fread($fp,20);fclose($fp);$contador++;echo "Eres el visitante número: <b>$contador</b>";$fp=fopen($contador_archivo,"w");fwrite($fp,$contador);fclose($fp);?>La instrucción die envía a la salida un mensaje y finaliza la ejecución del script. Nodevuelve nada.
  • 42. Taller de PHP pecesama41Bases de DatosHasta ahora hemos visto la funciones básicas de PHP, lo que viene a continuaciónya es sobre la forma en como podemos acceder a bases de datos, veremos como acceder aellas en dos sistemas de bases de datos diferentes, los cuales son MySQL Server yMicrosoft Access.El primer sistema que veremos es MySQL Server, pero antes de ver código PHP,aprenderemos un poco de este sistema, para los ejemplos en PHP ya va a ser necesario quetengamos una base de datos creada por lo tanto pondremos atención en las formas en queestas se crean.Qué es MySQLAdministrador de Base de DatosUna base de datos es un conjunto de datos estructurados. Esto podría ser cualquiercosa, desde una simple lista de compras hasta una galería de pinturas o la gran cantidad deinformación que se maneja en una corporación. Para agregar, acceder y procesar los datosalmacenados en una base de datos computacional, se necesita un sistema administrador debase de datos tal como MySQL. Además los computadores son muy buenos manejandograndes cantidades de datos, el administrador de base de datos juega un rol central en lacomputación, ya sea como utilidad autónoma o parte de otra aplicación.Sistema administrador de base de datos relacionalesUna base de datos relacional almacena datos en tablas separadas, más biencolocando todos los datos en un gran almacén. Esto agrega velocidad y flexibilidad. Lastablas son enlazadas por relaciones definidas haciendo posible combinar datos desde variastablas solicitadas. El SQL forma parte de MySQL, conocido como Lenguaje de ConsultasEstructurado, es el lenguaje estandarizado más común usado para acceder base de datos.Software de Fuente AbiertaFuente abierta significa que es posible que pueda ser usado y modificado porcualquiera. Alguien puede bajar MySQL desde Internet y usar éste sin tener que pagarnada. Alguien puede estudiar el código fuente y cambiarlo de acuerdo a sus necesidades.MySQL usa el GPL de la GNU, para definir lo que se puede hacer con el software endiferentes situaciones.Uso de MySQLMySQL es muy rápido, seguro y fácil de usar. MySQL también ha desarrollado unconjunto de características muy prácticas, en estrecha cooperación con otros usuarios.MySQL fue desarrollado para manejar grandes bases de datos mucho más rápido que lassoluciones existentes y ha sido usado exitosamente en ambientes de producción con altas
  • 43. Taller de PHP pecesama42demandas, por varios años. Aunque está bajo un desarrollo constante, MySQL siempreofrece conjunto de funciones muy poderoso y eficiente. La conectividad, velocidad yseguridad hace de MySQL una suite poderosa para acceder a bases de datos en Internet.Características Técnicas de MySQLMySQL es un sistema Cliente/Servidor que consta de un servidor SQL multi-hiloque soporta diferentes backends, variados programas cliente y de librerías, administrador deherramientas y un programa de interface.MySQL contribución para muchos de los software disponiblesEs mucho más probable que se encuentre que diversas aplicaciones ya soportanMySQL. Los valores centrales de MySQL son :• La mejor y más usada base de datos en el mundo.• Disponible y Accesible para todos• Fácil de usar• Se está perfeccionando continuamente mientras permanece rápida y segura.• Divertida para usar y perfeccionar.• Libre de molestias.Características principales de MySQLA continuación se describen algunas de las características más importantes de MySQL:• Escrito en C y C++, testado con GCC 2.7.2.1. Usa GNU autoconf para portabilidad.• Clientes C, C++, Eiffel,PHP,Python,JAVA, Perl, TCL.• Multiproceso, es decir puede usar varias CPU si éstas están disponibles.• Puede trabajar en distintas plataformas y S.O. distintos.• Sistema de contraseñas y privilegios muy flexible y segura.• Todas la palabras de paso viajan encriptadas en la red.• Registros de longitud fija y variable.• 16 índices por tabla, cada índice puede estar compuesto de 1 a 15 columnas o partesde ellas con una longitud máxima de 127 bytes.• Todas las columnas pueden tener valores por defecto.• Utilidad Isamchk para chequear, optimizar y reparar tablas.• Todos los datos están grabados en formato ISO8859_1.• Los clientes usan TCP o UNIX Socket para conectarse al servidor.• Todos los comandos tienen -help o -? Para las ayudas.• Soporta diversos tipos de columnas como enteros de 1, 2, 3, 4, y 8 bytes, comaflotante, doble precisión, carácter, fechas, enumerados, etc.• ODBC para Windows 95 (con fuentes), se puede utilizar ACCESS para conectarcon el servidor.• Muy rápida usando joins, optimizada para un barrido multi-joins.
  • 44. Taller de PHP pecesama43• Todas las funciones y operadores soportan en el SELECT y WHERE como partesde consultas. Ejemplo:•• mysql> SELECT CONCAT(nombre," ",apellido) FROM nombre_tabla• WHERE ingreso >10000 AND edad >30• Todas las clausulas SQL soportan GROUP BY y ORDER BY.Instalando MySQL ServerBien, ya conocemos que es MySQL, ahora procedamos a instalarlo en nuestroservidor para poder realizar los programas PHP con bases de datos MySQL.• Al iniciar el instalador veremos la pantalla de “preparándose para instalar”,en esta solo hay que esperar que termine el 100%.• Después tenemos la pantalla de bienvenida, solo hay que dar clic en Next.
  • 45. Taller de PHP pecesama44• La siguiente interfaz nos muestra la información de la versión de MySQLque estamos instalando.• Ahora tendremos la ventana de donde queremos instalarlo, para evitarcomplicaciones con archivos de configuración, presionemos Next y seinstalará en C:mysql.• Hay que elegir el tipo de instalación, elijamos Typical.
  • 46. Taller de PHP pecesama45• Esperamos un poco a que se instale.• Cuando termine hay que dar clic en Finish.Después de estos sencillos pasos ya tenemos instalado MySQL Server, ahora lo quesigue es iniciarlo, debemos ir a la siguiente ruta en nuestro disco duro C:mysqlbin yejecutar el programa winmysqladmin.exe.• Cuando este en ejecución WinMySQLadmin en su primera ocasión pediráun nombre de usuario y contraseña para el administrador del sistema de basede datos.
  • 47. Taller de PHP pecesama46• Ahora si ya lo tendremos ejecutándose siempre que el sistema inicie, y estaráen la barra de inicio del sistema con un icono de un semáforo, hay que darleclic en el icono para que nos muestre sus opciones.• Al darle clic en Show Me aparecerá el administrador de MySQL, desde ahípodemos ver todas los componentes del sistema de bases de datos.Con esto es suficiente sobre la instalación de MySQL Server, ahora veamos comocrear bases de datos en el.Conectándose y desconectándose al servidor MySQLPara conectarse al servidor, generalmente se necesita proveer a MySQL un nombrede usuario, y un password. Si el servidor corre en una máquina distinta a la que se estáutilizando se debe especificar el nombre del host (máquina). Cuando se conocen todos estosparámetros la conexión se realiza de la siguiente manera:shell> mysql -h host -u user -pEnter password:*********Si la conexión se realizó con éxito, mysql despliega el siguiente mensaje:Welcome to the MySQL monitor. Commands end with; org.Your MySQL connection id is 459 to server version: 3.22.20a-logType "help" for help.mysql>
  • 48. Taller de PHP pecesama47El prompt indica que mysql está listo para recibir los comandos que ingrese elusuario. Algunas instalaciones de MySQL admiten usuarios anonymous (sin nombre)cuando el servidor corre en el host local. En este caso, se debe invocar a el servidor mysqlsin ninguna opción:shell>mysqlUna vez que se ha realizado la conexión con éxito, para desconectarse al servidor encualquiera de los dos casos anteriores se debe escribir QUIT o control-D.Creando y usando una base de datosVisualización de las bases de datos existentes en el servidor MySQLAntes de crear una base de datos, se debe conocer que base de datos existenactualmente en el servidor, para ello se utiliza el comando SHOW, de la siguiente manera:mysql> SHOW DATABASES;+----------+| Database |+----------+| mysql || test || tmp |+----------+Esta lista probablemente no es igual en todas las máquinas, pero las bases de datosmysql y test están siempre entre ellas. La base de datos mysql se requiere porque en ella sedescribe la información de los privilegios de acceso a los usuarios. La base de datos testproporciona el espacio de trabajo para los usuarios.Selección de una base de datosPara seleccionar o acceder a una base de datos determinada se utiliza el comandoUSE:mysql> USE testDatabase changedUna vez, que se ha realizado la conexión con éxito se puede comenzar a trabajar conla base de datos, pero siempre y cuando se tengan los permisos adecuados. Si no se tienenlos permisos el administrador debe darle los permisos al usuario para poder trabajar, esto serealiza con la ejecución del siguiente comando:mysql> GRANT ALL ON nombre_database.* TO nombre_usuario;
  • 49. Taller de PHP pecesama48Creación de una base de datosPara crear una base de datos se debe tener permiso para poder crear base de datos enel servidor MySQL , si se tiene el permiso entonces la sentencia a seguir es:mysql> CREATE DATABASE nombre_database;Bajo Unix, los nombres de las bases de datos y de las tablas son sensibles, estoquiere decir que se hace diferencia entre minúsculas y mayúsculas, así es que para referirsea una base de datos determinada hay que llamarla tal como se le nombro cuando fue creada.Creación de tablasPara crear las tablas que va a contener la base de datos, se realiza de la siguienteforma:mysql> CREATE TABLE nombre_tabla(campo_1 tipo(tamaño), campo_2tipo(tamaño),...,campo_n tipo(tamaño));El campo indica el nombre de la columna y tipo(tamaño) específica el tipo de dato yel espacio que se va a conservar para cada dato almacenado en esa columna. Ejemplo:codigo int(5), nombre char(25), fecha date, etc.. Cuando se trata de fechas no se específicael tamaño, puesto que ya está determinado. Para visualizar las tablas que tiene una base dedatos se usa el mismo comando utilizado para ver las bases de datos, pero con la diferenciade que en vez de database se coloca tables, es decir:mysql> SHOW TABLES;Para verificar que la tabla ha sido creada de la forma indicada, se usa el comandoDESCRIBE. Ejemplo: Se va a crear una tabla llamada clientes, de la siguiente forma:mysql> CREATE TABLE clientes( rut char(8),nombre char(25),direccion char(50), telefono int(10));mysql> DESCRIBE clientes;+----------+-----------+------+-----+--------+-------+| Field | Type | Null | Key | Default| Extra |+----------+-----------+------+-----+--------+-------+| rut | char(12) | YES | | NULL | || nombre | char(25) | YES | | NULL | || direccion| char(50) | YES | | NULL | || telefono | int(10) | YES | | NULL | |+----------+-----------+------+-----+--------+-------+Esto es muy útil cuando se olvida el nombre o tipo de una columna. El Field indicael nombre de la columna, Type es el tipo de dato que acepta esa columna, Null indica si lacolumna puede contener valores NULL, Key indica la clave por la cual la columna se va aindexar y Default específica el valor por defecto que tiene la columna.
  • 50. Taller de PHP pecesama49Ingreso de Datos a las tablasPara ingresar información a una tabla se puede hacer básicamente de dos maneras.La primera se utiliza cuando se tiene mucha información a ingresar de una sola vez,entonces es conveniente almacenar esta información en un archivo de texto, es decir, .txt.Una vez que se tiene este archivo, se procede de la siguiente forma:mysql> LOAD DATA LOCAL INFILE "nombre_archivo.txt" INTO TABLEnombre_tabla;Para el caso que se desee ingresar un solo registro, entonces la sentencia a seguir es:mysql> INSERT INTO nombre_tabla VALUES(``valor_1,valor_2,....,Los datos a ingresar se separan por comas y van entre comillas. Estos datos indicanlos valores que va a tomar cada una de las columnas, según el orden en que fueron creadas.En el caso que se quiera ingresar un valor NULL no es necesario las comillas, sólo secoloca NULL.Recuperación de la InformaciónPara recuperar la información que está contenida en una tabla, la sentencia general aseguir es:mysql> SELECT qué_es_lo_que_se_desea_ver FROM nombre_tabla WHEREcondiciones_a_satisfacer;Para los casos en que, se requiera:o Ver o seleccionar toda la información de una tabla:o mysql> SELECT * FROM nombre_tabla;o Seleccionar filas en particular:o mysql> SELECT * FROM nombre_tabla WHERE nombre_columna="loque se desee buscar"o Seleccionar columnas en particular:o mysql> SELECT nombre_columna_1, nombre_columna_n FROMnombre_tabla;Esto es conveniente cuando no se desea ver toda la fila o registro, entonces solo seseleccionan aquellas columnas en las que se esté interesado.
  • 51. Taller de PHP pecesama50MySQL FrontYa vimos como crear bases de datos y tablas de la manera tradicional de MySQL,pero como podemos ver es algo complejo, y como ya estamos acostumbrados ainterfaces gráficas (GUI por sus siglas en ingles), les mostraré como crear bases dedatos de una manera completamente visual para no tener que tocar línea de comandosde MySQL, para esto utilizaremos el software MySQL Front desarrollado por AnsgarBecker con correo electrónico chef@anse.de y dirección de su páginahttp://my.anse.de/forum.php en Alemania, aunque yo personalmente he intentado entrara esa dirección y no he podido, pero son los datos que trae el programa, una correcciónde ultimo momento, nuestro amigo Aldo Valdés <avo@mirc.com.mx> me mandó ladirección correcta de descarga la cual es http://www.anse.de/mysqlfront/.Veamos como usarlo:• La primera vez que lo corremos no presentara un formulario en blanco y sinforma de poder ingresar datos, es necesario presionar el botón New, parahabilitarlo.• Una vez presionado New aparecen unos datos ya predefinidos, lo único quetenemos que cambiar es nuestro usuario y contraseña.
  • 52. Taller de PHP pecesama51• Al momento de entrar nos mostrará esta interfaz.• Para crear una base de datos nueva, hay que ir al menú Extra y la opciónCreate Database…• Hay que ingresar el nombre de la base de datos, podemos crear ya la baseque utilizaremos en nuestros ejemplos de PHP, así que pongámosle denombre basecurso.
  • 53. Taller de PHP pecesama52• Ahora hay que crear una tabla donde almacenaremos los datos, asi queseleccionamos la nueva base y de nuevo vamos al menú Extra solo queahora seleccionamos Create Table…• En la ventana que aparece ponemos el nombre de la tabla el cual serátablacurso, en esa misma pantalla crearemos los campos, los cuales serán id(con propiedades de primario y auto incremento), nombre, direccion,telefono, email e imagen (todos de tipo varchar), ya que los agregamospresionamos Create!• Nos mostrará la tabla creada con sus respectivos campos y propiedades.
  • 54. Taller de PHP pecesama53• También si nosotros lo deseamos podemos ingresar información a la basedesde el mismo MySQL Front, pero este no es el caso.Ahora que si nosotros deseamos usar el método de línea de comandos del MySQL lainformación de la tabla es esta:CREATE TABLE tablacurso (id tinyint(3) unsigned NOT NULL auto_increment,nombre varchar(30) DEFAULT 0 ,direccion varchar(30) DEFAULT 0 ,telefono varchar(30) DEFAULT 0 ,email varchar(30) DEFAULT 0 ,imagen varchar(30) DEFAULT 0 ,PRIMARY KEY (id));Después de tanta información sobre MySQL ya es tiempo de iniciar a hacer programasPHP para manejo de bases de datos de MySQL.
  • 55. Taller de PHP pecesama54PHP para bases de datos MySQLConectarseEmpecemos con el primer script, que nos mostrará como conectarnos a un base de datos(conectarse.php).conectarse.php<html><head><title>Ejemplo de PHP</title></head><body><?phpfunction Conectarse(){if(!($link=mysql_connect("localhost","pecesama","pruebas"))){echo "Error conectando a la base de datos.";exit();}if (!mysql_select_db("basecurso",$link)){echo "Error seleccionando la base de datos.";exit();}return $link;}Conectarse();echo "Conexión con la base de datos conseguida.<br>";?></body></html>Como podemos ver en el ejemplo anterior aislé lo necesario para la conexión en unafunción, ahora esa función la pondremos en un archivo PHP solo (conec.php).conec.php<?php function Conectarse(){if (!($link=mysql_connect("localhost","pecesama","pruebas"))){exit();}if (!mysql_select_db("basecurso",$link)){exit();}return $link;} ?>
  • 56. Taller de PHP pecesama55Ya que tenemos la función en un archivo separado solo hay que mandarlo llamarcuando sea necesario, de esta forma cuando tengamos aplicaciones complejas que usemuchas páginas php y sea necesario cambiarle algo a la conexión solo se le tenga que hacerel cambio a este pequeño archivo y no a todas las páginas.Agregar registrosVeremos un ejemplo de agregar registros a la base de datos (insertareg.php yagregar.php).insertareg.php<html><head><title>Ejemplo de PHP</title></head><body><H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1><FORM ACTION="agregar.php"><TABLE><TR><TD>Nombre:</TD><TD><INPUT TYPE="text" NAME="nombre" SIZE="20"MAXLENGTH="30"></TD></TR><TR><TD>Direccion:</TD><TD><INPUT TYPE="text" NAME="direccion" SIZE="20"MAXLENGTH="30"></TD></TR><TR><TD>Telefono:</TD><TD><INPUT TYPE="text" NAME="telefono" SIZE="20"MAXLENGTH="30"></TD></TR><TR><TD>Email:</TD><TD><INPUT TYPE="text" NAME="email" SIZE="20"MAXLENGTH="30"></TD></TR><TR><TD>Imagen:</TD><TD><INPUT TYPE="text" NAME="imagen" SIZE="20"MAXLENGTH="30"></TD></TR></TABLE><INPUT TYPE="submit" NAME="accion" VALUE="Grabar"></FORM><hr><?phpinclude("conec.php");
  • 57. Taller de PHP pecesama56$link=Conectarse();$result=mysql_query("select * from tablacurso",$link);?><TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1><TR><TD>&nbsp;Nombre</TD><TD>&nbsp;Dirección&nbsp;</TD><TD>&nbsp;Telefono&nbsp;</TD><TD>&nbsp;Email&nbsp;</TD><TD>&nbsp;Imagen&nbsp;</TD></TR><?phpwhile($row = mysql_fetch_array($result)) {printf("<tr><td>&nbsp;%s</td><td>&nbsp;%s&nbsp;</td><td>&nbsp;%s&nbsp;</td><td>&nbsp;%s&nbsp;</td><td>&nbsp;<imgsrc=%s>&nbsp;</td></tr>",$row["nombre"],$row["direccion"],$row["telefono"],$row["email"],$row["imagen"]);}mysql_free_result($result);?></table></body></html>agregar.php<?phpinclude("conec.php");$link=Conectarse();$Sql="insert into tablacurso(nombre,direccion,telefono,email,imagen) values($nombre,$direccion, $telefono, $email, $imagen)";mysql_query($Sql,$link);header("Location: insertareg.php");?>Modificar registrosVeremos un ejemplo de modificar registros a la base de datos, consta de tresarchivos diferentes, el primero para introducir la consulta por el campo nombre, el segundopara realizar los cambios necesarios y el tercero para modificar la base de datos(consulta.htm, busca.php y modifica.php).consulta.htm<html><head><title>Ejemplo de PHP</title></head>
  • 58. Taller de PHP pecesama57<body><H1>Ejemplo de modificar</H1><FORM ACTION="busca.php">Nombre:<INPUT TYPE="text" NAME="nombre" SIZE="20" MAXLENGTH="30"><INPUT TYPE="submit" NAME="accion" VALUE="Buscar"></FORM></body></html>busca.php<html><body><?phpinclude("conec.php");$link=Conectarse();$Sql="select * from tablacurso where nombre like %$nombre%";echo $Sql;$result=mysql_query($Sql,$link);?><TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1><TR><TD>&nbsp;Nombre</TD><TD>&nbsp;Dirección&nbsp;</TD><TD>&nbsp;Telefono&nbsp;</TD><TD>&nbsp;Email&nbsp;</TD><TD>&nbsp;Imagen&nbsp;</TD></TR><form name="form1" method="post" action="modifica.php"><?phpwhile($row = mysql_fetch_array($result)){printf("<tr><td><INPUT TYPE=text NAME=nombre SIZE=20MAXLENGTH=30 value=%s></td><td>&nbsp;<INPUT TYPE=textNAME=direccion SIZE=20 MAXLENGTH=30value=%s>&nbsp;</td><td>&nbsp;<INPUT TYPE=textNAME=telefono SIZE=20 MAXLENGTH=30value=%s>&nbsp;</td><td>&nbsp;<INPUT TYPE=textNAME=email SIZE=20 MAXLENGTH=30value=%s>&nbsp;</td><td>&nbsp;<INPUT TYPE=textNAME=imagen SIZE=20 MAXLENGTH=30value=%s>&nbsp;</td></tr>",$row["nombre"],$row["direccion"],$row["telefono"],$row["email"],$row["imagen"]);}mysql_free_result($result);?></form></body></html>
  • 59. Taller de PHP pecesama58modifica.php<?phpinclude("conec.php");$link=Conectarse();$Sql="UPDATE tablacurso SET nombre=$nombre,direccion=$direccion, email=$email, telefono=$telefonoimagen=$imagen WHERE nombre=$nombre";mysql_query($Sql,$link);header("Location: consulta5.php");?>Eliminar registrosPasemos a la eliminación de registros, este consta de dos archivos, los dos .php elprimero es para elegir el registros a borrar y el segundo lo borra (eliminareg.php yborra.php).eliminareg.php<html><head><title>Ejemplo de PHP</title></head><body><H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1><?phpinclude("conec.php");$link=Conectarse();$result=mysql_query("select * from tablacurso",$link);?><TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1><TR><TD>&nbsp;Nombre</TD><TD>&nbsp;Dirección&nbsp;</TD><TD>&nbsp;Telefono&nbsp;</TD><TD>&nbsp;Email&nbsp;</TD><TD>&nbsp;Imagen&nbsp;</TD><TD>&nbsp;Borra&nbsp;</TD></TR><?phpwhile($row = mysql_fetch_array($result)) {printf("<tr><td>&nbsp;%s</td><td>&nbsp;%s&nbsp;</td><td>&nbsp;%s&nbsp;</td><td>&nbsp;%s&nbsp;</td><td>&nbsp;%s&nbsp;</td></td><td><a href="borra.php?id=%d">Borra</a></td></tr>",$row["nombre"],$row["direccion"],$row["telefono"],$row["email"],$row["imagen"],$row["ID"]);}mysql_free_result($result);?></table></body></html>
  • 60. Taller de PHP pecesama59borra.php<?phpinclude("conec.php");$link=Conectarse();mysql_query("delete from tablacurso where ID = $id",$link);header("Location: eliminareg.php");?>Ya conocemos como manejar una base de datos de MySQL con PHP, pero que pasasi nosotros tenemos nuestra base de datos en Microsoft Access y es una base de datosenorme, que nos llevaría mucho tiempo en convertirla en MySQL, existe una solución parapoder usarla en PHP, esta opción es ODBC, del cual les platicaré un poco.Conceptos básicos sobre ODBC¿Qué es ODBC?Open DataBase Conectivity (ODBC) es un desarrollo de Microsoft que se haconvertido en estándar, para el acceso a través de él a gran cantidad de tipos de datos.Básicamente, por tanto, cualquier aplicación simple que emplee ODBC puede acceder a lasBases de datos soportadas por este estándar. El funcionamiento es: la aplicación sólonecesita comunicarse con un paquete de archivos (ODBC), e instantáneamente puedetrabajar con cualquier tipo de datos soportados por este paquete.• Hay dos posibles accesos a la Base de datos (DIRECTO e INDIRECTO) el quedenomino DIRECTO consiste en que normalmente, una compañía diseña unaaplicación que accederá a datos. Esta aplicación se desarrolla hacia un tipo de datos,y por tanto sólo se implementa el acceso para ese tipo de datos. Si se requiereacceso a otro DBMS, es necesario por tanto, implementar un nuevo controlador odriver de acceso. Este sistema hace que el acceso sea directo a la Base de datos,pero tiene el inconveniente de que hay que desarrollar el enlace para cada DBMSque se quiera soportar.• Otro posible acceso es el INDIRECTO, es decir, si el DBMS posibilita que conODBC puedan ser accedidos los datos, es decir funciona con lo que se denominaODBC data source, (o fuente de datos ODBC) la aplicación accede a través delpaquete de archivos ODBC "indirectamente", y si añadimos que ODBC essoportado por los DBMS más comunes, con una misma aplicación y con un mismopaquete de drivers, podremos acceder a todas las DBMS sin necesidad de hacer undesarrollo para cada tipo.
  • 61. Taller de PHP pecesama60Ventajas del uso del acceso "indirecto" a través del ODBC:Quizás, la mayor ventaja es que el acceso a datos a través del ODBC permite elpoder gestionar un amplio rango de datos con una sola interface. Desde que los máspopulares DBMS ofrecen drivers ODBC, muchas son las aplicaciones que lo incluyencomo drivers de acceso.Otra ventaja es que al poderse variar la fuente de datos, el cambio de una DBMS aotra es simplista. Por ejemplo, si se diseña un informe usando Oracle Data source, y mástarde, la empresa decide cambiar a Microsoft SQL Server, simplemente con cambiar elODBC data source usado por el informe, se accede a la nueva DBMS. El únicorequerimiento es que la nueva fuente de datos ha de tener la misma estructura de tablas ycampos que la fuente de datos original.Además, el SQL que se envía al ODBC puede ser revisado y corregido antes de suenvío, y por tanto se controla exactamente los datos que se quieren recuperar de la fuente.Desventajas del ODBC:La principal desventaja son las capas a través de las cuales tiene que pasar laconsulta, esto hace que el tiempo de respuesta hasta que se obtienen los datos seincremente. El proceso es que la petición ha de "traducirse" a ODBC, para que ésteentienda la consulta. ODBC determina que fuente de datos contiene los datos que se pideny transmite la petición a la siguiente capa que es la fuente de datos ODBC (ODBC datasource). La fuente de datos analiza la petición y "traduce" de nuevo la consulta a unformato que pueda ser "comprendido" por la DBMS. Este complejo proceso puede versealterado por cualquier fallo en cualquiera de sus fases y por tanto la consulta no tendríaéxito.Cabe añadir que, las fuentes de datos ODBC deben estar configuradas correctamente enel ODBC.INI y en el ODBCINST.INI antes de poder ser usada. Si intentas crear un informeen un sistema y tratas de abrirlo con otro sistema, probablemente no empleen el mismoODBC data source, y por tanto no se establecerá la conexión. Además hay que asegurarseque el SQL usado en el ODBC ha de estar basado en los estándares establecidos por elAmerican National Standards Institute (ANSI) para el lenguaje SQL.Ahora vamos a verlo gráficamente. Soy usuario de una aplicación de PHP que usa basesde datos externas para almacenar información, esta aplicación trabaja directamente conMySQL, pero mi intención es tener una conexión con una base de datos de MicrosoftAccess, porque es más fácil; PHP no trabaja directamente con Access, pero puedeentenderse con él usando ODBC de por medio. Necesito crear un origen de datos en ODBCpara que PHP sepa a qué base de datos me refiero cuando le solicite información.Primero vamos a buscar a ODBC, que está en el Panel de Control.
  • 62. Taller de PHP pecesama61Bueno, y ahora, el Data Source Administrator del Open DataBase Conectivity, uODBC. Lo que sigue es crear una fuente u origen de datos, pero antes unas explicaciones:Vas a notar que las primeras tres pestañas se refieren a User DSN, System DSN y FileDSN. Perdón, pero tengo la versión en inglés, voy a traducir un poco:User DSN, nombre del origen de datos para el usuario. A veces, una máquina esutilizada por más de un usuario, los orígenes de datos declarados aquí son exclusivos delusuario.System DSN, nombre del origen de datos para el sistema. Todos los usuarios de lamáquina tienen acceso a estos orígenes de datos.User DSN, nombre del origen de datos en archivo. Se crea un archivo con laextensión DSN, que sirve como origen de datos y puede ser distribuido a otros usuarios.Este origen es el que usa Excel por omisión cuando hace consultas, cuidado con eso.Está otra pestaña importante que es ODBC Drivers u Controladores ODBC. Aquí seven todos los controladores disponibles en la máquina. De está forma puedes consultar sidispones del controlador que necesitas y si es la versión conveniente. Regularmente loscontroladores de bases de datos vienen con un programa SETUP que los instala y quedan
  • 63. Taller de PHP pecesama62dados de alta en esta lista.Las otras pestañas merecen artículos aparte pues sirven más a los administradores ydesarrolladores de sistemas. Para el fin de crear un origen de datos, con lo que hemos vistotenemos. Lo siguiente:Vamos a seleccionar la pestaña System DSN, nombre de origen de datos del sistema ypresionamos el botón Add…, agregar..Luego señalamos el controlador o driver del tipo de base de datos que queremos accesar:Microsoft Access Driver (o controlador, en la versión en español) y presionamos Finalizar;pero fíjate que todavía no acabamos.Lo que tenemos que hacer ahora es darle al nuevo origen de datos un nombre peculiar ydistintivo, como estamos creando un origen de datos para una base de datos que se llamaMyTown.mdb pues le llamo MiPueblo y le damos una descripción (que en realidad no esnecesaria).
  • 64. Taller de PHP pecesama63Eso es todo, ahora solamente se debe cerrar el administrador de ODBC presionado elbotón Aceptar. Tenemos un origen de datos nuevo que le será útil a aplicaciones que deotra forma no podrían leer una base de datos Access El controlador de ODBC de MicrosoftAccess se puede instalar, si es que no lo tienes, desde el CD de Office o de Access sí lotienes como versión independiente.Para más información y recursos respecto a ODBC puedes visitar:
  • 65. Taller de PHP pecesama64Ya conocemos que es ODBC y como crear un DSN, ahora veamos como usar esasbases con PHP:PHP con ODBCConectarseVeamos como realizar una conexión con ODBC a un DSN de nombre base ymostrar los resultados (conectarODBC.php).conectarODBC.php<?$conexion = odbc_connect("base","","","");$rs= odbc_exec($conexion,"select * from usuarios");while (odbc_fetch_row($rs)){echo odbc_result($rs,"Nombre");echo odbc_result($rs,"idusuario");}odbc_close_all();?>AgregarVamos a agregar un registro a la base de datos (agregarODBC.php)agregarODBC.php<?$conexion = odbc_connect("base","","","");$rs= odbc_exec($conexion,"select * from usuarios");$sql="insert into usuarios (idusuario, Nombre)values(1,Pedro)";$rs=odbc_exec($conexion,$sql);odbc_close_all();?>ModificarVamos a modificar un registro a la base de datos (modificarODBC.php)modificarODBC.php<?$conexion = odbc_connect("base","","","");$rs= odbc_exec($conexion,"select * from usuarios");$sql=" update usuarios set Nombre=pecesama";$rs=odbc_exec($conexion,$sql);
  • 66. Taller de PHP pecesama65odbc_close_all();?>EliminarVamos a eliminar un registro a la base de datos (eliminarODBC.php)eliminarODBC.php<?$conexion = odbc_connect("base","","","");$rs= odbc_exec($conexion,"select * from usuarios");$sql=" delete from usuarios where idusuario=1";$rs=odbc_exec($conexion,$sql);odbc_close_all();?>Como puedes ver no me extendi mucho en el tema, pero ya conoces mucho de PHP,tu puede crear ya las aplicaciones y con esto que puse para conecatarse y manejo deregistros es suficiente para que ya desarrolles tu, pero por si te falta mas información tepongo la sintaxis de las funciones que tiene PHP para ODBC:• (int) odbc_autocommit($connection_id, $OnOff)• (void) odbc_close($connection_id)• (void) odbc_close_all(void)• (int) odbc_commit($connection_id)• (int) odbc_connect($dsn, $user, $password)• (int) odbc_pconnect($dsn, $user, $password)• (string) odbc_cursor($result_id)• (int) odbc_do($connection_id, $query_string)• (int) odbc_exec($connection_id, $query_string)• (int) odbc_prepare($connection_id, $query_string)• (int) odbc_execute($result_id, $array)• (int) odbc_fetch_row($result_id, $row_number)• (int) odbc_fetch_into($result_id, $row_number, $array_ptr)• (int) odbc_field_len($result_id, $field_number)• (string) odbc_field_name($result_id, $field_number)• (string) odbc_field_type($result_id, $field)• (int) odbc_free_result($result_id)• (int) odbc_num_fields($result_id)• (int) odbc_num_rows($result_id)• (string) odbc_result($result_id, $field)• (int) odbc_result_all($result_id, $format)• (int) odbc_rollback($connection_id)Ahora que ya manejamos archivos y bases de datos, vamos a ver un poco más dePHP, algo más avanzado, como las sesiones e incluso algunas funciones con protocolos deInternet.
  • 67. Taller de PHP pecesama66Capitulo IVFunciones de red
  • 68. Taller de PHP pecesama67CookiesLa principal utilidad de las cookies (galletas) es la de solventar el problema de lafalta de estado en la navegación a través de las paginas web.Con las cookies, pequeñas porciones de información se quedan registradas en elnavegador permitiendo identificar a este a través de diferentes páginas de un mismo sitio eincluso durante visitas entre distintos días.Realmente las cookies no son mas que cadenas de texto que son enviadas desde elservidor al cliente (navegador) y almacenadas en este, luego el navegador envía estascookies al servidor permitiendo así la identificación del cliente en el servidor.FuncionamientoLa cookie es enviada al navegador desde el servidor y si este la acepta permanece enél.Las páginas piden la cookie al navegador...El navegador las envía, permitiendo la identificación del usuario por parte delservidor.A continuación vamos a ver como usar las cookies para nuestro beneficio.
  • 69. Taller de PHP pecesama68Cómo usar las cookiesEl manejo de cookies en PHP se realiza mediante el uso de la función setcookie, estafunción esta disponible a partir de la versión 3 de PHP.int setcookie (string Nombre [, string Valor [, int Expire [, stringPath [, string Dominio [, int Secure]]]]])Setcookie() define una cookie que es enviada junto con el resto de la información de lacabecera(header). Las cookies deben ser enviadas antes de cualquier etiqueta (tag) de html,por lo tanto deberemos realizar la llamada a estas funciones antes de cualquier etiqueta<HTML> o <HEAD>. Esta es una restricción de las cookies no de PHP.Todos los argumentos excepto el nombre son opcionales.• Nombre. Nombre de la cookie. Si creamos una cookie solamente con el nombre, enel cliente se eliminará la cookie que exista con ese nombre. También podemosreemplazar cualquier argumento con una cadena vacía ("").• Value. Valor que almacenará la cookie en el cliente.• Expire. El argumento expire es un argumento entero que indica la hora en que seeliminara la cookie. Normalmente se usa time() + N. segundos de duración, paraespecificar la duración de una cookie.• Path. Subdirectorio en donde tiene valor la cookie.• Dominio. Dominio en donde tiene valor la cookie. Si ponemos como dominiowww.domain.com la cookie no se transmite para domain.com, mientras que siponemos domain.com la cookie se transmite tanto para domain.com como parawww.domain.com• Secure. El argumento secure indica que la cookie solo se transmitirá a través de unaconexión segura HTTPS.setcookie("usuario", "Pedro", time()+3600,"/","www.pecesama.net");En este ejemplo establecemos una cookie de nombre usuario que contiene el valorPedro, que dura 1 hora (3600 segundos) válida para todo el dominio www.pecesama.net.Ejemplo de uso de cookiesEn este ejemplo vamos a ver como establecer una cookie y cómo se recupera su valor.Se establece la cookie ejemusuario, cuya duración es una hora (cookies.php).cookies.php<?phpsetcookie("ejemusuario", “Pedro”, time()+3600,"/","");
  • 70. Taller de PHP pecesama69?><html><head><title>Ejemplo de PHP</title></head><body><H1>Ejemplo de uso de cookie</H1>Se ha establecido una cookie de nombre <b>ejemusuario</b> con elvalor: <b><? print $ejemusuario; ?></b> que será válida durante 1hora.</body></html>Sesiones¿Qué son las sesiones?, básicamente una sesión es la secuencia de páginas que unusuario visita en un sitio web. Desde que entra en nuestro sitio, hasta que lo abandona.El término sesión en PHP, session en inglés, se aplica a esta secuencia de navegación,para ello crearemos un identificador único que asignamos a cada una de estas sesiones denavegación. A este identificador de sesión se le denomina, comúnmente, como la sesión.El proceso en cualquier lenguaje de programación podría ser algo así:¿Existe una sesión?, si existe lo retomamos, si no existe la creamos y le damos unidentificador único.Y para que no perdamos el hilo de la navegación del usuario deberemos asociar estasesión a todas las direcciones (URLs) y acciones de formularios. Podemos también crearuna cookie que incluya el identificador de sesión, pero es conveniente recordar que ladisponibilidad o no de las cookies depende del usuario, y no es conveniente fiarse de lo queun usuario pueda o no tener habilitado.Lo contado hasta ahora es teoría pura y es aplicable a cualquier lenguaje deprogramación C, Perl, etc. Los que programamos en PHP4 tenemos la suerte de que toda lagestión de sesiones la hace el mismo PHP.Por lo tanto lo comentado aquí sobre sesiones es solo aplicable a PHP4.Inicialización de la sesiónPara utilizar sesiones en PHP lo primero es inicializarlas. Podemos hacerloexplícitamente, mediante la función session_start(), o al registrar una variable en una sesiónmediante session_register(miVariable). En ambos casos se crea una nueva sesión, si noexiste, o se retoma la sesión actual. Veamos un sencillo ejemplo:<?phpsession_start();echo "Se inició la sesión";
  • 71. Taller de PHP pecesama70?>Esta es la forma más básica, si el usuario tiene las cookies activadas, PHP habráinsertado de forma automática la sesión y ésta será pasada de una página a otra sin hacernada más. Desde un punto de vista práctico la sesión es operativa, pero no vemos nada.Podemos obtener la sesión en cualquier momento mediante la función session_id().<?phpsession_start();echo La sesión actual es: .session_id();?>En este caso session_start() comprueba en las cookies que existe una sesión y continuacon ella, session_id() devuelve el identificador actual.Veamos otro ejemplo que, tal vez, te lo aclare un poco más:<?phpsession_register(contador);echo <a href=".$PHP_SELF.?.$SID.">Contador vale:.++$contador.</a>;?>Como dije anteriormente la sesión se crea si no existe o se recoge mediantesession_start(), o también cuando se registra una variable de sesión mediantesession_register().Si no has utilizado nunca las sesiones, el concepto de variable de sesión, puede resultarun poco extraño. Básicamente es una variable, como cualquiera de las que gestiona PHP4,pero que reside en un espacio específico en el servidor, junto con el identificador de sesión,y que pertenece únicamente a un usuario.En nuestro ejemplo anterior, registramos la variable $contador en la primera línea delscript. En la segunda línea, entre otras cosas, cada vez que recarguemos la página ohagamos click sobre el enlace, el valor de $contador se incrementará en 1.En esta línea hacemos uso de la variable reservada $PHP_SELF, que hace referenciaal propio script en ejecución y una constante propia de PHP4, $SID, que contiene elnombre de la sesión y el identificador de la misma.Podemos averiguar también el nombre de la sesión, o modificarlo, mediante la funciónsession_name(). Veamos una prueba práctica (sesion.php):sesion.php<?phpsession_name(misesion);session_register(contador);
  • 72. Taller de PHP pecesama71echo <a href=".$PHP_SELF.?.SID.">Contador vale:.++$contador.</a><br>;echo Ahora el nombre es .session_name(). y la sesión.$misesion.<br>;?>La asignación del nombre de sesión debe realizarse antes que ninguna otra función consesiones, antes que session_start() o session_register().Error comúnUno de los errores más comunes cuando se utilizan sesiones es dejar líneas en blancoantes de la inicialización de PHP o enviar alguna salida a la pantalla. Para probarlo crea unalínea en blanco o con cualquier cosa antes de <?php.Si tienes las cookies activadas, te encontrarás un error de este tipo:Warning: Cannot send session cookie - headers already sent by (outputstarted at /taller/sesiones.php:2) in / taller/sesiones.php on line 4PHP está informando de que no puede activar las cookies en el navegador del usuario,porque las cabeceras ya han sido enviadas. Simplemente por la existencia de una línea enblanco. Como medida práctica, no dejes espacios ni antes del inicio del script, ni después dela finalización.Si después de todo lo comentado aún no entiendes para que sirven las sesiones,veamos un ejemplo práctico. Imagina que quisieras crear un sistema de carrito de comprasCarrito de compraSi después de todo lo comentado aún no entiendes para que sirven las sesiones,veamos un ejemplo práctico. Imagina que quisieras crear un sistema de carrito de compras,en su forma básica podría ser algo así (carrito.php):carrito.php<?phpsession_start();session_register(itemsEnCesta);if ($item){if (!isset($itemsEnCesta)){$itemsEnCesta[$item]=$cantidad;}else{foreach($itemsEnCesta as $k => $v){if ($item==$k){$itemsEnCesta[$k]+=$cantidad;$encontrado=1;}}if (!$encontrado) $itemsEnCesta[$item]=$cantidad;
  • 73. Taller de PHP pecesama72}}?><html><body><tt><form action="<?=$PHP_SELF."?".SID?>" method="post">Dime el producto <input type="text" name="item" size="20"><br>Cuantas unidades <input type="text" name="cantidad" size="20"><br><input type="submit" value="Añadir a la cesta"><br></form><?if (isset($itemsEnCesta)){echoEl contenido de la cesta de la compra es:<br>;foreach($itemsEnCesta as $k => $v){echo Artículo: .$k. ud: .$v.<br>;}}?></tt></body></html>Una breve explicación. En la línea 4 comprobamos si el usuario ha pasado algúnartículo, desde el formulario. En la 5 si el array itemsEnCesta no existe, lo creamos con elnuevo producto y la cantidad indicada. Si el array existe recorremos su contenido, entre laslíneas 8 y 13, y si encontramos un artículo igual, añadimos la cantidad en la línea 10. Si nolo encontramos, es un nuevo artículo, por lo tanto, añadimos el nuevo producto con lacorrespondiente cantidad a itemsEnCesta en la línea 14.Y a continuación imprimimos el formulario y los resultados, si los hubiera, a partir dela línea 18, donde empieza el HTML.¿Te imaginas las posibilidades de un sistema de almacenamiento de información deestas características?. No necesitas archivos, ni bases de datos, ni tienes que andar pasandovalores de una página a otra. PHP va gestionando estos datos por nosotros, hasta elmomento en que decidamos almacenar la información donde más nos interese.Envió de e-mailsPHP nos ofrece la posibilidad de enviar emails de una manera sencilla y fácil, para elloel lenguaje nos proporciona la instrucción mail( )<?phpmail(destinatario, tema, texto del mensaje);?>En el parámetro destinatario pondremos la dirección de email a donde se enviará elmensaje, en el parámetro tema el tema o subject del mensaje y el parámetro texto delmensaje el cuerpo del mensaje en formato texto plano.
  • 74. Taller de PHP pecesama73Existe una sintaxis extendida de la instrucción mail( ) que nos permite añadirinformación adicional a la cabecera del mensaje.<?phpmail(destinatario, tema, texto del mensaje, información adicional decabecera);?>En la información de cabecera podremos incluir parámetros adicionales al mensajecomo Reply-To:, From:, Content-type:... que nos permiten tener un mayor control sobre elmensaje.Ahora veamos un pequeño ejemplo de cómo enviar un correo electrónico con PHP(email.htm y email.php).email.htm<html><head><title>Ejemplo de PHP</title></head><body><H1>Ejemplo de envió de email</H1>Introduzca su direccion de email:<FORM ACTION="email.php" METHOD="GET"><INPUT TYPE="text" NAME="direccion"><BR><BR>Formato: <BR><INPUT TYPE="radio" NAME="tipo" VALUE="plano" CHECKED> Textoplano<BR><INPUT TYPE="radio" NAME="tipo" VALUE="html"> HTML<BR><BR><INPUT TYPE="submit" VALUE="Enviar"></FORM></body></html>email.php<html><head><title>Ejemplo de PHP</title></head><body><H1>Ejemplo de envió de email</H1><?if ($direccion!=""){if ($tipo=="plano"){// Envio en formato texto planomail($direccion,"Ejemplo de envió deemail","Ejemplo de envió de email de textoplanonnnhttp://www.pecesama.net","FROM: Pedro<pecesama@pecesama.net>n");} else {// Envió en formato HTML
  • 75. Taller de PHP pecesama74mail($direccion,"Ejemplo de envió deemail","<html><head><title>PecesamaSoft. Taller dePHP</title></head><body>Ejemplo de envió de emailde HTML<br><br>nhttp://www.pecesama.net</body></html>","Content-type: text/htmln", "FROM: Pedro<pecesama@pecesama.net>n");}echo "Se ha enviado un email a la direccion:",$direccion," en formato <b>",$tipo,"</b>.";}?><br></FORM></body></html>Envió de e-mails con attachmentsSi lo que queremos es enviar un correo electrónico con un archivo adjunto(attachment) entonces podemos usar cualquiera de estos dos códigos, uno lo encontré en ellibro PHP Professional de la Editorial Wrox y el otro me lo pasó un colega en el desarrollode PHP.emailArchivo.php<?include "mime_mail.inc";$filename = "color.gif";$content_type = "image/gif";# read a JPEG picture from the disk$fd = fopen($filename, "r");$data = fread($fd, filesize($filename));fclose($fd);# create object instance$mail = new mime_mail;# set all data slots$mail->from = "lizo@address.com";$mail->to = "abc@mime_mail.com";$mail->subject = "welcome!";$mail->body = "Here goes the realtext of the e-mail. You can write overmultiple lines, of course.";# append the attachment$mail->add_attachment($data, $filename, $content_type);# send e-mail$mail->send();?>// store as "mime_mail.inc"class mime_mail{var $parts;var $to;var $from;
  • 76. Taller de PHP pecesama75var $headers;var $subject;var $body;/** void mime_mail()* class constructor*/function mime_mail() {$this->parts = array();$this->to = "";$this->from = "";$this->subject = "";$this->body = "";$this->headers = "";}/** void add_attachment(string message, [string name], [stringctype])* Add an attachment to the mail object*/function add_attachment($message, $name = "", $ctype ="application/octet-stream") {$this->parts[] = array ("ctype" => $ctype,"message" => $message,"encode" => $encode,"name" => $name);}/** void build_message(array part=* Build message parts of an multipart mail*/function build_message($part) {$message = $part[ "message"];$message = chunk_split(base64_encode($message));$encoding = "base64";return "Content-Type: ".$part[ "ctype"].($part[ "name"]? "; name = "".$part[ "name"].""" : "")."nContent-Transfer-Encoding: $encodingnn$messagen";}/** void build_multipart()* Build a multipart mail*/function build_multipart() {$boundary = "b".md5(uniqid(time()));$multipart ="Content-Type: multipart/mixed; boundary =$boundarynnThis is a MIME encodedmessage.nn--$boundary";for($i = sizeof($this->parts)-1; $i >= 0; $i--)
  • 77. Taller de PHP pecesama76{$multipart .= "n".$this->build_message($this->parts[$i])."--$boundary";}return $multipart.= "--n";}/** string get_mail()* returns the constructed mail*/function get_mail($complete = true) {$mime = "";if (!empty($this->from))$mime .= "From: ".$this->from. "n";if (!empty($this->headers))$mime .= $this->headers. "n";if ($complete) {if (!empty($this->to)) {$mime .= "To: $this->ton";}if (!empty($this->subject)) {$mime .= "Subject: $this->subjectn";}}if (!empty($this->body))$this->add_attachment($this->body, "","text/html");$mime .= "MIME-Version: 1.0n".$this->build_multipart();return $mime;}/** void send()* Send the mail (last class-function to be called)*/function send() {$mime = $this->get_mail(false);mail($this->to, $this->subject, "", $mime);}}; // end of classemailArchivo2.php<?php/* notes from Dan Potter:Sure. I changed a few other things in here too though.One is that I letyou specify what the destination filename is (i.e.,what is shows up as inthe attachment). This is useful since in a websubmission you often cant
  • 78. Taller de PHP pecesama77tell what the filename was supposed to be from thesubmission itself. Ialso added my own version of chunk_split because ourproduction version ofPHP doesnt have it. You can change that back orwhatever though =).Finally, I added an extra "n" before the message textgets added into theMIME output because otherwise the message text wasntshowing up.*//*note: someone mentioned a command-line utility calledmutt thatcan mail attachments.*//*If chunk_split works on your system, change the callto my_chunk_splitto chunk_split*//* Note: if you dont have base64_encode on your sytemit will not work *//* simple class that encapsulates mail() with additionof mime file attachment.*/class CMailFile {var $subject;var $addr_to;var $text_body;var $text_encoded;var $mime_headers;var $mime_boundary ="--==================_846811060==_";var $smtp_headers;functionCMailFile($subject,$to,$from,$msg,$filename,$mimetype= "application/octet-stream", $mime_filename = false){$this->subject = $subject;$this->addr_to = $to;$this->smtp_headers =$this->write_smtpheaders($from);$this->text_body = $this->write_body($msg);$this->text_encoded =$this->attach_file($filename,$mimetype,$mime_filename);$this->mime_headers =$this->write_mimeheaders($filename, $mime_filename);}functionattach_file($filename,$mimetype,$mime_filename) {$encoded = $this->encode_file($filename);if ($mime_filename) $filename = $mime_filename;$out = "--" . $this->mime_boundary . "n";
  • 79. Taller de PHP pecesama78$out = $out . "Content-type: " . $mimetype . ";name="$filename";n";$out = $out . "Content-Transfer-Encoding: base64n";$out = $out . "Content-disposition: attachment;filename="$filename"nn";$out = $out . $encoded . "n";$out = $out . "--" . $this->mime_boundary . "--" ."n";return $out;// added -- to notify email client attachment is done}function encode_file($sourcefile) {if (is_readable($sourcefile)) {$fd = fopen($sourcefile, "r");$contents = fread($fd, filesize($sourcefile));$encoded =my_chunk_split(base64_encode($contents));fclose($fd);}return $encoded;}function sendfile() {$headers = $this->smtp_headers .$this->mime_headers;$message = $this->text_body . $this->text_encoded;mail($this->addr_to,$this->subject,$message,$headers);}function write_body($msgtext) {$out = "--" . $this->mime_boundary . "n";$out = $out . "Content-Type: text/plain;charset="us-ascii"nn";$out = $out . $msgtext . "n";return $out;}function write_mimeheaders($filename, $mime_filename){if ($mime_filename) $filename = $mime_filename;$out = "MIME-version: 1.0n";$out = $out . "Content-type: multipart/mixed; ";$out = $out . "boundary="$this->mime_boundary"n";$out = $out . "Content-transfer-encoding: 7BITn";$out = $out . "X-attachments: $filename;nn";return $out;}function write_smtpheaders($addr_from) {$out = "From: $addr_fromn";$out = $out . "Reply-To: $addr_fromn";$out = $out . "X-Mailer: PHP3n";$out = $out . "X-Sender: $addr_fromn";return $out;}
  • 80. Taller de PHP pecesama79/* Splits a string by RFC2045 semantics (76 chars perline, end with rn).This is not in all PHP versions so I define onehere manuall.*/function my_chunk_split($str){$stmp = $str;$len = strlen($stmp);$out = "";while ($len > 0) {if ($len >= 76) {$out = $out . substr($stmp, 0, 76) . "rn";$stmp = substr($stmp, 76);$len = $len - 76;}else {$out = $out . $stmp . "rn";$stmp = ""; $len = 0;}}return $out;}// end script// usage - mimetype example "image/gif"?>Y para usarlo hay que usar las siguientes líneas:<?$enviaarch= newCMailFile($subject,$sendto,$from,$message,$filename,$mimetype);$enviaarch->sendfile();//Gracias a Heriberto Rosas por hacerme llegar este script?>Espero que este pequeño manual te haya servido para aprender los conceptosbásicos de PHP, y te siga sirviendo como apoyo siempre que te trabes con algo.Agradezco el apoyo brindado en el taller de mis compañeros Ruth Castillo y ChavaMoreno ya que fueron un apoyo invaluable, así como al ingeniero Pedro Peña por todo elmaterial prestado para la elaboración de este manual.Le dedico este manual a Abi y a mi madre Lety las dos mujeres más importantes enmi vidaGracias… hasta la próxima ☺31/12/2001@04:30pm Pecesama©