You are on page 1of 29

Manual de PHP (Básico y Avanzado

)
Manual PHP Básico
Iniciación a PHP
• - Conceptos Básicos
• - Nuestro primer PHP
• - Sintaxis
• - Variables
Operadores en PHP
• - Aritméticos
• - Comparación
• - ó!icos
Instrucciones en PHP
• - Condicionales
• - Bucles
• - Salida
• - Cadenas
"unciones
• - "unciones
• - ibrer#as
$%emplos prácticos
• - "ormateo de pá!ina
• - $nlace externo
Manual PHP Avanzado
Procesado de &ormularios
• - $n'io ( recepción
• - )et*od +$, ( POS,
• - $n'io de $mail
Bases de -atos )(S.
• - Crear la base de datos
• - Conectarse a la B-
• - Consultas a la B-
• - Insertar re!istros
• - Borrar re!istros
Se!uridad
• - /estrin!ir acceso
• - -istinción de usuarios
Sesiones 0PHP12
• - 3.ué son4
• - Iniciali5ación
• - 6n e%emplo
• - $rror com7n
• - Carrito compra
Coo8ies
• - 3.ué son4
• - Cómo usarlas
• - $%emplo de uso
Manual PHP Básico
Iniciación a PHP
Conceptos básicos
El lenguaje PHP es un lenguaje de programación de estilo clásico, con esto quiero decir que es un lenguaje
de programación con variables, sentencias condicionales, bucles, funciones.... No es un lenguaje de marcas
como podría ser HT!, "! o #!. Está mas cercano a $ava%cript o a &, para aquellos que conocen estos
lenguajes.
Pero a diferencia de $ava o $ava%cript que se ejecutan en el navegador, PHP se ejecuta en el servidor, por eso
nos permite acceder a los recursos que tenga el servidor como por ejemplo podría ser una base de datos. El
programa PHP es ejecutado en el servidor ' el resultado enviado al navegador. El resultado es normalmente
una página HT! pero igualmente podría ser una pagina #!.
(l ser PHP un lenguaje que se ejecuta en el servidor no es necesario que su navegador lo soporte, es
independiente del navegador, pero sin embargo para que sus páginas PHP funcionen, el servidor donde están
alojadas debe soportar PHP.
Nuestro primer PHP
!a ventaja que tiene PHP sobre otros lenguajes de programación que seejecutan en el servidor )como
podrían ser los script &*+ Perl,, es que nos permite intercalar las sentencias PHP en las paginas HT!, es un
concepto algo complicado de entender si no se -a visto nunca como funciona unas paginas PHP o (%P.
.amos a ver un ejemplo sencillo para comprenderlo mejor. En a/ul está el código HTML ' en rojo
el código PHP. %eguiremos este criterio durante todo el manual.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
Pa"te de HTML no"mal.
<#$><#$>
<%php
echo &Pa"te de PHP<b">&'

(o")*i+,'*i<-,'*i../
0
echo &Linea &.*i.&<b">&'
1
%>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
El código PHP ejecutado tiene dos partes0 la primera imprime 1Parte de PHP1 ' la segunda es un bucle que se
ejecuta 23 veces de 3 a 4, por cada ve/ que se ejecuta se escribe una línea, la variable *i contiene el
n5mero de línea que se está escribiendo.
No importa si no entiende mu' bien el programa este ejemplo solo es para ilustrar como se intercala el
código HTML y el código PHP.
Variables
6na variable es un contenedor de información, en el que podemos meter n5meros enteros, n5meros
decimales, carácteres... el contenido de las variables se puede leer ' se puede cambiar durante la ejecución
de una página PHP.
En PHP todas las variables comien/an con el símbolo del dólar * ' no es necesario definir una variable antes
de usarla. Tampoco tienen tipos, es decir que una misma variable puede contener un n5mero ' luego puede
contener carácteres.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php
*a + -'
*b + 2.23'
*c + &Hola Mundo&'
echo *a4&<b">&4*b4&<b">&4*c'
%>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
En este ejemplo -emos definido tres variables, *a, *b ' *c ' con la instrucción echo-emos impreso el valor
que contenían, insertando un salto de línea entre ellas.
E7isten 8 tipos de variables, las variables locales que solo pueden ser usadas dentro de funciones ' las
variables globales que tienen su ámbito de uso fuera de las funciones, podemos acceder a una variable global
desde una función con la instrucción global nomb"e56a"iable'
Operadores en PHP
Aritmticos
!os operadores de PHP son mu' parecidos a los de & ' $ava%cript, si usted conoce estos lenguajes le
resultaran familiares ' fáciles de reconocer.
Estos son los operadores que se pueden aplicar a las variables ' constantes num9ricas.
Operador Nombre Ejemplo Descripcin
+ Suma
7 . 8
Suma dos números
- Resta
9 - :
Resta dos números
* Multiplicación
8 ; 2
Multiplica dos números
/ División
3 <
Divide dos números
% Módulo
9 = >
Devuelve el resto de dividir ambos números, en este ejemplo
el resultado es 1
++ Suma 1
*a..
Suma 1 al contenido de una variable
-- Resta 1
*a--
Resta 1 al contenido de una variable
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php
*a + <'
*b + 2'
echo *a . *b4&<b">&'
echo *a - *b4&<b">&'
echo *a ; *b4&<b">&'
echo *a *b4&<b">&'
*a..'
echo *a4&<b">&'
*b--'
echo *b4&<b">&'
%>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
Comparación
!os operadores de comparación son usados para comparar valores ' así poder tomar decisiones.
Operador Nombre Ejemplo Devuelve cier!o cuando"
!! "#ual
*a ++ *b
*a es i#ual *b
$! Distinto
*a !+ *b
*a es distinto *b
% Menor &ue
*a < *b
*a es menor &ue *b
' Ma(or &ue
*a > *b
*a es ma(or &ue *b
%! Menor o i#ual
*a <+ *b
*a es menor o i#ual &ue *b
'! Ma(or o i#ual
*a >+ *b
*a es ma(or o i#ual &ue *b
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php
*a + <'
*b + 2'
*c + 2'
echo *a ++ *b4&<b">&'
echo *a !+ *b4&<b">&'
echo *a < *b4&<b">&'
echo *a > *b4&<b">&'
echo *a >+ *c4&<b">&'
echo *b <+ *c4&<b">&'
%>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
Lógicos
!os operadores lógicos son usados para evaluar varias comparaciones, combinando los posibles valores de
estas.
Operador Nombre Ejemplo Devuelve cier!o cuando"
)) *
)9>>/ ?? )><3/
Devuelve verdadero cuando ambas condiciones son
verdaderas
and *
)9>>/ and )><3/
Devuelve verdadero cuando ambas condiciones son
verdaderas
++ ,
)9>>/ @@ )><3/
Devuelve verdadero cuando al menos una de las dos es
verdadera
or ,
)9>>/ o" )><3/
Devuelve verdadero cuando al menos una de las dos es
verdadera
$ -o
! )9>>/
-ie#a el valor de la e.presión
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php
*a + <'
*b + 2'
*c + 2'
echo )*a ++ *b/ ?? )*c > *b/4&<b">&'
echo )*a ++ *b/ @@ )*b ++ *c/4&<b">&'
echo !)*b <+ *c/4&<b">&'
%>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
Instrucciones en PHP
Condicionales
!as sentencias condicionales nos permiten ejecutar o no unas ciertas instrucciones dependiendo del resultado
de evaluar una condición. !as más frecuentes son la instrucción i( ' la instrucción sAitch.
%entencia i( ... else
<%php
i( )condición/
0
Bentencias a ejecuta" cuando la
condición es cie"ta.
1
else
0
Bentecias a ejecuta" cuando la
condición es (alsa.
1
%>
!a sentencia i( ejecuta una serie de instrucciones u otras dependiendo de la condición que le pongamos.
Probablemente sea la instrucción más importante en cualquier lenguaje de programación.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php
*a + <'
*b + 2'
i( )*a < *b/
0
echo &a es meno" Cue b&'
1
else
0
echo &a no es meno" Cue b&'
1
%>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
En este ejemplo la condición no es verdadera por lo que se ejecuta la parte de código correspondiente
al else.
%entencia sAitch ... case
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php
*posicion + &a""iba&'

sAitch)*posicion/ 0
case &a""iba&D #loCue -
echo &La 6a"iable contiene&'
echo & el 6alo" a""iba&'
b"eaE'
case &abajo&D #loCue >
echo &La 6a"iable contiene&'
echo & el 6alo" abajo&'
b"eaE'
de(aultD #loCue 2
echo &La 6a"iable contiene ot"o 6alo"&'
echo & distinto de a""iba ! abajo&'
1
%>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
&on la sentencia sAitch podemos ejecutar unas u otras instrucciones dependiendo del valor de una
variable, en el ejemplo anterior, dependiendo del valor de la variable*posicion se ejecuta el bloque 2
cuando el valor es 1arriba1, el bloque 8 cuando el valor es 1abajo1 ' el bloque : si no es ninguno de los
valores anteriores.
!ucles
!os bucles nos permiten iterar conjuntos de instrucciones, es decir repetir la ejecución de un conjunto de
instrucciones mientras se cumpla una condición.
%entencia Ahile
<%php
Ahile )condición/
0
int"ucciones a ejecuta".
1
%>
ientras la condición sea cierta se reiterará la ejecución de las instrucciones que están dentro del Ahile.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
Fnicio<#$>
<%php
*i+,'
Ahile )*i<-,/
0
echo &El 6alo" de i es &4 *i4&<b">&'
*i..'
1
%>
Ginal<#$>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
En el siguiente ejemplo, el valor de *i al comien/o es ,, durante la ejecución del bucle, se va sumando - al
valor de *i de manera que cuando *i vale -, 'a no se cumple la condición ' se termina la ejecución del
bucle.
%entencia (o"
<%php
(o" )inicial ' condición ' ejecuta" en ite"ación/
0
int"ucciones a ejecuta".
1
%>
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
Fnicio<#$>
<%php
(o")*i+, ' *i<-, ' *i../
0
echo &El 6alo" de i es &4 *i4&<b">&'
1
%>
Ginal<#$>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
!a instrucción (o" es la instrucción de bucles más completa. En una sola instrucción nos permite controlar
todo el funcionamiento del bucle.
El primer parámetro del (o", es ejecutado la primera ve/ ' sirve para iniciali/ar la variable del bucle, el
segundo parámetro indica la condición que se debe cumplir para que el bucle siga ejecutándose ' el tercer
parámetro es una instrucción que se ejecuta al final de cada iteración ' sirve para modificar el valor de la
variable de iteración.
"alida
Hasta a-ora -emos usado la instrucción echo para reali/ar salida a pantalla, esta instrucción es
bastantelimitada 'a que no nos permite formatear la salida. En esta página veremos la
instrucción p"int( que nos da muc-a más potencia.
%entencia p"int(
<%php
p"int()cadena (o"mato4 6a"iable-4 6a"iable>.../'
%>
!a cadena de formateo indica cómo se -an de representar las valores que posteriormente le indicaremos. !a
principal ventaja es que además de poder formatear los valores de salida, nos permite intercalar te7to entre
ellos.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php
p"int()&El nume"o dos con di(e"entes (o"matosD =d =( =.>(&4>4>4>/'
%>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
!a cadena de formato puede incluir una seria de carácteres especiales que indican como formatear las
variables que se inclu'en en la instrucción.
Elemen!o #ipo de variable
%s /adena de car0cteres
%d -úmero sin decimales
%1 -úmero con decimales
%c /ar0cter 2S/""
2un&ue e.isten otros tipos, estos son los m0s importantes
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php
*6a"+&teHto&'
*num+2'
p"int()&Puede (Icimente inte"cala" <b>=s<b> con nJme"os <b>=d<b> <b">&4*6a"4*num/'

p"int()&<TK#LE #L$ME$+- NELLPKMMFOP+>,>&/'
(o" )*i+,'*i<-,'*i../
0
p"int()&<t"><td>=-,.d<td><t">&4*i/'
1
p"int()&<table>&/'
%>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
Manejo de cadenas
;ado el uso del lenguaje PHP el tratamiento de cadenas es mu' importante, e7isten bastantes funciones para
el manejo de cadenas, a continuación e7plicaremos las más usadas.
•st"len)cadena/. Nos devuelve el n5mero de carácteres de una cadena.
•split)sepa"ado"4cadena/. ;ivide una cadena en varias usando un carácter separador.
•sp"int()cadena de (o"mato4 6a"-4 6a">.../. <ormatea una cadena de te7to al igual que
printf pero el resultado es devuelto como una cadena.
•subst")cadena4 inicio4 longitud/. ;evuelve una subcadena de otra, empe/ando
por inicio ' de longitudlongitud.
•chop)cadena/. Elimina los saltos de línea ' los espacios finales de una cadena.
•st"pos)cadena-4 cadena>/. =usca la cadena8 dentro de cadena2 indicándonos la posición en la
que se encuentra.
•st"5"eplace)cadena-4 cadena>4 teHto/. >eempla/a la cadena- por la cadena>en el te7to.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php
echo st"len)&->237&/4&<b">&'

*palab"as+split)& &4&Esto es una p"ueba&/'
(o")*i+,'*palab"asQ*iR'*i../
echo *palab"asQ*iR4&<b">&'

*"esultado+sp"int()&<H7 + =d <b">&4<;7/'
echo *"esultado4&<b">&'

echo subst")&Me6uel6e una subcadena de ot"a&4:42/4&<b"><b">&'
i( )chop)&Nadena SnSn &/ ++ &Nadena&/
echo &Fguales<b"><b">&'
echo st"pos)&#usca la palab"a dent"o de la ("ase&4 &palab"a&/4&<b"><b">&'

echo st"5"eplace)&6e"de&4&"ojo&4&Tn peU de colo" 6e"de4 como 6e"de es la hie"ba.&/4&<b">&'

%>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
Funciones
#unciones
El uso de funciones nos da la capacidad de agrupar varias instrucciones bajo un solo nombre ' poder
llamarlas a estas varias veces desde diferentes sitios, a-orrándonos la necesidad de escribirlas de nuevo.
<%php
(unction Oomb"e)pa"amet"o-4 pa"amet"o>.../
0
inst"ucción-'
inst"ucción>'
inst"ucción2'
inst"ucción3'
"etu"n 6alo"5de5"eto"no'
1
%>
?pcionalmente podemos pasarle parámetros a las funciones que se trataran como variable locales ' así
mismo podemos devolver un resultado con la instrucción "etu"n 6alo"' Esto produce la terminación de la
función retornando un valor.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php

(unction media5a"itmetica)*a4 *b/
0
*media+)*a.*b/>'
"etu"n *media'
1

echo media5a"itmetica)348/4&<b">&'
echo media5a"itmetica)2>3>47>3732/4&<b">&'

%>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
Librer$a
El uso de librerías es tremendamente 5til, nos permiten agrupar varias funciones ' variables en un mismo
fic-ero, de manera que luego podemos incluir esta librería en distintas páginas ' disponer de esas funciones
fácilmente.
<!-- Manual de PHP de WebEstilo.com -->
<%php
(unction Nabece"aPagina)/
0
%>
<GLOT BFVE+&.-&>Esta cabece"a esta"I en todas sus pIginas.<GLOT><#$>
<h">
<%
1

(unction PiePagina)/
0
%>
<h">
<GLOT BFVE+&--&>Este es el pie de pIgina.<GLOT><#$>
Kuto"D WoaCuin P"acia
<%
1
%>
.er código fuente
(-ora vamos a crear 8 páginas que usan la librería definida anteriormente para conseguir que las dos
paginas tengan la misma cabecera ' pie de pagina.
!a instrucción para incluir una librería en nuestra página es include)&nomb"e de lib"e"Xa&/
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php include)&lib"e"ia,-.phtml&/ %>
<%php Nabece"aPagina)/' %>
PIgina -
<#$><#$><#$><#$><#$>
Nontenido blalbl blalb alb<#$><#$>
mIs cosas...<#$><#$>
(in<#$><#$>
<%php PiePagina)/' %>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php include)&lib"e"ia,-.phtml&/ %>
<%php Nabece"aPagina)/' %>
Esta es ot"a pIgina<#$><#$>
completamente distinta<#$><#$>
pe"o compa"te el pie ! la cabece"a con la ot"a.<#$><#$>
<%php PiePagina)/' %>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
Ejemplos prácticos
#ormateo de página
En este ejemplo vamos a usar el PHP ' la capacidad de definir librerías para conseguir que todas nuestras
páginas tengan el mismo formato de página, inclu'endo las partes comunes en librerías. (sí mismo
modificando la librería modificaríamos tambien todas las páginas de una manera mu' rápida.
libpagina.phtml
<!-- Manual de PHP de WebEstilo.com -->
<%php
(unction Nabece"aPagina)/
0
%> <GLOT BFVE+&.-&>Esta cabece"a esta"I en todas sus pIginas.<GLOT><#$>
<h">
<% 1

(unction PiePagina)/
0
%> <h">
<GLOT BFVE+&--&>Este es el pie de pIgina.<GLOT><#$>
Kuto"D WoaCuin P"acia
<% 1

(unction Fndice)/
0
%> <K H$EG+&ejem,8a.phtml&>Pagina -<K><#$>
<K H$EG+&ejem,8a>.phtml&>Pagina ><K><#$>
<% 1 %>
.er código fuente
ejem,8a.phtml
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php include)&libpagina.phtml&/ %>
<%php Nabece"aPagina)/' %>
<TK#LE>
<T$>
<TM><%php Fndice)/ %><TM>
<TM>
Esta es ot"a pIgina<#$><#$>
completamente distinta<#$><#$>
pe"o compa"te el pie ! la cabece"a con la ot"a.<#$><#$>
<TM>
<T$>
<TK#LE>
<%php PiePagina)/' %>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
ejem,8a>.phtml
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php include)&libpagina.phtml&/ %>
<%php Nabece"aPagina)/' %>
<TK#LE>
<T$>
<TM><%php Fndice)/ %><TM>
<TM>
PIgina -
<#$><#$><#$><#$><#$>
Nontenido blalbl blalb alb<#$><#$>
mIs cosas...<#$><#$>
(in<#$><#$>
<TM>
<T$>
<TK#LE>
<%php PiePagina)/' %>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
%nlace e&terno con 'rame
&on este ejemplo damos solución al problema de los enlaces e7ternos ' de forma que la @eb e7terna queda
en la parte inferior del frame ' así no se sale de nuestra @eb.
ejem,8b.html
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<K H$EG+&ejem,8b>.phtml%di"e+httpDAAA.Aebestilo.com&>AAA.Aebestilo.com<K><#$><#$>
<K H$EG+&ejem,8b>.phtml%di"e+httpDAAA.te""a.es&>AAA.te""a.es<K>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
ejem,8a>.phtml
<!-- Manual de PHP de WebEstilo.com -->
<!-- ("ames -->
<G$KMEBET $LWB+&-,,4;&>
<G$KME OKME+&a""iba& B$N+&ejem,8b2.html& MK$PFOWFMTH+&-,& MK$PFOHEFPHT+&-,& BN$LLLFOP+&auto&
G$KME#L$ME$+&,&>
<G$KME OKME+&abajo& B$N+&<%php echo *di"e %>& MK$PFOWFMTH+&-,& MK$PFOHEFPHT+&-,& BN$LLLFOP+&auto&
G$KME#L$ME$+&,&>
<G$KMEBET>
.er código fuente
Manual PHP Avanzado
Procesado de formularios
%nv$o y recepción de datos
El lenguaje PHP nos proporciona una manera sencilla de manejar formularios, permiti9ndonos de esta
manera procesar la información que el usuario -a introducido.
(l diseAar un formulario debemos indicar la página PHP que procesará el formulario, así como en m9todo por
el que se le pasará la información a la página.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<H->Ejemplo de p"ocesado de (o"mula"ios<H->
Fnt"oduUca su nomb"eD
<GL$M KNTFLO+&p"ocesa.phtml& METHLM+&PET&>
<FOPTT TYPE+&teHt& OKME+&nomb"e&><#$>
<FOPTT TYPE+&submit& ZKLTE+&En6ia"&>
<GL$M>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
(l pulsar el botón Enviar el contenido de cuadro de te7to es enviado a la página que indicamos en el
atributo KNTFLO de la etiqueta GL$M.
En versiones anteriores a B.8.3 PHP creaba una variable por cada elemento del GL$M, esta variable creada
tenía el mismo nombre que el cuadro de te7to de la página anterior ' el valor que -abíamos introducido. Pero
por ra/ones de seguridad a partir de entonces para acceder a las variables del formulario -a' que usar el
arra' de parámetros *5PLBTQRo *5PETQR dependiendo del m9todo usado para enviar los parámetros.
En este ejemplo se -a creado una entrada en el arra' *5PETQR con el índice [nomb"e[' con el valor que
-a'a introducido el navegante.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<H->Ejemplo de p"ocesado de (o"mula"ios<H->
El nomb"e Cue ha int"oducido esD <%php echo *5PETQ[nomb"e[R %>
<b">
<bod!>
<html>
.er código fuente
Met(od )%T y P*"T
En la página anterior -emos comentado que los datos de un formulario se envía mediante el m9todo indicado
en el atributo ETH?; de la etiqueta <?>, los dos m9todos posibles son *ET ' P?%T.
!a diferencia entre estos dos m9todos radica en la forma de enviar los datos a la página, mientras que el
m9todo *ET envía los datos usando la 6>!, el m9todo P?%T los envía por la entrada estándar %T;+?.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<H->Ejemplo de p"ocesado de (o"mula"ios<H->
<GL$M KNTFLO+&p"ocesa>.phtml& METHLM+&PET&>
Fnt"oduUca su nomb"eD<FOPTT TYPE+&teHt& OKME+&nomb"e&><#$>
Fnt"oduUca sus apellidosD<FOPTT TYPE+&teHt& OKME+&apellidos&><#$>
<FOPTT TYPE+&submit& ZKLTE+&En6ia"&>
<GL$M>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<H->Ejemplo de p"ocesado de (o"mula"ios<H->
<GL$M KNTFLO+&p"ocesa>.phtml& METHLM+&PLBT&>
Fnt"oduUca su nomb"eD<FOPTT TYPE+&teHt& OKME+&nomb"e&><#$>
Fnt"oduUca sus apellidosD<FOPTT TYPE+&teHt& OKME+&apellidos&><#$>
<FOPTT TYPE+&submit& ZKLTE+&En6ia"&>
<GL$M>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
procesa8.p-tml
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<H->Ejemplo de p"ocesado de (o"mula"ios<H->
El nomb"e Cue ha int"oducido po" PET esD <%php echo *5PETQ[nomb"e[R4& &4*5PETQ[apellidos[R %><b">
El nomb"e Cue ha int"oducido po" PLBT esD <%php echo *5PLBTQ[nomb"e[R4& &4*5PLBTQ[apellidos[R %>
<b">
<bod!>
<html>
.er código fuente
El resultado final es el mismo, solo que con el m9todo *ET podemos ver los parámetros pasados 'a que
están codificados en la 6>!.
%nvio de emails
PHP nos ofrece la posibilidad de enviar emails de una manera sencilla ' fácil, para ello el lenguaje nos
proporciona la instrucción mail) /
<%php
mail)destinata"io4 tema4 teHto del mensaje/'
%>
En el parámetro destinata"io pondremos la dirección de email a donde se enviará el mensaje, en el
parámetro tema el tema o subject del mensaje ' el parámetro teHto del mensaje el cuerpo del mensaje
en formato te7to plano.
E7iste una sinta7is e7tendida de la instrucción mail) / que nos permite aAadir información adicional a la
cabecera del mensaje.
<%php
mail)destinata"io4 tema4 teHto del mensaje4 in(o"mación adicional de cabece"a/'
%>
En la información de cabecera podremos incluir parámetros adicionales al mensaje como$epl!-
ToD, G"omD, Nontent-t!peD... que nos permiten tener un ma'or control sobre el mensaje.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<H->Ejemplo de en6io de email<H->
Fnt"oduUca su di"eccion de emailD
<GL$M KNTFLO+&email.phtml& METHLM+&PET&>
<FOPTT TYPE+&teHt& OKME+&di"eccion&><#$><#$>
Go"matoD <#$>
<FOPTT TYPE+&"adio& OKME+&tipo& ZKLTE+&plano& NHEN\EM> TeHto plano<#$>
<FOPTT TYPE+&"adio& OKME+&tipo& ZKLTE+&html&> HTML<#$><#$>
<FOPTT TYPE+&submit& ZKLTE+&En6ia"&>
<GL$M>
<bod!>
<html>
.er código fuente
email.p-tml
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<H->Ejemplo de en6io de email<H->
<%
*di"eccion+*5PETQ[di"eccion[R'
*tipo+*5PETQ[tipo[R'

i( )*di"eccion!+&&/0
i( )*tipo++&plano&/0
En6io en (o"mato teHto plano

mail)*di"eccion4&Ejemplo de en6io de email&4&Ejemplo de en6io de email de teHto
planoSnSnWebEstilo.SnhttpDAAA.Aebestilo.comSn Manuales pa"a desa""ollado"es Aeb.Sn&4&G$LMD P"uebas
<Aebmaste"]hotmail.com>Sn&/'
1 else 0
En6io en (o"mato HTML
mail)*di"eccion4&Ejemplo de en6io de email&4&<html><head><title>WebEstilo. Manual de
PHP<title><head><bod!>Ejemplo de en6io de email de
HTML<b"><b">WebEstilo.<b">httpDAAA.Aebestilo.com<b"> <u>Manuales<u> pa"a <b>desa""ollado"es<b>
Aeb.<bod!><html>&4&Nontent-t!peD teHthtmlSn&4 &G$LMD P"uebas <Aebmaste"]hotmail.com>Sn&/'
1
echo &Be ha en6iado un email a la di"eccionD &4*di"eccion4& en (o"mato <b>&4*tipo4&<b>.&'
1
%>
<b">
<GL$M>
<bod!>
<html>
.er código fuente
Bases de Datos M!"#
Crear la base de datos
Para la reali/ación de este curso sobre PHP con acceso a base de datos -emos elegido la base de datos
'%C! por ser gratuita ' por ser tambi9n la mas empleada en entornos 6N+", para lo cual el servidor donde
tenemos alojadas las páginas nos tiene que proporcionar -erramientas para crearla o acceso al Telnet para
que la creemos por nosotros mismos.
El comando para crear una base de datos '%C! es el siguiente0
m!sCladmin -u "oot c"eate base5datos
&on este comando conseguimos crear la una base de datos en el servidor de bases de datos de nuestro
servidor.
6na ve/ conseguido esto debemos crear las tablas en la base de datos, la descripción de las tablas contienen
la estructura de la información que almacenaremos en ellas. Para lo cual usaremos en lenguaje de consultas
%C! com5n para todas las bases de datos relacionales.
En este ejemplo creamos una tabla llamada prueba con : campos0 un campo identificador, que nos servirá
para identificar unívocamente una fila con el valor de dic-o campo, otro campo con el nombre de una
persona ' por 5ltimo un campo con el apellido de la persona.
Para crear la tabla puede usar la -erramienta de administración de '%C! de su servidor @eb o puede
escribir un fic-ero de te7to con el contenido de la sentencia %C! equivalente ' luego decirle al motor de base
de datos que la ejecute con la siguiente instrucción0
m!sCl -u "oot base5datos <p"ueba.sCl
prueba.sql
N$EKTE TK#LE p"ueba )
FM5P"ueba int)--/ MEGKTLT [,[ OLT OTLL auto5inc"ement4
Oomb"e 6a"cha")-,,/4
Kpellidos 6a"cha")-,,/4
P$FMK$Y \EY )FM5P"ueba/4
TOF^TE FM5P"ueba )FM5P"ueba/
/'
&one7ión a la base de datos
6na ve/ que tenemos creada la base de datos en nuestro servidor, el siguiente paso es conectarnos a la
misma desde una página PHP. Para ello PHP nos proporciona una serie de instrucciones para acceder a bases
de datos '%C!.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<%php
(unction Nonecta"se)/
0
i( )!)*linE+m!sCl5connect)&localhost&4&usua"io&4&PassAo"d&///
0
echo &E""o" conectando a la base de datos.&'
eHit)/'
1
i( )!m!sCl5select5db)&base5datos&4*linE//
0
echo &E""o" seleccionando la base de datos.&'
eHit)/'
1
"etu"n *linE'
1
*linE+Nonecta"se)/'
echo &NoneHión con la base de datos conseguida.<b">&'
m!sCl5close)*linE/' cie""a la coneHion
%>
<bod!>
<html>
.er código fuente
Ejecutar ejemplo
(l ejecutar la instrucción m!sCl5connect creamos un vínculo entre la base de datos ' la pagina PHP, este
vínculo será usado posteriormente en las consultas que -agamos a la base de datos.
<inalmente, una ve/ que -emos terminado de usar el vínculo con la base de datos, lo liberaremos con la
instrucción m!sCl5close para que la cone7ión no quede ocupada.
&onsultas a la base de datos
6na ve/ que nos -emos conectado con el servidor de bases de datos, 'a podemos reali/ar consultas a las
tablas de la base de datos.
Para facilitar la programación -emos separado la función de cone7ión en una librería a parte, de tal manera
que la incluiremos en todas las páginas que accedan a la base de datos.
cone7.p-tml
<!-- Manual de PHP de WebEstilo.com -->
<%php
(unction Nonecta"se)/
0
i( )!)*linE+m!sCl5connect)&localhost&4&usua"io&4&PassAo"d&///
0
echo &E""o" conectando a la base de datos.&'
eHit)/'
1
i( )!m!sCl5select5db)&base5datos&4*linE//
0
echo &E""o" seleccionando la base de datos.&'
eHit)/'
1
"etu"n *linE'
1
%>
.er código fuente
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<H->Ejemplo de uso de bases de datos con PHP ! M!B^L<H->
<%php
include)&coneH.phtml&/'
*linE+Nonecta"se)/'
*"esult+m!sCl5Cue"!)&select ; ("om p"ueba&4*linE/'
%>
<TK#LE #L$ME$+- NELLBPKNFOP+- NELLPKMMFOP+->
<T$><TM>?nbsp'Oomb"e<TM><TM>?nbsp'Kpellidos?nbsp'<TM><T$>
<%php
Ahile)*"oA + m!sCl5(etch5a""a!)*"esult// 0
p"int()&<t"><td>?nbsp'=s<td><td>?nbsp'=s?nbsp'<td><t">&4 *"oAQ&Oomb"e&R4*"oAQ&Kpellidos&R/'
1
m!sCl5("ee5"esult)*"esult/'
m!sCl5close)*linE/'
%>
<table>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
En este ejemplo -emos utili/ado : instrucciones
nuevas0 m!sCl5Cue"!,m!sCl5(etch5a""a! ' m!sCl5("ee5"esult. &on la
instrucción m!sCl5Cue"! -emos -ec-o una consulta a la base de datos en el lenguaje de consultas %C!, con
la instrucción m!sCl5(etch5a""a! e7traemos los datos de la consulta a un arra' '
conm!sCl5("ee5"esult liberamos la memoria usada en la consulta.
+nsertar registros
Hasta a-ora nos -emos conectado a una base de datos ' -emos -ec-o consultas a la misma, a-ora
presentaremos como introducir nuevo registros en la base de datos.
Para ello usaremos un formulario ' en el KNTFLO del GL$M <GL$M KNTFLO+&p"og"amaPHP&> indicaremos
que debe ser procesado una pagina PHP, esta página lo que -ará será introducir los datos del formulario en la
base de datos.
ejem3Dd.p-tml
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<H->Ejemplo de uso de bases de datos con PHP ! M!B^L<H->
<GL$M KNTFLO+&p"ocesa".phtml&>
<TK#LE>
<T$>
<TM>Oomb"eD<TM>
<TM><FOPTT TYPE+&teHt& OKME+&nomb"e& BFVE+&>,& MK_LEOPTH+&2,&><TM>
<T$>
<T$>
<TM>KpellidosD<TM>
<TM><FOPTT TYPE+&teHt& OKME+&apellidos& BFVE+&>,& MK_LEOPTH+&2,&><TM>
<T$>
<TK#LE>
<FOPTT TYPE+&submit& OKME+&accion& ZKLTE+&P"aba"&>
<GL$M>
<h">
<%php
include)&coneH.phtml&/'
*linE+Nonecta"se)/'
*"esult+m!sCl5Cue"!)&select ; ("om p"ueba&4*linE/'
%>
<TK#LE #L$ME$+- NELLBPKNFOP+- NELLPKMMFOP+->
<T$><TM>?nbsp'<#>Oomb"e<#><TM> <TM>?nbsp'<#>Kpellidos<#>?nbsp'<TM><T$>
<%php
Ahile)*"oA + m!sCl5(etch5a""a!)*"esult// 0
p"int()&<t"><td>?nbsp'=s<td> <td>?nbsp'=s?nbsp'<td><t">&4 *"oAQ&Oomb"e&R4 *"oAQ&Kpellidos&R/'
1
m!sCl5("ee5"esult)*"esult/'
m!sCl5close)*linE/'
%>
<table>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
procesar.p-tml
<%php
include)&coneH.phtml&/'
*linE+Nonecta"se)/'
*nomb"e+*5PETQ[nomb"e[R'
*apellidos+*5PETQ[apellidos[R'
m!sCl5Cue"!)&inse"t into p"ueba )Oomb"e4Kpellidos/ 6alues )[*nomb"e[4[*apellidos[/&4*linE/'

heade")&LocationD ejem,9d.phtml&/'
%>
!a primera página PHP ejem,9d.phtml es un formulario que nos permite introducir nombre ' apellido para
aAadirlo a la base de datos, seguido de una consulta que nos muestra el contenido de la tabla prueba. El
formulario llama a la pagina p"ocesa".phtmlque aAadirá los datos a la tabla.
!a segunda página p"ocesa".phtml se conecta a la base de datos ' aAade un nuevo registro con la
instrucción inse"t del lenguaje de base de datos %C!. 6na ve/ el registro se -a aAadido se vuelve a cargar
la página ejem,9d.phtml
=orrar registros
E finalmente, para cerrar el ciclo, nos queda el borrado de registros. El borrado de registros el uno de los
procesos más sencillos.
Para indicar que elemento vamos a borrar -emos usado un enlace a la página bo""a.phtml pasándole
elFM5P"ueba de cada registro, de esta manera la página bo""a.phtml sabe que elemento de la tabla -a de
borrar.
ejem3De.p-tml
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<H->Ejemplo de uso de bases de datos con PHP ! M!B^L<H->
<%php
include)&coneH.phtml&/'
*linE+Nonecta"se)/'
*"esult+m!sCl5Cue"!)&select ; ("om p"ueba&4*linE/'
%>
<TK#LE #L$ME$+- NELLBPKNFOP+- NELLPKMMFOP+->
<T$><TM>?nbsp'<#>Oomb"e<#><TM> <TM>?nbsp'<#>Kpellidos<#>?nbsp'<TM>
<TM>?nbsp'<#>#o""a"<#>?nbsp'<TM><T$>
<%php
Ahile)*"oA + m!sCl5(etch5a""a!)*"esult// 0
p"int()&<t"><td>?nbsp'=s<td><td>?nbsp'=s?nbsp'<td><td><a h"e(+S&bo""a.phtml%id+
=dS&>#o""a<a><td><t">&4 *"oAQ&Oomb"e&R4*"oAQ&Kpellidos&R4*"oAQ&FM5P"ueba&R/'
1
m!sCl5("ee5"esult)*"esult/'
m!sCl5close)*linE/'
%>
<table>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
borra.p-tml
<%php
include)&coneH.phtml&/'
*linE+Nonecta"se)/'
*id+*5PETQ[id[R'
m!sCl5Cue"!)&delete ("om p"ueba Ahe"e FM5P"ueba + *id&4*linE/'

heade")&LocationD ejem,9e.phtml&/'
%>
!a página bo""a.phtml se conecta a la base de datos ' borra el registro indicado en la variable *id que -a
sido pasado desde la página ejem,9e.phtml. 6na ve/ el registro se -a borrado se vuelve a cargar la
página ejem,9e.phtml
!e$uridad
+estringir el acceso
En esta sección vamos a e7plicar cómo podemos restringir el acceso a seg5n qu9 páginas, para que solo las
personas autori/adas puedan acceder a ciertas partes del nuestro sitio @eb.
Atención0 El acceso restringido a páginas usando las variables
globales*PHP5KTTH5TBE$, *PHP5KTTH5PW '*PHP5KTTH5TYPE solo funciona si PHP -a sido instalado como
un módulo de (pac-e, si -a sido instalado como un &*+ los ejemplos de 9sta sección no funcionarán.
Para conseguir la autentificación en las páginas usaremos el sistema de autentificación del protocolo HTTP,
este sistema se basa en las variables globales *PHP5KTTH5TBE$ '*PHP5KTTH5PW.
•*PHP5KTTH5TBE$. Nombre de usuario introducido.
•*PHP5KTTH5PW. &ontraseAa introducida.
Para que el navegador nos muestre la ventana de petición de nombre de usuario ' contraseAa basta con
enviar la siguiente cabecera0
<%php Manual de PHP de WebEstilo.com
i( )!isset)*PHP5KTTH5TBE$// 0
heade")[WWW-KuthenticateD #asic "ealm+&Kcceso "est"ingido&[/'
heade")[HTTP-., 3,- Tnautho"iUed[/'
echo [Kutho"iUation $eCui"ed.['
eHit'
1
else 0
echo &Ha int"oducido el nomb"e de usua"ioD *PHP5KTTH5TBE$<b">&'
echo &Ha int"oducido la cont"ase`aD *PHP5KTTH5PW<b">&'
1
%>
Ejecutar ejemplo .er código fuente
Esto provoca que se muestre la ventana de nombre de usuario ' contraseAa ' los datos introducidos se
asignen a las variables *PHP5KTTH5TBE$ ' *PHP5KTTH5PW.
( partir de aquí reali/aremos las comprobaciones necesarias para asegurarnos que los datos introducidos son
los correctos.
En el siguiente ejemplo pediremos autori/ación ' comprobaremos si el nombre de usuario es Woe ' la
contraseAa ->2, si es así tendremos acceso al resto de la página.
<%php Manual de PHP de WebEstilo.com
i( ))*PHP5KTTH5TBE$!+&Woe&/ @@ )*PHP5KTTH5PW!+&->2&// 0
heade")[WWW-KuthenticateD #asic "ealm+&Kcceso "est"ingido&[/'
heade")[HTTP-., 3,- Tnautho"iUed[/'
echo [Kutho"iUation $eCui"ed.['
eHit'
1
%>
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
Ha conseguido el acceso a la <#>Uona "est"ingida<#>.
<bod!>
<html>
Ejecutar ejemplo .er código fuente
,istinción de usuarios
En la anterior página todo el mundo que tenía acceso a la parte restringida entraba con el mismo nombre de
usuario ' contraseAa, esto evidentemente no es una buena solución, es mejor que cada persona tenga un
nombre de usuario ' contraseAa, 'a que de esta forma podemos in-abilitar a un usuario sin ver
comprometida la seguridad de nuestro sitio.
En esta página veremos la forma de reali/ar esto, teniendo un fic-ero separado con los nombres de usuario '
las contraseAas válidas. ;ic-o fic-ero podría tener el siguiente formato0nomb"e5de5usua"io@cont"ase`a.
Por ejemplo0
pass@ords.t7t
Woe@->27
Ped"o@CAe"
Ooe@Pt!37e
Ee"mit@"Ae36
En este ejemplo se pide la autori/ación al comien/o de la página si no se -a establecido con anterioridad ' se
comprueba con el fic-ero de contraseAas que -emos llamado pass@ords.t7t, si el nombre de usuario '
contraseAa coincide con alguna entrada del fic-ero se nos permite ver el resto de la página.
<%php Manual de PHP de WebEstilo.com
i( )!isset)*PHP5KTTH5TBE$// 0
heade")[WWW-KuthenticateD #asic "ealm+&Kcceso "est"ingido&[/'
heade")[HTTP-., 3,- Tnautho"iUed[/'
echo [Kutho"iUation $eCui"ed.['
eHit'
1

*(ich + (ile)&passAo"ds.tHt&/'
*i+,' *6alidado+(alse'
Ahile )*(ichQ*iR ?? !*6alidado/ 0
*campo + eHplode)&@&4*(ichQ*iR/'
i( ))*PHP5KTTH5TBE$++*campoQ,R/ ?? )*PHP5KTTH5PW++chop)*campoQ-R/// *6alidado+t"ue'
*i..'
1
i( )!*6alidado/ 0
heade")[WWW-KuthenticateD #asic "ealm+&Kcceso "est"ingido&[/'
heade")[HTTP-., 3,- Tnautho"iUed[/'
echo [Kutho"iUation $eCui"ed.['
eHit'
1
%>
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
Ha conseguido el acceso a la <#>Uona "est"ingida<#> con el usua"io <%php echo *PHP5KTTH5TBE$%>.
<bod!>
<html>
Ejecutar ejemplo .er código fuente
!esiones %PHP&'
-.u son las sesiones/
Por0 $ose .alle
%i e7iste una consulta repetida en las listas de PHP, es la relativa al uso de las sesiones. El uso de sesiones es
un m9todo ampliamente e7tendido en cualquier aplicación de cierta entidad. =ásicamente una sesión es la
secuencia de páginas que un usuario visita en un sitio @eb. ;esde que entra en nuestro sitio, -asta que lo
abandona.
El t9rmino sesión en PHP, session en ingl9s, se aplica a esta secuencia de navegación, para ello crearemos un
identificador 5nico que asignamos a cada una de estas sesiones de navegación. ( este identificador de sesión
se le denomina, com5nmente, como la sesión.
El proceso en cualquier lenguaje de programación podría ser algo así0
E7iste una sesiónF
%i e7iste la retomamos
%i no e7iste creamos una nueva
*enerar un identificador 5nico
E para que no perdamos el -ilo de la navegación del usuario deberemos asociar esta sesión a todas las 6>!s
' acciones de formulario. Podemos tambi9n crear un cooGie que inclu'a el identificador de sesión, pero es
conveniente recordar que la disponibilidad o no de las cooGies depende del usuario, ' no es conveniente
fiarse de lo que un usuario pueda o no tener -abilitado.
!o contado -asta a-ora es teoría pura ' es aplicable a cualquier lenguaje de programación &, Perl, etc. !os
que programamos en PHPB tenemos la suerte de que toda la gestión de sesiones la -ace el mismo PHP.
Por lo tanto lo comentado a partir de aquí es solo aplicable a PHP0. %i a5n desarrollas PHP:, tendrás que
crear tus propias librerías de gestión de sesiones o recurrir a alguna de las e7istentes, como la de PHP!+=
.
1niciali2ación de la sesión
Por0 $ose .alle
Para utili/ar sesiones en PHP lo primero es iniciali/arlas. Podemos -acerlo e7plícitamente, mediante la
función session5sta"t)/, o al registrar una variable en una sesión
mediantesession5"egiste")[miZa"iable[/. En ambos casos se crea una nueva sesión, si no e7iste, o
se retoma la sesión actual. .eamos un sencillo ejemplo0
<%php Manual de PHP de WebEstilo.com
session5sta"t)/'
echo &He inicialiUado la sesión&'
%>
Ejecutar ejemplo .er código fuente
Esta es la forma más básica, si el usuario tiene los cooGies activados, PHP -abrá insertado de forma
automática la sesión ' 9sta será pasada de una página a otra sin -acer nada más. ;esde un punto de vista
práctico la sesión es operativa, pero no vemos nada. Podemos obtener la sesión en cualquier momento
mediante la función session5id)/. +nserta en las sucesivas páginas la siguiente línea para ver si la sesión
está disponible0
<%php Manual de PHP de WebEstilo.com
session5sta"t)/'
echo [La sesión actual esD [.session5id)/'
%>
Ejecutar ejemplo .er código fuente
En este caso session5sta"t)/ comprueba en los cooGies que e7iste una sesión ' continua con
ella, session5id)/ devuelve el identificador actual.
Ejemplo práctico
Por0 $ose .alle
.eamos otro ejemplo que, tal ve/, te lo aclare un poco más0
<%php Manual de PHP de WebEstilo.com
session5"egiste")[contado"[/'
echo [<a h"e(+&[.*PHP5BELG.[%[.*BFM.[&>Nontado" 6aleD [...*5BEBBFLOQ[contado"[R. [<a>['
%>
Ejecutar ejemplo .er código fuente
&omo dije anteriormente la sesión se crea o recoge mediante session5sta"t)/, o tambi9n cuando se
registra una variable de sesión mediante session5"egiste")/.
%i no -as utili/ado nunca las sesiones, el concepto de variable de sesión, puede resultar un poco abstracto.
=ásicamente es una variable, como cualquiera de las que gestiona PHPB, pero que reside en un espacio
específico en el servidor, junto con el identificador de sesión, ' que pertenece 5nicamente a un usuario.
En nuestro ejemplo anterior, registramos la variable *contado" en la primera línea del script. En la segunda
línea, entre otras cosas, cada ve/ que recarguemos la página o -agamos clicG sobre el enlace, el valor
de *contado" se incrementará en 2.
En esta línea -acemos uso de la variable reservada *PHP5BELG, que -ace referencia al propio script en
ejecución ' una constante propia de PHPB, *BFM, que contiene el nombre de la sesión ' el identificador de la
misma.
Podemos averiguar tambi9n el nombre de la sesión, o modificarlo, mediante la funciónsession5name)/.
.eamos una prueba práctica0
<%php Manual de PHP de WebEstilo.com
session5name)[misesion[/'
session5"egiste")[contado"[/'
echo [<a h"e(+&[.*PHP5BELG.[%[.BFM.[&>Nontado" 6aleD [...*5BEBBFLOQ[contado"[R.[<a><b">['
echo [Kho"a el nomb"e es [.session5name)/.[ ! la sesión [.*misesion.[<b">['
%>
Ejecutar ejemplo .er código fuente
!a asignación del nombre de sesión debe reali/arse antes que ninguna otra función con sesiones, antes
que session5sta"t)/ o session5"egiste")/.
%rror com3n
Por0 $ose .alle
6no de los errores más comunes cuando se utili/an sesiones es dejar líneas en blanco antes de la
iniciali/ación de PHP o enviar alguna salida a la pantalla. Para probarlo crea una línea en blanco o con
cualquier cosa antes de <%php.
%i tienes los cooGies activados, te encontrarás un error de este tipo0
Wa"ningD Nannot send session cooEie - heade"s al"ead! sent b! )output sta"ted at
homesession.phpD>/ in homesession.php on line 3
PHP está informando de que no puede activar los cooGies en el navegador del usuario, porque las cabeceras
'a -an sido enviadas. %implemente por la e7istencia de una línea en blanco. &omo medida práctica, no dejes
espacios ni antes del inicio del script, ni despu9s de la finali/ación.
Te a-orrará muc-os disgustos.
%i despu9s de todo lo comentado a5n no entiendes para que sirven las sesiones, veamos un ejemplo
práctico. +magina que quisieras crear un sistema de cesta de la compra...
Carrito de compra
Por0 $ose .alle
%i despu9s de todo lo comentado a5n no entiendes para que sirven las sesiones, veamos un ejemplo
práctico. +magina que quisieras crear un sistema de cesta de la compra, en su forma básica podría ser algo
así0
<%php Manual de PHP de WebEstilo.com
session5sta"t)/'
session5"egiste")[itemsEnNesta[/'
*item+*5PLBTQ[item[R'
*cantidad+*5PLBTQ[cantidad[R'
*itemsEnNesta+*5BEBBFLOQ[itemsEnNesta[R'
i( )*item/0
i( )!isset)*itemsEnNesta//0
*itemsEnNestaQ*itemR+*cantidad'
1else0
(o"each)*itemsEnNesta as *E +> *6/0
i( )*item++*E/0
*itemsEnNestaQ*ER.+*cantidad'
*encont"ado+-'
1
1
i( )!*encont"ado/ *itemsEnNestaQ*itemR+*cantidad'
1
1
*5BEBBFLOQ[itemsEnNesta[R+*itemsEnNesta'
%>
<html>
<bod!>
<tt>
<(o"m action+&<%+*PHP5BELG.&%&.*BFM%>& method+&post&>
Mime el p"oducto <input t!pe+&teHt& name+&item& siUe+&>,&><b">
Nuantas unidades <input t!pe+&teHt& name+&cantidad& siUe+&>,&><b">
<input t!pe+&submit& 6alue+&K`adi" a la cesta&><b">
<(o"m>
<%
i( )isset)*itemsEnNesta//0
echo[El contenido de la cesta de la comp"a esD<b">['
(o"each)*itemsEnNesta as *E +> *6/0
echo [K"tXculoD [.*E.[ udD [.*6.[<b">['
1
1
%>
<tt>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
6na breve e7plicación. En la línea B comprobamos si el usuario -a pasado alg5n artículo, desde el formulario.
En la H si el arra' itemsEnNesta no e7iste, lo creamos con el nuevo producto ' la cantidad indicada. %i el
arra' e7iste recorremos su contenido, entre las líneas I ' 2:, ' si encontramos un artículo igual, aAadimos la
cantidad en la línea 23. %i no lo encontramos, es un nuevo artículo, por lo tanto, aAadimos el nuevo producto
con la correspondiente cantidad a itemsEnNesta en la línea 2B.
E a continuación imprimimos el formulario ' los resultados, si los -ubiera, a partir de la línea 2I, donde
empie/a el HT!.
JTe imaginas las posibilidades de un sistema de almacenamiento de información de estas característicasF. No
necesitas fic-eros, ni bases de datos, ni tienes que andar pasando valores de una página a otra. PHP va
gestionando estos datos por nosotros, -asta el momento en que decidamos almacenar la información donde
más nos interese.
Estas son las funcionalidades básicas de las sesiones, espero que te -a'a resultado ilustrativo ' no olvides
consultar el resto de funciones asociadas al uso de sesiones en elmanual de PHP.
(oo)ies
-.u son las coo4ies/
Por0 &arlos *all5s !a-o/ ' $oaquin *racia.
!a principal utilidad de las cooGies )galletas, es la de solventar el problema de la falta de estado en la
navegación a trav9s de las paginas @eb.
&on las cooGies, pequeAas porciones de información se quedan registradas en el navegador permitiendo
identificar a este a trav9s de diferentes páginas de un mismo sitio e incluso durante visitas entre distintos
días.
>ealmente las cooGies no son mas que cadenas de te7to que son enviadas desde el servidor al cliente
)navegador, ' almacenadas en este, luego el navegador envía estas cooGies al servidor permitiendo así la
identificación del cliente en el servidor.
#uncionamiento
!a cooGie es enviada al navegador desde el servidor ' si este la acepta permanece en 9l.
!as páginas piden la cooGie al navegador...
El navegador las envía, permitiendo la identificación del usuario por parte del servidor.
( continuación vamos a ver como usar las cooGies para nuestro beneficio.
Cómo usar las coo4ies
Por0 &arlos *all5s !a-o/ ' $oaquin *racia.
El manejo de cooGies en PHP se reali/a mediante el uso de la funciónsetcooEie, esta función esta
disponible a partir de la versión : de PHP.
int setcooEie )st"ing Oomb"e Q4 st"ing Zalo" Q4 int EHpi"e Q4 st"ing Path Q4 st"ing Mominio Q4 int
Becu"eRRRRR/
BetcooEie)/ define una cooGie que es enviada junto con el resto de la información de la cabecera)-eader,.
!as cooGies deben ser enviadas antes de cualquier tag de -tml, por lo tanto deberemos reali/ar la llamada a
estas funciones antes de cualquier tag <HTML> o<HEKM>. Esta es una restricción de las cooGies no de PHP.
Todos los argumentos e7cepto el nombre son opcionales.
•Oomb"e. Nombre de la cooGie. %i creamos una cooGie solamente con el nombre, en el cliente se
eliminara la cooGie que e7ista con ese nombre. Tambi9n podemos reempla/ar cualquier argumento
con una cadena vacía )11,.
•Zalue. .alor que almacenará la cooGie en el cliente.
•EHpi"e. El argumento e7pire es un argumento entero que indica la -ora en que se eliminara la
cooGie en el formato de -ora que devuelven las funciones 6N+" time), ' mGtime),. Normalmente se
usa time)/ . O. segundos de du"ación, para especificar la duración de una cooGie.
•Path. %ubdirectorio en donde tiene valor la cooGie.
•Mominio. ;ominio en donde tiene valor la cooGie. %i ponemos como dominioAAA.domain.com la
cooGie no se transmite para domain.com, mientras que si ponemos domain.com la cooGie se
transmite tanto para domain.com como paraAAA.domain.com
•Becu"e. El argumento secure indica que la cooGie solo se transmitirá a trav9s de una cone7ión
segura HTTP%.
Ejemplo
setcooEie)&usua"io&4 &Luis&4 time)/.28,,4&&4&Aebestilo.com&/'
En este ejemplo establecemos una cooGie de nombre usua"io que contiene el valorLuis, que dura -
ho"a ):K33 segundos, válida para todo el dominio Aebestilo.com
%jemplo de uso de coo4ies
Por0 &arlos *all5s !a-o/ ' $oaquin *racia.
En este ejemplo vamos a ver como establecer una cooGie ' cómo se recupera el valor establecido. Para ello
pediremos al usuario que introdu/ca su nombre, que guardaremos en una cooGie.
Primero pedimos al usuario que introdu/ca el valor de su nombre, usamos un formulario que procesará la
página p"ocesa"5cooEie.phtml.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<H->Ejemplo de uso de cooEie<H->
Fnt"oduUca su nomb"eD
<GL$M KNTFLO+&p"ocesa"5cooEie.phtml& METHLM+&PET&>
<FOPTT TYPE+&teHt& OKME+&nomb"e&><#$>
<FOPTT TYPE+&submit& ZKLTE+&En6ia"&>
<GL$M>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
%e establece la cooGie ejemusua"io con el valor introducido anteriormente, ' cu'a duración es una -ora.
<%php Manual de PHP de WebEstilo.com
setcooEie)&ejemusua"io&4 *5PETQ[nomb"e[R4 time)/.28,,4&&4&&/'
%>
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<H->Ejemplo de uso de cooEie<H->
Be ha establecido una cooEie de nomb"e <b>ejemusua"io<b> con el 6alo"D <b><% p"int *5PETQ[nomb"e[R' %
><b> Cue se"I 6Ilida du"ante - ho"a.
<bod!>
<html>
.er código fuente
En este ejemplo vemos lo fácil que es recuperar el valor de la cooGie establecida anteriormente.
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Ejemplo de PHP<title>
<head>
<bod!>
<H->Ejemplo de uso de cooEie<H->
Be ha establecido la cooEie de nomb"e <b>ejemusua"io<b> 6aleD <b><% p"int *5NLL\FEQ[ejemusua"io[R' %
><b>
<bod!>
<html>
Ejecutar ejemplo .er código fuente
3ttp4//5555ebestilocom/p3p/p3p66p3tml
3ttp4//5555ebestilocom/p3p/p3p16ap3tml