Tutorial de PHP y MySQL COMPLETO José Antonio Rodríguez 2000.



Documentos relacionados
Instalación y Configuración de la interfaz de TPV.

Telealta de Abonados. Guía de Telealta en CST BIOINGENIERÍA ARAGONESA S.L. Índice. Vivienda del Abonado. Central de CST

MySQL. o o. o o o o o o o. o o o o. o o o o. EQUIPO 8 Tutorial de PHP y MySQL. 1. Instalación de Apache+PHP+MySQL

EL ESCRITORIO DE WINDOWS Y LA BARRA DE TAREAS

Inicio. En este sitio encontrarás las indicaciones para aprender a crear una wiki en Google Sites.

PHP MIS PRIMERO PASOS MI PRIMER SCRIPT

Guía de integración del módulo de Redsys en WooCommerce

AVANCE SOLUCIONES INFORMÁTICAS. Preguntas Frecuentes SGTaller. Cómo respaldo la información del programa?

Cómo configurar el aula en Moodle?

Sesiones 2-3: Transformación de datos

Perceptrón Adaline. ( Desarrollado en el entorno Eclipse en el lenguaje JAVA ) Jose Alberto Benítez Andrades A

Microsoft Excel. Excel tiene una gran variedad de cosas que si eres persona de negocios, te va a servir mucho.

Eurowin 8.0 SQL. Manual de EW-LOG. Revisión de incidencias

Manual de usuario para la Publicación de Becas a través de la página web institucional

Notificaciones Telemáticas Portal del Ciudadano MANUAL DE USUARIO. Versión 1.2

Manual para instalación de Teléfono Virtual: X Lite.

SERVIDOR VIRTUAL IPLAN

El agente de software de Dr.Web SaaS

BUEN USO DEL CORREO ELECTRÓNICO

Guía de integración del módulo de Redsys en Magento

Wimba Pronto. Guía de instalación de laboratorio informático

Administración Local Soluciones

MEFFLiveUpdate Configuración MANUAL DE USUARIO

API PASARELA SMS HTTP

Guía SERVICIOS WEB PARA BIBLIOTECAS EN DICCIONARIO. (19 julio 2012)

Guía del Firewall Router ECI B-FOCuS. - Apertura de puertos - DMZ

ecompetició Inscripciones Para acceder: > Serveis Fecapa > Intranet ecompetició

CASO 9187 Se corrige falla que borra el SLA de los casos relacionados entre sí luego de que se ejecute una regla que modifique casos relacionados.

GUÍA RÁPIDA DE USO. Requisitos tecnológicos para el correcto funcionamiento de Bot PLUS 2.0.

SISTEMAS OPERATIVOS. Pág. 1

Para instalar Hoteldruid, utilizaremos easyphp, cuya instalación ya se ha descrita en el vídeo de instalación de FacturaScripts

PRÁCTICA 5: REDES LOCALES

Phontage. En este documento se explica cómo utilizar la herramienta Phontage desde un PC y aplicaciones de backup y grabación de conversaciones.

C.I.T. - Customer Interface Technology EXPRESS SHIPPER INSTALACIÓN

65 HORAS. documentos. describe el. información. de la suite. Pág.1

Realizar copias de seguridad de archivos

Importación de facturas desde Excel

PISIS Cliente Neo. Guía de Instalación y Uso Versión del documento: 1.8 Fecha: Octubre 10 de 2014

INDICE. Servicios Informáticos. Guía básica del usuario de Symantec Endpoint Protection Windows Página 1 de 11

Registro de Autorización Empresa Venta y Asistencia Técnica de Comunidades Autónomas

Sistemas de numeración

Correo en tu Tigo, por SMS

Preguntas Frecuentes de ebanking

MANUAL DE USUARIO DEL VISOR URBANÍSTICO

/07/2008. Descripción: Copias de seguridad y Exportar/Importar datos. Objetivos:

INTRODUCCIÓN A BSCW CFIE VALLADOLID I (Mayo de 2003)

Bases de Datos Relacionales

PHP y MySQL. PHP & MySQL. 1. Instalación de Apache+PHP+MySQL o Instalación en Windows o Instalación en Linux/Unix

CONTENIDO 1. INTRODUCCIÓN. 2. Presentación general del software.

BANCOLOMBIA SUCURSAL VIRTUAL EMPRESAS MANUAL DE USUARIO SERVICIO ALTERNO TRANSACCIONAL

1.- ESCRITORIO GNOME 2.- SISTEMA: PREFERENCIAS 3.- SISTEMA: ADMINISTRACIÓN

Curso PHP Módulo 1 R-Luis

Manual de Usuario APLICACIÓN ENVOICE. Página 1. Manual de Usuario de FACTURACIÓN ELECTRÓNICA Sección Facturas

I. INTRODUCCIÓN... 2 II. REQUERIMIENTOS... 2 III. SECCIÓN USUARIOS Objetivo...4. Acceso...4. Consulta de estado de pedimento...

Direccionamiento IP. Realice una tabla como la que se muestra y agregue s. Tome como ejemplo el número

GUIA REGISTRO USUARIOS PARA CONSULTA REPORTES PAGINA WEB APPUCE

VERIFICACIÓN DE REGISTROS DNS

MANUAL CONFIGURACIÓN XMEYE DISPOSITIVOS MOVILES ANDROID

Bases de Datos Relacionales

Curso de Access 2007

Manual breve para la incorporación de sesiones de videoconferencia dentro de cursos de Moodle.

DNS. Regularmente, todos los equipos que están en Internet o una Intranet tienen una dirección IP única que las identifica,

TUTORIAL SOBRE CARGA DE REGISTROS EN KOHA KOBLI. (Importación de registros en MARC 21)

Manual General de Usuario del Proceso. P35 Recibos Digitales. 1.1 Objetivos 1.2 ROLES 1.3 Flujo 2 Inicio del proceso - Carga de archivos de nómina

Instalación del service manager (mysql enterprise monitor)

Tutorial de PHP y MySQL

ARANDA SERVICE DESK WINDOWS VERSIÓN DE ACTUALIZACIÓN QUE SE LIBERA: LISTADO DE ARCHIVOS Tamaño (En Bytes)

TUTORIAL DE PHP. M. en C. Erika Vilches. Parte 2.

Guía de Instalación. char utile online

1.1. Qué entiende por el concepto de generalización de una red neuronal artificial?

MySQL y Sesiones en PHP. Área de Ingeniería Telemática

Tutorial de PHP y MySQL COMPLETO José Antonio Rodríguez 2000.

Instalación de Apache+PHP+MySQL en Windows

Manual General de Usuario del Proceso. P36 Recuperación de CFDI de Recibos Timbrados de. Nóminas Extraordinarias

Paessler - Webserver Stress Tool Características

Tutorial de PHP y MySQL

Manual de Usuario- Vendedores. Uso del Portal

HOTEL RURAL. Taller de modelado de objetos. Ingeniería del Software Curso Salamanca, 16-XI Trabajo realizado por:

MANUAL DE USUARIO MODELO WEB DESPACHO IDEAL - MODO SIMULACIÓN

Trabajo Práctico N 3: Lenguaje JAVA

Procedimiento P7-SIS Revisión

GUÍA DE CONFIGURACIÓN DE CORREO etb.net.co EN DISPOSITIVOS MÓVILES

Transcripción:

Tutrial de PHP y MySQL (LuCAS) Página 1 de 54 Tutrial de PHP y MySQL COMPLETO Jsé Antni Rdríguez 2000. http://es.tldp.rg/manuales-lucas/manual_php/manual_php/ 1. Instalación de Apache+PHP+MySQL 2. Sintaxis en PHP Instalación en Windws Instalación en Linux/Unix Mi primer script Variables y Operadres Seriables y Operadres Sentencias de Cntrl Las Tablas Las Funcines Include() y require() Tiemp y fecha Las Clases en PHP 5. Cmenzand cn MySQL MySQL Funcines PHP de acces a MySQL Cnectar a MySQL desde PHP Creación de una Base de Dats en MySQL Imprtar bases de dats desde MS Access Mstrar ls dats de una cnsulta Un buscadr para nuestra base de dats 6. Operacines cn registrs Añadir registrs Mdificar registrs Brrar registrs Td a la vez 3. Frmularis Ls Frmularis Descarga de archivs desde un frmulari 4. Fichers Funcines de acces a fichers 7. Cnexión a MySQL cn ODBC Instalación de MyDOBC Cnexión remta a MySQL cn MS Access Exprtar tablas desde MS Access a MySQL Imprtar tablas desde MySQL a MS Access Instalación de Apache+PHP+MySQL en Windws En este capítul describirems el prces de instalción de la base de dats MySQL, de un servidr web Apache cn PHP, en una máquina cn sistema perativ Windws. L primer que debems hacer es cnseguirns ls prgramas necesaris, y que mejr para ell que diriguirns a las páginas web ( cualquiera de sus mirrs) de ls prgramas en cuestión: cualquiera de sus mirrs) de ls prgramas en cuestión: Apache: www.apache.rg apache_1_3_x_win32.exe MySQL: www.mysql.cm mysql-shareware-3.22.34-win.zip PHP: www.php.net php-3.0.x-win32.zip NOTA: La versión para sistemas Windws de MySQL n es gratuita. Pr l que usarems la versión shareware que está limitada a 30 días. La instalación de ests prgramas es muy fácil, PHP y MySQL vienen cmprimids en frmat ZIP y sól ls tenems que descmprimir en una carpeta, mientras que Apache es autejecutable: Descmprimims PHP en "C:\php3"

Tutrial de PHP y MySQL (LuCAS) Página 2 de 54 Descmprimims MySQL en "C:\mysql" Hacems "dble click" en el ficher de Apache y aceptams el directri de instalación pr defect "C:\Archivs de Prgramas\Apache Grup\Apache". Ya tenems instalads ls prgramas, ahra sól ns queda hacer uns pequeñs ajuste de cnfiguración: APACHE de cnfiguración: APACHE Editams el ficher de cnfiguración http.cnf que se halla en C:\Archivs de Prgramas\Apache Grup\Apache\cnf\" Buscams la línea dnde pne: #ServerName new.hst.name Quitams el cmentari (#) y la cambiams pr: ServerName http://lcalhst Indicams el directri de PHP: ScriptAlias /php3 "C:\php3" Definims la extención de ls script PHP: AddType applicatin/x-httpd-php3.php3 AddType applicatin/x-httpd-php3.php AddType applicatin/x-httpd-php3.phtml Y asignams la aplicación para las extensines PHP: Actin applicatin/x-httpd-php3 "/php3/php.exe" Pr defect ls fichers que sn accesibles desde el navegadr se encuentran el la carpeta htdcs del directri de Apache, per la pdems cambiar: DcumentRt "C:\www" <Directry "C:\www">... </Directry> PHP Para cnfigurar PHP, primer buscams el ficher php3.ini-distphp3.ini-dist y l renmbrams a php.ini, después l editams y le hacems ls siguientes cambis: Buscams la expresión "extensin_dir" y la cambiams pr: extensin_dir = C:\php3 Para añadir el sprte para MySQL busca la línea: ; extensin = php3_mysql.dll Cámbiala pr: extensin = php3_mysql.dll

Tutrial de PHP y MySQL (LuCAS) Página 3 de 54 Cpia el ficher php3.ini en "C:\windws\" Ejecución de ls prgramas: Pues bien, ya sl ns queda arrancar ls prgramas: C:\Archivs de Prgrmas\Apache Grup\Apache\apache.exe C:\mysql\bin\mysqld.exe #Para la versión shareware C:\mysql\bin\mysqld-shareware.exe También pdems arrancar el servidr Apache desde el menú de inici: Inici->Prgrmas->Apache Web Server->Start Para cmprbar nuestra instalación crea un ficher llamad test.php3 cn la siguiente linea: phpinf() Clócal en el directri de dcuments de Apache y llámal desde el navegadents de Apache y llámal desde el navegadr. Si l hems hech td bien ns saldrá una página cn tdas las variables de PHP. NOTA: Cabe destacar que l que hems ech es una instalación básica, pr l que recmendams leer ls manuales de las distintas aplicacines para btener más detalles sbre la instalación de éstas. Instalación de Apache+PHP+MySQL en Linux/Unix En este capítul describirems el prces de instalción de la base de dats MySQL, de un servidr web Apache cn PHP, en una máquina cn sistema perativ Linux Unix. L primer que debems hacer es cnseguirns ls paquetes necesaris, y que mejr para ell que diriguirns a las páginas web ( cualquiera de sus mejr para ell que diriguirns a las páginas web ( cualquiera de sus mirrs) de ls prgramas en cuestión: Apache: www.apache.rg apache-1.3.x.tar.gz MySQL: www.mysql.cm mysql-3_22_22_tar.gz PHP: www.php.net php-3.0.x.tar-gz Para pder realizar td el prces de instalación has de tener acces cm rt a la máquin Linux. L primer que debems hacer un directri de instalación, aunque l nrmal sería que l hicierams en /usr/lcal, /urs/src, bien en /pt. Cm hay que escger un, y vy ha escger el primer, /usr/lcal, aunque el prces sería el mism si ns declinárams pr cualquier tr. Supngams que ya ns hems cnseguid ls paquetes y ls tenems en el directri /rt/install, l primier que hacems es descmprimirls: cd /usr/lcal tar zxvf /rt/install/apache-1.3.x.tar.gz tar zxvf /rt/instal/mysql-3.22.x.tar.gz tt/instal/mysql-3.22.x.tar.gz tar zxvf /rt/instal/php-3.0.x.tar-gz

