Curso PHP Academia Usero

  • 8,193 views
Uploaded on

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

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

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
8,193
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
28
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. @INTE ACADEMIA Curso de PHP Sesión 1. Instalar el servidor y probarlo1.1. Instalar servidor Para aprender PHP lo primero que tenemos que hacer es instalar un servidorweb en nuestro ordenador, de modo que podamos ejecutar nuestros programas enPHP antes de subirlos a un servidor. Una buena opción que instala todo lo necesario para empezar a trabajar eseasyphp. Vamos a instalarlo.1. Entre en la siguiente dirección: www.easyphp.org2. Haga clic en el enlace Descargas. 1/195 ACADEMIA USERO
  • 2. @INTE ACADEMIA Curso de PHP3. Descargue la última versión disponible. En la realización de estos apuntes estaba vigente la versión 1.84. 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/195 ACADEMIA USERO
  • 3. @INTE ACADEMIA Curso de PHP1.2. Reiniciar y probar el servidor Una vez instalado el programa, una de las operaciones más comunes a realizares reiniciar el servidor, ya que puede haber veces que modifiquemos algunospará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://localhost4. 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/195 ACADEMIA USERO
  • 4. @INTE ACADEMIA Curso de PHP1.3. La carpeta del servidor Vamos a probar la carpeta del servidor para comprobar que, efectivamente, elservidor 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 programaEasyPHP1-8www2. 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/195 ACADEMIA USERO
  • 5. @INTE ACADEMIA Curso de PHP5. 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, vamosa 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 programaEasyPHP1-8www2. 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/195 ACADEMIA USERO
  • 6. @INTE ACADEMIA Curso de PHP¡¡¡Muy bien!!! Ya ha escrito su primer programa en PHP.1.5. SintaxisObserve 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 loscomandos que usemos en PHP.1.6. Tomar datos de formulariosPara poder trabajar en posteriores sesiones, vamos a aprender a tomar datos deformularios.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/195 ACADEMIA USERO
  • 7. @INTE ACADEMIA Curso de PHP2. 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 condicionales2.1. La instrucción IF Sea lo que sea que haga, habrá ocasiones en las que sus programas tomarándecisiones. Por ejemplo, puede decidir cargar una página si el navegador es InternetExplorer 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/195 ACADEMIA USERO
  • 8. @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. 8/195 ACADEMIA USERO
  • 9. @INTE ACADEMIA Curso de PHPTABLA DE COLORES WEBhttp://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 eltexto que hemos escrito en el formulario: varcolor lo que sea6. Anatomía de un IF:La orden IF comienza con la palabra if, que significa SI, el condicional. Luego hay queponer una condición entre paréntesis. Una condición en PHP compara dos valores yda una respuesta negativa o positiva. En este caso se compara el valor de la variablevarcolor con la constante de texto “rojo”. La variable de texto varcolor contiene el textolo que sea y, como no es igual (==) que rojo, pues se ejecute todo lo que está entrellaves 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]; $varcolor=$_POST[color];if ($varcolor=="rojo") { se cumple if ($varcolor=="rojo") { NO se 9/195 ACADEMIA USERO
  • 10. @INTE ACADEMIA Curso de PHP print("FF0000"); cumple } else { print("FF0000"); 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 edadintroducida.1. Cree un formulario con el siguiente aspecto y guárdelo con el nombre formedad.htm.<HTML><HEAD><TITLE>Formulario Edad</TITLE></HEAD><BODY> 10/195 ACADEMIA USERO
  • 11. @INTE ACADEMIA Curso de PHPFormulario Edad<form action="webedad.php" method="POST">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> 11/195 ACADEMIA USERO
  • 12. @INTE ACADEMIA Curso de PHP3. 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 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 Bucles8.1. ELSEIFSi tiene muchos colores, ha de disponer de una condición múltiple que, dependiendodel color escrito, muestre un color de fondo u otro.1. Cree un formulario para escribir el color y llámele formcolor3.htm2. 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> 12/195 ACADEMIA USERO
  • 13. @INTE ACADEMIA Curso de PHP<BODY BGCOLOR=<?$varcolor=$_POST[color];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 conun montón de ELSEIF y un ELSE. Hay una instrucción más elegante para hacer lomismo, es la instrucción SWITCH. 13/195 ACADEMIA USERO
  • 14. @INTE ACADEMIA Curso de PHP La instrucción SWITCH depende del valor de una variable. Según lo que valgaesa variable se ejecutará una acción u otra. Vamos a hacer un ejemplo para ver comofunciona:1. Cree un formulario para escribir el color y llámele formcolor4.htm2. 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: 14/195 ACADEMIA USERO
  • 15. @INTE ACADEMIA Curso de PHP print("9966FF"); break;};?>>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 lacontraseñ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 losdatos del usuario hasta que sean correctos necesitamos un bucle, algo que se repitahasta 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; 15/195 ACADEMIA USERO
  • 16. @INTE ACADEMIA Curso de PHPwhile ($contador<=10) { print($contador."<br>"); $contador=$contador+1; }?></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 unoperador de asignación. La orden while tiene siempre una condición entre paréntesis. En este caso, lacondició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 unincrementador, que suma uno a la variable que hemos creado. Vamos a hacer un recorrido por el programa para ver como funciona. 16/195 ACADEMIA USERO
  • 17. @INTE ACADEMIA Curso de PHP Instrucción a ejecutar Valor de la variable ¿Qué pasa? Pantalla contador $contador=0 0 While ($contador<=10) 0 Se compara el valor de la variable contador 0, con 10, y, como es menor, se ejecuta lo que está dentro de las llaves print($contador."<br>"); 0 Se imprime el valor de la 0 variable contador, 0$contador=$contador+1; 1 Se incrementa el valor de 0 la variable en 1 While ($contador<=10) 1 Se compara el valor de la 0 variable contador, 1, con 10 y, como es menor, se ejecuta lo que está dentro de las llaves print($contador."<br>"); 1 Se imprime el valor de la 0 variable contador, 1 1$contador=$contador+1; 2 Se incrementa el valor de 0 la variable en 1 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 0 variable contador, 11, con 10 y como es mayor, 1 salimos del bucle 2 3 4 5 6 7 8 9 17/195 ACADEMIA USERO
  • 18. @INTE ACADEMIA Curso de PHP 1‟ FIN DEL PROGRAMAEjercicios. 1. Cree un programa que haga un bucle que cuente de 10 a 1. 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/195 ACADEMIA USERO
  • 19. @INTE ACADEMIA Curso de PHP Sesión 4. DO…WHILE, FOR, Comentarios, pedido 19/195 ACADEMIA USERO
  • 20. @INTE ACADEMIA Curso de PHP4.1. DO…WHILEPuede usar la sentencia DO…WHILE si quiere ejecutar el bucle por lo menos unavez. En este caso, se ejecuta el bucle al menos una vez y luego se comprueba lacondición.5. Cree un formulario para escribir el color y llámele formcolor3.htm6. 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> 20/195 ACADEMIA USERO
  • 21. @INTE ACADEMIA Curso de PHP8. Este programa funciona igual que el que tenía el bucle WHILE.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/195 ACADEMIA USERO
  • 22. @INTE ACADEMIA Curso de PHP4.2. FORLa instrucción FOR permite ejecutar una serie de acciones un número determinado deveces.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) { 22/195 ACADEMIA USERO
  • 23. @INTE ACADEMIA Curso de PHP instrucción 1; instrucción 2; …. }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/195 ACADEMIA USERO
  • 24. @INTE ACADEMIA Curso de PHP4.3. Comentarios Los comentarios nos permiten añadir texto donde podemos escribir que es lo quehace 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 quecalcule cuanto cuesta el pedido de un usuario.1. Para empezar, cree el siguiente formulario (solo hemos añadido el texto del formulario). 24/195 ACADEMIA USERO
  • 25. @INTE ACADEMIA Curso de PHP<form id="formpedido" name="formpedido" method="post" action="procesarpedido.php"><table width="25%" border="0" cellspacing="0" cellpadding="0"> <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> 25/195 ACADEMIA USERO
  • 26. @INTE ACADEMIA Curso de PHP <td>&nbsp;</td> </tr> </table></form>El formulario se llama formpedido, llama al archivo procesarpedido.php y tiene 3cuadros 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> 26/195 ACADEMIA USERO
  • 27. @INTE ACADEMIA Curso de PHP<p>Pedido procesado el<?echo date("H:i , j S F");?></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 27/195 ACADEMIA USERO
  • 28. @INTE ACADEMIA Curso de PHP4. 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); 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/195 ACADEMIA USERO
  • 29. @INTE ACADEMIA Curso de PHP Sesión 5. Funciones5.1. Funciones Una función permite escribir un bloque de código que puede ser usado distintasveces dentro de un programa. Vamos a ver un ejemplo de uso de las funciones dentrode un pequeño programa. Vamos a hacer un pequeño programa que nos calcule elcuadrado de un número y lo ponga en un cuadro.1. Cree el siguiente formulario: 29/195 ACADEMIA USERO
  • 30. @INTE ACADEMIA Curso de PHP2. Este formulario llamará al archivo cuadrado.php, cuyo código PHP es el siguiente:<?function cuadrado($n) { $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; 30/195 ACADEMIA USERO
  • 31. @INTE ACADEMIA Curso de PHP5. 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));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> 31/195 ACADEMIA USERO
  • 32. @INTE ACADEMIA Curso de PHP <p>Exponente <label> <input name="exponente" type="text" id="exponente" /> </label> </p> <p> <label> <input type="submit" name="Submit" value="Enviar" /> </label></p> </form> <p>&nbsp; </p> </body> </html> PHP SIN FUNCIÓN <? $varbase=$_POST[base]; $varexponente=$_POST[exponente]; $resultado=$varbase; for ($contador=1;$contador<$varexponente;$contador++) { $resultado=$resultado*$varbase; }; print($resultado); 32/195 ACADEMIA USERO
  • 33. @INTE ACADEMIA Curso de PHP ?> PHP CON FUNCIÓN <? function potencia($b,$e) { $resultado=$b; for ($contador=1;$contador<$e;$contador++) { $resultado=$resultado*$b; }; return($resultado); } $varbase=$_POST[base]; $varexponente=$_POST[exponente]; print(potencia($varbase,$varexponente)); ?> 33/195 ACADEMIA USERO
  • 34. @INTE ACADEMIA Curso de PHP 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 tablas8.1. Funciones y tablas Vamos a crear una función que haga una tabla con tantas filas como indique elnúmero que pasamos como argumento.1. Cree el siguiente formulario: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>");?> 34/195 ACADEMIA USERO
  • 35. @INTE ACADEMIA Curso de PHP3. 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:<?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);?> 35/195 ACADEMIA USERO
  • 36. @INTE ACADEMIA Curso de PHP7. 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 columnasVamos a hacer un pequeño programa que cree una tabla insertando el número de filasy columnas.1. Cree el siguiente formulario:2. El código necesario para que se imprima una tabla es el siguiente:<?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>"); 36/195 ACADEMIA USERO
  • 37. @INTE ACADEMIA Curso de PHP}$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 quese introduzca en un formulario. 37/195 ACADEMIA USERO
  • 38. @INTE ACADEMIA Curso de PHP Sesión 7. Arrays7.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ículosque vamos a vender? Vamos a usar arrays. Un array es una variable que puede contener muchos números. Cada númeroocupa 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 38/195 ACADEMIA USERO
  • 39. @INTE ACADEMIA Curso de PHP Vamos a crear un pequeño programa que defina este array y luego lo imprima enpantalla: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>"); $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, laposició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: 39/195 ACADEMIA USERO
  • 40. @INTE ACADEMIA Curso de PHP7.2. Contar los elementos del array A continuación tiene una modificación del mismo programa donde añadimos unafunción que permite contar cuantos elementos tiene el array. Eso se define para luegousarlo 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++) { print($amigos[$i]."<br>"); }; ?>7.3. Sesión 8. Arrays 40/195 ACADEMIA USERO
  • 41. @INTE ACADEMIA Curso de PHP8.1. Foreach La función FOREACH nos permite recorrer un array de la forma más eleganteposible.<?$jugadores["portero"]="Casillas";$jugadores["defensa"]="Pujol";$jugadores["medio"]="Alonso";$jugadores["delantero"]="Reyes";reset($jugadores);foreach($jugadores as $value) { print($value."<br>");}?>8.2. Ordenar un array: sortPodemos usar la función sort para ordenar los elementos de un array. Pruebe elsiguiente programa para observar el resultado:<? 41/195 ACADEMIA USERO
  • 42. @INTE ACADEMIA Curso de PHP$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 índicesnuméricos, de modo que si después de ejecutar el código intentamos acceder a$jugadores[“portero”], no obtendremos ningún resultado.8.3. Ordenar un array con índices: asortPara evitar este problema puede usar el comando asort, que ordena el array junto conlos índices. Pruebe el siguiente programa y compruebe el resultado:<?$jugadores["portero"]="Casillas";$jugadores["defensa"]="Pujol";$jugadores["medio"]="Alonso";$jugadores["delantero"]="Reyes"; 42/195 ACADEMIA USERO
  • 43. @INTE ACADEMIA Curso de PHPasort($jugadores);reset($jugadores);foreach($jugadores as $value) { print($value."<br>");}print($jugadores["portero"]);?>8.4. Orden inversoPuede 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 índiceAhora cambie la orden asort por la orden ksort(). Esta orden le permite ordenar unarray según el índice. 43/195 ACADEMIA USERO
  • 44. @INTE ACADEMIA Curso de PHPEjercicio. Haz un programa que calcule el número mayor de una lista de 5nú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>");}$mayor=$numeros[0];foreach($numeros as $value) { if ($value>$mayor) { $mayor=$value; }} 44/195 ACADEMIA USERO
  • 45. @INTE ACADEMIA Curso de PHPprint($mayor);?> Sesión 9. Email con PHP9.1. Email Es bien fácil enviar un email a través de PHP. Lo único que tenemos que teneren cuenta es que debemos modificar el fichero PHP.INI para especificar el nombre delservidor 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.4. Vaya a la línea SMTP, donde puede definir el servidor de correo. En nuestro caso, estamos usando el de la academia. 45/195 ACADEMIA USERO
  • 46. @INTE ACADEMIA Curso de PHP5. Guarde este archivo.9.2. El formularioAhora cree un formulario con un par de campos de texto cuya acción sea el archivoemail.php.9.3. Email.phpObserve el código email.php que procesa los datos de lformulario.<?$correo="jluserovilchez@hotmail.com";$asunto="Este es el asunto";$redireccion="gracias.html";$mensaje=""; 46/195 ACADEMIA USERO
  • 47. @INTE ACADEMIA Curso de PHPforeach($_POST as $key=>$value) { $mensaje.=$key.":".$value; $mensaje.="n";}print($mensaje);if (mail($correo,$asunto,$mensaje)) { //header("Location:$redireccion"); print("Mensaje enviado correctamente");}else{ print("No de ha podido enviar el mensaje. Use el botón atrás paraprobar de nuevo.");}?>9.4. Como funciona el comando mail() Para el comando mail() necesitamos tener la dirección de la persona a la quequeremos 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 vatomando 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 deun IF. ¿Por qué? Porque el comando mail devuelve un valor booleano indicando si el 47/195 ACADEMIA USERO
  • 48. @INTE ACADEMIA Curso de PHPenvío ha sido correcto o no. Aprovechamos esto para imprimir en la página derespuesta del envío si el mensaje ha sido correctamente enviado. Sesión 10. Funciones de cadena10.1. Funciones de cadena: substr Habrá ocasiones en que tenga que comprobar o modificar algunos datosintroducidos en el formulario para que se ajusten a sus necesidades. La función substr devuelve un trozo de una cadena de texto. Tiene 3argumentos: substr(string cadena, int posicionInicial, int longitudcadenadevuelta) Cadena: cadena que introducimos para obtener una parte. PosicionInicial: donde queremos que empiece. 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]; 48/195 ACADEMIA USERO
  • 49. @INTE ACADEMIA Curso de PHPprint(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 delínea nueva. Esto puede ser útil para quitar los errores que pueda cometer el cliente alescribir sus datos. Por ejemplo, la orden:print(trim($varpalabra));imprime el contenido de la variable $varpalabra, quitando todos los caracteressobrantes 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. 49/195 ACADEMIA USERO
  • 50. @INTE ACADEMIA Curso de PHP 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 deotra cadena. Por ejemplo, puede usar esta función para comprobar si existe la arroba cuandoun usuario escribe los datos de un correo electrónico. ereg(“@”,$email) Sesión 11. Enviar archivos al servidor11.1. El formulario Cree el siguiente formulario. El formulario tiene un nuevo tipo de entrada deformulario, una entrada de tipo file que permite seleccionar un archivo, para ello añadeun botón Examinar. 50/195 ACADEMIA USERO
  • 51. @INTE ACADEMIA Curso de PHP11.2. PHPEl código PHP que hay que añadir al fichero de respuesta es el siguiente:<?$target_path="";$target_path = $carpetadestino . basename( $_FILES[fichero][name]);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";}?> 51/195 ACADEMIA USERO
  • 52. @INTE ACADEMIA Curso de PHP11.3. ¿Dónde acaba el fichero?El fichero termina en la carpeta apache dentro de la carpeta donde tenga instaladoEASYPHP. Sesión 13. Enviar archivos a un servidor FTP13.1. El formulario Cree el siguiente formulario. El formulario tiene un nuevo tipo de entrada deformulario, una entrada de tipo file que permite seleccionar un archivo, para ello añadeun botón Examinar. 52/195 ACADEMIA USERO
  • 53. @INTE ACADEMIA Curso de PHP13.2. PHPPedazo de script. Vamos a ver que hace.<?PRIMERO COJO LAS VARIABLES DEL FORMULARIO Y LAS METO ENVARIABLES 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="";DEFINO LA CARPETA TEMPORAL COMO AQUELLA QUE ESPECIFICA ELSERVIDOR HTTP (el apache)$carpetatemporal=basename($_FILES[fichero][tmp_name]);SUBO EL FICHERO AL SERVIDOR HTTP 53/195 ACADEMIA USERO
  • 54. @INTE ACADEMIA Curso de PHPmove_uploaded_file($_FILES[fichero][tmp_name],$carpetatrabajo."/".$carpetatemporal) or die("No puedo subir el fichero a la carpeta de trabajo");AHORA EMPIEZA EL FTPCREO 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 ELFORMULARIOftp_login($conexion, $usuario, $contrasena) or die("Los datos de usuario y contraseñaestán bien");DEFINO LA CONEXIÓN FTP COMO PASIVA: ESTO ES MUY IMPORTANTEftp_pasv( $conexion, true );LE DIGO QUE SUBA EL FICHERO CON LA ORDEN FTP_PUT, ESPECIFICANDOCOMO 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 ARCHIVOCORRECTO Y SI NO PUES SE AVISA DE QUE NO SE HA PODIDO SUBIRif (!$cargar) { print "No puedo subir el fichero";} else { print "Subida exitosa"; 54/195 ACADEMIA USERO
  • 55. @INTE ACADEMIA Curso de PHP}CIERRO LA CONEXIÓNftp_close($conexion);?> Sesión 14. Escribir y leer datos en ficheros14.1. Un caso Cuando los datos son enviados mediante un formulario, podemos hacer queestos sean enviados a un correo electrónico. Esto supone una larga lista de mensajesque responder en el correo. Vamos a hacer que todos los mensajes se escriban en un archivo de texto: estearchivo de texto puede despues ser procesado por un software de respuestaautomática.14.2. Cree el formulario Cree el siguiente formulario. Observe como hay un campo de área de texto. 55/195 ACADEMIA USERO
  • 56. @INTE ACADEMIA Curso de PHP14.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]; 56/195 ACADEMIA USERO
  • 57. @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 finalif($fp=fopen($fichero,"a")) {//si se abre correctamente se escribe en la variable fichero fp el contenidode la variable nombre//rn es un salto de línea fwrite($fp,$nombre."rn");//también se escribe la opinión fwrite($fp,$opinion."rn");}//y luego se cierra el ficherofclose($fp);?>El contenido del fichero opiniones.txt ,que está en el directorio raiz del servidor es elsiguiente:ecececrhnnqsvsrvrvrveccec 57/195 ACADEMIA USERO
  • 58. @INTE ACADEMIA Curso de PHPdfdfdef14.4. El código para leer El fichero está escribo en nuestro servidor. ¿Cómo leerlo desde PHP? Para ellovamos a abrir el fichero con la orden fopen en modo “r”, de forma que solo se lea elfichero. Luego usaremos un bucle cuya condición es que no se haya llegado al final delfichero. Dentro del bucle introduciremos una roden que irá leyendo cada una de laslí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 ficherowhile (!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 ficherofclose($fp); 58/195 ACADEMIA USERO
  • 59. @INTE ACADEMIA Curso de PHP?> Sesión 15. Base de datos MySQL15.1. MySQL Al instalar EasyPHP, instalamos el compilador de PHP y además, un gestor debase de datos como MySQL. Vamos a crear una pequeña base de datos en MySQLpara 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 lasmismas. 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. 59/195 ACADEMIA USERO
  • 60. @INTE ACADEMIA Curso de PHP3. Haga clic en la opción PhpMyAdmin.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. 60/195 ACADEMIA USERO
  • 61. @INTE ACADEMIA Curso de PHP7. En la zona inferior de la siguiente ventana se muestra el resultado exitoso de la creación de la base de datos.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. 61/195 ACADEMIA USERO
  • 62. @INTE ACADEMIA Curso de PHP11. Una vez terminado, haga clic en el botón Grabar.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. 62/195 ACADEMIA USERO
  • 63. @INTE ACADEMIA Curso de PHP3. 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 formularioCree el siguiente formulario de entrada: el usuario introducirá los datos en el formularioy si sus datos son correctos, saltaremos a otra página. 63/195 ACADEMIA USERO
  • 64. @INTE ACADEMIA Curso de PHP15.5. Validar los datos Para validar los datos, vamos a conectarnos a la base de datos, abrir la tabla yvamos a buscar los datos que hemos escrito en la tabla. Si aparecen, dejamos queentre el usuario, si no, pues no lo dejamos.<?//empezar la sesiónsession_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); 64/195 ACADEMIA USERO
  • 65. @INTE ACADEMIA Curso de PHP//nos conectamos a la base de datos$conexion = mysql_connect(localhost, $db_usuario, $db_contrasena) ordie(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 ANDcontrasena=$contrasena";print($consulta);print("<br>");//se ejecuta la consulta$resultado = mysql_query($consulta, $conexion) or die(Error haciendoconsulta);$filasdevueltas=mysql_num_rows($resultado);//si hay una fila, es que está dado de alta, si no, es que no es un usuarioif($filasdevueltas == 1) { print Validado; } else { print No validado; }?> Sesión 16. Insertar y eliminar 65/195 ACADEMIA USERO
  • 66. @INTE ACADEMIA Curso de PHP16.1. Insertar un registro Si tenemos una tabla, tenemos que permitir al usuario introducir datos. Cree elsiguiente formulario:Él código PHP que introduce los datos del formulario en la tabla es el siguiente:<?//empezar la sesiónsession_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) ordie(mysql_error());//seleccionamos la base de datosºmysql_select_db(control, $conexion) or die(mysql_error()); 66/195 ACADEMIA USERO
  • 67. @INTE ACADEMIA Curso de PHP//se crea la cadena de consulta SQL$insercion = "INSERT INTO usuarios SETidusuario=$usuario,contrasena=$contrasena";print($insercion);print("<br>");//se ejecuta la consulta$resultado = mysql_query($insercion, $conexion) or die(Error insertandoregistro);?> El código es similar al que nos permite entrar en nuestra página. La diferenciaestá 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 valorde 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ónsession_start(); 67/195 ACADEMIA USERO
  • 68. @INTE ACADEMIA Curso de PHP// 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$eliminacion="DELETE FROM usuarios WHERE idusuario=$usuario ANDcontrasena=$contrasena";print($eliminacion);print("<br>");//se ejecuta la consulta$resultado = mysql_query($eliminacion, $conexion) or die(Error insertando registro);?> Sesión 17. Buscar17.1. Buscar datos: crear la base de datos Vamos a crear un formulario que busque los datos de una agenda de personasen una base de datos. Cree una base de datos llamada agenda. Dentro de la misma 68/195 ACADEMIA USERO
  • 69. @INTE ACADEMIA Curso de PHPcree una tabla con el nombre persona. Añada a él los campos nombre y teléfono.Inserte en la tabla los siguientes datos.17.2. Crear el formularioAhora cree un formulario para buscar los datos. Vamos a crear un formulario dondepodamos introducir los datos y se nos busque automáticamente el teléfono de lapersona buscada.17.3. El código de búsquedaEste 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ñaPASSWORD$db_usuario = root;$db_contrasena = ; 69/195 ACADEMIA USERO
  • 70. @INTE ACADEMIA Curso de PHP//leer los datos en variables$nombre=$_POST[nombre];//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(Errorbuscando);//contamos las filas devueltas$filasdevueltas=mysql_num_rows($resultado);//si no hay filas devueltas es que no se ha encontradoif ($filasdevueltas==0) { print ("No se ha encontrado a la persona en la base dedatos");} else { 70/195 ACADEMIA USERO
  • 71. @INTE ACADEMIA Curso de PHP//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); //e imprimirmos el campo teléfono del array print($fila["telefono"]);}?>17.4. Nuevos códigosMysql_fetch_array extrae los resultados de la sentencia SQL como una matrizasociativa. En una matriz asociativa cada fila tiene un nombre, en este caso losnombres son los nombre de los campos. nombre juan telefono 952555555Una vez obtenidos los datos del array podemos acceder a estos datos como en unarray. El código $fila[“telefono”] permite imprimir el teléfono. Sesión 18. Headers18.1. ¿Qué son los headers?Son cabeceras de las páginas que permiten especificar ciertos datos sobre lasmismas. Observe como, al crear una nueva página web con Dreamweaver, se añadenalgunos 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. 71/195 ACADEMIA USERO
  • 72. @INTE ACADEMIA Curso de PHP18.2. Headers en PHPLa sintaxis de un header en PHP es la siguiente:Header (nombrecabecer;valorcabecera);18.3.Ejemplo: enviar a otra páginaCuando 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. Elsiguient 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 indiquemos18.4. Ejemplo: tipo de documentoPodemos establecer el tipo de documento que será enviado al navegador. Este valorhace 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 documentoPodemos hacer que el usuario, al descargar un archivo, tenga un cuadro de diálogodonde 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 aque se muestre el cuadro de diálogo con el header Content-Disposition. 72/195 ACADEMIA USERO
  • 73. @INTE ACADEMIA Curso de PHPPrimero hemos creado un archivo con dos enlaces, el primero un enlace a la páginadespdf.php que contiene las cabeceras indicadas anteriormente y otro enlace normalal archivo archivo.pdf. Si hacemos clic en el segundo enlace, se nos abre el archivoPDF dentro del navegador si tenemos instalada la aplicación Acrobat Reader.El archivo despdf.php tiene el siguiente aspecto:<?php// enviaremos un tipo de archivo PDFheader(Content-type: application/pdf);// Se va a llamar archivo.pdfheader(Content-Disposition: attachment;filename="descarga.pdf");// La fuente del PDF se encuentra en original.pdfreadfile(archivo.pdf);?>Cuando hacemos clic en el primer enlace, se nos muestra la siguiente ventana: 73/195 ACADEMIA USERO
  • 74. @INTE ACADEMIA Curso de PHP18.6. Evitar que una página sea cacheadaPuede evitar que una página sea cacheada usando el siguiente código:<?// From PHPLib library (http://phplib.netuse.de/. Released underLGPL)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. EsperarLa siguiente página espera 3 segundos para cargar otra página y muestra un mensajede espera:<?phpheader( refresh: 3; url=http://www.nba.com );echo <h1>Espera 3 segundos</h1>;?> 74/195 ACADEMIA USERO
  • 75. @INTE ACADEMIA Curso de PHPHeaders Already Sent” ErrorYou may encounter an error message that looks like this:Warning: Cannot modify header information - headers already sent by (output startedat C:Program FilesApache GroupApache2testheadererror.php:1) in C:ProgramFilesApache GroupApache2testheadererror.php on line 2This is a common error when working with sessions and cookies. It can occur if you try to set them afteryou have sent HTML code to the server. The server has to deal with these before any HTML output issent to the server, which means that these lines must be the first in the code before any HTML code orecho statement. If you have even a trailing leading space before your first <?php line of code, you willsee this error.590Chapter 17If you need to set cookie or session variables within the body of your code, you need to rethink yourlogic to accommodate this limitation. As we discuss in Chapter 2, those variables need to be addressed atthe 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 outputbuffer is used to store all HTML output in a buffer until you are ready to send it to the browser. Thecommand ob_start is used to begin the output buffering process, and ob_end_flush will send all ofthe stored HTML output to the browser, empty the buffer, and end the output storing process. This willlet you cheat the system and store session and cookie variables in the body of the code, as well as allowyou to use the header(“location:”) function in the body of the code. While this is not recommendedfor beginners, as it is more important for you to learn to code well, and according to the “rules,” this canbe a useful set of functions for a more experienced programmer. If you would like to learn more aboutthe output buffer functions, you can find a complete list of them in Appendix C, or visit www.php.net. Sesión 19. Cookies 75/195 ACADEMIA USERO
  • 76. @INTE ACADEMIA Curso de PHP19.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 delvisitante de una página web a través de su navegador, a petición del servidor de lapágina. Esta información puede ser luego recuperada por el servidor en posterioresvisitas.Las principales utilidades de una cookie son: Controlar los usuarios que entran en una página Dar opciones de diseño a los usuarios19.2. Introducir el nombrePor ejemplo, podemos hacer una cookie que recuerde nuestro nombre. Cree elsiguiente formulario.19.3. Guardar el dato introducidoLa siguiente página guarda el nombre introducido en una cookie. Observe comohemos 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"> 76/195 ACADEMIA USERO
  • 77. @INTE ACADEMIA Curso de PHP<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Documento sin t&iacute;tulo</title></head><body>Hola, tu nombre es<?print $_GET[nombre];?></body></html>19.4. Recuperar el valorLa siguiente página recuperar el valor de la cookie y la muestra en el navegador:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Documento sin t&iacute;tulo</title> 77/195 ACADEMIA USERO
  • 78. @INTE ACADEMIA Curso de PHP</head><body>Tiene una cookie llamada NOMBRE y su valor es<?print ($_COOKIE["usuario"]);?></body></html>19.5. Color de fondoLas siguientes páginas permiten cambiar el color de fondo de las páginas según unacookie establecida:Formulario para seleccionar el colorScript que graba la cookie con el color<?php setcookie("fondo",$_GET[fondo]);?> 78/195 ACADEMIA USERO
  • 79. @INTE ACADEMIA Curso de PHP<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Documento sin t&iacute;tulo</title></head><body>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 79/195 ACADEMIA USERO
  • 80. @INTE ACADEMIA Curso de PHP20.1. Require 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 yentra en modo HTML al principio del archivo requerido, después vuelve al modo PHPal final. Así, los códigos dentro del archivo requerido que deban ser ejecutados comoPHP deben ser encerrados dentro de etiquetas de comienzo y fin de PHP. Una sentencia condicional no afecta a require(): un require() siempre lee elarchivo referenciado, incluso si la línea en que se encuentra no se ejecuta nunca. Si sequiere incluir condicionalmente un archivo, se usa include(). Lo mismo ocurre con los bucles: aunque el código contenido en el archivoreferenciado esté en un bucle, el require() sólo se ejecuta una vez. No se puede ponerun require() en una estructura de bucle y esperar que incluya un archivo distinto encada iteración. Puede usar include() para ello.20.2 Crear el sitio1. 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. 80/195 ACADEMIA USERO
  • 81. @INTE ACADEMIA Curso de PHP4. 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/nombredetucarpeta6. No usaremos un servidor remoto. 81/195 ACADEMIA USERO
  • 82. @INTE ACADEMIA Curso de PHP7. Para terminar, haga clic en el botón Finalizar.20.3. Crear la cabecera y el pieUsando las imágenes cabecera.jpg y pie.jpg cree las siguientes páginas. 82/195 ACADEMIA USERO
  • 83. @INTE ACADEMIA Curso de PHP20.4 Crear la página centralUse Dreamweaver para crear el contenido de la página que irá en el centro y guárdelacon 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> 83/195 ACADEMIA USERO
  • 84. @INTE ACADEMIA Curso de PHP <td><p>Este es el contenido de la p&aacute;gina. Aqu&iacute;puedo dise&ntilde;ar con total libertad.</p> <p>a</p> <p>c</p> <p>d</p> <p>&nbsp; </p></td> </tr> <tr> <? require("pie.html");?> </tr></table>20.5. IncludePuede usar include() con un array y un bucle para incluir varios archivos en una páginaweb.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.incy tercero.inc. 84/195 ACADEMIA USERO
  • 85. @INTE ACADEMIA Curso de PHPLa diferencia entre include y require es que include se vuelva a calcular cada vez quese 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> <td><p>Este es el contenido de la p&aacute;gina. Aqu&iacute;puedo dise&ntilde;ar con total libertad.</p> <p>a</p> <p>c</p> <p>d</p> <p>&nbsp; </p></td> </tr> <tr> <? include("pie.html");?> 85/195 ACADEMIA USERO
  • 86. @INTE ACADEMIA Curso de PHP </tr></table> Sesión 21. Sesiones21.1. Sesiones Las sesiones nos permiten mantener información entre las páginas cuando unusuario está navegando. Esto nos permite, por ejemplo, guardar las compras que haceen una tienda virtual para cobrarle al final. Las sesiones permiten guardar algunos datos mientras el usuario está activo, demodo 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 ejemploEl siguiente código permite crear un contador que vaya indicando cuantas páginashemos 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 comienzauna sesión y crea una variable de sesión nueva.es2.php.net 86/195 ACADEMIA USERO
  • 87. @INTE ACADEMIA Curso de PHPsession_start() crea una sesión (o la continúa basandose en el session idpasado por GET o mediante una cookie).Si desea usar una sesión con un nombre en concreto, debe llamar asession_name() antes de llamar a session_start()session_register() acepta un número variable de argumentos, cualquiera de loscuales puede ser o una cadena que contiene el nombre de una variable, o una matrizque 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ónLa SID o identificador de sesión nos permite acceder a un identificador único que tienecada sesión dentro del servidor.A continuación puede ver un pequeño programa que crea una sesión, nos imprime elnúmero y luego la destruye.session_destroy() destruye todos los datos asociados con la sesión actual. Nodestruye ninguna de las variables globales asociadas a la sesión ni la cookie.<?session_start();echo SID;session_destroy();?>21.4. Guardar campos de formulariosA continuación tiene los códigos de tres páginas llamadas 01nombre.php,02apellidos.php, 03resultado.php. 87/195 ACADEMIA USERO
  • 88. @INTE ACADEMIA Curso de PHP01nombre.php<?session_start();echo SID;?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Documento sin t&iacute;tulo</title></head><body><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> 88/195 ACADEMIA USERO
  • 89. @INTE ACADEMIA Curso de PHP </p></form><p>&nbsp;</p></body></html>02apellidos.php<?session_register(nombrecillo);$nombrecillo=$_POST[cnombre];$_SESSION["nombrecillo"] = $nombrecillo;print($nombrecillo);?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Documento sin t&iacute;tulo</title></head><body><p>Muy bien <? 89/195 ACADEMIA USERO
  • 90. @INTE ACADEMIA Curso de PHPprint($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></html>03resultado.php<?session_register(apellidos);$nombrecillo=$_SESSION[nombrecillo];$apellidos=$_POST[capellidos];print($apellidos);?> 90/195 ACADEMIA USERO
  • 91. @INTE ACADEMIA Curso de PHP<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Documento sin t&iacute;tulo</title></head><body>Muy bien. Tu nombre es<?echo "$nombrecillo";?>y tu apellido es<?print($apellidos);?></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 formulariollama al archivo 02apellidos.php. Aquí lo primero que se hace es procesar el nombre eintroducirlo en una variable de sesión llamada nombrecillo.session_register(nombrecillo); 91/195 ACADEMIA USERO
  • 92. @INTE ACADEMIA Curso de PHP$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 llamadaapellidos.Además, necesitamos la orden $_SESSION[nombrecillo]; para recuperar el valorde 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. GD22.1. GD 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. 92/195 ACADEMIA USERO
  • 93. @INTE ACADEMIA Curso de PHP4. 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()?>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. 93/195 ACADEMIA USERO
  • 94. @INTE ACADEMIA Curso de PHPLas sesiones nos permiten mantener informEstaación entre las páginas cuando unusuario está navegando. Esto nos permite, por ejemplo, guardar las compras que haceen una tienda virtual para cobrarle al final. Las sesiones permiten guardar algunos datos mientras el usuario está activo, demodo 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<?phpheader("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); 94/195 ACADEMIA USERO
  • 95. @INTE ACADEMIA Curso de PHPImageFilledRectangle($imagen,0,0,99,99,$maroon);ImageFilledRectangle($imagen,100,100,199,199,$white);imagejpeg($imagen);imagedestroy($imagen);?>22.3. Texto en una imagenEl 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áginaSi queremos que nuestra página genere una imagen no tenemos más quellamar al archivo PHP dentro del TAG: 95/195 ACADEMIA USERO
  • 96. @INTE ACADEMIA Curso de PHP<body><img src="textogd.php"></body></html>22.5. Pasar parámetrosPodemos pasar parámetros a un archivo PHP que cree una imagen, para porejemplo, 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 96/195 ACADEMIA USERO
  • 97. @INTE ACADEMIA Curso de PHP g => hexdec(substr($hex, 2, 2)), // 2nd pair 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 isnt 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. Clases22.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 enun coche: un coche tiene un montón de piezas y mecanismos. ¿Es necesario conocer 97/195 ACADEMIA USERO
  • 98. @INTE ACADEMIA Curso de PHPtodos esos aparatos para saber manejar el coche? No. Se nos dejan unos controles ométodos para poder mover el coche: volante, frenos y acelerador. Una clase es algo similar: definimos un objeto mediante una serie depropiedades y métodos y el usuario de la clase solo tiene que conocer esaspropiedades o métodos para usar la clase.22.3. Un ejemplo de clase: la clase PáginaVamos a crear una clase llamada Página que nos permita mostrar una página web apartir 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.<?phpclass Pagina{ //atributos de la clase //para simplificar el ejemplo, cada página solo tendrá estaspropiedades, 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 acrear unos métodos 98/195 ACADEMIA USERO
  • 99. @INTE ACADEMIA Curso de PHP function EstablecerContenido($nuevocontenido) { //this es el objeto actual sobre el que estamostrabajando //en este caso, la página //lo que estamos diciendo es que la propiedad contenidode la página actual //sea la variable que le hemos pasado como parámetroal 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() 99/195 ACADEMIA USERO
  • 100. @INTE ACADEMIA Curso de PHP { //pedazo de truco //cierro el código 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 Vilchez2006</td> 100/195 ACADEMIA USERO
  • 101. @INTE ACADEMIA Curso de PHP </tr> </table><?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"; 101/195 ACADEMIA USERO
  • 102. @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) 102/195 ACADEMIA USERO
  • 103. @INTE ACADEMIA Curso de PHP24.1. ¿Qué es un CMS? Un CMS es un sistema de gestión de contenidos que nos permite publicardistintas noticias a partir de una base de datos. La idea principal de un CMS es tener una serie de redactores que puedan entrary escribir sus noticias. Una vez escrita la noticia, esta va a una base de datos dondese 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 unaplantilla. Así, el aspecto de la página depende de esos archivos.24.2. Instalar WAMPVamos 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. 103/195 ACADEMIA USERO
  • 104. @INTE ACADEMIA Curso de PHP24.3. Crear las tablas1. 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. 104/195 ACADEMIA USERO
  • 105. @INTE ACADEMIA Curso de PHPEsta tabla guardará los escritores, las personas que pueden editar las páginas ypublicar noticias.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: 105/195 ACADEMIA USERO
  • 106. @INTE ACADEMIA Curso de PHPEsta tabla guardará los datos de las páginas.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: 106/195 ACADEMIA USERO
  • 107. @INTE ACADEMIA Curso de PHP11. Inserte los siguientes datos en la tabla writers:12. Inserte los siguientes datos en la tabla writers_permissions:13. A continuación puede ver la estructura de la base de datos: Writer_permissions Pages Writer Code Page Description Keywords Story Keyword Writers Stories Weight Username Id Password Writer Full_name page headline 107/195 ACADEMIA USERO Story_text Picture
  • 108. @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 delos temas.25.2. Cabecera y pie1. 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. 108/195 ACADEMIA USERO
  • 109. @INTE ACADEMIA Curso de PHP2. Una vez creados, haga clic en el botón Editar en ImageReady en la zona inferior del panel de comandos de Photoshop.3. Ahora en ImageReady, haga clic en la herramienta Sector. 109/195 ACADEMIA USERO
  • 110. @INTE ACADEMIA Curso de PHP4. Usando la herramienta Sector, cree tres sectores, uno para cada zona de la página. 110/195 ACADEMIA USERO
  • 111. @INTE ACADEMIA Curso de PHP5. 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.13. Por último, ajuste el tamaño de las celdas.14. Ahora puede usar esta página para su web. 111/195 ACADEMIA USERO
  • 112. @INTE ACADEMIA Curso de PHP15. 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.PHP25.3. Código Vamos a implementar un archivo que va a realizar las operaciones básicas sobrelas tablas de la base de datos, y que nos servirá para el resto de los scripts. Estearchivo se va a llamar db_fns.php. Veamos lo que hace:<?php//connexion a la base de datosfunction db_connect(){ //mysqli permite conectarse a la base de datos content con lacontraseña $handle = new mysqli(localhost, content, password, content); //si no se ha podido conectar devuelve false 112/195 ACADEMIA USERO
  • 113. @INTE ACADEMIA Curso de PHP 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(); //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){ 113/195 ACADEMIA USERO
  • 114. @INTE ACADEMIA Curso de PHP //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); //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>"; 114/195 ACADEMIA USERO
  • 115. @INTE ACADEMIA Curso de PHP $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>"; } $select .= "</select>n"; return($select);}?> 115/195 ACADEMIA USERO
  • 116. @INTE ACADEMIA Curso de PHP 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 archivodb_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;}26.2. Pages de cada storieVamos 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. 116/195 ACADEMIA USERO
  • 117. @INTE ACADEMIA Curso de PHP4. 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.php16. 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.17. Este es el archivo index. Vamos a ver como funciona.<?php//voy a usar el archive db_fns, que tiene los accesos a algunasfunciones importantes como la conexión a la base de datos y otras include_once(db_fns.php); 117/195 ACADEMIA USERO
  • 118. @INTE ACADEMIA Curso de 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 paraconectarme a la base de datos $handle = db_connect();//venga, defino una variable llamada pages_sql que contiene unaconsulta sql que me saca todas las pages (o temas) de la base dedatos ordenadas por code (código) $pages_sql = select * from pages order by code;//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 listade pages que dio la consulta anterior, así que, mientras hayas masfilas, sigo sacando pages, cuando ya no haya más filas, se sale delbucle while while ($pages = $pages_result->fetch_assoc()) { 118/195 ACADEMIA USERO
  • 119. @INTE ACADEMIA Curso de PHP //otra consulta para sacar todas las historias de undeterminado tema, selecciona las historias con la condición de quepertenezcan a un tema determinado, que viene determinado por elcampo CODE de la variable pages, que contiene la lista de temas delas páginas//otra condición es que la condición Publisher (publicado) no seanula//también se ordenan los datos por fecha de publicación en ordendescendente $story_sql = "select * from stories where page = {$pages[code]} and published is not null order by published desc";//se crea una variable llamada story_result que guarda elresultado 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 storiesde una page $story = $story_result->fetch_assoc(); 119/195 ACADEMIA USERO
  • 120. @INTE ACADEMIA Curso de PHP//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]}> 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 ala imagen echo <img src="resize_image.php?image=;//pongo la URL de la imagen en código URL con la funciónurlencode 120/195 ACADEMIA USERO
  • 121. @INTE ACADEMIA Curso de PHP 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);?>26.4. El archivo resize_image.phpPara que se vean las imágenes, es necesario activar la extensión GD que vimos enanteriores sesiones.1. Haga clic en el icono de WAMP SERVER.2. Haga clic en PHP EXTENSIONS3. Haga clic en php_gd2 121/195 ACADEMIA USERO
  • 122. @INTE ACADEMIA Curso de PHP4. 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. 122/195 ACADEMIA USERO
  • 123. @INTE ACADEMIA Curso de PHP6. El resultado será similar al siguiente:7. A continuación tiene el código del script que cambia el tamaño de la imagen:<?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 123/195 ACADEMIA USERO
  • 124. @INTE ACADEMIA Curso de PHP $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];//para cambiar el tamaño, necesito la relación entre los dostamaños//así que las divido $x_ratio = $max_width / $width; $y_ratio = $max_height / $height; 124/195 ACADEMIA USERO
  • 125. @INTE ACADEMIA Curso de PHP//si el ancho es menor que el ancho máximo y el alto menor que elalto 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);//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 estafunció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 125/195 ACADEMIA USERO
  • 126. @INTE ACADEMIA Curso de PHP 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 oPAGE. 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])) {//si no existen, se va directamente a la página principal index.php header(Location: index.php);//y se sale del programa exit; } 126/195 ACADEMIA USERO
  • 127. @INTE ACADEMIA Curso de PHP//si están establecidas page e story entonces introduzco estos valores ensendas variables $page = $_REQUEST[page]; $story = intval($_REQUEST[story]);//hago uso del archive db_fns.php que tiene algunos scripts importantespara 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 historiaen concreto if($story) {//hago una consulta sobre la base de datos para seleccionar la historiasiempre que haya sido publicada $query = "select * from stories where id = $story and published is not null"; } Else 127/195 ACADEMIA USERO
  • 128. @INTE ACADEMIA Curso de PHP//si no he especificado una historia en concreto, estoy buscando sobre untema, 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 resultadode 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;">; echo <img src="resize_image.php?image=; echo urlencode($story[picture]); echo &max_width=200&max_height=120" align =right/></div>; 128/195 ACADEMIA USERO
  • 129. @INTE ACADEMIA Curso de PHP } // 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áginasdonde 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><head><title>Menú Administración</title></head> 129/195 ACADEMIA USERO
  • 130. @INTE ACADEMIA Curso de PHP<body><h1>Menú Administración</h1><ul> <li>Escritores - <a href = writer.php>Añadir/Editarhistorias</a></li> <li>Editores - <a href = publish.php>Publicar/No PublicarHistorias</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.phpEl archivo writer.php permite a los escritores gestionar las historias. Vamos a ver comofunciona.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.<?php // All the include files for admin pages in the site include_once(../db_fns.php); 130/195 ACADEMIA USERO
  • 131. @INTE ACADEMIA Curso de 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 losescritores cuyo nombre de usuario y contraseña coincidan con losparámetros de la función $result = $handle->query("select * from writers where username=$username and password = SHA1($password)"); 131/195 ACADEMIA USERO
  • 132. @INTE ACADEMIA Curso de PHP//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 if (isset($_SESSION[auth_user])) 132/195 ACADEMIA USERO
  • 133. @INTE ACADEMIA Curso de PHP {//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 susdatos 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> <td>Contraseña</td> 133/195 ACADEMIA USERO
  • 134. @INTE ACADEMIA Curso de PHP <td><input size=16 type=passwordname=password></td> </tr> </table> <input type=submit value=Log in> </form> <?php }//esta función comprueba si el usuario tiene permiso para modificar lahistoria 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 134/195 ACADEMIA USERO
  • 135. @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. 135/195 ACADEMIA USERO
  • 136. @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 estemomento 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 laid 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 136/195 ACADEMIA USERO
  • 137. @INTE ACADEMIA Curso de PHP Las palabras clave nos permiten buscar noticias dentro de nuestro sitio. Cadapágina tendrá unas palabras clave con un peso determinado, que determina laimportancia del sitio con respecto a esa palabra clave. Vamos a ver la página que nos permite asignar palabras clave y pesos a unanoticia, 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(); 137/195 ACADEMIA USERO
  • 138. @INTE ACADEMIA Curso de PHP//meto en una variable los datos de la store que estoy modificando $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 eltí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> 138/195 ACADEMIA USERO
  • 139. @INTE ACADEMIA Curso de PHP <option>3</option> <option>2</option> <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]} 139/195 ACADEMIA USERO
  • 140. @INTE ACADEMIA Curso de PHP </td><td> {$keyword[weight]} </td><td>//y con un enlace para borrarlas. [<ahref=keyword_delete.php?story=$story_code&keyword="; echo urlencode($keyword[keyword]); echo ">del</a>] </td></tr>"; } echo </table>; } }?>29.3. El archivo KEYWORD_ADD.PHPEste archivo añade las palabras clave que introducimos.<?php include_once(include_fns.php); $handle = db_connect(); $story = $_REQUEST[story]; 140/195 ACADEMIA USERO
  • 141. @INTE ACADEMIA Curso de PHP $keyword = $_REQUEST[keyword]; $weight = $_REQUEST[weight]; if(check_permission($_SESSION[auth_user], $story)) {//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.PHPEste archivo borra una palabra clave de la historia.<?php include_once(include_fns.php); $handle = db_connect(); $story = $_REQUEST[story]; 141/195 ACADEMIA USERO
  • 142. @INTE ACADEMIA Curso de PHP $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 $query = "delete from keywords where story = $story andkeyword = $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. Adiferencia de los anteriores, debe ser accesible a todos los usuarios, así que no debeestar 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"> 142/195 ACADEMIA USERO
  • 143. @INTE ACADEMIA Curso de PHP <input name="keyword" size=20> <input type="submit" value="Buscar"> </form><?php include_once(footer.php); ?>30.2. El archive SEARCH.PHPEste archive es el que se ejecuta cuando buscamos una noticia, y muestra las noticiassegún el peso que tengan asignadas.<?php include_once(db_fns.php); include_once(header.php); 143/195 ACADEMIA USERO
  • 144. @INTE ACADEMIA Curso de PHP $handle = db_connect(); if ($_REQUEST[keyword]) {//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]." "; 144/195 ACADEMIA USERO
  • 145. @INTE ACADEMIA Curso de PHP } } //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, 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()) 145/195 ACADEMIA USERO
  • 146. @INTE ACADEMIA Curso de PHP { echo "<tr><td><a href=page?story={$matches[id]}> {$matches[headline]} </td><td>"; echo floor($matches[score]).%; echo </td></tr>; } echo </table>; } else { echo No matching stories found; } include_once(footer.php);?>30.3. El archivo PUBLISH.PHPEste archivo nos permite publicar las noticias y editarlas.<?php 146/195 ACADEMIA USERO
  • 147. @INTE ACADEMIA Curso de PHP include_once(include_fns.php);//compruebe que el usuario pueda entrar en la base de datos if (!check_auth_user()) { login_form(); } else { $handle = db_connect(); $writer = get_writer_record($_SESSION[auth_user]); echo <p>Bienvenido, .$writer[full_name]; echo (<a href="logout.php">Logout</a>) (<ahref="index.php">Menú</a>) (<a href="../">Sitio Público</a>)</p>;//hago una consulta para mostrar todas las historias de un determinadoautor $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); 147/195 ACADEMIA USERO
  • 148. @INTE ACADEMIA Curso de PHP 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>; echo $story[headline]; echo </td><td>; echo date(d / m, H:i, $story[modified]); echo </td><td>; if ($story[published]) { echo [<ahref="unpublish_story.php?story=.$story[id].">nopublicar</a>] ; } else { echo [<ahref="publish_story.php?story=.$story[id].">publicar</a>] ; echo [<ahref="delete_story.php?story=.$story[id].">borrar</a>] ; } echo [<a href="story.php?story=.$story[id].">editar</a>] ; 148/195 ACADEMIA USERO
  • 149. @INTE ACADEMIA Curso de PHP echo </td></tr>; } echo </table>; }?> Sesión 31. Crear un CMS (VII) y fin31.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]; 149/195 ACADEMIA USERO
  • 150. @INTE ACADEMIA Curso de PHP//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); } header(Location: .$_SERVER[HTTP_REFERER]);?>31.2. El fichero unpublish_story.phpEste fichero coloca la fecha de publicación a NULL, de modo que la historia deja deestar como publicada. Es similar al anterior, lo único que cambia es que coloca lafecha de publicación a NULL.<?php // unpublish_story.php -- action a release, go back to release.php include_once(include_fns.php); 150/195 ACADEMIA USERO
  • 151. @INTE ACADEMIA Curso de 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); } header(Location: .$_SERVER[HTTP_REFERER]);?> 151/195 ACADEMIA USERO
  • 152. @INTE ACADEMIA Curso de PHP31.3. El fichero delete_story.phpEste fichero borra la historia seleccionada.<?php // delete_story.php include_once(include_fns.php); $handle = db_connect(); $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áficos32.1. Gráfico Vamos a hacer un script que tome los datos de una encuesta y los muestre enun gráfico. Lo primero que tenemos que hacer es crear la base de datos y la tabla quecontendrá las distintas opciones de la encuesta. 152/195 ACADEMIA USERO
  • 153. @INTE ACADEMIA Curso de PHP1. 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: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. 153/195 ACADEMIA USERO
  • 154. @INTE ACADEMIA Curso de PHP<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><input type=radio name=votevalue="Shakespeare">Shakespeare<br><input type=radio name=votevalue="Lovecraft">Lovecraft<br><br><input type=submit value="Mostrar gráfico"></form></body></html> 154/195 ACADEMIA USERO
  • 155. @INTE ACADEMIA Curso de PHP32.3. El archivo show_poll.php<?/******************************************* Petición a la base de datos para obtener la información de laencuesta*******************************************/// hacer log in en la base de datos//cojo el escritor votado del formulario$vote=$_POST[vote];//me conecto a la base de datosif (!$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 155/195 ACADEMIA USERO
  • 156. @INTE ACADEMIA Curso de PHP{ $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; }};// 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); 156/195 ACADEMIA USERO
  • 157. @INTE ACADEMIA Curso de PHP// calcular el número total de votos hasta ahora$total_votes=0;//cuento el número total de votoswhile ($row = mysql_fetch_object ($result)){ $total_votes += $row->nvotos;}mysql_data_seek($result, 0); // resetear el resultado/******************************************* Cálculo inicial para el gráfico*******************************************/// configurar constantes$width=500; // ancho de la imagen en pixeles - encajará en640x480$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 157/195 ACADEMIA USERO
  • 158. @INTE ACADEMIA Curso de PHP$small_size= 12; // puntos$text_indent = 10; // posición para las etiquetas de texto a laizquierda// configurar el punto inicial desde el cual dibujar$x = $left_margin + 60; // colocar la línea de base para dibujar delgráfico$y = 50; // lo mismo$bar_unit = ($width-($x+$right_margin)) / 100; // un "punto" enel gráfico// 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); 158/195 ACADEMIA USERO
  • 159. @INTE ACADEMIA Curso de PHP$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 dibujarImageFilledRectangle($im,0,0,$width,$height,$bg_color);// Dibujar borde en torno al lienzoImageRectangle($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; // centrarloen y 159/195 ACADEMIA USERO
  • 160. @INTE ACADEMIA Curso de PHPImageTTFText($im, $title_size, 0, $title_x, $title_y, $text_color, $font, $title);// Dibujar una línea de base un poco por encima de la primeralocalización de la barra// a un poco por debajo de la últimaImageLine($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 lasbarras correspondienteswhile ($row = mysql_fetch_object ($result)){ if ($total_votes > 0)//cojo cada una de las cantidades y las divido entre el número totalde 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), 160/195 ACADEMIA USERO
  • 161. @INTE ACADEMIA Curso de PHP $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 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 161/195 ACADEMIA USERO
  • 162. @INTE ACADEMIA Curso de PHP 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);/******************************************* Limpiar*******************************************/ImageDestroy($im);?> Sesión 33. PDF33.1. PDF 162/195 ACADEMIA USERO
  • 163. @INTE ACADEMIA Curso de PHP Vamos a aprender a crear ficheros PDF con PHP. Para ello primero nos vamosa descargar un pequeño script que nos permite hacerlo fácilmente.1. Entre en la página fpdf.org2. Descargue el script a una carpeta de su ordenador3. Cree un nuevo sitio llamado pdf y descomprima dentro el script que acaba de descargar. 163/195 ACADEMIA USERO
  • 164. @INTE ACADEMIA Curso de PHP4. Cree un nuevo archivo llamado prueba1.php y pruebe el siguiente código.<?phprequire(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();?>5. Ahora añada la siguiente línea al programa y compruebe el resultado:<?phprequire(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); 164/195 ACADEMIA USERO
  • 165. @INTE ACADEMIA Curso de PHP$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 funcionesheader y footer se ejecutan automáticamente y añaden la cabecera y el pie aldocumento.<?phprequire(fpdf.php);class PDF extends FPDF{//Cabecera de páginafunction Header(){ //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); 165/195 ACADEMIA USERO
  • 166. @INTE ACADEMIA Curso de PHP //Salto de línea $this->Ln(20);}//Pie de páginafunction 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);}}//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); 166/195 ACADEMIA USERO
  • 167. @INTE ACADEMIA Curso de PHP$pdf->Output();?>Funciones usadas:Image: Imprime una imagen en la página. Las coordenadas de la esquina superiorizquierda deben especificarse.SetFont: Establece la fuente usada para imprimir cadenas de carácteres. Esobligatorio invocar este método por lo menos una vez antes de imprimir texto o eldocumento resultante no será válido.La fuente puede ser una estándar o una adicionada via el método AddFont(). Lafuentes 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 mantenidode página a página.Si sólo desea cambiar el tamaño de la fuente actual, es más simple invocarSetFontSize().Cell: Imprime una celda (de área rectangular) bordes opcionales, color de fondo ysecuencia de carácteres La esquina superior izquierda de la celda corresponde a laposición actual. El texto puede ser alineado o centrado. Despues de invocar, laposición actual se desplaza a la derecha o la siguietne línea. Es posible poner unareferencia en el texto.Si esta el salto de página automático habilitado y la celda esta por fuera del límite, esrealizado 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 elmomento que el documento se cierre. Sesión 34. Foro34.1. Foro: la base de datos 167/195 ACADEMIA USERO
  • 168. @INTE ACADEMIA Curso de PHP Vamos a crear un foro donde los usuarios puedan ir dejando noticias ycomentarios.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; 168/195 ACADEMIA USERO
  • 169. @INTE ACADEMIA Curso de PHPEjecute 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-0000:00:00,2,0,0000-00-00 00:00:00);INSERT INTO foro VALUES (2,federico,Otra prueba bedelesca,SEguimos metiendomensajes que no sirven para nada‟,2003-05-02 00:14:47,3,0,2003-05-02 00:14:47);34.2. El archivo configuracion.phpEste archivo contiene la conexión a la base de datos. 169/195 ACADEMIA USERO
  • 170. @INTE ACADEMIA Curso de PHP<?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);?>34.3. El archivo funciones.phpEste 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 decita (quote).<?phpfunction mostrarTemplate($tema, $variables){ 170/195 ACADEMIA USERO
  • 171. @INTE ACADEMIA Curso de PHP //var_dump($variables); extract($variables); eval("?>".$tema."<?");}function parsearTags($mensaje){ $mensaje = str_replace("[citar]", "<blockquote><hrwidth=100% size=2>", $mensaje); $mensaje = str_replace("[/citar]", "<hr width=100%size=2></blockquote>", $mensaje); return $mensaje;}?> 171/195 ACADEMIA USERO
  • 172. @INTE ACADEMIA Curso de PHP34.4. El archivo header.htmlEste archivo es la cabecera de todas las páginas.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//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 { font-family: Arial, Helvetica, sans-serif; color: #FFFFFF;}a{ text-decoration: none;}--></style> 172/195 ACADEMIA USERO
  • 173. @INTE ACADEMIA Curso de PHP</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> ] [ <ahref="respuesta.php">Nuevo Tema</a> ]</div></td> </tr></table>34.5. El archivo footer.htmlEste es el archivo que va al final de cada página.<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> 173/195 ACADEMIA USERO
  • 174. @INTE ACADEMIA Curso de PHP</html>34.6. El archivo index.phpEste es el archivo principal. Lista las noticias del foro.<?phprequire(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_respuestaDESC";$rs = mysql_query($sql, $con);if(mysql_num_rows($rs)>0){ // 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; 174/195 ACADEMIA USERO
  • 175. @INTE ACADEMIA Curso de PHP mostrarTemplate($template, $row); }}include(footer.html);?> Sesión 35. Usar Google35.1. Lo que vamos a hacer Vamos a usar el servicio de Google SOAP Search API para hacer uso deGoogle dentro de nuestras aplicaciones. Una API (del inglés Application Programming Interface - Interfaz deProgramación de Aplicaciones) es un conjunto de especificaciones de comunicaciónentre componentes software. La API que vamos a usar nos permite acceder albuscador Google y enviarle órdenes de búsqueda desde nuestros propios programas.35.2. Primero darse de altaLo primero que tenemos que hacer es darnos de alto en el servicio. Sin darnos de altano podemos usar ninguno de los servicios.1. Entre en la siguiente página. www.google.com/apis/2. Primero bájese el Developer`s kit (kit del desarrollador). 175/195 ACADEMIA USERO
  • 176. @INTE ACADEMIA Curso de PHP3. Descargue el archivo.4. Aquí tiene el contenido del archivo. Dentro de él tiene información sobre como conectar la API con Java. 176/195 ACADEMIA USERO
  • 177. @INTE ACADEMIA Curso de PHP5. 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. 177/195 ACADEMIA USERO
  • 178. @INTE ACADEMIA Curso de PHP7. Ahora entre en su cuenta de correo y siga las instrucciones que se le han enviado para dar de alta la cuenta. 178/195 ACADEMIA USERO
  • 179. @INTE ACADEMIA Curso de PHP8. 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. 179/195 ACADEMIA USERO
  • 180. @INTE ACADEMIA Curso de PHP35.3. Activar SOAPSOAP es un servicio que no viene activado por defecto. Hay que activarlo añadiendouna línea al archivo php.ini que está dentro de la carpeta bin de la carpeta Apache2del servidor WAMP.La línea es la siguiente:;extension=php_pdo_oci8.dll;extension=php_pdo_odbc.dll;extension=php_pdo_pgsql.dllextension=php_sqlite.dllextension=php_soap.dllUna vez activado, reinicie el servidor WAMP,entre en LOCALHOST y compruebe quese 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 dont 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. 180/195 ACADEMIA USERO
  • 181. @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 Pearpackages,// 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 Googlesearch. // The parameters array has to be passed by reference. // The parameters are well documented in the developers kit onthe // Google site http://www.google.com/apis $params = array( key => $key, // the Developers key q => $query, // the search query start => 0, // the point in the search resultsshould Google start maxResults => 1, // the number of search results(max 10) filter => false, // should the results be filtered? restrict => , safeSearch => false, lr => , ie => , oe => ); // Heres 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)) { 181/195 ACADEMIA USERO
  • 182. @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 theobject $ret. // The following block of code prints // out the structure and contents of the object to thescreen: print("n<br><pre>"); print_r( $ret ); print("</pre><br>n"); // in this example, the only thing we need from thesearch 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 afterretrying several times. Please check that the Google Developers Keyyou entered was correct. To obtain a developers key or for moreinformation on the Google API, visit <ahref="http://www.google.com/apis/">Google API homepage</a>.<br>n"); } return $result;}//////////////////////////////////////////////////////////// The main part of this scriptprint("<html>n<head>n<title>Google API Example with PHP, SOAP, andWeb Services</title>n</head>n<body>"); 182/195 ACADEMIA USERO
  • 183. @INTE ACADEMIA Curso de PHPprint("<h1>Google API Example Using PHP</h1><p>For more info on the Google API, visit the <ahref="http://www.google.com/apis">Google developers page</a></p>");if ( $key == "" ){ /* You get a developers key when you register to use GooglesAPI. A developers key is a unique string that identifies you toGoogle. You get a maximum of 1000 searches per day using yourdevelopers key. */ $key = thisIsNotaRealKeyBQSgnSiZySpQmfd1wqG; // put yourdevelopers key here.}if( $query != "" ){ // remove the slashes that are automatically added by PHPbefore each quotation mark $query = stripslashes($query); if( search( $query, $key, $num ) ) { print("<h2>Search results</h2>n<p>The estimated numberof 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 WebServices:</h2><p><form method="POST" action="apiexample.php"> <p>Search Query <input type="text" name="query" size="20"></p> <p>Google Developers 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 <ahref="http://www.sfu.ca/~gpeters">Geoff Peters</a>, creator of <ahref="http://www.googleduel.com/">GoogleDuel</a> and <ahref="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>");?> 183/195 ACADEMIA USERO
  • 184. @INTE ACADEMIA Curso de PHP Sesión 36. Usar clases externas: traducir36.1. Darse de alta1. 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ódigo1. 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. 184/195 ACADEMIA USERO
  • 185. @INTE ACADEMIA Curso de PHP4. 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 CURLEsta 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:wampApache2bin.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.dll3. Reinicie los servidores. Ahora haga una vista previa del archivo example.php. 185/195 ACADEMIA USERO
  • 186. @INTE ACADEMIA Curso de PHP¡¡¡Muy bien!!! El programa hace uso del archivo descargado para traducir una frase afrancés y holandés.36.4. El formularioA continuación tiene el código de un formulario que nos permite escribir un texto queserá traducido más tarde.<html><head><title>traducir</title><link rel="stylesheet" type="text/css"href="estilo.css"/></head><body> 186/195 ACADEMIA USERO
  • 187. @INTE ACADEMIA Curso de PHP<center><table width="550"><tr bgcolor= #FF9933><tdalign="center"><BR><H3>AINTE.COM<BR>"TRADUCTORONLINE"<BR> Formulario</H3></td></tr></td></tr></table></center><FORM METHOD=post ACTION="traductor.php"><P>Texto a traducir: <input type="text" size=30name="mensaje"><P><input type="submit" value="Enviar"></body></html> 187/195 ACADEMIA USERO
  • 188. @INTE ACADEMIA Curso de PHP36.5. Traductor.phpY 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 PHP37.1. Hacer que hablen Vamos a hacer un pequeño programa que envíe una variable a un archivo deFlash. 188/195 ACADEMIA USERO
  • 189. @INTE ACADEMIA Curso de PHP1. Abra Dreamweaver, cree un sitio, y cree un archivo con el nombre hola.php con el siguiente contenido:<?phpecho "mivariable=Hello World";?> Lo único que hace este archivo es definir una variable llamada mivariable ydale el valor Hello World.2. Ahora entre en Flash, cree una nueva película y guárdela con el nombre hola.fla enla 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 textothis.createTextField("display_txt",1,0,0,100,20);//crea un objeto LOADVARS para cargar los datosvar hello_lv:LoadVars = new LoadVars();//si el objeto LOADVARS recibo los datoshello_lv.onLoad = function(success){//si tiene éxitoif(success){//establece el texto del cuadro con el texto de la variablemivariabledisplay_txt.text = this.mivariable;}else{//si no, señala un errortrace("Ha ocurrido un error."); 189/195 ACADEMIA USERO
  • 190. @INTE ACADEMIA Curso de PHP}}//carga el código PHPhello_lv.load("http://localhost/flash/hola.php");37.2. Enviar correo: el archivo PHPCree un nuevo archivo llamado sendmail.php en Dreamweaver y escriba dentro estecó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, CUERPOmail($destMail, $senderSubject, $senderBody);?> 190/195 ACADEMIA USERO
  • 191. @INTE ACADEMIA Curso de PHPLas variables contienen los siguientes datos: 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 Flash1. Cree un nuevo archivo de Flash y guárdelo con el nombre sendmail.fla2. 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. 191/195 ACADEMIA USERO
  • 192. @INTE ACADEMIA Curso de PHP7. Cambie el tamaño de letra a 12.8. Cambie el nombre de la instancia a destMail_txt9. 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_txt11. Modifique la propiedad del campo senderBody_txt a Multilínea y estírela hacia abajo. 192/195 ACADEMIA USERO
  • 193. @INTE ACADEMIA Curso de PHP12. 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. 193/195 ACADEMIA USERO
  • 194. @INTE ACADEMIA Curso de PHP19. 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 desactivadofieldsFilled = 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 unateclaKey.addListener(fieldsFilled);//desactiva el camposend_btn.enabled = false;//este es el objeto que se comunicará con el archivo PHPvar sendMail_lv:LoadVars = new LoadVars()//al soltar el botónsend_btn.onRelease = function(){//establezco las variables a enviar 194/195 ACADEMIA USERO
  • 195. @INTE ACADEMIA Curso de PHPsendMail_lv.destMail = destMail_txt.text;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 PHPsendMail_lv.sendAndLoad("http://localhost/flash/sendmail.php",sendMail_lv, "POST");} 195/195 ACADEMIA USERO