Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Taller de PHP
Taller de PHP
Facultad de Telemtica
Taller de PHP
(Del 27 de Octubre al 1 de Diciembre de 2001)
Taller de PHP
pecesama
ndice
ndice
4
5
5
5
14
14
15
16
16
Enteros
Nmeros en punto flotante
Cadenas
Caracteres protegidos
Operadores de comparacin
Operadores Lgicos
Operadores de Asignacin
Operadores Bit Bit
16
17
17
17
18
18
18
18
Constantes
Sentencias de control
19
21
if...else
if...elseif...else
switch...case...default
while
do...while
for
21
23
23
24
24
25
Vectores (tablas)
26
Tablas multidimensionales
28
Formularios
29
Botn de comando
Cuadro de texto
Cuadro de texto con barras de desplazamiento
Casilla de verificacin o checkbox
Botn de radio u opcin
Men desplegable
Campo oculto
29
29
30
31
32
32
34
39
Fopen
Fwrite
Fread
39
40
40
Bases de datos
41
Qu es MySQL?
41
Taller de PHP
MySQL Front
PHP para bases de datos MySQL
Conectarse
Agregar registros
Modificar registros
Eliminar registros
pecesama
42
43
46
47
47
47
48
48
49
49
50
54
54
55
56
58
59
64
64
64
64
65
67
Funcionamiento
Cmo usar las cookies
Ejemplo de uso de cookies
67
68
68
Sesiones
69
Inicializacin de la sesin
Error comn
Carrito de compra
69
71
71
Envi de e-mails
72
Taller de PHP
pecesama
Capitulo I
Introduccin
Taller de PHP
pecesama
Taller de PHP
pecesama
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 JavaScript o a C, para aquellos que conocen estos lenguajes.
Pero a diferencia de JavaScript 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.
Taller de PHP
pecesama
Taller de PHP
pecesama
Taller de PHP
pecesama
Taller de PHP
pecesama
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.
Taller de PHP
pecesama
La siguiente pantalla nos avisa que ya esta listo para instalar PHP, as que
solo presionamos Next.
10
Taller de PHP
pecesama
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.
Taller de PHP
pecesama
direccin
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.
12
Taller de PHP
pecesama
Capitulo II
Programacin con PHP
13
Taller de PHP
pecesama
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:
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 "Esto es una prueba"; ?>
<?php echo "Esto es una prueba" ?>
Comentarios en PHP
PHP soporta comentarios tipo 'C', 'C++' y Shell de Unix. Por ejemplo:
<?php
echo Prueba"; // Comentario tipo C++ para una lnea
?>
14
Taller de PHP
pecesama
<?php
/*
Esto es un comentario multilnea
otra lnea ms de comentario
*/
echo "Esto es an otra prueba"; ?>
<?php
echo "Prueba"; # Comentario tipo shell de Unix
?>
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
15
Taller de PHP
pecesama
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 = "Santana";
$Var = "Pedro";
echo "$var, $Var";
// produce la salida Santana, Pedro"
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 = "Hola";
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";
Tipos de datos
Enteros:
Los enteros se puede especificar usando una de las siguientes sintaxis:
$a
$a
$a
$a
=
=
=
=
1234;
-123;
0123;
0x12;
# nmero decimal
# un nmero negativo
# nmero octal (equivalente al 83 decimal)
# nmero hexadecimal (equivalente al 18 decimal)
16
Taller de PHP
pecesama
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 = "Hola";
$b = $a . "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 = 'Hola $a';
echo = "Hola $a";
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
\r
\t
\\
\$
\"
\[0-7]{1,3}
\x[0-9A-Faf]{1,2}
Nueva lnea
Retorno de carro
Tabulacin horizontal
Barra invertida
Signo del dlar
Comillas dobles
La secuencia de caracteres que coincida con la expresin regular es
un carcter en notacin octal
La secuencia de caracteres que coincida con la expresin regular es
un carcter en notacin hexadecimal
17
Taller de PHP
pecesama
Operadores de Comparacin:
$a
$a
$a
$a
$a
$a
<
>
<=
>=
==
!=
$b
$b
$b
$b
$b
$b
$a menor que $b
$a mayor que $b
$a menor o igual que $b
$a mayor o igual que $b
$a igual que $b
$a distinto que $b
Operadores Lgicos:
$a AND
$a &&
$a OR
$a !!
$a XOR
!$a
$b
$b
$b
$b
$b
Operadores de Asignacin:
$a
$a
$a
$a
$a
$a
=
+=
-=
*=
/=
.=
$b
$b
$b
$b
$b
$b
Asigna a $a el contenido de $b
Le suma a $b a $a
Le resta a $b a $a
Multiplica $a por $b y lo asigna a $a
Divide $a por $b y lo asigna a $a
Aade la cadena $b a la cadena $a
nombre
resultado
18
Taller de PHP
ejemplo
>>
$b
pecesama
nombre
derecha
resultado
(por aritmtica binaria, cada posicin desplazada
equivale a dividir entre dos el valor de $a)
Programa que dados 2 nmeros calcule la suma, resta, multiplicacin, divisin, y modulo.
<?php
$Num1=8;
$Num2=5;
printf(La suma de $Num1 y $Num2 es: <b>%d</b><br>, $Num1 +
$Num2 );
printf(La resta de $Num1 y $Num2 es: <b>%d</b><br>, $Num1
- $Num2 );
printf(La multiplicacin de $Num1 y $Num2 : <b>%d</b><br>,
$Num1 * $Num2 );
printf(La division de $Num1 y $Num2: <b>%0.2f</b><br>,
$Num1 / $Num2 );
printf(El modulo de $Num1 y $Num2 es <b>%0.1f</b><br>,
$Num1 % $Num2 );
?>
Constantes
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
19
Taller de PHP
pecesama
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:
__FILE__
TRUE
Valor verdadero.
FALSE
Valor falso.
E_ERROR
Denota una condicin donde PHP reconoce que hay algo errneo, pero
continuar de todas formas; pueden ser capturados por el propio archivo de
comandos.
20
Taller de PHP
pecesama
E_PARSE
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
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
21
Taller de PHP
pecesama
la condicin que evaluemos ha de estar encerrada entre parntesis (esto es aplicable a todas
la sentencias de control).
if (condicin) {
Este bloque se ejecuta si la condicin es VERDADERA
} else {
Este boque se ejecuta si la condicin 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.
if ($a > 4) echo "$a es mayor que 4";
adivina.php
<HTML>
<HEAD></HEAD>
<BODY>
<?php
srand((double)microtime()*1000000);
$Numero = rand(1,10);
if ($adivina > $Numero) {
echo "Fue muy grande"; echo "<BR>Yo pens el nmero
$Numero. Lo siento no ";
}
if ($adivina < $Numero) {
echo "Fue muy pequeo"; echo "<BR>Yo pens el nmero
$Numero. Lo siento no ";
}
?>
22
Taller de PHP
pecesama
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
if ($nombre == ""){
echo "T no tienes nombre";
} elseif (($nombre=="eva") OR ($nombre=="Eva")) {
echo "
echo "Tu nombre es EVA";
} else {
echo "Tu nombre es " . $nombre;
}
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
switch ($dia) {
case "Lunes":
echo "Hoy es Lunes";
break;
case "Martes":
echo "Hoy es Martes";
break;
case "Miercoles":
echo "Hoy es Miercoles";
break;
case "Jueves":
echo "Hoy es Jueves";
break;
case "Viernes":
echo "Hoy es Viernes";
break;
case "Sbado":
echo "Hoy es Sbado";
break;
case "Domingo":
echo "Hoy es Domingo";
break;
default:
echo "Esa cadena no corresponde a ningn da de la
semana";
23
Taller de PHP
pecesama
}
?>
while
La sentencia while ejecuta un bloque de cdigo mientras se cumpla una determinada
condicin.
<?php
$num = 1;
while ($num < 5) {
echo $num;
$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;
if ($num == 3){
echo "Aqu nos salimos \n";
break
}
$num++
} while ($num < 5);
?>
24
Taller de PHP
pecesama
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
for ($num = 1; Snum <=5; $num++){
echo $num;
if ($num == 3){
echo "Aqu nos salimos \n";
break
}
}
?>
25
Taller de PHP
pecesama
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
$ciudad[] = "Pars";
$ciudad[] = "Mxico";
$ciudad[] = "Roma";
$ciudad[] = "Sevilla";
$ciudad[] = "Londres";
print ("yo vivo en " . $ciudad[1] . "<BR>\n");
?>
Esta es una forma de asignar elementos a una tabla, pero una forma ms formal es
utilizando la funcin array
<?php
$ciudad = array("Pars", "Roma", "Sevilla", "Londres");
//contamos el nmero de elementos de la tabla
$numelentos = count($ciudad);
//imprimimos todos los elementos de la tabla
for ($i=0; $i < $numelentos; $i++)
{
print ("La ciudad $i es $ciudad[$i] <BR>\n");
}
?>
Sino se especifica, el primer ndice es el cero, pero podemos utilizar el operador =>
para especificar el ndice inicial.
26
Taller de PHP
pecesama
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.
$visitas[0] = 200;
$visitas[1] = 186;
o bien,
$visitas = array("codigo">$visitas = array("lunes"=>200;
"martes"=>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
pos
reset
end
next
prev
count
27
Taller de PHP
pecesama
next($semana);
echo pos($semana); //martes
end($semana)
echo pos($semana); //domingo
prev($semana);
echo current($semana); //sbado
?>
Recorrer una tabla con las funciones anteriores se hace un poco enredoso, para ello se
recomienda utilizar la funcin each().
<?php
$visitas = array("lunes"=>200, "martes"=>186,
"mircoles"=>190, "jueves"=>175);
reset($visitas);
while (list($clave, $valor) = each($visitas))
{
echo "el da $clave ha tenido $valor visitas<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
$calendario[] = array (1, "enero", 31);
$calendario[] = array (2, "febrero", 28);
$calendario[] = array (3, "marzo", 31);
$calendario[] = array (4, "abril", 30);
$calendario[] = array (5, "mayo", 31);
while (list($clave, $valor ) = each($calendario)){
{
$cadena = $valor[1];
$cadena .= " es el mes nmero " . $valor[0];
$cadena .= "y tiene " . $varlor[2] . " das<BR>";
echo $cadena;
}
?>
28
Taller de PHP
pecesama
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 si el
usuario del formulario va ha enviar datos (post) o recogerlos (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
<html>
<title>Equipo Favorito</title>
<body>
<form method=post ACTION=equipo.php>
Cual es tu equipo de ftbol favorito ?
<input name=equipo type TEXT>
<br>
<br>
<input type=submit>
</form>
</body>
<html>
29
Taller de PHP
pecesama
equipo.php
<html>
<body>
Tu equipo favorito es:
<?php Echo <h1><B>$equipo</B></h1>; ?>
</body>
</html>
sites.php
<html>
<body>
Tus webs favoritos son:<br>
30
Taller de PHP
pecesama
checkboxes.php
<html>
<body>
<?php
if (isset($sel1))
Echo $sel1 <br>;
if (isset($sel2))
Echo $sel2 <br>;
if (isset($sel3))
Echo $sel3 <br>;
?>
</body>
</html>
31
Taller de PHP
pecesama
radio.php
<HTML>
<BODY>
<?php Echo seleccionaste $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>
Ahora veamos un ejemplo en PHP:
32
Taller de PHP
pecesama
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 ACTION=lista.php>
Elije la computadora a comprar
<BR>
<BR>
<SELECT NAME=compu>
<OPTION>Pentium</OPTION>
<OPTION>Celeron</OPTION>
<OPTION>K6</OPTION>
<OPTION>MAC</OPTION>
</SELECT>
<BR>
<BR>
Selecciona los dispositivos de la computadora?
<BR>
<BR>
<SELECT NAME=dispo[] MULTIPLE>
<OPTION>KIT MULTIMEDIA</OPTION>
<OPTION>QUEMADORA</OPTION>
<OPTION>WEB CAM</OPTION>
<OPTION>MICROFONO</OPTION>
</SELECT>
<BR>
<BR>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>
lista.php
<HTML>
<BODY>
<?php
Echo Seleccionaste una computadora: <B>$compu</B>
con:<br>;
Echo $dispo[0]<br>;
Echo $dispo[1]<br>;
Echo $dispo[2]<br>;
Echo $dispo[3]<br>;
?>
</BODY>
</HTML>
33
Taller de PHP
pecesama
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>Crdito bancario</B>
<FORM METHOD=POST ACTION="banco.php">
<BR>
Cual de estos paquetes te interesa tomar?<BR><BR>
<INPUT NAME="valor" TYPE="Radio" VALUE=1000>Nuestro paquete
de $1,000 Con el 5.0% interes
<BR>
<INPUT NAME="valor" TYPE="Radio" VALUE=5000>Nuestro paquete
de $5,000 Con el 6.5% interes
<BR>
<INPUT NAME="valor" TYPE="Radio" VALUE=10000>Nuestro paquete
de $10,000 Con el 8.0% interes
<BR>
<BR>
Cuanto es lo que deseas pagar al mes ?
<INPUT NAME=pagomes TYPE=Text SIZE=5>
<BR>
<BR>
<INPUT TYPE=SUBMIT VALUE="Pulse aqu para calcular">
</FORM>
</BODY>
</HTML>
banco.php
<HTML>
<HEAD></HEAD>
<BODY>
<?php
$Duracion=0;
switch ($valor) {
case 1000:
$Interes = 5;
break;
34
Taller de PHP
pecesama
case 5000:
$Interes = 6.5;
break;
case 10000:
$Interes = 8;
break;
default:
echo "No seleccionaste ningun paquete favor de
presionar el boton back y seleccionar alguno";
exit;
}
while ($valor > 0)
{
$Duracion = $Duracion + 1;
$Mensualmente = $pagomes - ($valor * $Interes/100);
if ($Mensualmente<=0)
{
echo "Tu necesitas hacer pagos mas grandes!";
exit;
}
$valor = $valor - $Mensualmente;
}
echo "La duracion es de: $Duracion meses con un
porcentaje de intereses del $Interes.";
?>
</BODY>
</HTML>
El siguiente programa demuestra como se pueden trabajar los array como elementos
hash (estados.php y capital.php).
estados.php
<html>
<head>
<title>Estados de Mxico</title>
</head>
<body bgcolor="#FFFFFF">
De que estado te gustara conocer su capital?
<?
$Estados=array(1=>"Colima","Jalisco","Sinaloa");
echo "<form method=post action='capital.php'>";
echo "<select name='estado'>";
for ($counter=1; $counter<4; $counter++)
echo "<option value=$counter>$Estados[$counter]</option>";
echo "</select><br><br>";
echo "<input type=submit>";
echo "</form>";
?>
</body>
</html>
35
Taller de PHP
pecesama
capital.php
<html>
<head>
<title>Capitales</title>
</head>
<body bgcolor="#FFFFFF">
<?php
$Capital=array(1=>"Colima","Guadalajara","Culiacan");
for ($counter=0;$counter<4;$counter++)
{
if ($counter==$estado)
{
echo "la capital del estado elegido es
&Capital[$counter]";
}
}
?>
</body>
</html>
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>Minicurriculum </B>
<FORM METHOD=POST ACTION="minicu.php">
Nombres:
<INPUT NAME="nombres" TYPE="Text">
Apellidos:
<INPUT NAME="apellidos" TYPE="Text">
Edad:
<INPUT NAME="edad" TYPE="Text"SIZE="3">
<BR>
<BR>
Domicilio:
<TEXTAREA NAME="Domicilio" ROWS=4 COLS=40>
</TEXTAREA>
<BR>
<BR>
Que salario deseas ganar?
36
Taller de PHP
pecesama
<SELECT NAME="Salario">
<OPTION VALUE=0> Menos de $1000</OPTION>
<OPTION VALUE=1000>Entre $1,000 y $3,000</OPTION>
<OPTION VALUE=3000>Entre $3,000 y $5,000</OPTION>
<OPTION VALUE=5000>mas de $5,000</OPTION>
</SELECT>
<BR>
<BR>
Como consideras tu desempeo?<BR><BR>
<INPUT NAME="Desempe" TYPE="Radio" VALUE=0>Pesimo
<BR>
<INPUT NAME="Desempe" TYPE="Radio" VALUE=5>Regular
<BR>
<INPUT NAME="Desempe" TYPE="Radio" VALUE=10>Excelente
<BR>
<BR>
<INPUT TYPE=SUBMIT VALUE="Presione cuando este listo(a)">
<INPUT TYPE=RESET VALUE="Borra todo">
</FORM>
</BODY>
</HTML>
minicu.php
<HTML>
<BODY>
Sr(a) <?php Echo "$nombres $apellidos ";?>
en base a su edad (<?php Echo "$edad";?>) y sus aspiraciones <br>
econmicas y su auto estimacin hemos determinado que:<br>
<?php
echo "Salario deseado: $Salario <br>" ;
echo "Su desempeo elegido: $Desempe <br>";
if ((($Salario==0) OR ($Salario ==5000)) OR ($Desempe ==0))
{
Echo "Usted no cumple los requisitos para ser parte de
nuestra empresa";
}
else
{
Echo "Usted cumple satisfactoriamente nuestras
aspiraciones";
}
?>
</BODY>
</HTML>
37
Taller de PHP
pecesama
Capitulo III
Almacenamiento de la
informacin
38
Taller de PHP
pecesama
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.
39
Taller de PHP
pecesama
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
$contador_archivo="c:/inetpub/wwwroot/taller/conta.dat";
if (!($fp=fopen($contador_archivo,"r")))
die("No se encontro $contador_archivo");
$contador=(int)fread($fp,20);
fclose($fp);
$contador++;
echo "Eres el visitante nmero: <b>$contador</b>";
$fp=fopen($contador_archivo,"w");
fwrite($fp,$contador);
fclose($fp);
?>
40
Taller de PHP
pecesama
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
41
Taller de PHP
pecesama
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 :
Escrito en C y C++, testado con GCC 2.7.2.1. Usa GNU autoconf para portabilidad.
Clientes C, C++, Eiffel,PHP,Python,JAVA, 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.
42
Taller de PHP
pecesama
Despus tenemos la pantalla de bienvenida, solo hay que dar clic en Next.
43
Taller de PHP
pecesama
44
Taller de PHP
pecesama
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.
45
Taller de PHP
pecesama
Con esto es suficiente sobre la instalacin de MySQL Server, ahora veamos como
crear bases de datos en el.
46
Taller de PHP
pecesama
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:
shell>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.
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 test
Database 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
nombre_database.*
TO
nombre_usuario;
47
Taller de PHP
pecesama
DATABASE
nombre_database;
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
nombre_tabla(campo_1
tipo(tamao),...,campo_n tipo(tamao));
tipo(tamao),
campo_2
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
clientes(
rut
direccion char(50), telefono int(10));
mysql> DESCRIBE
char(8),nombre
char(25),
clientes;
+----------+-----------+------+-----+--------+-------+
| Field
| Type
| Null | Key | Default| Extra |
+----------+-----------+------+-----+--------+-------+
| rut
| char(12) | YES |
| NULL
|
|
| nombre
| char(25) | YES |
| NULL
|
|
| direccion| char(50) | YES |
| NULL
|
|
| telefono | int(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.
48
Taller de PHP
pecesama
LOCAL
INFILE
"nombre_archivo.txt"
INTO
TABLE
Para el caso que se desee ingresar un solo registro, entonces la sentencia a seguir es:
mysql>
INSERT
INTO
(``valor_1'',''valor_2'',....,
nombre_tabla
VALUES
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_lo_que_se_desea_ver
condiciones_a_satisfacer;
nombre_columna="lo
mysql>
SELECT
nombre_tabla;
nombre_columna_1,
nombre_columna_n
FROM
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.
49
Taller de PHP
pecesama
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.
Veamos como usarlo:
Una vez presionado New aparecen unos datos ya predefinidos, lo nico que
tenemos que cambiar es nuestro usuario y contrasea.
50
Taller de PHP
pecesama
Para crear una base de datos nueva, hay que ir al men Extra y la opcin
Create Database
51
Taller de PHP
pecesama
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
52
Taller de PHP
pecesama
Ahora que si nosotros deseamos usar el mtodo de lnea de comandos del MySQL la
informacin de la tabla es esta:
CREATE TABLE tablacurso (
id tinyint(3) unsigned NOT NULL auto_increment,
nombre varchar(30) DEFAULT '0' ,
direccion varchar(30) DEFAULT '0' ,
telefono varchar(30) DEFAULT '0' ,
email varchar(30) DEFAULT '0' ,
imagen varchar(30) DEFAULT '0' ,
PRIMARY KEY (id)
);
53
Taller de PHP
pecesama
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
function Conectarse()
{
if (!($link=mysql_connect("localhost","pecesama","pruebas")))
{
exit();
}
if (!mysql_select_db("basecurso",$link))
{
exit();
}
return $link;
}
54
Taller de PHP
pecesama
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
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1>
<FORM ACTION="agregar.php">
<TABLE>
<TR>
<TD>Nombre:</TD>
<TD><INPUT TYPE="text" NAME="nombre" SIZE="20"
MAXLENGTH="30"></TD>
</TR>
<TR>
<TD>Direccion:</TD>
<TD><INPUT TYPE="text" NAME="direccion" SIZE="20"
MAXLENGTH="30"></TD>
</TR>
<TR>
<TD>Telefono:</TD>
<TD><INPUT TYPE="text" NAME="telefono" SIZE="20"
MAXLENGTH="30"></TD>
</TR>
<TR>
<TD>Email:</TD>
<TD><INPUT TYPE="text" NAME="email" SIZE="20"
MAXLENGTH="30"></TD>
</TR>
<TR>
<TD>Imagen:</TD>
<TD><INPUT TYPE="text" NAME="imagen" SIZE="20"
MAXLENGTH="30"></TD>
</TR>
</TABLE>
<INPUT TYPE="submit" NAME="accion" VALUE="Grabar">
</FORM>
<hr>
<?php
include("conec.php");
$link=Conectarse();
55
Taller de PHP
pecesama
agregar.php
<?php
include("conec.php");
$link=Conectarse();
$Sql="insert
into
tablacurso
(nombre,direccion,telefono,email,imagen)
values
('$nombre','$direccion', '$telefono', '$email', '$imagen')";
mysql_query($Sql,$link);
header("Location: insertareg.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
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
56
Taller de PHP
pecesama
<H1>Ejemplo de modificar</H1>
<FORM ACTION="busca.php">
Nombre:
<INPUT TYPE="text" NAME="nombre" SIZE="20" MAXLENGTH="30">
<INPUT TYPE="submit" NAME="accion" VALUE="Buscar">
</FORM>
</body>
</html>
busca.php
<html>
<body>
<?php
include("conec.php");
$link=Conectarse();
$Sql="select * from tablacurso where nombre like '%$nombre%'";
echo $Sql;
$result=mysql_query($Sql,$link);
?>
<TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1>
<TR>
<TD> Nombre</TD>
<TD> Direccin </TD>
<TD> Telefono </TD>
<TD> Email </TD>
<TD> Imagen </TD>
</TR>
<form name="form1" method="post" action="modifica.php">
<?php
while($row = mysql_fetch_array($result))
{
printf("<tr><td><INPUT TYPE='text' NAME='nombre' SIZE='20'
MAXLENGTH='30' value='%s'></td><td> <INPUT TYPE='text'
NAME='direccion' SIZE='20' MAXLENGTH='30'
value='%s'> </td><td> <INPUT TYPE='text'
NAME='telefono' SIZE='20' MAXLENGTH='30'
value='%s'> </td><td> <INPUT TYPE='text'
NAME='email' SIZE='20' MAXLENGTH='30'
value='%s'> </td><td> <INPUT TYPE='text'
NAME='imagen' SIZE='20' MAXLENGTH='30'
value='%s'> </td></tr>",
$row["nombre"],$row["direccion"],$row["telefono"],$row["email
"],$row["imagen"]);
}
mysql_free_result($result);
?>
</form>
</body>
</html>
57
Taller de PHP
pecesama
modifica.php
<?php
include("conec.php");
$link=Conectarse();
$Sql="UPDATE tablacurso SET nombre='$nombre',
direccion='$direccion', email='$email', telefono='$telefono'
imagen='$imagen' WHERE nombre='$nombre'";
mysql_query($Sql,$link);
header("Location: consulta5.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
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1>
<?php
include("conec.php");
$link=Conectarse();
$result=mysql_query("select * from tablacurso",$link);
?>
<TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1>
<TR>
<TD> Nombre</TD>
<TD> Direccin </TD>
<TD> Telefono </TD>
<TD> Email </TD>
<TD> Imagen </TD>
<TD> Borra </TD>
</TR>
<?php
while($row = mysql_fetch_array($result)) {
printf("<tr><td> %s</td><td> %s </td><td> 
;%s </td><td> %s </td><td> %s </td><
/td><td><a href=\"borra.php?id=%d\">Borra</a></td></tr>",
$row["nombre"],$row["direccion"],$row["telefono"],$row["email
"],$row["imagen"],$row["ID"]);
}
mysql_free_result($result);
?>
</table>
</body>
</html>
58
Taller de PHP
pecesama
borra.php
<?php
include("conec.php");
$link=Conectarse();
mysql_query("delete from tablacurso where ID = $id",$link);
header("Location: eliminareg.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.
59
Taller de PHP
pecesama
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.
60
Taller de PHP
pecesama
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
61
Taller de PHP
pecesama
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 darle al 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).
62
Taller de PHP
pecesama
Ya conocemos que es ODBC y como crear un DSN, ahora veamos como usar esas
bases con PHP:
63
Taller de PHP
pecesama
Agregar
Vamos a agregar un registro a la base de datos (agregarODBC.php)
agregarODBC.php
<?
$conexion = odbc_connect("base","","","");
$rs= odbc_exec($conexion,"select * from usuarios");
$sql="insert into usuarios (idusuario, Nombre)
values('1','Pedro')";
$rs=odbc_exec($conexion,$sql);
odbc_close_all();
?>
Modificar
Vamos a modificar un registro a la base de datos (modificarODBC.php)
modificarODBC.php
<?
$conexion = odbc_connect("base","","","");
$rs= odbc_exec($conexion,"select * from usuarios");
$sql=" update usuarios set Nombre='pecesama'";
$rs=odbc_exec($conexion,$sql);
odbc_close_all();
?>
64
Taller de PHP
pecesama
Eliminar
Vamos a eliminar un registro a la base de datos (eliminarODBC.php)
eliminarODBC.php
<?
$conexion = odbc_connect("base","","","");
$rs= odbc_exec($conexion,"select * from usuarios");
$sql=" delete from usuarios where idusuario='1'";
$rs=odbc_exec($conexion,$sql);
odbc_close_all();
?>
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:
65
Taller de PHP
pecesama
Capitulo IV
Funciones de red
66
Taller de PHP
pecesama
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.
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.
67
Taller de PHP
pecesama
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.
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.com.
68
Taller de PHP
pecesama
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de uso de cookie</H1>
Se ha establecido una cookie de nombre <b>ejemusuario</b> con el
valor: <b><? print $ejemusuario; ?></b> que ser vlida durante 1
hora.
</body>
</html>
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
session_start();
echo "Se inici la sesin";
?>
69
Taller de PHP
pecesama
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
session_start();
echo 'La sesin actual es: '.session_id();
?>
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
session_register('contador');
echo '<a href="'.$PHP_SELF.'?'.$SID.'">Contador vale:
'.++$contador.'</a>';
?>
70
Taller de PHP
pecesama
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:
Warning: Cannot send session cookie - headers already sent by (output
started at /taller/sesiones.php:2) in / taller/sesiones.php on line 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
session_start();
session_register('itemsEnCesta');
if ($item){
if (!isset($itemsEnCesta)){
$itemsEnCesta[$item]=$cantidad;
}else{
foreach($itemsEnCesta as $k => $v){
if ($item==$k){
$itemsEnCesta[$k]+=$cantidad;
$encontrado=1;
}
}
if (!$encontrado) $itemsEnCesta[$item]=$cantidad;
}
}
71
Taller de PHP
pecesama
?>
<html>
<body>
<tt>
<form action="<?=$PHP_SELF."?".SID?>" method="post">
Dime el producto <input type="text" name="item" size="20"><br>
Cuantas unidades <input type="text" name="cantidad" size="20"><br>
<input type="submit" value="Aadir a la cesta"><br>
</form>
<?
if (isset($itemsEnCesta)){
echo'El contenido de la cesta de la compra es:<br>';
foreach($itemsEnCesta as $k => $v){
echo 'Artculo: '.$k.' ud: '.$v.'<br>';
}
}
?>
</tt>
</body>
</html>
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
mail(destinatario, tema, texto del mensaje);
?>
72
Taller de PHP
pecesama
Existe una sintaxis extendida de la instruccin mail( ) que nos permite aadir
informacin adicional a la cabecera del mensaje.
<?php
mail(destinatario, tema, texto del mensaje, informacin adicional de
cabecera);
?>
email.php
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de envi de email</H1>
<?
if ($direccion!=""){
if ($tipo=="plano"){
// Envio en formato texto plano
mail($direccion,"Ejemplo
de
envi
email","Ejemplo de envi
de email de
plano\n\n\nhttp://www.pecesama.com","FROM:
<pedro.santana@pecesama.com>\n");
} else {
// Envi en formato HTML
de
texto
Pedro
73
Taller de PHP
pecesama
mail($direccion,"Ejemplo
de
envi
de
email","<html><head><title>PecesamaSoft. Taller de
PHP</title></head><body>Ejemplo de envi de email
de
HTML<br><br>
nhttp://www.pecesama.com</body></html>","Contenttype:
text/html\n",
"FROM:
Pedro
<pedro.santana@pecesama.com>\n");
}
echo
"Se
ha
enviado
un
email
a la
direccion:
",$direccion," en formato <b>",$tipo,"</b>.";
}
?>
<br>
</FORM>
</body>
</html>
Espero que este pequeo 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. Le dedico este manual a Abi y a mi madre Lety
las dos mujeres ms importantes en mi vida
Gracias hasta la prxima
31/12/2001@04:30pm Pecesama
74