Tutrial de PHP y MySQL (LuCAS) Página 4 de 54 Creams enlaces sencills (blands) a códig fuente ln -s /usr/lcal/apache-1.3.x /usr/lcal/apache ln -s /usr/lcal/mysql-3.22.x /usr/lcal/mysql ln -s /usr/lcal/php-3.0.x /usr/lcal/php Preparams la fuentes par al cmpilación de Apache cd /usr/lca/apache./cnfigure --prefix=/usr/lcal/apache Cmpilams e instalams MySQL cd /usr/lcal/mysql./cnfigure --witut-debug --prefix=/usr/lcal/mysql make make install cp /usr/lcal/supprt-files/mysql.server /etc/rc.d/init.d/mysql chmd 755 /etc/rc.d/init.d/mysql Creams la bases del dats del sistema MySQL /usr/lcal/mysql/bin/mysql_install_db Arrancams el servidr MySQL /etc/rc.d/init.d/mysql start/etc/rc.d/init.d/mysql start Asignams la passwrd del adminstradr (rt ) de MySQL /usr/lcal/mysql/bin/mysqladmin -u rt passwrd "clave" Ya hems terminad cn MySQL, ahra cmpilarems PHP cm módul de Apache. cd /usr/lcal/php./cnfigure --with-mysql=/usr/lcal/mysql \ --with-apache=/usr/lcal/apache \ --enable-track-vars make make install #cp php3.ini-dist /usr/lcal/lib/php3.ini Cmpilams Apache cd /usr/lcal/apache./cnfigure --prefix=/usr/lcal/apache \ --activate-mdule=src/mdules/php3/libphp3.a # si hems cmpilad PHP4 utilizarems #--activate-mdule=src/mdules/php4/libphp4.a # quitar ls cmentaris para habilitar el módul de prxy #--activate-mdule=src/mdules/prxy/libprxy.a< prxy mdules> make make install Para definir las extencines de ls scripts PHP, hay que añadir las siguientes lineas en el ficher de cnfiguración de apache (httpd.cnf): AddType applicatin/x-httpd-php3.php3 AddType applicatin/x-httpd-php3.php AddType applicatin/x-httpd-php3.phtml Ahra ya sól ns queda arrancar el servidr, per primer cpiams el script de arranque en /etc/rc.d/init.d

Tutrial de PHP y MySQL (LuCAS) Página 5 de 54 cp /usr/lcal/apache/bin/apachecte /etc/rc.d/init.d/apache /etc/rc.d/init.d/apache start Para cmprbar nuestra instalación crea un ficher llamad test.php3 cn la siguiente linea: phpinf() Clócal en el directri de dcuments de Apache y llámal desde el navegadr. Si l hems hech td bien ns saldrá una página cn tdas las variables de PHP. NOTA: Cabe destacar que l que hems ech es una instalación básica, pr l que recmendams leer ls manuales de las distintas aplicacines para btener más detalles sbre la instalación de éstas. Mi primer script Una vez que ya tenems instalads PHP y MySQL, y el servidr Apache cnfigurad para usarls, pdems cmenzar a escribir nuestr primer script en PHP. Ejempl script php <html> <bdy> $myvar = "Hla. Este es mi primer script en PHP \n"; //Est es un cmentari es mi primer script en PHP \n"; //Est es un cmentari ech $myvar; </bdy> </html> Una vez escrit est l salvams en un ficher cn la extensión php3 (la nueva versión de PHP, la 4, utiliza la extensión php), y l clcams en nuestr servidr, http://mi_servidr/php/test.php3. Ahra si pnems esta URL en nuestr navegadr verems una línea cn el text "Hla. Este es mi primer script en PHP". L primer que apreciams en el script sn sus delimitadres. En la primera línea del script vems que ns indica que cmienza un script en PHP, y en la última clcams para indicar el final del script. Hay que destacar que tdas las líneas que se encuentre entre ests delimitadres deben acabar en punt y cma, except las sentencias de cntrl (if, swicht, while, etc.). Cm en tda prgramación, es imprtante pner muchs cmentaris, para l cual si querems cmentar una sla línea tenems que pner al principi de la línea //, si l que querems es cmentar varias utilizarems ls delimitadres /* - */. Para que el servidr envié text utilizarems la instrucción ech, aunque también pdems utilizar printf de us similar al del C Perl. Finalmente, vems que la palabra myvar cmienza cn el sign dólar ($). Este símbl le indica a PHP que es una variable. Nstrs le hems asignad un text a esta variable, per también pueden cntener númers tablas (arrays). Es imprtante recrdar que tdas las variables cmienza cn el sign dólar. También habréis bservad que el text que le asignams a la variable termina cn \n, est n se imprime sirve para indicarle al navegadr una nueva línea. Variables y peradres

Tutrial de PHP y MySQL (LuCAS) Página 6 de 54 Ahra antes de seguir, vams a ver un pc de tería, la sintaxis en PHP. Variables: Cm vims antes tdas la variables deben precedidas pr sign dólar ($), y le asignams cntenid cn el sign igual (=). Cn las variables, PHP distingue entre mayúsculas y minúsculas, pr l que bles, PHP distingue entre mayúsculas y minúsculas, pr l que n es l mism $myvar que $Myvar, éstas sn ds variables ttalmente distintas. <html> <bdy> $myvar = "SEVILLA \n"; $Myvar = "MADRID \n"; //Est imprimirá SEVILLA ech $myvar; //Est imprimirá MADRID ECHO $Myvar; </bdy> </html> Cm veis he utilizad ds frmas de escribir ech, en mayúsculas y en minúsculas, para indicars que PHP n las distingue a la hra de usar funcines sentencias del lenguaje. El us de la barra invertida, cm en \n, n es bligatri, per ayuda a la depuración del códig que enviams al navegadr, además del \n existen trs uss: \" Carácter dbles cmillas \\ Carácter barra invertida \n Nueva línea \r Retrn de carr \t Tabuladr hrizntal Cnstantes: Las cnstantes sn similares a las variables, cn la salvedad de que n llevan el sign dólar delante, y sól la pdems asignar una vez. Para definir una cnstantes usarems la función define cm sigue: <html> <bdy> define ("CONSTANTE", "Hla Mund"); printf (CONSTANTE); </bdy> </html> PHP crea diversas cnstantes al arrancar, cm PHP_VERSION que cntiene la versión de PHP, TRUE que le asigna 1 FALSE que le asigna 0. Operadres Aritmétics: $a + $b Suma $a - $b Resta $a * $b Multiplicación

Tutrial de PHP y MySQL (LuCAS) Página 7 de 54 $a / $b &ss=cdigenlinea>$a / $b División $a % $b Rest de la división de $a pr $b $a++ Incrementa en 1 a $a $a-- Resta 1 a $a Operadres de Cadenas: El únic peradr de cadenas que existen es el de cncatenación, el punt. Per n s asustéis, PHP dispne de tda una batería de funcines que s permitirán trabajar cómdamente cn las cadenas. $a = "Hla"; $b = $a. "Mund"; // Ahra $b cntiene "Hla Mund" En este punt hay que hacer una distinción, la interpretación que hace PHP de las simples y dbles cmillas. En el segund cas PHP interpretará el cntenid de la cadena. $a = "Mund"; ech = 'Hla $a'; //Est escribirá "Hla $a" ech = "Hla $a"; //Est escribirá "Hla Mund&q; //Est escribirá "Hla Mund" Operadres de Cmparación: $a < $b $a menr que $b $a > $b $a mayr que $b $a <= $b $a menr igual que $b $a >= $b $a mayr igual que $b $a == $b $a igual que $b $a!= $b $a distint que $b Operadres Lógics: $a AND $b Verdader si ambs sn verdader $a && $b Verdader si ambs sn verdader $a OR $b Verdader si algun de ls ds es verdader $a!! $b Verdader si algun de ls ds es verdader $a XOR $b Verdader si sól un de ls ds es verdader!$a Verdader si $a es fals, y recíprcamente Operadres de Asignación: $a = $b Asigna a $a el cntenid de $b $a += $b Le suma a $b a $a $a -= $b Le resta a $b a $a $a *= $b Multiplica $a pr $b y l asigna a $a $a /= $b Divide $a pr $b y l asigna a $a $a.= $b Añade la cadena $b a la cadena $a Sentencias de cntrl Las sentencias de cntrl permiten ejecutar blque de códigs dependiend de unas cndicines. Para PHP el 0 es equivalente a Fals y cualquier tr númer es Verdader. IF...ELSE La sentencia IF...ELSE permite ejecutar un blque de instruccines si la cndición es Verdadera y tr blque de instruccines si ésta es Falsa. Es imprtante tener en cuenta q instruccines si ésta es Falsa. Es imprtante tener en cuenta que la cndición que evaluems ha de estar encerrada entre paréntesis (est es aplicable a tdas la sentencias de cntrl).

