PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinámico e Interactivo

Embed Size (px)

Citation preview

  • 7/21/2019 PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinmico e Interactivo

    1/14

    PHP y MySQLDomine el desarrollo de un sitioweb dinmico e interactivo (2 edicin)

    Este libro sobre PHP y MySQLva dirigido a los diseadores y desarrolladores que deseanutilizar PP y !y"#$ %ara desarrollar un sitio web dinmico e interactivo&

    En la primera parte del libro' el autor %resenta la implementacin de una base de datosMySQL lenguae "#$ ("tructured #uery $anguage)' utilizacin de las *unciones !y"#$ ycontruccin de una base de datos (tablas' +ndices y vistas) sin olvidar las t,cnicas avanzadascomo la b-squeda en te.to integral o el desarrollo de %rocedimientos almacenados&

    En la segunda partedel libro' des%u,s de una %resentacin de lasfuncionalidades bsicasdel lenguaje PHP' el autor se centra en lasnecesidades especficas del desarrollo desitios dinmicos e interactivosen*ocado en a%ortar res%uestas detalladas y com%letas a las%roblemticas /abituales gestin de *ormularios' gestin de sesiones' env+o de correoselectrnicos y' %or su%uesto' acceso a una base de datos !y"#$&

    0on abundantes eem%los comentados' este libro (escrito en las versions 1&1 de PP y 1& de!y"#$) es a la vez com%leto y resumido y le *acilita la %rctica&

    ay elementos adicionales dis%onibles %ara su descarga en esta %gina&

    Los captulos del libro:3ntroduccin 4 3ntroduccin a !y"#$ 4 5tilizar las *unciones !y"#$ 4 0onstruir una base dedatos en !y"#$ 4 6,cnicas avanzadas con !y"#$ 4 3ntroduccin a PP 4 5tilizar las *uncionesPP 4 Escribir *unciones y clases PP 4 7estionar los errores en un scri%t PP 4 7estionar los*ormularios y los v+nculos con PP 4 8cceder a una base de datos !y"#$ 4 7estionar lassesiones 4 8ne.os

    9livier E5:6E$Despus de ocho aos pasados en una empresa de servicios, donde ha ocupado con xito los puestos de Desarrollador,

    Jefe de Proyecto y finalmente Director de Proyectos, Olivier HEURTELha iniciado una actividad de

    Consultor/Formador independiente especializado en bases de datos !racle", desarrollo #eb P$P" y sistemasdecisionales% &st' certificado como !racle Certified Professional%

    9betivo de la obra

    El obetivo de este libro es iniciar al lector en el desarrollo de un sitio web dinmico e

    interactivo mediante PP y !y"#$&

    Para alcanzar este obetivo' este libro estudia con detalle los elementos necesarios %ara la

    %rogramacin de un sitio web dinmico e interactivo

    utilizacin del lenguae "#$ (Structured Query Language4 lenguae estndar de acceso a

    bases de datos relacionales) %ara consultar y modi*icar los datos de una base de datos

    !y"#$;

    creacin de una base de datos !y"#$;

    utilizacin de las caracter+sticas bsicas del lenguae PP;

  • 7/21/2019 PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinmico e Interactivo

    2/14

    acceso a una base de datos !y"#$ a %artir de PP;

    gestin de los *ormularios;

    gestin de las sesiones (autenticacin' gestin de un conte.to' utilizacin de las

    coo

  • 7/21/2019 PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinmico e Interactivo

    3/14

    En 2FFF' la versin &2 %as a tener licencia 7P$ (General Public License)&

    En 2FF' la versin A' a%arecida en 2FF?' se declar estable& Esta versin a%ort numerosas*uncionalidades y meoras o%erador UNION' DELETE%ara varias tablas' nuevas o%ciones %arala gestin de los %rivilegios' meora del rendimiento' subconsultas (A&?)' etc&

    En 2FF1' la versin 1' a%arecida en 2FF' se declar estable& Esta destacada versin introduonumerosas caracter+sticas que *altaban en !y"#$ rutinas' triggers' vistas&

    8 inicios de 2F?' se distribuy la versin 1&&

    !y"#$ est dis%onible con dos licencias di*erentes

    $a licencia 7P$&

    5na licencia comercial&

    "i usted utiliza !y"#$ en un %roducto no comercial' %uede utilizar !y"#$ con su licencia 7P$

    (versin !y"#$ 0ommunity "erver)& "i utiliza !y"#$ en un %roducto comercial' o si deseatener asistencia t,cnica %ara el %rograma' debe adquirir una licencia comercial (versin !y"#$

    Enter%rise)&

    nde conseguir PP y !y"#$

    E.isten numerosos sitios web dedicados al lenguae PP y a !y"#$& Permiten descargar los

    %roductos' consultar eem%los de scri%ts o intervenir en *oros

  • 7/21/2019 PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinmico e Interactivo

    4/14

    Direccin Contenido

    www&%/%&net (itio )eb oficial de P$P *ue ofrece la

    descar+a de P$P y un manual de referenciaen lnea muy -til% Puede ir directamente a

    la direcci.n )))%php%net/nombrefunci.n

    para acceder a la ayuda en lnea de una

    funci.n P$P%

    www&mysql&com (itio )eb oficial de 0y(12 *ue ofrece la

    descar+a de 0y(12, ayuda en lnea,

    artculos, un foro, etc%

    /tt%BBwww&%rogramacion&comB%/%B (itio )eb en espaol dedicado a P$P *ue

    ofrece noticias, manuales, as como un foro

    de discusi.n%

    www&zona%/%&com !tro sitio )eb en espaol dedicado a P$P

    en formato blo+%

    www&zend&com (itio oficial del motor de script 3end *ue

    tambin tiene los cl'sicos apartados dedescar+a, e4emplos, foro5

    www&easy%/%&org (itio )eb en in+ls y francs *ue ofrece

    +ratuitamente un producto instalable

    &asyP$P" para la plataforma #indo)s%

    &ste producto incluye6 un servidor 7pache,

    P$P y 0y(12% (.lo hay *ue descar+ar el

    producto y hacer doble clic en el e4ecutable

    *ue instala los diferentes elementos% Cinco

    minutos despus, su entorno P$P80y(12

    es operativo% &ste sitio )eb es interesante

    para *uienes deseen montar r'pidamente

    una confi+uraci.n operativa completa en

    #indo)s%

    /tt%BBwww&a%ac/e*riends&orgBenB.am%%&/tml !tro sitio )eb *ue ofrece un producto

    instalable 970PP" en diferentes

    plataformas 2inux, #indo)s, (olaris,

    0ac !( 9"% &ste producto incluye, entre

    otras cosas, un servidor 7pache, P$P y

    0y(12% 2a instalaci.n es muy sencilla y

    r'pida%

    http://www.php.net/http://www.mysql.com/http://www.programacion.com/php/http://www.zonaphp.com/http://www.zend.com/http://www.easyphp.org/http://www.apachefriends.org/en/xampp.htmlhttp://www.php.net/http://www.mysql.com/http://www.programacion.com/php/http://www.zonaphp.com/http://www.zend.com/http://www.easyphp.org/http://www.apachefriends.org/en/xampp.html
  • 7/21/2019 PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinmico e Interactivo

    5/14

    9bviamente' esta lista no es e./austiva' %ero todos los sitios web %resentes o*recen numerosos

    v+nculos /acia otros sitios& Jo lo dude y navegue %or ellos&

    6odos los eem%los de este libro /an sido %robados con K8!PP $inu. ?&H& (!y"#$ 1&&?2 y

    PP 1&1&)&

    0onvenciones de escritura

    ! PHP$a sinta.is de las *unciones PP se describe de la siguiente manera en este libro

    tipo_retornonombre_funcin(tipo_parmetronombre_parmetro)

    tipo_retorno :ipo de retorno de la funci.n%

    nombre_funcin ;ombre de la funci.n%

    tipo_parmetro :ipo del par'metro aceptado por la funci.n%

    nombre_parmetro ;ombre dado al par'metro%

    $os ti%os de datos %osibles se %resentarn en el ca%+tulo 3ntroduccin a PP& En el caso en elque la *uncin ace%te un %armetro de cualquier ti%o' se utiliza el t,rmino mixto&

    "i la *uncin no devuelve ning-n valor' la in*ormacin tipo_retorno' se omite&

    Ejemplo

    nombre_funcin(tipo_parmetronombre_parmetro)

    "i la *uncin no toma ning-n %armetro' lain*ormacin tipo_parmetroy nombre_parmetrose omiten&

    Ejemplo

    tipo_retornonombre_funcin()

    $os %armetros o%cionales se indican entre corc/etes ([])&

    Ejemplo

    tipo_retornonombre_funcin([tipo_parmetronombre_parmetro])

    "i la *uncin ace%ta varios %armetros' estos -ltimos se indican' se%arados %or una coma'

    seg-n la misma convencin&

  • 7/21/2019 PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinmico e Interactivo

    6/14

    Ejemplo

    tipo_retorno nombre_funcin(tipo_parmetro_1 nombre_parmetro_1tipo_parmetro_2nombre_parmetro_!)

    "i un %armetro %uede re%etirse un n-mero indeterminado de veces' detrs *igurar la

    indicacin L'MN&

    Ejemplo

    tipo_retornonombre_funcin(tipo_parmetronombre_parmetro [,...])

    "! MySQL$a sinta.is de las sentencias "#$ se describe de la siguiente manera en este libro

    "#L#$%# EN'*UL#

    Palabras clave del comando *%E#TE T#$LE, por e4emplo"% &n la pr'ctica,puede introducirse indistintamente en may-sculas o en min-sculas%

    pa+abra enmin,-cu+a-

  • 7/21/2019 PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinmico e Interactivo

    7/14

    3ntroduccin a las bases de datos relacionales

    ! #onceptos5na base de datos es un conunto de datos estructurados que corres%onden normalmente a un

    mbito *uncional (*acturacin' recursos /umanos' etc&)& C+sicamente' una base de datos se

    corres%onde con un cierto n-mero de arc/ivos almacenados en un dis%ositivo de

    almacenamiento&

    $os datos de una base de datos son gestionados %or un %rograma llamado Sistema de Gestin

    de Base de Datos("7>D)& Este %rograma o*rece di*erentes caracter+sticas acceso a los datos'

    gestin de las actualizaciones' meora de la integridad' control de la seguridad de acceso' etc&

    5na base de datos relacional %resenta una organizacin de los datos basada en el modelo

    relacional' desarrollado en ?@F %or Edgar Cran< 0odd& Es la estructura ms e.tendida

    actualmente&

    En una base de datos relacional' los datos se organizan en tablas enlazadas de manera lgica&

    5na tabla incluye columnas (o cam%os) que describen una *ila (o registro)& $a relacin entre las

    tablas se establece mediante una columna&

    Ejemplo

    libro

    4555545555555555555555555555555555555545555555555555554

    / i3 / titu+o / i3_co+eccion /

    4555545555555555555555555555555555555545555555555555554

    / 1 / "6" 7.! 5 De-arro++o 8eb / 1 /

    / ! / Orac+e 19: 5 #3mini-tracin / 1 /

    / ; / Orac+e 19: 5 %ecoect- ? / 1 /

    / 7 / &2@L 7 5 In-ta+acin / 1 /

    / ? / "6" 2 &2@L (

  • 7/21/2019 PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinmico e Interactivo

    8/14

    En este eem%lo' las tablas +ibroy co+eccionestn vinculadas %or lascolumnas i3_co+eccinde la tabla +ibroe i3de la tabla co+eccion&

    $a interaccin con una base de datos relacional se realiza gracias al lenguae "#$ ( Structured

    Query Language)& Este lenguae %ermite la lectura y la actualizacin de los datos' as+ como la

    de*inicin de la organizacin de los datos' la gestin de la seguridad' la meora de la

    integridad' etc& El lenguae "#$ es un lenguae normalizado' %ero los di*erentes editores debases de datos no res%etan +ntegramente el estndar&

    "! Principios de creacin de una base de datos$a creacin de una base de datos es un tema com%leo; aqu+ abordaremos slo los %rinci%ios

    bsicos' con un en*oque ms %rctico que terico&

    En una base de datos relacional' el obetivo es almacenar en di*erentes tablas los datos

    corres%ondientes a di*erentes entidades (obetos) del mbito *uncional& El obetivo es evitar las

    redundancias y /acer que un determinado dato no sea almacenado ms que una vez& En

    nuestro eem%lo anterior' los datos sobre el autor de un libro no se almacenan en la tabla libro;

    el autor de un libro es una entidad *uncional %or s+ sola y se almacena en una tabla se%arada&

    Este %roceso de se%aracin de los datos en varias tablas se llama =normalizacin=&

    5na normalizacin llevada al e.tremo %uede a*ectar al rendimiento de las consultas que deben

    leer un gran n-mero de tablas& Para meorar el rendimiento de las lecturas' es %osible

    OinvertirO el %roceso de normalizacin del modelo' agru%ando tablas' a riesgo de tener datos

    redundantes en las di*erentes *ilas& $as bases de datos de los sistemas de toma de decisiones'

    que realizan sobre todo consultas normalmente com%leas' siguen a menudo este

    %rocedimiento& 8l contrario' las bases de datos de los sistemas transaccionales' que e*ect-an

    %rinci%almente %equeas consultas sencillas y muc/as actualizaciones' res%etan el %rinci%io de

    normalizacin&

    En una base de datos relacional' cada tabla almacena la in*ormacin relativa a un obeto de

    trabao concreto o abstracto que debe ser identi*icado&

    En la tabla' cada columna almacena in*ormacin unitaria (atributo' %ro%iedad) que caracteriza

    una *ila de la tabla& 0ada columna %osee un ti%o de datos (entero' cadena de caracteres' *ec/a'

    etc&) y %uede ser obligatorio o no&

    5na columna o combinacin de columnas que identi*ica de manera -nica una *ila de una tabla

    se denomina clave candidata& El valor de una clave candidata es di*erente %ara todas las *ilas

    de la tabla (no %uede re%etirse en ning-n caso)& 5na clave candidata %uede estar constituida

    %or una columna arbitraria utilizada es%ec+*icamente %ara ello&

    $a clave %rimaria de una tabla es una de las claves candidatas de la tabla' elegida ms o

    menos arbitrariamente' %ues la clave %rimaria debe ser tambi,n obligatoria /ay una -nica

    clave %rimaria %or tabla& $as otras claves candidatas de la tabla se denominan claves -nicas&

    5na columna o combinacin de columnas de una tabla que /ace re*erencia a una clave

    candidata de otra tabla (normalmente' la clave %rimaria) se denomina clave e.terna& 5na tabla

    %uede tener varias claves e.ternas&

  • 7/21/2019 PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinmico e Interactivo

    9/14

    Ejemplo

    El esquema anterior %resenta el modelo de la base de datos utilizada en este libro& Este

    modelo es un modelo sim%li*icado de gestin de los libros de una editorial&

    Este modelo incluye las siguientes tablas

    autor 7utores de los libros%

    tema :emas *ue permiten la clasificaci.n de los libros en diferentes cate+oras base de

  • 7/21/2019 PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinmico e Interactivo

    10/14

    datos, len+ua4e de pro+ramaci.n, etc%"% 2os temas se or+anizan en dos niveles6 tema

    principal y subtema% >n subtema est' asociado a un tema primario por mediaci.n

    de la columnai3_primario% Para un tema primario, lacolumna i3_primarioest' vaca%

    co+eccion Colecciones de los libros *ue publica la editorial%

    promocion Promociones de los libros%

    +ibro 2ibros publicados por la editorial%

    autor_+ibro ?elaci.n entre los autores y los libros6 un autor puede escribir varios libros y unlibro puede tener varios autores%

    tema_+ibro ?elaci.n entre los temas y los libros6 un tema puede en+lobar varios libros y unlibro puede abarcar varios temas%

    En todas las tablas' con la e.ce%cin de autor_+ibroy tema_+ibro' la clave %rimaria es lacolumna i3& Para las tablas autor_+ibroy tema_+ibro' la clave %rimaria es la combinacinde las dos columnasi3_autori3_+ibroe i3_temai3_+ibro' res%ectivamente&

    En el estado actual' /ay una clave -nica en la columna nombrede la tabla co+eccion& En elca%+tulo 0onstruir una base de datos en !y"#$' aadiremos claves -nicas en otras tablas&

    $a tabla +ibroincluye dos claves e.ternas i3_co+eccion(/acia la tabla co+eccion)ei3_promocion(/acia la tabla promocion)&

    $a tabla autor_+ibroincluye dos claves e.ternas i3_autor(/acia la tabla autor)e i3_+ibro(/acia la tabla +ibro)&

    $a tabla tema_+ibroincluye dos claves e.ternas i3_tema(/acia la tabla tema)e i3_+ibro(/acia la tabla +ibro)&

    $a tabla temaincluye una clave e.terna i3_primario(/acia la tabla tema)&

    Trabajar con MySQL

    1. Administracin del servidor MySQLDespus de instalar 0y(12, podemos administrar el servidor 0y(12 con la cuenta de superusuario rootnada *uever con la cuenta rooten >nix o 2inux"%

  • 7/21/2019 PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinmico e Interactivo

    11/14

    =nicialmente, la cuenta rootno tiene contrasea y dispone de todos los privile+ios sobre todas las bases de datos delservidor 0y(12% &n cambio, s.lo puede conectarse localmente a partir del mismo servidor"%

    &n el captulo Construir una base de datos en 0y(12, veremos c.mo crear otros usuarios y asi+narles privile+ios%

    2. Interfaz de la lnea de comandos2a aplicaci.n cliente m2-+es un pro+rama interactivo *ue permite conectarse a un servidor 0y(12 y e4ecutarconsultas en dicho servidor% &sta aplicaci.n se encuentra en el directorio binde su instalaci.n 0y(12%

    Sintaxis

    m2-+ [5B host] [5u usuario] [5p[contrasea]] [nombre_base]

    5B host $ost al *ue debe conectarse e*uipo local predeterminado"%

    5u usuario ;ombre de usuario para la conexi.n nombre del usuario actual del sistemaoperativo de manera predeterminada"%

    5p@contrasea]

    Contrasea para la conexi.n nin+una contrasea predeterminada"% (i no se

    introduce en la lnea de comandos, se solicitar' de manera interactiva, como

    cual*uier contrasea% (i se especifica la contrasea en la lnea de comandos lo

    *ue no se recomienda por razones de se+uridad", no debe haber nin+-n espacio

    tras la opci.n 5p%

    nombre_base Aase seleccionada de entrada nin+una predeterminada"%

    Ejemplo

    [rootFxampp G]Hmysql -u root

    e+come to tBe &2@L monitor. *omman3- en3 8itB J or K:.

    'our &2@L connection i3 i- ?

    er

  • 7/21/2019 PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinmico e Interactivo

    12/14

    m2-+

    &n este e4emplo, la conexi.n se realiza localmente, sin contrasea, como usuario root% Como el usuario actuales rooten el sistema operativo, puede obtenerse el mismo resultado escribiendo simplemente el comando m2-+6

    [rootFxampp G]Hmysqle+come to tBe &2@L monitor. *omman3- en3 8itB J or K:.

    ...

    (i se re*uiere una contrasea y no desea introducirla en la lnea de comandos, puede utilizar el comando si+uiente para

    conectarse6

    [rootFxampp G]Hmysql -u root -p

    Enter pa--8or3 ****

    e+come to tBe &2@L monitor. *omman3- en3 8itB J or K:.

    ...

    (i se re*uiere una contrasea e intenta conectarse sin contrasea, obtendr' un error6

    E%%O% 19=7 (!P999) #cce-- 3enie3 for u-er rootF+oca+Bo-t

    (u-in: pa--8or3 NO)

    7simismo, si intenta conectarse a partir de un e*uipo *ue no est' autorizado, obtendr' un error similar%

    &n la interfaz de la lnea de comandos podr' introducir comandos del cliente m2-+, o bien consultas (12%

    2os comandos del cliente m2-+son interpretados directamente por el cliente m2-+% &ste comando debe escribirseen una sola lnea y la utilizaci.n del punto y coma al final del comando es innecesaria% 2os comandos del

    cliente m2-+no son sensibles a las may-sculas y min-sculas, y pueden introducirse, por lo tanto, de las dos formas%

    2as consultas (12 se envan al servidor para su e4ecuci.n% >n consulta (12 puede escribirse en varias lneas y debe

    terminarse mediante un punto y coma% 2os comandos del cliente m2-+no son sensibles a las may-sculas ymin-sculas, y pueden introducirse, por lo tanto, de las dos formas%

    2os comandos del cliente m2-+m's utilizados son los si+uientes6

    exito uit (ale de la aplicaci.n%

    u-e nombre_base >tiliza otra base de datos%

    -ource archivo_script &4ecuta un script (12%

    3e+imiter caracteres 0odifica el delimitador utilizado para terminar una consulta (12%

  • 7/21/2019 PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinmico e Interactivo

    13/14

    Ejemplo

    [rootFxampp G]Hmysql -u root

    e+come to tBe &2@L monitor. *omman3- en3 8itB J or K:.

    ...

    m2-+ use information_schema

    Databa-e cBan:e3

    m2-+ SELECT schema_name !"# schemata$

    4555555555555555555554

    / -cBema_name /

    4555555555555555555554

    / information_-cBema /

    / c3co+ /

    / m2-+ /

    / performance_-cBema /

    / pBpm2a3min /

    / te-t /

    4555555555555555555554

    ? ro8- in -et (9.91 -ec)

    m2-+ e%it

    $2e

    [rootFxampp G]H

    0's adelante, explicaremos la sintaxis de la sentencia (12 ELE*T, as como la base dedatosinformation_-cBema%

    E.iste tambi,n una sentencia USEequivalente al comando use&

    $! MySQL %or&benc'!y"#$ or

  • 7/21/2019 PHP y MySQLDomine El Desarrollo de Un Sitio Web Dinmico e Interactivo

    14/14

    0uando inicia la a%licacin' se muestra la siguiente ventana de inicio

    0on un clic en el icono ubicado al lado del te.to MySQL #onnections%odr crear una nueva

    cone.in a trav,s del siguiente cuadro de dilogo