Está en la página 1de 80

Taller de PHP

(Personal Home Page)


Hypertext Preprocessor




PAT. Pedro Csar Santana Mancilla







UNIVERSIDAD DE COLIMA
Facultad de Telemtica
Tal l er de PHP pecesama

1
ndice

ndice
Capitulo I.- Introduccin
Corta historia de PHP
Qu es PHP?
Qu se necesita para que funcione PHP?
Iniciar con PHP

Capitulo II.- Programacin con PHP
Separacin de instrucciones
Comentarios en PHP
Variables
Variables variables
Tipos de datos
Ent er os
Nmer os en punt o f l ot ant e
Cadenas
Car act er es pr ot egi dos
Oper ador es de compar aci n
Oper ador es Lgi cos
Oper ador es de Asi gnaci n
Oper ador es Bi t Bi t
Constantes
Sentencias de control
i f . . . el se
i f . . . el sei f . . . el se
swi t ch. . . case. . . def aul t
whi l e
do. . . whi l e
f or
Vectores (tablas)
Tabl as mul t i di mensi onal es
Formularios
Bot n de comando
Cuadr o de t ext o
Cuadr o de t ext o con bar r as de despl azami ent o
Casi l l a de ver i f i caci n o checkbox
Bot n de r adi o u opci n
Men despl egabl e
Campo ocul t o

Capitulo III.- Almacenamiento de la
informacin
Archivos
Fopen
Fwr i t e
Fr ead
Bases de datos
Qu es MySQL?

1

4
5
5
5


14
14
15
16
16
16
17
17
17
18
18
18
18
19
21
21
23
23
24
24
25
26
28
29
29
29
30
31
32
32
34



39
39
40
40
41
41
Tal l er de PHP pecesama

2
Car act er st i cas pr i nci pal es de MySQL
I nst al ando MySQL Ser ver
Conect ndose y desconect ndose al ser vi dor MySQL
Cr eando y usando una base de dat os
Vi sual i zaci n de l as bases de dat os exi st ent es en el
ser vi dor MySQL
Sel ecci n de una base de dat os
Cr eaci n de una base de dat os
Cr eaci n de t abl as
I ngr eso de Dat os a l as t abl as
Recuper aci n de l a I nf or maci n
MySQL Front
PHP para bases de datos MySQL
Conect ar se
Agr egar r egi st r os
Modi f i car r egi st r os
El i mi nar r egi st r os
Conceptos bsicos sobre ODBC
PHP con ODBC
Conect ar se
Agr egar
Modi f i car
El i mi nar

Capitulo IV.- Funciones de red
Cookies
Funci onami ent o
Cmo usar l as cooki es
Ej empl o de uso de cooki es
Sesiones
I ni ci al i zaci n de l a sesi n
Er r or comn
Car r i t o de compr a
Envi de e-mails
Envi de e-mails con attachments
42
43
46
47

47
47
48
48
49
49
50
54
54
55
56
58
59
64
64
64
64
65


67
67
68
68
69
69
71
71
72
74
















Tal l er de PHP pecesama

3

Capitulo I
Introduccin


















Tal l er de PHP pecesama

4
Corta historia de PHP
PHP es un lenguaje creado por una gran comunidad de personas. El sistema fue
desarrollado originalmente en el ao 1994 por Rasmus Lerdorf como un CGI escrito en C
que permita la interpretacin de un nmero limitado de comandos. El sistema fue
denominado Personal Home Page Tools y adquiri relativo xito gracias a que otras
personas pidieron a Rasmus que les permitiese utilizar sus programas en sus propias
pginas. Dada la aceptacin del primer PHP y de manera adicional, su creador dise un
sistema para procesar formularios al que le atribuy el nombre de FI (Form Interpreter) y el
conjunto de estas dos herramientas, sera la primera versin compacta del lenguaje: PHP/FI.
La siguiente gran contribucin al lenguaje se realiz a mediados del 97 cuando se
volvi a programar el analizador sintctico, se incluyeron nuevas funcionalidades como el
soporte a nuevos protocolos de Internet y el soporte a la gran mayora de las bases de datos
comerciales. Todas estas mejoras sentaron las bases de PHP versin 3. Actualmente PHP se
encuentra en su versin 4, que utiliza el motor Zend, desarrollado con mayor meditacin
para cubrir las necesidades actuales y solucionar algunos inconvenientes de la anterior
versin. Algunas mejoras de esta nueva versin son su rapidez -gracias a que primero se
compila y luego se ejecuta, mientras que antes se ejecutaba mientras se interpretaba el
cdigo-, su mayor independencia del servidor web -creando versiones de PHP nativas para
ms plataformas- y un API ms elaborado y con ms funciones.

Grfica del nmero de dominios y direcciones IP que utilizan PHP.
Estadstica de Netcraft.

En el ltimo ao, el nmero de servidores que utilizan PHP se ha disparado,
logrando situarse cerca de los 5 millones de sitios y 800.000 direcciones IP, lo que le ha
convertido a PHP en una tecnologa popular.





Tal l er de PHP pecesama

5
Qu es PHP?

El lenguaje PHP es un lenguaje de programacin de estilo clsico, es decir, es un
lenguaje de programacin con variables, sentencias condicionales, ciclos (bucles),
funciones. No es un lenguaje de marcado como podra ser HTML, XML o WML. Est
ms cercano a J avaScript o a C, para aquellos que conocen estos lenguajes.

Pero a diferencia de J avaScript que se ejecuta en el navegador, PHP se ejecuta en el
servidor, por eso nos permite acceder a los recursos que tenga el servidor como por ejemplo
podra ser una base de datos. El programa PHP es ejecutado en el servidor y el resultado
enviado al navegador. El resultado es normalmente una pgina HTML pero igualmente
podra ser una pagina WML.

Al ser PHP un lenguaje que se ejecuta en el servidor no es necesario que su
navegador lo soporte, es independiente del browser, pero sin embargo para que las pginas
PHP funcionen, el servidor donde estn alojadas debe soportar PHP.



Qu se necesita para que funcione PHP?