Tutrial de PHP y MySQL (LuCAS) Página 8 de 54 if (cndición) { Este blque se ejecuta si la cndición es VERDADERA else { Este bque se ejecuta si la cndición es FALSA Existe una frma sencilla de usar la sentencia IF cuand n tenems que usar el ELSE y sl tenenems que ejecutar una línea de códig. if ($a > 4) ech "$a es mayr que 4"; IF...ELSEIF...ELSE La sentencia IF...ELSEIF...ELSE permite ejecuta varias cndicines en cascada. Para este cas verems un ejempl, en el que utilizarems ls peradres lógics. if ($nmbre == ""){ ech "Tú n tienes nmbre"; elseif (($nmbre=="eva") OR ($nmbre=="eva")) { ech " ech "Tu nmbre es EVA";< else { ech "Tu nmbre es ". $nmbre; SWITCH...CASE...DEFAULT Una alternativa a IF...ELSEIF...ELSE, es la sentencia SWITCH, la cuál evalúa y cmpara cada expresión de la sentencia CASE cn la expresión que evaluams, si llegams al final de la lista de CASE y encuentra una cndición Verdadera, ejecuta el códig de blque que haya en DEFAULT. Si encntrams una cndición verdadera debems ejecutar un BREAK para que la sentencia SWITCH n siga buscand en la lista de CASE. Veams un ejempl. switch ($dia) { case "Lunes": ech "Hy es Lunes"; break; c case "Martes": ech "Hy es Martes"; break; case "Miercles": ech "Hy es Miercles"; break; case "Jueves": ech "Hy es Jueves"; break; case "Viernes": ech "Hy es Viernes"; break; case "Sábad": ech "Hy es Sábad"; break; case "Dming": ech "Hy es Dming"; break; default: default: ech "Esa cadena n crrespnde a ningún día de la semana";

Tutrial de PHP y MySQL (LuCAS) Página 9 de 54 WHILE La sentencia WHILE ejecuta un blque de códig mientras se cumpla una determinada cndición. $num = 1; while ($num < 5) { ech $num; $num++ Pdems rmper un bucle WHILE utilizand la sentencia BREAK. $num = 1; while ($num < 5) { ech $num; if ($num == 3){ ech "Aquí ns salims \n"; break $num++ DO...WHILE Esta sentencia es similar a WHILE, salv que cn esta sentencia primer ejecutams el blque de códig y después se evalúa la cndición, pr l que el blque de códig se ejecuta siempre al mens una vez. $num = 1; d { ech $num; if ($num == 3){ ech "Aquí ns salims \n"; break $num++ while ($num < 5); FOR El bucle FOR n es estrictamente necesari, cualquier bucle FOR puede ser sustituid fácilmente pr tr WHILE. Sin embarg, el bucle FOR resulta muy útil cuand debems ejecutar un blque de códig a cndición de que una variable se encuentre entre un valr mínim y tr máxim. El bucle FOR también se puede rmper mediante la sentencia BREAK. fr ($num = 1; Snum <=5; $num++){ ech $num; if ($num == 3){ ech "Aquí ns salims \n"; break

Tutrial de PHP y MySQL (LuCAS) Página 10 de 54 Las tablas Las tablas ( array en inglés), sn muy imprtantes en PHP, ya que generalmente, las funcines que devuelven varis valres, cm las funcines ligadas a las bases de dats, l hacen en frma de tabla. En PHP dispnems de ds tips de tablas. El primer sería el clásic, utilizand índices: $ciudad[] = "París"; $ciudad[] = "París"; $ciudad[] = "Rma"; $ciudad[] = "Sevilla"; $ciudad[] = "Lndres"; print ("y viv en ". $ciudad[2]. "<BR>\n"); Esta es una frma de asignar elements a una tabla, per una frma más frmal es utilizand la función array $ciudad = array("parís", "Rma", "Sevilla", "Lndres"); //cntams el númer de elements de la tabla $numelents = cunt($ciudad); //imprimims tds ls elements de la tabla fr ($i=0; $i < $numelents; $i++) { print ("La ciudad $i es $ciudad[$i] <BR>\n"); Sin Sin se especifica, el primer índice es el cer, per pdems utilizar el peradr => para especificar el indice inicial. $ciudad = array(1=>"parís", "Rma", "Sevilla", "Lndres"); Un segund tip, sn las tablas asciativas, en las cuáles a cada element se le asigna un valr (key) para acceder a él. Para entenderl, que mejr que un ejempl, supngams que tenems una tabla en al que cada element almacena el númer de visitas a nuestra web pr cada día de la semana. Utilizand el métd clásic de índices, cada día de la semana se representaría pr un enter, 0 para lunes, 1 para martes, etc. $visitas[0] = 200; $visitas[1] = 186; si usams las tablas asciativas sería $visitas["lunes"] = 200; $visitas["martes"] = 186; bien,

Tutrial de PHP y MySQL (LuCAS) Página 11 de 54 $visitas = array("ludig">$visitas = array("lunes"=>200; "martes"=>186); Ahra bien, recrrer una tabla y mstrar su cntenid es sencill utilizand ls índices, per cóm hacerl en las tablas asciativas?. La manipulación de las tabas asciativas se a hace través de funcines que actúan sbre un punter intern que indica la psición. Pr defect, el punter se situa en el primer element añadid en la tabla, hasta que es mvid pr una función: current - devuelve el valr del element que indica el punter ps - realiza la misma función que current reset - mueve el punter al primer element de la tabla end - mueve el punter al últim element de la tabla next - mueve el punter al element siquiente prev - mueve el punter al element anterir cunt - devuelve el númer de elements de una tabla. Veams un ejempl de las funcines anterires: $semana = array("lunes", "martes", "miércles", "jueves", "viernes", "sábad", "dmind"); ech cunt($semana); //7 //situams el punter en el primer element reset($semana); ech current($semana); //lunes next($semana); ech ps($semana); //martes end($semana) ech ps($semana); //dming prev($semana); ech current($semana); //sábad Recrrer una tabla cn las funcines anterires se hace un pc lis, para ell se recmienda utilizar la función each(). <?. $visitas = array("lunes"=>200, "martes"=>186, "miércles"=>190, "jueves"=>175); reset($visitas); while (list($clave, $valr) = each($visitas)) { ech "el día $clave ha tenid $valr visitas<br>"; La función each()devuelve el valr del element actual, en este cas, el valr del element actual y su clave, y desplaza el punter al siguiente, cuand llega al final devuelve FALSO, y termina el bucle while(). Tablas multidimensinales Las tablas multidimensinales sn simplemente tablas en las cuales cada element es a su vez tra tabla. $calendari[] = array (1, "ener", 31); $calendari[] = array (2, "febrer", 28); $calendari[] = arra $calendari[] = array (3, "marz", 31); $calendari[] = array (4, "abril", 30); $calendari[] = array (5, "may", 31); while (list($clave, $valr ) = each($calendari)){ {

Tutrial de PHP y MySQL (LuCAS) Página 12 de 54 $cadena = $varlr[1]; $cadena.= " es el mes númer ". $valr[0]; $cadena.= "y tiene ". $varlr[2]. " días<br>"; ech $cadena; La función list() es más bien un peradr de asignación, l que hace es asignar valres a unas lista de variables. En este cas ls valres sn extraids de una tabla pr la función each(). Las funcines Muchas veces, cuand trabajams en el desarrl de una aplicación, ns surge la necesidad de ejectar un mism blque de códig en diferentes partes de nuestra aplicación. Una Función n es más que un blque de códig al que le pasams una serie de parámetrs y ns devuelve un valr. Cm tds ls lenguaje de prgramación, PHP trae una gran cantidad de funcines para nuestr us, per las funcines más gran cantidad de funcines para nuestr us, per las funcines más imprtantes sn las que nstrs creams. Para declara una funcin debems utilizar la instrucción functin seguid del nmbre que le vams a dar, y después entre parentesis la lista de arguments separads pr cmas, aunque también habrá funcines que n recgan ningún argument. functin nmbre_de_funcin (arg_1, arg_2,..., arg_n) { blque de códig Cualquier instrucción válida de PHP puede aparecer en el cuerp (l que antes hems llamad blque de códig) de una función, inclus tras funcines y definicines de clases. En PHP n pdems redefinir una función previamente declarada, y además en PHP3, las funcines deben definirse siempre antes de que se invquen, en PHP4 este requerimient ya n existe. La instrucción RETURN Cuand invcams una función, la ejecución del prgrama pasa a ejecutar las líneas de códig que cntenga la función, y una vez terminad, el prgrama cntinua su ejecución desde el punt en que fué llamada la función. Existe una manera de terminar la ejecución de la función aunque aún haya códig pr ejecutar, mediante el u haya códig pr ejecutar, mediante el us de la instrución return terminams la ejecución del códig de una función y devlvems un valr. Pdems tener varis return en nuestra función, per pr l general, cuants más return tengams mens reutilizable será nuestra función. functin mayr ($x, $y) { if ($x > $y) { return $x." es mayr que".$y; else { return $y." es mayr que".$x; Aunque quedariá mejr: functin mayr ($x, $y) { $msg = "";

Tutrial de PHP y MySQL (LuCAS) Página 13 de 54 if ($x > $y) { $msg = $x." es mayr que".$y; else { $msg = $y." es mayr que".$x; return $msg; Cn la instrución return puede devlverse cualquier tip de valr, incluyend tablas y bjets. PHP sl permite a las funcines devlver un valr, y para slventar este pequeñ prblema, si querems que nuestra función devuelva varis tenems que utilizar una tabla (array). Parámetrs de las funcines Existen ds frmas de pasar ls parámetrs a una función, pr valr pr referencia. Cuand pasams una variable pr valr a una funcin, curra l que curra en ésta en nada mdificará el cntenid de la variable. Mientras que si l hacems pr referencia, cualquier cambi acntecid en la función sbre la variable l hará para siempre. E variable l hará para siempre. En PHP, pr defect, las variables se pasan pr valr. Para hacerl pr referencia debems antepner un ampersand (&) a la variable. functin suma ($x, $y) { $x = $x + 1; return $x+$y; $a = 1; $b = 2; //parámetrs pr valr ech suma ($a, $b); // imprimirá 4 ech $a; // imprimirá 1 //parámetrs pr referencia ech suma (&$a, $b); // imprimirá 4 ech $a; //imprimirá 2 Si querems que un parámetr de una función se pase siempre pr referencia debems antepner un ampersand (&) al nmbre del parámetr en la definición de la función. En PHP pdems definir valres pr defect para ls parámetr de una función. Ests valres tienen que ser una expresión cnstante, y n una variable miembr de una clase. Además cuand usams parámetrs pr defects, ésts deben estar a la derecha de cualquier parámetr sin valr pr defect, de tra frma PHP ns devlverá un errr. functin suma ($x=1, $y) { $x = $x + 1; return $x+$y;

Tutrial de PHP y MySQL (LuCAS) Página 14 de 54 Si ejecutarms esta función ns daría errr, ya que hems dad a $x el valr 1 pr defect y la hems clcad a la izquierda de un parámetr que n tiene valr pr defect. La frma crrecta es: functin suma ($y, $x=1) { $x = $x + 1; return $x+$y; Cabe destacar que PHP3 n sprta un númer variables de parámetrs, per PHP4 sí. Llegads a este punt, dams un pas atrás y vlvems a las variables, para distinguir entre variables estáticas (static) y glbales (glbal). Las variables estáticas se definen dentr de una función, la primera vez que es llamada dicha función la variable se inicializa, guardand su valr para psterires llamadas. functin cntadr () { static $cunt = 0; $cunt = $cunt + 1; return $cunt; ech cntadr()."<br>"; // imprimirá 1 ech cntadr()."<br>"; // imprimirá 2 ech cntadr()."<br>"; // imprimirá 3 Las variables glbales, n se pueden declarar dentr de una función, l que hacems el llamar a una variable que ya ha sid declarada, tmand el valr que tenga en ese mment, pudiend se mdificad en la función. var $a = 1; functin ver_a() { glbal $a; ech $a."<br>"; // imprimirá el valr de $a $a += 1; // sumams 1 a $a ech ver_a(); // imprimirá 1 ech ver_a(); // imprimirá 2 $a = 7; ech ver_a(); // imprimirá 7 ech ver_a(); // imprimirá 8 Funcines Variable PHP sprta el cncept de funcines variables, est es significa que si una variable tiene uns parentesis añadids al final, PHP buscará un función cn el mism nmbre que el cntenid de la variable, e intentará ejecutarla. functin imprime($text) { ech $text. "\n"; functin imprimenegrilla($text){ ech "<B>$text</B>\n";

Tutrial de PHP y MySQL (LuCAS) Página 15 de 54 $MiFunc = "imprime"; $MiFunc("Hla"); //imprimirá Hla $MiFunc = "imprimenegrilla"; $MiFunc("Hla"); //imprimirá Hla Recursión PHP t>recursión PHP también permite la recursión, es decir, una función se puede llamar así misma. Para aclarar el cncept de recursión, vams a crear una función que cmprueba si un númer es enter n. Un númer que n sea enter (7'4), tiene una parte entera y tra decimal (cmprendida entre 0 y 1), l que vams a hacer para cmprbar si un númer es enter n, será restarle 1 al númer en cuestión hasta que ns que dems sin parte entera, y entces cmprbarems si tiene parte decimal (un pc lis td ést). functin esenter($numer) { if ($numer > 1) { return (esenter($numer -1)); elseif ($numer < 0) { /* cm ls núm. sn simétrics chequeams l cnvertims a psitv */ return (esenter((-1) * $numer -1)); elseif (($numer > 0) AND ($numer < 1)) { return ("NO"); else { /* el cer es enter pr definición */ return ("SI"); //fin functin ech " Es 0 un númer enter? ".esenter(0)."\n"; ech " Es 3.5 un númer enter? ".esenter(3.5)."\n"; ech " Es -7 un númer enter? ".esenter(-7)."\n"; ech " Es -9.2 un númer enter? ".esenter(9.2)."\n"; Cóm ahrrarns líneas de códig En las leccines anterires hems aprendid el us básic de las funcines de PHP para trabajar cn MySQL. En esta lección y sucesivas vams a ver nuevas funcines que ns facilitan y ptencian nuestras páginas web. Pr l general, tds nuestrs script tienen partes de códig iguales, las funciónes include() y require() ns van ahrrar muchas de estas lineas de códig. Ambas funcines hacen una llamada a un determinad ficher per de ds maneras diferentes, cn include(), insertams l que cntenga el ficher que llamems de manera literal en nuestr script, mientras que cn require(), le decims que el script necesitará parte de códig de se encuentra en el ficher que llama require(). Cm td est es un pc lis, veams uns ejempls que ns l aclará. include ("header.inc"); ech "Hla Mund"; include ("fter.inc"); Si tenems encuenta que el ficher header.inc cntiene: <html> <bdy>

Tutrial de PHP y MySQL (LuCAS) Página 16 de 54 y el ficher fter.inc cntiene: </bdy> </html> Nuestr script sería equivalente a: <html> <bdy> ech "Hla Mund"; </bdy> </html> Ahra veams el script de ejempl para la función require(): require ("cnfig.inc"); include ("header.inc"); ech $cadena; include ("fter.inc"); Dnde el ficher cnfig.inc tendría alg cm ést: $cadena = "Hla Mund"; Tiemp y fecha En esta lección vams a ver cm algunas funcines relacinadas cn el tiemp y la fecha, así cm alguns ejempls práctics. time Devuelve el numer de segunds transcurrids desde el 1 de Ener de 1970. A esta frma de expresar fecha y hra se le denmina tmestamp. date(frmat, timestamp) La funció date devuelve una cte(frmat, timestamp) La funció date devuelve una cadena frmateada según ls códig de frmat. Si n le pasams la variable timestamp ns devuelve la cadena frmateada para la fecha y la hra actual. Ls códigs de frmat para la función date sn: CODIGO a A d D F DESCRIPCIÓN am pm AM PM Día del mes cn cers Abreviatura del día de la semana (inglés) Nmbre del mes (inglés)

Tutrial de PHP y MySQL (LuCAS) Página 17 de 54 h Hra en frmat 1-12 H Hra en frmat 0-23 i Minuts j Día del mes sin cers l Dia de la semana m Númer de mes (1-12) M Abreviatura del mes (inglés) s Segunds y Añ cn 2 dígits Y Añ cn 4 dígits z Dia del añ (1-365) Para ver alguns ejempls supngams que ahra es el 7 de abril de 200 Para ver alguns ejempls supngams que ahra es el 7 de abril de 2000 a las 14 hras 30 minuts y 22 segunds: date("d-m-y") -> 07-04-2000 date("h:i:s") -> 14:30:22 date("y") -> 2000 date("ymdhis") -> 20000407143022 date("d/m/y H:i a") -> 07/04/00 14:30 pm date(d-m-y H:i, time()) -> el mment actual mktime(hra, min, seg, mes, dia, añ) La funcin mktime devuelve una variable de tip timestamp a partir de las crdenadas dadas. La principal utilidad de esta funcin es la de añadir quitar una determinada cantidad de fecha u hras a una dada. <?PHP functin restardias($numdias, $date) { if (isset($date)) { $date = time(); list($hra, $min, $seg, $dia, $mes, $ann) = expldest($hra, $min, $seg, $dia, $mes, $ann) = explde( " ", date( "H i s d m Y")); $d = $dia - $numdias; $fecha = date("d-m-y", mktime($hra, $min, $seg, $mes, $d, $ann)); return $fecha; ech ech restardias(10)."<br>"; restardias(5)."<br>"; chekdate (mes, dia, añ) La función chekdate cmprueba si una fecha es válida, si es así devuelve TRUE y si n l es FALSE. Una fecha se cnsidera válida si el añ está entre 1900 y 32767, el mes entre 1 y 12, y el dia es menr igual que númer de días ttal del mes en cuestión. <?PHP if (checkdate(31, 2, 2000)) { ech "La fecha es crrecta"; else { ech "La fecha es incrrecta";

Tutrial de PHP y MySQL (LuCAS) Página 18 de 54 Para el ejempl anterir ns daría que la fecha es incrrecta, febrer nunca tiene un día 31. Las clases Las Clases sn máxim expnente de la Prgramación Orientada a Objets (POO). PHP n es un lenguaje rientad a bjet, per implementa las características que permiten definir las clases. Per, qué sn las Clases y para que sirven?, empecems pr ls segund, sirven hacer el códig más legible, y l que es más imprtante, reutilizable. Escribir una Clase es sin duda más larg que escribir el códig directamente, per a la larga es más rentable pr su prtabilidad a tras, per a la larga es más rentable pr su prtabilidad a tras aplicacines y su mantenimient. Las Clases n sn más que una serie de variables y funcines que describen y actúan sbre alg. Pr ejempl, vams a crear la clase autmóvil, la cual tendrá diversas variables, $clr, $mdel, $marca, $ptencia, $matricula y habrá una serie de funcines que actuarán sbre la clase autmóvil cm Preci(), Acelerar(), Frenar(), Girar()y Reparar(). Cm ejempl vams a crear la clase mysql, que ns servirá para realizar cnsultas a las bases de dats MySQL. class DB_mysql { /* variables de cnexión */ var $BaseDats; var $Servidr; var $Usuari; var $Clave; /* identificadr de cnexión y cnsulta */ var $Cnexin_ID = 0; var $Cnsulta_ID = 0; /* númer de errr y text errr */ var $Errn = 0; var $Errr = ""; /* Métd Cnstructr: Cada vez que creems una variable de esta clase, se ejecutará esta función */ functin DB_mysql($bd = "", $hst = "lcalhst", $user = "nbdy", $pass = "") { $this->basedats = $bd; $this->servidr = $hst; $this->usuari = $user; $this->clave = $pass; /*Cnexión a la base de dats*/ functin cnectar($bd, $hst, $user, $pass){ if ($bd!= "") $this->basedats = $bd; if ($hst!= "") $this->servidr = $hst; if ($user!= "") $this->usuari = $user; if ($pass!= "") $this->clave = $pass; // Cnectams al servidr $this->cnexin_id = mysql_cnnect($this->servidr, $this->usuari, $this->clave); if (!$this->cnexin_id) { $this->errr = "Ha fallad la cnexión."; return 0; //seleccinams la base de dats if (!@mysql_select_db($this->basedats, $this->cnexin_id)) { $this->errr = "Impsible abrir ".$this->basedats ; return 0;

Tutrial de PHP y MySQL (LuCAS) Página 19 de 54 /* Si hems tenid éxit cnectand devuelve el identificadr de la cnexión, sin devuelve 0 */ return $this->cnexin_id; /* Ejecuta un cnsulta */ functin cnsulta($sql = ""){ if ($sql == "") { $this->errr = "N ha especificad una cnsulta SQL"; return 0; //ejecutams la cnsulta $this->cnsulta_id = @mysql_query($sql, $this->cnexin_id); if (!$this->cnsulta_id) { $this->errn = mysql_errn(); $this->errr = mysql_errr(); /* Si hems tenid éxit en la cnsulta devuelve el identificadr de la cnexión, sin devuelve 0 */ return $this->cnsulta_id; /* Devuelve el númer de camps de una cnsulta */ functin numcamps() { return mysql_num_fields($this->cnsulta_id); /* Devuelve el númer de registrs de una cnsulta */ functin numregistrs(){ return mysql_num_rws($this->cnsulta_id); /* Devuelve el nmbre de un camp de una cnsulta */ functin nmbrecamp($numcamp) { return mysql_field_name($this->cnsulta_id, $numcamp); /* Muestra ls dats de una cnsulta */ functin vercnsulta() { ech "<table brder=1>\n"; // mstrams ls nmbres de ls camps fr ($i = 0; $i < $this->numcamps(); $i++){ ech "<td><b>".$this->nmbrecamp($i)."</b></td>\n"; ech "</tr>\n"; // mstrarms ls registrs while ($rw = mysql_fetch_rw($this->cnsulta_id)) { ech "<tr> \n"; fr ($i = 0; $i < $this->numcamps(); $i++){ ech "<td>".$rw[$i]."</td>\n"; ech "</tr>\n"; //fin de la Clse DB_mysql Cm habreis bservad, para crear una clase utilizams la sentencia class, y además hems cread una función cn el mism nmbre que la clase, a esa función se le llama cnstructr y se ejecutará cada vez que definams una

Tutrial de PHP y MySQL (LuCAS) Página 20 de 54 variable de esa clase. N es bligatrina variable de esa clase. N es bligatri crear un cnstructr en una definición de clase. Otra csa imprtante en las clases es el peradr ->, cn el que indicams una variable métd (parte derecha del peradr) de una clase (parte izquierda del peradr). Para hacer referencia a la clase que estams creand dentr de su definición, debems utilizar this. Y ahra veams un ejempl de la clase que hems cread, y supngams que el códig anterir l hems guardad en un ficher llamad clase_mysql.inc.php. <bdy> <html> require ("clase_mysql.inc.php"); $micnexin = new DB_mysql ; $micnexin->cnectar("mydb", "lcalhst", "nbdy", ""); $micnexin->cnsulta("select * FROM agenda"); $micnexin->vercnsulta(); </bdy> </html> Ls frmularis Ls Frmularis n frman parte de PHP, sin del lenguaje estánder de Internet, HTML, per cm ésts van a aperecer muchas veces durante el curs, vams a dedicar esta algunas líneas a ells. L que viene a cntinuación es HTML y n PHP. Td frmulari cmienza cn la etiqueta <FORM ACTION="l_que_sea.php" METHOD="pst/get">. Cn. Cn ACTION indicams el script que va prcesar la infrmación que recgems en el frmulari, mientras que METHOD ns indica si el usuari del frmulari va ha enviar dats (pst) recgerls (get). La etiqueta <FORM> indica el final del frmulari. A partir de la etiqueta <FORM> vienen ls camps de entrada de dats que pueden ser: Cuadr de text: <input type="text" name="nmbre" size="20" value="jse"> Cuadr de text cn barras de desplazamient: <textarea rws="5" name="descripcin" cls="20">es de clr rj</textarea> Casilla de verificación: <input type="checkbx" name="cambiar" value="on"> Btón de pción: <input type="radi" value="azul" checked name="clr"> Menú desplegable: <select size="1&qu class="cdig"><select size="1" name="dia"> <ptin selected value="lunes">lunes</ptin> <ptin>martes</ptin> <ptin value="miercles">miercles</ptin> </select> Btn de cmand: <input type="submit" value="enviar" name="enviar">

Tutrial de PHP y MySQL (LuCAS) Página 21 de 54 Camp cult: <input type="hidden" name="edad" value="55"> Este últim tip de camp resulta especialmente útil cuand que rems pasar dats cults en un frmulari. Cm habrás bservad tds l tips de camp tienen un mdicadr llamad name, que n es tr que el nmbre de la variable cn la cual recgerems ls dats en el script indicad pr el mdificadr ACTION de la etiqueta FORMFORM, cn value establecems un valr pr defect. A cntinuación veams un ejempl, para l cual crearems un frmulari en HTML cm el que sigue y l llamarems frmulari.htm: <HTML> <BODY> <FORM METHOD="pst" ACTION="mis_dats.php"> <input type="hidden" name="edad" value="55"> <p>tu nmbre <input type="text" name="nmbre" size="30" value="jse"></p> <p>tu sistema favrit <select size="1" name="sistema"> <ptin selected value="linux">linux</ptin> <ptin value="unix">unix</ptin> <ptin value="macintsh">macintsh</ptin> <ptin value=&qmargin-left: 75"><ptin value="windws">windws</ptin> </select></p> <p> Te gusta el futbl? <input type="checkbx" name="futbl" value="on"></p> <p> Cual es tu sex?</p> <blckqute> <p>hmbre<input type="radi" value="hmbre" checked name="sex"></p> <p>mujer <input type="radi" name="sex" value="mujer"></p> </blckqute> <p>aficines</p> <p><textarea rws="5" name="aficines" cls="28"></textarea></p> <p><input type="submit" value="enviar dats" name="enviar"> <input type="res-left: 50"> <input type="reset" value="restablecer" name="b2"></p> </FORM> </BODY> <HTML> Y ahra creems el script PHP llamad desde le frmulari mis_dats.php: <?PHP; if ($enviar) { ech "Hla <b>". $nmbre. "</b> que tal estás<br>\n"; ech "Eres ". $sex. "<BR>\n"; ech "Tienes ". $edad. "<BR>\n"; ech "Tu sistema favrit es ". $sistema. "<BR>\n"; if ($futbl) { ech "Te gusta el futbl <BR>\n"; else dig" style="margin-left: 50"> else { ech "NO te gusta el futbl <BR>\n"; if ($aficines!= "") { ech "Tus aficines sn: <BR>\n"; ech nl2br($aficines); else { ech "NO tienes aficines <BR>\n"; ech "<a href='frmulari.htm'>volver AL FORMULARIO</a>" Una vez rellenads ls dats del frmulari, pulsams el btón Enviar dats, cn l que le camp enviar tma l que su etiqueta value indica, es decir enviar="enviar dats". En nuestr script l primer que evaluams es que se haya enviad el frmulari, y para ell nada mejr que cmprbar que la variable $enviar n está vacia. Le pnems el

Tutrial de PHP y MySQL (LuCAS) Página 22 de 54 sign dlar delante a enviar, pnems el sign dlar delante a enviar, ya que en PHP tdas las variables se les refiere cn este sign. Per y fusinarams el códig de ambs ficher, ns ahrrariam un. Si la variable $enviar está vacia, enviams el frmulari. <?PHP; if ($enviar) { ech "Hla <b>". $nmbre. "</b> que tal estás<br>\n"; ech "Eres ". $sex. "<BR>\n"; ech "Tienes ". $edad. "<BR>\n"; ech "Tu sistema favrit es ". $sistema. "<BR>\n"; if ($futbl) { ech "Te gusta el futbl <BR>\n"; else { ech "NO te gusta el futbl <BR>\n"; if ($aficines!= "") { ech "Tus aficines sn: <BR>\n"; ech nl2br($aficines); else { ech "NO tienes aficines <BR>\n"; ech "<a href='$php_self'>volver AL FORMULARIO</a>" else { <HTML> <BODY> <FORM METHOD="pst" ACTION="<?PHP ech $PHP_SELF "> <input type="hidden" name="edad" value="55"> <p>tu nmbre <input type="text" name="nmbre" size="30" nmbre" size="30" value="jse"></p> <p>tu sistema favrit <select size="1" name="sistema"> <ptin selected value="linux">linux</ptin> <ptin value="unix">unix</ptin> <ptin value="macintsh">macintsh</ptin> <ptin value="windws">windws</ptin> </select></p> <p> Te gusta el futbl? <input type="checkbx" name="futbl" value="on"></p> <p> Cual es tu sex?</p> <blckqute> <p>hmbre<input type="radi" value="hmbre" checked name="sex"></p> <p>="cdig" style="margin-left: 100"><p>Mujer <input type="radi" name="sex" value="mujer"></p> </blckqute> <p>aficines</p> <p><textarea rws="5" name="aficines" cls="28"></textarea></p> <p><input type="submit" value="enviar dats" name="enviar"> <input type="reset" value="restablecer" name="b2"></p> </FORM> </BODY> </HTML> <?PHP //fin IF La variable de entrn $PHP_SELF, es una variable de entrn que ns devuelve el nmbre del script que estams ejecutand. Y pr últim, hacer ntar el us de la función nl2br(), nl2br(), cn la cuál sustituims ls retrns de carr del text, ls cuáles n recncen ls navegadres, pr la etiqueta <BR>. Descarga de archivs

Tutrial de PHP y MySQL (LuCAS) Página 23 de 54 Vams a ver un cas especial, cm descargar un archiv desde un frmulari. Para ell utilizarems una etiqueta INPUT de tip FILE, sprtada a partir de las versines de ls navegadres Nestcape Navigat 2.0 e Internet Explrer 4.0. El frmulari debe usar el métd pst, y el atribut pst, y el atribut enctype debe tener el valr multipart/frm-data. Además al frmulari debems añadirle un camp cult de nmbre MAX_FILE_SIZE, al cuál le darems el valr en byte del tamañ máxim del archiv a descargar. <FORM ENCTYPE="multipart/frm-data" ACTION="7-3.php3" METHOD="pst"> <INPUT TYPE="hidden" name="max_file_size" value="100000"> <INPUT NAME="archiv" TYPE="file"> <INPUT TYPE="submit" VALUE="Descargar Archiv"> </FORM> Cuand el frmulari es enviad, PHP detectarará autmaticamente que se está descargand un archiv y l clcará en un directri tempral en el servidr. Dich directri será que el que esté indicad en el archiv de cnfiguración php3.ini, en su defect en el directri tempral del sistema. Cuand PHP dectecta que se está descargand un archiv crea varias variables cn el prefij del nmbre del archiv per cn distintas terminacines. La variable terminada en _name cntiene el nmbre riginal del archiv, la terminad en _size el tamañ en bytes de éste, y la variable terminada en _type ns indicará el tip de archiv si éste es frecid pr el navegadr. Si el prces de descarga n ha sid crrect la variable archiv tmará el valr nne y _size será 0, y si el prces ha sid crrect, per la variable teminada en _size da 0, quiere decir que el archiv a descarga supera el tamañ máxim indicad pr MAX_FILE_SIZE. Una vez descargad el archiv, l primer que debems hacer es mverl a tr lugar, pues sin se hace nada cn él, cuand acabe la ejecución de la página se brrará. Veams un ejempl de td l dich. <HTML> <BODY> <?PHP if ($enviar) {if ($enviar) { if ($archiv!= "nne" AND $archiv_size!= 0){ ech "Nmbre: $archiv_name <BR>\n"; ech "Tamañ: $archiv_size <BR>\n"; ech "Tip: $archiv_type <BR>\n"; /* para Windws if (! cpy ($archiv, "C:\\TEMP\\".$archiv_name)) { ech "<h2>n se ha pdid cpiar el archiv</h2>\n"; */ /* para Linux/Unix */ if (! cpy ($archiv, "/tmp/".$archiv_name)) { ech "<h2>n se ha pdid cpiar el archiv</h2>\n"; elseif ($archiv!= "nne" AND $archiv_size == 0) { ech "<h2>tamañ de arcft: 75">ech "<h2>tamañ de archiv superad</h2>\n"; else { ech "<h2>n ha escgid un archiv para descargar</h2>\n"; ech "<HR>\n"; <FORM ENCTYPE="multipart/frm-data" ACTION=" ech $PHP_SELF " METHOD="pst"> <INPUT type="hidden" name="max_file_size" value="100000"> <p><b>archiv a descargar<b><br>

Tutrial de PHP y MySQL (LuCAS) Página 24 de 54 <INPUT type="file" name="archiv" size="35"></p> <p><input type="submit" name="enviar" value="aceptar"></p> </FORM> </BODY> </HTML> Funcines de acces a fichers Psiblente durante nuestra tarea de prgramación ns surga la necesidad de btener dats de un ficher, bien, de crear un. PHP ns prvee de una extensa gama de funcines de acces a fichers. En esta lección sól vams a las funcines básicas, abrir (fpen), cerrar (fclse), leer (fgets) y escribir (fputs). Estas cuatr ns slventaran la mayria de prblemas queibir (fputs). Estas cuatr ns slventaran la mayria de prblemas que ns surgan cn respect al acces a fichers. fpen (archiv, md) Cn esta función abrims un ficher, bien sea lcal una dirección de internet (http:// ftp://). La función fpen ns devuelve un valr numéric (indicadr de archiv) de tip integer que ns servirará para hacer referencia al archiv abiert. Cn fpen pdems abrir un archiv de ls siguientes mds: r sl lectura r+ lectura y escritura w sl escritura. Sin existe el archiv l crea, si ya existe l machaca. w+ lectura y escritura. Sin existe el archiv l crea, si ya existe l machaca. a sl lectura. Sin existe el archiv l crea, si ya existe empieza a escribir al final del archiv. a+ lectura y escritura. Sin existe el archiv l crea, si ya existe empieza a escribir al final del archiv. <?PHP //abre"><?php //abre un archiv utilizand el prtcl HTTP if (! fpen("http://www.ciberaula.cm/", "r")) { ech "El archiv n se puede abrir\n"; exit; Ls mds r, r+, w, w+ clcan el punter de lectura/escritura a principi del ficher, ls mds a, a+ l clcan al final. fgets (indicadr_archiv, lngitud) La función fgets ns devuelve una cadena cn la lngitud especifica del ficher al que apunta el indicadr de archiv. <?PHP //abre un archiv e imprime cada linea $archiv = fpen("dlass="cdig">$archiv = fpen("data.txt", "r"); if ($archiv) { while (!fef($archiv)) { $linea = fgets($archiv, 255); ech $linea;

Tutrial de PHP y MySQL (LuCAS) Página 25 de 54 fclse ($archiv); La función fef devuelve TRUE si punter de lectura/escritura se encuetra al final del ficher, y FALSE en cas cntrari. fputs (indicadr_archiv, cadena) La función fputs escribe una cadena en el ficher indicad. Para escribir en una archiv este debe haber sid previamente abiert. La función fputs devuelve TRUE si se ha escrit cn éxit, en cas cntrari devuelve FALSE. <); <?PHP //abre un archiv y escribe en él $archiv = fpen("data.txt", "w"); if ($archiv) { fputs ($archiv, "Hla Mund"); fclse ($archiv); fclse (indicadr_archiv) Cn esta función cerrams el ficher que ns marca el indicadr de archiv, devuelve TRUE si el ficher se cierra crrectamente y FALSE sin se ha pdid cerrar. file_exists (ficher) Esta función devuelve TRUE si el archiv especificad existe, y FALSE en cas cntrari. <?PHP if (file_exists("data.txt")) { ech "El ficher existe"; else { ech "El ficher NO existe"; cpy (rigen, destin) La función cpy cpia un ficher de un lugar (rigen) a tr (destin), devuelve TRUE si la cpia a tenid éxit y FALSE en cas cntrari. <?PHP if (cpy("data.txt", "/tmp/data.txt")) { ech "El ficher ha sid cpiad cn éxit"; else { ech "El ficher NO se hig" style="margin-left: 50">ech "El ficher NO se ha pdid cpiar";

Tutrial de PHP y MySQL (LuCAS) Página 26 de 54 MySQL En esta lección vams a hacer un pequeñ recrrid pr MySQL, pr su estructura y frma de trabajar. Para ell supnems que ya hems cnseguid (pr fin...) instalar MySQL en nuestra máquina. L primer que debems hacer es arrancar MySQL (ver capitul de instalación): Linux:./mysqld start Windws: mysqld-shareware.exe Td el sistema de permiss de acces al servidr, a las bases de dats y sus tablas, MySQL l almacena en una tabla llamada mysql, que cm tdas estará en el directri /data, a mens que hallams especificad tr directri. En Windws esta tabla se crea cn la instalación, per en Linux/Unix debems crearla cn: /usr/lcal/mysql/bin/mysql_install_db En la base de dats mysql es dnde se guadaran tds ls permiss y restriccines a ls dats de nuestras bases de dats. La principal herramienta de MySQL es mysqladmin, la cuál cm parece indicar su nmbre es la encargada de la administración. MySQL crea pr defect al usuari rt cn tds ls perimss psibles habilitads, pdems utilizar este usuari cm administradr crear tr, pr ejempl mysqladmi. Cm el usuari rt l crea sin clave de acces, l primer que debems hacer es asignarle una: mysqladmin -u rt passwrd "miclave" A partir de ahra cualquier peración que hagams cm rt deberems especifica la clave. Hay que destacar que enter el mdificadr -p y la clave n debe habeficadr -p y la clave n debe haber espacis. mysqladmin -u rt -pmiclave Pues bien, ya estams preparad para crear una base de dats mysqladmin -u rt -pmiclave create mibasededats Para brrarla mysqladmin -u rt -pmiclave drp mibasededats La estructura de MySQL En el directri /benc encntrarems ejempls de script y SQL. En el directi /share están ls mensajes de errr del servidr para ls distins idimas. Ls directris /include y /lib cntiene ls ficher *.h y las librerias necesarias, en /bin estan ls fichers ejecutables y en /data encntrarems cm subdirectri cada una de las bases de dats que hayams cread. Cm hems dich, para cada base de dats que nstrs creams, MySQL crea un directri cn el nmbre que le hems asignad a la bade de dats. Dentr de este directri, pr cada tabla que definams MySQL va ha crear tres archivs: mitabla.isd, mitabla.ism, mitabla.frm El abla.frm El archiv cn extensión ISD, es el cntine ls dats de nuestra tabla, el ISM cntiene infrmación acerca de las claves y tr dats que MySQL utiliza para buscar dats en el ficher ISD. Y el archiv frm cntine la estructura de la prpia tabla.

Tutrial de PHP y MySQL (LuCAS) Página 27 de 54 Dad que las bases de dats de MySQL sn simples fichers de un directri, para realizar cpias de seguridad, pdrems utilizar las herramientas de cmpresión que habitualmente usams en nuestr sistema y lueg cpiarl a tr lugar, simplemente est últim. Seguridad Cm cmentams anterirmente, td el sistema de permiss MySQL l guarda en una base de dats llamada mysql, la cuál se cmpnen de cinc tablas: hst, user, db, tables_priv, clums_priv. La tabla user cntiene infrmación sbre ls usuaris, desde que máquinas pueden acceder a nuestr servidr MySQL, su clave y de sus diferentes permiss. La tabla hst ns infrma sbre que máquinas pdran acceder a nuestr sistema, así cm a las bases de dats que tendrán acess y sus diferentes permiss. Finalmente, las tablas db, tables_priv, clumns_priv ns prveen de un cntrl individual de las bases de dats, tablas y clumnas (camps). Tabla user CAMPO TIPO POR DEFECTO Hst User Passwrd char(60) char(16) char(16) Select_priv enum('n','y') N Insert_priv enum('n','y') N Update_priv enum('n','y') N Delete_priv enum('n','y') N Create_priv enum('n','y') N Drp_priv enum('n','y') N Relad_priv enum('n','y') N Shutdwn_priv enum('n','y') N Prcess_priv enum('n','y') N File_priv enum('n','y') N Grant_priv enum('n','y') N References_priv enum('n','y') N Index_priv enum('n','y') N Alter_priv enum('n','y') N Tabla hst CAMPO TIPO POR DEFECTO Hst Db char(60) char(32) Select_priv enum('n','y') N Insert_priv enum('n','y') N Update_priv enum('n','y') N

Tutrial de PHP y MySQL (LuCAS) Página 28 de 54 Delete_priv enum('n','y') N Create_priv enum('n','y') N Drp_priv enum('n','y') N Grant_priv enum('n','y') N References_priv enum('n','y') N Index_priv enum('n','y') N Alter_priv enum('n','y') N Tabla db CAMPO TIPO POR DEFECTO Hst Db User char(60) char(32) char(16) Select_priv enum('n','y') N Insert_priv enum('n','y') N Update_priv enum('n','y') N Delete_priv enum('n','y') N Create_priv enum('n','y') N Drp_priv enum('n','y') N References_priv enum('n','y') N Index_priv enum('n','y') N Alter_priv enum('n','y') N He aquí una breve descripción de ls diferentes permiss: Select_priv: Permite utilizar la sentencia SELECT Insert_priv: Permite utilizar la sentencia INSERT Update_priv: Permite utilizar la sentencia UPDATE Delete_priv: Permite utilizar la sentencia DELETE Create_priv: Permite utilizar la sentencia CREATE crear bases de dats Drp_priv: Permite utilizar la sentencia DROP eliminar bases de dats Relad_priv: Permite recargar el sistema mediante mysqladmin relad Shutdwn_priv: Permite parar el servidr mediante mysqladminpermite parar el servidr mediante mysqladmin shutdwn Prcess_priv: Permite manejar prcess del servidr File_priv: Permite leer y escribir fichers usand cmand cm SELECT INTO OUTFILE y LOAD DATA INFILE Grant_priv: Permite trgar permiss a trs usuaris Index_priv: Permite crear brrar índices Alter_priv: Permite utilizar la sentencia ALTER TABLE Si dejams en blanc ls camps user, hst db, harems referencia a cualquier usari, servidr base de dats. Cnseguirems el mism efect pniend el símbl % en el camp.

Tutrial de PHP y MySQL (LuCAS) Página 29 de 54 Funcines PHP de acces a MySQL En esta leccin vams a ver tdas la funcines que prvee PHP para el manej de bases de dats MySQL. Ls ejempls del manej de las funcines, ls verems a l larg del curs. mysql_affected_rws int mysql_affected_rws(int [link_identifier] ); mysql_affected_rws devuelve el númer de filas afectad en el últim SELECT, UPDATE DELETE pregunta en el servidr asciad cn el identificadr de cnexión especificad. Si n se e especifica un identificadr de cnexión, se asume le de la última cnexión abierta. Este rden n es eficaz para las instruccines SELECT, sól en instruccines que mdifican archivs. Para recuperar el númer de filas vuelt de un SELECT, usa mysql_num_rws. mysql_clse int mysql_clse(int [link_identifier] ); Devuelve: TRUE si se ha cerrad crrectamente, FALSE en cas de errrr. mysql_clse clses la cnexión a la base de dats MySQL asciada al idenficadr de cnexión especificad. Si n se e especifica un identificadr de cnexión, se asume le de la última cnexión abierta. Nte que esta función n es nrmalmente necesaria en cnexines n-persistentes (abiertas cn mysl_cnnect) ya que ést se cerrará autmáticamente al final de la ejecución del script página. La función mysql_clse n cierra una cneción persistente (abierta cn mysql_pcnnect()). Ver tambien: mysql_cnnect y mysql_pcnnect. mysql_cnnect int mysql_cnnect(string [hstname], string [username], string [passwrd] ); Devuelve: un identificadr de cnexión, FALSE en cas de errr. sql_cnnect establece una cnexión a un servidr de MySQL. Tds ls arguments sn ptativs, y si n se especifican, ls valres pr defect sn (' el lcalhst', nmbre del usuari del usuari que psee el prces del servidr, la cntraseña vacía). La cadena hstname también puede incluir un númer del puert, "hstname:prt". En cas de realizar una segunda llamada a mysql_cnnect cn ls misms arguments, n se establecerá ninguna nueva cnexión, sin se devlverá el identificadr de cnexión de la ya existente. La cnexión al servidr se cerrará en cuant la ejecución del script acabe, a mens que la cerrems antes cn la función mysql_clse. Ver también: mysql_pcnnect y mysql_clse. mysql_create_db

Tutrial de PHP y MySQL (LuCAS) Página 30 de 54 int mysql_create_db(string database name, int [link_identifier] ); La función mysql_create_db intenta crear una nueva base de dats en el servidr asciad cn el identificad de cnexión especificad. Ver también: mysql_drp_db. mysql_data_seek int mysql_data_seek(int result_identifier, int rw_number); Devuelve: TRUE si tda ha id bien, y FALSE en cas de errr. La función mysql_data_seek mueve el punter que indica la fila actual al númer de fila de la cnsulta que indica el identificadr. La próxima llamada al mysql_fetch_rw mysql_fetch_array devlvería esa fila. Ver también: mysql_data_seek. mysql_dbname string mysql_dbname(string result, int i); mysql_dbname devuelve el nmbre de la base de dats guardad en psición i de ls resultads del indicadr de cnsulta devuelt pr la función del mysql_list_dbs. La función del mysql_num_rws puede usarse para determinar cuánts nmbres de bases de dats están dispnibles. mysql_db_query int mysql_db_query(string database, string query, int link_identifier); Devuelve: un identificadr de cnexión, FALSE en cas de errr.< cas en FALSE cnexión,> Ejecuta una cnsulta en una base de dats. Si el identificadr n se especifica, la función intenta encntrar una cnexión abierta cn el servidr. Si n encuentra una cnexión, intentará crear una (similar a mysql_cnnect( ) sin arguments). See als mysql_cnnect. mysql_drp_db int mysql_drp_db(string database_name, int [link_identifier] ); Devuelve: TRUE si tda ha id bien, y FALSE en cas de errr. Elimina una base de dats del servidr asciad al identificadr de cnexión. Ver también: mysql_create_db mysql_errn

Tutrial de PHP y MySQL (LuCAS) Página 31 de 54 int mysql_errn(); Devuelve el númer de errr asciad a la última peración realizada. Ver también: mysql_errr mysql_errr string mysql_errr(); Devuelve el text asciad al errr prducid en la última peración realizada pr la base de dats. mysql_cnnect("marliesle"); ech mysql_errn().": ".mysql_errr()."<br>"; mysql_select_db("nnexistentdb"); ech mysql_err_db("nnexistentdb"); ech mysql_errn().": ".mysql_errr()."<br>"; $cnn = mysql_query("select * FROM nnexistenttable"); ech mysql_errn().": ".mysql_errr()."<br>"; Ver también: mysql_errn mysql_fetch_array array mysql_fetch_array(int result); Devuelve un array cn la infrmación crrespndiente al resultad de una cnsulta especificad pr su identificadr 'false' si ya n hay más filas. Es una versión extendida de mysql_fetch_rw ( ). Además de almacenar ls dats a través de índices numérics del array, también l hace a través de índices asciativs, utilizand ls nmbres de ls camps cm claves. Si ds más clumnas del resultad tienen el mism nmbre de camp, la última es la que tiene preferencia. Para acceder a las demás es necesari utilizar el índice numéric cnstruir un alias para la clumna: select t1.f1 as f t2.f1 as bar frm t1, t2 as f t2.f1 as bar frm t1, t2 Esta función n es más lenta que 'mysql_fetch_rw( )'. Example 1. mysql fetch array mysql_cnnect($hst,$user,$passwrd); $result = mysql_db_query("database","select * frm table"); while($rw = mysql_fetch_array($result)) { ech $rw["user_id"]; ech $rw["fullname"]; mysql_free_result($result); mysql_fetch_field

Tutrial de PHP y MySQL (LuCAS) Página 32 de 54 bject mysql_fetch_field(int result, int [field_ffset] ); Devuelve un bjet que cntiene la infrmación de ls camps que cmpnen un resultad de una cnsulta. Si n se especifica 'ffset', devuelve infrmación sbre el siguiente camp que tdavía n ha sid devuelt. Prpiedades del bjet devuelt: name - nmbre del camp table - nmbre de la tabla a la que pertenece el camp max_length - lngitud máxima que puede tmar el camp nt_null - 1 si el camp n puede tmar valres nuls primary_key - 1 si el camp es una clave principal (primary key) unique_key - 1 si el camp tiene restricción de unicidad multiple_key - 1 si el camp n tiene rest multiple_key - 1 si el camp n tiene restricción de unicidad numeric - 1 si el camp es numéric blb - 1 si el camp es BLOB type - tip de dat (del camp) unsigned - 1 si el camp es 'unsigned' zerfill - 1 si el camp es rellenad cn cers See als mysql_field_seek mysql_fetch_lengths int mysql_fetch_lengths(int result); Devuelve: una tabla FALSE si hay errr. mysql_fetch_lengths almacena en una tabla la lngitud de cada camp de una cnsulta realizada cn mysql_fetch_rw mysql_fetch_array. El índice de la tabla cmienza en 0. Ver también: mysql_fetch_rw. mysql_fetch_bject int mysql_fetch_bject(int result); Devuelve: un bjet FALSE en cas de errr. Esta función es similar a'mysql_fetch_array, sl que ls resultads de una cnsulta, en lugar de una tabla, ls devuelve cm un bjet. En este cas, sól se puede acceder a ls dats a través de ls nmbres de sus camps. La velcidad de ejecución es idéntica a la de 'mysql_fetch_array. Para referenciar el valr de un camp debems utilizar el peradr típics de ls bjets (->).< bjets típics> Ver también: mysql_fetch_array and mysql_fetch_rw. mysql_fetch_rw array mysql_fetch_rw(int result); Devuelve: una tabla FALSE si hay errr.

Tutrial de PHP y MySQL (LuCAS) Página 33 de 54 Devuelve un tabla cn ls valres de ls camps de la fila actual de la csulta, la que especificar el indicadr (result), y mueve el punter intern que marca la fila actual a la siguiente fila, si n hay mas filas devuelve FALSE. El índice de la tabla cmienza en 0. Ver también: mysql_fetch_array, mysql_fetch_bject, mysql_data_seek, mysql_fetch_lengths, and mysql_result. mysql_field_name string mysql_field_name(string result, int i); Devuelve el nmbre del camp especificad pr el índice. mysql_field_seek int mysql_field_seek(int result, int field_ffset); Mueve el punter del camp actual hacia adelante las psicines actual hacia adelante las psicines indicadas pr 'ffset'. Ver también: mysql_fetch_field. mysql_field_table string mysql_field_table(int result, int field_ffset); Devuelve el nmbre de la tabla que almacena el camp especificad pr el índice ( 'field_ffset' ). mysql_field_type string mysql_field_type(string result, int field_ffset); Devuelve el tip del camp del indice especificad. mysql_field_flags string mysql_field_flags(string result, int field_ffset); Devuelve ls especificadres (flags) del camp especificad cm una cadena de text en la que cada especificadr se crrespnde cn una palabra, y éstas van separadas mediante un espaci simple. Se puede analizar la cadena utilizand explde( ) Ls especificadres sn: "nt_null", "primary_key", "unique_key", "multiple_key", "blb", "unsigned", "zerfill", "binary", "enum", "aut_increment", "timestamp". mysql_field_len

Tutrial de PHP y MySQL (LuCAS) Página 34 de 54 int mysql_field_len(string result, int field_ffset); Devuelve la lngitud del camp especificad mysql_free_result int mysql_free_result(int result); Sól debería ser utilizada si la cantidad de memria utilizada para almacenar el resultad de una cnsulta es muy grande. Cuand se ejecuta esta función, tda la memria asciada al resultad se libera. mysql_insert_id int mysql_insert_id(vid); Esta función devuelve el ID (identificadr) generad para ls camps autnumérics (AUTO_INCREMENTED). El ID devuelt es el crrespndiente al de la última peración INSERT. mysql_list_fields int mysql_list_fields(string database, string tablename); Devuelve infrmación sbre la tabla. El valr resultante puede ser utilizad cn mysql_field_flags(), mysql_field_len(), mysql_field_name(), and mysql_field_type(). El identificadr que devuelve es un enter psitiv '-1' en cas de errr. El text que describe el errr se encuentra en $phperrmsg. mysql_list_dbs int mysql_listdbs(vid); Devuelve un punter que cntiene las bases de dats dispnibles para el servidr actual (msql daemn). Este valr se utiliza cn la función mysql_dbname( ). mysql_list_tables int mysql_list_tables(string database,, int [link_identifier]); Devuelve un identificar, el cual pasarems a la función mysql_tablename para extraer el nmbre de las tablas de la base de dats especificada. mysql_num_fields int mysql_num_fields(int result); mysql_num_fields devuelve en númer de camps de una cnsulta.

Tutrial de PHP y MySQL (LuCAS) Página 35 de 54 Ver también: mysql_db_query, mysql_query, mysql_fetch_field, mysql_num_rws. mysql_num_rws int mysql_num_rws(string result); Devuelve el númer de filas del resultad de una cnsulta. Ver también: mysql_db_query, mysql_query and, mysql_fetch_rw.query, mysql_query and, mysql_fetch_rw. mysql_pcnnect int mysql_pcnnect(string [hstname], string [username], string [passwrd] ); Devuelve: A psitive MySQL persistent link identifier n success, r false n errr Devuelve un identificadr de cnexión persistente 'false' en cas de errr. Las diferencias cn respect a mysql_cnnect( ) sn: Primer, la función intenta encntrar una cnexión persistente que ya esté abierta cn la misma máquina, usuari y passwrd. Si es encntrada, devuelve el identificadr de la misma, en lugar de crear una nueva cnexión. Segund, la cnexión al servidr SQL n será cerrada cuand finalice la ejecución del script, sin que permanece abierta para un us psterir. La función mysql_clse n cierra una cnección abierta cn mysql_pcnnect. Las cneccines abierta cn esta función se llaman "persistentes". mysql_query int mysql_query(string query, int [link_identifier] ); Ejecuta una cnsulta a la base de dats activa en el servidr asciad al identificadr de cnexión. Si n se especifica, se utiliza la última cnexión abierta.fica, se utiliza la última cnexión abierta. Si n hay cnexines abiertas la función intenta establecer una. Esta función devuelve TRUE FALSE para indicar si las peracines UPDATE, INSERT DELETE han tenid éxit. Para la peración SELECT devuelve un nuev identificadr de resultad. Ver también: mysql_db_query, mysql_select_db, and mysql_cnnect. mysql_result int mysql_result(int result, int rw, mixed field); Devuelve el cntenid de la celda de un resultad. El argument 'field' puede ser un índice el nmbre del camp crrespndiente el nmbre del camp de la frma: tabla.camp. Si la clumna tiene un alias ('select f as bar frm...') se utiliza el alias en lugar del nmbre de la clumna. En lugar de esta función es preferible usar mysql_fetch_rw(), mysql_fetch_array(), and mysql_fetch_bject(), cn la que btendrems mejr rendimient.

Tutrial de PHP y MySQL (LuCAS) Página 36 de 54 mysql_select_db int mysql_select_db(string database_name, int [link_identifier] ); Devuelve: true n success, false n errr Establece la base de dats activa en el servidr. Si n se especifica identificadr de cnexión se utiliza la última cnexión abierta. Si n hay cnexines anexión abierta. Si n hay cnexines activas, la función intenta establecer una. A partir de la llamada a mysql_select_db las llamadas a mysql_query( ) actúan sbre la nueva base de dats activa. Ver también: mysql_cnnect, mysql_pcnnect, and mysql_query mysql_tablename string mysql_tablename(int result, int i); Tma cm argument un punter devuelt pr la función mysql_list_tables( ) y devuelve el nmbre de la tabla asciada al indice i. La función mysql_num_rws( ) puede ser utilizada para determinar el númer de tablas. mysql_cnnect ("lcalhst:3306"); $result = mysql_listtables ("basededats"); $i = 0; while ($i < mysql_num_rws ($result)) { $tb_names[$i] = mysql_tablename ($result, $i); ech $tb_names[$i]. "<BR>"; $i++; Cnectar a MySQL desde PHP Ya tenems dats en nuestra Base de Dats (BD), así que cn el siguiente script ns cnectarems a la BD del servidr MySQL para btener ls dats de un registr. Cnexión a MySQL <html> <bdy> $linkp> $link = mysql_cnnect("lcalhst", "nbdy"); mysql_select_db("mydb", $link); $result = mysql_query("select * FROM agenda", $link); ech "Nmbre: ".mysql_result($result, 0, "nmbre")."<br>"; ech "Dirección: ".mysql_result($result, 0, "direccin")."<br>"; ech "Teléfn :".mysql_result($result, 0, "telefn")."<br>"; ech "E-Mail :".mysql_result($result, 0, "email")."<br>"; </bdy> </html> En la primera línea del script ns encntrams cn la función mysql_cnnect(), que abre una cnexión cn el servidr MySQL en el Hst especificad (en este cas la misma máquina en la que está aljada el servidr MySQL, lcalhst). También debems especificar un usuari (nbdy, rt, etc. ), y si fuera necesari un passwrd para el

Tutrial de PHP y MySQL (LuCAS) Página 37 de 54 usuari indicad (mysql_cnnect("lcalhst", "rt", "clave_del_rt")). Si la cnexión ha tenid éxit, la función mysql_cnnect() devuelve un identificar de dicha cnexión (un númer) que es almacenad en la variable $link, sin ha tenid éxit, devuelve 0 (FALSE). Cn mysql_select_db() PHP le dice al servidr que en la cnexión $link ns querems cnectar a la base de dats mydb. Pdríams establecer distintas cnexines a la BD en diferentes servidres, per ns cnfrmarems cn una. La siguiente función mysql_query(), es la que hace el trabaj dur, usand el identificadr de la cnexión ($link), envía una instrucción SQL al servidr MySQL para que éste la prcese. El resultad de ésta peración es almacenad en la variable $result. Finalmente, mysql_result() es usad para mstrar ls valres de ls camps devuelts pr la cnsulta ($result). En este ejempl mstrams ls valres del registr 0, que es el primer registr 0, que es el primer registr, y mstrams el valr de ls camps especificads. Creación de una Base de Dats en MySQL Antes de seguir cn PHP, vams a preparar la base de dats (BD) que vams a utilizar cm ejempl. Cm servidr de BD, usarems MySQL un pequeñ y cmpact servidr de BD, ideal para pequeñas y medianas aplicacines. MySQL sprta el estándar SQL (ANSI), y además está dispnible para distintas platafrmas, incluid las "windws"dispnible para distintas platafrmas, incluid las "windws". Una vez instalad MySQL, vams a crear nuestra BD ejempl. MySQL utiliza una tabla de permiss de usuaris, pr defect, en la instalación crea el usuari rt sin passwrd. Debes crear distints usuaris cn distints permiss. Entre ells, el usuari administradr de MySQL, cn tds ls permiss, y cm recmendación de seguridad, el usuari nbdy sól cn el permis de cnsultar (SELECT), que es el que utilizarems para cnectarns al servidr de BD en nuestrs script. Vams a ver ds frmas de crear una base de dats y sus tablas. Para ell vams a crear la base de dats que ns servirá de ejempl en capituls siguientes: 1. Linea de cmands Para crear nuestra base de dats en sistemas Linux/Unix, debems ser el administradr de MySQL tener el permis pertinente para crear bases de dats, para ell harems l siguiente: mysqladmin create mydb Ya hems cread una BD, ahra le añadirems una tabla y alguns registrs, para l cual cpia el siguiente text y sálval en un archiv, que pdríams llamar mydb.dump. Crear tabla mybd CREATE TABLE agenda (id INT NOT NULL AUTO_INCREMENT, nmbre CHAR(50),direccin CHAR(100), telefn CHAR(15), email CHAR(50), KEY (id) )\g INSERT INTO agenda VALUES (0, 'Juan Pérez', 'C/ Laguna, 15. Sevilla', '95.455.55.55', 'juan@agenda.cm' )\g INSERT INTO agenda VALUES (1, 'Luis García', 'C/ Betis, 22. Cádiz', '95.655.66.33', 'luis@agenda.cm' )\g INSERT INTO agenda VALUES (2, 'Carls Rdríguez', 'C/ Sevilla, 6. Huelva', '95.113.22.77', 'carls@agenda.cm' )\g Debems tener en cuenta que ls cmands de arriba debe escribirse cada un en una sla línea. Se han separad para aumentar la legibilidad del códig. Ahra desde la línea de cmands ejecuta: cat mydb.dump mysql mydb

Tutrial de PHP y MySQL (LuCAS) Página 38 de 54 Cabe destacar el camp id, que n puede estar vací, y además es autincrementable, l cuál deberems tener en cuenta a la hra de actualizar y añadir registrs. Si n hems cmetid ningún errr, ya tenems nuestra base de dats de ejempl en el servidr MySQL. MySQL. 2. Script Una seguna frma de crear las bases de dats y tablas es utilizar las funcines que para ell ns da PHP. Para crear una base de dats tenems ds pcines, una utilizar la función mysql_create_db(), bien enviad una cnsulta SQL cn la intrucción "CREATE DATABASE mydb". Cm ejempl vams a crear un script crear_my.php que creará la anteri base de dats. <html> <bdy> <?PHP define ("CONSTANTE", "Hla Mund"); printf (CONSTANTE); </bdy> </html> $basedats = "mydb"; //cnectams cn el servidr $link = @mysql_cnnect("lcalhst", "rt", ""); // cmprbams que hems estabecid cnexión en el servidr if (! $link){ ech "<h2 align='center'>error: Impsible establecer cnección cn el servidr</h2>"; exit; // btenems una lista de las bases de dats del servidr $db = mysql_list_dbs(); // vems cuantas BD hay $num_bd = mysql_num_rws($db); //cmprbams si la BD que querms crear exite ya $existe = "NO" ; fr ($i=0; $i<$num_bd; $i++) { if (mysql_dbname($db, $i) == $basedats) { $existe = "SI" ; break; // si n existe la creams if ($existe == "NO") { /* manera 1 */ if (! mysql_create_db($basedats, $link)) { ech "<h2 align='center'>error 1: Impsible crear base de dats</h2>"; exit; /* class="cdig" style="margin-left: 50"> /* manera 2 if (! mysql_query("create DATABASE $basedats", $link)){ ech "<h2 align='center'>error2: Impsible crear base de dats</h2>"; exit; */ // craams la tabla $sql = "CREATE TABLE agenda ("; $sql.= "id INT NOT NULL AUTO_INCREMENT, "; $sql.= "nmbre CHAR(50), "; $sql.= "direccin CHAR(100), "; $sql.= "telefn CHAR(15), "; $sql.= "email CHAR(50), "; $sql.= "KEY (id) ) ";

Tutrial de PHP y MySQL (LuCAS) Página 39 de 54 if (@mysql_db_query($basedats, $sql, $link)) { ech "<h2 align='center'>la tabla se ha cread cn éxit</h2>"; else { ech "<h2 align='center'>n se ha pdid crear la tabla</h2>"; </bdy> </html> Imprtar bases de dats desde MS Access Un cas muy cmún, cm en mi cas, al cmenzar a utilizar MySQL, necesitaba migrar mis bases de dats Access de mi sistemas Windws a MySQL en Linux. La slución a este prblema, ns la aprta un módul cread pr Pedr Freire de CYNERGI. Ls pass que debems seguir para instalar este módul, y su psterir us sn: 1. Abre el archiv de Access.mdb que deseas exprtar. 2. En la ventana de bjets de la BD seleccina "Móduls", y después en "Nuev". 3. Entnces se te abrirá una ventana nueva, brra td text (códig) que haya escrit. 4. Cpia td el text del archiv de Pedr Freire y pégal en el nuev módul. 5. Cierra la ventana de códig del módul, seleccina que "Sí" desea guardar ls cambis y nmbra el módul (p.e. "MexprtSQL"). El módul es ahra parte de tu base de dats Access. 6. Vuelve a abrir el módul, pincha cn el ratón en "Diseñ" cn nuestr nuev módul seleccinad. Mueve el cursr hasta dnde aparezca la primera palabra "Functin", y presina F5 seleccina "Ejecutar" en el menú. La ejecución del módul ns creará ds archivs (esql_add.txt y esql_del.txt) en el directri C:/temp (el que trae pr defect, per l pdems cambiar). A nstrs el archiv que ns interesa es esql_add.txt, el cuál cm mejr ns parezca deberems llevárnsl a nuestra máquinaezca deberems llevárnsl a nuestra máquina Linux. Ahra sl tenems que seguir ls pas que explicams en el capítul anterir (Cmenzand cn MySQL). Primer creams la base de dats: mysqladmin create mybd Y después vlcams ls dats y en la nueva base de dats: cat esql_add.txt mysql mybd Mstrar ls dats de una cnsulta Mstrar ls dats de una cnsulta Ahra que ya sabems cnectar cn el servidr de BD, verems cm mstrar ls dats pr pantalla. Cnsulta de la BD <html> <bdy> $link = mysql_cnnect("lcalhst", "nbdy"dig">$link = mysql_cnnect("lcalhst", "nbdy"); mysql_select_db("mydb", $link); $result = mysql_query("select nmbre, email FROM agenda", $link); ech "<table brder = '1'> \n"; ech "<tr> \n"; ech "<td><b>nmbre</b></td> \n"; ech "<td><b>e-mail</b></td> \n"; ech "</tr> \n"; while ($rw = mysql_fetch_rw($result)){

Tutrial de PHP y MySQL (LuCAS) Página 40 de 54 ech "<tr> \n"; ech "<td>$rw[0]</td> \n"; ech "<td>$rw[1]</td> \n"; ech "</tr> \n"; ech "</table> \n"; </bdy> </html> En este script hems intrducid ds nvedades, la más bvia es la sentencia de cntrl while(), que tiene un funcinamient similar al de trs lenguajes, ejecuta una csa mientras la cndición sea verdadera. En esta casión while() evalúa la función mysql_fetch_rw(), que devuelve un array cn el cntenid del registr actual (que se almacena en $rw) y avanza una psición en la lista de registrs devuelts en la cnsulta SQL. La función mysql_fetch_rw() tiene un pequeñ prblema, es que el array que devuelve sól admite referencias numéricas a ls camps btenids de la cnsulta. El primer camp referenciad es el 0, el segund el 1 y así sucesivamente. En el siguiente script slucinarems este pequeñ incnveniente. Cnsulta mdificada de BD <html> <bdy> $link = mysql_cnnect("lcalhst", "nbdy&st", "nbdy"); mysql_select_db("mydb", $link); $result = mysql_query("select nmbre, email FROM agenda", $link); if ($rw = mysql_fetch_array($result)){ ech "<table brder = '1'> \n"; ech "<tr> \n"; ech "<td><b>nmbre</b></td> \n"; ech "<td><b>e-mail</b></td> \n"; ech "</tr> \n"; d { ech "<tr> \n"; ech "<td>".$rw["nmbre"]."</td> \n"; ech "<td>".$rw["email"]."</td>\n"; ech "</tr> \n"; while ($rw = mysql_fetch_array($result)); ech "</table> style="margin-left: 50">ech "</table> \n"; else { ech " La base de dats está vacia!"; </bdy> </html> Esencialmente, este script hace l mism que el anterir. Almacenams en $rw el registr actual cn la función mysql_fetch_array() que hace exactamente l mism que mysql_fetch_rw(), cn la excepción que pdems referenciar a ls camps pr su nmbre ($rw["email"]), en vez de pr un númer. Cn la sentencia if/else, asignams a $rw el primer registr de la cnsulta, y en cas de n haber ningun (else) mstrams un mensaje ("N se ha encntrad..."). Mientras que cn la sentencia d/while, ns asegurams que se ns muestren tds ls registrs devuelts pr la cnsulta en cas de haber más de un. Hay que destacar la utilización del punt (.), cm peradr para cncatenar cadenas. Un buscadr para nuestra base de dats

Tutrial de PHP y MySQL (LuCAS) Página 41 de 54 Vams a ver una aplicación, un ejempl, de td l vist hasta ahra. Escribirems un script que sirva para buscar una determinada cadena (que recibirems de un frmulari, y la almacenams en la variable $buscar), dentr de nuestra base de dats, cncretamente dentr del camp "nmbre". camp "nmbre". En primer lugar escribirems el text HTML de la página web que ns servirá cm frmulari de entrada, la llamarems frmulari.htm. Frmulari entrada <html> <bdy> <frm methd = "POST" actin = "http://mysevidr/php/buscadr.php3"> <strng>palabra clave:</strng> <input type="text" name="buscar" size="20"><br><br> <input type="submit" value="buscar"> </frm> </bdy> </html> El siguiente script de busqueda l llamarems buscadr.php3, y será el encargad de hacer la búsqueda en la BD, y devlver pr pantalla ls registrs encntrads. Script búsqueda <html> <bdy> if (!isset($buscar)){ ech "Debe especificar una cadena a buscar"; ech &qu ech "<p>debe especificar una cadena a buscar</p> \n"; ech "<p><a href=buscadr_bd.htm>vlver</p> \n"; ech "</html></bdy> \n"; exit; $link = mysql_cnnect("lcalhst", "nbdy"); mysql_select_db("mydb", $link); $sql = "SELECT * FROM agenda WHERE nmbre LIKE '%$buscar%' ORDER BY nmbre"; $result = mysql_query($sql, $link); if ($rw = mysql_fetch_array($result)){ ech "<table brder = '1'> \n"; //Mstrams ls nmbres de las tablas ech "<tr> \ndig" style="margin-left: 50">ech "<tr> \n"; mysql_field_seek($result,0); while ($field = mysql_fetch_field($result)){ ech "<td><b>$field->name</b></td> \n"; ech "</tr> \n"; d { ech "<tr> \n"; ech "<td>".$rw["id"]."</td> \n"; ech "<td>".$rw["nmbre"]."</td> \n"; ech "<td>".$rw["direccin"]."</td> \n"; ech "<td>".$rw["telefn"]."</td> \n"; ech "<td><a href='mailt:" href='mailt:".$rw["email"]."'>". $rw["email"]."</a></td> \n"; ech "</tr> \n"; while ($rw = mysql_fetch_array($result)); ech "<p><a href=buscadr_bd.htm>vlver</p> \n"; ech "</table> \n"; else { ech "<p> N se ha encntrad ningún registr!</p>\n"; ech "<p><a href=buscadr_bd.htm>vlver</p> \n";

Tutrial de PHP y MySQL (LuCAS) Página 42 de 54 </bdy> </html> L primer que cmprbams es que el cntenid de la variable $buscar que recibims del la página web frmulari.htm n es una cadena vacia, y est l hacems cn la función isset() que devuelve 'fals' si la variable que recibe está vacia. A la función le antepnems el sign admiración (!) que es equivalente a un NOT, para cnvertirl en 'verdader' en cas de que la variable esté vacia, y en es cas terminams la ejecución del script cn exit. L más imprtante de este script, es sin duda la sentencia SQL que le enviams al servidr MySQL, y más cncretamente la cndición que le impnems, WHERE nmbre LIKE '%$buscar%'. Cn la sentencia LIKE buscams cualquier currencia de la cadena cntenida en $buscar, mientras que cn ls signs de prcentaje (%) indicams el lugar de la cincidencia, pr ejempl, si hubiesems puest nmbre LIKE '%$buscar', buscariams cualquier currencia al final del camp"nmbre", mientras que si hubiesems puest nmbre LIKE '$buscar%', buscariams cualquier currencia al principi del camp "nmbre". Las últimas nvedade que hems incrprad, sn las funciónes mysql_fetch_field(), cn el que btenems infrmación acerca de las caracteríticas de cada camp, cm su nmbre, tip, lngitud, nmbre de la tabla que ls cntiene, etc. Per para ejecutar la función anterir debems clcar el punter en el primer camp, y es l lgrams cn la función mysql_field_seek(), la cál mueve el punter intern a la psición indicada. Añadir registrs En esta lección vams ver cm pdems añadir nuevs registrs a nuesta BD. La recgida de dats la vams a hacer a traves de un interfaz de web. En primer lugar vams a crear una página web cn un simple frmulari, cn ls camps que deseams. Frmulari inicial añadir BD <html> <bdy> <frm methd="pdig"><bdy> <frm methd="pst" actin="add_reg.php3"> Nmbre :<input type="text" name="nmbre"><br> Dirección:<input type="text" name="direccin"><br> Teléfn :<input type="text" name="telefn"><br> E-mail :<input type="text" name="email"><br> <input type="submit" name="enviar" value="aceptar infrmación"> </frm> </bdy> </html> Hems cread un frmulari dnde recger ls dats, y una vez intrducids ejecutams un script llamad add_reg.php3, pues veams cm es este script. añadir registrs <html> <bdy> // prcess frm $link = mysql_cnnect("lcalhst", "rt"); mysql_select_db("mydb",$db); $sql = "INSERT INTO agenda (nmbre, direccin, telefn, emt INTO agenda (nmbre, direccin, telefn, email) "; $sql.= "VALUES ('$nmbre', '$direccin', '$telefn', '$email')"; $result = mysql_query($sql); ech " Gracias! Hems recibid sus dats.\n"; </bdy>

Tutrial de PHP y MySQL (LuCAS) Página 43 de 54 </html> Cm se puede ver, para intrducir un nuev registr, utilizams la ya cncida función mysql_query(), la cúal también usams para las cnsultas, y usarems para las actualizacines, es decir una señra función. Aaah!, una csa muy imprtante, para pder añadir mdificar registrs debems tener permis para ell en el servidr MySQL, pr es en este cas me cnect cm rt, per pdría ser cualquier tr usuari. Para terminar esta lección, una pequeña frivlidad, vams a cmbinar la página web de frmulari y el ficher de script php3, en un sl ficher que llamarems add_reg.php3 (este script n l cmentaré,!alg tendran que hacer ustedes tendran que hacer ustedes ). Cmbinacin de frmulari y script <html> <bdy> if ($enviar) { // prcess frm $link = mysql_cnnect("lcalhst", "rt"); mysql_select_db("mydb",$db); $sql = "INSERT INTO agenda (nmbre, direccin, telefn, email) "; $sql.= "VALUES ('$nmbre', '$direccin', '$telefn', '$email')"; $result = mysql_query($sql); ech " Gracias! Hems recibid sus dats.\n"; else{ <frm methd="pst" actin="add_reg.php3"> Nmbre :<input type="text" name="nmbre"><br> Dirección:<input type="text&qu>dirección:<input type="text" name="direccin"><br> Teléfn :<input type="text" name="telefn"><br> E-mail :<input type="text" name="email"><br> <input type="submit" name="enviar" value="aceptar infrmación"> </frm> //end if </bdy> </html> Mdificar registrs en MySQL Primer, para mdificar hay que tener permis para ell en el servidr de BD, el rest ns viene de crrid. Primer seleccinams el registr que deseams mdificar, y lueg, mandams una cnsulta cn la mdificacines, ambas csas a la vez. Supnems que las mdificacines las recgems de un frmulari cm el de la lección anterir. Mdificar registrs pcin A <html> <bdy> if (isset($id)){ // prcess frm $link = mysql_cnnect("lcalhst", "rt"); mysql_select_db("mydb",$db); $sql = "SELECT * FROM agenda WHERE id = $id" $result = mysql_query($sql); $sql = "UPDATE agenda SET nmbre='$nmbre', direccin='$direccin', telefn='$telefn', email='$email'"; $result = mysql_query($sql); else{ ech "Debe especificar un 'id'.\n"; </bdy> </html>

Tutrial de PHP y MySQL (LuCAS) Página 44 de 54 O bien, Mdificar registrs pcin B <html> <bdy> if (icdig"> if (isset($id)){ // prcess frm $link = mysql_cnnect("lcalhst", "rt"); mysql_select_db("mydb",$db); $sql = "UPDATE agenda SET nmbre='$nmbre', direccin='$direccin', "; $sql.= "telefn='$telefn', email='$email' WHERE id=$id"; $result = mysql_query($sql); else{ ech "Debe especificar un 'id'.\n"; </bdy> </html> Brrar registrs El prces de brrar un registr es identic al de mdificar, sl que en vez de utilizar UPDATE utilizams DELETE en la sentenica SQL. Pr tant el script quedaría cm sigue. Brrad registrs de BD <html> <bdy> <bdy> if (isset($id)){ // prcess frm $link = mysql_cnnect("lcalhst", "rt"); mysql_select_db("mydb",$db); $sql = "DELETE FROM agenda WHERE id=$id") $result = mysql_query($sql); else{ ech "Debe especificar un 'id'.\n"; </bdy> </html> Td a la vez Cm resuemen de td l vist hasta ahra, vams a hacer un script dnde se mezcla td, y alg nuev. Cm ejercic, s dej que la incrpración del buscadr de la lección 5. <html> <bdy> $link = mysql_cnnect("lcalhst", "rt"); mysql_select_db("mydb",$link); //Cmprbams si hems recibid dats del frmulari (enviar) if ($enviar) { // Si recibims un id, mdificams, sin añadims un registr if ($id) { $sql = "UPDATE agenda SET nmbre='$nmbre', direccin='$direccin'"; $sql.= "telefn='$telefn', email='$email' WHERE id=$id"; ech "Registr Actualizad<p>"; else { $sql = "INSERT INTO agenda (nmbre, direccin, telefn, email) "; $sql.= "VALUES ('$nmbre', '$direccin', '$telefn', '$email')"; ech "Registr Añadid<p>";

Tutrial de PHP y MySQL (LuCAS) Página 45 de 54 // Enviams la sentencia SQL al servidr DB $result = mysql_query($sql); elseif ($delete) { // Brrams un registr $sql = "DELETE FROM agenda WHERE id=$id"; $result = mysql_query($sql); ech "Registr Brrad<p>"; else { /* Esta parte se ejecuta si n hems presinad el btn enviar, es decir n venims de un frmulari */ if (!$id) { // Mstrams tds ls registrs de nuestra BD $result = mysql_query("select * FROM agenda",$link)t;select * FROM agenda",$link); while ($myrw = mysql_fetch_array($result)) { ech $myrw["nmbre"]." - ".$myrw["direccin"]." - ".$myrw["telefn"]." - ".$myrw["email"]; ech "<a href=\$php_self?id=".$myrw["id"]."&delete=yes">brrar</a>"; ech " - "; ech "<a href=\$php_self?id=".$myrw["id"].">mdificar</a><br>"; <p><a href=" ech $PHP_SELF">Añadir un registr</a></p> <p><frm methd="pst" actin=" ech $PHP_SELF"></p> if ($id) { // editams el registr seleccinad $sql = "SELECT * FROM agenda WHERE id=$id"; $result = mysql_query($sql); $myrw = mysql_fetch_array($result); $id = $myrw["id"]; $nmbre = $myrw["nmbre"]; $direccin = $myrw["direccin"]; $telefn = $myrw["telefn"]; $email = $myrw["email"]; // enviams el id para pder editar el registr ech "<input type=hidden name="id" value=$id>"; Nmbre:<input type="text" name="nmbre" value=" ech $nmbre "><br> Dirección:<input type="text" name="direccin" value=" ech $direccin "><br> Telefn:<input type="text" name="telefn" value=" ech $telefn "><br> Email:<input type="text" name="email" value=" ech $email "><br> <input type="submit" name="enivar" value="enviar Infrmación"> </frm> // End If if ($enviar) </bdy> </html> Cabe destacar el us de $PHP_SELF, esta es una funcin interna de PHP que ns devuelve la dirección del script en el que se ejecuta. Instalación de MyODBC En este capitul describirems el prces de instalación del driver MyODBC ODBC 32 bits para Windws 9x y Windws NT. Gracias a este driver pdrems acceder desde un cliente Windws, cn MS Access pr ejempl, a un servidr remt MySQL. L primer que debems hacer es cnseguir el driver MyODBC más reciente, y para ell que mejr que pdems hacer es dirigirns a la web de MySQL.

Tutrial de PHP y MySQL (LuCAS) Página 46 de 54 Una vez que tenems el prgrama en nuestr rdenadr (cliente Windws), ejecutams el prgrama de instalación, Setup. La caja de diálgs de la instalación (Install Drivers) permite escger diverss drivers ODBC para instalar, per MyODBC sl da cm pción el driver para MySQL, el cuál seleccinarems. Una vez que el driver ODBC para MySQL ha sid instalad, la siguiente caja de diálgs ns pide cnfigura el rigen de la base de dats a cnectar. Dentr de la caja de diálgs Data Surce, elegims el btón Add, para añadir un nuev rigen de dats.

Tutrial de PHP y MySQL (LuCAS) Página 47 de 54 A cntinuación seleccinams el driver ODBC crrespndiente al de la base de dats a la cuál ns vams cnectar, en nuestr cas MySQL. Y es este mment cuand ns aparece el cuadr de cnfiguración de nuestra cnexión. Cnfiguración: Windws DNS name: es el nmbre que nstrs le darems a la cnexión. MySQL hst (name r IP): es el nmbre (www.miservidr.cm) dirección IP del servidr al cuál ns querems cnectar. Usar preferentemente la dirección IP. MySQL database name: nmbre de la base de dats MySQL a la que ns querems cnectar. User: nmbre de usuari. Passwrd: clave del usuari.

Tutrial de PHP y MySQL (LuCAS) Página 48 de 54 Prt: puert que usarems en la cnexión, generalmente es el 3306. Si es tr es necesari especificarl. Ntas: Cn MyODBC n pdems utilizar ls camps Acces de tip BINARY Ls parámetry Ls parámetrs de cnfiguración pueden ser mdificads en el menú ODBC del Panel de Cntrl de Windws 9x/NT Para realizar la cnexión a nuestra base de dats MySQL pdems utilizar el prgrama MS Access. Es necesari activar la pción "Allw big results" para evitar prblemas cn ls camps de tip TEXT. Ls usuaris de MS Access 2.0 deben activar la pción "Simulate ODBC 1.0" Cnexión remta a MySQL cn MS Access Vams a ver cm cnectarns a una base de dats MySQL que está en un servidr remt mediante un cliente Windws cn MS Access. Para ell deberems tener instalad en nuestr cliente Windws el driver MyODBC. L primer, es l primer, arrancar MS Access, después en el menú "Archiv", pinchams en "Abrir", cn l que se ns abre la, pinchams en "Abrir", cn l que se ns abre la caja de diálgs "Abrir" y en camp "Tip de archiv" seleccinams "ODBC Databases". Ahra debems seleccinar el rigen de ls dats (la cnexión) al que ns vams a cnectar, pinchams en la lengüeta de "Origen de dats de equip" y escgems el "Windws DNS name" que bien creams en la instalación de MyODBC desde el Panel de Windws en "Cntrl en Fuente de dats ODBC".

Tutrial de PHP y MySQL (LuCAS) Página 49 de 54 Una vez realizada la cnexión a nuestra base de dats remta MySQL, debems escger las tablas a vincular. Si las tablas n tienen una clave primaria, MS Access ns pedirá que elijams una, sin escgems ninguna n pdrems realizar mdificacines sbre la tabla.

Tutrial de PHP y MySQL (LuCAS) Página 50 de 54 Pues bien ya tenems nuestra cnexión establecida. Cabenems nuestra cnexión establecida. Cabe que recrdar que para pder mdificar las tablas hay que tener ls permiss pertinentes cm usuari de MySQL. Exprtar un tabla MS Access a MySQL Veams cm exprtar una tabla de una base de dats MS Access a tra base de dats remta MySQL mediante ODBC. Una vez abierta la base de dats rigen cn MS Access, seleccinams la tabla y en el menú Archiv pinchams en Exprtar.

Tutrial de PHP y MySQL (LuCAS) Página 51 de 54 En el siguiente cuadr de diálg en el camp Tip de archiv seleccinams ODBC DataBases. Asignams el nmbre que va tmar la tabla exprtada en la base de dats MySQL. Seleccinams la cnexión ODBC a la base de dats MySQL.

Tutrial de PHP y MySQL (LuCAS) Página 52 de 54 Y ya está td. Imprtar tablas desde MySQL a MS Access Veams cm hacer para imprta una tabla desde una base de dats MySQL en un servidr remt vía ODBC a una base de dats MS Access. L primimer que debems hacer es abrir cn MS Access la base de dats a la cúal querems imprtar la tabla. Pichams el btón de Nuev y en cuadr de dialg que se ns abre, seleccinams "Imprtar tabla". En el siguiente cuadr de diálg en el camp Tip de archiv seleccinams ODBC DataBases.

Tutrial de PHP y MySQL (LuCAS) Página 53 de 54 Seleccinams nuestra cnexión ODBC. Ya sl ns resta escger las tablas a imprtar.

Tutrial de PHP y MySQL (LuCAS) Página 54 de 54