curso php academia usero
Post on 18-Nov-2014
7.813 Views
Preview:
DESCRIPTION
TRANSCRIPT
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@INTE ACADEMIA Curso de PHP
Sesión 4. DO…WHILE, FOR, Comentarios,
pedido
4.1. DO…WHILE
19/191 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
@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
@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
@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
@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
@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> </td>
</tr>
</table>
25/191 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
@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
@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
@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
@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
@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
@INTE ACADEMIA Curso de PHP
</form>
<p> </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
@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
@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
@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
@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
@INTE ACADEMIA Curso de PHP
Sesión 7. Arrays
37/191 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
@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
@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
@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
@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
@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
@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
@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
@INTE ACADEMIA Curso de PHP
9.3. Email.php
Observe el código email.php que procesa los datos de lformulario.
<?
$correo="jluserovilchez@hotmail.com";
$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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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í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ítulo</title>
</head>
76/191 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
@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í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
@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
@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
@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
@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ágina. Aquí
puedo diseñar con total libertad.</p>
<p>a</p>
<p>c</p>
<p>d</p>
<p> </p></td>
</tr>
<tr>
<?
require("pie.html");
?>
</tr>
82/191 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
@INTE ACADEMIA Curso de PHP
<td><p>Este es el contenido de la página. Aquí
puedo diseñar con total libertad.</p>
<p>a</p>
<p>c</p>
<p>d</p>
<p> </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
@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
@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ítulo</title>
</head>
<body>
86/191 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> </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
@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í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
@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ítulo</title>
</head>
<body>
Muy bien. Tu nombre es
<?
echo "$nombrecillo";
?>
y tu apellido es
<?
print($apellidos);
89/191 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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
top related