Versin compilada de PHP (http://www.php.net).
Un servidor web (Apache, PWS, IIS, Etc.).
Si desea manejar base de datos se recomienda Mysql Server
(http://www.mysql.com).


Iniciar con PHP

Instalar el servidor WEB.

Trabajaremos con sistemas operativos Microsoft Windows (2000 Professional y XP
Professional), por lo que vamos a instalar un IIS (versin 5 para w2k y 5.1 para wXP).



Tal l er de PHP pecesama

6
Para instalarlo tenemos que seguir los siguientes pasos:

Ir al panel de control de Microsoft Windows



Seleccionar lo opcin Agregar o quitar programas



Seleccionar la opcin de Agregar o quitar componentes y ah elegir la
opcin Servicios de Internet Information Server (IIS)



Tal l er de PHP pecesama

7
Tenemos que esperar a que se instale



Despus de estos pasos ya esta instalado nuestro servidor de web que
necesitamos para ejecutar pginas de Internet.

La forma de saber si se ha instalado correctamente nuestro servidor es tecleando en la barra
de direcciones de nuestro navegador (Internet Explorer o Netscape Navigator) la siguiente
direccin http://localhost y nos debe aparecer la siguiente pgina web:



Tal l er de PHP pecesama

8
Instalar el modulo de PHP.


Los pasos para instalar el modulo de PHP son los siguientes:


Al iniciar el programa de instalacin veremos la siguiente pantalla.



La siguiente pantalla es la de bienvenida, solo hay que presionar el botn de
Next >.



La pantalla que sigue es la licencia de PHP, si la aceptamos debemos de
presionar I Agree.



Tal l er de PHP pecesama

9
Lo que sigue es elegir el tipo de instalacin, cuenta con dos opciones,
estndar y avanzado, para nuestras necesidades elegiremos la forma
estndar, por lo tanto seleccionamos el botn de radio que dice Standar.



Ahora tendremos que elegir el directorio en el cual se instalar el PHP, el
instalador trae por default el directorio C:\PHP, lo dejaremos as, por lo
tanto presionamos Next.



Lo que nos pide la siguiente pantalla son los datos para el administrador del
sistema por si falla algo en PHP, para este curso solo presionamos Next,
pero tambin puede introducir una direccin vlida.



Tal l er de PHP pecesama

10
Ahora se nos pregunta el tipo de servidor que estamos utilizando, como ya
haba mencionado antes, asaremos IIS versin 5 y 5.1, por lo tanto
seleccionamos el botn de radio que tiene la opcin de Microsoft IIS 4 or
higher.



La siguiente pantalla nos avisa que ya esta listo para instalar PHP, as que
solo presionamos Next.



Veremos como va el proceso de la instalacin.






Tal l er de PHP pecesama

11
La siguiente pantalla lo que nos dice es que seleccionemos que parte del IIS
queremos que ejecute PHP, como solo tenemos instalado el servicio de web,
solo nos presenta esa opcin, pero con eso es suficiente, as que
seleccionamos el checkbox que dice WWW Service Master Properties.



Por ultimo nos dice que la instalacin se ha completado y estamos listo para
ejecutar PHP en nuestro servidor.




La forma de saber si se ha instalado correctamente el PHP en nuestro servidor
haciendo un pequeo programita PHP, el mas bsico que nos servir de prueba para ver si
se ha instalado correctamente, entonces abrimos un editor de texto cualquiera (con el cual
haremos nuestros programas PHP, puede ser el NotePad), y escribimos las siguientes
lneas:

<?
phpi nf o( ) ;
?>

despus de escribir estas lneas guardamos nuestro archivo en el directorio
c:\inetpub\wwroot\taller\ el cual va a ser nuestro directorio de trabajo para este curso,
(como informacin, el IIS utiliza como directorio raz el directorio c:\inetpub\wwroot), le
pondremos al archivo prueba.php ahora tecleamos en la barra de direcciones de nuestro
Tal l er de PHP pecesama

12
navegador (Internet Explorer o Netscape Navigator) la siguiente direccin
http://localhost/taller/prueba.php y nos debe aparecer la siguiente pgina web:



si no aparece esta pgina, entonces esta mal instalado el PHP y hay que volverlo a instalar,
aunque hay algunas ocasiones que se necesita reiniciar el sistema para que funcione.




















Tal l er de PHP pecesama

13
Capitulo II
Programacin con PHP



















Tal l er de PHP pecesama

14
Ahora que ya tenemos instalado nuestro servidor y el modulo de PHP, podemos
iniciar ha hacer programas PHP, pero Cmo hacerlos?, un ejemplo nos aclarar las cosas:

<ht ml >
<head>
<t i t l e>Ej empl o PHP</ t i t l e>
</ head>
<body>
<?php echo "Hola, este es un ejemplo con PHP"; ?>
</ body>
</ ht ml >

Podemos ver que no es lo mismo que un script CGI escrito en otro lenguaje de
programacin como Perl o C -- En vez de escribir un programa con muchos comandos para
crear una salida en HTML, escribimos el cdigo HTML con cierto cdigo PHP embebido
(introducido) en el mismo, que producir cierta salida (en nuestro ejemplo, producir un
texto). El cdigo PHP se incluye entre etiquetas especiales de comienzo y final que nos
permitirn entrar y salir del modo PHP.

Pero cuales son estas etiquetas especiales de comienzo y final??, esto nos lleva a
que hay 4 formas de salir de HTML y entrar en modo PHP, las cuales son las siguientes:

<? echo ( For ma 1" ) ; ?>

<?php echo( For ma 2" ) ; ?>

<scr i pt l anguage=" php" > echo ( For ma 3" ) ; </ scr i pt >

<%echo( " Et i quet as t i po ASP" ) ; %>

Separacin de instrucciones

Las instrucciones se separan igual que en C o Pascal terminando cada sentencia con
un punto y coma.

La etiqueta de cierre ( ?>) tambin implica el fin de la sentencia, as lo siguiente es
equivalente:

<?php echo " Est o es una pr ueba" ; ?>
<?php echo " Est o es una pr ueba" ?>

Comentarios en PHP

PHP soporta comentarios tipo 'C', 'C++' y Shell de Unix. Por ejemplo:

<?php
echo Pr ueba" ; / / Coment ar i o t i po C++ par a una l nea
?>

Tal l er de PHP pecesama

15
<?php
/ *
Est o es un coment ar i o mul t i l nea
ot r a l nea ms de coment ar i o
*/
echo " Est o es an ot r a pr ueba" ; ?>

<?php
echo " Pr ueba" ; # Coment ar i o t i po shel l de Uni x
?>

Variables

Antes de ver como se utilizan las variables en PHP veremos una pequea
introduccin a las variables, para los que no conozcan que es una variable.

Una variable consiste en un elemento al cual le damos un nombre y le atribuimos un
determinado tipo de informacin. Las variables pueden ser consideradas como la base de la
programacin.

De este modo podramos escribir en un lenguaje ficticio:

a="perro"
b="muerde"

La variable que nosotros llamamos "a" posee un elemento de informacin de tipo
texto que es "perro". Asimismo, la variable "b" contiene el valor "muerde".

Podramos definir una tercera variable que fuese la suma de estas dos:

c=a+b

Si introdujsemos una peticin de impresin de esta variable en nuestro lenguaje
ficticio:

imprimir(c)

El resultado podra ser:

perro muerde

Podramos de la misma forma trabajar con variables que contuviesen nmeros y
construir nuestro programa:

a=3
b=4
c=a+b
Tal l er de PHP pecesama

16
imprimir(c)

El resultado de nuestro programa sera:

7

En PHP las variables se representan como un signo de pesos seguido por el nombre
de la variable. El nombre de la variable es sensible a minsculas y maysculas.

$var = " Sant ana" ;
$Var = " Pedr o" ;
echo " $var , $Var " ;
/ / pr oduce l a sal i da Sant ana, Pedr o"

Variables variables

A veces es conveniente tener nombres de variables variables. Dicho de otro modo,
son nombres de variables que se pueden establecer y usar dinmicamente. Una variable
normal se establece con una sentencia como:

$a = " Hol a" ;

Una variable variable toma el valor de una variable y lo trata como el nombre de
una variable. En el ejemplo anterior, Hola, se puede usar como el nombre de una variable
utilizando dos signos de peso. p.ej.

$$a = " mundo" ;

Probemos las siguientes sentencias:

echo " $a ${$a}" ;

echo " $a $Hol a" ;

Los dos no regresarn Hola mundo

Tipos de datos

Enteros:

Los enteros se puede especificar usando una de las siguientes sintaxis:

$a = 1234; #nmero decimal
$a = - 123; #un nmero negativo
$a = 0123; #nmero octal (equivalente al 83 decimal)
$a = 0x12; #nmero hexadecimal (equivalente al 18 decimal)

Tal l er de PHP pecesama

17
Nmeros en punto flotante:

Los nmeros en punto flotante ("double") se pueden especificar utilizando
cualquiera de las siguientes sintaxis:

$a = 1. 234;
$a = 1. 2e3;

Cadenas:

El nico operador de cadenas que existen es el de concatenacin, el punto. Pero no
se preocupen, PHP dispone de toda una gama de funciones que nos permitirn trabajar
cmodamente con las cadenas.

$a = " Hol a" ;
$b = $a . " Mundo" ; // Ahora $b contiene "Hola Mundo"

En este punto hay que hacer una distincin, la interpretacin que hace PHP de las
simples y dobles comillas. En el segundo caso PHP interpretar el contenido de la cadena.

$a = " Mundo" ;
echo = ' Hol a $a' ; //Esto escribir "Hola $a"
echo = " Hol a $a" ; //Esto escribir "Hola Mundo"
Si la cadena est encerrada entre dobles comillas ("), las variables que estn dentro
de la cadena sern expandidas (sujetas a ciertas limitaciones de interpretacin). Como en C
y en Perl, el carcter de barra invertida ("\") se puede usar para especificar caracteres
especiales:
Caracteres protegidos
\ n
Nueva lnea
\ r
Retorno de carro
\ t
Tabulacin horizontal
\ \
Barra invertida
\ $
Signo del dlar
\ "
Comillas dobles
\ [ 0- 7] {1, 3}
La secuencia de caracteres que coincida con la expresin regular es
un carcter en notacin octal
\ x[ 0- 9A- Fa-
f ] {1, 2}
La secuencia de caracteres que coincida con la expresin regular es
un carcter en notacin hexadecimal



Tal l er de PHP pecesama

18
Operadores de Comparacin:

$a < $b $a menor que $b
$a > $b $a mayor que $b
$a <= $b $a menor o igual que $b
$a >= $b $a mayor o igual que $b
$a == $b $a igual que $b
$a ! = $b $a distinto que $b

Operadores Lgicos:

$a AND $b Verdadero si ambos son verdadero
$a && $b Verdadero si ambos son verdadero
$a OR $b Verdadero si alguno de los dos es verdadero
$a ! ! $b Verdadero si alguno de los dos es verdadero
$a XOR $b Verdadero si slo uno de los dos es verdadero
! $a Verdadero si $a es falso

Operadores de Asignacin:

$a = $b Asigna a $a el contenido de $b
$a += $b Le suma a $b a $a
$a - = $b Le resta a $b a $a
$a *= $b Multiplica $a por $b y lo asigna a $a
$a / = $b Divide $a por $b y lo asigna a $a
$a . = $b Aade la cadena $b a la cadena $a
Operadores Bit a bit
Los operadores bit a bit te permiten activar o desactivar bits individuales de un
entero.
ejemplo nombre resultado
$a
&
$b
Y
Se activan los bits que estn activos tanto en $a como
$b.
$a
|
$b
O
Se activan los bits que estn activos en $a o que lo estn
en $b.
$a
^
$b
Xor ("o exclusiva")
Se activan los bits que estn activos en $a o en $b pero
no en ambos a la vez.
~
$a
No Se activan los bits que no estn activos en $a.
$a
<<
Desplazamiento a la Desplaza los bits de $a, $b posiciones hacia la izquierda
Tal l er de PHP pecesama

19
ejemplo nombre resultado
$b
izquierda (por aritmtica binaria, cada posicin desplazada
equivale a multiplicar por dos el valor de $a)
$a
>>
$b
Desplazamiento a la
derecha
Desplaza los bits de $a, $b posiciones hacia la derecha
(por aritmtica binaria, cada posicin desplazada
equivale a dividir entre dos el valor de $a)

Para demostrar el uso de algunos operadores mostrar algunos ejemplos en PHP:

El siguiente programa calcula el salario de un trabajador con un impuesto

<ht ml >
<body>
<?php
$Sal ar i oTr abaj ador = 3500;
$I mpuest o = 20; / / Por cent aj e
$Suel doReal = $Sal ar i oTr abaj ador - ( ( $Sal ar i oTr abaj ador /
100) * $I mpuest o) ;
echo Suel do del t r abaj ador si n i mpuest o:
$Sal ar i oTr abaj ador <BR>;
echo Con el i mpuest o : $Suel doReal ;
?>
</ body >
</ ht ml >

Programa en PHP que calcula el rea de un triangulo cuya formula es a=(b*h)/2

<?php
$Base=15;
$Al t ur a=12;
$Ar ea = ( $Base * $Al t ur a) / 2;
pr i nt f ( El ar ea del t r i angul o es: $Ar ea) ;
?>
Programa que dados 2 nmeros calcule la suma, resta, multiplicacin, divisin, y modulo.

<?php
$Num1=8;
$Num2=5;
pr i nt f ( La suma de $Num1 y $Num2 es: <b>%d</ b><br >, $Num1 +
$Num2 ) ;
pr i nt f ( La r est a de $Num1 y $Num2 es: <b>%d</ b><br >, $Num1
- $Num2 ) ;
pr i nt f ( La mul t i pl i caci n de $Num1 y $Num2 : <b>%d</ b><br >,
$Num1 * $Num2 ) ;
pr i nt f ( La di vi si on de $Num1 y $Num2: <b>%0. 2f </ b><br >,
$Num1 / $Num2 ) ;
pr i nt f ( El modul o de $Num1 y $Num2 es <b>%0. 1f </ b><br >,
$Num1 %$Num2 ) ;
?>

Constantes
Tal l er de PHP pecesama

20
PHP define varias constantes y proporciona un mecanismo para definir ms en
tiempo de ejecucin. Las constantes son como las variables, salvo por las dos
circunstancias de que las constantes deben ser definidas usando la funcin define(), y que
no pueden ser redefinidas ms tarde con otro valor.
Las constantes predefinidas (siempre disponibles) son:
__FI LE__
El nombre del archivo de comandos que est siendo interpretado
actualmente. Si se usa dentro de un archivo que ha sido incluido o requerido,
entonces se da el nombre del archivo incluido, y no el nombre del archivo
padre.
__LI NE__
El nmero de lnea dentro del archivo que est siendo interpretado en la
actualidad. Si se usa dentro de un archivo incluido o requerido, entonces se
da la posicin dentro del archivo incluido.
PHP_VERSI ON
La cadena que representa la versin del analizador de PHP en uso en la
actualidad.
PHP_OS
El nombre del sistema operativo en el cul se ejecuta el analizador PHP.


TRUE
Valor verdadero.
FALSE
Valor falso.
E_ERROR
Denota un error distinto de un error de interpretacin del cual no es posible
recuperarse.
E_WARNI NG
Tal l er de PHP pecesama

21
Denota una condicin donde PHP reconoce que hay algo errneo, pero
continuar de todas formas; pueden ser capturados por el propio archivo de
comandos.
E_PARSE
El interprete encontr sintaxis invlida en el archivo de comandos. La
recuperacin no es posible.
E_NOTI CE
Ocurri algo que pudo ser o no un error. La ejecucin contina. Los
ejemplos incluyen usar una cadena sin comillas como un ndice "hash", o
acceder a una variable que no ha sido inicializada.
Las constantes E_* se usan tpicamente con la funcin error_reporting() para
configurar el nivel de informes de error.
Se pueden definir constantes adicionales usando la funcin define().
Ntese que son constantes, con una constante slo se pueden representar datos
escalares vlidos.

Veremos un ejemplo del uso de estas constantes:
<?php
f unct i on r epor t _er r or ( $ar chi vo, $l i nea, $mensaj e) {
echo " Un er r or ocur r i en $ar chi vo en l a l nea $l i nea:
$mensaj e. " ;
}
r epor t _er r or ( __FI LE__, __LI NE__, " Al go est a mal ! " ) ;
?>
Ahora veremos como definir nuestras propias constantes:
<?php
def i ne( " CONSTANTE" , " Hol a mundo. " ) ;
echo CONSTANTE; / / muest r a " Hol a mundo. "
?>

Sentencias de control

Las sentencias de control permiten ejecutar bloque de cdigos dependiendo de unas
condiciones. Para PHP el 0 es equivalente a Falso y cualquier otro nmero es Verdadero.

if...else
Tal l er de PHP pecesama

22

La sentencia if...else permite ejecutar un bloque de instrucciones si la condicin es
Verdadera y otro bloque de instrucciones si sta es Falsa. Es importante tener en cuenta que
la condicin que evaluemos ha de estar encerrada entre parntesis (esto es aplicable a todas
la sentencias de control).

i f ( condi ci n) {
Est e bl oque se ej ecut a si l a condi ci n es VERDADERA
} el se {
Est e boque se ej ecut a si l a condi ci n es FALSA
}

Existe una forma sencilla de usar la sentencia IF cuando no tenemos que usar el else
y solo tenemos que ejecutar una lnea de cdigo.

i f ( $a > 4) echo " $a es mayor que 4" ;


Ahora realizaremos un ejemplo con mas con IF el cual consistir en un pequeo
juego de adivinanzas el cual necesitar de dos archivos adivina.htm y adivina.php, en este
ejemplo se utilizar un formulario, lo cual aun no hemos visto, se usa solo para muestra,
por el momento no es muy importante conocer esa teora sino un poco mas adelante.

adivina.htm

<HTML>
<BODY>
<FORM METHOD=GET ACTI ON=" adivina.php" >
En que numer o del 1 al 10 est oy pensando?
<I NPUT NAME=" adi vi na" TYPE=" Text " >
<BR>
<BR>
<I NPUT TYPE=SUBMI T>
</ FORM>
</ BODY>
</ HTML>


adivina.php

<HTML>
<HEAD></ HEAD>
<BODY>
<?php
sr and( ( doubl e) mi cr ot i me( ) *1000000) ;
$Numer o = r and( 1, 10) ;
i f ( $adi vi na > $Numer o) {
echo " Fue muy gr ande" ; echo " <BR>Yo pens el nmer o
$Numer o. Lo si ent o no " ;
}
i f ( $adi vi na < $Numer o) {
Tal l er de PHP pecesama

23
echo " Fue muy pequeo" ; echo " <BR>Yo pens el nmer o
$Numer o. Lo si ent o no " ;
}
?>
GANASTE
</ BODY>
</ HTML>

if...elseif...else

La sentencia IF...ELSEIF...ELSE permite ejecutar varias condiciones en cascada.
Para este caso veremos un ejemplo, en el que utilizaremos los operadores lgicos.

<?php
i f ( $nombr e == " " ) {
echo " T no t i enes nombr e" ;
} el sei f ( ( $nombr e==" eva" ) OR ( $nombr e==" Eva" ) ) {
echo "
echo " Tu nombr e es EVA" ;
} el se {
echo " Tu nombr e es " . $nombr e;
}

switch...case...default

Una alternativa a if...elseif...else, es la sentencia switch, la cul evala y compara
cada expresin de la sentencia case con la expresin que evaluamos, si llegamos al final de
la lista de case y encuentra una condicin Verdadera , ejecuta el cdigo de bloque que haya
en default. Si encontramos una condicin verdadera debemos ejecutar un break para que la
sentencia switch no siga buscando en la lista de case. Veamos un ejemplo.

<?php
swi t ch ( $di a) {
case " Lunes" :
echo " Hoy es Lunes" ;
br eak;
case " Mar t es" :
echo " Hoy es Mar t es" ;
br eak;
case " Mi er col es" :
echo " Hoy es Mi er col es" ;
br eak;
case " J ueves" :
echo " Hoy es J ueves" ;
br eak;
case " Vi er nes" :
echo " Hoy es Vi er nes" ;
br eak;
case " Sbado" :
echo " Hoy es Sbado" ;
br eak;
case " Domi ngo" :
echo " Hoy es Domi ngo" ;
Tal l er de PHP pecesama

24
br eak;
def aul t :
echo " Esa cadena no cor r esponde a ni ngn d a de l a
semana" ;
}
?>

while

La sentencia while ejecuta un bloque de cdigo mientras se cumpla una determinada
condicin.

<?php
$num= 1;
whi l e ( $num< 5) {
echo $num;
$num++
}
?>

Podemos romper un ciclo while utilizando la sentencia break.

<?php
$num= 1;
whi l e ( $num< 5) {
echo $num;
i f ( $num== 3) {
echo " Aqu nos sal i mos \ n" ;
br eak
}
$num++
}
?>


do...while

Esta sentencia es similar a while, salvo que con esta sentencia primero ejecutamos
el bloque de cdigo y despus se evala la condicin, por lo que el bloque de cdigo se
ejecuta siempre al menos una vez.

<?php
$num= 1;
do {
echo $num;
i f ( $num== 3) {
echo " Aqu nos sal i mos \ n" ;
br eak
}
$num++
} whi l e ( $num< 5) ;
?>

Tal l er de PHP pecesama

25



for

El ciclo for no es estrictamente necesario, cualquier ciclo for puede ser sustituido
fcilmente por otro while. Sin embargo, el ciclo for resulta muy til cuando debemos
ejecutar un bloque de cdigo a condicin de que una variable se encuentre entre un valor
mnimo y otro mximo. El ciclo for tambin se puede romper mediante la sentencia break.

<?php
f or ( $num= 1; Snum<=5; $num++) {
echo $num;
i f ( $num== 3) {
echo " Aqu nos sal i mos \ n" ;
br eak
}
}
?>

A continuacin muestro las 4 formas en que se puede usar el ciclo for.

/ * ej empl o 1 */
f or ( $i = 1; $i <= 10; $i ++) {
pr i nt $i ;
}

/ * ej empl o 2 */
f or ( $i = 1; ; $i ++) {
i f ( $i > 10) {
br eak;
}
}
pr i nt $i ;
}
/ * ej empl o 3 */
$i = 1;
f or ( ; ; ) {
i f ( $i > 10) {
br eak;
}
pr i nt $i ;
$i ++;
}

/ * ej empl o 4 */
f or ( $i = 1; $i <= 10; pr i nt $i , $i ++) ;


Hay que realizar los siguientes programas con ciclos.

Imprima los nmeros del 1 al 100
Tal l er de PHP pecesama

26

for ($i = 1; $i <= 100; print $i."<br>", $i++) ;


Imprima los nmeros pares del 1 al 100

for ($i = 2; $i <= 100; print $i."<br>", $i=$i+2) ;

Un programa que le des un nmero y obtenga su tabla de multiplicar (tablas.php)

tablas.php

<?php
$numer o=4;
f or ( $i =1; $i <=10; $i ++)
{
echo $i . " x " . $numer o. " = " . $i *$numer o. " <br >" ;
}
?>

Vectores (tablas)

Las tablas (o array en ingls), son muy importantes en PHP, ya que generalmente,
las funciones que devuelven varios valores, como las funciones ligadas a las bases de
datos, lo hacen en forma de tabla.

En PHP disponemos de dos tipos de tablas. El primero sera el clsico, utilizando
ndices:

<?php
$ci udad[ ] = " Par s" ;
$ci udad[ ] = " Mxi co" ;
$ci udad[ ] = " Roma" ;
$ci udad[ ] = " Sevi l l a" ;
$ci udad[ ] = " Londr es" ;
pr i nt ( " yo vi vo en " . $ci udad[ 1] . " <BR>\ n" ) ;
?>

Esta es una forma de asignar elementos a una tabla, pero una forma ms formal es
utilizando la funcin array

<?php
$ci udad = ar r ay( " Par s" , " Roma" , " Sevi l l a" , " Londr es" ) ;
/ / cont amos el nmer o de el ement os de l a t abl a
$numel ent os = count ( $ci udad) ;
/ / i mpr i mi mos t odos l os el ement os de l a t abl a
f or ( $i =0; $i < $numel ent os; $i ++)
{
pr i nt ( " La ci udad $i es $ci udad[ $i ] <BR>\ n" ) ;
}
?>
Tal l er de PHP pecesama

27

Sino se especifica, el primer ndice es el cero, pero podemos utilizar el operador =>
para especificar el ndice inicial.

$ci udad = ar r ay( 1=>" Par s" , " Roma" , " Sevi l l a" , " Londr es" ) ;

Un segundo tipo, son las tablas asociativas, en las cules a cada elemento se le
asigna un valor (key) para acceder a l.

Para entenderlo, que mejor que un ejemplo, supongamos que tenemos una tabla en
al que cada elemento almacena el nmero de visitas a nuestra web por cada da de la
semana.

Utilizando el mtodo clsico de ndices, cada da de la semana se representara por
un entero, 0 para lunes, 1 para martes, etc.

$vi si t as[ 0] = 200;
$vi si t as[ 1] = 186;

Si usamos las tablas asociativas sera

$vi si t as[ " l unes" ] = 200;
$vi si t as[ " mar t es" ] = 186;

o bien,

$vi si t as = ar r ay( " codi go" >$vi si t as = ar r ay( " l unes" =>200;
" mar t es" =>186) ;

Ahora bien, recorrer una tabla y mostrar su contenido es sencillo utilizando los
ndices, pero cmo hacerlo en las tablas asociativas?. La manipulacin de las tabas
asociativas se a hace travs de funciones que actan sobre un puntero interno que indica la
posicin. Por defecto, el puntero se sita en el primer elemento aadido en la tabla, hasta
que es movido por una funcin:

current - devuelve el valor del elemento que indica el puntero
pos - realiza la misma funcin que current
reset - mueve el puntero al primer elemento de la tabla
end - mueve el puntero al ltimo elemento de la tabla
next - mueve el puntero al elemento siguiente
prev - mueve el puntero al elemento anterior
count - devuelve el nmero de elementos de una tabla.


Veamos un ejemplo de las funciones anteriores:

<?php
$semana = ar r ay( " l unes" , " mar t es" , " mi r col es" , " j ueves" ,
" vi er nes" , " sbado" , " domi ngo" ) ;
Tal l er de PHP pecesama

28
echo count ( $semana) ; / / 7
/ / si t uamos el punt er o en el pr i mer el ement o
r eset ( $semana) ;
echo cur r ent ( $semana) ; / / l unes
next ( $semana) ;
echo pos( $semana) ; / / mar t es
end( $semana)
echo pos( $semana) ; / / domi ngo
pr ev( $semana) ;
echo cur r ent ( $semana) ; / / sbado
?>

Recorrer una tabla con las funciones anteriores se hace un poco enredoso, para ello se
recomienda utilizar la funcin each().

<?php
$vi si t as = ar r ay( " l unes" =>200, " mar t es" =>186,
" mi r col es" =>190, " j ueves" =>175) ;
r eset ( $vi si t as) ;
whi l e ( l i st ( $cl ave, $val or ) = each( $vi si t as) )
{
echo " el d a $cl ave ha t eni do $val or vi si t as<BR>" ;
}
?>

La funcin each() devuelve el valor del elemento actual, en este caso, el valor del
elemento actual y su clave, y desplaza el puntero al siguiente, cuando llega al final
devuelve falso, y termina el bucle while().

Tablas multidimensionales

Las tablas multidimensionales son simplemente tablas en las cuales cada elemento
es a su vez otra tabla.

<?php
$cal endar i o[ ] = ar r ay ( 1, " ener o" , 31) ;
$cal endar i o[ ] = ar r ay ( 2, " f ebr er o" , 28) ;
$cal endar i o[ ] = ar r ay ( 3, " mar zo" , 31) ;
$cal endar i o[ ] = ar r ay ( 4, " abr i l " , 30) ;
$cal endar i o[ ] = ar r ay ( 5, " mayo" , 31) ;
whi l e ( l i st ( $cl ave, $val or ) = each( $cal endar i o) ) {
{
$cadena = $val or [ 1] ;
$cadena . = " es el mes nmer o " . $val or [ 0] ;
$cadena . = " y t i ene " . $var l or [ 2] . " d as<BR>" ;
echo $cadena;
}
?>

La funcin list() es ms bien un operador de asignacin, lo que hace es asignar
valores a unas lista de variables. En este caso los valores son extrados de una tabla por la
funcin each().

Tal l er de PHP pecesama

29


Formularios

Los Formularios no forman parte de PHP, sino del lenguaje estndar de Internet,
HTML, pero como stos van a aparecer muchas veces durante el curso, vamos a dedicar
esta algunas lneas a ellos.
Todo formulario comienza con la etiqueta <FORM ACTION="lo_que_sea.php"
METHOD="post/get">. Con ACTION indicamos el script que va procesar la
informacin que recogemos en el formulario, mientras que METHOD nos indica la forma
en que se enviarn datos post o get. La etiqueta </FORM> indica el final del formulario.
A partir de la etiqueta <FORM> vienen los campos de entrada de datos que pueden
ser:
Botn de comando:
<input type="submit" value="enviar" name="enviar">
Cuadro de texto:
<input type="text" name="nombre" size="20" value="jose">

Veamos un ejemplo con PHP:

Las siguientes dos paginas tienen el objetivo de preguntar cual es tu equipo de ftbol
favorito y desplegar en otra pagina el seleccionado (equipo.htm y equipo.php).


equipo.htm

<ht ml >
<t i t l e>Equi po Favor i t o</ t i t l e>
<body>
<f or mmet hod=post ACTI ON=equipo.php>
Cual es t u equi po de f t bol f avor i t o ?
<i nput name=equipo t ype TEXT>
<br >
<br >
<i nput t ype=submi t >
</ f or m>
</ body>
<ht ml >

Tal l er de PHP pecesama

30

equipo.php

<ht ml >
<body>
Tu equi po f avor i t o es:
<?php Echo <h1><B>$equipo</ B></ h1>; ?>
</ body>
</ ht ml >

Hay que poner especial atencin en el parmetro name de un elemento del
formulario ya que es el mismo nombre con el que se le referenciar en php, como
pudimos ver en el ejemplo anterior el elemento <input name=equipo type TEXT>lo
manejamos en php como $equipo, as es con todos los elementos de formularios.
Cuadro de texto con barras de desplazamiento:
<textarea rows="5" name="descripcion" cols="20">Es de color rojo</textarea>

Ahora veamos un ejemplo con PHP:

Programa PHP que pide WebSites favoritos y los muestra como salida (sites.htm y
sites.php).

sites.htm

<ht ml >
<t i t l e>Web Si t es Favor i t os</ t i t l e>
<body>
<f or mmet hod=POST ACTI ON=sites.php>
Menci name al gunos de t us WebSi t es Favor i t os:
<br >
<t ext ar ea name=websi t es col s=50 r ows=5>
ht t p: / /
ht t p: / /
ht t p: / /
ht t p: / /
</ t ext ar ea>
<br >
<br >
<i nput t ype=submi t >
</ f or m>
</ body>
<ht ml >


sites.php

<ht ml >
<body>
Tal l er de PHP pecesama

31
Tus webs f avor i t os son: <br >
<?php Echo <h3><B>$websi t es</ B></ h3>; ?>
</ body>
</ ht ml >

Casilla de verificacin o checkbox:
<input type="checkbox" name="cambiar" value="ON">

Ahora veamos un ejemplo con PHP:

Programa que pregunta lo que haces al levantarte y lo despliega como salida
(checkboxes.htm y checkboxes.php).

checkboxes.htm

<HTML>
<HEAD></ HEAD>
<BODY>
<FORM METHOD=POST ACTI ON=checkboxes.php>
Qu haces en cuant o t e l evant as?<br ><br >
Lavar me l a car a<I NPUT NAME=sel 1 TYPE=Checkbox
VALUE=Lavar se l a Car a><BR>
Asear se l a boca<I NPUT NAME=sel 2 TYPE=Checkbox
VALUE=Asear se l os di ent es><BR>
Desayunar <I NPUT NAME=sel 3 TYPE=Checkbox VALUE=Desayunar
><BR>
<BR>
<I NPUT TYPE=SUBMI T>
</ FORM>
</ BODY>
</ HTML>


checkboxes.php

<ht ml >
<body>
<?php
i f ( i sset ( $sel 1) )
Echo $sel 1 <br >;
i f ( i sset ( $sel 2) )
Echo $sel 2 <br >;
i f ( i sset ( $sel 3) )
Echo $sel 3 <br >;
?>
</ body>
</ ht ml >
Tal l er de PHP pecesama

32

Botn de radio u opcin:
<input type="radio" value="azul" checked name="color">

Ahora veamos un ejemplo con PHP:

Programa que nos presenta una suma, nosotros tenemos que elegir la respuesta entre
tres opciones posibles y la salida nos muestra la opcin que elegimos (radio.htm y
radio.php).
radio.htm

<HTML>
<BODY>
<FORM METHOD=GET ACTI ON=radio.php>
Cuant os son 2 + 2?
<BR>
<BR>
<I NPUT NAME=Resp TYPE=Radi o VALUE=44>44
<BR>
<I NPUT NAME=Resp TYPE=Radi o VALUE=22>22
<BR>
<I NPUT NAME=Resp TYPE=Radi o VALUE=4>4
<BR>
<BR>
<I NPUT TYPE=SUBMI T>
</ FORM>
</ BODY>

radio.php


<HTML>
<BODY>
<?php Echo sel ecci onast e $Resp; ?>
</ BODY>
</ HTML>
Men desplegable:
<select size="1 class="codigo"><select size="1" name="dia">
<option selected value="lunes">lunes</option>
<option>martes</option>
<option value="miercoles">miercoles</option>
</select>

Tal l er de PHP pecesama

33
Ahora veamos un ejemplo en PHP:

Programa que pregunta opciones para armar una computadora y despliega las
opciones elegidas (lista.htm y lista.php).

lista.htm

<HTML>
<HEAD></ HEAD>
<BODY>
<FORM METHOD=GET ACTI ON=lista.php>
El i j e l a comput ador a a compr ar
<BR>
<BR>
<SELECT NAME=compu>
<OPTI ON>Pent i um</ OPTI ON>
<OPTI ON>Cel er on</ OPTI ON>
<OPTI ON>K6</ OPTI ON>
<OPTI ON>MAC</ OPTI ON>
</ SELECT>
<BR>
<BR>
Sel ecci ona l os di sposi t i vos de l a comput ador a?
<BR>
<BR>
<SELECT NAME=di spo[ ] MULTI PLE>
<OPTI ON>KI T MULTI MEDI A</ OPTI ON>
<OPTI ON>QUEMADORA</ OPTI ON>
<OPTI ON>WEB CAM</ OPTI ON>
<OPTI ON>MI CROFONO</ OPTI ON>
</ SELECT>
<BR>
<BR>
<I NPUT TYPE=SUBMI T>
</ FORM>
</ BODY>
</ HTML>

lista.php

<HTML>
<BODY>
<?php
Echo Sel ecci onast e una comput ador a: <B>$compu</ B>
con: <br >;
Echo $di spo[ 0] <br >;
Echo $di spo[ 1] <br >;
Echo $di spo[ 2] <br >;
Echo $di spo[ 3] <br >;
?>
</ BODY>
</ HTML>
Tal l er de PHP pecesama

34

Campo oculto:
<input type="hidden" name="edad" value="55">
Este ltimo tipo de campo resulta especialmente til cuando queremos pasar datos
ocultos en un formulario.
Ahora pasemos a ver ejemplos que necesitan mas cdigo PHP, como son ciclos y
arrays, implementndolos en conjunto con los formularios.
Para el uso del FOR un programita para crditos bancarios (banco.htm y
banco.php).

banco.htm

<HTML>
<HEAD></ HEAD>
<BODY>
<B>Cr di t o bancar i o</ B>
<FORM METHOD=POST ACTI ON=" banco.php" >
<BR>
Cual de est os paquet es t e i nt er esa t omar ?<BR><BR>
<I NPUT NAME=" val or " TYPE=" Radi o" VALUE=1000>Nuest r o paquet e
de $1, 000 Con el 5. 0%i nt er es
<BR>
<I NPUT NAME=" val or " TYPE=" Radi o" VALUE=5000>Nuest r o paquet e
de $5, 000 Con el 6. 5%i nt er es
<BR>
<I NPUT NAME=" val or " TYPE=" Radi o" VALUE=10000>Nuest r o paquet e
de $10, 000 Con el 8. 0%i nt er es
<BR>
<BR>
Cuant o es l o que deseas pagar al mes ?
<I NPUT NAME=pagomes TYPE=Text SI ZE=5>
<BR>
<BR>
<I NPUT TYPE=SUBMI T VALUE=" Pul se aqu par a cal cul ar " >
</ FORM>
</ BODY>
</ HTML>

banco.php

<HTML>
<HEAD></ HEAD>
<BODY>
<?php
$Dur aci on=0;
swi t ch ( $val or ) {
Tal l er de PHP pecesama

35
case 1000:
$I nt er es = 5;
br eak;
case 5000:
$I nt er es = 6. 5;
br eak;
case 10000:
$I nt er es = 8;
br eak;
def aul t :
echo " No sel ecci onast e ni ngun paquet e f avor de
pr esi onar el bot on back y sel ecci onar al guno" ;
exi t ;
}
whi l e ( $val or > 0)
{
$Dur aci on = $Dur aci on + 1;
$Mensual ment e = $pagomes - ( $val or * $I nt er es/ 100) ;
i f ( $Mensual ment e<=0)
{
echo " Tu necesi t as hacer pagos mas gr andes! " ;
exi t ;
}
$val or = $val or - $Mensual ment e;
}
echo " La dur aci on es de: $Dur aci on meses con un
por cent aj e de i nt er eses del $I nt er es. " ;
?>
</ BODY>
</ HTML>

El siguiente programa demuestra como se pueden trabajar los array como elementos
hash (estados.php y capital.php).

estados.php

<ht ml >
<head>
<t i t l e>Est ados de Mxi co</ t i t l e>
</ head>
<body bgcol or =" #FFFFFF" >
De que est ado t e gust ar a conocer su capi t al ?
<?

$Est ados=ar r ay( 1=>" Col i ma" , " J al i sco" , " Si nal oa" ) ;
echo " <f or mmet hod=post act i on=' capital.php'>" ;
echo " <sel ect name=' est ado' >" ;
f or ( $count er =1; $count er <4; $count er ++)
echo " <opt i on val ue=$count er >$Est ados[ $count er ] </ opt i on>" ;
echo " </ sel ect ><br ><br >" ;
echo " <i nput t ype=submi t >" ;
echo " </ f or m>" ;
?>
</ body>
</ ht ml >
Tal l er de PHP pecesama

36


capital.php

<ht ml >
<head>
<t i t l e>Capi t al es</ t i t l e>
</ head>
<body bgcol or =" #FFFFFF" >
<?php
$Capi t al =ar r ay( 1=>" Col i ma" , " Guadal aj ar a" , " Cul i acan" ) ;
f or ( $count er =0; $count er <4; $count er ++)
{
i f ( $count er ==$est ado)
{
echo " l a capi t al del est ado el egi do es
&Capi t al [ $count er ] " ;
}
}
?>
</ body>
</ ht ml >
Como podemos observar los dos archivos tienen extensin .php, esto se debe a que
es necesario ejecutar cdigo php en los dos, para poder formar dinmicamente las dos
pginas.
Para tener ms material con formularios realizaremos un programa PHP que
contenga varios elementos de formulario juntos:
Desarrollar un programa en PHP que pida el Nombre (textbox), el apellido
(textbox), la edad (textbox), domicilio (text area), seleccione el rango de sueldo que le
gustara ganar (listbox) y que seleccione como considera as mismo su desempeo laboral
(radio button). El programa no aceptar curriculums que elijan un sueldo muy bajo, ni un
sueldo extremo, ni tampoco si se considera psimo (minicu.htm y minicu.php).
minicu.htm
<HTML><HEAD></ HEAD><BODY><B>Mi ni cur r i cul um</ B>
<FORM METHOD=POST ACTI ON=" minicu.php" >
Nombr es:
<I NPUT NAME=" nombr es" TYPE=" Text " >
Apel l i dos:
<I NPUT NAME=" apel l i dos" TYPE=" Text " >
Edad:
<I NPUT NAME=" edad" TYPE=" Text " SI ZE=" 3" >
<BR>
<BR>
Domi ci l i o:
<TEXTAREA NAME=" Domi ci l i o" ROWS=4 COLS=40>
</ TEXTAREA>
<BR>
Tal l er de PHP pecesama

37
<BR>
Que sal ar i o deseas ganar ?
<SELECT NAME=" Sal ar i o" >
<OPTI ON VALUE=0> Menos de $1000</ OPTI ON>
<OPTI ON VALUE=1000>Ent r e $1, 000 y $3, 000</ OPTI ON>
<OPTI ON VALUE=3000>Ent r e $3, 000 y $5, 000</ OPTI ON>
<OPTI ON VALUE=5000>mas de $5, 000</ OPTI ON>
</ SELECT>
<BR>
<BR>
Como consi der as t u desempeo?<BR><BR>
<I NPUT NAME=" Desempe" TYPE=" Radi o" VALUE=0>Pesi mo
<BR>
<I NPUT NAME=" Desempe" TYPE=" Radi o" VALUE=5>Regul ar
<BR>
<I NPUT NAME=" Desempe" TYPE=" Radi o" VALUE=10>Excel ent e
<BR>
<BR>
<I NPUT TYPE=SUBMI T VALUE=" Pr esi one cuando est e l i st o( a) " >
<I NPUT TYPE=RESET VALUE=" Bor r a t odo" >
</ FORM>
</ BODY>
</ HTML>


minicu.php

<HTML>
<BODY>
Sr ( a) <?php Echo " $nombr es $apel l i dos " ; ?>
en base a su edad ( <?php Echo " $edad" ; ?>) y sus aspi r aci ones <br >
econmi cas y su aut o est i maci n hemos det er mi nado que: <br >
<?php
echo " Sal ar i o deseado: $Sal ar i o <br >" ;
echo " Su desempeo el egi do: $Desempe <br >" ;
i f ( ( ( $Sal ar i o==0) OR ( $Sal ar i o ==5000) ) OR ( $Desempe ==0) )
{
Echo " Ust ed no cumpl e l os r equi si t os par a ser par t e de
nuest r a empr esa" ;
}
el se
{
Echo " Ust ed cumpl e sat i sf act or i ament e nuest r as
aspi r aci ones" ;
}
?>
</ BODY>
</ HTML>





Tal l er de PHP pecesama

38

Capitulo III
Almacenamiento de la
informacin

















Tal l er de PHP pecesama

39
Archivos

fopen

fopen -- Abre un archivo o una URL

Descripcin

int fopen (string filename, string mode [, int use_include_path])
Si filename comienza con "http://" (no es sensible a maysculas), se abre una
conexin HTTP 1.0 hacia el servidor especificado y se devuelve un apuntador de archivo al
comienzo del texto de respuesta.
No maneja redirecciones HTTP, por eso se debe incluir una barra final cuando se
trata de directorios.
Si filename comienza con "ftp://" (no es sensible a maysculas), se abre una
conexin ftp hacia el servidor especificado y se devuelve un apuntador al archivo
requerido. Si el servidor no soporta ftp en modo pasivo, esto fallar. Se pueden abrir
archivo via ftp para leer o para escribir (pero no ambas cosas simultneamente).
Si filename no comienza con nada de lo anterior, el archivo se abre del sistema de
archivos, y se devuelve un apuntador al archivo abierto, si el abrir el archivo falla, la
funcin devuelve false.
mode puede ser cualquiera de lo siguiente:
'r' - Abre para slo lectura; sita el apuntador del archivo al comienzo del
mismo.
'r+' - Abre para lectura y escritura; sita el apuntador del archivo al comienzo
del archivo.
'w' - Abre para slo escritura; sita el apuntador del archivo al comienzo del
archivo y trunca el archivo con longitud cero. Si el archivo no existe, trata de
crearlo.
'w+' - Abre el archivo para lectura y escritura; sita el apuntador del archivo al
comienzo del archivo y trunca el archivo con longitud cero. Si el archivo no
existe, trata de crearlo.
'a' - Abre slo para escribir (aadir); sita el apuntador del archivo al final del
mismo. Si el archivo no existe, trata de crearlo.
'a+' - Abre para lectura y escritura (aadiendo); sita el apuntador del archivo al
final del mismo. Si el archivo no existe, trata de crearlo.
Adems, mode puede contener la letra 'b'. Esto es til para sistemas que diferencian
entre archivos binarios y de texto (es intil en Unix). Si no se necesita, ser ignorado.
Tal l er de PHP pecesama

40
Puede usarse el tercer parmetro opcional y fijarlo a "1".
fwrite

fwrite -- Escribe archivos en modo binario

Descripcin

int fwrite (int fp, string string [, int length])
fwrite() escribe el contenido de string al fichero apuntado por fp. Si se da el
argumento length, la escritura acaba antes de que length bytes sean escritos o se alcance el
final de string, lo que ocurra primero.
fread
fread -- Lee archivos en modo binario

Descripcin

string fread (int fp, int length)
fread() lee hasta length bytes del apuntador de fichero referenciado por fp. La
lectura acaba cuando length bytes se han leido o se alcanza EOF, lo que ocurra primero.
Con esta teora ya podemos realizar nuestro propio contador de visitas en nuestro
sitio web, as sabremos que tan popular es nuestro sitio, es necesario tener permisos de
escritura en nuestro directorio donde va a estar el contador (contador.php).
contador.php

<?php
$cont ador _ar chi vo=" c: / i net pub/ wwwr oot / t al l er / cont a. dat " ;
i f ( ! ( $f p=f open( $cont ador _ar chi vo, " r " ) ) )
di e( " No se encont r o $cont ador _ar chi vo" ) ;

$cont ador =( i nt ) f r ead( $f p, 20) ;
f cl ose( $f p) ;
$cont ador ++;
echo " Er es el vi si t ant e nmer o: <b>$cont ador </ b>" ;
$f p=f open( $cont ador _ar chi vo, " w" ) ;
f wr i t e( $f p, $cont ador ) ;
f cl ose( $f p) ;
?>

La instruccin die enva a la salida un mensaje y finaliza la ejecucin del script. No
devuelve nada.

Tal l er de PHP pecesama

41
Bases de Datos

Hasta ahora hemos visto la funciones bsicas de PHP, lo que viene a continuacin
ya es sobre la forma en como podemos acceder a bases de datos, veremos como acceder a
ellas en dos sistemas de bases de datos diferentes, los cuales son MySQL Server y
Microsoft Access.

El primer sistema que veremos es MySQL Server, pero antes de ver cdigo PHP,
aprenderemos un poco de este sistema, para los ejemplos en PHP ya va a ser necesario que
tengamos una base de datos creada por lo tanto pondremos atencin en las formas en que
estas se crean.
Qu es MySQL
Administrador de Base de Datos

Una base de datos es un conjunto de datos estructurados. Esto podra ser cualquier
cosa, desde una simple lista de compras hasta una galera de pinturas o la gran cantidad de
informacin que se maneja en una corporacin. Para agregar, acceder y procesar los datos
almacenados en una base de datos computacional, se necesita un sistema administrador de
base de datos tal como MySQL. Adems los computadores son muy buenos manejando
grandes cantidades de datos, el administrador de base de datos juega un rol central en la
computacin, ya sea como utilidad autnoma o parte de otra aplicacin.

Sistema administrador de base de datos relacionales

Una base de datos relacional almacena datos en tablas separadas, ms bien
colocando todos los datos en un gran almacn. Esto agrega velocidad y flexibilidad. Las
tablas son enlazadas por relaciones definidas haciendo posible combinar datos desde varias
tablas solicitadas. El SQL forma parte de MySQL, conocido como Lenguaje de Consultas
Estructurado, es el lenguaje estandarizado ms comn usado para acceder base de datos.

Software de Fuente Abierta

Fuente abierta significa que es posible que pueda ser usado y modificado por
cualquiera. Alguien puede bajar MySQL desde Internet y usar ste sin tener que pagar
nada. Alguien puede estudiar el cdigo fuente y cambiarlo de acuerdo a sus necesidades.
MySQL usa el GPL de la GNU, para definir lo que se puede hacer con el software en
diferentes situaciones.

Uso de MySQL

MySQL es muy rpido, seguro y fcil de usar. MySQL tambin ha desarrollado un
conjunto de caractersticas muy prcticas, en estrecha cooperacin con otros usuarios.
MySQL fue desarrollado para manejar grandes bases de datos mucho ms rpido que las
soluciones existentes y ha sido usado exitosamente en ambientes de produccin con altas
Tal l er de PHP pecesama

42
demandas, por varios aos. Aunque est bajo un desarrollo constante, MySQL siempre
ofrece conjunto de funciones muy poderoso y eficiente. La conectividad, velocidad y
seguridad hace de MySQL una suite poderosa para acceder a bases de datos en Internet.

Caractersticas Tcnicas de MySQL

MySQL es un sistema Cliente/Servidor que consta de un servidor SQL multi-hilo
que soporta diferentes backends, variados programas cliente y de libreras, administrador de
herramientas y un programa de interface.

MySQL contribucin para muchos de los software disponibles

Es mucho ms probable que se encuentre que diversas aplicaciones ya soportan
MySQL. Los valores centrales de MySQL son :
La mejor y ms usada base de datos en el mundo.
Disponible y Accesible para todos
Fcil de usar
Se est perfeccionando continuamente mientras permanece rpida y segura.
Divertida para usar y perfeccionar.
Libre de molestias.
Caractersticas principales de MySQL
A continuacin se describen algunas de las caractersticas ms importantes de MySQL:
Escrito en C y C++, testado con GCC 2.7.2.1. Usa GNU autoconf para portabilidad.
Clientes C, C++, Eiffel,PHP,Python,J AVA, Perl, TCL.
Multiproceso, es decir puede usar varias CPU si stas estn disponibles.
Puede trabajar en distintas plataformas y S.O. distintos.
Sistema de contraseas y privilegios muy flexible y segura.
Todas la palabras de paso viajan encriptadas en la red.
Registros de longitud fija y variable.
16 ndices por tabla, cada ndice puede estar compuesto de 1 a 15 columnas o partes
de ellas con una longitud mxima de 127 bytes.
Todas las columnas pueden tener valores por defecto.
Utilidad Isamchk para chequear, optimizar y reparar tablas.
Todos los datos estn grabados en formato ISO8859_1.
Los clientes usan TCP o UNIX Socket para conectarse al servidor.
Todos los comandos tienen -help o -? Para las ayudas.
Soporta diversos tipos de columnas como enteros de 1, 2, 3, 4, y 8 bytes, coma
flotante, doble precisin, carcter, fechas, enumerados, etc.
ODBC para Windows 95 (con fuentes), se puede utilizar ACCESS para conectar
con el servidor.
Muy rpida usando joins, optimizada para un barrido multi-joins.
Tal l er de PHP pecesama

43
Todas las funciones y operadores soportan en el SELECT y WHERE como partes
de consultas. Ejemplo:

mysql > SELECT CONCAT( nombr e, " " , apel l i do) FROM nombr e_t abl a
WHERE i ngr eso >10000 AND edad >30
Todas las clausulas SQL soportan GROUP BY y ORDER BY.

Instalando MySQL Server
Bien, ya conocemos que es MySQL, ahora procedamos a instalarlo en nuestro
servidor para poder realizar los programas PHP con bases de datos MySQL.

Al iniciar el instalador veremos la pantalla de preparndose para instalar,
en esta solo hay que esperar que termine el 100%.



Despus tenemos la pantalla de bienvenida, solo hay que dar clic en Next.







Tal l er de PHP pecesama

44
La siguiente interfaz nos muestra la informacin de la versin de MySQL
que estamos instalando.



Ahora tendremos la ventana de donde queremos instalarlo, para evitar
complicaciones con archivos de configuracin, presionemos Next y se
instalar en C:\mysql.



Hay que elegir el tipo de instalacin, elijamos Typical.







Tal l er de PHP pecesama

45
Esperamos un poco a que se instale.



Cuando termine hay que dar clic en Finish.




Despus de estos sencillos pasos ya tenemos instalado MySQL Server, ahora lo que
sigue es iniciarlo, debemos ir a la siguiente ruta en nuestro disco duro C:\mysql\bin\ y
ejecutar el programa winmysqladmin.exe.

Cuando este en ejecucin WinMySQLadmin en su primera ocasin pedir
un nombre de usuario y contrasea para el administrador del sistema de base
de datos.





Tal l er de PHP pecesama

46
Ahora si ya lo tendremos ejecutndose siempre que el sistema inicie, y estar
en la barra de inicio del sistema con un icono de un semforo, hay que darle
clic en el icono para que nos muestre sus opciones.



Al darle clic en Show Me aparecer el administrador de MySQL, desde ah
podemos ver todas los componentes del sistema de bases de datos.



Con esto es suficiente sobre la instalacin de MySQL Server, ahora veamos como
crear bases de datos en el.
Conectndose y desconectndose al servidor MySQL
Para conectarse al servidor, generalmente se necesita proveer a MySQL un nombre
de usuario, y un password. Si el servidor corre en una mquina distinta a la que se est
utilizando se debe especificar el nombre del host (mquina). Cuando se conocen todos estos
parmetros la conexin se realiza de la siguiente manera:

shel l > mysql - h host - u user - p
Ent er passwor d: *********

Si la conexin se realiz con xito, mysql despliega el siguiente mensaje:

Wel come t o t he MySQL moni t or . Commands end wi t h; or \ g.
Your MySQL connect i on i d i s 459 t o ser ver ver si on: 3. 22. 20a- l og

Type " hel p" f or hel p.

mysql >

Tal l er de PHP pecesama

47
El prompt indica que mysql est listo para recibir los comandos que ingrese el
usuario. Algunas instalaciones de MySQL admiten usuarios anonymous (sin nombre)
cuando el servidor corre en el host local. En este caso, se debe invocar a el servidor mysql
sin ninguna opcin:

shel l >mysql

Una vez que se ha realizado la conexin con xito, para desconectarse al servidor en
cualquiera de los dos casos anteriores se debe escribir QUIT o control-D.
Creando y usando una base de datos
Visualizacin de las bases de datos existentes en el servidor MySQL

Antes de crear una base de datos, se debe conocer que base de datos existen
actualmente en el servidor, para ello se utiliza el comando SHOW, de la siguiente manera:


mysql > SHOWDATABASES;

+- - - - - - - - - - +
| Dat abase |
+- - - - - - - - - - +
| mysql |
| t est |
| t mp |
+- - - - - - - - - - +

Esta lista probablemente no es igual en todas las mquinas, pero las bases de datos
mysql y test estn siempre entre ellas. La base de datos mysql se requiere porque en ella se
describe la informacin de los privilegios de acceso a los usuarios. La base de datos test
proporciona el espacio de trabajo para los usuarios.

Seleccin de una base de datos

Para seleccionar o acceder a una base de datos determinada se utiliza el comando
USE:

mysql > USE t est
Dat abase changed

Una vez, que se ha realizado la conexin con xito se puede comenzar a trabajar con
la base de datos, pero siempre y cuando se tengan los permisos adecuados. Si no se tienen
los permisos el administrador debe darle los permisos al usuario para poder trabajar, esto se
realiza con la ejecucin del siguiente comando:

mysql > GRANT ALL ON nombr e_dat abase. * TO nombr e_usuar i o;

Tal l er de PHP pecesama

48

Creacin de una base de datos

Para crear una base de datos se debe tener permiso para poder crear base de datos en
el servidor MySQL , si se tiene el permiso entonces la sentencia a seguir es:

mysql > CREATE DATABASE nombr e_dat abase;

Bajo Unix, los nombres de las bases de datos y de las tablas son sensibles, esto
quiere decir que se hace diferencia entre minsculas y maysculas, as es que para referirse
a una base de datos determinada hay que llamarla tal como se le nombro cuando fue creada.

Creacin de tablas

Para crear las tablas que va a contener la base de datos, se realiza de la siguiente
forma:

mysql > CREATE TABLE nombr e_t abl a( campo_1 t i po( t amao) , campo_2
t i po( t amao) , . . . , campo_n t i po( t amao) ) ;

El campo indica el nombre de la columna y tipo(tamao) especfica el tipo de dato y
el espacio que se va a conservar para cada dato almacenado en esa columna. Ejemplo:
codigo int(5), nombre char(25), fecha date, etc.. Cuando se trata de fechas no se especfica
el tamao, puesto que ya est determinado. Para visualizar las tablas que tiene una base de
datos se usa el mismo comando utilizado para ver las bases de datos, pero con la diferencia
de que en vez de database se coloca tables, es decir:

mysql > SHOWTABLES;

Para verificar que la tabla ha sido creada de la forma indicada, se usa el comando
DESCRIBE. Ejemplo: Se va a crear una tabla llamada clientes, de la siguiente forma:

mysql > CREATE TABLE cl i ent es( r ut char ( 8) , nombr e char ( 25) ,
di r ecci on char ( 50) , t el ef ono i nt ( 10) ) ;

mysql > DESCRI BE cl i ent es;

+- - - - - - - - - - +- - - - - - - - - - - +- - - - - - +- - - - - +- - - - - - - - +- - - - - - - +
| Fi el d | Type | Nul l | Key | Def aul t | Ext r a |
+- - - - - - - - - - +- - - - - - - - - - - +- - - - - - +- - - - - +- - - - - - - - +- - - - - - - +
| r ut | char ( 12) | YES | | NULL | |
| nombr e | char ( 25) | YES | | NULL | |
| di r ecci on| char ( 50) | YES | | NULL | |
| t el ef ono | i nt ( 10) | YES | | NULL | |
+- - - - - - - - - - +- - - - - - - - - - - +- - - - - - +- - - - - +- - - - - - - - +- - - - - - - +

Esto es muy til cuando se olvida el nombre o tipo de una columna. El Field indica
el nombre de la columna, Type es el tipo de dato que acepta esa columna, Null indica si la
columna puede contener valores NULL, Key indica la clave por la cual la columna se va a
indexar y Default especfica el valor por defecto que tiene la columna.

Tal l er de PHP pecesama

49
Ingreso de Datos a las tablas

Para ingresar informacin a una tabla se puede hacer bsicamente de dos maneras.
La primera se utiliza cuando se tiene mucha informacin a ingresar de una sola vez,
entonces es conveniente almacenar esta informacin en un archivo de texto, es decir, .txt.
Una vez que se tiene este archivo, se procede de la siguiente forma:

mysql > LOAD DATA LOCAL I NFI LE " nombr e_ar chi vo. t xt " I NTO TABLE
nombr e_t abl a;

Para el caso que se desee ingresar un solo registro, entonces la sentencia a seguir es:

mysql > I NSERT I NTO nombr e_t abl a VALUES
( ``val or _1' ' , ' ' val or _2' ' , . . . . ,

Los datos a ingresar se separan por comas y van entre comillas. Estos datos indican
los valores que va a tomar cada una de las columnas, segn el orden en que fueron creadas.
En el caso que se quiera ingresar un valor NULL no es necesario las comillas, slo se
coloca NULL.

Recuperacin de la Informacin

Para recuperar la informacin que est contenida en una tabla, la sentencia general a
seguir es:


mysql > SELECT qu_es_l o_que_se_desea_ver FROM nombr e_t abl a WHERE
condi ci ones_a_sat i sf acer ;

Para los casos en que, se requiera:


o Ver o seleccionar toda la informacin de una tabla:
o mysql > SELECT * FROM nombr e_t abl a;

o Seleccionar filas en particular:
o mysql > SELECT * FROM nombr e_t abl a WHERE nombr e_col umna=" l o
que se desee buscar "

o Seleccionar columnas en particular:
o mysql > SELECT nombr e_col umna_1, nombr e_col umna_n FROM
nombr e_t abl a;

Esto es conveniente cuando no se desea ver toda la fila o registro, entonces solo se
seleccionan aquellas columnas en las que se est interesado.




Tal l er de PHP pecesama

50
MySQL Front

Ya vimos como crear bases de datos y tablas de la manera tradicional de MySQL,
pero como podemos ver es algo complejo, y como ya estamos acostumbrados a
interfaces grficas (GUI por sus siglas en ingles), les mostrar como crear bases de
datos de una manera completamente visual para no tener que tocar lnea de comandos
de MySQL, para esto utilizaremos el software MySQL Front desarrollado por Ansgar
Becker con correo electrnico chef@anse.de y direccin de su pgina
http://my.anse.de/forum.php en Alemania, aunque yo personalmente he intentado entrar
a esa direccin y no he podido, pero son los datos que trae el programa, una correccin
de ultimo momento, nuestro amigo Aldo Valds <avo@mirc.com.mx>me mand la
direccin correcta de descarga la cual es http://www.anse.de/mysqlfront/.

Veamos como usarlo:

La primera vez que lo corremos no presentara un formulario en blanco y sin
forma de poder ingresar datos, es necesario presionar el botn New, para
habilitarlo.



Una vez presionado New aparecen unos datos ya predefinidos, lo nico que
tenemos que cambiar es nuestro usuario y contrasea.





Tal l er de PHP pecesama

51


Al momento de entrar nos mostrar esta interfaz.




Para crear una base de datos nueva, hay que ir al men Extra y la opcin
Create Database




Hay que ingresar el nombre de la base de datos, podemos crear ya la base
que utilizaremos en nuestros ejemplos de PHP, as que pongmosle de
nombre basecurso.




Tal l er de PHP pecesama

52
Ahora hay que crear una tabla donde almacenaremos los datos, asi que
seleccionamos la nueva base y de nuevo vamos al men Extra solo que
ahora seleccionamos Create Table





En la ventana que aparece ponemos el nombre de la tabla el cual ser
tablacurso, en esa misma pantalla crearemos los campos, los cuales sern id
(con propiedades de primario y auto incremento), nombre, direccion,
telefono, email e imagen (todos de tipo varchar), ya que los agregamos
presionamos Create!




Nos mostrar la tabla creada con sus respectivos campos y propiedades.



Tal l er de PHP pecesama

53
Tambin si nosotros lo deseamos podemos ingresar informacin a la base
desde el mismo MySQL Front, pero este no es el caso.




Ahora que si nosotros deseamos usar el mtodo de lnea de comandos del MySQL la
informacin de la tabla es esta:

CREATE TABLE t abl acur so (
i d t i nyi nt ( 3) unsi gned NOT NULL aut o_i ncr ement ,
nombr e var char ( 30) DEFAULT ' 0' ,
di r ecci on var char ( 30) DEFAULT ' 0' ,
t el ef ono var char ( 30) DEFAULT ' 0' ,
emai l var char ( 30) DEFAULT ' 0' ,
i magen var char ( 30) DEFAULT ' 0' ,
PRI MARY KEY ( i d)
) ;

Despus de tanta informacin sobre MySQL ya es tiempo de iniciar a hacer programas
PHP para manejo de bases de datos de MySQL.
















Tal l er de PHP pecesama

54
PHP para bases de datos MySQL

Conectarse

Empecemos con el primer script, que nos mostrar como conectarnos a un base de datos
(conectarse.php).

conectarse.php

<ht ml >
<head>
<t i t l e>Ej empl o de PHP</ t i t l e>
</ head>
<body>
<?php
f unct i on Conect ar se( )
{
i f
( ! ( $l i nk=mysql _connect ( " l ocal host " , " pecesama" , " pr uebas" ) ) )
{
echo " Er r or conect ando a l a base de dat os. " ;
exi t ( ) ;
}
i f ( ! mysql _sel ect _db( " basecur so" , $l i nk) )
{
echo " Er r or sel ecci onando l a base de dat os. " ;
exi t ( ) ;
}
r et ur n $l i nk;
}
Conect ar se( ) ;
echo " Conexi n con l a base de dat os consegui da. <br >" ;
?>
</ body>
</ ht ml >

Como podemos ver en el ejemplo anterior aisl lo necesario para la conexin en una
funcin, ahora esa funcin la pondremos en un archivo PHP solo (conec.php).

conec.php

<?php f unct i on Conect ar se( )
{
i f ( ! ( $l i nk=mysql _connect ( " l ocal host " , " pecesama" , " pr uebas" ) ) )
{
exi t ( ) ;
}
i f ( ! mysql _sel ect _db( " basecur so" , $l i nk) )
{
exi t ( ) ;
}
r et ur n $l i nk;
} ?>
Tal l er de PHP pecesama

55

Ya que tenemos la funcin en un archivo separado solo hay que mandarlo llamar
cuando sea necesario, de esta forma cuando tengamos aplicaciones complejas que use
muchas pginas php y sea necesario cambiarle algo a la conexin solo se le tenga que hacer
el cambio a este pequeo archivo y no a todas las pginas.

Agregar registros

Veremos un ejemplo de agregar registros a la base de datos (insertareg.php y
agregar.php).

insertareg.php

<ht ml >
<head>
<t i t l e>Ej empl o de PHP</ t i t l e>
</ head>
<body>
<H1>Ej empl o de uso de bases de dat os con PHP y MySQL</ H1>
<FORM ACTI ON=" agregar.php" >
<TABLE>
<TR>
<TD>Nombr e: </ TD>
<TD><I NPUT TYPE=" t ext " NAME=" nombr e" SI ZE=" 20"
MAXLENGTH=" 30" ></ TD>
</ TR>
<TR>
<TD>Di r ecci on: </ TD>
<TD><I NPUT TYPE=" t ext " NAME=" di r ecci on" SI ZE=" 20"
MAXLENGTH=" 30" ></ TD>
</ TR>
<TR>
<TD>Tel ef ono: </ TD>
<TD><I NPUT TYPE=" t ext " NAME=" t el ef ono" SI ZE=" 20"
MAXLENGTH=" 30" ></ TD>
</ TR>
<TR>
<TD>Emai l : </ TD>
<TD><I NPUT TYPE=" t ext " NAME=" emai l " SI ZE=" 20"
MAXLENGTH=" 30" ></ TD>
</ TR>
<TR>
<TD>I magen: </ TD>
<TD><I NPUT TYPE=" t ext " NAME=" i magen" SI ZE=" 20"
MAXLENGTH=" 30" ></ TD>
</ TR>


</ TABLE>
<I NPUT TYPE=" submi t " NAME=" acci on" VALUE=" Gr abar " >
</ FORM>
<hr >
<?php
i ncl ude( " conec. php" ) ;
Tal l er de PHP pecesama

56
$l i nk=Conect ar se( ) ;
$r esul t =mysql _quer y( " sel ect * f r omt abl acur so" , $l i nk) ;
?>
<TABLE BORDER=1 CELLSPACI NG=1 CELLPADDI NG=1>
<TR>
<TD>&nbsp; Nombr e</ TD>
<TD>&nbsp; Di r ecci n&nbsp; </ TD>
<TD>&nbsp; Tel ef ono&nbsp; </ TD>
<TD>&nbsp; Emai l &nbsp; </ TD>
<TD>&nbsp; I magen&nbsp; </ TD>
</ TR>

<?php

whi l e( $r ow = mysql _f et ch_ar r ay( $r esul t ) ) {
pr i nt f ( " <t r ><t d>&nbsp; %s</ t d><t d>&nbsp; %s&nbsp; </ t d><t d>&nbsp
; %s&nbsp; </ t d><t d>&nbsp; %s&nbsp; </ t d><t d>&nbsp; <i mg
sr c=%s>&nbsp; </ t d></ t r >" ,
$r ow[ " nombr e" ] , $r ow[ " di r ecci on" ] , $r ow[ " t el ef ono" ] , $r ow[ " emai l
" ] , $r ow[ " i magen" ] ) ;
}
mysql _f r ee_r esul t ( $r esul t ) ;
?>
</ t abl e>
</ body>
</ ht ml >



agregar.php

<?php
i ncl ude( " conec. php" ) ;
$l i nk=Conect ar se( ) ;
$Sql =" i nser t i nt o t abl acur so
( nombr e, di r ecci on, t el ef ono, emai l , i magen) val ues
( ' $nombr e' , ' $di r ecci on' , ' $t el ef ono' , ' $emai l ' , ' $i magen' ) " ;
mysql _quer y( $Sql , $l i nk) ;
header ( " Locat i on: i nser t ar eg. php" ) ;
?>

Modificar registros

Veremos un ejemplo de modificar registros a la base de datos, consta de tres
archivos diferentes, el primero para introducir la consulta por el campo nombre, el segundo
para realizar los cambios necesarios y el tercero para modificar la base de datos
(consulta.htm, busca.php y modifica.php).

consulta.htm

<ht ml >
<head>
<t i t l e>Ej empl o de PHP</ t i t l e>
</ head>
Tal l er de PHP pecesama

57
<body>
<H1>Ej empl o de modi f i car </ H1>
<FORM ACTI ON=" busca.php" >
Nombr e:
<I NPUT TYPE=" t ext " NAME=" nombr e" SI ZE=" 20" MAXLENGTH=" 30" >
<I NPUT TYPE=" submi t " NAME=" acci on" VALUE=" Buscar " >
</ FORM>
</ body>
</ ht ml >


busca.php

<ht ml >
<body>
<?php
i ncl ude( " conec. php" ) ;
$l i nk=Conect ar se( ) ;
$Sql =" sel ect * f r omt abl acur so wher e nombr e l i ke ' %$nombr e%' " ;
echo $Sql ;
$r esul t =mysql _quer y( $Sql , $l i nk) ;
?>
<TABLE BORDER=1 CELLSPACI NG=1 CELLPADDI NG=1>
<TR>
<TD>&nbsp; Nombr e</ TD>
<TD>&nbsp; Di r ecci n&nbsp; </ TD>
<TD>&nbsp; Tel ef ono&nbsp; </ TD>
<TD>&nbsp; Emai l &nbsp; </ TD>
<TD>&nbsp; I magen&nbsp; </ TD>
</ TR>
<f or mname=" f or m1" met hod=" post " act i on=" modifica.php" >
<?php
whi l e( $r ow = mysql _f et ch_ar r ay( $r esul t ) )
{
pr i nt f ( " <t r ><t d><I NPUT TYPE=' t ext ' NAME=' nombr e' SI ZE=' 20'
MAXLENGTH=' 30' val ue=' %s' ></ t d><t d>&nbsp; <I NPUT TYPE=' t ext '
NAME=' di r ecci on' SI ZE=' 20' MAXLENGTH=' 30'
val ue=' %s' >&nbsp; </ t d><t d>&nbsp; <I NPUT TYPE=' t ext '
NAME=' t el ef ono' SI ZE=' 20' MAXLENGTH=' 30'
val ue=' %s' >&nbsp; </ t d><t d>&nbsp; <I NPUT TYPE=' t ext '
NAME=' emai l ' SI ZE=' 20' MAXLENGTH=' 30'
val ue=' %s' >&nbsp; </ t d><t d>&nbsp; <I NPUT TYPE=' t ext '
NAME=' i magen' SI ZE=' 20' MAXLENGTH=' 30'
val ue=' %s' >&nbsp; </ t d></ t r >" ,
$r ow[ " nombr e" ] , $r ow[ " di r ecci on" ] , $r ow[ " t el ef ono" ] , $r ow[ " emai l
" ] , $r ow[ " i magen" ] ) ;
}
mysql _f r ee_r esul t ( $r esul t ) ;
?>
</ f or m>
</ body>
</ ht ml >



Tal l er de PHP pecesama

58
modifica.php

<?php
i ncl ude( " conec. php" ) ;
$l i nk=Conect ar se( ) ;
$Sql =" UPDATE t abl acur so SET nombr e=' $nombr e' ,
di r ecci on=' $di r ecci on' , emai l =' $emai l ' , t el ef ono=' $t el ef ono'
i magen=' $i magen' WHERE nombr e=' $nombr e' " ;
mysql _quer y( $Sql , $l i nk) ;
header ( " Locat i on: consul t a5. php" ) ;
?>

Eliminar registros

Pasemos a la eliminacin de registros, este consta de dos archivos, los dos .php el
primero es para elegir el registros a borrar y el segundo lo borra (eliminareg.php y
borra.php).

eliminareg.php

<ht ml >
<head>
<t i t l e>Ej empl o de PHP</ t i t l e>
</ head>
<body>
<H1>Ej empl o de uso de bases de dat os con PHP y MySQL</ H1>

<?php
i ncl ude( " conec. php" ) ;
$l i nk=Conect ar se( ) ;
$r esul t =mysql _quer y( " sel ect * f r omt abl acur so" , $l i nk) ;
?>
<TABLE BORDER=1 CELLSPACI NG=1 CELLPADDI NG=1>
<TR>
<TD>&nbsp; Nombr e</ TD>
<TD>&nbsp; Di r ecci n&nbsp; </ TD>
<TD>&nbsp; Tel ef ono&nbsp; </ TD>
<TD>&nbsp; Emai l &nbsp; </ TD>
<TD>&nbsp; I magen&nbsp; </ TD>
<TD>&nbsp; Bor r a&nbsp; </ TD>
</ TR>
<?php
whi l e( $r ow = mysql _f et ch_ar r ay( $r esul t ) ) {
pr i nt f ( " <t r ><t d>&nbsp; %s</ t d><t d>&nbsp; %s&nbsp; </ t d><t d>&nbsp
; %s&nbsp; </ t d><t d>&nbsp; %s&nbsp; </ t d><t d>&nbsp; %s&nbsp; </ t d><
/ t d><t d><a hr ef =\ " bor r a. php?i d=%d\ " >Bor r a</ a></ t d></ t r >" ,
$r ow[ " nombr e" ] , $r ow[ " di r ecci on" ] , $r ow[ " t el ef ono" ] , $r ow[ " emai l
" ] , $r ow[ " i magen" ] , $r ow[ " I D" ] ) ;
}
mysql _f r ee_r esul t ( $r esul t ) ;
?>
</ t abl e>
</ body>
</ ht ml >
Tal l er de PHP pecesama

59
borra.php

<?php
i ncl ude( " conec. php" ) ;
$l i nk=Conect ar se( ) ;
mysql _quer y( " del et e f r omt abl acur so wher e I D = $i d" , $l i nk) ;
header ( " Locat i on: el i mi nar eg. php" ) ;
?>


Ya conocemos como manejar una base de datos de MySQL con PHP, pero que pasa
si nosotros tenemos nuestra base de datos en Microsoft Access y es una base de datos
enorme, que nos llevara mucho tiempo en convertirla en MySQL, existe una solucin para
poder usarla en PHP, esta opcin es ODBC, del cual les platicar un poco.

Conceptos bsicos sobre ODBC

Qu es ODBC?

Open DataBase Conectivity (ODBC) es un desarrollo de Microsoft que se ha
convertido en estndar, para el acceso a travs de l a gran cantidad de tipos de datos.
Bsicamente, por tanto, cualquier aplicacin simple que emplee ODBC puede acceder a las
Bases de datos soportadas por este estndar. El funcionamiento es: la aplicacin slo
necesita comunicarse con un paquete de archivos (ODBC), e instantneamente puede
trabajar con cualquier tipo de datos soportados por este paquete.

Hay dos posibles accesos a la Base de datos (DIRECTO e INDIRECTO) el que
denomino DIRECTO consiste en que normalmente, una compaa disea una
aplicacin que acceder a datos. Esta aplicacin se desarrolla hacia un tipo de datos,
y por tanto slo se implementa el acceso para ese tipo de datos. Si se requiere
acceso a otro DBMS, es necesario por tanto, implementar un nuevo controlador o
driver de acceso. Este sistema hace que el acceso sea directo a la Base de datos,
pero tiene el inconveniente de que hay que desarrollar el enlace para cada DBMS
que se quiera soportar.

Otro posible acceso es el INDIRECTO, es decir, si el DBMS posibilita que con
ODBC puedan ser accedidos los datos, es decir funciona con lo que se denomina
ODBC data source, (o fuente de datos ODBC) la aplicacin accede a travs del
paquete de archivos ODBC "indirectamente", y si aadimos que ODBC es
soportado por los DBMS ms comunes, con una misma aplicacin y con un mismo
paquete de drivers, podremos acceder a todas las DBMS sin necesidad de hacer un
desarrollo para cada tipo.





Tal l er de PHP pecesama

60
Ventajas del uso del acceso "indirecto" a travs del ODBC:

Quizs, la mayor ventaja es que el acceso a datos a travs del ODBC permite el
poder gestionar un amplio rango de datos con una sola interface. Desde que los ms
populares DBMS ofrecen drivers ODBC, muchas son las aplicaciones que lo incluyen
como drivers de acceso.

Otra ventaja es que al poderse variar la fuente de datos, el cambio de una DBMS a
otra es simplista. Por ejemplo, si se disea un informe usando Oracle Data source, y ms
tarde, la empresa decide cambiar a Microsoft SQL Server, simplemente con cambiar el
ODBC data source usado por el informe, se accede a la nueva DBMS. El nico
requerimiento es que la nueva fuente de datos ha de tener la misma estructura de tablas y
campos que la fuente de datos original.

Adems, el SQL que se enva al ODBC puede ser revisado y corregido antes de su
envo, y por tanto se controla exactamente los datos que se quieren recuperar de la fuente.

Desventajas del ODBC:

La principal desventaja son las capas a travs de las cuales tiene que pasar la
consulta, esto hace que el tiempo de respuesta hasta que se obtienen los datos se
incremente. El proceso es que la peticin ha de "traducirse" a ODBC, para que ste
entienda la consulta. ODBC determina que fuente de datos contiene los datos que se piden
y transmite la peticin a la siguiente capa que es la fuente de datos ODBC (ODBC data
source). La fuente de datos analiza la peticin y "traduce" de nuevo la consulta a un
formato que pueda ser "comprendido" por la DBMS. Este complejo proceso puede verse
alterado por cualquier fallo en cualquiera de sus fases y por tanto la consulta no tendra
xito.

Cabe aadir que, las fuentes de datos ODBC deben estar configuradas correctamente en
el ODBC.INI y en el ODBCINST.INI antes de poder ser usada. Si intentas crear un informe
en un sistema y tratas de abrirlo con otro sistema, probablemente no empleen el mismo
ODBC data source, y por tanto no se establecer la conexin. Adems hay que asegurarse
que el SQL usado en el ODBC ha de estar basado en los estndares establecidos por el
American National Standards Institute (ANSI) para el lenguaje SQL.


Ahora vamos a verlo grficamente. Soy usuario de una aplicacin de PHP que usa bases
de datos externas para almacenar informacin, esta aplicacin trabaja directamente con
MySQL, pero mi intencin es tener una conexin con una base de datos de Microsoft
Access, porque es ms fcil; PHP no trabaja directamente con Access, pero puede
entenderse con l usando ODBC de por medio. Necesito crear un origen de datos en ODBC
para que PHP sepa a qu base de datos me refiero cuando le solicite informacin.
Primero vamos a buscar a ODBC, que est en el Panel de Control.
Tal l er de PHP pecesama

61


Bueno, y ahora, el Data Source Administrator del Open DataBase Conectivity, u
ODBC. Lo que sigue es crear una fuente u origen de datos, pero antes unas explicaciones:


Vas a notar que las primeras tres pestaas se refieren a User DSN, System DSN y File
DSN. Perdn, pero tengo la versin en ingls, voy a traducir un poco:
User DSN, nombre del origen de datos para el usuario. A veces, una mquina es
utilizada por ms de un usuario, los orgenes de datos declarados aqu son exclusivos del
usuario.
System DSN, nombre del origen de datos para el sistema. Todos los usuarios de la
mquina tienen acceso a estos orgenes de datos.
User DSN, nombre del origen de datos en archivo. Se crea un archivo con la
extensin DSN, que sirve como origen de datos y puede ser distribuido a otros usuarios.
Este origen es el que usa Excel por omisin cuando hace consultas, cuidado con eso.
Est otra pestaa importante que es ODBC Drivers u Controladores ODBC. Aqu se
ven todos los controladores disponibles en la mquina. De est forma puedes consultar si
dispones del controlador que necesitas y si es la versin conveniente. Regularmente los
controladores de bases de datos vienen con un programa SETUP que los instala y quedan
Tal l er de PHP pecesama

62
dados de alta en esta lista.
Las otras pestaas merecen artculos aparte pues sirven ms a los administradores y
desarrolladores de sistemas. Para el fin de crear un origen de datos, con lo que hemos visto
tenemos. Lo siguiente:
Vamos a seleccionar la pestaa System DSN, nombre de origen de datos del sistema y
presionamos el botn Add, agregar..

Luego sealamos el controlador o driver del tipo de base de datos que queremos accesar:
Microsoft Access Driver (o controlador, en la versin en espaol) y presionamos Finalizar;
pero fjate que todava no acabamos.

Lo que tenemos que hacer ahora es darleal nuevo origen de datos un nombre peculiar y
distintivo, como estamos creando un origen de datos para una base de datos que se llama
MyTown.mdb pues le llamo MiPueblo y le damos una descripcin (que en realidad no es
necesaria).

Tal l er de PHP pecesama

63


Eso es todo, ahora solamente se debe cerrar el administrador de ODBC presionado el
botn Aceptar. Tenemos un origen de datos nuevo que le ser til a aplicaciones que de
otra forma no podran leer una base de datos Access El controlador de ODBC de Microsoft
Access se puede instalar, si es que no lo tienes, desde el CD de Office o de Access s lo
tienes como versin independiente.
Para ms informacin y recursos respecto a ODBC puedes visitar:



Tal l er de PHP pecesama

64
Ya conocemos que es ODBC y como crear un DSN, ahora veamos como usar esas
bases con PHP:
PHP con ODBC

Conectarse

Veamos como realizar una conexin con ODBC a un DSN de nombre base y
mostrar los resultados (conectarODBC.php).

conectarODBC.php

<?
$conexi on = odbc_connect ( " base" , " " , " " , " " ) ;
$r s= odbc_exec( $conexi on, " sel ect * f r omusuar i os" ) ;
whi l e ( odbc_f et ch_r ow( $r s) )
{
echo odbc_r esul t ( $r s, " Nombr e" ) ;
echo odbc_r esul t ( $r s, " i dusuar i o" ) ;
}
odbc_cl ose_al l ( ) ;
?>

Agregar

Vamos a agregar un registro a la base de datos (agregarODBC.php)

agregarODBC.php

<?
$conexi on = odbc_connect ( " base" , " " , " " , " " ) ;
$r s= odbc_exec( $conexi on, " sel ect * f r omusuar i os" ) ;
$sql =" i nser t i nt o usuar i os ( i dusuar i o, Nombr e)
val ues( ' 1' , ' Pedr o' ) " ;
$r s=odbc_exec( $conexi on, $sql ) ;
odbc_cl ose_al l ( ) ;
?>



Modificar

Vamos a modificar un registro a la base de datos (modificarODBC.php)

modificarODBC.php

<?
$conexi on = odbc_connect ( " base" , " " , " " , " " ) ;
$r s= odbc_exec( $conexi on, " sel ect * f r omusuar i os" ) ;
$sql =" updat e usuar i os set Nombr e=' pecesama' " ;
$r s=odbc_exec( $conexi on, $sql ) ;
Tal l er de PHP pecesama

65
odbc_cl ose_al l ( ) ;
?>
Eliminar

Vamos a eliminar un registro a la base de datos (eliminarODBC.php)

eliminarODBC.php

<?
$conexi on = odbc_connect ( " base" , " " , " " , " " ) ;
$r s= odbc_exec( $conexi on, " sel ect * f r omusuar i os" ) ;
$sql =" del et e f r omusuar i os wher e i dusuar i o=' 1' " ;
$r s=odbc_exec( $conexi on, $sql ) ;
odbc_cl ose_al l ( ) ;
?>

Como puedes ver no me extendi mucho en el tema, pero ya conoces mucho de PHP,
tu puede crear ya las aplicaciones y con esto que puse para conecatarse y manejo de
registros es suficiente para que ya desarrolles tu, pero por si te falta mas informacin te
pongo la sintaxis de las funciones que tiene PHP para ODBC:
(int) odbc_autocommit($connection_id, $OnOff)
(void) odbc_close($connection_id)
(void) odbc_close_all(void)
(int) odbc_commit($connection_id)
(int) odbc_connect($dsn, $user, $password)
(int) odbc_pconnect($dsn, $user, $password)
(string) odbc_cursor($result_id)
(int) odbc_do($connection_id, $query_string)
(int) odbc_exec($connection_id, $query_string)
(int) odbc_prepare($connection_id, $query_string)
(int) odbc_execute($result_id, $array)
(int) odbc_fetch_row($result_id, $row_number)
(int) odbc_fetch_into($result_id, $row_number, $array_ptr)
(int) odbc_field_len($result_id, $field_number)
(string) odbc_field_name($result_id, $field_number)
(string) odbc_field_type($result_id, $field)
(int) odbc_free_result($result_id)
(int) odbc_num_fields($result_id)
(int) odbc_num_rows($result_id)
(string) odbc_result($result_id, $field)
(int) odbc_result_all($result_id, $format)
(int) odbc_rollback($connection_id)

Ahora que ya manejamos archivos y bases de datos, vamos a ver un poco ms de
PHP, algo ms avanzado, como las sesiones e incluso algunas funciones con protocolos de
Internet.
Tal l er de PHP pecesama

66


Capitulo IV
Funciones de red


















Tal l er de PHP pecesama

67

Cookies
La principal utilidad de las cookies (galletas) es la de solventar el problema de la
falta de estado en la navegacin a travs de las paginas web.
Con las cookies, pequeas porciones de informacin se quedan registradas en el
navegador permitiendo identificar a este a travs de diferentes pginas de un mismo sitio e
incluso durante visitas entre distintos das.
Realmente las cookies no son mas que cadenas de texto que son enviadas desde el
servidor al cliente (navegador) y almacenadas en este, luego el navegador enva estas
cookies al servidor permitiendo as la identificacin del cliente en el servidor.

Funcionamiento
La cookie es enviada al navegador desde el servidor y si este la acepta permanece en
l.


Las pginas piden la cookie al navegador...


El navegador las enva, permitiendo la identificacin del usuario por parte del
servidor.


A continuacin vamos a ver como usar las cookies para nuestro beneficio.
Tal l er de PHP pecesama

68

Cmo usar las cookies
El manejo de cookies en PHP se realiza mediante el uso de la funcin setcookie, esta
funcin esta disponible a partir de la versin 3 de PHP.
i nt set cooki e ( st r i ng Nombr e [ , st r i ng Val or [ , i nt Expi r e [ , st r i ng
Pat h [ , st r i ng Domi ni o [ , i nt Secur e] ] ] ] ] )
Setcookie() define una cookie que es enviada junto con el resto de la informacin de la
cabecera(header). Las cookies deben ser enviadas antes de cualquier etiqueta (tag) de html,
por lo tanto deberemos realizar la llamada a estas funciones antes de cualquier etiqueta
<HTML>o <HEAD>. Esta es una restriccin de las cookies no de PHP.
Todos los argumentos excepto el nombre son opcionales.
Nombre. Nombre de la cookie. Si creamos una cookie solamente con el nombre, en
el cliente se eliminar la cookie que exista con ese nombre. Tambin podemos
reemplazar cualquier argumento con una cadena vaca ("").
Value. Valor que almacenar la cookie en el cliente.
Expire. El argumento expire es un argumento entero que indica la hora en que se
eliminara la cookie. Normalmente se usa time() +N. segundos de duracin, para
especificar la duracin de una cookie.
Path. Subdirectorio en donde tiene valor la cookie.
Dominio. Dominio en donde tiene valor la cookie. Si ponemos como dominio
www.domain.com la cookie no se transmite para domain.com, mientras que si
ponemos domain.com la cookie se transmite tanto para domain.com como para
www.domain.com
Secure. El argumento secure indica que la cookie solo se transmitir a travs de una
conexin segura HTTPS.
set cooki e( " usuar i o" , " Pedr o" , t i me( ) +3600, " / " , " www. pecesama. net " ) ;
En este ejemplo establecemos una cookie de nombre usuario que contiene el valor
Pedro, que dura 1 hora (3600 segundos) vlida para todo el dominio www.pecesama.net.
Ejemplo de uso de cookies
En este ejemplo vamos a ver como establecer una cookie y cmo se recupera su valor.
Se establece la cookie ejemusuario, cuya duracin es una hora (cookies.php).
cookies.php
<?php
set cooki e( " ej emusuar i o" , Pedr o, t i me( ) +3600, " / " , " " ) ;
Tal l er de PHP pecesama

69
?>
<ht ml >
<head>
<t i t l e>Ej empl o de PHP</ t i t l e>
</ head>
<body>
<H1>Ej empl o de uso de cooki e</ H1>
Se ha est abl eci do una cooki e de nombr e <b>ej emusuar i o</ b> con el
val or : <b><? pr i nt $ej emusuar i o; ?></ b> que ser vl i da dur ant e 1
hor a.
</ body>
</ ht ml >
Sesiones
Qu son las sesiones?, bsicamente una sesin es la secuencia de pginas que un
usuario visita en un sitio web. Desde que entra en nuestro sitio, hasta que lo abandona.
El trmino sesin en PHP, session en ingls, se aplica a esta secuencia de navegacin,
para ello crearemos un identificador nico que asignamos a cada una de estas sesiones de
navegacin. A este identificador de sesin se le denomina, comnmente, como la sesin.
El proceso en cualquier lenguaje de programacin podra ser algo as:
Existe una sesin?, si existe lo retomamos, si no existe la creamos y le damos un
identificador nico.
Y para que no perdamos el hilo de la navegacin del usuario deberemos asociar esta
sesin a todas las direcciones (URLs) y acciones de formularios. Podemos tambin crear
una cookie que incluya el identificador de sesin, pero es conveniente recordar que la
disponibilidad o no de las cookies depende del usuario, y no es conveniente fiarse de lo que
un usuario pueda o no tener habilitado.
Lo contado hasta ahora es teora pura y es aplicable a cualquier lenguaje de
programacin C, Perl, etc. Los que programamos en PHP4 tenemos la suerte de que toda la
gestin de sesiones la hace el mismo PHP.
Por lo tanto lo comentado aqu sobre sesiones es solo aplicable a PHP4.
Inicializacin de la sesin
Para utilizar sesiones en PHP lo primero es inicializarlas. Podemos hacerlo
explcitamente, mediante la funcin session_start(), o al registrar una variable en una sesin
mediante session_register('miVariable'). En ambos casos se crea una nueva sesin, si no
existe, o se retoma la sesin actual. Veamos un sencillo ejemplo:
<?php
sessi on_st ar t ( ) ;
echo " Se i ni ci l a sesi n" ;
Tal l er de PHP pecesama

70
?>
Esta es la forma ms bsica, si el usuario tiene las cookies activadas, PHP habr
insertado de forma automtica la sesin y sta ser pasada de una pgina a otra sin hacer
nada ms. Desde un punto de vista prctico la sesin es operativa, pero no vemos nada.
Podemos obtener la sesin en cualquier momento mediante la funcin session_id().
<?php
sessi on_st ar t ( ) ;
echo ' La sesi n act ual es: ' . sessi on_i d( ) ;
?>
En este caso session_start() comprueba en las cookies que existe una sesin y continua
con ella, session_id() devuelve el identificador actual.
Veamos otro ejemplo que, tal vez, te lo aclare un poco ms:
<?php
sessi on_r egi st er ( ' cont ador ' ) ;
echo ' <a hr ef =" ' . $PHP_SELF. ' ?' . $SI D. ' " >Cont ador val e:
' . ++$cont ador . ' </ a>' ;
?>
Como dije anteriormente la sesin se crea si no existe o se recoge mediante
session_start(), o tambin cuando se registra una variable de sesin mediante
session_register().
Si no has utilizado nunca las sesiones, el concepto de variable de sesin, puede resultar
un poco extrao. Bsicamente es una variable, como cualquiera de las que gestiona PHP4,
pero que reside en un espacio especfico en el servidor, junto con el identificador de sesin,
y que pertenece nicamente a un usuario.
En nuestro ejemplo anterior, registramos la variable $contador en la primera lnea del
script. En la segunda lnea, entre otras cosas, cada vez que recarguemos la pgina o
hagamos click sobre el enlace, el valor de $contador se incrementar en 1.
En esta lnea hacemos uso de la variable reservada $PHP_SELF, que hace referencia
al propio script en ejecucin y una constante propia de PHP4, $SID, que contiene el
nombre de la sesin y el identificador de la misma.
Podemos averiguar tambin el nombre de la sesin, o modificarlo, mediante la funcin
session_name(). Veamos una prueba prctica (sesion.php):
sesion.php

<?php
sessi on_name( ' mi sesi on' ) ;
sessi on_r egi st er ( ' cont ador ' ) ;
Tal l er de PHP pecesama

71
echo ' <a hr ef =" ' . $PHP_SELF. ' ?' . SI D. ' " >Cont ador val e:
' . ++$cont ador . ' </ a><br >' ;
echo ' Ahor a el nombr e es ' . sessi on_name( ) . ' y l a sesi n
' . $mi sesi on. ' <br >' ;
?>
La asignacin del nombre de sesin debe realizarse antes que ninguna otra funcin con
sesiones, antes que session_start() o session_register().
Error comn
Uno de los errores ms comunes cuando se utilizan sesiones es dejar lneas en blanco
antes de la inicializacin de PHP o enviar alguna salida a la pantalla. Para probarlo crea una
lnea en blanco o con cualquier cosa antes de <?php.
Si tienes las cookies activadas, te encontrars un error de este tipo:
War ni ng: Cannot send sessi on cooki e - header s al r eady sent by ( out put
st ar t ed at / t al l er / sesi ones. php: 2) i n / t al l er / sesi ones. php on l i ne 4
PHP est informando de que no puede activar las cookies en el navegador del usuario,
porque las cabeceras ya han sido enviadas. Simplemente por la existencia de una lnea en
blanco. Como medida prctica, no dejes espacios ni antes del inicio del script, ni despus de
la finalizacin.
Si despus de todo lo comentado an no entiendes para que sirven las sesiones,
veamos un ejemplo prctico. Imagina que quisieras crear un sistema de carrito de compras
Carrito de compra
Si despus de todo lo comentado an no entiendes para que sirven las sesiones,
veamos un ejemplo prctico. Imagina que quisieras crear un sistema de carrito de compras,
en su forma bsica podra ser algo as (carrito.php):
carrito.php
<?php
sessi on_st ar t ( ) ;
sessi on_r egi st er ( ' i t emsEnCest a' ) ;
i f ( $i t em) {
i f ( ! i sset ( $i t emsEnCest a) ) {
$i t emsEnCest a[ $i t em] =$cant i dad;
}el se{
f or each( $i t emsEnCest a as $k => $v) {
i f ( $i t em==$k) {
$i t emsEnCest a[ $k] +=$cant i dad;
$encont r ado=1;
}
}
i f ( ! $encont r ado) $i t emsEnCest a[ $i t em] =$cant i dad;
Tal l er de PHP pecesama

72
}
}
?>
<ht ml >
<body>
<t t >
<f or mact i on=" <?=$PHP_SELF. " ?" . SI D?>" met hod=" post " >
Di me el pr oduct o <i nput t ype=" t ext " name=" i t em" si ze=" 20" ><br >
Cuant as uni dades <i nput t ype=" t ext " name=" cant i dad" si ze=" 20" ><br >
<i nput t ype=" submi t " val ue=" Aadi r a l a cest a" ><br >
</ f or m>
<?
i f ( i sset ( $i t emsEnCest a) ) {
echo' El cont eni do de l a cest a de l a compr a es: <br >' ;
f or each( $i t emsEnCest a as $k => $v) {
echo ' Ar t cul o: ' . $k. ' ud: ' . $v. ' <br >' ;
}
}
?>
</ t t >
</ body>
</ ht ml >
Una breve explicacin. En la lnea 4 comprobamos si el usuario ha pasado algn
artculo, desde el formulario. En la 5 si el array itemsEnCesta no existe, lo creamos con el
nuevo producto y la cantidad indicada. Si el array existe recorremos su contenido, entre las
lneas 8 y 13, y si encontramos un artculo igual, aadimos la cantidad en la lnea 10. Si no
lo encontramos, es un nuevo artculo, por lo tanto, aadimos el nuevo producto con la
correspondiente cantidad a itemsEnCesta en la lnea 14.
Y a continuacin imprimimos el formulario y los resultados, si los hubiera, a partir de
la lnea 18, donde empieza el HTML.
Te imaginas las posibilidades de un sistema de almacenamiento de informacin de
estas caractersticas?. No necesitas archivos, ni bases de datos, ni tienes que andar pasando
valores de una pgina a otra. PHP va gestionando estos datos por nosotros, hasta el
momento en que decidamos almacenar la informacin donde ms nos interese.
Envi de e-mails
PHP nos ofrece la posibilidad de enviar emails de una manera sencilla y fcil, para ello
el lenguaje nos proporciona la instruccin mail( )
<?php
mai l ( dest i nat ar i o, t ema, t ext o del mensaj e) ;
?>
En el parmetro destinatario pondremos la direccin de email a donde se enviar el
mensaje, en el parmetro tema el tema o subject del mensaje y el parmetro texto del
mensaje el cuerpo del mensaje en formato texto plano.
Tal l er de PHP pecesama

73
Existe una sintaxis extendida de la instruccin mail( ) que nos permite aadir
informacin adicional a la cabecera del mensaje.
<?php
mai l ( dest i nat ar i o, t ema, t ext o del mensaj e, i nf or maci n adi ci onal de
cabecer a) ;
?>
En la informacin de cabecera podremos incluir parmetros adicionales al mensaje
como Reply-To:, From:, Content-type:... que nos permiten tener un mayor control sobre el
mensaje.
Ahora veamos un pequeo ejemplo de cmo enviar un correo electrnico con PHP
(email.htm y email.php).
email.htm
<ht ml >
<head>
<t i t l e>Ej empl o de PHP</ t i t l e>
</ head>
<body>
<H1>Ej empl o de envi de emai l </ H1>
I nt r oduzca su di r ecci on de emai l :
<FORM ACTI ON=" email.php" METHOD=" GET" >
<I NPUT TYPE=" t ext " NAME=" di r ecci on" ><BR><BR>
For mat o: <BR>
<I NPUT TYPE=" r adi o" NAME=" t i po" VALUE=" pl ano" CHECKED> Text o
pl ano<BR>
<I NPUT TYPE=" r adi o" NAME=" t i po" VALUE=" ht ml " > HTML<BR><BR>
<I NPUT TYPE=" submi t " VALUE=" Envi ar " >
</ FORM>
</ body>
</ ht ml >
email.php

<ht ml >
<head>
<t i t l e>Ej empl o de PHP</ t i t l e>
</ head>
<body>
<H1>Ej empl o de envi de emai l </ H1>
<?
i f ( $di r ecci on! =" " ) {
i f ( $t i po==" pl ano" ) {
/ / Envi o en f or mat o t ext o pl ano
mai l ( $di r ecci on, " Ej empl o de envi de
emai l " , " Ej empl o de envi de emai l de t ext o
pl ano\ n\ n\ nht t p: / / www. pecesama. net " , " FROM: Pedr o
<pecesama@pecesama. net >\ n" ) ;
} el se {
/ / Envi en f or mat o HTML
Tal l er de PHP pecesama

74
mai l ( $di r ecci on, " Ej empl o de envi de
emai l " , " <ht ml ><head><t i t l e>PecesamaSof t . Tal l er de
PHP</ t i t l e></ head><body>Ej empl o de envi de emai l
de HTML<br ><br >
\ nht t p: / / www. pecesama. net </ body></ ht ml >" , " Cont ent -
t ype: t ext / ht ml \ n" , " FROM: Pedr o
<pecesama@pecesama. net >\ n" ) ;
}
echo " Se ha envi ado un emai l a l a di r ecci on:
" , $di r ecci on, " en f or mat o <b>" , $t i po, " </ b>. " ;
}
?>
<br >
</ FORM>
</ body>
</ ht ml >

Envi de e-mails con attachments

Si lo que queremos es enviar un correo electrnico con un archivo adjunto
(attachment) entonces podemos usar cualquiera de estos dos cdigos, uno lo encontr en el
libro PHP Professional de la Editorial Wrox y el otro me lo pas un colega en el desarrollo
de PHP.

emailArchivo.php

<?
i ncl ude " mi me_mai l . i nc" ;
$f i l ename = " col or . gi f " ;
$cont ent _t ype = " i mage/ gi f " ;
# r ead a J PEG pi ct ur e f r omt he di sk
$f d = f open( $f i l ename, " r " ) ;
$dat a = f r ead( $f d, f i l esi ze( $f i l ename) ) ;
f cl ose( $f d) ;
# cr eat e obj ect i nst ance
$mai l = new mi me_mai l ;
# set al l dat a sl ot s
$mai l - >f r om= " l i zo@addr ess. com" ;
$mai l - >t o = " abc@mi me_mai l . com" ;
$mai l - >subj ect = " wel come! " ;
$mai l - >body = " Her e goes t he r eal
t ext of t he e- mai l . You can wr i t e over
mul t i pl e l i nes, of cour se. " ;
# append t he at t achment
$mai l - >add_at t achment ( $dat a, $f i l ename, $cont ent _t ype) ;
# send e- mai l
$mai l - >send( ) ;
?>

/ / st or e as " mi me_mai l . i nc"
cl ass mi me_mai l
{
var $par t s;
var $t o;
var $f r om;
Tal l er de PHP pecesama

75
var $header s;
var $subj ect ;
var $body;

/ *
* voi d mi me_mai l ( )
* cl ass const r uct or
*/
f unct i on mi me_mai l ( ) {
$t hi s- >par t s = ar r ay( ) ;
$t hi s- >t o = " " ;
$t hi s- >f r om= " " ;
$t hi s- >subj ect = " " ;
$t hi s- >body = " " ;
$t hi s- >header s = " " ;
}

/ *
* voi d add_at t achment ( st r i ng message, [ st r i ng name] , [ st r i ng
ct ype] )
* Add an at t achment t o t he mai l obj ect
*/
f unct i on add_at t achment ( $message, $name = " " , $ct ype =
" appl i cat i on/ oct et - st r eam" ) {
$t hi s- >par t s[ ] = ar r ay (
" ct ype" => $ct ype,
" message" => $message,
" encode" => $encode,
" name" => $name
) ;
}

/ *
* voi d bui l d_message( ar r ay par t =
* Bui l d message par t s of an mul t i par t mai l
*/
f unct i on bui l d_message( $par t ) {
$message = $par t [ " message" ] ;
$message = chunk_spl i t ( base64_encode( $message) ) ;
$encodi ng = " base64" ;
r et ur n " Cont ent - Type: " . $par t [ " ct ype" ] .
( $par t [ " name" ] ? " ; name = \ " " . $par t [ " name" ] .
" \ " " : " " ) .
" \ nCont ent - Tr ansf er - Encodi ng: $encodi ng\ n\ n$message\ n" ;
}

/ *
* voi d bui l d_mul t i par t ( )
* Bui l d a mul t i par t mai l
*/
f unct i on bui l d_mul t i par t ( ) {
$boundar y = " b" . md5( uni qi d( t i me( ) ) ) ;
$mul t i par t =
" Cont ent - Type: mul t i par t / mi xed; boundar y =
$boundar y\ n\ nThi s i s a MI ME encoded
message. \ n\ n- - $boundar y" ;
f or ( $i = si zeof ( $t hi s- >par t s) - 1; $i >= 0; $i - - )
Tal l er de PHP pecesama

76
{
$mul t i par t . = " \ n" . $t hi s- >bui l d_message( $t hi s-
>par t s[ $i ] ) .
" - - $boundar y" ;
}
r et ur n $mul t i par t . = " - - \ n" ;
}

/ *
* st r i ng get _mai l ( )
* r et ur ns t he const r uct ed mai l
*/
f unct i on get _mai l ( $compl et e = t r ue) {
$mi me = " " ;
i f ( ! empt y( $t hi s- >f r om) )
$mi me . = " Fr om: " . $t hi s- >f r om. " \ n" ;
i f ( ! empt y( $t hi s- >header s) )
$mi me . = $t hi s- >header s. " \ n" ;

i f ( $compl et e) {
i f ( ! empt y( $t hi s- >t o) ) {
$mi me . = " To: $t hi s- >t o\ n" ;
}
i f ( ! empt y( $t hi s- >subj ect ) ) {
$mi me . = " Subj ect : $t hi s- >subj ect \ n" ;
}
}

i f ( ! empt y( $t hi s- >body) )
$t hi s- >add_at t achment ( $t hi s- >body, " " ,
" t ext / ht ml " ) ;
$mi me . = " MI ME- Ver si on: 1. 0\ n" . $t hi s-
>bui l d_mul t i par t ( ) ;
r et ur n $mi me;
}

/ *
* voi d send( )
* Send t he mai l ( l ast cl ass- f unct i on t o be cal l ed)
*/
f unct i on send( ) {
$mi me = $t hi s- >get _mai l ( f al se) ;
mai l ( $t hi s- >t o, $t hi s- >subj ect , " " , $mi me) ;
}
}; / / end of cl ass

emailArchivo2.php

<?php
/ * not es f r omDan Pot t er :
Sur e. I changed a f ew ot her t hi ngs i n her e t oo t hough.
One i s t hat I l et
you speci f y what t he dest i nat i on f i l ename i s ( i . e. ,
what i s shows up as i n
t he at t achment ) . Thi s i s usef ul si nce i n a web
submi ssi on you of t en can' t
Tal l er de PHP pecesama

77
t el l what t he f i l ename was supposed t o be f r omt he
submi ssi on i t sel f . I
al so added my own ver si on of chunk_spl i t because our
pr oduct i on ver si on of
PHP doesn' t have i t . You can change t hat back or
what ever t hough =) .
Fi nal l y, I added an ext r a " \ n" bef or e t he message t ext
get s added i nt o t he
MI ME out put because ot her wi se t he message t ext wasn' t
showi ng up.
*/
/ *
not e: someone ment i oned a command- l i ne ut i l i t y cal l ed
' mut t ' t hat
can mai l at t achment s.
*/
/ *
I f chunk_spl i t wor ks on your syst em, change t he cal l
t o my_chunk_spl i t
t o chunk_spl i t
*/
/ * Not e: i f you don' t have base64_encode on your syt em
i t wi l l not wor k */

/ * si mpl e cl ass t hat encapsul at es mai l ( ) wi t h addi t i on
of mi me f i l e at t achment . */

cl ass CMai l Fi l e {
var $subj ect ;
var $addr _t o;
var $t ext _body;
var $t ext _encoded;
var $mi me_header s;
var $mi me_boundar y =
" - - ==================_846811060==_" ;
var $smt p_header s;

f unct i on
CMai l Fi l e( $subj ect , $t o, $f r om, $msg, $f i l ename, $mi met ype
= " appl i cat i on/ oct et - st r eam" , $mi me_f i l ename = f al se)
{
$t hi s- >subj ect = $subj ect ;
$t hi s- >addr _t o = $t o;
$t hi s- >smt p_header s =
$t hi s- >wr i t e_smt pheader s( $f r om) ;
$t hi s- >t ext _body = $t hi s- >wr i t e_body( $msg) ;
$t hi s- >t ext _encoded =
$t hi s- >at t ach_f i l e( $f i l ename, $mi met ype, $mi me_f i l ename) ;
$t hi s- >mi me_header s =
$t hi s- >wr i t e_mi meheader s( $f i l ename, $mi me_f i l ename) ;
}

f unct i on
at t ach_f i l e( $f i l ename, $mi met ype, $mi me_f i l ename) {
$encoded = $t hi s- >encode_f i l e( $f i l ename) ;
i f ( $mi me_f i l ename) $f i l ename = $mi me_f i l ename;
$out = " - - " . $t hi s- >mi me_boundar y . " \ n" ;
Tal l er de PHP pecesama

78
$out = $out . " Cont ent - t ype: " . $mi met ype . " ;
name=\ " $f i l ename\ " ; \ n" ;
$out = $out . " Cont ent - Tr ansf er - Encodi ng: base64\ n" ;
$out = $out . " Cont ent - di sposi t i on: at t achment ;
f i l ename=\ " $f i l ename\ " \ n\ n" ;
$out = $out . $encoded . " \ n" ;
$out = $out . " - - " . $t hi s- >mi me_boundar y . " - - " .
" \ n" ;
r et ur n $out ;
/ / added - - t o not i f y emai l cl i ent at t achment i s done
}

f unct i on encode_f i l e( $sour cef i l e) {
i f ( i s_r eadabl e( $sour cef i l e) ) {
$f d = f open( $sour cef i l e, " r " ) ;
$cont ent s = f r ead( $f d, f i l esi ze( $sour cef i l e) ) ;
$encoded =
my_chunk_spl i t ( base64_encode( $cont ent s) ) ;
f cl ose( $f d) ;
}
r et ur n $encoded;
}

f unct i on sendf i l e( ) {
$header s = $t hi s- >smt p_header s .
$t hi s- >mi me_header s;
$message = $t hi s- >t ext _body . $t hi s- >t ext _encoded;
mai l ( $t hi s- >addr _t o, $t hi s- >subj ect , $message, $header s) ;
}

f unct i on wr i t e_body( $msgt ext ) {
$out = " - - " . $t hi s- >mi me_boundar y . " \ n" ;
$out = $out . " Cont ent - Type: t ext / pl ai n;
char set =\ " us- asci i \ " \ n\ n" ;
$out = $out . $msgt ext . " \ n" ;
r et ur n $out ;
}

f unct i on wr i t e_mi meheader s( $f i l ename, $mi me_f i l ename)
{
i f ( $mi me_f i l ename) $f i l ename = $mi me_f i l ename;
$out = " MI ME- ver si on: 1. 0\ n" ;
$out = $out . " Cont ent - t ype: mul t i par t / mi xed; " ;
$out = $out . " boundar y=\ " $t hi s- >mi me_boundar y\ " \ n" ;
$out = $out . " Cont ent - t r ansf er - encodi ng: 7BI T\ n" ;
$out = $out . " X- at t achment s: $f i l ename; \ n\ n" ;
r et ur n $out ;
}

f unct i on wr i t e_smt pheader s( $addr _f r om) {
$out = " Fr om: $addr _f r om\ n" ;
$out = $out . " Repl y- To: $addr _f r om\ n" ;
$out = $out . " X- Mai l er : PHP3\ n" ;
$out = $out . " X- Sender : $addr _f r om\ n" ;
r et ur n $out ;
}

Tal l er de PHP pecesama

79
/ * Spl i t s a st r i ng by RFC2045 semant i cs ( 76 char s per
l i ne, end wi t h \ r \ n) .
Thi s i s not i n al l PHP ver si ons so I def i ne one
her e manual l . */
f unct i on my_chunk_spl i t ( $st r )
{
$st mp = $st r ;
$l en = st r l en( $st mp) ;
$out = " " ;
whi l e ( $l en > 0) {
i f ( $l en >= 76) {
$out = $out . subst r ( $st mp, 0, 76) . " \ r \ n" ;
$st mp = subst r ( $st mp, 76) ;
$l en = $l en - 76;
}
el se {
$out = $out . $st mp . " \ r \ n" ;
$st mp = " " ; $l en = 0;
}
}
r et ur n $out ;
}
/ / end scr i pt
/ / usage - mi met ype exampl e " i mage/ gi f "
?>


Y para usarlo hay que usar las siguientes lneas:

<?
$envi aar ch= new
CMai l Fi l e( $subj ect , $sendt o, $f r om, $message, $f i l ename, $mi met ype) ;
$envi aar ch- >sendf i l e( ) ;
/ / Gr aci as a Her i ber t o Rosas por hacer me l l egar est e scr i pt
?>

Espero que este pequeo manual te haya servido para aprender los conceptos
bsicos de PHP, y te siga sirviendo como apoyo siempre que te trabes con algo.
Agradezco el apoyo brindado en el taller de mis compaeros Ruth Castillo y Chava
Moreno ya que fueron un apoyo invaluable, as como al ingeniero Pedro Pea por todo el
material prestado para la elaboracin de este manual.

Le dedico este manual a Abi y a mi madre Lety las dos mujeres ms importantes en
mi vida
Gr aci ashast a l a pr xi ma
31/ 12/ 2001@04: 30pmPecesama

También podría gustarte