Curso PHP Academia Usero

223
@INTE ACADEMIA Curso de PHP Sesión 1. Instalar el servidor y probarlo 1.1. Instalar servidor Para aprender PHP lo primero que tenemos que hacer es instalar un servidor web en nuestro ordenador, de modo que podamos ejecutar nuestros programas en PHP antes de subirlos a un servidor. Una buena opción que instala todo lo necesario para empezar a trabajar es easyphp. Vamos a instalarlo. 1. Entre en la siguiente dirección: www.easyphp.org 1/223 ACADEMIA USERO

description

Curso PHP para introducirte en la programación desde el principio

Transcript of Curso PHP Academia Usero

Page 1: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Sesión 1. Instalar el servidor y probarlo

1.1. Instalar servidor

Para aprender PHP lo primero que tenemos que hacer es instalar un servidor

web en nuestro ordenador, de modo que podamos ejecutar nuestros programas en

PHP antes de subirlos a un servidor.

Una buena opción que instala todo lo necesario para empezar a trabajar es

easyphp. Vamos a instalarlo.

1. Entre en la siguiente dirección:

www.easyphp.org

2. Haga clic en el enlace Descargas.

1/191 ACADEMIA USERO

Page 2: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

3. Descargue la última versión disponible. En la realización de estos apuntes estaba

vigente la versión 1.8

4. Seleccione uno de los mirrors para descargar el programa.

5. Una vez descargado el programa, instálelo haciendo doble clic sobre el icono del

programa y siguiendo las instrucciones.

2/191 ACADEMIA USERO

Page 3: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

1.2. Reiniciar y probar el servidor

Una vez instalado el programa, una de las operaciones más comunes a realizar

es reiniciar el servidor, ya que puede haber veces que modifiquemos algunos

parámetros del mismo y queramos que estén activos.

1. Una vez que arranca EasyPHP, tiene un icono en la barra de tareas y, si hace clic,

una ventana en el Escritorio con información sobre PHP. Si hace clic en el icono de

EasyPHP, obtiene el siguiente menú, desde donde puede Reiniciar los servidores.

2. Una vez reiniciado el servidor, vamos a probar si está correctamente instalado el

programa. Abra Internet Explorer.

3. En el cuadro de dirección, escriba la siguiente dirección:

http://localhost

4. Cuando pulse Intro, obtendrá la siguiente ventana, donde se indica que se

muestran las carpetas en la carpeta raíz del servidor. Se puede borrar el archivo

de esta página y siempre obtener una copia en index-safe.php.

3/191 ACADEMIA USERO

Page 4: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

1.3. La carpeta del servidor

Vamos a probar la carpeta del servidor para comprobar que, efectivamente, el

servidor está bien instalado y funcionan nuestras páginas.

1. Si todo ha ido bien y ha instalado EasyPHP, la carpeta donde se guardan los

archivos de las webs es la siguiente:

C:\Archivos de programa\EasyPHP1-8\www

2. Entre en esta carpeta.

3. Observe como hay un solo archivo index.php, desde donde puede cargar la página

de inicio.

4. Cree un nuevo archivo en el bloc de notas con el siguiente contenido y guárdelo

con el nombre prueba.htm:

<HTML>

<HEAD>

<TITLE>

Página de prueba

</TITLE>

</HEAD>

<BODY>

Esta es la página de prueba

</BODY>

</HTML>

4/191 ACADEMIA USERO

Page 5: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

5. Abra este archivo en el navegador para probarlo.

1.4. El primer programa en PHP

Ya que sabemos donde tenemos que poner el archivo para que funcione, vamos

a escribir nuestro primer programa en PHP y vamos a probarlo.

1. Cree un nuevo archivo llamado primero.php con el bloc de notas y guárdelo en la

carpeta C:\Archivos de programa\EasyPHP1-8\www

2. Escriba el siguiente contenido en ese archivo:

<HTML>

<HEAD>

<TITLE>

Página de prueba 1 en PHP

</TITLE>

</HEAD>

<BODY>

<?

print("Hola, esto es PHP");

?>

</BODY>

</HTML>

3. Guarde el archivo y ábralo en su navegador. Observe el contenido del mismo.

5/191 ACADEMIA USERO

Page 6: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

¡¡¡Muy bien!!! Ya ha escrito su primer programa en PHP.

1.5. Sintaxis

Observe como las ordenes de PHP están encerrados entre los signos <? Y ¿>.

Además, la única orden que hemos escrito en PHP termina en ; como todos los

comandos que usemos en PHP.

1.6. Tomar datos de formularios

Para poder trabajar en posteriores sesiones, vamos a aprender a tomar datos de

formularios.

1. Entre en el bloc de notas y cree una página web con el siguiente formulario.

<HTML>

<HEAD>

<TITLE>

Formulario 1

</TITLE>

</HEAD>

<BODY>

Formulario 1

<form action="nombre.php" method="POST">

Nombre: <input type= text name=nombre>

Edad: <input type=text name=edad>

<input type=submit>

</BODY>

</HTML>

6/191 ACADEMIA USERO

Page 7: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

2. Ahora entre en el bloc de notas y cree un archivo llamado nombre.php con el

siguiente código PHP:

Hola <?php echo $_POST['nombre'];?>. Tu tienes <?php echo $_POST['edad'];?>

años .

3. Abra el formulario y pruébelo.

Sesión 2. Instrucciones condicionales

2.1. La instrucción IF

Sea lo que sea que haga, habrá ocasiones en las que sus programas tomarán

decisiones. Por ejemplo, puede decidir cargar una página si el navegador es Internet

Explorer u otra página si el navegador es Mozilla.

PHP incorpora varias opciones de control de flujo de programa, entre ellas IF.

Vamos a hacer un pequeño programa para aprender su funcionamiento.

1. Cree un formulario con el siguiente aspecto. Observe como tiene un campo de

texto donde puede introducir el nombre del color:

<HTML>

<HEAD>

<TITLE>

Formulario Color

</TITLE>

</HEAD>

7/191 ACADEMIA USERO

Page 8: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<BODY>

Formulario Color

<form action="webcolor.php" method="POST">

Escribe tu color favorito: <input type= "text" name="color">

<input type="submit">

</BODY>

</HTML>

2. Ahora cree un archivo llamado webcolor.php que va a ser la página de respuesta a

los datos del formulario:

<HTML>

<HEAD>

<TITLE>

Página con color de fondo en PHP

</TITLE>

</HEAD>

<BODY BGCOLOR=

<?

print("#FFAABB");

?>

</BODY>

</HTML>

3. En principio, hemos hecho una página que solo pone el color de fondo de la página

entera en la propiedad BGCOLOR del tag BODY. Pruebe el formulario y vea el

color de fondo.

TABLA DE COLORES WEB

8/191 ACADEMIA USERO

Page 9: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

http://es.wikipedia.org/wiki/

Colores_HTML_(2)

4. Ahora vamos a cambiar el código de modo que, según el contenido del cuadro, se

muestre un color de fondo u otro. Dentro de la parte de código PHP, borre la orden

print y escriba lo siguiente.

$varcolor=$_POST['color'];

if ($varcolor=="rojo") {

print("FF0000");

} else {

print("ADFF2F");

}

5. ORDEN DE ASIGNACIÓN:

Lo primero que se hace es crear una variable llamada varcolor y se le asigna el

texto que hemos escrito en el formulario:

6. Anatomía de un IF:

La orden IF comienza con la palabra if, que significa SI, el condicional. Luego hay que

poner una condición entre paréntesis. Una condición en PHP compara dos valores y

da una respuesta negativa o positiva. En este caso se compara el valor de la variable

varcolor con la constante de texto “rojo”. La variable de texto varcolor contiene el texto

lo que sea y, como no es igual (==) que rojo, pues se ejecute todo lo que está entre

llaves detrás del else (en otro caso).

IF POSITIVO: se cumple la condición IF NEGATIVO: no se cumple la

condición

$varcolor=”rojo” $varcolor=”lo que sea”

$varcolor=$_POST['color'];

if ($varcolor=="rojo") { se cumple

print("FF0000");

} else {

$varcolor=$_POST['color'];

if ($varcolor=="rojo") { NO se

cumple

print("FF0000");

9/191 ACADEMIA USERO

varcolor

lo que sea

Page 10: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

print("ADFF2F");

}

} else {

print("ADFF2F");

}

7. Pruebe el formulario con el texto rojo escrito en el cuadro de texto del formulario

para comprobar que funciona.

2.2. Otras condiciones

Vamos a crear un formulario que haga cosas distintas dependiendo de la edad

introducida.

1. Cree un formulario con el siguiente aspecto y guárdelo con el nombre

formedad.htm.

<HTML>

<HEAD>

<TITLE>

Formulario Edad

</TITLE>

</HEAD>

<BODY>

Formulario Edad

<form action="webedad.php" method="POST">

10/191 ACADEMIA USERO

Page 11: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Escriba su edad: <input type= "text" name="edad">

<input type="submit">

</BODY>

</HTML>

2. Cree un archivo con el siguiente código PHP y guárdelo como webedad.php:

<HTML>

<HEAD>

<TITLE>

Página con color de fondo en PHP

</TITLE>

</HEAD>

<BODY>

<?

$varedad=$_POST['edad'];

if ($varedad>=18) {

print("Puedes ver esta bonita página");

} else {

print("Eres menor y no puedes ver esta página");

}

?>

</BODY>

</HTML>

3. Este código presenta dos grandes diferencias con respecto al anterior. En este

caso, el código está dentro del BODY, por tanto, lo que se imprima se imprimirá

dentro de la página. Segundo, la condición ya no tiene un igual, sino un mayor o

igual. Este programa primero toma la edad que hemos introducido en el formulario

11/191 ACADEMIA USERO

Page 12: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

y la introduce en una variable. Luego, dependiendo del valor de esta variable,

imprime una cosa u otra en la página.

4. Abra el archivo y pruébelo para comprobar que, efectivamente, según la edad que

introduzca, se muestra un dato u otro.

Sesión 3. Condiciones SWITCH y Bucles

8.1. ELSEIF

Si tiene muchos colores, ha de disponer de una condición múltiple que, dependiendo

del color escrito, muestre un color de fondo u otro.

1. Cree un formulario para escribir el color y llámele formcolor3.htm

2. Modifique este formulario de modo que ejecute el archivo elseif.php cuando sea

enviado.

3. Ahora escriba el siguiente código en el nuevo archivo elseif.php:

<HTML>

<HEAD>

<TITLE>

Página con color de fondo en PHP

</TITLE>

</HEAD>

<BODY BGCOLOR=

<?

$varcolor=$_POST['color'];

12/191 ACADEMIA USERO

Page 13: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

if ($varcolor=="rojo") {

print("FF0000");

} elseif ($varcolor=="blanco") {

print("FFFFFF");

} elseif ($varcolor=="negro") {

print("000000");

} elseif ($varcolor=="verde") {

print("00FF00");

} else {

print("9966FF");

};

?>

>

Que color tan bonito...

</BODY>

</HTML>

4. Observe como la instrucción elseif permite añadir nuevas condiciones al mismo

if, de forma que se pueda comparar el valor del cuadro con más nombres de

colores. Así, podemos poner el fondo de más colores. Si no se cumple ninguna

de las condiciones, hemos añadido un else al final, por si el usuario no escribe un

color válido, que salga la página con un color de fondo morado.

8.2. La instrucción SWITCH

Imagine que tiene una lista con un montón de colores. Tiene que hacer un IF con

un montón de ELSEIF y un ELSE. Hay una instrucción más elegante para hacer lo

mismo, es la instrucción SWITCH.

La instrucción SWITCH depende del valor de una variable. Según lo que valga

esa variable se ejecutará una acción u otra. Vamos a hacer un ejemplo para ver como

funciona:

1. Cree un formulario para escribir el color y llámele formcolor4.htm

13/191 ACADEMIA USERO

Page 14: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

2. Modifique este formulario de modo que ejecute el archivo switch.php cuando sea

enviado.

3. Escriba este nuevo archivo switch.php

<HTML>

<HEAD>

<TITLE>

Página con color de fondo en PHP

</TITLE>

</HEAD>

<BODY BGCOLOR=

<?

$varcolor=$_POST['color'];

switch ($varcolor) {

case "rojo":

print("FF0000");

break;

case "blanco":

print("FFFFFF");

break;

case "negro":

print("000000");

break;

case "verde":

print("00FF00");

break;

default:

print("9966FF");

break;

};

14/191 ACADEMIA USERO

Page 15: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

?>

>

Que color tan bonito...

</BODY>

</HTML>

4. Este programa hace exactamente los mismo que el anterior. Observe como cada

conjunto de instrucciones termina con un break, que para la ejecución del switch.

Si el valor de la variable no coincide con ninguna de las opciones anteriores, se

ejecutan las instrucciones que están detrás de default.

8.3. Bucles

Vamos a hacer un programa que repita la misma instrucción varias veces.

Imagine que tiene que hacer un programa que pida el nombre de usuario y la

contraseña de un usuario. Si el usuario introduce el dato una sola vez y se equivoca,

no podemos permitirlo entrar. Para hacer un programa que pregunte varias veces los

datos del usuario hasta que sean correctos necesitamos un bucle, algo que se repita

hasta que se cumpla una cierta condición.

1. Cree un nuevo archivo llamado while.php con el siguiente código:

<HTML>

<HEAD>

<TITLE>

While

</TITLE>

</HEAD>

<BODY>

<?

$contador=0;

while ($contador<=10) {

print($contador."<br>");

$contador=$contador+1;

}

15/191 ACADEMIA USERO

Page 16: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

?>

</BODY>

</HTML>

2. Ábralo en su navegador. El resultado es el siguiente:

3. Un bucle WHILE tiene el siguiente aspecto:

$contador=0;

while ($contador<=10) {

print($contador."<br>");

$contador=$contador+1;

}

La primera orden asigna a una variable llamada contador el valor 0. Esto es un

operador de asignación.

La orden while tiene siempre una condición entre paréntesis. En este caso, la

condición es que la variable contador debe ser menor que 10. Luego hay dos órdenes,

un print que imprime en la página el valor de la variable que hemos creado, y un

incrementador, que suma uno a la variable que hemos creado.

Vamos a hacer un recorrido por el programa para ver como funciona.

Instrucción a ejecutar Valor de la variable

contador

¿Qué pasa? Pantalla

$contador=0 0

While ($contador<=10) 0 Se compara el valor de la

variable contador 0, con

16/191 ACADEMIA USERO

Page 17: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

10, y, como es menor, se

ejecuta lo que está dentro

de las llaves

print($contador."<br>"); 0 Se imprime el valor de la

variable contador, 0

0

$contador=$contador+1; 1 Se incrementa el valor de

la variable en 1

0

While ($contador<=10) 1 Se compara el valor de la

variable contador, 1, con

10 y, como es menor, se

ejecuta lo que está dentro

de las llaves

0

print($contador."<br>"); 1 Se imprime el valor de la

variable contador, 1

0

1

$contador=$contador+1; 2 Se incrementa el valor de

la variable en 1

0

1

Se repite la comparación, el print y el incremento del contador hasta que…

While($contador<=10) 11 Se compara el valor de la

variable contador, 11, con

10 y como es mayor,

salimos del bucle

0

1

2

3

4

5

6

7

8

9

1’

FIN DEL PROGRAMA

Ejercicios.

1. Cree un programa que haga un bucle que cuente de 10 a 1.

17/191 ACADEMIA USERO

Page 18: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

2. Cree un programa que haga un bucle que cuente de 1 al número que el

usuario introduzca en un formulario.

3. Cree un programa que haga un bucle que imprima la tabla del 2.

18/191 ACADEMIA USERO

Page 19: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Sesión 4. DO…WHILE, FOR, Comentarios,

pedido

4.1. DO…WHILE

19/191 ACADEMIA USERO

Page 20: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Puede usar la sentencia DO…WHILE si quiere ejecutar el bucle por lo menos una

vez. En este caso, se ejecuta el bucle al menos una vez y luego se comprueba la

condición.

5. Cree un formulario para escribir el color y llámele formcolor3.htm

6. Modifique este formulario de modo que ejecute el archivo elseif.php cuando sea

enviado.

7. Cree un nuevo archivo llamado dowhile.php con el siguiente código:

<HTML>

<HEAD>

<TITLE>

DO WHILE

</TITLE>

</HEAD>

<BODY>

<?

$contador=0;

do

{

print($contador."<br>");

$contador=$contador+1;

}

while ($contador<=10);

?>

</BODY>

</HTML>

8. Este programa funciona igual que el que tenía el bucle WHILE.

20/191 ACADEMIA USERO

Page 21: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

9. ¿Cómo funcionará el siguiente programa?

<HTML>

<HEAD>

<TITLE>

DO WHILE

</TITLE>

</HEAD>

<BODY>

<?

$contador=56;

do

{

print($contador."<br>");

$contador=$contador+1;

}

while ($contador<=10);

?>

</BODY>

</HTML>

21/191 ACADEMIA USERO

Page 22: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

4.2. FOR

La instrucción FOR permite ejecutar una serie de acciones un número determinado de

veces.

