Professional Documents
Culture Documents
"e*de Cero
Copyright 2013 + C,*ar 'ayta. "erecho* re*er-ado*. Prohibida la
reproduccin y/o transmisin total o parcial de este documento sin consentimiento por escrito del autor.
#.clu*i/n de Re*pon*abilidad
Este reporte ha sido escrito para proveer informacin sobre INGRESA E !"PI#" A#A. Se han hecho todos los esfuer$os posibles para %ue este reporte sea lo m&s e'acto y adecuado posible. Sin embar(o puede %ue e'istan errores orto(r&ficos y/o de contenido. a informacin est& actuali$ada a la fecha de la publicacin y est& basada en la e'periencia/investi(acin del autor. Por esta ra$n se debe considerar como una (u)a *nicamente. El propsito del reporte es educativo y tanto el autor como la editorial no (aranti$an %ue el contenido sea +,,- e'acto por lo %ue no se responsabili$an por nin(*n tipo de error u omisin. !anto el autor como la editorial se liberan de cual%uier tipo de responsabilidad a cual%uier persona o entidad por da.os o p/rdidas causados o supuestamente causados0 directa o indirectamente por este reporte. Si no est& de acuerdo con le e'clusin anterior por favor no lea y devuelva este reporte para obtener un reembolso completo.
2
Copyright 2013 www.clubdeprogramacion.com
3
Copyright 2013 www.clubdeprogramacion.com
Tabla de Contenido
IN!R"51##I"N A P6P ....................................................................................... 7 891E ES P6P: ................................................................................................ 7 8#mo funciona P6P: ...................................................................................... 7 4I PRI4ER S#RIP!.......................................................................................... 7 #"N"#IEN5" A SIN!A;IS 5E P6P .................................................................. < =ARIA> ES? .................................................................................................... < #"NS!AN!ES? ................................................................................................. < "PERA5"RES? ................................................................................................ @ SEN!EN#IAS #"N5I#I"NA ES? ...................................................................... A SEN!EN#IAS #I# I#AS " >1# ES? .............................................................. +, B1N#I"NES? ................................................................................................. +C >I> I"!E#A 5E B1N#I"NES ........................................................................ +A >ASE 5E 5A!"S D 4ES9 ............................................................................... F+ 91E ES 1NA >ASE 5E 5A!"S? ..................................................................... F+ 4ES9 ? ......................................................................................................... FF ENG1AGE S9 ?............................................................................................ FC IN!EGRAN5" P6P E 4ES9 ............................................................................ F< #"NE#!AR A 4ES9 5ES5E P6P? ............................................................... F< 4"S!RAR !"5"S "S 5A!"S 5E 1NA #"NS1 !A S9 ? ............................. F@ AHA5IR REGIS!R"S A N1ES!RA >ASE 5E 5A!"S? ..................................... FI 4"5IBI#AR REGIS!R"S 5E N1ES!RA >ASE 5E 5A!"S? ............................ J, >"RRAR REGIS!R"S 5E N1ES!RA >ASE 5E 5A!"S? ................................. JF
4
Copyright 2013 www.clubdeprogramacion.com
INTRODUCCION A PHP
QUE ES PHP?
P6P es un len(ua3e de script del lado del servidor. os scripts P6P est&n incrustados en los documentos 6!4 y el servidor los interpreta y e3ecuta antes de servir las p&(inas al cliente El cliente no ve el cdi(o P6P sino los resultados %ue produce
Cmo funciona PHP?
A diferencia de Gava o GavaScript %ue se e3ecutan en el nave(ador0 P6P se e3ecuta en el servidor0 por eso nos permite acceder a los recursos %ue ten(a el servidor como por e3emplo podr)a ser una base de datos. El pro(rama P6P es e3ecutado en el servidor y el resultado enviado al nave(ador. El resultado es normalmente una p&(ina 6!4 .
MI PRIMER SCRIPT
=amos a crear un script sencillo para entender como funciona php K6!4 L K6EA5L K!I! EL4i primer pro(rama en P6PK/!I! EL K/6EA5L K>"5EL K:php echo MNKPL6ola mundoK/PLOPQ :L K/>"5EL K/6!4 L Parece una pa(ina html comun pero lo %ue se encuentra dentro de los s)mbolos K:php y :L es codi(o php %ue el servidor interpretara para mostrar las eti%uetas correspondiente
5
Copyright 2013 www.clubdeprogramacion.com
as variables son espacios de memoria %ue sirven para almacenar datos %ue pueden variar durante el pro(reso del pro(rama0 en P6P deben estar precedidas por si(no dlar MRP0 y le asi(namos contenido con el si(no i(ual MSP. P6P distin(ue entre may*sculas y min*sculas0 por lo %ue no es lo mismo Rmyvar %ue R4yvar0 /stas son dos variables totalmente distintas. KhtmlL KbodyL K:php Rmyvar S TSE=I ATQ R4yvar S T4A5RI5TQ //Esto imprimir& SE=I A echoMRmyvar.OKbrLOPQ //Esto imprimir& 4A5RI5 echoMR4yvar.OKbrLOPQ :L K/bodyL K/htmlL #omo ven se ha utili$ado dos formas de escribir echo0 en may*sculas y en min*sculas0 para indicar %ue P6P no las distin(ue a la hora de usar funciones o sentencias del len(ua3e.
CONSTANTES
as constantes son similares a las variables0 con la salvedad de %ue no llevan el si(no dlar delante0 y slo la podemos asi(nar una ve$. Para definir una constantes usaremos la funcin define como si(ue? KhtmlL KbodyL K:php define MT#"NS!AN!ET0 T6ola 4undoTPQ printf M#"NS!AN!EPQ
6
Copyright 2013 www.clubdeprogramacion.com
:L K/bodyL K/htmlL
OPERADORES
ARITM!TICOS Ra U Rb Suma Ra V Rb Resta Ra W Rb 4ultiplicacin Ra / Rb XssScodi(oenlineaLRa / Rb 5ivisin Ra - Rb Resto de la divisin de Ra por Rb RaUU Incrementa en + a Ra RaVV Resta + a Ra CONCATENADORES a concatenacin de cadenas se mane3a con el punto. Ra S T6olaTQ Rb S Ra . T4undoTQ // Ahora Rb contiene T6ola 4undoT En este punto hay %ue hacer una distincin0 la interpretacin %ue hace P6P de las simples y dobles comillas. En el se(undo caso P6P interpretar& el contenido de la cadena. Ra S T4undoTQ echo S Y6ola RaYQ //Esto escribir& T6ola RaT echo S T6ola RaTQ //Esto escribir& T6ola 4undoX%Q //Esto escribir& T6ola 4undoT COMPARADORES Ra Ra Ra Ra Ra Ra K Rb Ra menor %ue Rb L Rb Ra mayor %ue Rb KS Rb Ra menor o i(ual %ue Rb LS Rb Ra mayor o i(ual %ue Rb SS Rb Ra i(ual %ue Rb ZS Rb Ra distinto %ue Rb
LO"ICOS Ra AN5 Rb =erdadero si ambos son verdadero Ra XX Rb =erdadero si ambos son verdadero Ra "R Rb =erdadero si al(uno de los dos es verdadero
7
Copyright 2013 www.clubdeprogramacion.com
Ra ZZ Rb =erdadero si al(uno de los dos es verdadero Ra ;"R Rb =erdadero si slo uno de los dos es verdaderoK>PQ de verdadero ZRa =erdadero si Ra es falso0 y rec)procamente
DE ASI"NACION Ra Ra Ra Ra Ra Ra S Rb Asi(na a Ra el contenido de Rb US Rb e suma a Rb a Ra VS Rb e resta a Rb a Ra WS Rb 4ultiplica Ra por Rb y lo asi(na a Ra /S Rb 5ivide Ra por Rb y lo asi(na a Ra .S Rb A.ade la cadena Rb a la cadena Ra
SENTENCIAS CONDICIONALES
as sentencias de control permiten e3ecutar blo%ue de cdi(os dependiendo de unas condiciones. Para P6P el , es e%uivalente a Balso y cual%uier otro n*mero es =erdadero. I#$$$ELSE a sentencia IB...E SE permite e3ecutar un blo%ue de instrucciones si la condicin es =erdadera y otro blo%ue de instrucciones si /sta es Balsa. Es importante tener en cuenta % instrucciones si /sta es Balsa. Es importante tener en cuenta %ue la condicin %ue evaluemos ha de estar encerrada entre par/ntesis Mesto es aplicable a todas las sentencias de controlP.
if McondicinP [ Este blo%ue se e3ecuta si la condicin es =ER5A5ERA \ else [ Este blo%ue se e3ecuta si la condicin es BA SA \
E'iste una forma sencilla de usar la sentencia IB cuando no tenemos %ue usar el E SE y solo tenemos %ue e3ecutar una l)nea de cdi(o. if MRa L CP echo TRa es mayor %ue CTQ I#$$$ELSEI#$$$ELSE a sentencia IB...E SEIB...E SE permite e3ecuta varias condiciones en cascada. Para este caso veremos un e3emplo0 en el %ue utili$aremos los
8
Copyright 2013 www.clubdeprogramacion.com
operadores l(icos. K:php if MRnombre SS TTP[ echo T!* no tienes nombreTQ \ elseif MMRnombreSSTevaTP "R MRnombreSSTEvaTPP [ echo T echo T!u nombre es E=ATQK \ else [ echo T!u nombre es T . RnombreQ \
S%ITCH$$$CASE$$$DE#AULT 1na alternativa a IB...E SEIB...E SE0 es la sentencia S]I!#60 la cu&l eval*a y compara cada e'presin de la sentencia #ASE con la e'presin %ue evaluamos0 si lle(amos al final de la lista de #ASE y encuentra una condicin =erdadera 0 e3ecuta el cdi(o de blo%ue %ue haya en 5EBA1 !. Si encontramos una condicin verdadera debemos e3ecutar un >REA^ para %ue la sentencia S]I!#6 no si(a buscando en la lista de #ASE. =eamos un e3emplo. K:php s2itch MRdiaP [ case T unesT? echo T6oy es unesTQ brea_Q case T4artesT? echo T6oy es 4artesTQ brea_Q case T4iercolesT? echo T6oy es 4iercolesTQ brea_Q case TGuevesT? echo T6oy es GuevesTQ brea_Q case T=iernesT? echo T6oy es =iernesTQ brea_Q case TS&badoT? echo T6oy es S&badoTQ brea_Q case T5omin(oT? echo T6oy es 5omin(oTQ
9
Copyright 2013 www.clubdeprogramacion.com
nos permiten iterar con3untos de instrucciones0 es decir repetir la e3ecucin de un con3unto de instrucciones mientras se cumpla una condicin. %HILE a sentencia ]6I E e3ecuta un blo%ue de cdi(o mientras se cumpla una determinada condicin. K:php Rnum S +Q 2hile MRnum K 7P [ echo RnumQ RnumUU \ :L Podemos romper un bucle ]6I E utili$ando la sentencia >REA^. K:php Rnum S +Q 2hile MRnum K 7P [ echo RnumQ if MRnum SS JP[ echo TA%u) nos salimos `nTQ brea_ \ RnumUU \ :L DO$$$%HILE Esta sentencia es similar a ]6I E0 salvo %ue con esta sentencia primero e3ecutamos el blo%ue de cdi(o y despu/s se eval*a la condicin0 por lo %ue el blo%ue de cdi(o se e3ecuta siempre al menos una ve$. K:php
10
Copyright 2013 www.clubdeprogramacion.com
Rnum S +Q do [ echo RnumQ if MRnum SS JP[ echo TA%u) nos salimos `nTQ brea_ \ RnumUU \ 2hile MRnum K 7PQ :L #OR El bucle B"R no es estrictamente necesario0 cual%uier bucle B"R puede ser sustituido f&cilmente por otro ]6I E. Sin embar(o0 el bucle B"R resulta muy *til cuando debemos e3ecutar un blo%ue de cdi(o a condicin de %ue una variable se encuentre entre un valor m)nimo y otro m&'imo. El bucle B"R tambi/n se puede romper mediante la sentencia >REA^. K:php for MRnum S +Q Snum KS7Q RnumUUP[ echo RnumQ if MRnum SS JP[ echo TA%u) nos salimos `nTQ brea_ \ \ :L ARRA&S as tablas Mo array en in(l/sP0 son muy importantes en P6P0 ya %ue (eneralmente0 las funciones %ue devuelven varios valores0 como las funciones li(adas a las bases de datos0 lo hacen en forma de tabla. En P6P disponemos de dos tipos de tablas. El primero ser)a el cl&sico0 utili$ando )ndices? K:php Rciudadab S TPar)sTQ Rciudadab S TPar)sTQ Rciudadab S TRomaTQ Rciudadab S TSevillaTQ Rciudadab S T ondresTQ print MTyo vivo en T . RciudadaFb . TK>RL`nTPQ
11
Copyright 2013 www.clubdeprogramacion.com
:L Esta es una forma de asi(nar elementos a una tabla0 pero una forma m&s formal es utili$ando la funcin array Rciudad S arrayMTPar)sT0 TRomaT0 TSevillaT0 T ondresTPQ //contamos el n*mero de elementos de la tabla Rnumelentos S countMRciudadPQ //imprimimos todos los elementos de la tabla for MRiS,Q Ri K RnumelentosQ RiUUP [ print MT a ciudad Ri es RciudadaRib K>RL`nTPQ \ :L Si no se especifica0 el primer )ndice es el cero0 pero podemos utili$ar el operador SL para especificar el indice inicial. Rciudad S arrayM+SLTPar)sT0 TRomaT0 TSevillaT0 T ondresTPQ 1n se(undo tipo0 son las tablas asociativas0 en las cu&les a cada elemento se le asi(na un valor M_eyP para acceder a /l. Para entenderlo0 %ue me3or %ue un e3emplo0 supon(amos %ue tenemos una tabla en al %ue cada elemento almacena el n*mero de visitas a nuestra 2eb por cada d)a de la semana. 1tili$ando el m/todo cl&sico de )ndices0 cada d)a de la semana se representar)a por un entero0 , para lunes0 + para martes0 etc. Rvisitasa,b S F,,Q Rvisitasa+b S +A<Q si usamos las tablas asociativas ser)a RvisitasaTlunesTb S F,,Q RvisitasaTmartesTb S +A<Q
o bien0 Rvisitas S arrayMTluodi(oTLRvisitas S arrayMTlunesTSLF,,Q TmartesTSL+A<PQ Ahora bien0 recorrer una tabla y mostrar su contenido es sencillo utili$ando los )ndices0 pero 8cmo hacerlo en las tablas asociativas:. a manipulacin de las tabas asociativas se a hace trav/s de funciones %ue act*an sobre un puntero interno %ue indica la posicin. Por defecto0 el puntero se sit*a en el primer elemento a.adido en la tabla0 hasta %ue es movido por una funcin?
12
Copyright 2013 www.clubdeprogramacion.com
current V devuelve el valor del elemento %ue indica el puntero pos V reali$a la misma funcin %ue current reset V mueve el puntero al primer elemento de la tabla end V mueve el puntero al *ltimo elemento de la tabla ne't V mueve el puntero al elemento si%uiente prev V mueve el puntero al elemento anterior countXn count V devuelve el n*mero de elementos de una tabla. =eamos un e3emplo de las funciones anteriores? K:php Rsemana S arrayMTlunesT0 TmartesT0 Tmi/rcolesT0 T3uevesT0 TviernesT0 Ts&badoT0 TdomindoTPQ echo countMRsemanaPQ //@ //situamos el puntero en el primer elemento resetMRsemanaPQ echo currentMRsemanaPQ //lunes ne'tMRsemanaPQ echo posMRsemanaPQ //martes endMRsemanaP echo posMRsemanaPQ //domin(o prevMRsemanaPQ echo currentMRsemanaPQ //s&bado :L Recorrer una tabla con las funciones anteriores se hace un poco lioso0 para ello se recomienda utili$ar la funcin eachMP. K:php Rvisitas S arrayMTlunesTSLF,,0 TmartesTSL+A<0 Tmi/rcolesTSL+I,0 T3uevesTSL+@7PQ resetMRvisitasPQ 2hile MlistMRclave0 RvalorP S eachMRvisitasPP [ echo Tel d)a Rclave ha tenido Rvalor visitasK>RLTQ \ :L a funcin eachMPdevuelve el valor del elemento actual0 en este caso0 el valor del elemento actual y su clave0 y despla$a el puntero al si(uiente0 cuando lle(a al final devuelve BA S"0 y termina el bucle 2hileMP.
13
Copyright 2013 www.clubdeprogramacion.com
#UNCIONES
4uchas veces0 cuando traba3amos en el desarrollo de una aplicacin0 nos sur(e la necesidad de e3ecutar un mismo blo%ue de cdi(o en diferentes partes de nuestra aplicacin. 1na Buncin no es m&s %ue un blo%ue de cdi(o al %ue le pasamos una serie de par&metros y nos devuelve un valor. #omo todos los len(ua3e de pro(ramacin0 P6P trae una (ran cantidad de funciones para nuestro uso0 pero las funciones m&s (ran cantidad de funciones para nuestro uso0 pero las funciones m&s importantes son las %ue nosotros creamos. Para declara una funcin debemos utili$ar la instruccin NfunctionO se(uido del nombre %ue le vamos a dar0 y despu/s entre par/ntesis la lista de ar(umentos separados por comas0 aun%ue tambi/n habr& funciones %ue no reco3an nin(*n ar(umento. function nombrecdecfuncion Mar(c+0 ar(cF0 ...0 ar(cnP [ blo%ue de cdi(o \ #ual%uier instruccin v&lida de P6P puede aparecer en el cuerpo Mlo %ue antes hemos llamado blo%ue de cdi(oP de una funcin0 incluso otras funciones y definiciones de clases. En P6P no podemos redefinir una funcin previamente declarada0 y adem&s en P6PJ0 las funciones deben definirse siempre antes de %ue se invo%uen0 en P6PC este re%uerimiento ya no e'iste.
LA INSTRUCCI'N RETURN #uando invocamos una funcin0 la e3ecucin del pro(rama pasa a e3ecutar las l)neas de cdi(o %ue conten(a la funcin0 y una ve$ terminado0 el pro(rama continua su e3ecucin desde el punto en %ue fu/ llamada la funcin. E'iste una manera de terminar la e3ecucin de la funcin aun%ue a*n haya cdi(o por e3ecutar0 mediante el u haya cdi(o por e3ecutar0 mediante el uso de la instruccin return terminamos la e3ecucin del cdi(o de una funcin y devolvemos un valor. Podemos tener varios return en nuestra funcin0 pero por lo (eneral0 cuantos m&s return ten(amos menos reutili$able ser& nuestra funcin.
14
Copyright 2013 www.clubdeprogramacion.com
K:php function mayor MR'0 RyP [ if MR' L RyP [ return R'.T es mayor %ue T.RyQ \ else [ return Ry.T es mayor %ue T.R'Q \ \ :L Aun%ue %uedari& me3or? K:php function mayor MR'0 RyP [ Rms( S TTQ if MR' L RyP [ Rms( S R'.T es mayor %ue T.RyQ \ else [ Rms( S Ry.T es mayor %ue T.R'Q \ return Rms(Q \ :L #on la instrucin return puede devolverse cual%uier tipo de valor0 incluyendo tablas y ob3etos. P6P solo permite a las funciones devolver un valor0 y para solventar este pe%ue.o problema0 si %ueremos %ue nuestra funcin devuelva varios tenemos %ue utili$ar una tabla MarrayP. PAR(METROS E'isten dos formas de pasar los par&metros a una funcin0 por valor o por referencia. #uando pasamos una variable por valor a una funcin0 ocurra lo %ue ocurra en /sta en nada modificar& el contenido de la variable. 4ientras %ue si lo hacemos por referencia0 cual%uier cambio acontecido en la funcin sobre la variable lo har& para siempre. E variable lo har& para siempre. En P6P0 por defecto0 las variables se pasan por valor. Para hacerlo por referencia debemos anteponer un ampersand MXP a la variable.
15
Copyright 2013 www.clubdeprogramacion.com
K:php function suma MR'0 RyP [ R' S R' U +Q return R'URyQ \ Ra S +Q Rb S FQ //par&metros por valor echo suma MRa0 RbPQ // imprimir& C echo RaQ // imprimir& + //par&metros por referencia echo suma MXRa0 RbPQ // imprimir& C echo RaQ //imprimir& F :L Si %ueremos %ue un par&metro de una funcin se pase siempre por referencia debemos anteponer un ampersand MXP al nombre del par&metro en la definicin de la funcin. En P6P podemos definir valores por defecto para los par&metro de una funcin. Estos valores tienen %ue ser una e'presin constante0 y no una variable o miembro de una clase. Adem&s cuando usamos par&metros por defectos0 /stos deben estar a la derecha de cual%uier par&metro sin valor por defecto0 de otra forma P6P nos devolver& un error. K:php function suma MR'S+0 RyP [ R' S R' U +Q return R'URyQ \ :L Si e3ecutarmos esta funcin nos dar)a error0 ya %ue hemos dado a R' el valor + por defecto y la hemos colocado a la i$%uierda de un par&metro %ue no tiene valor por defecto. a forma correcta es? K:php function suma MRy0 R'S+P [ R' S R' U +Q return R'URyQ \ :L
16
Copyright 2013 www.clubdeprogramacion.com
#abe destacar %ue P6PJ no soporta un n*mero variables de par&metros0 pero P6PC s). le(ados a este punto0 damos un paso atr&s y volvemos a las variables0 para distin(uir entre variables est&ticas MstaticP y (lobales M(lobalP. as variables est&ticas se definen dentro de una funcin0 la primera ve$ %ue es llamada dicha funcin la variable se iniciali$a0 (uardando su valor para posteriores llamadas. K:php function contador MP [ static Rcount S ,Q Rcount S Rcount U +Q return RcountQ \ echo contadorMP.TK>RLTQ // imprimir& + echo contadorMP.TK>RLTQ // imprimir& F echo contadorMP.TK>RLTQ // imprimir& J :L as variables (lobales0 no se pueden declarar dentro de una funcin0 lo %ue hacemos el llamar a una variable %ue ya ha sido declarada0 tomando el valor %ue ten(a en ese momento0 pudiendo ser modificado en la funcin. K:php var Ra S +Q function vercaMP [ (lobal RaQ echo Ra.TK>RLTQ // imprimir& el valor de Ra Ra US +Q // sumamos + a Ra \ echo vercaMPQ // imprimir& + echo vercaMPQ // imprimir& F Ra S @Q echo vercaMPQ // imprimir& @ echo vercaMPQ // imprimir& A :L
17
Copyright 2013 www.clubdeprogramacion.com
BIBLIOTECA DE #UNCIONES
E'isten muchas bibliotecas de funciones en P6P Al(unos e3emplos? d d d d d d d Bunciones Bunciones Bunciones Bunciones Bunciones Bunciones Bunciones de manipulacin de cadenas de fecha y hora de arrays de ficheros matem&ticas de bases de datos de red
Al(unas bibliotecas re%uieren la instalacin de componentes adicionales !odas las funciones de biblioteca est&n comentadas en la documentacin de P6P
#UNCIONES DE MANIPULACI'N DE CADENAS e'plodeMP 5ivide una cadena en subcadenas array e'plode Mstrin( separator0 strin( strin( a0 int limitbP rtrimMP0 ltrimMP0 trimMP Eliminan caracteres a la derecha0 a la i$%uierda o por ambos lados de una cadena strin( rtrim M strin( str a0 strin( charlistbP strstrMP >usca la primera ocurrencia de una subcadena strtolo2erMP / strtoupperMP #onvierte una cadena a min*scula / may*scula strcmpMP / strcasecmpMP #ompara dos cadenas con/sin distincin de may*sculas strlenMP #alcula la lon(itud de una cadena
18
Copyright 2013 www.clubdeprogramacion.com
#UNCIONES DE #ECHA & HORA dateMP Bormatea una fecha se(*n un formato dado E3emplo? Rfecha S date MT3/n/E 6?iTPQ print MTRfechaTPQ Resultado? F</I/F,,7 +@?J< strtotimeMP #onvierte una fecha en un timestamp de 1NI; E3emplo? Rfecha S date MT3/n/ET0 strtotimeMN7 april F,,+TPPQ print MTRfechaTPQ Resultado? 7/C/F,,+ #UNCIONES DE ARRA&S arrayccountcvaluesMP #alcula la frecuencia de cada uno de los elementos de un array arraycsearchMP >usca un elemento en un array countMP #uenta los elementos de un array sortMP0 rsortMP "rdena y reinde'a un array MrSdecrecienteP _sortMP0 _rsortMP "rdena por claves un array MrSdecrecienteP AHORRANDO CODI"O #mo ahorramos l)neas de cdi(o Por lo (eneral0 todos nuestros script tienen partes de cdi(o i(uales0 las funcines includeMP y re%uireMP nos van ahorrar muchas de estas lineas de cdi(o. Ambas funciones hacen una llamada a un determinado fichero pero de dos maneras diferentes0 con includeMP0 insertamos lo %ue conten(a el fichero %ue llamemos de manera literal en nuestro script0 mientras %ue con re%uireMP0 le decimos %ue el script necesitar& parte de cdi(o de se
19
Copyright 2013 www.clubdeprogramacion.com
encuentra en el fichero %ue llama re%uireMP. #omo todo esto es un poco lioso0 veamos unos e3emplos %ue nos lo aclar&. K:php include MTheader.incTPQ echo T6ola 4undoTQ include MTfooter.incTPQ :L Si tenemos encuenta %ue el fichero header.inc contiene? KhtmlL KbodyL y el fichero footer.inc contiene? K/bodyL K/htmlL Nuestro script ser)a e%uivalente a? KhtmlL KbodyL K:php K:php echo T6ola 4undoTQ :L K/bodyL K/htmlL Ahora veamos el script de e3emplo para la funcin re%uireMP? K:php re%uire MTconfi(.incTPQ include MTheader.incTPQ echo RcadenaQ include MTfooter.incTPQ :L 5onde el fichero confi(.inc tendr)a al(o como /sto? K:php Rcadena S T6ola 4undoTQ :L
20
Copyright 2013 www.clubdeprogramacion.com
1na base de datos Msea cual seaP es un soporte di(ital %ue tiene como fin el almacenamiento masivo de informacin en formato te'to plano. Aun%ue e'isten formas de (uardar otro tipo de datos como im&(enes y archivos no es recomendable hacerlo0 lo me3or en esos casos es (uardar dichos archivos en un directorio y (uardar la ruta en la base de datos. as bases de datos0 son utili$adas en sistemas %ue re%uieren una interaccin fluida con la aplicacinQ estas se encar(an muchas veces de administrar0 editar0 y dar de alta. 1sualmente la base de datos0 est& li(ada a la pro(ramacin directa del site0 causando %ue una edicin en ella cause una modificacin directa en lo %ue ve el usuario. E3emplos de aplicacin de una base de datos Menti/ndase %ue est&n li(adas a un len(ua3e din&mico como P6P o ASPP? E D comerce0 A(endas0 ibros de visitas0 foros0 portales0 etc ESTRUCTURA NORMAL DE UNA DB 1na base de datos0 a fin de ordenar la informacin de manera l(ica0 posee un orden %ue debe ser cumplido para acceder la informacin de manera coherente. #ada base de datos tiene una o m&s tablas0 las cuales cumplen la funcin de contener los campos. 1n e3emplo de tabla ser)a NcontactosO. Para entender me3or esto0 ser)a como un libro en el e'cel. 4ientras %ue los campos ser)an las columnas del e'cel donde se ordena cada datos insertado al libro. E3emplo Nid0 nombres0 apellidos0 tel/fonoO. E lue(o finalmente tenemos las filas Mro2P0 %ue son la informacin propiamente dicha. Por consi(uiente una base de datos posee el si(uiente orden 3er&r%uico? d !ablas d #ampos d Re(istros
21
Copyright 2013 www.clubdeprogramacion.com
M&SQL
Es una base de datos con licencia GP basada en un servidor0 puede ser slo creada por cdi(o. 1sualmente se utili$a el pro(rama php4yAdmin como soporte para administrar la base de datos en el nivel de pro(ramacin Ma un usuario normal le resultar)a complicado utili$arla desde linea de comandosP.
ASPECTOS B(SICOS DE PHPM&ADMIN php4yAdmin es una herramienta escrita en P6P dise.ada para la administracin de las bases de datos 4yS9 en la ]eb. Actualmente0 php4yAdmin puede crear y eliminar bases de datos0 crear/eliminar/modificar tablas0 eliminar/modificar/incluir re(istros0 e3ecutar sentencias de S9 0 y mane3ar campos con llaves. Al acceder a la base de datos deberas lo(earte con un usuario y pass2ord Mrecuerda el usuario por default y administrador es root y el pass2ord es el %ue colocaste en la instalacion de appservP CREAR UNA TABLA EN BASE DE DATOS a parte i$%uierda se usa para nave(acin en php4yAdmin. All) podr&s encontrar tus bases de datos0 en caso ten(as al(una. !an pronto como crees tablas0 se mostrar&n deba3o e'actamente de la base de datos a la %ue pertenecen. #rearemos una tabla %ue se llame T5istritoT. 1sa la opcin de #reate ne2 table. Escribe en el lu(ar correcto el nombre de la table? 5istrito0 y la cantidad de columnas %ue tendr& la tabla MJ en este casoP en el ca3n de te'to BIE 5S. Puedes eliminar la tabla usando la funcin 5R"P.
Ahora captura la informacin adecuada en los respectivos ca3ones de te'to? I5 int < dele(acion char +,, colonia char +,, a columna ENG6! indica el valor m&'imo %ue se permite en ese campo para captura. 6ay distintos tipos de valores %ue se puede utili$ar para la columna !EPE. char0 varchar0 int0 numeric0 etc. En este caso utili$aremos char0 %ue tiene un valor fi3o y acepta caracteres alfan*mericos. os tipos !EPES especificados en este e3emplo no necesariamente son los m&s eficientes a la hora de su uso. 5ebemos determinar cuidadosamente el tipo de valor %ue se utili$ar& dependiendo de la informacin %ue se almacenar&. a columna I5 se usar& como llave primaria0 o Primary ^ey0 para esta tabla0 y se colocar& en el tip autocincrement0 el cual (enerar& de manera autom&tica un n*mero consecutivo. #oloca el 5efault en cero ,. #uando finalices de capturar los datos0 da clic en SA=E0 o (uardar. Aparecer& una ventana similar a la si(uiente?
ZBelicidadese 6as creado tu primera tabla. os datos correspondientes a los comandos utili$ados para crear los campos tambi/n se muestra en la pantalla. No es obli(atorio ni indispensable0 pero con el tiempo empe$ar&s a reconocer comandos de 4yS9 en los mensa3es de php4yAdmin. Puedes utili$ar 5R"P para eliminar una tabla o al(uno de sus campos. INSER!AN5" 5A!"S EN 1NA !A> A 5a clic en INSER! y una pantalla como la si(uiente aparecer&?
Ahora captura los datos correspondientes a cada record. a columna I5 es autom&tica de manera %ue no debes de colocarla. Es importante saber %ue si te sientes perdido en php4yAdmin0 es suficiente darle clic a 6"4E en la parte i$%uierda y te llevar& e'actamente al lu(ar de inicio. 5ale clic a SA=E y la informacin se almacenar& en la tabla 5istrito. a ima(en %ue se mostr con anterioridad es la %ue aparece cuando insertas informacin en una tabla usando el comando INSER! de S9 . Puedes
23
Copyright 2013 www.clubdeprogramacion.com
a.adir m&s m&s de un re(istro por medio de utili$ar el botn de radio Insert Another ne2 ro20 en la forma de insercin. #uando finalices la insercin de datos0 puedes confirmar su insercin y nave(ar la informacin d&ndole clic a >R"]SE. Puedes darle clic a cada re(istro para editarlo o eliminarlo.
LEN"UA*E SQL
Este es el len(ua3e %ue se utili$a para conectarse a una base de datos. Son sentencias0 %ue reali$an un %uery MconsultaP a la 5> a fin de %ue esta les responda con una cantidad de datos limitada se(*n lo buscado. >&sicamente0 e'isten much)simas funciones de S9 0 pero detallar/ las m&s usuales0 con las cuales se pueden lo(rar una interaccin buena con la 5>. INSERTAR DATOS A UNA TABLA ESPECI#ICA INSER! IN!" fNombre !ablaf Mf Nombre #ampo f 0 f Nombre #ampo f 0 fNombre #ampofP =A 1ES MY=alorY0 Y =alorY0 Y =alor YPQ EDITAR DATOS DE UNA #ILA ESPECI#ICA 1P5A!E f Nombre !abla f SE! f Nombre #ampo f S Y=alorY0 f Nombre #ampo f S Y =alorY0f Nombre #ampo f S Y =alorY ]6ERE fidf S YNumero BilaYQ Nota? Siempre se incluye el campo id0 a fin de identificar con un valor num/rico una fila. BORRAR UNA #ILA 5E E!E BR"4 f Nombre !abla f ]6ERE fidfSYNumero BilaYQ SELECCIONAR DATOS DE UNA #ILA SE E#! Nombre #ampo0 Nombre #ampo BR"4 Nombre !abla 2here id S Numero BilaQ BUSCAR DATOS DENTRO DE UNA TABLA
24
Copyright 2013 www.clubdeprogramacion.com
SE E#! Nombre #ampo BR"4 Nombre !abla 2here Nombre #ampo I^E Y-T.#oncepto de >*s%ueda.T-Q CONTAR RE"ISTROS TOTALES EN UN CAMPO SE E#! #"1N! MNombre #ampoP BR"4 Nombre !ablaQ
BAC+UPS DE LA BASE DE DATOS Reali$a siempre un respaldo de tu base de datos de manera peridica. 5a clic sobre el nombre de la base de datos en el men* del lado i$%uierdo. 5a clic en E;P"R!.
Selecciona las tablas %ue desees respaldar. Selecciona los botones de radio S!R1#!1RE y 5A!A Selecciona los campos 5R"P !A> E E A55 IB N"! E;I!S Selecciona EN# "SE !A> E AN5 BIE NA4ES ]I!6 >A#^91"!ES. Selecciona los chec_ bo'es SA=E AS BI E y gIPPE5.
Al final solo ha$ clic en G" para e'portar las tablas seleccionadas.
25
Copyright 2013 www.clubdeprogramacion.com
Para conectarnos a una base de datos desde php usaremos la funcion mys%lcconnectMP 0veamos un e3emplo? K:php R#onnecS mys%lcconnectMTlocalhostT0 TrootT0TrootTPQ echo Nya estas conectadoOQ :L Solo necesitamos especificar el 6ost o servidor0 el usuario y si es %ue fuese necesario el pass2ord para poder validarnos en la base de datos. El resultado de la cone'in es almacenado en la variable R#onnec.
Ahora veamos como poder seleccionar una base de datos y enviar una consulta S9 para despu/s mostrarla en php.
K:php R#onnecS mys%lcconnectMTlocalhostT0 TrootT0TrootTPQ mys%lcselectcdbMT2ebT0 R#onnecPQ Rresult S mys%lc%ueryMTSE E#! W BR"4 a(endaT0 R#onnecPQ echo TNombre? T.mys%lcresultMRresult0 ,0 TnombreTP.TKbrLTQ echo T5ireccin? T.mys%lcresultMRresult0 ,0 TdireccionTP.TKbrLTQ echo T!el/fono ?T.mys%lcresultMRresult0 ,0 TtelefonoTP.TKbrLTQ echo TEV4ail ?T.mys%lcresultMRresult0 ,0 TemailTP.TKbrLTQ :L
26
Copyright 2013 www.clubdeprogramacion.com
#on mys%lcselectcdbMP P6P le dice al servidor %ue en la cone'in R#onnecnos %ueremos conectar a la base de datos mydb. Podr)amos establecer distintas cone'iones a la >5 en diferentes servidores0 pero nos conformaremos con una. a si(uiente funcin mys%lc%ueryMP0 es la %ue hace el traba3o duro0 usando el identificador de la cone'in MRlin_P0 env)a una instruccin S9 al servidor 4yS9 para %ue /ste la procese. El resultado de /sta operacin es almacenado en la variable Rresult. Binalmente0 mys%lcresultMP es usado para mostrar los valores de los campos devueltos por la consulta MRresultP. En este e3emplo mostramos los valores del re(istro ,0 %ue es el primer re(istro0 y mostramos el valor de los campos especificados.
MOSTRAR TODOS LOS DATOS DE UNA CONSULTA SQL
Ahora veremos como mostrar todos datos de una consulta. KhtmlL KbodyL K:php R#onnecS mys%lcconnectMTlocalhostT0 TrootT0TrootTPQ mys%lcselectcdbMT2ebT0 R#onnecPQ Rresult S mys%lc%ueryMTSE E#! nombre0 email BR"4 a(endaT0 R#onnecPQ echo TKtable border S Y+YL `nTQ echo TKtrLKtdLNombreK/tdLKtdLEV4ailK/tdLK/trL `nTQ Rtotalcro2s S mys%lcnumcro2sMRresultPQ forMRiS,QRiKSRtotalcro2sQRiUUP [ Rnombre S mys%lcresultMRresult0 Ri0 TnombreTPQ Remail S mys%lcresultMRresult0 Ri0 TemailTPQ echo TKtrLKtdLRnombreK/tdLKtdLRemailK/tdLK/trL TQ
K/htmlL
#omo podemos observar hemos usado la funcion mys%lcnumcro2s %ue devuelve el n*mero de filas de un resultado asi en el ciclo B"R sabemos la cantidad de veces %ue se mostrara el re(istro. Ntese %ue reempla$amos el , de la funcion mys%lcresult por la variable Ri para ir avan$ando entre re(istros. !ambi/n se puede mostrar los resultados de una consulta usando otras funciones como veremos a continuacin. KhtmlL KbodyL K:php R#onnecS mys%lcconnectMTlocalhostT0 TrootT0TrootTPQ mys%lcselectcdbMT2ebT0 R#onnecPQ Rresult S mys%lc%ueryMTSE E#! nombre0 email BR"4 a(endaT0 R#onnecPQ echo TKtable border S Y+YL `nTQ echo TKtrLKtdLNombreK/tdLKtdLEV4ailK/tdLK/trL `nTQ 2hile MRro2 S mys%lcfetchcro2MRresultPP[ echo TTKtrLKtdLRro2a,bK/tdLKtdLRro2a+bK/tdLK/trL `nTQ \ echo TK/tableL `nTQ :L K/bodyL K/htmlL En este script hemos introducido dos novedades0 la m&s obvia es la sentencia de control 2hileMP0 %ue tiene un funcionamiento similar al de otros len(ua3es0 e3ecuta una cosa mientras la condicin sea verdadera. En esta ocasin 2hileMP evalua la funcin mys%lcfetchcro2MP0 %ue devuelve un array con el contenido del re(istro actual M%ue se almacena en Rro2P y avan$a una posicin en la lista de re(istros devueltos en la consulta S9 . a funcin mys%lcfetchcro2MP tiene un pe%ue.o problema0 es %ue el array %ue devuelve slo admite referencias num/ricas a los campos obtenidos de la consulta. El primer campo referenciado es el ,0 el se(undo el + y as) sucesivamente. En el si(uiente script solucionaremos este pe%ue.o inconveniente. K:php R#onnecS mys%lcconnectMTlocalhostT0 TrootT0TrootTPQ
28
Copyright 2013 www.clubdeprogramacion.com
mys%lcselectcdbMT2ebT0 R#onnecPQ Rresult S mys%lc%ueryMTSE E#! nombre0 email BR"4 a(endaT0 R#onnecPQ if MRro2 S mys%lcfetchcarrayMRresultPP[ echo TKtable border S Y+YL `nTQ echo TKtrLKtdLNombreK/tdLKtdLEV4ailK/tdLK/trL `nTQ do [ echo TKtrLKtdLT.Rro2aTnombreTb.TK/tdLKtdLT.Rro2aTemailTb.TK/tdLK/trL `nTQ \ 2hile MRro2 S mys%lcfetchcarrayMRresultPPQ echo TK/tableL `nTQ \ else [ echo Te No se ha encontrado nin(*n re(istro ZTQ \ :L Esencialmente0 este script hace lo mismo %ue el anterior. Almacenamos en Rro2 el re(istro actual con la funcin mys%lcfetchcarrayMP %ue hace e'actamente lo mismo %ue mys%lcfetchcro2MP0 con la e'epcin %ue podemos referenciar a los campos por su nombre MRro2aTemailTbP0 en ve$ de por un n*mero. #on la sentencia if/else0 asi(namos a Rro2 el primer re(istro de la consulta0 y en caso de no haber nin(uno MelseP mostramos un mensa3e MTNo se ha encontrado...TP. 4ientras %ue con la sentencia do/2hile0 nos ase(uramos %ue se nos muestren todos los re(istros devueltos por la consulta en caso de haber m&s de uno. 6ay %ue destacar la utili$acin del punto M.P0 como operador para concatenar cadenas.
Ahora veremos cmo podemos a.adir nuevos re(istros a nuesta >5. a reco(ida de datos la vamos a hacer a traves de un interfa$ de 2eb. En primer lu(ar vamos a crear una p&(ina 2eb con un simple formulario0 con los campos %ue deseamos. Bormulario inicial a.adir >5 KhtmlL KbodyL Kform methodSTpostT actionSTinsertarcre(.phpTL Nombre ?Kinput typeST!e'tT nameSTnombreTLKbrL 5ireccin?Kinput typeST!e'tT nameSTdireccionTLKbrL
29
Copyright 2013 www.clubdeprogramacion.com
!el/fono ?Kinput typeST!e'tT nameSTtelefonoTLKbrL EVmail ?Kinput typeST!e'tT nameSTemailTLKbrL Kinput typeSTSubmitT nameSTenviarT valueSTAceptar informacinTL K/formL K/bodyL K/htmlL 6emos creado un formulario donde reco(er los datos0 y una ve$ introducidos e3ecutamos un script llamado insertarcre(.php0 pues veamos como es este script.
KhtmlL KbodyL K:php // process form R#onnecS mys%lcconnectMTlocalhostT0 TrootT0 TrootTPQ mys%lcselectcdbMT2ebT0 R#onnecPQ Rs%l S TINSER! IN!" a(enda Mnombre0 direccion0 telefono0 emailP T. T=A 1ES MYRnombreY0 YRdireccionY0 YRtelefonoY0 YRemailYPTQ Rresult S mys%lc%ueryMRs%l0R#onnecPQ echo TeGraciasZ 6emos recibido sus datos.`nTQ K/bodyL K/htmlL #omo se puede ver0 para introducir un nuevo re(istro0 utili$amos la ya conocida funcin mys%lc%ueryMP0 la cu&l tambi/n usamos para las consultas0 y usaremos para las actuali$aciones0 es decir una se.ora funcin. 1na cosa muy importante0 para poder a.adir o modificar re(istros debemos tener permiso para ello en el servidor 4yS9 0 por eso en este caso me conecto como root0 pero podr)a ser cual%uier otro usuario.
MODI#ICAR RE"ISTROS DE NUESTRA BASE DE DATOS
o primero0 es lo primero0 para modificar hay %ue tener permiso para ello en el servidor de >50 el resto nos viene de corrido. Primero seleccionamos el re(istro %ue deseamos modificar0 y lue(o0 mandamos una consulta con las modificaciones0 o ambas cosas a la ve$. Suponemos %ue las modificaciones las reco(emos de un formulario como el de la leccin anterior. KhtmlL KbodyL
30
Copyright 2013 www.clubdeprogramacion.com
K:php if MissetMRidPP[ // process form R#onnecS mys%lcconnectMTlocalhostT0 TrootT0OrootOPQ mys%lcselectcdbMT2ebT0 R#onnecPQ Rs%l S TSE E#! W BR"4 a(enda ]6ERE id S RidT Rresult S mys%lc%ueryMRs%l0R#onnecPQ Rs%l S T1P5A!E a(enda SE! nombreSYRnombreY0 direccionSYRdireccionY0T. TtelefonoSYRtelefonoY0 emailSYRemailYTQ Rresult S mys%lc%ueryMRs%lPQ \else[ echo T5ebe especificar un YidY.`nTQ \ K/bodyL K/htmlL !ambi/n podr)a hacerlo de esta forma K:php if MissetMRidPP[ // process form R#onnecS mys%lcconnectMTlocalhostT0 TrootT0OrootOPQ mys%lcselectcdbMT2ebT0 R#onnecPQ Rs%l S T1P5A!E a(enda SE! nombreSYRnombreY0 direccionSYRdireccionY0T. TtelefonoSYRtelefonoY0 emailSYRemailY ]6ERE idSRidTQ Rresult S mys%lc%ueryMRs%l0R#onnecPQ \else[ echo T5ebe especificar un YidY.`nTQ \
31
Copyright 2013 www.clubdeprogramacion.com
El proceso de borrar un re(istro es id/ntico al de modificar0 solo %ue en ve$ de utili$ar 1P5A!E utili$amos 5E E!E en la sentencia S9 . Por tanto el script %uedar)a como si(ue. KhtmlL KbodyL K:php if MissetMRidPP[ // process form R#onnecS mys%lcconnectMTlocalhostT0 TrootT0OrootOPQ mys%lcselectcdbMT2ebT0 R#onnecPQ Rs%l S T5E E!E a(enda ]6ERE idSRidTP Rresult S mys%lc%ueryMRs%l0R#onnecPQ \else[ echo T5ebe especificar un YidY.`nTQ \ K/bodyL K/htmlL
32
Copyright 2013 www.clubdeprogramacion.com