1. Cree un nuevo archivo llamado FOR.PHP con el siguiente contenido.

<HTML>

<HEAD>

<TITLE>

DO WHILE

</TITLE>

</HEAD>

<BODY>

<?

for ($contador=0;$contador<=10;$contador++)

{

print($contador."<br>");

}

?>

</BODY>

</HTML>

2. La sintaxis del FOR es más compacta, ya que se hace la inicialización de la

variable, se define la condición y se hace el incremento en una sola línea. La

estructura es la siguiente:

for (inicialización variable; condición; incremento o decremento) {

instrucción 1;

instrucción 2;

22/191 ACADEMIA USERO

Page 23: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

….

}

3. También puede hacer una lista con los números pares usando este programa:

<HTML>

<HEAD>

<TITLE>

DO WHILE

</TITLE>

</HEAD>

<BODY>

<?

for ($contador=0;$contador<=20;$contador=$contador+2)

{

print($contador."<br>");

}

?>

</BODY>

</HTML>

23/191 ACADEMIA USERO

Page 24: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

4.3. Comentarios

Los comentarios nos permiten añadir texto donde podemos escribir que es lo que

hace una línea de código y otra información.

Hay tres tipos de comentarios:

Comentarios con barra doble (//): permiten hacer comentarios de una sola línea

//esto es un comentario

Comentarios con almohadilla (#): permiten hacer comentarios de una sola línea

con almohadilla

#esto es un comentario

Comentario con varias líneas (/* */):

/* este comentario tiene

varias líneas */

4.4. Operadores

Ya sabemos un poco de PHP así que vamos a hacer un pequeño programa que

calcule cuanto cuesta el pedido de un usuario.

1. Para empezar, cree el siguiente formulario (solo hemos añadido el texto del

formulario).

<form id="formpedido" name="formpedido" method="post"

action="procesarpedido.php">

<table width="25%" border="0" cellspacing="0" cellpadding="0">

24/191 ACADEMIA USERO

Page 25: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<tr>

<td width="48%">Producto</td>

<td width="52%">Cantidad</td>

</tr>

<tr>

<td>DVD</td>

<td><label>

<input name="ndvd" type="text" id="ndvd" size="10" />

</label></td>

</tr>

<tr>

<td>CD</td>

<td><input name="ncd" type="text" id="ncd" size="10" /></td>

</tr>

<tr>

<td>DVD regrabable </td>

<td><input name="ndvdreg" type="text" id="ndvdreg" size="10"

/></td>

</tr>

<tr>

<td><label>

<input type="submit" name="Submit" value="Enviar" />

</label></td>

<td>&nbsp;</td>

</tr>

</table>

25/191 ACADEMIA USERO

Page 26: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

</form>

El formulario se llama formpedido, llama al archivo procesarpedido.php y tiene 3

cuadros de texto con los nombres ndvd, ncd y ndvdreg.

2. Ahora tenemos que crear el archivo procesarpedido.php que tiene que tomar los

datos del formulario, procesarlos y dar una respuesta. Empezamos por lo más

fácil, cree el siguiente archivo que toma los datos del formulario y los mete en

variables, además de escribir la fecha del código:

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-

1" />

<title>Pedido procesado</title>

</head>

<body>

<p>Pedido procesado el

<?

echo date("H:i , j S F");

26/191 ACADEMIA USERO

Page 27: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

?>

</p>

<p>

<?

$varndvd=$_POST['ndvd'];

$varncd=$_POST['ncd'];

$varndvdreg=$_POST['ndvdreg'];

print($varndvd);

print("<br>");

print($varncd);

print("<br>");

print($varndvdreg);

print("<br>");

?>

</p>

</body>

</html>

3. La nueva orden que hay aquí es la que da la fecha del sistema. Para aprender

más sobre como funciona DATE, busque en la siguiente página:

es.php.net/date

4. Ahora vamos a definir los precios de cada artículo. Para definir unos número que

no van a cambiar durante el programa, se usan constantes. Escriba las

siguientes 3 líneas de código al final, que definen 3 constantes en el programa.

define(“PRECIODVD”,1);

define(“PRECIOCD”,2);

27/191 ACADEMIA USERO

Page 28: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

define(“PRECIODVDREG,3);

5. Ahora vamos a calcular cuanto cuesta en total la compra. Para calcular definimos

una nueva variable llamada total y le asignamos la suma de todos los importes

de todos los artículos comprados. Escriba la siguiente línea de código:

$total = $varndvd*PRECIODVD+$varncd*PRECIOCD+

$varndvdreg*PRECIODVDREG;

print $total;

6. El resultado será similar al siguiente:

7. Puede embellecer el programa. Haga lo necesario para que se muestra como

ahora:

28/191 ACADEMIA USERO

Page 29: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Sesión 5. Funciones

5.1. Funciones

Una función permite escribir un bloque de código que puede ser usado distintas

veces dentro de un programa. Vamos a ver un ejemplo de uso de las funciones dentro

de un pequeño programa. Vamos a hacer un pequeño programa que nos calcule el

cuadrado de un número y lo ponga en un cuadro.

1. Cree el siguiente formulario:

2. Este formulario llamará al archivo cuadrado.php, cuyo código PHP es el siguiente:

<?

function cuadrado($n) {

29/191 ACADEMIA USERO

Page 30: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

$resultado = $n * $n;

return $resultado;

}

$varnumero=$_POST['numero'];

print ("Cuadrado:".cuadrado($varnumero));

?>

3. Aquí esta la función. Para empezar, toda función tiene que tener un nombre, que

en este caso es cuadrado. Después, entre paréntesis aparece el argumento, que

es una variable: el argumento es el número que hay darle a la función para que

calcule el cuadrado.

Cabecera de una función:

function nombredefuncion(argumentos) {

cuerpo de la función

}

4. En el cuerpo de la función tenemos dos órdenes: la primera calcula el cuadrado del

número y lo mete en una variable llamada resultado

$resultado = $n * $n;

5. La segunda y más importante, devuelve el valor de la función. Lo que hace es

devolver el contenido de la variable que calculamos anteriormente y que contiene

el cuadrado del número.

6. La palabra function lo único que hace es definir la función, luego la tenemos que

usar. Esto es lo que se produce en la parte principal del programa. Primero se

toma el contenido del formulario y se introduce en una variable:

$varnumero=$_POST['numero'];

7. Luego se llama a la función cuadrado pasando como argumento el contenido de la

variable y el resultado se imprime en la pantalla:

print ("Cuadrado:".cuadrado($varnumero));

30/191 ACADEMIA USERO

Page 31: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

8. El resultado del programa será similar al siguiente:

Ejercicios.

1. Cree una función que eleve un numero a otro y úselo con un formulario

como si fuera un calculadora

FORMULARIO:

<body>

<p>Potencia</p>

<form id="form1" name="form1" method="post"

action="potenciaf.php">

<p>Base

<label>

<input name="base" type="text" id="base" />

</label>

</p>

<p>Exponente

<label>

<input name="exponente" type="text" id="exponente" />

</label>

</p>

<p>

<label>

<input type="submit" name="Submit" value="Enviar" />

</label></p>

31/191 ACADEMIA USERO

Page 32: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

</form>

<p>&nbsp; </p>

</body>

</html>

PHP SIN FUNCIÓN

<?

$varbase=$_POST['base'];

$varexponente=$_POST['exponente'];

$resultado=$varbase;

for ($contador=1;$contador<$varexponente;$contador++)

{

$resultado=$resultado*$varbase;

};

print($resultado);

?>

PHP CON FUNCIÓN

<?

function potencia($b,$e) {

$resultado=$b;

for ($contador=1;$contador<$e;$contador++)

{

32/191 ACADEMIA USERO

Page 33: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

$resultado=$resultado*$b;

};

return($resultado);

}

$varbase=$_POST['base'];

$varexponente=$_POST['exponente'];

print(potencia($varbase,$varexponente));

?>

2. Cree una función que imprima en la pantalla un texto un número

determinado de veces. El formulario debe contener dos cuadros: uno

para la palabra y otro para el número de veces que queremos que salga la

palabra.

Sesión 6. Funciones y tablas

8.1. Funciones y tablas

Vamos a crear una función que haga una tabla con tantas filas como indique el

número que pasamos como argumento.

1. Cree el siguiente formulario:

33/191 ACADEMIA USERO

Page 34: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

2. El siguiente fichero PHP crea una tabla con el número de filas indicado en el

cuadro de texto Nº de filas:

<?

$varnfilas=$_POST['nfilas'];

print("<table border=1>");

for($i=1;$i<=$varnfilas;$i++) {

print("<tr><td>Fila " . $i . "</td></tr>");

}

print("</table>");

?>

3. La orden print(“<table border=1>”); imprime en la página el código HTML necesario

para que comience un tabla.

4. Luego comienza un bucle cuyo contador es la variable i. Se repite tantas veces

como indica la variable $varnfilas. Luego el contador i se incrementa en uno.

5. Dentro del bucle se produce la impresión de la celda en sí. Además, se introduce

dentro de la celda la palabra fila y el número del contador, de modo que sabemos

el número de la fila.

6. ¿Cómo cambiaríamos esto para que la impresión de una fila fuera una función?

Observe el siguiente código:

<?

34/191 ACADEMIA USERO

Page 35: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

function crearTabla($filas) {

print("<table border=1>");

for($i=1;$i<=$filas;$i++) {

print("<tr><td>Fila " . $i . "</td></tr>");

}

print("</table>");

}

$varnfilas=$_POST['nfilas'];

crearTabla($varnfilas);

?>

7. Ahora tenemos una función crearTabla que contiene todo el código necesario para

insertar la tabla en la página web.

6.2. Tablas con varias columnas

Vamos a hacer un pequeño programa que cree una tabla insertando el número de filas

y columnas.

1. Cree el siguiente formulario:

2. El código necesario para que se imprima una tabla es el siguiente:

35/191 ACADEMIA USERO

Page 36: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<?

function crearTablaDoble($filas,$columnas) {

print("<table border=1>");

for($i=1;$i<=$filas;$i++) {

print("<tr>");

for($j=1;$j<=$columnas;$j++) {

print("<td>Fila " . $i . " Columna " . $j . "</td>");

}

print("</tr>");

}

print("</table>");

}

$varnfilas=$_POST['nfilas'];

$varncolumnas=$_POST['ncolumnas'];

crearTablaDoble($varnfilas,$varncolumnas);

?>

3. Observe como hay un bucle dentro de otro en la función crearTablaDoble. Esto es

anidación de bucles. Primero imprimimos el código TR para que comience una fila.

Luego introducimos un bucle para que se impriman todas las celdas de esa fila.

Luego terminamos el código TR para terminar la fila y comenzamos con la

siguiente fila.

Ejercicio. Cree una función que imprima la tabla de multiplicar del número que

se introduzca en un formulario.

36/191 ACADEMIA USERO

Page 37: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Sesión 7. Arrays

37/191 ACADEMIA USERO

Page 38: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

7.1. Arrays

Si vendemos 3 artículos nos puede servir un formulario con 3 filas y ya está,

pero, ¿y si vendemos mil artículos? ¿Cómo hacemos para apuntar todos los artículos

que vamos a vender? Vamos a usar arrays.

Un array es una variable que puede contener muchos números. Cada número

ocupa una posición dentro del array y puede ser accedido por un número o índice.

Array de amigos

Posición Amigos

0 Pedro

1 Juan

2 Miguel

3 Antonio

Vamos a crear un pequeño programa que defina este array y luego lo imprima en

pantalla:

8. Cree el siguiente documento PHP y guárdelo con el nombre array.php:

<?

$amigos[0]="Pedro";

$amigos[1]="Juan";

$amigos[2]="Miguel";

$amigos[3]="Antonio";

$i=0;

do {

print($amigos[$i]."<br>");

38/191 ACADEMIA USERO

Page 39: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

$i++;

} while ($i<=3);

?>

9. Observe como se definen los valores del array:

$nombredelarray[número]=valor;

Se define el nombre del array y, entre corchetes, el número del índice, esto es, la

posición que se va a buscar dentro del array.

10. Luego hemos puesto un bucle desde el que se van imprimiendo los elementos del

array. El resultado del programa debe ser similar al siguiente:

7.2. Contar los elementos del array

A continuación tiene una modificación del mismo programa donde añadimos una

función que permite contar cuantos elementos tiene el array. Eso se define para luego

usarlo como límite para el bucle FOR.

<?

$amigos[0]="Pedro";

$amigos[1]="Juan";

$amigos[2]="Miguel";

$amigos[3]="Antonio";

$nelementos=count($amigos);

for($i=0;$i<$nelementos;$i++) {

39/191 ACADEMIA USERO

Page 40: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

print($amigos[$i]."<br>");

};

?>

7.3.

Sesión 8. Arrays

8.1. Foreach

La función FOREACH nos permite recorrer un array de la forma más elegante

posible.

<?

$jugadores["portero"]="Casillas";

$jugadores["defensa"]="Pujol";

$jugadores["medio"]="Alonso";

$jugadores["delantero"]="Reyes";

reset($jugadores);

foreach($jugadores as $value) {

print($value."<br>");

}

?>

40/191 ACADEMIA USERO

Page 41: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

8.2. Ordenar un array: sort

Podemos usar la función sort para ordenar los elementos de un array. Pruebe el

siguiente programa para observar el resultado:

<?

$jugadores["portero"]="Casillas";

$jugadores["defensa"]="Pujol";

$jugadores["medio"]="Alonso";

$jugadores["delantero"]="Reyes";

sort($jugadores);

reset($jugadores);

foreach($jugadores as $value) {

print($value."<br>");

}

?>

El único problema de sort es que los índices de tipo string se cambian por índices

numéricos, de modo que si después de ejecutar el código intentamos acceder a

$jugadores[“portero”], no obtendremos ningún resultado.

41/191 ACADEMIA USERO

Page 42: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

8.3. Ordenar un array con índices: asort

Para evitar este problema puede usar el comando asort, que ordena el array junto con

los índices. Pruebe el siguiente programa y compruebe el resultado:

<?

$jugadores["portero"]="Casillas";

$jugadores["defensa"]="Pujol";

$jugadores["medio"]="Alonso";

$jugadores["delantero"]="Reyes";

asort($jugadores);

reset($jugadores);

foreach($jugadores as $value) {

print($value."<br>");

}

print($jugadores["portero"]);

?>

42/191 ACADEMIA USERO

Page 43: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

8.4. Orden inverso

Puede usar las funciones rsort() y arsort() para ordenar un formulario de forma inversa.

Pruebe a cambiar la orden asort por arsort y compruebe el resultado.

8.5. Ordenar por el índice

Ahora cambie la orden asort por la orden ksort(). Esta orden le permite ordenar un

array según el índice.

Ejercicio. Haz un programa que calcule el número mayor de una lista de 5

números introducidos en un formulario.

<?

$numeros[0] =$_POST['n1'];

$numeros[1] =$_POST['n2'];

$numeros[2] =$_POST['n3'];

$numeros[3] =$_POST['n4'];

$numeros[4] =$_POST['n5'];

reset($numeros);

foreach($numeros as $value) {

print($value."<br>");

43/191 ACADEMIA USERO

Page 44: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

}

$mayor=$numeros[0];

foreach($numeros as $value) {

if ($value>$mayor) {

$mayor=$value;

}

}

print($mayor);

?>

Sesión 9. Email con PHP

9.1. Email

Es bien fácil enviar un email a través de PHP. Lo único que tenemos que tener

en cuenta es que debemos modificar el fichero PHP.INI para especificar el nombre del

servidor SMTP que usaremos para enviar el correo.

1. Para modificar el fichero PHP.INI haga clic en el icono de EASYPHP en la barra de

tareas.

2. Haga clic en el submenú Configuración.

3. Haga clic en PHP.

44/191 ACADEMIA USERO

Page 45: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

4. Vaya a la línea SMTP, donde puede definir el servidor de correo. En nuestro caso,

estamos usando el de la academia.

5. Guarde este archivo.

9.2. El formulario

Ahora cree un formulario con un par de campos de texto cuya acción sea el archivo

email.php.

45/191 ACADEMIA USERO

Page 46: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

9.3. Email.php

Observe el código email.php que procesa los datos de lformulario.

<?

$correo="[email protected]";

$asunto="Este es el asunto";

$redireccion="gracias.html";

$mensaje="";

foreach($_POST as $key=>$value) {

$mensaje.=$key.":".$value;

$mensaje.="\n";

}

print($mensaje);

if (mail($correo,$asunto,$mensaje)) {

//header("Location:$redireccion");

print("Mensaje enviado correctamente");

}

46/191 ACADEMIA USERO

Page 47: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

else

{

print("No de ha podido enviar el mensaje. Use el botón atrás para

probar de nuevo.");

}

?>

9.4. Como funciona el comando mail()

Para el comando mail() necesitamos tener la dirección de la persona a la que

queremos enviar el email, el asunto y el mensaje que queremos enviar. Por ello,

hemos definido las variables correo y asunto.

Luego para el cuerpo del mensaje hemos usado un bucle FOREACH que va

tomando todos los valores del formulario que están dentro de la variable $_POST.

Una vez llena la variable mensaje, podemos ejecutar el comando mail dentro de

un IF. ¿Por qué? Porque el comando mail devuelve un valor booleano indicando si el

envío ha sido correcto o no. Aprovechamos esto para imprimir en la página de

respuesta del envío si el mensaje ha sido correctamente enviado.

Sesión 10. Funciones de cadena

10.1. Funciones de cadena: substr

Habrá ocasiones en que tenga que comprobar o modificar algunos datos

introducidos en el formulario para que se ajusten a sus necesidades.

La función substr devuelve un trozo de una cadena de texto. Tiene 3

argumentos:

substr(string cadena, int posicionInicial, int longitudcadenadevuelta)

Cadena: cadena que introducimos para obtener una parte.

PosicionInicial: donde queremos que empiece.

47/191 ACADEMIA USERO

Page 48: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Longitudcadenadevuelta: longitud de la cadena que se va a devoler.

1. Cree un formulario con el siguiente aspecto.

2. Cree un archivo PHP con el siguiente código:

<?

$varpalabra=$_POST['palabra'];

print(substr($varpalabra,4));

?>

3. Este código saca todas las letras a la derecha del carácter 4. Si escribimos

juliancito, el programa devuelve ancito.

10.2. La función trim()

Elimina al principio y al final los espacios en blanco, tabulaciones y caracteres de

línea nueva. Esto puede ser útil para quitar los errores que pueda cometer el cliente al

escribir sus datos.

Por ejemplo, la orden:

48/191 ACADEMIA USERO

Page 49: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

print(trim($varpalabra));

imprime el contenido de la variable $varpalabra, quitando todos los caracteres

sobrantes a la izquierda y a la derecha.

10.2. La función strlen()

Da la longitud de la cadena de caracteres. Por ejemplo:

Print(strlen($varpalabra)

Imprimir la longitud de la cadena de caracteres.

10.3. Las funciones strtolower() y strtoupper()

Convierten la cadena de texto a minúsculas y mayúsculas.

Print(strtolower($varpalabra);

Print(strtoupper($varpalabra);

10.4. Las funciones ereg() y eregi()

Ereg() devuelve el valor trae si una cadena dada ha sido encontrada dentro de

otra cadena.

Por ejemplo, puede usar esta función para comprobar si existe la arroba cuando

un usuario escribe los datos de un correo electrónico.

ereg(“@”,$email)

49/191 ACADEMIA USERO

Page 50: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Sesión 11. Enviar archivos al servidor

11.1. El formulario

Cree el siguiente formulario. El formulario tiene un nuevo tipo de entrada de

formulario, una entrada de tipo file que permite seleccionar un archivo, para ello añade

un botón Examinar.

11.2. PHP

El código PHP que hay que añadir al fichero de respuesta es el siguiente:

<?

$target_path="";

$target_path = $carpetadestino . basename( $_FILES['fichero']['name']);

50/191 ACADEMIA USERO

Page 51: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

if(move_uploaded_file($_FILES['fichero']['tmp_name'], $target_path)) {

echo "El fichero ". basename( $_FILES['fichero']['name']).

" ha sido subido";

} else{

echo "Hubo un error. Inténtelo otra vez";

}

?>

11.3. ¿Dónde acaba el fichero?

El fichero termina en la carpeta apache dentro de la carpeta donde tenga instalado

EASYPHP.

Sesión 13. Enviar archivos a un servidor

FTP

51/191 ACADEMIA USERO

Page 52: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

13.1. El formulario

Cree el siguiente formulario. El formulario tiene un nuevo tipo de entrada de

formulario, una entrada de tipo file que permite seleccionar un archivo, para ello añade

un botón Examinar.

13.2. PHP

Pedazo de script. Vamos a ver que hace.

<?

PRIMERO COJO LAS VARIABLES DEL FORMULARIO Y LAS METO EN

VARIABLES CON NOMBRES QUE TENGAN SENTIDO

$servidor = $_POST['servidor'];

$usuario = $_POST['usuario'];

$contrasena = $_POST['contrasena'];

DEJO QUE LA CARPETA DE TRABAJO SEA LA CARPETA RAIZ DEL SERVIDOR

$carpetatrabajo="";

52/191 ACADEMIA USERO

Page 53: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

DEFINO LA CARPETA TEMPORAL COMO AQUELLA QUE ESPECIFICA EL

SERVIDOR HTTP (el apache)

$carpetatemporal=basename($_FILES['fichero']['tmp_name']);

SUBO EL FICHERO AL SERVIDOR HTTP

move_uploaded_file($_FILES['fichero']['tmp_name'],$carpetatrabajo."/".

$carpetatemporal) or die("No puedo subir el fichero a la carpeta de trabajo");

AHORA EMPIEZA EL FTP

CREO LA CONEXIÓN FTP

$conexion = ftp_connect($servidor) or die ("No puedo conectarme al host");

ME CONECTO AL SERVIDOR FTP USANDO LOS DATOS QUE HE METIDO EN EL

FORMULARIO

ftp_login($conexion, $usuario, $contrasena) or die("Los datos de usuario y contraseña

están bien");

DEFINO LA CONEXIÓN FTP COMO PASIVA: ESTO ES MUY IMPORTANTE

ftp_pasv( $conexion, true );

LE DIGO QUE SUBA EL FICHERO CON LA ORDEN FTP_PUT, ESPECIFICANDO

COMO FICHERO EL QUE SE SUBIÓ ANTES AL SERVIDOR HTTP

$cargar=ftp_put($conexion,$_FILES['fichero']['name'],$carpetatrabajo."/".

$carpetatemporal,FTP_BINARY);

LA VARIABLE CARGAR ES VERDADERA SI SE HA SUBIDO EL ARCHIVO

CORRECTO Y SI NO PUES SE AVISA DE QUE NO SE HA PODIDO SUBIR

53/191 ACADEMIA USERO

Page 54: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

if (!$cargar) {

print "No puedo subir el fichero";

} else {

print "Subida exitosa";

}

CIERRO LA CONEXIÓN

ftp_close($conexion);

?>

Sesión 14. Escribir y leer datos en ficheros

14.1. Un caso

Cuando los datos son enviados mediante un formulario, podemos hacer que

estos sean enviados a un correo electrónico. Esto supone una larga lista de mensajes

que responder en el correo.

Vamos a hacer que todos los mensajes se escriban en un archivo de texto: este

archivo de texto puede despues ser procesado por un software de respuesta

automática.

14.2. Cree el formulario

Cree el siguiente formulario. Observe como hay un campo de área de texto.

54/191 ACADEMIA USERO

Page 55: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

14.3. El código para escribir

Escribir en un fichero es muy fácil. Observe el siguiente código.

<?

//cogemos los datos

$nombre=$_POST['nombrepers'];

55/191 ACADEMIA USERO

Page 56: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

$opinion=$_POST['opinion'];

//ponemos nombre al fichero

$fichero="opiniones.txt";

//la orden fopen abre un fichero, la a significa que lo abre en modo add, esto

es, añadir al final

if($fp=fopen($fichero,"a")) {

//si se abre correctamente se escribe en la variable fichero fp el contenido

de la variable nombre

//\r\n es un salto de línea

fwrite($fp,$nombre."\r\n");

//también se escribe la opinión

fwrite($fp,$opinion."\r\n");

}

//y luego se cierra el fichero

fclose($fp);

?>

El contenido del fichero opiniones.txt ,que está en el directorio raiz del servidor es el

siguiente:

ececec

rhnn

qsvs

rvrvrv

eccec

56/191 ACADEMIA USERO

Page 57: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

dfdfdef

14.4. El código para leer

El fichero está escribo en nuestro servidor. ¿Cómo leerlo desde PHP? Para ello

vamos a abrir el fichero con la orden fopen en modo “r”, de forma que solo se lea el

fichero.

Luego usaremos un bucle cuya condición es que no se haya llegado al final del

fichero. Dentro del bucle introduciremos una roden que irá leyendo cada una de las

líneas del fichero y poniéndolas en la página.

<?

//especificamos el nombre del fichero a abrir

$fichero="opiniones.txt";

//lo abrimos en modo solo lectura

$fp=fopen($fichero,"r");

//el bucle tiene la condición de que no termine el fichero

while (!feof($fp)) {

//se lee una línea del fichero y se imprime en pantalla

print(fgets($fp));

//se imprime una línea

print("<br>");

}

//y luego se cierra el fichero

fclose($fp);

?>

57/191 ACADEMIA USERO

Page 58: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Sesión 15. Base de datos MySQL

15.1. MySQL

Al instalar EasyPHP, instalamos el compilador de PHP y además, un gestor de

base de datos como MySQL. Vamos a crear una pequeña base de datos en MySQL

para gestiona el acceso a una página web.

15.2. Entrar en PHPMyAdmin y crear la tabla

PHPMyAdmin nos permite gestionar las bases de datos y las tablas de las

mismas. Vamos a ver como se entra.

1. Haga clic con el botón derecho del ratón sobre el icono de EasyPHP en la barra

de tareas.

2. En el menú objeto, haga clic en el submenú Configuración.

3. Haga clic en la opción PhpMyAdmin.

58/191 ACADEMIA USERO

Page 59: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

4. Se abre la ventana de Internet Explorer con la dirección 127.0.0.1/mysql/. Este es

el gestor phpMyAdmin.

5. Vamos a crear una base de datos. Escriba en el cuadro Crear nueva base de

datos la palabra control.

6. Haga clic en el botón Crear para crear la nueva base de datos.

7. En la zona inferior de la siguiente ventana se muestra el resultado exitoso de la

creación de la base de datos.

59/191 ACADEMIA USERO

Page 60: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

8. En la zona inferior de la ventana se nos permite crear una nueva tabla dentro de

la base de datos. En el cuadro Nombre escriba la palabra usuarios y en Campos

escriba 2. Para terminar, haga clic en el botón Continúe.

9. Se muestra una ventana donde puede especificar los campos de la base de

datos:

10. Introduzca los siguientes valores para los dos campos de la tabla: el nombre del

primer campo será IDUSUARIO de tipo VARCHAR con un tamaño máximo de 15

y será la clave de la tabla, es decir, el valor que no se puede repetir. El otro

campo tiene como nombre contrasena y puede almacenar como máximo 8

caracteres.

11. Una vez terminado, haga clic en el botón Grabar.

60/191 ACADEMIA USERO

Page 61: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

12. Observe como se han añadido los dos campos a la tabla.

15.3. Introducir datos

Ahora puede insertar algunos datos en la tabla.

1. Haga clic en el enlace Insertar en la zona superior de la ventana.

2. Ahora va a insertar algunos datos. Haga clic en el cuadro Valor del campo

idusuario y escriba u1. También haga clic en el cuadro Valor del campo

contrasena y escriba cu1.

61/191 ACADEMIA USERO

Page 62: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

3. Luego haga clic en la opción Insertar nuevo registro y haga clic en el botón

Continúe.

4. Siga insertando dos registros más para dos nuevos usuarios con los datos: u2 y

cu2, u3 y cu3.

5. Vamos a ver los datos que hemos introducido. Haga clic en el botón Examinar.

6. Observe como puede ver los datos que ha introducido.

15.4. Crear el formulario

Cree el siguiente formulario de entrada: el usuario introducirá los datos en el formulario

y si sus datos son correctos, saltaremos a otra página.

62/191 ACADEMIA USERO

Page 63: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

15.5. Validar los datos

Para validar los datos, vamos a conectarnos a la base de datos, abrir la tabla y

vamos a buscar los datos que hemos escrito en la tabla. Si aparecen, dejamos que

entre el usuario, si no, pues no lo dejamos.

<?

//empezar la sesión

session_start();

// estos son los datos de entrada en la base de datos MYSQL

// por defecto el nombre de usuario es ROOT y la contraseña PASSWORD

$db_usuario = 'root';

$db_contrasena = '';

//leer los datos en variables

$usuario=$_POST['usuario'];

$contrasena=$_POST['contrasena'];

//print($usuario);

//print($contrasena);

//nos conectamos a la base de datos

63/191 ACADEMIA USERO

Page 64: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

$conexion = mysql_connect('localhost', $db_usuario, $db_contrasena) or

die(mysql_error());

//seleccionamos la base de datosº

mysql_select_db('control', $conexion) or die(mysql_error());

//se crea la cadena de consulta SQL

$consulta = "SELECT * FROM usuarios WHERE idusuario='$usuario' AND

contrasena='$contrasena'";

print($consulta);

print("<br>");

//se ejecuta la consulta

$resultado = mysql_query($consulta, $conexion) or die('Error haciendo

consulta');

$filasdevueltas=mysql_num_rows($resultado);

//si hay una fila, es que está dado de alta, si no, es que no es un usuario

if($filasdevueltas == 1) {

print 'Validado';

}

else {

print 'No validado';

}

?>

Sesión 16. Insertar y eliminar

64/191 ACADEMIA USERO

Page 65: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

16.1. Insertar un registro

Si tenemos una tabla, tenemos que permitir al usuario introducir datos. Cree el

siguiente formulario:

Él código PHP que introduce los datos del formulario en la tabla es el siguiente:

<?

//empezar la sesión

session_start();

// estos son los datos de entrada en la base de datos MYSQL

// por defecto el nombre de usuario es ROOT y la contraseña PASSWORD

$db_usuario = 'root';

$db_contrasena = '';

//leer los datos en variables

$usuario=$_POST['usuario'];

$contrasena=$_POST['contrasena'];

//nos conectamos a la base de datos

$conexion = mysql_connect('localhost', $db_usuario, $db_contrasena) or

die(mysql_error());

//seleccionamos la base de datosº

mysql_select_db('control', $conexion) or die(mysql_error());

//se crea la cadena de consulta SQL

65/191 ACADEMIA USERO

Page 66: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

$insercion = "INSERT INTO usuarios SET

idusuario='$usuario',contrasena='$contrasena'";

print($insercion);

print("<br>");

//se ejecuta la consulta

$resultado = mysql_query($insercion, $conexion) or die('Error insertando registro');

?>

El código es similar al que nos permite entrar en nuestra página. La diferencia

está en la consulta SQL. La consulta INSERT permite introducir datos en una tabla.

Hay que decir en que tabla queremos introducir los datos, y luego especificar el valor

de cada uno de los campos de la tabla.

16.2. Eliminar un registro

También puede eliminar un registro fácilmente.

El código PHP que nos permite eliminar un registro el el siguiente.

<?

//empezar la sesión

session_start();

// estos son los datos de entrada en la base de datos MYSQL

// por defecto el nombre de usuario es ROOT y la contraseña PASSWORD

66/191 ACADEMIA USERO

Page 67: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

$db_usuario = 'root';

$db_contrasena = '';

//leer los datos en variables

$usuario=$_POST['usuario'];

$contrasena=$_POST['contrasena'];

//nos conectamos a la base de datos

$conexion = mysql_connect('localhost', $db_usuario, $db_contrasena) or die(mysql_error());

//seleccionamos la base de datosº

mysql_select_db('control', $conexion) or die(mysql_error());

//se crea la cadena de consulta SQL

$eliminacion="DELETE FROM usuarios WHERE idusuario='$usuario' AND

contrasena='$contrasena'";

print($eliminacion);

print("<br>");

//se ejecuta la consulta

$resultado = mysql_query($eliminacion, $conexion) or die('Error insertando registro');

?>

Sesión 17. Buscar

17.1. Buscar datos: crear la base de datos

Vamos a crear un formulario que busque los datos de una agenda de personas

en una base de datos. Cree una base de datos llamada agenda. Dentro de la misma

cree una tabla con el nombre persona. Añada a él los campos nombre y teléfono.

Inserte en la tabla los siguientes datos.

67/191 ACADEMIA USERO

Page 68: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

17.2. Crear el formulario

Ahora cree un formulario para buscar los datos. Vamos a crear un formulario donde

podamos introducir los datos y se nos busque automáticamente el teléfono de la

persona buscada.

17.3. El código de búsqueda

Este es el código que realiza la búsqueda:

<?

// estos son los datos de entrada en la base de datos MYSQL

// por defecto el nombre de usuario es ROOT y la contraseña

PASSWORD

$db_usuario = 'root';

$db_contrasena = '';

//leer los datos en variables

$nombre=$_POST['nombre'];

68/191 ACADEMIA USERO

Page 69: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//nos conectamos a la base de datos

$conexion = mysql_connect('localhost', $db_usuario,

$db_contrasena) or die(mysql_error());

//seleccionamos la base de datosº

mysql_select_db('agenda', $conexion) or die(mysql_error());

//se crea la cadena de consulta SQL

$busqueda="SELECT * FROM persona WHERE nombre='$nombre'";

print($busqueda);

print("<br>");

//se ejecuta la consulta

$resultado = mysql_query($busqueda, $conexion) or die('Error

buscando');

//contamos las filas devueltas

$filasdevueltas=mysql_num_rows($resultado);

//si no hay filas devueltas es que no se ha encontrado

if ($filasdevueltas==0) {

print ("No se ha encontrado a la persona en la base de

datos");

} else {

//si hay filas devueltas es que la hemos encontrado

//así que metemos el resultado de la consulta en un array

$fila=mysql_fetch_array($resultado);

69/191 ACADEMIA USERO

Page 70: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//e imprimirmos el campo teléfono del array

print($fila["telefono"]);

}

?>

17.4. Nuevos códigos

Mysql_fetch_array extrae los resultados de la sentencia SQL como una matriz

asociativa. En una matriz asociativa cada fila tiene un nombre, en este caso los

nombres son los nombre de los campos.

nombre juan

telefono 952555555

Una vez obtenidos los datos del array podemos acceder a estos datos como en un

array. El código $fila[“telefono”] permite imprimir el teléfono.

Sesión 18. Headers

18.1. ¿Qué son los headers?

Son cabeceras de las páginas que permiten especificar ciertos datos sobre las

mismas. Observe como, al crear una nueva página web con Dreamweaver, se añaden

algunos headers a la página.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Estos headers definen propiedades de la página.

18.2. Headers en PHP

La sintaxis de un header en PHP es la siguiente:

70/191 ACADEMIA USERO

Page 71: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Header (nombrecabecer;valorcabecera);

18.3.Ejemplo: enviar a otra página

Cuando creamos el programa que comprobaba si un usuario podía entrar en un sitio,

podrías haber hecho que se abriera una página de error si introducía mal los datos. El

siguient código envía al usuario a otra página:

<?

header("Location: http://localhost/bonita.html");

?>

Este código nos conduce automáticamente a la URL que indiquemos

18.4. Ejemplo: tipo de documento

Podemos establecer el tipo de documento que será enviado al navegador. Este valor

hace referencia a una página HTML de la forma:

header(“Content-Type:text/html”);

Así podemos indicar al navegador el tipo de página que le vamos a enviar.

18.5. Ejemplo: obligar a guardar un documento

Podemos hacer que el usuario, al descargar un archivo, tenga un cuadro de diálogo

donde se le pregunte que nombre quiere dar al archivo que quiere guardar.

En el siguiente caso, enviamos un archivo PDF con la orden readfile y obligamos a

que se muestre el cuadro de diálogo con el header Content-Disposition.

Primero hemos creado un archivo con dos enlaces, el primero un enlace a la página

despdf.php que contiene las cabeceras indicadas anteriormente y otro enlace normal

al archivo archivo.pdf. Si hacemos clic en el segundo enlace, se nos abre el archivo

PDF dentro del navegador si tenemos instalada la aplicación Acrobat Reader.

El archivo despdf.php tiene el siguiente aspecto:

71/191 ACADEMIA USERO

Page 72: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<?php

// enviaremos un tipo de archivo PDF

header('Content-type: application/pdf');

// Se va a llamar archivo.pdf

header('Content-Disposition: attachment;

filename="descarga.pdf"');

// La fuente del PDF se encuentra en original.pdf

readfile('archivo.pdf');

?>

Cuando hacemos clic en el primer enlace, se nos muestra la siguiente ventana:

72/191 ACADEMIA USERO

Page 73: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

18.6. Evitar que una página sea cacheada

Puede evitar que una página sea cacheada usando el siguiente código:

<?

// From PHPLib library (http://phplib.netuse.de/. Released under

LGPL)

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

header("Cache-Control: no-cache");

header("Pragma: no-cache");

?>

18.7. Esperar

La siguiente página espera 3 segundos para cargar otra página y muestra un mensaje

de espera:

<?php

header( 'refresh: 3; url=http://www.nba.com' );

echo '<h1>Espera 3 segundos</h1>';

?>

Headers Already Sent” ErrorYou may encounter an error message that looks like this:

Warning: Cannot modify header information - headers already sent by (output started

at C:\Program Files\Apache Group\Apache2\test\headererror.php:1) in C:\Program

73/191 ACADEMIA USERO

Page 74: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Files\Apache Group\Apache2\test\headererror.php on line 2

This is a common error when working with sessions and cookies. It can occur if you try to set them after

you have sent HTML code to the server. The server has to deal with these before any HTML output is

sent to the server, which means that these lines must be the first in the code before any HTML code or

echo statement. If you have even a trailing leading space before your first <?php line of code, you will

see this error.

590

Chapter 17

If you need to set cookie or session variables within the body of your code, you need to rethink your

logic to accommodate this limitation. As we discuss in Chapter 2, those variables need to be addressed at

the beginning of your code for them to be parsed correctly by the PHP server.

There are ways to get around this error, using the output buffer to suppress these errors. The output

buffer is used to store all HTML output in a buffer until you are ready to send it to the browser. The

command ob_start is used to begin the output buffering process, and ob_end_flush will send all of

the stored HTML output to the browser, empty the buffer, and end the output storing process. This will

let you cheat the system and store session and cookie variables in the body of the code, as well as allow

you to use the header(“location:”) function in the body of the code. While this is not recommended

for beginners, as it is more important for you to learn to code well, and according to the “rules,” this can

be a useful set of functions for a more experienced programmer. If you would like to learn more about

the output buffer functions, you can find a complete list of them in Appendix C, or visit www.php.net.

Sesión 19. Cookies

74/191 ACADEMIA USERO

Page 75: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

19.1. ¿Qué son las cookies?

Según Wikipedia, una cookie es:

Una cookie es un fragmento de información que se almacena en el disco duro del

visitante de una página web a través de su navegador, a petición del servidor de la

página. Esta información puede ser luego recuperada por el servidor en posteriores

visitas.

Las principales utilidades de una cookie son:

Controlar los usuarios que entran en una página

Dar opciones de diseño a los usuarios

19.2. Introducir el nombre

Por ejemplo, podemos hacer una cookie que recuerde nuestro nombre. Cree el

siguiente formulario.

19.3. Guardar el dato introducido

La siguiente página guarda el nombre introducido en una cookie. Observe como

hemos usado el método GET en el formulario.

<?php

setcookie("usuario",$_GET['nombre']);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

75/191 ACADEMIA USERO

Page 76: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"

/>

<title>Documento sin t&iacute;tulo</title>

</head>

<body>

Hola, tu nombre es

<?

print $_GET['nombre'];

?>

</body>

</html>

19.4. Recuperar el valor

La siguiente página recuperar el valor de la cookie y la muestra en el navegador:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"

/>

<title>Documento sin t&iacute;tulo</title>

</head>

76/191 ACADEMIA USERO

Page 77: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<body>

Tiene una cookie llamada NOMBRE y su valor es

<?

print ($_COOKIE["usuario"]);

?>

</body>

</html>

19.5. Color de fondo

Las siguientes páginas permiten cambiar el color de fondo de las páginas según una

cookie establecida:

Formulario para seleccionar el color

Script que graba la cookie con el color

<?php

setcookie("fondo",$_GET['fondo']);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

77/191 ACADEMIA USERO

Page 78: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Documento sin t&iacute;tulo</title>

</head>

<body>

Has elegido el color

<?

print $_GET['fondo'];

?>

</body>

</html>

Script que usa el color para el fondo de la página

<BODY BGCOLOR=

<?

print ($_COOKIE["fondo"]);

?>

>

Está bien

</body>

</html>

Sesión 20. Require e include

20.1. Require

78/191 ACADEMIA USERO

Page 79: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Require() se sustituye a sí misma con un archivo que se especifique.

Cuando un archivo se requiere con require(), el intérprete sale del modo PHP y

entra en modo HTML al principio del archivo requerido, después vuelve al modo PHP

al final.

Así, los códigos dentro del archivo requerido que deban ser ejecutados como

PHP deben ser encerrados dentro de etiquetas de comienzo y fin de PHP.

Una sentencia condicional no afecta a require(): un require() siempre lee el

archivo referenciado, incluso si la línea en que se encuentra no se ejecuta nunca. Si se

quiere incluir condicionalmente un archivo, se usa include().

Lo mismo ocurre con los bucles: aunque el código contenido en el archivo

referenciado esté en un bucle, el require() sólo se ejecuta una vez. No se puede poner

un require() en una estructura de bucle y esperar que incluya un archivo distinto en

cada iteración. Puede usar include() para ello.

20.2 Crear el sitio

1. Como quiera que ya podemos empezar a hacer cositas, vamos a crear un nuevo

sitio en Dreamweaver que use tecnología PHP. Cree un nuevo sitio en

Dreamweaver.

2. Escriba un nombre para el sitio.

3. Seleccione como tecnología de servidor PHP MySQL.

79/191 ACADEMIA USERO

Page 80: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

4. Cree una carpeta dentro de la carpeta del servidor de PHP y selecciónela para

almacenar los archivos del sitio.

5. La URL del navegador de prueba será algo similar a la siguiente:

http://localhost/nombredetucarpeta

6. No usaremos un servidor remoto.

80/191 ACADEMIA USERO

Page 81: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

7. Para terminar, haga clic en el botón Finalizar.

20.3. Crear la cabecera y el pie

Usando las imágenes cabecera.jpg y pie.jpg cree las siguientes páginas.

20.4 Crear la página central

81/191 ACADEMIA USERO

Page 82: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Use Dreamweaver para crear el contenido de la página que irá en el centro y guárdela

con el nombre cuerpo.html.

Es en esta página donde introducirá el código PHP para insertar cabecera y pie.

<body>

<table width="600" border="1" cellspacing="0" cellpadding="0">

<tr>

<?

require("cabecera.html");

?>

</tr>

<tr>

<td><p>Este es el contenido de la p&aacute;gina. Aqu&iacute;

puedo dise&ntilde;ar con total libertad.</p>

<p>a</p>

<p>c</p>

<p>d</p>

<p>&nbsp; </p></td>

</tr>

<tr>

<?

require("pie.html");

?>

</tr>

82/191 ACADEMIA USERO

Page 83: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

</table>

20.5. Include

Puede usar include() con un array y un bucle para incluir varios archivos en una página

web.

Observe el siguiente ejemplo:

$ficheros = array(‘a1.htm’,’a2.htm’,’a3.htm’);

for ($i=0; $i<count($ficheros),$i++) {

include $ficheros[$i];

}

Esta orden crea una página con el contenido de los archivos primero.inc, segundo.inc

y tercero.inc.

La diferencia entre include y require es que include se vuelva a calcular cada vez que

se encuentra.

El código es muy similar al anterior:

<body>

<table width="600" border="1" cellspacing="0" cellpadding="0">

<tr>

<?

include("cabecera.html");

?>

</tr>

<tr>

83/191 ACADEMIA USERO

Page 84: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<td><p>Este es el contenido de la p&aacute;gina. Aqu&iacute;

puedo dise&ntilde;ar con total libertad.</p>

<p>a</p>

<p>c</p>

<p>d</p>

<p>&nbsp; </p></td>

</tr>

<tr>

<?

include("pie.html");

?>

</tr>

</table>

Sesión 21. Sesiones

21.1. Sesiones

Las sesiones nos permiten mantener información entre las páginas cuando un

usuario está navegando. Esto nos permite, por ejemplo, guardar las compras que hace

en una tienda virtual para cobrarle al final.

Las sesiones permiten guardar algunos datos mientras el usuario está activo, de

modo que podamos identificarlo conforme va navegando por nuestra página.

Los datos de una sesión se guardan todos en la misma sección del servidor,

junto con todos los datos de la misma.

21.2. Un primer ejemplo

84/191 ACADEMIA USERO

Page 85: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

El siguiente código permite crear un contador que vaya indicando cuantas páginas

hemos visitado en un sitio:

<?

session_register('contador');

//$contador=0;

print("Contador vale:". ++$_SESSION['contador']);

?>

Lo primero que se hace es abrir la sesión. Esto se puede conseguir de dos maneras,

con session_start(), que comienza una sesión o con sessión_register(), que comienza

una sesión y crea una variable de sesión nueva.

es2.php.net

session_start() crea una sesión (o la continúa basandose en el session id

pasado por GET o mediante una cookie).

Si desea usar una sesión con un nombre en concreto, debe llamar a

session_name() antes de llamar a session_start()

session_register() acepta un número variable de argumentos, cualquiera de los

cuales puede ser o una cadena que contiene el nombre de una variable, o una matriz

que consista de nombres de variables u otras matrices. Para cada nombre,

session_register() registra la variable global con ese nombre en la sesión actual.

21.3. La ID de sesión

La SID o identificador de sesión nos permite acceder a un identificador único que tiene

cada sesión dentro del servidor.

A continuación puede ver un pequeño programa que crea una sesión, nos imprime el

número y luego la destruye.

session_destroy() destruye todos los datos asociados con la sesión actual. No

destruye ninguna de las variables globales asociadas a la sesión ni la cookie.

85/191 ACADEMIA USERO

Page 86: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<?

session_start();

echo SID;

session_destroy();

?>

21.4. Guardar campos de formularios

A continuación tiene los códigos de tres páginas llamadas 01nombre.php,

02apellidos.php, 03resultado.php.

01nombre.php

<?

session_start();

echo SID;

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-

1" />

<title>Documento sin t&iacute;tulo</title>

</head>

<body>

86/191 ACADEMIA USERO

Page 87: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<p>Escribe tu nombre</p>

<form id="form1" name="form1" method="post"

action="02apellidos.php">

Nombre

<label>

<input name="cnombre" type="text" id="cnombre" />

</label>

<p>

<label>

<input type="submit" name="Submit" value="Enviar" />

</label>

</p>

</form>

<p>&nbsp;</p>

</body>

</html>

02apellidos.php

<?

session_register('nombrecillo');

$nombrecillo=$_POST['cnombre'];

$_SESSION["nombrecillo"] = $nombrecillo;

print($nombrecillo);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

87/191 ACADEMIA USERO

Page 88: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-

1" />

<title>Documento sin t&iacute;tulo</title>

</head>

<body>

<p>Muy bien

<?

print($nombrecillo);

?>

hemos guardado tu nombre. Ahora mete tu apellido.</p>

<form id="form1" name="form1" method="post"

action="03resultado.php">

<p>Apellidos

<label>

<input name="capellidos" type="text" id="capellidos" />

</label>

</p>

<p>

<label>

<input type="submit" name="Submit" value="Enviar" />

</label></p>

</form>

</body>

88/191 ACADEMIA USERO

Page 89: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

</html>

03resultado.php

<?

session_register('apellidos');

$nombrecillo=$_SESSION['nombrecillo'];

$apellidos=$_POST['capellidos'];

print($apellidos);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-

1" />

<title>Documento sin t&iacute;tulo</title>

</head>

<body>

Muy bien. Tu nombre es

<?

echo "$nombrecillo";

?>

y tu apellido es

<?

print($apellidos);

89/191 ACADEMIA USERO

Page 90: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

?>

</body>

</html>

La primera página comienza la sesión de PHP con SESSION_START.

Luego se crea un formulario donde el usuario introducirá su nombre. Este formulario

llama al archivo 02apellidos.php. Aquí lo primero que se hace es procesar el nombre e

introducirlo en una variable de sesión llamada nombrecillo.

session_register('nombrecillo');

$nombrecillo=$_POST['cnombre'];

$_SESSION["nombrecillo"] = $nombrecillo;

Una vez guardada esta variable, ponemos otro formulario para introducir los apellidos.

La respuesta a este formulario introduce los datos en otra variable de sesión llamada

apellidos.

Además, necesitamos la orden $_SESSION['nombrecillo']; para recuperar el valor

de la variable de sesión nombrecillo y poder introducirla en la página.

session_register('apellidos');

$nombrecillo=$_SESSION['nombrecillo'];

$apellidos=$_POST['capellidos'];

print($apellidos);

Sesión 22. GD

22.1. GD

90/191 ACADEMIA USERO

Page 91: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

GD es una librería que permite generar imágenes a partir de PHP.

Para instalar soporte GD en EasyPHP siga los siguientes pasos:

1. Haga clic en el icono de EasyPHP en la barra de tareas junto al reloj.

2. Haga clic en Configuración.

3. Haga clic en Extensiones PHP.

4. En la ventana de configuración de extensiones de PHP, active la opción

php_gd2.

5. Haga clic en el botón Aplicar.

6. Ahora gd2 está instalado. Para comprobarlo escriba la siguiente página web y

créela en su navegador.

<?phpinfo()?>

91/191 ACADEMIA USERO

Page 92: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

7. Esta página muestra toda la información de la instalación de PHP. Una de sus

secciones será GD que tendrá el siguiente aspecto.

Las sesiones nos permiten mantener informEstaación entre las páginas cuando un

usuario está navegando. Esto nos permite, por ejemplo, guardar las compras que hace

en una tienda virtual para cobrarle al final.

Las sesiones permiten guardar algunos datos mientras el usuario está activo, de

modo que podamos identificarlo conforme va navegando por nuestra página.

Los datos de una sesión se guardan todos en la misma sección del servidor,

junto con todos los datos de la misma.

22.2. Un primer ejemplo

<?php

header("Content-Type: image/jpeg");

$imagen=imagecreate(200,200);

$maroon = ImageColorAllocate($imagen,123,9,60);

$white = ImageColorAllocate($imagen,255,255,255);

$black = ImageColorAllocate($imagen,0,0,0);

92/191 ACADEMIA USERO

Page 93: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

ImageFilledRectangle($imagen,0,0,99,99,$maroon);

ImageFilledRectangle($imagen,100,100,199,199,$white);

imagejpeg($imagen);

imagedestroy($imagen);

?>

22.3. Texto en una imagen

El siguiente código crea texto en la imagen:

<?php

$im = imagecreate (250, 28);

$black = ImageColorAllocate ($im, 0, 0, 0);

$yellow = ImageColorAllocate ($im, 235, 235, 51);

ImageTTFText ($im, 20, 0, 10, 20, $yellow,

"/WINDOWS/Fonts/IMPACT.ttf",

"Muy bien");

ImagePNG($im);

?>

22.4. Imagen dentro de página

Si queremos que nuestra página genere una imagen no tenemos más que

llamar al archivo PHP dentro del TAG:

93/191 ACADEMIA USERO

Page 94: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<body>

<img src="textogd.php">

</body>

</html>

22.5. Pasar parámetros

Podemos pasar parámetros a un archivo PHP que cree una imagen, para por

ejemplo, cambiar el color de fondo de la misma.

Esta es la llamada:

Y esta es la respuesta:

<?

$imColor = hex2int(validHexColor($_REQUEST['color']));

$im = imageCreate(50,50);

$background = imageColorAllocate($im, $imColor['r'], $imColor['g'],

$imColor['b']);

header('Content-type: image/png');

imagePNG($im);

imageDestroy($im);

function hex2int($hex) {

return array( 'r' => hexdec(substr($hex, 0, 2)), // 1st pair of digits

'g' => hexdec(substr($hex, 2, 2)), // 2nd pair

94/191 ACADEMIA USERO

Page 95: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

'b' => hexdec(substr($hex, 4, 2)) // 3rd pair

);

}

/**

* @param $input string 6-digit hexadecimal string to be validated

* @param $default string default color to be returned if $input isn't valid

* @return string the validated 6-digit hexadecimal color

* @desc returns $input if it is a valid hexadecimal color,

* otherwise returns $default (which defaults to black)

*/

function validHexColor($input = '000000', $default = '000000') {

// A valid Hexadecimal color is exactly 6 characters long

// and eigher a digit or letter from a to f

return (eregi('^[0-9a-f]{6}$', $input)) ? $input : $default ;

}

?>

Sesión 23. Clases

22.1. ¿Qué es una clase?

Una clase es un contenedor que nos permite acceder a un objeto como un todo,

con todas las funciones y las datos que puede necesitar en un único lugar. Piense en

un coche: un coche tiene un montón de piezas y mecanismos. ¿Es necesario conocer

todos esos aparatos para saber manejar el coche? No. Se nos dejan unos controles o

métodos para poder mover el coche: volante, frenos y acelerador.

95/191 ACADEMIA USERO

Page 96: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Una clase es algo similar: definimos un objeto mediante una serie de

propiedades y métodos y el usuario de la clase solo tiene que conocer esas

propiedades o métodos para usar la clase.

22.3. Un ejemplo de clase: la clase Página

Vamos a crear una clase llamada Página que nos permita mostrar una página web a

partir de algunas de sus propiedades.

1. El archivo principal se llamará clase.php y contendrá la definición de la clase.

Para empezar cree un nuevo sitio en Dreamweaver, y configúrelo como en

sesiones anteriores, de modo que podamos acceder al servidor directamente al

hacer vists previas de las páginas.

2. Cree un nuevo archivo PHP y guárdelo con el nombre clasepagina.php. Vamos a

ir viendo el código.

<?php

class Pagina

{

//atributos de la clase

//para simplificar el ejemplo, cada página solo tendrá estas

propiedades, el título y el contenido

var $contenido;

var $titulo='Construcciones Vicente';

//operaciones de la clase

//para cambiar el contenido y el título de la página, vamos a

crear unos métodos

function EstablecerContenido($nuevocontenido) {

96/191 ACADEMIA USERO

Page 97: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//this es el objeto actual sobre el que estamos

trabajando

//en este caso, la página

//lo que estamos diciendo es que la propiedad contenido

de la página actual

//sea la variable que le hemos pasado como parámetro

al método

$this->contenido=$nuevocontenido;

}

function EstablecerTitulo($nuevotitulo) {

$this->titulo = $nuevotitulo;

//igual que antes pero para el título

}

function MostrarTitulo()

{

//se imprime el título

echo '<title>$this->titulo</title>';

}

function MostrarCabecera()

{

//pedazo de truco

//cierro el código php

97/191 ACADEMIA USERO

Page 98: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//pongo la página en código HTML

//y así el programa la lee sin tener que poner echos ni prints

?>

<table width="600" border="0" align="center"

cellpadding="0" cellspacing="0">

<tr>

<td><img src="cabecera.jpg" width="600" height="100" /></td>

</tr>

</table>

<?php

//y luego vuelvo al código php

}

function MostrarPie()

{

//uso otra vez el truco de antes

?>

<table width="600" border="0" align="center"

cellspacing="0" cellpadding="0">

<tr>

<td bgcolor="#CCFFCC">Copyright Jose Luis Usero Vilchez

2006</td>

</tr>

</table>

<?php

98/191 ACADEMIA USERO

Page 99: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

}

function Mostrar()

{

//y aquí voy imprimiendo el código html de la página

//imprimir html y head

echo "<html>\n<head>\n";

//imprimir el título de la página usando el método de la clase

$this->MostrarTitulo();

//cierro las etiquetas head y body

echo "</head>\n<body>\n";

//llamo al método MostrarCabecera de la clase

$this->MostrarCabecera();

//accedo a la variable contenido para imprimir sus datos

echo $this->contenido;

$this->MostrarPie();

//cierro las etiquetas body y html

echo "</body>\n</html>\n";

}

}

?>

99/191 ACADEMIA USERO

Page 100: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

3. Y ahora creamos una página con el nombre mostrarpagina.php, por ejemplo, que

usa esa clase para imprimir una página web.

<?

//si no meto el código de la clase, no puedo funcionar

require('clasepagina.php');

//se crea un objeto de la clase página

$pagprincipal = new Pagina();

//establezco el contenido de la página

$pagprincipal->EstablecerContenido('<p><center>Bienvenido a

la página de Construcciones Vicente</center></p>');

//y uso el método mostrar de la clase Página para imprimir la

página en el navegador

$pagprincipal->Mostrar();

?>

Sesión 24. Crear un CMS (I)

24.1. ¿Qué es un CMS?

Un CMS es un sistema de gestión de contenidos que nos permite publicar

distintas noticias a partir de una base de datos.

La idea principal de un CMS es tener una serie de redactores que puedan entrar

y escribir sus noticias. Una vez escrita la noticia, esta va a una base de datos donde

100/191 ACADEMIA USERO

Page 101: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

se guarda. Cuando un usuario quiere ver la web, la página accede a la base de datos,

saca las noticias de la misma y las muestra.

El aspecto del CMS depende de una serie de archivos que guardamos como una

plantilla. Así, el aspecto de la página depende de esos archivos.

24.2. Instalar WAMP

Vamos a instalar el servidor WAMP.

1. Entre en WAMPSERVER.COM y descargue el servidor.

2. Instale el servidor web.

3. Pruebe el servidor web entrando en la URL localhost.

24.3. Crear las tablas

101/191 ACADEMIA USERO

Page 102: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

1. Entre en phpMyAdmin haciendo clic en el icono de WAMP en la barra de tareas y

luego haciendo clic sobre phpMyAdmin.

2. Una vez en phpMyAdmin, cree una base de datos llamada content.

3. Cree una tabla llamada writers con 3 campos.

4. Establezca las propiedades de los campos según indica la siguiente imagen:

Observe como la clave de esta tabla es el campo username.

Esta tabla guardará los escritores, las personas que pueden editar las páginas y

publicar noticias.

102/191 ACADEMIA USERO

Page 103: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

5. Cree otra tabla llamada stories con los campos que indica la siguiente imagen:

Esta tabla almacenará las noticias.

6. Cree una tabla llamada pages con 2 campos según indica la siguiente imagen:

Esta tabla guardará los datos de las páginas.

103/191 ACADEMIA USERO

Page 104: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

7. Cree una tabla llamada writer_permissions con 2 campos según indica la

siguiente imagen:

8. Cree una última tabla llamada keywords con los siguientes 3 campos:

9. Inserte los siguientes datos en la tabla pages de la base de datos:

10. Inserte los siguientes datos en la tabla stories:

11. Inserte los siguientes datos en la tabla writers:

12. Inserte los siguientes datos en la tabla writers_permissions:

104/191 ACADEMIA USERO

Page 105: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

13. A continuación puede ver la estructura de la base de datos:

105/191 ACADEMIA USERO

Keywords

Story

Keyword

Pages

Code

Stories

Id

Writer

page

headline

Story_text

Writers

Username

Password

Writer_permissions

Writer

Page 106: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Sesión 25. Crear un CMS (II)

25.1. index.php

La página principal debe mostrar las últimas noticias añadidas de cada uno de

los temas.

25.2. Cabecera y pie

1. Lo primero que vamos a hacer es diseñar el aspecto de nuestra web. Cree un

nuevo archivo con Photoshop para la cabecera y el pie.

2. Una vez creados, haga clic en el botón Editar en ImageReady en la zona inferior

del panel de comandos de Photoshop.

106/191 ACADEMIA USERO

Page 107: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

3. Ahora en ImageReady, haga clic en la herramienta Sector.

4. Usando la herramienta Sector, cree tres sectores, uno para cada zona de la

página.

107/191 ACADEMIA USERO

Page 108: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

5. Haga clic en el sector Central, y en el panel Sector, seleccione Sin imagen.

6. Guarde el archivo.

7. Ahora vamos a exportar el archivo de modo que tengamos una página web.

Haga clic en el menú Archivo.

8. Haga clic en Guardar optimizada como…

9. Escriba un nombre para la página HTML.

10. Haga clic en el botón Guardar.

11. Se ha generado una página web en formato HTML. Ábrala desde Dreamweaver.

12. Observe como tiene una imagen en blanco en el centro. Bórrela.

108/191 ACADEMIA USERO

Page 109: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

13. Por último, ajuste el tamaño de las celdas.

14. Ahora puede usar esta página para su web.

15. Use la imagen de la cabecera y del pie para crear los archivos header.php y

footer.php que formarán parte de la página.

HEADER.PHP

FOOTER.PHP

25.3. Código

109/191 ACADEMIA USERO

Page 110: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Vamos a implementar un archivo que va a realizar las operaciones básicas sobre

las tablas de la base de datos, y que nos servirá para el resto de los scripts. Este

archivo se va a llamar db_fns.php. Veamos lo que hace:

<?php

//connexion a la base de datos

function db_connect()

{

//mysqli permite conectarse a la base de datos content con la

contraseña

$handle = new mysqli('localhost', 'content', 'password', 'content');

//si no se ha podido conectar devuelve false

if (!$handle)

{

return false;

}

//si se puede conectar entonces devuelve la conexión

return $handle;

}

function get_writer_record($username)

{

//se conecta a la base de datos

$handle = db_connect();

110/191 ACADEMIA USERO

Page 111: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//selecciono todos los escritores cuyo nombre coincide

//con el parámetro de la función

$query = "select * from writers where username = '$username'";

//se ejecuta la consulta y el resultado se mete en la variable result

$result = $handle->query($query);

//se devuelve el resultado de la consulta en un array asociativo

return($result->fetch_assoc());

}

function get_story_record($story)

{

//igual que el anterior par alas historias

$handle = db_connect();

$query = "select * from stories where id = '$story'";

$result = $handle->query($query);

return($result->fetch_assoc());

}

function query_select($name, $query, $default='')

{

//se conecta a la base de datos

$handle = db_connect();

//devuelve el resultado de la consulta en la variable result

$result = $handle->query($query);

111/191 ACADEMIA USERO

Page 112: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//si no hay resultado

if (!$result)

{

//se devuelve una cadena vacía

return('');

}

//se crea el código HTML para una lista donde se puedan seleccionar

//cada uno de los valores seleccionados en la lista

$select = "<select name='$name'>";

$select .= '<option value=""';

if($default == '') $select .= ' selected ';

$select .= '>-- Choose --</option>';

for ($i=0; $i < $result->num_rows; $i++)

{

$option = $result->fetch_array();

$select .= "<option value='{$option[0]}'";

if ($option[0] == $default)

{

$select .= ' selected';

}

$select .= ">[{$option[0]}] {$option[1]}</option>";

}

112/191 ACADEMIA USERO

Page 113: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

$select .= "</select>\n";

return($select);

}

?>

Sesión 26. Crear un CMS (III)

26.1. Nombre de usuario y contraseña

Antes de seguir, cambie el nombre de usuario y la contraseña en su archivo

db_fns.php por el nombre de usuario y contraseña de su base de datos.

function db_connect()

{

$handle = new mysqli('localhost', 'root', '', 'content');

if (!$handle)

{

return false;

}

return $handle;

}

113/191 ACADEMIA USERO

Page 114: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

26.2. Pages de cada storie

Vamos a asignar un page(o tema) a cada noticia.

1. Entre en phpMyAdmin.

2. Acceda a la base de datos Content y entre en la tabla stories.

3. Haga clic en el botón Examinar.

4. Desde aquí puede modificar los datos. Haga clic en el botón Modificar de cada

registro e introduzca la page correspondiente.

26.3. El archivo index.php

16. A continuación vamos a ver el archivo index.php que es la página principal del

sitio. Este es el aspecto de la página al ejecutarla.

114/191 ACADEMIA USERO

Page 115: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

17. Este es el archivo index. Vamos a ver como funciona.

<?php

//voy a usar el archive db_fns, que tiene los accesos a algunas

funciones importantes como la conexión a la base de datos y otras

include_once('db_fns.php');

//lo primero que va a aparecer en la página es la cabecera

include_once('header.php');

//uso la función db_connect que está en el archivo db_fns.php para

conectarme a la base de datos

$handle = db_connect();

//venga, defino una variable llamada pages_sql que contiene una

consulta sql que me saca todas las pages (o temas) de la base de

datos ordenadas por code (código)

$pages_sql = 'select * from pages order by code';

115/191 ACADEMIA USERO

Page 116: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//ejecuto la consulta y paso el resultado de la misma a la variable

$pages_result

$pages_result = $handle->query($pages_sql);

//aquí empiezo a imprimir cosas en la página

//defino una tabla

echo '<table border="0" width="400">';

//la orden asigna a la variable pages cada una de las filas de la lista

de pages que dio la consulta anterior, así que, mientras hayas mas

filas, sigo sacando pages, cuando ya no haya más filas, se sale del

bucle while

while ($pages = $pages_result->fetch_assoc())

{

//otra consulta para sacar todas las historias de un

determinado tema, selecciona las historias con la condición de que

pertenezcan a un tema determinado, que viene determinado por el

campo CODE de la variable pages, que contiene la lista de temas de

las páginas

//otra condición es que la condición Publisher (publicado) no sea

nula

//también se ordenan los datos por fecha de publicación en orden

descendente

$story_sql = "select * from stories

where page = '{$pages['code']}'

and published is not null

116/191 ACADEMIA USERO

Page 117: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

order by published desc";

//se crea una variable llamada story_result que guarda el resultado

de la consulta, es decir, la lista de stories de un page

$story_result = $handle->query($story_sql);

//si el número de filas de la page actual es distinto de 0

//entonces muestro la lista de stories de una page

if ($story_result->num_rows)

{

//la variable story guarda en un array asociativo la lista de stories

de una page

$story = $story_result->fetch_assoc();

//ahora empiezo a rellenar las filas de la tabla

echo "<tr>

<td>

//primero la descripción de la page

<h2>{$pages['description']}</h2>

//luego la cabecera de la storie

<p>{$story['headline']}</p>

//esto pone la clase CSS morelink

<p align='right' class='morelink'>

//y ahora el enlace para más noticias del enlace

<a href='page.php?page={$pages['code']}'>

117/191 ACADEMIA USERO

Page 118: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Leer más {$pages['code']} ...

</a>

</p>

</td>

<td width='100'>";

//si hay foto para esa storie

if ($story['picture'])

{

//uso la función resize_image.php para cambiarle el tamaño a

la imagen

echo '<img src="resize_image.php?image=';

//pongo la URL de la imagen en código URL con la función urlencode

echo urlencode($story[picture]);

//establezco el tamaño máximo en altura y anchura de la imagen

echo '&max_width=80&max_height=60" />';

}

echo '</td></tr>';

}

}

echo '</table>';

//termino la página poniendo el pie

include_once('footer.php');

?>

118/191 ACADEMIA USERO

Page 119: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

26.4. El archivo resize_image.php

Para que se vean las imágenes, es necesario activar la extensión GD que vimos en

anteriores sesiones.

1. Haga clic en el icono de WAMP SERVER.

2. Haga clic en PHP EXTENSIONS

3. Haga clic en php_gd2

4. Copie algunas imágenes a la carpeta del servidor. Vamos a usar estas fotos para

asignarlas a las stories.

5. Entre en la base de datos content y modifique el campo Picture de alguna de las

stories de la base de datos. Escriba el nombre de los archivos que ha copiado.

119/191 ACADEMIA USERO

Page 120: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

6. El resultado será similar al siguiente:

7. A continuación tiene el código del script que cambia el tamaño de la imagen:

120/191 ACADEMIA USERO

Page 121: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<?php

//saco los datos de la URL de llamada al servidor

//la dirección de la imagen

$image = $_REQUEST['image'];

//el ancho máximo

$max_width = $_REQUEST['max_width'];

//el alto máximo

$max_height = $_REQUEST['max_height'];

//si no se han especificado el ancho y alto máximo

//se especifican desde aquí

if (!$max_width)

$max_width = 80;

if (!$max_height)

$max_height = 60;

//cojo el tamaño de la imagen, que es un array de dos elementos

$size = GetImageSize($image);

//el ancho es el primer elemento del array

$width = $size[0];

//el alto es el Segundo elemento del array

$height = $size[1];

121/191 ACADEMIA USERO

Page 122: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//para cambiar el tamaño, necesito la relación entre los dos

tamaños

//así que las divido

$x_ratio = $max_width / $width;

$y_ratio = $max_height / $height;

//si el ancho es menor que el ancho máximo y el alto menor que el

alto máximo pa que lo voy a cambiar

if ( ($width <= $max_width) && ($height <= $max_height) ) {

$tn_width = $width;

$tn_height = $height;

}

//si no, pues sí que le cambio el tamaño

else if (($x_ratio * $height) < $max_height) {

$tn_height = ceil($x_ratio * $height);

$tn_width = $max_width;

}

else {

$tn_width = ceil($y_ratio * $width);

$tn_height = $max_height;

}

//creo la imagen a partir de la original

$src = ImageCreateFromJpeg($image);

122/191 ACADEMIA USERO

Page 123: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//creo otra imagen con el tamaño deseado

$dst = ImageCreate($tn_width,$tn_height);

//haga una copia de la imagen cambiándole el tamaño con esta

función ImageCopyResized

ImageCopyResized($dst, $src, 0, 0, 0, 0,

$tn_width,$tn_height,$width,$height);

//le digo a la página que le voyh a mandar una foto

header('Content-type: image/jpeg');

//convierta la imagen en jpg

ImageJpeg($dst, null, -1);

//destruyo lo que no me hace falta.

ImageDestroy($src);

ImageDestroy($dst);

?>

Sesión 27. Crear un CMS (IV)

27.1. El fichero PAGE.PHP

Este fichero nos permite leer las noticias o stories de un determinado tema o

PAGE. Veamos como se hace.

<?php

//primero se comprueba si existen las variables page y story en la llamada

if (!isset($_REQUEST['page'])&&!isset($_REQUEST['story']))

{

123/191 ACADEMIA USERO

Page 124: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//si no existen, se va directamente a la página principal index.php

header('Location: index.php');

//y se sale del programa

exit;

}

//si están establecidas page e story entonces introduzco estos valores en

sendas variables

$page = $_REQUEST['page'];

$story = intval($_REQUEST['story']);

//hago uso del archive db_fns.php que tiene algunos scripts importantes

para el manejo de la base de datos

include_once('db_fns.php');

//introduzco la cabecera del sitio

include_once('header.php');

//me conecto a la base de datos

$handle = db_connect();

//si está definida la variable story, es decir, si estoy buscando una historia

en concreto

if($story)

{

//hago una consulta sobre la base de datos para seleccionar la historia

siempre que haya sido publicada

124/191 ACADEMIA USERO

Page 125: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

$query = "select * from stories

where id = '$story' and

published is not null";

}

Else

//si no he especificado una historia en concreto, estoy buscando sobre un

tema, así que hago una consulta que saque todas las historias de un tema

{

$query = "select * from stories

where page = '$page' and

published is not null

order by published desc";

}

//ejecuto la consulta y paso el resultado a la variable $result

$result = $handle->query($query);

//mientras pueda sacar más historias del array asociativo que es resultado

de la consulta

while ($story = $result->fetch_assoc())

{

// imprimo el titular de la noticia

echo "<h2>{$story['headline']}</h2>";

//si hay imagen para la noticia la saco también

if ($story['picture'])

{

echo '<div style="float:right; margin:0px 1px 6px 6px;">';

125/191 ACADEMIA USERO

Page 126: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

echo '<img src="resize_image.php?image=';

echo urlencode($story[picture]);

echo '&max_width=200&max_height=120" align =

right/></div>';

}

// también saco los datos del escritor de la noticia

$w = get_writer_record($story['writer']);

echo '<br /><p class="byline">';

echo $w[full_name].', ';

//y también la fecha

echo date('d / m, H:i', $story['modified']);

echo '</p>';

// y, por supuesto, el texto principal de la misma

echo $story['story_text'];

}

//para terminar, imprimo el pie de la página

include_once('footer.php');

?>

27.2. Administración

Vamos a preocuparnos ahora por la administración del sitio. Debe haber páginas

donde la gente pueda publicar las noticias, dar de alta escritores. A eso vamos ahora.

1. Cree una carpeta admin dentro de su sitio web.

2. Cree un nuevo archivo llamado index.php dentro de esa carpeta con el siguiente

contenido.

<html>

126/191 ACADEMIA USERO

Page 127: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<head>

<title>Menú Administración</title>

</head>

<body>

<h1>Menú Administración</h1>

<ul>

<li>Escritores - <a href = 'writer.php'>Añadir/Editar

historias</a></li>

<li>Editores - <a href = 'publish.php'>Publicar/No Publicar

Historias</a></li>

</ul>

</body>

</html>

3. Este archivo solo contiene un par de enlaces a las páginas writer.php y

publish.php.

27.3. Writer.php

El archivo writer.php permite a los escritores gestionar las historias. Vamos a ver como

funciona.

1. Lo primero que tenemos que tener en cuenta es que cualquiera no puede entrar

en nuestro sitio así que lo primero que se hace al entrar en el fichero es llamar a

un fichero que compruebe nuestra identidad. Este es el fichero include_fns.php,

cuyo contenido es el siguiente.

127/191 ACADEMIA USERO

Page 128: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<?php

// All the include files for admin pages in the site

include_once('../db_fns.php');

include_once('user_auth_fns.php');

session_start();

?>

2. Muy bien. Incluye otros dos ficheros e inicia una sesión. El fichero ../db_fns.php

nos permite acceder a la base de datos.

3. Veamos el fichero user_auth_fns.php.

<?php

//define una función, que dados un nombre de usuario y una contraseña,

comprueba si están en la base de datos

function login($username, $password)

// check username and password with db

// if yes, return true

// else return false

{

// se conecta a la base de datos

$handle = db_connect();

//si no hay conexión, se sale

if (!$handle)

return 0;

//si hay conexión, se mete en la base de datos y selecciona todos los

escritores cuyo nombre de usuario y contraseña coincidan con los

parámetros de la función

$result = $handle->query("select * from writers

128/191 ACADEMIA USERO

Page 129: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

where username='$username' and

password = SHA1('$password')");

//si no hay ningún escritor que coincide, devuelve 0

if (!$result)

{

return 0;

}

//si hay alguno que coincida, devuelve un 1

if ($result->num_rows>0)

{

return 1;

}

else

{

return 0;

}

}

//función que comprueba si el usuario ya está metido y le avisa si no lo está

function check_auth_user()

// see if somebody is logged in and notify them if not

{

global $_SESSION;

//si la variable SESSION está establecida

129/191 ACADEMIA USERO

Page 130: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

if (isset($_SESSION['auth_user']))

{

//devuelve sí

return true;

}

else

{

//si no está establecida, el usuario no ha entrado y devuelve no

return false;

}

}

//esta función muestra un formulario para que el usuario introduzca sus

datos

function login_form()

{

?>

<form action='login.php' method='POST'>

<table border=0>

<tr>

<td>Nombre Usuario</td>

<td><input size='16' name='username'></td>

</tr>

<tr>

130/191 ACADEMIA USERO

Page 131: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<td>Contraseña</td>

<td><input size='16' type='password' name='password'></td>

</tr>

</table>

<input type='submit' value='Log in'>

</form>

<?php

}

//esta función comprueba si el usuario tiene permiso para modificar la

historia

function check_permission($username, $story)

// check user has permission to act on this story

{

// connect to db

$handle = db_connect();

if (!$handle)

return 0;

if(!$_SESSION['auth_user'])

return 0;

$result = $handle->query("select * from writer_permissions wp,

stories s

131/191 ACADEMIA USERO

Page 132: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

where wp.writer = '{$_SESSION['auth_user']}'

and

wp.page = s.page and

s.id = $story

");

if (!$result)

{

return 0;

}

if ($result->num_rows>0)

{

return 1;

}

else

{

return 0;

}

}

?>

Sesión 29. Crear un CMS (V)

29.1. El archivo DELETE_STORY.PHP

Este archivo borra una historia. Está enlazado en la página de historias.

132/191 ACADEMIA USERO

Page 133: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<?php

// delete_story.php

//voy a usar el archivo con el script que se conecta a la base de datos

include_once('include_fns.php');

//me conecto a la base de datos

$handle = db_connect();

//obtengo de la llamada URL el número de la historia que quiero borrar

$story = $_REQUEST['story'];

//uso el script check_permission para comprobar si el usuario activo en este

momento puede borrar esa historia

if(check_permission($_SESSION['auth_user'], $story))

{

//esta consulta borra la historia de la base de datos cuya id coincide con la

id que se ha pasado como parámetro en la llamada URL

$query = "delete from stories where id = $story";

//ejecuto la consulta

$result = $handle->query($query);

}

Vuelvo a la página donde estaba antes

header('Location: '.$_SERVER['HTTP_REFERER']);

?>

29.2. Palabras clave

133/191 ACADEMIA USERO

Page 134: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Las palabras clave nos permiten buscar noticias dentro de nuestro sitio. Cada

página tendrá unas palabras clave con un peso determinado, que determina la

importancia del sitio con respecto a esa palabra clave.

Vamos a ver la página que nos permite asignar palabras clave y pesos a una

noticia, el archivo keywords.php:

<?php

// keywords.php

//uso el archivo con el script para conectarme a la base de datos

include_once('include_fns.php');

//si no hay ningún usuario activo

if (!check_auth_user())

{

//se muestra el formulario de login

login_form();

}

//si hay un usuario activo, compruebo que tiene permiso para modificar

la //historia

else if(check_permission($_SESSION['auth_user'],

$_REQUEST['story']))

{

//me conecto a la base de datos

$handle = db_connect();

//meto en una variable los datos de la store que estoy modificando

134/191 ACADEMIA USERO

Page 135: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

$story_code = $_REQUEST['story'];

//cojo del array asociativo el código de la historia

$story = get_story_record($story_code);

//imprio en la pantalla el texto PALABRAS CLAVE de HEADLINE, que es el

título //de la historia

echo "<h2>Palabras clave para

<i>{$story['headline']}</i></h2>

//creo un formulario para añadir las palabras llamando al archivo

//keyword_add.php

<form action='keyword_add.php' method='POST'>

//campo oculto para el código de la clave

<input type=hidden name='story' value='$story_code'>

//campo para la palabra clave

<input size='20' name='keyword'>

//lista para el peso de la noticia

<select name='weight'>

<option>10</option>

<option>9</option>

<option>8</option>

<option>7</option>

<option>6</option>

<option>5</option>

<option>4</option>

<option>3</option>

<option>2</option>

135/191 ACADEMIA USERO

Page 136: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<option>1</option>

</select>

<input type='submit' value='Add'>

</form>";

//y ahora saco una lista de todas las palabras clave

//hago una consulta que saca todas las palabras clave de una noticia

$query = "select * from keywords where story = $story_code

order by weight desc, keyword";

//ejecuto la consulta

$result = $handle->query($query);

//

if ($result->num_rows)

{

echo '<table>';

echo '<tr><th>Keyword</th><th>Weight</th></tr>';

//voy sacando las palabras clave en un bucle

while ($keyword = $result->fetch_assoc())

{

echo "<tr><td>

//las imprimo con su peso

{$keyword['keyword']}

</td><td>

{$keyword['weight']}

</td><td>

136/191 ACADEMIA USERO

Page 137: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//y con un enlace para borrarlas.

[<a

href='keyword_delete.php?story=$story_code&keyword=";

echo urlencode($keyword['keyword']);

echo "'>del</a>]

</td></tr>";

}

echo '</table>';

}

}

?>

29.3. El archivo KEYWORD_ADD.PHP

Este archivo añade las palabras clave que introducimos.

<?php

include_once('include_fns.php');

$handle = db_connect();

$story = $_REQUEST['story'];

$keyword = $_REQUEST['keyword'];

$weight = $_REQUEST['weight'];

if(check_permission($_SESSION['auth_user'], $story))

137/191 ACADEMIA USERO

Page 138: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

{

//la consulta inserta la palabra clave en la tabla keywords con los valores

//especificados en el formulario

$query = "insert into keywords (story, keyword, weight)

values ($story, '$keyword', $weight)";

$handle->query($query);

}

//vuelve a la página anterior de historia

header("Location: keywords.php?story=$story");

?>

29.3. El archivo KEYWORD_DELETE.PHP

Este archivo borra una palabra clave de la historia.

<?php

include_once('include_fns.php');

$handle = db_connect();

$story = $_REQUEST['story'];

$keyword = $_REQUEST['keyword'];

if(check_permission($_SESSION['auth_user'], $story))

{

//la consulta borra de la tabla keywords con la condición de que store sea

la //historia que estamos editando y también coincida la palabra clave

138/191 ACADEMIA USERO

Page 139: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

$query = "delete from keywords where story = $story and

keyword = '$keyword'";

$handle->query($query);

}

header("Location: keywords.php?story=$story");

?>

Sesión 30. Crear un CMS (VI)

30.1. El formulario de búsqueda SEARCH_FORM.PHP

Este archivo es el necesario para que un usuario pueda buscar noticias. A

diferencia de los anteriores, debe ser accesible a todos los usuarios, así que no debe

estar en la carpeta ADMIN.

<?php include_once('header.php'); ?>

<h2>Búsqueda</h2>

<p>Escriba una palabra clave a buscar:</p>

<form action="search.php" method="POST">

<input name="keyword" size=20>

<input type="submit" value="Buscar">

</form>

<?php include_once('footer.php'); ?>

139/191 ACADEMIA USERO

Page 140: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

30.2. El archive SEARCH.PHP

Este archive es el que se ejecuta cuando buscamos una noticia, y muestra las noticias

según el peso que tengan asignadas.

<?php

include_once('db_fns.php');

include_once('header.php');

$handle = db_connect();

if ($_REQUEST['keyword'])

{

140/191 ACADEMIA USERO

Page 141: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//divido la variable keyword que viene en la llamada de la cabecera URL

//meto las palabras en un array

$keywords = split(' ', $_REQUEST['keyword']);

//cuento el número de palabras clave

$num_keywords = count($keywords);

//para cada palabra clave

for ($i=0; $i<$num_keywords; $i++)

{

//si ya hay alguna palabra clave, es decir, si i es distinto de 0

if ($i)

{

//se añade a la variable keywords_string una de las palabras del array

$keywords_string .= "or k.keyword = '".$keywords[$i]."' ";

}

Else

//si no hay ninguna palabra antes, esta es la primera

{

$keywords_string .= "k.keyword = '".$keywords[$i]."' ";

}

}

//esta consulta busca las historias según la historia y las palabras clave

//además, tiene en cuenta los pesos de las distintas palabras dentro de la

//historia

$query = "select s.id,

141/191 ACADEMIA USERO

Page 142: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

s.headline,

10 * sum(k.weight) / $num_keywords as score

from stories s, keywords k

where s.id = k.story

and ($keywords_string)

and published is not null

group by s.id, s.headline

order by score desc, s.id desc";

//ejecuta la consulta

$result = $handle->query($query);

}

echo '<h2>Search results</h2>';

//muestra la consulta en pantalla

if ($result && $result->num_rows)

{

echo '<table>';

while ($matches = $result->fetch_assoc())

{

echo "<tr><td><a href='page?story={$matches['id']}'>

{$matches['headline']}

</td><td>";

echo floor($matches['score']).'%';

echo '</td></tr>';

142/191 ACADEMIA USERO

Page 143: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

}

echo '</table>';

}

else

{

echo 'No matching stories found';

}

include_once('footer.php');

?>

30.3. El archivo PUBLISH.PHP

Este archivo nos permite publicar las noticias y editarlas.

<?php

include_once('include_fns.php');

//compruebe que el usuario pueda entrar en la base de datos

if (!check_auth_user())

{

login_form();

}

143/191 ACADEMIA USERO

Page 144: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

else

{

$handle = db_connect();

$writer = get_writer_record($_SESSION['auth_user']);

echo '<p>Bienvenido, '.$writer['full_name'];

echo ' (<a href="logout.php">Logout</a>) (<a

href="index.php">Menú</a>) (<a href="../">Sitio Público</a>)

</p>';

//hago una consulta para mostrar todas las historias de un determinado

autor

$query = "select * from stories s, writer_permissions wp

where wp.writer = '{$_SESSION['auth_user']}' and

s.page = wp.page

order by modified desc";

$result = $handle->query($query);

echo '<h1>Administrador de Edición</h1>';

//las muestro en una pantalla

echo '<table>';

echo '<tr><th>Titular</th><th>Última Modific.</th></tr>';

while ($story = $result->fetch_assoc())

{

echo '<tr><td>';

144/191 ACADEMIA USERO

Page 145: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

echo $story['headline'];

echo '</td><td>';

echo date('d / m, H:i', $story['modified']);

echo '</td><td>';

if ($story[published])

{

echo '[<a href="unpublish_story.php?story='.$story['id'].'">no

publicar</a>] ';

}

else

{

echo '[<a href="publish_story.php?story='.

$story['id'].'">publicar</a>] ';

echo '[<a href="delete_story.php?story='.

$story['id'].'">borrar</a>] ';

}

echo '[<a href="story.php?story='.$story['id'].'">editar</a>] ';

echo '</td></tr>';

}

echo '</table>';

}

?>

Sesión 31. Crear un CMS (VII) y fin

145/191 ACADEMIA USERO

Page 146: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

31.1. El archivo PUBLISH_STORY.PHP

Este archivo publica la historia que hayamos editado.

<?php

// publish_story.php -- action a release, go back to publish.php

include_once('include_fns.php');

$handle = db_connect();

$now = time();

//toma el código de la historia de la llamada php

$story = $_REQUEST['story'];

//si el usuario tiene permiso

if(check_permission($_SESSION['auth_user'], $story))

{

//ejecuta la consulta sql que actualiza la fecha a la que ha sido publicada

la //historia y permite que sea accesible a todo el mundo

$query = "update stories set published = $now

where id = $story";

$result = $handle->query($query);

}

146/191 ACADEMIA USERO

Page 147: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

header('Location: '.$_SERVER['HTTP_REFERER']);

?>

31.2. El fichero unpublish_story.php

Este fichero coloca la fecha de publicación a NULL, de modo que la historia deja de

estar como publicada. Es similar al anterior, lo único que cambia es que coloca la

fecha de publicación a NULL.

<?php

// unpublish_story.php -- action a release, go back to release.php

include_once('include_fns.php');

$story = $_REQUEST['story'];

if(check_permission($_SESSION['auth_user'], $story))

{

$handle = db_connect();

$query = "update stories set published = null

where id = $story";

$result = $handle->query($query);

}

147/191 ACADEMIA USERO

Page 148: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

header('Location: '.$_SERVER['HTTP_REFERER']);

?>

31.3. El fichero delete_story.php

Este fichero borra la historia seleccionada.

<?php

// delete_story.php

include_once('include_fns.php');

$handle = db_connect();

148/191 ACADEMIA USERO

Page 149: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

$story = $_REQUEST['story'];

if(check_permission($_SESSION['auth_user'], $story))

{

$query = "delete from stories where id = $story";

$result = $handle->query($query);

}

header('Location: '.$_SERVER['HTTP_REFERER']);

?>

Sesión 32. Gráficos

32.1. Gráfico

Vamos a hacer un script que tome los datos de una encuesta y los muestre en

un gráfico. Lo primero que tenemos que hacer es crear la base de datos y la tabla que

contendrá las distintas opciones de la encuesta.

1. Entre en phpMyAdmin.

2. Cree una base de datos nueva llamada encuesta.

3. Cree una nueva tabla dentro de la base de datos llamada resencuesta con los

siguientes campos:

149/191 ACADEMIA USERO

Page 150: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

y este es el resultado:

4. Añada los siguientes datos a la tabla:

32.2. El archivo VOTACION.HTML

Este archivo es el formulario.

<html>

<head>

<title>Encuesta en PHP</title>

</head>

<body>

<h1>Opina</h1>

<p>¿Cuál es tu escritor favorito?</p>

<form method=post action="show_poll.php">

<input type=radio name=vote value="Cervantes">Cervantes<br>

150/191 ACADEMIA USERO

Page 151: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<input type=radio name=vote

value="Shakespeare">Shakespeare<br>

<input type=radio name=vote

value="Lovecraft">Lovecraft<br><br>

<input type=submit value="Mostrar gráfico">

</form>

</body>

</html>

32.3. El archivo show_poll.php

<?

/*******************************************

Petición a la base de datos para obtener la información de la

encuesta

151/191 ACADEMIA USERO

Page 152: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

*******************************************/

// hacer log in en la base de datos

//cojo el escritor votado del formulario

$vote=$_POST['vote'];

//me conecto a la base de datos

if (!$db_conn = @mysql_connect("localhost", "root", ""))

{

echo "No se puede conectar a la base de datos<br>";

exit;

};

//seleccione la base de datos encuesta

@mysql_select_db("encuesta");

if (!empty($vote)) // Si han cubierto bien el formulario

{

$vote = addslashes($vote);

//actualizo la base de datos para añadir un voto al escritor votado

$query = "update resencuesta

set nvotos = nvotos + 1

where opcion = '$vote'";

if(!($result = @mysql_query($query, $db_conn)))

{

echo "No se ha podido conectar a la base de datos<br>";

exit;

152/191 ACADEMIA USERO

Page 153: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

}

};

// obtener los resultados actuales de la encuentas,

independientemente de lo que haya votado

//ejecuto la consulta de actualización

$query = "select * from resencuesta";

if(!($result = @mysql_query($query, $db_conn)))

{

echo "No se puede conectar a la base de datos<br>";

exit;

}

//cuento el número de candidates.

$num_candidates = mysql_num_rows($result);

// calcular el número total de votos hasta ahora

$total_votes=0;

//cuento el número total de votos

while ($row = mysql_fetch_object ($result))

{

$total_votes += $row->nvotos;

}

mysql_data_seek($result, 0); // resetear el resultado

153/191 ACADEMIA USERO

Page 154: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

/*******************************************

Cálculo inicial para el gráfico

*******************************************/

// configurar constantes

$width=500; // ancho de la imagen en pixeles - encajará en

640x480

$left_margin = 50; // espacio a dejar a la izquierda de la imagen

$right_margin= 50; // lo mismo para la derecha

$bar_height = 40;

$bar_spacing = $bar_height/2;

$font = "arial.ttf";

$title_size= 16; // puntos

$main_size= 12; // puntos

$small_size= 12; // puntos

$text_indent = 10; // posición para las etiquetas de texto a la

izquierda

// configurar el punto inicial desde el cual dibujar

$x = $left_margin + 60; // colocar la línea de base para dibujar del

gráfico

$y = 50; // lo mismo

$bar_unit = ($width-($x+$right_margin)) / 100; // un "punto" en el

gráfico

154/191 ACADEMIA USERO

Page 155: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

// cálcula el alto del gráfico - barras más espacios más el margen

$height = $num_candidates * ($bar_height + $bar_spacing) + 50;

/*******************************************

Configurar la imagen base

*******************************************/

// crear un lienzo en blanco

$im = imagecreate($width,$height);

// Asignar colores

$white=ImageColorAllocate($im,255,255,255);

$blue=ImageColorAllocate($im,0,64,128);

$black=ImageColorAllocate($im,0,0,0);

$pink = ImageColorAllocate($im,255,78,243);

$text_color = $black;

$percent_color = $black;

$bg_color = $white;

$line_color = $black;

$bar_color = $blue;

$number_color = $pink;

// Crear "lienzo" para dibujar

ImageFilledRectangle($im,0,0,$width,$height,$bg_color);

155/191 ACADEMIA USERO

Page 156: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

// Dibujar borde en torno al lienzo

ImageRectangle($im,0,0,$width-1,$height-1,$line_color);

// Añadir Título

$title = "Escritor favorito";

$title_dimensions = ImageTTFBBox($title_size, 0, $font, $title);

$title_length = $title_dimensions[2] - $title_dimensions[0];

$title_height = abs($title_dimensions[7] - $title_dimensions[1]);

$title_above_line = abs($title_dimensions[7]);

$title_x = ($width-$title_length)/2; // centrarlo en x

$title_y = ($y - $title_height)/2 + $title_above_line; // centrarlo en y

ImageTTFText($im, $title_size, 0, $title_x, $title_y,

$text_color, $font, $title);

// Dibujar una línea de base un poco por encima de la primera

localización de la barra

// a un poco por debajo de la última

ImageLine($im, $x, $y-5, $x, $height-15, $line_color);

/*******************************************

Dibujar los datos en el gráfico

*******************************************/

// Obtener cada línea de los datos de la base de datos y dibujar las

barras correspondientes

156/191 ACADEMIA USERO

Page 157: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

while ($row = mysql_fetch_object ($result))

{

if ($total_votes > 0)

//cojo cada una de las cantidades y las divido entre el número total

de votos

$percent = intval(round(($row->nvotos/$total_votes)*100));

else

$percent = 0;

// muestra el tanto por ciento para este valor

ImageTTFText($im, $main_size, 0, $width-30, $y+($bar_height/2),

$percent_color, $font, $percent."%");

if ($total_votes > 0)

$right_value = intval(round(($row->nvotos/$total_votes)*100));

else

$right_value = 0;

// tamaño de barra para este valor

$bar_length = $x + ($right_value * $bar_unit);

// dibujar barra para este valor

ImageFilledRectangle($im, $x, $y-2, $bar_length, $y+$bar_height,

$bar_color);

// dibujar título para este valor

157/191 ACADEMIA USERO

Page 158: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

ImageTTFText($im, $main_size, 0, $text_indent,

$y+($bar_height/2),

$text_color, $font, "$row->opcion");

// dibujar contorno mostrando 100%

ImageRectangle($im, $bar_length+1, $y-2,

($x+(100*$bar_unit)), $y+$bar_height, $line_color);

// mostrar números

ImageTTFText($im, $small_size, 0, $x+(100*$bar_unit)-50, $y+

($bar_height/2),

$number_color, $font, $row->nvotos."/".$total_votes);

// hacia abajo a la siguiente barra

$y=$y+($bar_height+$bar_spacing);

}

/*******************************************

Mostrar imagen

*******************************************/

Header("Content-type: image/png");

ImagePng($im);

/*******************************************

158/191 ACADEMIA USERO

Page 159: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Limpiar

*******************************************/

ImageDestroy($im);

?>

Sesión 33. PDF

33.1. PDF

Vamos a aprender a crear ficheros PDF con PHP. Para ello primero nos vamos

a descargar un pequeño script que nos permite hacerlo fácilmente.

1. Entre en la página fpdf.org

2. Descargue el script a una carpeta de su ordenador

3. Cree un nuevo sitio llamado pdf y descomprima dentro el script que acaba de

descargar.

159/191 ACADEMIA USERO

Page 160: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

4. Cree un nuevo archivo llamado prueba1.php y pruebe el siguiente código.

<?php

require('fpdf.php');

//crea una variable FPDF

$pdf=new FPDF();

//le añade una página

$pdf->AddPage();

//establece la fuente

$pdf->setFont('Arial','B',16);

//escriba a partir de la posición 40,10 el texto hola, mundo

$pdf->Cell(40,10,'Hola, mundo');

//lo manda

$pdf->Output();

160/191 ACADEMIA USERO

Page 161: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

?>

5. Ahora añada la siguiente línea al programa y compruebe el resultado:

<?php

require('fpdf.php');

$pdf=new FPDF();

$pdf->AddPage();

$pdf->setFont('Arial','B',16);

$pdf->Cell(40,10,'Hola, mundo');

$pdf->Cell(60,10,'Hecho con PDF',0,1,'C');

$pdf->Output();

?>

33.2. Cabecera, pie, salto de página e imagen

El siguiente código añade una cabecera y un pie a cada página. Las funciones

header y footer se ejecutan automáticamente y añaden la cabecera y el pie al

documento.

<?php

require('fpdf.php');

class PDF extends FPDF

{

//Cabecera de página

function Header()

{

161/191 ACADEMIA USERO

Page 162: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//Logo

//coloca la imagen

$this->Image('logo_pb.png',10,8,22);

//Arial bold 15

//establece la fuente

$this->SetFont('Arial','B',15);

//Movernos a la derecha

$this->Cell(80);

//Título

$this->Cell(30,10,'Título',1,0,'C');

//Salto de línea

$this->Ln(20);

}

//Pie de página

function Footer()

{

//Posición: a 1,5 cm del final

$this->SetY(-15);

//Arial italic 8

$this->SetFont('Arial','I',8);

//Número de página

$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');

}

162/191 ACADEMIA USERO

Page 163: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

}

//Creación del objeto de la clase heredada

$pdf=new PDF();

$pdf->AliasNbPages();

$pdf->AddPage();

$pdf->SetFont('Times','',12);

for($i=1;$i<=40;$i++)

$pdf->Cell(0,10,'Imprimiendo línea número '.$i,0,1);

$pdf->Output();

?>

Funciones usadas:

Image: Imprime una imagen en la página. Las coordenadas de la esquina superior

izquierda deben especificarse.

SetFont: Establece la fuente usada para imprimir cadenas de carácteres. Es

obligatorio invocar este método por lo menos una vez antes de imprimir texto o el

documento resultante no será válido.

La fuente puede ser una estándar o una adicionada via el método AddFont(). La

fuentes estándar usan codificación cp1252 (Western Europe) de Windows.

El método puede ser invocado antes que la primera página sea creada y es mantenido

de página a página.

Si sólo desea cambiar el tamaño de la fuente actual, es más simple invocar

SetFontSize().

Cell: Imprime una celda (de área rectangular) bordes opcionales, color de fondo y

secuencia de carácteres La esquina superior izquierda de la celda corresponde a la

posición actual. El texto puede ser alineado o centrado. Despues de invocar, la

posición actual se desplaza a la derecha o la siguietne línea. Es posible poner una

referencia en el texto.

163/191 ACADEMIA USERO

Page 164: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Si esta el salto de página automático habilitado y la celda esta por fuera del límite, es

realizado un salto de página antes de producir la salida.

AliasNBPages: Define un alias para el número total de páginas. Se sustituira en el

momento que el documento se cierre.

Sesión 34. Foro

34.1. Foro: la base de datos

Vamos a crear un foro donde los usuarios puedan ir dejando noticias y

comentarios.

A continuación tiene el archivo de base de datos.

Ejecute esta consulta entrando en la ventana SQL.

CREATE TABLE foro (

id int(7) NOT NULL auto_increment,

autor varchar(200) NOT NULL default '',

titulo varchar(200) NOT NULL default '',

mensaje text NOT NULL,

fecha datetime NOT NULL default '0000-00-00 00:00:00',

respuestas int(11) NOT NULL default '0',

identificador int(7) NOT NULL default '0',

ult_respuesta datetime default NULL,

KEY id (id)

) TYPE=MyISAM;

164/191 ACADEMIA USERO

Page 165: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Ejecute también estas dos consultas para añadir algunos datos a la base de datos.

INSERT INTO foro VALUES (1,'pablo','probando','Este es un mensaje de prueba','0000-00-00 00:00:00',2,0,'0000-00-00 00:00:00');

INSERT INTO foro VALUES (2,'federico','Otra prueba bedelesca','SEguimos metiendo mensajes que no sirven para nada’,'2003-05-02 00:14:47',3,0,'2003-05-02 00:14:47');

165/191 ACADEMIA USERO

Page 166: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

34.2. El archivo configuracion.php

Este archivo contiene la conexión a la base de datos.

<?php

$bd_host = "localhost";

$bd_usuario = "root";

$bd_password = "";

$bd_base = "foro";

$con = mysql_connect($bd_host, $bd_usuario, $bd_password);

mysql_select_db($bd_base, $con);

?>

166/191 ACADEMIA USERO

Page 167: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

34.3. El archivo funciones.php

Este archivo contiene un par de funciones útiles.

La función mostrarTemplate extrae las variables e imprime el tema.

La función parsearTags busca el tag CITAR y lo sustituye por un texto en formato de

cita (quote).

<?php

function mostrarTemplate($tema, $variables)

{

//var_dump($variables);

extract($variables);

eval("?>".$tema."<?");

}

function parsearTags($mensaje)

{

$mensaje = str_replace("[citar]", "<blockquote><hr

width='100%' size='2'>", $mensaje);

$mensaje = str_replace("[/citar]", "<hr width='100%'

size='2'></blockquote>", $mensaje);

return $mensaje;

}

?>

167/191 ACADEMIA USERO

Page 168: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

34.4. El archivo header.html

Este archivo es la cabecera de todas las páginas.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01

Transitional//EN">

<html>

<head>

<title>El Foro de ZonaPHP</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-

8859-1">

//ahí un estilo css embebido en la cabecera

<style type="text/css">

<!--

body {

168/191 ACADEMIA USERO

Page 169: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

font-family: Arial, Helvetica, sans-serif;

color: #FFFFFF;

}

a {

text-decoration: none;

}

-->

</style>

</head>

<body bgcolor="#9999cc" text="#FFFFFF" link="#FFFFFF">

<table width="90%" border="0" align="center" cellpadding="2"

cellspacing="2">

<tr>

<td bgcolor="#4b557d"><h2>El Foro de ZonaPHP</h2>

<div align="right">[ <a href="index.php">Inicio</a> ] [ <a

href="respuesta.php">Nuevo

Tema</a> ]</div></td>

</tr>

</table>

34.5. El archivo footer.html

Este es el archivo que va al final de cada página.

169/191 ACADEMIA USERO

Page 170: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<table width="90%" border="0" align="center" cellpadding="2"

cellspacing="2" bgcolor="#4b557d">

<tr>

<td align="center">Foro de José Luis - Bajo licencia GPL</td>

</tr>

</table>

</body>

</html>

34.6. El archivo index.php

Este es el archivo principal. Lista las noticias del foro.

<?php

require('configuracion.php');

require('funciones.php');

include('header.html');

/* Pedimos todos los temas iniciales (identificador==0)

* y los ordenamos por ult_respuesta */

$sql = "SELECT id, autor, titulo, fecha, respuestas, ult_respuesta ";

$sql.= "FROM foro WHERE identificador=0 ORDER BY ult_respuesta

DESC";

$rs = mysql_query($sql, $con);

if(mysql_num_rows($rs)>0)

{

170/191 ACADEMIA USERO

Page 171: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

// Leemos el contenido de la plantilla de temas

$template = implode("", file("temas.html"));

include('titulos.html');

while($row = mysql_fetch_assoc($rs))

{

//$color=($color==""?"#5b69a6":"");

//$row["color"] = $color;

mostrarTemplate($template, $row);

}

}

include('footer.html');

?>

Sesión 35. Usar Google

35.1. Lo que vamos a hacer

Vamos a usar el servicio de Google SOAP Search API para hacer uso de

Google dentro de nuestras aplicaciones.

Una API (del inglés Application Programming Interface - Interfaz de

Programación de Aplicaciones) es un conjunto de especificaciones de comunicación

entre componentes software. La API que vamos a usar nos permite acceder al

buscador Google y enviarle órdenes de búsqueda desde nuestros propios programas.

35.2. Primero darse de alta

Lo primero que tenemos que hacer es darnos de alto en el servicio. Sin darnos de alta

no podemos usar ninguno de los servicios.

171/191 ACADEMIA USERO

Page 172: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

1. Entre en la siguiente página.

www.google.com/apis/

2. Primero bájese el Developer`s kit (kit del desarrollador).

3. Descargue el archivo.

172/191 ACADEMIA USERO

Page 173: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

4. Aquí tiene el contenido del archivo. Dentro de él tiene información sobre como

conectar la API con Java.

5. Ahora tiene que obtener una cuenta de Google. Haga clic en el enlace Create a

Google account en la zona inferior de la página de descarga.

6. Rellene los datos de la cuenta.

173/191 ACADEMIA USERO

Page 174: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

7. Ahora entre en su cuenta de correo y siga las instrucciones que se le han

enviado para dar de alta la cuenta.

174/191 ACADEMIA USERO

Page 175: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

8. Una vez que la cuenta ha sido verificada se nos muestra el siguiente mensaje.

9. Una vez que se verifica la cuenta, nos envían un email con la clave de licencia.

Esta clave de licencia nos permite hacer 1000 busquedas al día con fines no

comerciales.

10. El email nos da la clave de licencia.

175/191 ACADEMIA USERO

Page 176: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

35.3. Activar SOAP

SOAP es un servicio que no viene activado por defecto. Hay que activarlo añadiendo

una línea al archivo php.ini que está dentro de la carpeta bin de la carpeta Apache2

del servidor WAMP.

La línea es la siguiente:

;extension=php_pdo_oci8.dll

;extension=php_pdo_odbc.dll

;extension=php_pdo_pgsql.dll

extension=php_sqlite.dll

extension=php_soap.dll

Una vez activado, reinicie el servidor WAMP,entre en LOCALHOST y compruebe que

se ha activado SOAP haciendo clic en el enlace PHPINFO().

35.4. Usar SOAP y Google

<?////////////////////////////////////////////////////////////// This is example code of how to query the Google API using// Web Services, SOAP, and PHP.//// Author: Geoff Peters, January 6th 2004. //// To run this script you need to obtain the Pear::SOAP package.// You can obtain it from http://pear.php.net.// The example shown uses Pear::SOAP version 0.7.5.//// If you don't have administrative access to you web server,// you can place the SOAP directory that contains the Pear::SOAP// source files somewhere on your server, and then modify the// PHP include path using ini_set to include this directory.

176/191 ACADEMIA USERO

Page 177: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//// For example: /*

// set the include path to use the new pear stuffini_set( 'include_path', '.:/home/user/pearstuff:/usr/local/lib/php');

*/// Note that Pear::SOAP has several dependencies on other Pear packages,// which you should also install on your web server./////////////////////////////////////////////////////////////

//// Initialize SOAP web services//include("SOAP/Client.php");

$soapclient = new SOAP_Client('http://api.google.com/search/beta2');$soapoptions = array('namespace' => 'urn:GoogleSearch', 'trace' => 0);

////////////////////////////////////////////////////////////// Calls the Google API and retrieves the estimated number of // search results for that query into $num.function do_search( $query, $key, &$num ){

global $soapclient;global $soapoptions;

// Note that we pass in an array of parameters into the Google search.

// The parameters array has to be passed by reference.// The parameters are well documented in the developer's kit on

the// Google site http://www.google.com/apis

$params = array( 'key' => $key, // the Developer's key 'q' => $query, // the search query 'start' => 0, // the point in the search results should Google start 'maxResults' => 1, // the number of search results (max 10) 'filter' => false, // should the results be filtered? 'restrict' => '', 'safeSearch' => false, 'lr' => '', 'ie' => '', 'oe' => '' );

// Here's where we actually call Google using SOAP. // doGoogleSearch is the name of the remote procedure call.

$ret = $soapclient->call('doGoogleSearch', $params, $soapoptions);

if (PEAR::isError($ret)){

177/191 ACADEMIA USERO

Page 178: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

print("<br>An error #" . $ret->getCode() . " occurred!<br>");

print(" Error: " . $ret->getMessage() . "<br>\n");return false;

}else // We have proper search results{

// Results from the Google search are stored in the object $ret.

// The following block of code prints// out the structure and contents of the object to the

screen:print("\n<br><pre>");print_r( $ret );print("</pre><br>\n");

// in this example, the only thing we need from the search results

// is the estimatedTotalResultsCount$num = $ret->estimatedTotalResultsCount;

}

return true;}

////////////////////////////////////////////////// Does Google search with retry. // Retry is useful because sometimes the connection will// fail for some reason but will succeed when retried.function search( $query, $key, &$num ){

$result = false;$max_retries = 5;$retry_count = 0;

while( !$result && $retry_count < $max_retries ){

$result = do_search( $query, $key, $num ); if( !$result )

{print( "Attempt $retry_count failed.<br>\n");

}$retry_count++;

}if( !$result ){

print("<br>Sorry, connection to Google failed after retrying several times. Please check that the Google Developer's Key you entered was correct. To obtain a developer's key or for more information on the Google API, visit <a href=\"http://www.google.com/apis/\">Google API home page</a>.<br>\n");

}return $result;

}

//////////////////////////////////////////////////////////// The main part of this script

print("<html>\n<head>\n<title>Google API Example with PHP, SOAP, and Web Services</title>\n</head>\n<body>");

178/191 ACADEMIA USERO

Page 179: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

print("<h1>Google API Example Using PHP</h1><p>For more info on the Google API, visit the <a href=\"http://www.google.com/apis\">Google developer's page</a></p>");

if ( $key == "" ){

/*You get a developer's key when you register to use Google's

API.A developer's key is a unique string that identifies you to

Google.You get a maximum of 1000 searches per day using your

developer's key.*/$key = 'thisIsNotaRealKeyBQSgnSiZySpQmfd1wqG'; // put your

developer's key here.}

if( $query != "" ){

// remove the slashes that are automatically added by PHP before each quotation mark

$query = stripslashes($query);

if( search( $query, $key, $num ) ){

print("<h2>Search results</h2>\n<p>The estimated number of results for the search query <i>$query</i> is <b>$num</b>.</p>");

}}

//// print the input form//print("<hr><h2>Test out the Google API with PHP, SOAP, and Web Services:</h2><p><form method=\"POST\" action=\"apiexample.php\"> <p>Search Query <input type=\"text\" name=\"query\" size=\"20\"></p> <p>Google Developer's Key <input type=\"text\" name=\"key\" size=\"20\"></p> <p><input type=\"submit\" value=\"Submit\"><input type=\"reset\" value=\"Reset\"></p></form></p>");

print("<hr><h2>About</h2><p>This example was created by <a href=\"http://www.sfu.ca/~gpeters\">Geoff Peters</a>, creator of <a href=\"http://www.googleduel.com/\">GoogleDuel</a> and <a href=\"http://www.googleduel.com/googlebusinessmain.php\">GoogleDuel-Ultra</a>. Feel free to re-use or distribute this source code.</p>");

print("<hr><h2>Source Code</h2><br><br>");

highlight_file("apiexample.php");

print("</body>\n</html>");?>

179/191 ACADEMIA USERO

Page 180: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Sesión 36. Usar clases externas: traducir

36.1. Darse de alta

1. Primero tienes que entrar en la página www.phpclasses.org y darte de alta.

2. Una vez que te des de alta, recibirás un correo.

3. Haz clic en el enlace de ese correo para elegir una contraseña.

4. Una vez elegida la contraseña, puedes entrar en la página y descargarte lo que

quieras.

5. Luego tiene que elegir tu país.

6. Luego puedes elegir un grupo de usuarios.

36.2. Descargar el código

1. Ahora en el cuadro de búsqueda escribe babelfish.

2. Ahora haga clic en el primer enlace para ir a la página de la clase de babelfish.

3. Vaya hacia abajo en la página y haga clic en el enlace de descarga .zip.

180/191 ACADEMIA USERO

Page 181: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

4. Descargue el archivo en una nueva carpeta y descomprímalo.

5. Entre en Dreamweaver y cree un nuevo sitio en esa carpeta.

36.3. Instalar CURL

Esta clase necesita usar CURL para funcionar. Para activar CURL realice lo siguente:

1. Abra el archivo php.ini que se encuentra en la carpeta C:\wamp\Apache2\bin.

2. Vaya a la sección de extensiones y quite el punto y coma delante de la línea

extensión=php_curl.dll

;Windows Extensions

;Note that ODBC support is built in, so no dll is needed for it.

;

extension=php_mbstring.dll

;extension=php_bz2.dll

;extension=php_cpdf.dll

extension=php_curl.dll

3. Reinicie los servidores. Ahora haga una vista previa del archivo example.php.

181/191 ACADEMIA USERO

Page 182: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

¡¡¡Muy bien!!! El programa hace uso del archivo descargado para traducir una frase a

francés y holandés.

36.4. El formulario

A continuación tiene el código de un formulario que nos permite escribir un texto que

será traducido más tarde.

<html>

<head>

<title>traducir</title>

<link rel="stylesheet" type="text/css"

href="estilo.css"/>

</head>

<body>

182/191 ACADEMIA USERO

Page 183: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

<center>

<table width="550">

<tr bgcolor= #FF9933><td

align="center"><BR><H3>AINTE.COM<BR>"TRADUCTOR

ONLINE"<BR> Formulario</H3></td></tr>

</td></tr></table>

</center>

<FORM METHOD=post ACTION="traductor.php">

<P>Texto a traducir: <input type="text" size=30

name="mensaje">

<P><input type="submit" value="Enviar">

</body>

</html>

183/191 ACADEMIA USERO

Page 184: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

36.5. Traductor.php

Y este es el código que traduce.

<?php

/* ejemplo simple */

include("babelfish.class.php");

$mensaje = $_POST['mensaje'];

echo "En Español: ".$mensaje.'<br>';

/* Uso de la clase babel */

$tr=new babelfish();

echo "En Francés: ".$tr-

translate($mensaje,'spanish','French').'<br>';

echo "En inglés: ".$tr-

>translate($mensaje,'spanish','english').'<br>';

?>

Sesión 37. Flash y PHP

37.1. Hacer que hablen

Vamos a hacer un pequeño programa que envíe una variable a un archivo de

Flash.

184/191 ACADEMIA USERO

Page 185: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

1. Abra Dreamweaver, cree un sitio, y cree un archivo con el nombre hola.php con

el siguiente contenido:

<?php

echo "mivariable=Hello World";

?>

Lo único que hace este archivo es definir una variable llamada mivariable y

dale el valor Hello World.

2. Ahora entre en Flash, cree una nueva película y guárdela con el nombre hola.fla en

la misma carpeta del servidor donde ha guardado el archivo PHP.

3. Haga clic en el primer fotograma.

4. Abra el panel de acciones y escriba lo siguiente.

//crea un campo de texto

this.createTextField("display_txt",1,0,0,100,20);

//crea un objeto LOADVARS para cargar los datos

var hello_lv:LoadVars = new LoadVars();

//si el objeto LOADVARS recibo los datos

hello_lv.onLoad = function(success){

//si tiene éxito

if(success){

//establece el texto del cuadro con el texto de la variable mivariable

display_txt.text = this.mivariable;

}else{

//si no, señala un error

trace("Ha ocurrido un error.");

}

}

185/191 ACADEMIA USERO

Page 186: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

//carga el código PHP

hello_lv.load("http://localhost/flash/hola.php");

37.2. Enviar correo: el archivo PHP

Cree un nuevo archivo llamado sendmail.php en Dreamweaver y escriba dentro este

código:

<?php

//obtiene las variables externas

$destMail = $_REQUEST["destMail"];

$senderName = $_REQUEST["senderName"];

$senderMail = $_REQUEST["senderMail"];

$senderSubject = $_REQUEST["senderSubject"];

$senderBody = $_REQUEST["senderBody"];

//envía el email con HACIA, ASUNTO, CUERPO

mail($destMail, $senderSubject, $senderBody);

?>

Las variables contienen los siguientes datos:

186/191 ACADEMIA USERO

Page 187: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

Destmail: dirección de correo electrónico de destino

sendername: nombre del remitente.

Senderemail: email del remitente.

senderSubject: asunto del email.

senderBody: cuerpo del mensaje.

37.3. Enviar correo: el archivo Flash

1. Cree un nuevo archivo de Flash y guárdelo con el nombre sendmail.fla

2. Vamos a poner un cuadro de texto para que el usuario pueda introducir datos.

Haga clic en la herramienta Texto.

3. Haga clic en el escenario y arrastre para crear un cuadro de texto.

4. Ahora vaya al panel de Propiedades en la zona inferior y haga clic en el cuadro

combinado para elegir el tipo de cuadro de texto.

5. Haga clic en la opción Introducción de texto.

6. Active la propiedad Mostrar borde.

187/191 ACADEMIA USERO

Page 188: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

7. Cambie el tamaño de letra a 12.

8. Cambie el nombre de la instancia a destMail_txt

9. Cree un texto de tipo normal y colóquelo a su izquierda con el título: Destinatario.

10. Cree otros cuatro cuadros de texto con sus etiquetas con los nombres de

instancia que se indican a continuación:

senderName_txt

senderEmail_txt

senderSubject_txt

senderBody_txt

11. Modifique la propiedad del campo senderBody_txt a Multilínea y estírela hacia

abajo.

188/191 ACADEMIA USERO

Page 189: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

12. Por último hay que crear un butón. Cree un rectángulo en la zona inferior,

rellénelo de un color y luego colóquelo un texto sobre él.

13. Ahora selecciona los dos objetos, el texto y el rectángulo, pulsando fuera de ellos

y arrastrando.

14. Haga clic en el menú Modificar.

15. Haga clic en la opción Convertir en símbolo.

16. Haga clic en la opción Botón.

17. Haga clic en el símbolo Aceptar.

18. Cambie el nombre de la instancia a send_btn.

189/191 ACADEMIA USERO

Page 190: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

19. Ahora ya podemos agregar el código, haga clic en el primer fotograma,

despliegue el panel de Acciones y escriba lo siguiente:

//crea un objeto que se activa cuando soltamos una tecla

//este objeto comprueba que todos los campos estén rellenos

//si es así, activa el botón de enviar y si no lo mantiene desactivado

fieldsFilled = new Object();

fieldsFilled.onKeyUp = function(){

if(destMail_txt.text != '' && senderName_txt.text != '' &&

senderMail_txt.text !=

'' && senderSubject_txt.text != '' && senderBody_txt.text != ''){

send_btn.enabled = true;

} else {

send_btn.enabled = false;

}

}

//aplica el objeto de modo que este activo cuando se pulsa una tecla

Key.addListener(fieldsFilled);

//desactiva el campo

send_btn.enabled = false;

//este es el objeto que se comunicará con el archivo PHP

var sendMail_lv:LoadVars = new LoadVars()

//al soltar el botón

send_btn.onRelease = function(){

//establezco las variables a enviar

sendMail_lv.destMail = destMail_txt.text;

190/191 ACADEMIA USERO

Page 191: Curso PHP Academia Usero

@INTE ACADEMIA Curso de PHP

sendMail_lv.senderName = senderName_txt.text;

sendMail_lv.senderMail = senderMail_txt.text;

sendMail_lv.senderSubject = senderSubject_txt.text;

sendMail_lv.senderBody = senderBody_txt.text;

//y envío los datos al archivo PHP

sendMail_lv.sendAndLoad("http://localhost/flash/sendmail.php",

sendMail_lv, "POST");

}

191/191 ACADEMIA USERO