SlideShare una empresa de Scribd logo
@INTE ACADEMIA                                                              Curso de PHP


       Sesión 1. Instalar el servidor y probarlo



1.1.    Instalar servidor
       Para aprender PHP lo primero que tenemos que hacer es instalar un servidor
web en nuestro ordenador, de modo que podamos ejecutar nuestros programas en
PHP antes de subirlos a un servidor.

       Una buena opción que instala todo lo necesario para empezar a trabajar es
easyphp. Vamos a instalarlo.




1. Entre en la siguiente dirección:
                                      www.easyphp.org




2. Haga clic en el enlace Descargas.



                                               1/195                   ACADEMIA USERO
@INTE ACADEMIA                                                                Curso de PHP

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




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




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




                                             2/195                       ACADEMIA USERO
@INTE ACADEMIA                                                                  Curso de PHP




1.2.    Reiniciar y probar el servidor
       Una vez instalado el programa, una de las operaciones más comunes a realizar
es reiniciar el servidor, ya que puede haber veces que modifiquemos algunos
parámetros del mismo y queramos que estén activos.

1. Una vez que arranca EasyPHP, tiene un icono en la barra de tareas y, si hace clic,
   una ventana en el Escritorio con información sobre PHP. Si hace clic en el icono de
   EasyPHP, obtiene el siguiente menú, desde donde puede Reiniciar los servidores.




2. Una vez reiniciado el servidor, vamos a probar si está correctamente instalado el
   programa. Abra Internet Explorer.
3. En el cuadro de dirección, escriba la siguiente dirección:

                              http://localhost
4. Cuando pulse Intro, obtendrá la siguiente ventana, donde se indica que se
   muestran las carpetas en la carpeta raíz del servidor. Se puede borrar el archivo
   de esta página y siempre obtener una copia en index-safe.php.




                                              3/195                        ACADEMIA USERO
@INTE ACADEMIA                                                                Curso de PHP




1.3.    La carpeta del servidor
       Vamos a probar la carpeta del servidor para comprobar que, efectivamente, el
servidor está bien instalado y funcionan nuestras páginas.

1. Si todo ha ido bien y ha instalado EasyPHP, la carpeta donde se guardan los
   archivos de las webs es la siguiente:

        C:Archivos de programaEasyPHP1-8www
2. Entre en esta carpeta.
3. Observe como hay un solo archivo index.php, desde donde puede cargar la página
   de inicio.
4. Cree un nuevo archivo en el bloc de notas con el siguiente contenido y guárdelo
   con el nombre prueba.htm:
<HTML>

<HEAD>

<TITLE>

Página de prueba

</TITLE>

</HEAD>

<BODY>

Esta es la página de prueba

</BODY>

</HTML>



                                              4/195                      ACADEMIA USERO
@INTE ACADEMIA                                                                  Curso de PHP

5. Abra este archivo en el navegador para probarlo.



1.4.    El primer programa en PHP
       Ya que sabemos donde tenemos que poner el archivo para que funcione, vamos
a escribir nuestro primer programa en PHP y vamos a probarlo.

1.     Cree un nuevo archivo llamado primero.php con el bloc de notas y guárdelo en la
       carpeta C:Archivos de programaEasyPHP1-8www
2.     Escriba el siguiente contenido en ese archivo:
<HTML>

<HEAD>

<TITLE>

Página de prueba 1 en PHP

</TITLE>

</HEAD>

<BODY>

<?

print("Hola, esto es PHP");

?>

</BODY>

</HTML>

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




                                               5/195                       ACADEMIA USERO
@INTE ACADEMIA                                                                    Curso de PHP

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




1.5.   Sintaxis
Observe como las ordenes de PHP están encerrados entre los signos <? Y ¿>.
Además, la única orden que hemos escrito en PHP termina en ; como todos los
comandos que usemos en PHP.




1.6.   Tomar datos de formularios
Para poder trabajar en posteriores sesiones, vamos a aprender a tomar datos de
formularios.




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

<HEAD>

<TITLE>

Formulario 1

</TITLE>

</HEAD>

<BODY>

Formulario 1

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

Nombre: <input type= text name=nombre>

Edad: <input type=text name=edad>

<input type=submit>

</BODY>

</HTML>




                                             6/195                         ACADEMIA USERO
@INTE ACADEMIA                                                                   Curso de PHP

2. Ahora entre en el bloc de notas y cree un archivo llamado nombre.php con el
   siguiente código PHP:



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




3. Abra el formulario y pruébelo.




         Sesión 2. Instrucciones condicionales



2.1.     La instrucción IF
       Sea lo que sea que haga, habrá ocasiones en las que sus programas tomarán
decisiones. Por ejemplo, puede decidir cargar una página si el navegador es Internet
Explorer u otra página si el navegador es Mozilla.

       PHP incorpora varias opciones de control de flujo de programa, entre ellas IF.
Vamos a hacer un pequeño programa para aprender su funcionamiento.

1. Cree un formulario con el siguiente aspecto. Observe como tiene un campo de
   texto donde puede introducir el nombre del color:




<HTML>

<HEAD>

<TITLE>

Formulario Color

</TITLE>

</HEAD>




                                              7/195                       ACADEMIA USERO
@INTE ACADEMIA                                                                Curso de PHP

<BODY>

Formulario Color

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

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

<input type="submit">

</BODY>

</HTML>




2. Ahora cree un archivo llamado webcolor.php que va a ser la página de respuesta a
     los datos del formulario:
<HTML>

<HEAD>

<TITLE>

Página con color de fondo en PHP

</TITLE>

</HEAD>

<BODY BGCOLOR=

<?

print("#FFAABB");

?>

</BODY>

</HTML>




3. En principio, hemos hecho una página que solo pone el color de fondo de la página
     entera en la propiedad BGCOLOR del tag BODY. Pruebe el formulario y vea el
     color de fondo.



                                            8/195                        ACADEMIA USERO
@INTE ACADEMIA                                                                      Curso de PHP

TABLA DE COLORES WEB

http://es.wikipedia.org/wiki/Colores_HTML_
(2)

4. Ahora vamos a cambiar el código de modo que, según el contenido del cuadro, se
      muestre un color de fondo u otro. Dentro de la parte de código PHP, borre la orden
      print y escriba lo siguiente.
$varcolor=$_POST['color'];

if ($varcolor=="rojo") {

          print("FF0000");

      } else {

          print("ADFF2F");

      }

5. ORDEN DE ASIGNACIÓN:
      Lo primero que se hace es crear una variable llamada varcolor y se le asigna el
texto que hemos escrito en el formulario:


                                                                                   varcolor

                                                                                   lo que sea


6. Anatomía de un IF:
La orden IF comienza con la palabra if, que significa SI, el condicional. Luego hay que
poner una condición entre paréntesis. Una condición en PHP compara dos valores y
da una respuesta negativa o positiva. En este caso se compara el valor de la variable
varcolor con la constante de texto “rojo”. La variable de texto varcolor contiene el texto
lo que sea y, como no es igual (==) que rojo, pues se ejecute todo lo que está entre
llaves detrás del else (en otro caso).

IF POSITIVO: se cumple la condición           IF   NEGATIVO:      no   se   cumple     la
                                              condición
$varcolor=”rojo”                              $varcolor=”lo que sea”
$varcolor=$_POST['color'];                    $varcolor=$_POST['color'];
if ($varcolor=="rojo") { se cumple            if   ($varcolor=="rojo")       {    NO   se




                                               9/195                             ACADEMIA USERO
@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 edad
introducida.

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




<HTML>

<HEAD>

<TITLE>

Formulario Edad

</TITLE>

</HEAD>

<BODY>




                                            10/195                         ACADEMIA USERO
@INTE ACADEMIA                                                                Curso de PHP

Formulario 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
@INTE ACADEMIA                                                                 Curso de PHP

3. Este código presenta dos grandes diferencias con respecto al anterior. En este
     caso, el código está dentro del BODY, por tanto, lo que se imprima se imprimirá
     dentro de la página. Segundo, la condición ya no tiene un igual, sino un mayor o
     igual. Este programa primero toma la edad que hemos introducido en el formulario
     y la introduce en una variable. Luego, dependiendo del valor de esta variable,
     imprime una cosa u otra en la página.
4. Abra el archivo y pruébelo para comprobar que, efectivamente, según la edad que
     introduzca, se muestra un dato u otro.




     Sesión 3. Condiciones SWITCH y Bucles



8.1.    ELSEIF
Si tiene muchos colores, ha de disponer de una condición múltiple que, dependiendo
del color escrito, muestre un color de fondo u otro.

1.     Cree un formulario para escribir el color y llámele formcolor3.htm
2.     Modifique este formulario de modo que ejecute el archivo elseif.php cuando sea
       enviado.
3.     Ahora escriba el siguiente código en el nuevo archivo elseif.php:
<HTML>


<HEAD>


<TITLE>


Página con color de fondo en PHP


</TITLE>


</HEAD>




                                               12/195                       ACADEMIA USERO
@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 con
un montón de ELSEIF y un ELSE. Hay una instrucción más elegante para hacer lo
mismo, es la instrucción SWITCH.




                                               13/195                          ACADEMIA USERO
@INTE ACADEMIA                                                                Curso de PHP

      La instrucción SWITCH depende del valor de una variable. Según lo que valga
esa variable se ejecutará una acción u otra. Vamos a hacer un ejemplo para ver como
funciona:

1.    Cree un formulario para escribir el color y llámele formcolor4.htm
2.    Modifique este formulario de modo que ejecute el archivo switch.php cuando sea
      enviado.
3.    Escriba este nuevo archivo switch.php
<HTML>


<HEAD>


<TITLE>


Página con color de fondo en PHP


</TITLE>


</HEAD>


<BODY BGCOLOR=


<?


$varcolor=$_POST['color'];


switch ($varcolor) {


case "rojo":


           print("FF0000");


     break;


case "blanco":


           print("FFFFFF");


           break;


case "negro":


           print("000000");


           break;


case "verde":


           print("00FF00");


           break;


default:




                                              14/195                       ACADEMIA USERO
@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 la
contraseña de un usuario. Si el usuario introduce el dato una sola vez y se equivoca,
no podemos permitirlo entrar. Para hacer un programa que pregunte varias veces los
datos del usuario hasta que sean correctos necesitamos un bucle, algo que se repita
hasta que se cumpla una cierta condición.

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


<HEAD>


<TITLE>


While


</TITLE>


</HEAD>


<BODY>


<?


$contador=0;




                                                15/195                        ACADEMIA USERO
@INTE ACADEMIA                                                               Curso de PHP

while ($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 un
operador de asignación.

     La orden while tiene siempre una condición entre paréntesis. En este caso, la
condición es que la variable contador debe ser menor que 10. Luego hay dos órdenes,
un print que imprime en la página el valor de la variable que hemos creado, y un
incrementador, que suma uno a la variable que hemos creado.

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




                                            16/195                        ACADEMIA USERO
@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
@INTE ACADEMIA                                                              Curso de PHP

                                                                       1‟


                                FIN DEL PROGRAMA


Ejercicios.

   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
@INTE ACADEMIA                       Curso de PHP




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


                    19/195        ACADEMIA USERO
@INTE ACADEMIA                                                                 Curso de PHP




4.1.    DO…WHILE
Puede usar la sentencia DO…WHILE si quiere ejecutar el bucle por lo menos una
vez. En este caso, se ejecuta el bucle al menos una vez y luego se comprueba la
condición.

5.     Cree un formulario para escribir el color y llámele formcolor3.htm
6.     Modifique este formulario de modo que ejecute el archivo elseif.php cuando sea
       enviado.
7.     Cree un nuevo archivo llamado dowhile.php con el siguiente código:
<HTML>

<HEAD>

<TITLE>

DO WHILE

</TITLE>

</HEAD>

<BODY>

<?

$contador=0;

do

{

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

        $contador=$contador+1;

        }

while ($contador<=10);

?>

</BODY>

</HTML>


                                               20/195                       ACADEMIA USERO
@INTE ACADEMIA                                                          Curso de PHP

8.   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
@INTE ACADEMIA                                                                  Curso de PHP




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

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

<HEAD>

<TITLE>

DO WHILE

</TITLE>

</HEAD>

<BODY>

<?




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

{

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

       }




?>

</BODY>

</HTML>

2.     La sintaxis del FOR es más compacta, ya que se hace la inicialización de la
       variable, se define la condición y se hace el incremento en una sola línea. La
       estructura es la siguiente:
       for (inicialización variable; condición; incremento o decremento) {


                                                22/195                       ACADEMIA USERO
@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
@INTE ACADEMIA                                                                   Curso de PHP




4.3.    Comentarios
       Los comentarios nos permiten añadir texto donde podemos escribir que es lo que
hace una línea de código y otra información.

       Hay tres tipos de comentarios:

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



       //esto es un comentario




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



       #esto es un comentario




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



       /* este comentario tiene

         varias líneas */




4.4.    Operadores
       Ya sabemos un poco de PHP así que vamos a hacer un pequeño programa que
calcule cuanto cuesta el pedido de un usuario.

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




                                                 24/195                     ACADEMIA USERO
@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
@INTE ACADEMIA                                                                  Curso de PHP

      <td>&nbsp;</td>

     </tr>

 </table>

</form>




El formulario se llama formpedido, llama al archivo procesarpedido.php y tiene 3
cuadros de texto con los nombres ndvd, ncd y ndvdreg.




2.    Ahora tenemos que crear el archivo procesarpedido.php que tiene que tomar los
      datos del formulario, procesarlos y dar una respuesta. Empezamos por lo más
      fácil, cree el siguiente archivo que toma los datos del formulario y los mete en
      variables, además de escribir la fecha del código:



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

<head>

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

<title>Pedido procesado</title>

</head>




<body>


                                              26/195                       ACADEMIA USERO
@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
@INTE ACADEMIA                                                                    Curso de PHP

4.   Ahora vamos a definir los precios de cada artículo. Para definir unos número que
     no van a cambiar durante el programa, se usan constantes. Escriba las
     siguientes 3 líneas de código al final, que definen 3 constantes en el programa.
     define(“PRECIODVD”,1);

     define(“PRECIOCD”,2);

     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
@INTE ACADEMIA                                                                 Curso de PHP




                        Sesión 5. Funciones



5.1.    Funciones
       Una función permite escribir un bloque de código que puede ser usado distintas
veces dentro de un programa. Vamos a ver un ejemplo de uso de las funciones dentro
de un pequeño programa. Vamos a hacer un pequeño programa que nos calcule el
cuadrado de un número y lo ponga en un cuadro.




1. Cree el siguiente formulario:




                                            29/195                        ACADEMIA USERO
@INTE ACADEMIA                                                                  Curso de PHP




2. 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
@INTE ACADEMIA                                                                 Curso de PHP

5. La segunda y más importante, devuelve el valor de la función. Lo que hace es
   devolver el contenido de la variable que calculamos anteriormente y que contiene
   el cuadrado del número.
6. La palabra function lo único que hace es definir la función, luego la tenemos que
   usar. Esto es lo que se produce en la parte principal del programa. Primero se
   toma el contenido del formulario y se introduce en una variable:
                          $varnumero=$_POST['numero'];




7. Luego se llama a la función cuadrado pasando como argumento el contenido de la
   variable y el resultado se imprime en la pantalla:
                     print ("Cuadrado:".cuadrado($varnumero));




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
@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
@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
@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 tablas



8.1.    Funciones y tablas
       Vamos a crear una función que haga una tabla con tantas filas como indique el
número que pasamos como argumento.

1. Cree el siguiente formulario:




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
@INTE ACADEMIA                                                                       Curso de PHP

3. La orden print(“<table border=1>”); imprime en la página el código HTML necesario
     para que comience un tabla.
4. Luego comienza un bucle cuyo contador es la variable i. Se repite tantas veces
     como indica la variable $varnfilas. Luego el contador i se incrementa en uno.
5. Dentro del bucle se produce la impresión de la celda en sí. Además, se introduce
     dentro de la celda la palabra fila y el número del contador, de modo que sabemos
     el número de la fila.




6. ¿Cómo cambiaríamos esto para que la impresión de una fila fuera una función?
     Observe el siguiente código:
<?




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
@INTE ACADEMIA                                                              Curso de PHP

7. Ahora tenemos una función crearTabla que contiene todo el código necesario para
     insertar la tabla en la página web.



6.2.    Tablas con varias columnas
Vamos a hacer un pequeño programa que cree una tabla insertando el número de filas
y columnas.

1. Cree el siguiente formulario:




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




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
@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 que
se introduzca en un formulario.




                                            37/195                        ACADEMIA USERO
@INTE ACADEMIA                                                                 Curso de PHP




                           Sesión 7. Arrays



7.1.    Arrays
       Si vendemos 3 artículos nos puede servir un formulario con 3 filas y ya está,
pero, ¿y si vendemos mil artículos? ¿Cómo hacemos para apuntar todos los artículos
que vamos a vender? Vamos a usar arrays.

       Un array es una variable que puede contener muchos números. Cada número
ocupa una posición dentro del array y puede ser accedido por un número o índice.




                                       Array de amigos

                                Posición                 Amigos
                                   0                     Pedro
                                   1                      Juan
                                   2                     Miguel
                                   3                     Antonio




                                             38/195                       ACADEMIA USERO
@INTE ACADEMIA                                                                    Curso de PHP



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




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

$amigos[0]="Pedro";

$amigos[1]="Juan";

$amigos[2]="Miguel";

$amigos[3]="Antonio";




$i=0;




do {

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

        $i++;

} while ($i<=3);




?>

9. Observe como se definen los valores del array:
        $nombredelarray[número]=valor;

     Se define el nombre del array y, entre corchetes, el número del índice, esto es, la
posición que se va a buscar dentro del array.

10. Luego hemos puesto un bucle desde el que se van imprimiendo los elementos del
     array. El resultado del programa debe ser similar al siguiente:




                                                39/195                       ACADEMIA USERO
@INTE ACADEMIA                                                                 Curso de PHP




7.2.    Contar los elementos del array
       A continuación tiene una modificación del mismo programa donde añadimos una
función que permite contar cuantos elementos tiene el array. Eso se define para luego
usarlo como límite para el bucle FOR.

       <?

       $amigos[0]="Pedro";

       $amigos[1]="Juan";

       $amigos[2]="Miguel";

       $amigos[3]="Antonio";




       $nelementos=count($amigos);




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

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

       };




       ?>




7.3.

                           Sesión 8. Arrays



                                            40/195                        ACADEMIA USERO
@INTE ACADEMIA                                                             Curso de PHP

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




<?

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

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

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

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




reset($jugadores);




foreach($jugadores as $value) {

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

}

?>




8.2.    Ordenar un array: sort
Podemos usar la función sort para ordenar los elementos de un array. Pruebe el
siguiente programa para observar el resultado:




<?


                                            41/195                    ACADEMIA USERO
@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 índices
numé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: asort
Para evitar este problema puede usar el comando asort, que ordena el array junto con
los índices. Pruebe el siguiente programa y compruebe el resultado:

<?

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

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

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

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




                                            42/195                       ACADEMIA USERO
@INTE ACADEMIA                                                                    Curso de PHP



asort($jugadores);




reset($jugadores);




foreach($jugadores as $value) {

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

}




print($jugadores["portero"]);

?>




8.4. Orden inverso

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

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




8.5.   Ordenar por el índice
Ahora cambie la orden asort por la orden ksort(). Esta orden le permite ordenar un
array según el índice.




                                             43/195                          ACADEMIA USERO
@INTE ACADEMIA                                                     Curso de PHP




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

<?

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

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

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

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

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




reset($numeros);




foreach($numeros as $value) {

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

}

$mayor=$numeros[0];

foreach($numeros as $value) {

      if ($value>$mayor) {

            $mayor=$value;

      }

}



                                         44/195                ACADEMIA USERO
@INTE ACADEMIA                                                                Curso de PHP

print($mayor);

?>


                    Sesión 9. Email con PHP



9.1.    Email
       Es bien fácil enviar un email a través de PHP. Lo único que tenemos que tener
en cuenta es que debemos modificar el fichero PHP.INI para especificar el nombre del
servidor SMTP que usaremos para enviar el correo.

1. Para modificar el fichero PHP.INI haga clic en el icono de EASYPHP en la barra de
     tareas.
2. Haga clic en el submenú Configuración.
3. Haga clic en PHP.




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
@INTE ACADEMIA                                                              Curso de PHP




5. Guarde este archivo.



9.2.   El formulario
Ahora cree un formulario con un par de campos de texto cuya acción sea el archivo
email.php.




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

<?

$correo="jluserovilchez@hotmail.com";

$asunto="Este es el asunto";

$redireccion="gracias.html";




$mensaje="";




                                            46/195                     ACADEMIA USERO
@INTE ACADEMIA                                                                 Curso de PHP

foreach($_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 para
probar de nuevo.");

}




?>




9.4.    Como funciona el comando mail()
       Para el comando mail() necesitamos tener la dirección de la persona a la que
queremos enviar el email, el asunto y el mensaje que queremos enviar. Por ello,
hemos definido las variables correo y asunto.

       Luego para el cuerpo del mensaje hemos usado un bucle FOREACH que va
tomando todos los valores del formulario que están dentro de la variable $_POST.

       Una vez llena la variable mensaje, podemos ejecutar el comando mail dentro de
un IF. ¿Por qué? Porque el comando mail devuelve un valor booleano indicando si el


                                                47/195                    ACADEMIA USERO
@INTE ACADEMIA                                                                      Curso de PHP

envío ha sido correcto o no. Aprovechamos esto para imprimir en la página de
respuesta del envío si el mensaje ha sido correctamente enviado.


              Sesión 10. Funciones de cadena



10.1.    Funciones de cadena: substr
        Habrá ocasiones en que tenga que comprobar o modificar algunos datos
introducidos en el formulario para que se ajusten a sus necesidades.

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

        substr(string cadena, int posicionInicial, int longitudcadenadevuelta)

        Cadena: cadena que introducimos para obtener una parte.
        PosicionInicial: donde queremos que empiece.
        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
@INTE ACADEMIA                                                                        Curso de PHP

print(substr($varpalabra,4));

?>

3.      Este código saca todas las letras a la derecha del carácter 4. Si escribimos
        juliancito, el programa devuelve ancito.




10.2. La función trim()

        Elimina al principio y al final los espacios en blanco, tabulaciones y caracteres de
línea nueva. Esto puede ser útil para quitar los errores que pueda cometer el cliente al
escribir sus datos.

        Por ejemplo, la orden:




print(trim($varpalabra));




imprime el contenido de la variable $varpalabra, quitando todos los caracteres
sobrantes a la izquierda y a la derecha.




10.2.    La función strlen()
        Da la longitud de la cadena de caracteres. Por ejemplo:




        Print(strlen($varpalabra)




        Imprimir la longitud de la cadena de caracteres.




10.3.    Las funciones strtolower() y strtoupper()
        Convierten la cadena de texto a minúsculas y mayúsculas.




                                                   49/195                       ACADEMIA USERO
@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 de
otra cadena.

        Por ejemplo, puede usar esta función para comprobar si existe la arroba cuando
un usuario escribe los datos de un correo electrónico.

        ereg(“@”,$email)




         Sesión 11. Enviar archivos al servidor



11.1.    El formulario
        Cree el siguiente formulario. El formulario tiene un nuevo tipo de entrada de
formulario, una entrada de tipo file que permite seleccionar un archivo, para ello añade
un botón Examinar.




                                              50/195                         ACADEMIA USERO
@INTE ACADEMIA                                                                 Curso de PHP




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




<?

$target_path="";

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




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
@INTE ACADEMIA                                                                    Curso de PHP



11.3.    ¿Dónde acaba el fichero?
El fichero termina en la carpeta apache dentro de la carpeta donde tenga instalado
EASYPHP.




    Sesión 13. Enviar archivos a un servidor
                                        FTP



13.1.    El formulario
        Cree el siguiente formulario. El formulario tiene un nuevo tipo de entrada de
formulario, una entrada de tipo file que permite seleccionar un archivo, para ello añade
un botón Examinar.




                                             52/195                          ACADEMIA USERO
@INTE ACADEMIA                                                  Curso de PHP




13.2.   PHP
Pedazo de script. Vamos a ver que hace.




<?

PRIMERO COJO LAS VARIABLES DEL FORMULARIO Y LAS METO EN
VARIABLES CON NOMBRES QUE TENGAN SENTIDO

$servidor = $_POST['servidor'];

$usuario = $_POST['usuario'];

$contrasena = $_POST['contrasena'];




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

$carpetatrabajo="";




DEFINO LA CARPETA TEMPORAL COMO AQUELLA QUE ESPECIFICA EL
SERVIDOR HTTP (el apache)

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




SUBO EL FICHERO AL SERVIDOR HTTP


                                          53/195             ACADEMIA USERO
@INTE ACADEMIA                                                                  Curso de PHP

move_uploaded_file($_FILES['fichero']['tmp_name'],$carpetatrabajo."/".$carpetatempor
al) or die("No puedo subir el fichero a la carpeta de trabajo");




AHORA EMPIEZA EL FTP

CREO LA CONEXIÓN FTP

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




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

ftp_login($conexion, $usuario, $contrasena) or die("Los datos de usuario y contraseña
están bien");




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

ftp_pasv( $conexion, true );




LE DIGO QUE SUBA EL FICHERO CON LA ORDEN FTP_PUT, ESPECIFICANDO
COMO FICHERO EL QUE SE SUBIÓ ANTES AL SERVIDOR HTTP

$cargar=ftp_put($conexion,$_FILES['fichero']['name'],$carpetatrabajo."/".$carpetatemp
oral,FTP_BINARY);




LA VARIABLE CARGAR ES VERDADERA SI SE HA SUBIDO EL ARCHIVO
CORRECTO Y SI NO PUES SE AVISA DE QUE NO SE HA PODIDO SUBIR

if (!$cargar) {

           print "No puedo subir el fichero";

} else {

           print "Subida exitosa";




                                                54/195                       ACADEMIA USERO
@INTE ACADEMIA                                                                      Curso de PHP

}




CIERRO LA CONEXIÓN

ftp_close($conexion);




?>




    Sesión 14. Escribir y leer datos en ficheros



14.1.    Un caso
        Cuando los datos son enviados mediante un formulario, podemos hacer que
estos sean enviados a un correo electrónico. Esto supone una larga lista de mensajes
que responder en el correo.

        Vamos a hacer que todos los mensajes se escriban en un archivo de texto: este
archivo de texto puede despues ser procesado por un software de respuesta
automática.




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




                                              55/195                        ACADEMIA USERO
@INTE ACADEMIA                                                                 Curso de PHP




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

<?




//cogemos los datos

$nombre=$_POST['nombrepers'];




                                                56/195                      ACADEMIA USERO
@INTE ACADEMIA                                                                     Curso de PHP

$opinion=$_POST['opinion'];




//ponemos nombre al fichero

$fichero="opiniones.txt";




//la orden fopen abre un fichero, la a significa que lo abre en modo add,
esto es, añadir al final

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

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

//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 fichero

fclose($fp);

?>

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

ececec

rhnn

qsvs

rvrvrv

eccec


                                              57/195                          ACADEMIA USERO
@INTE ACADEMIA                                                                  Curso de PHP

dfdfdef

14.4.     El código para leer
        El fichero está escribo en nuestro servidor. ¿Cómo leerlo desde PHP? Para ello
vamos a abrir el fichero con la orden fopen en modo “r”, de forma que solo se lea el
fichero.

        Luego usaremos un bucle cuya condición es que no se haya llegado al final del
fichero. Dentro del bucle introduciremos una roden que irá leyendo cada una de las
líneas del fichero y poniéndolas en la página.




<?




//especificamos el nombre del fichero a abrir

$fichero="opiniones.txt";

//lo abrimos en modo solo lectura

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




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

while (!feof($fp)) {

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

          print(fgets($fp));

          //se imprime una línea

          print("<br>");

}

//y luego se cierra el fichero

fclose($fp);




                                                 58/195                    ACADEMIA USERO
@INTE ACADEMIA                                                               Curso de PHP

?>




           Sesión 15. Base de datos MySQL



15.1. MySQL

     Al instalar EasyPHP, instalamos el compilador de PHP y además, un gestor de
base de datos como MySQL. Vamos a crear una pequeña base de datos en MySQL
para gestiona el acceso a una página web.




15.2. Entrar en PHPMyAdmin y crear la tabla

     PHPMyAdmin nos permite gestionar las bases de datos y las tablas de las
mismas. Vamos a ver como se entra.

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




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




                                            59/195                      ACADEMIA USERO
@INTE ACADEMIA                                                                   Curso de PHP

3.   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
@INTE ACADEMIA                                                                   Curso de PHP

7.    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
@INTE ACADEMIA                                                                Curso de PHP

11.   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
@INTE ACADEMIA                                                                      Curso de PHP




3.   Luego haga clic en la opción Insertar nuevo registro y haga clic en el botón
     Continúe.
4.   Siga insertando dos registros más para dos nuevos usuarios con los datos: u2 y
     cu2, u3 y cu3.
5.   Vamos a ver los datos que hemos introducido. Haga clic en el botón Examinar.




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




15.4. Crear el formulario

Cree el siguiente formulario de entrada: el usuario introducirá los datos en el formulario
y si sus datos son correctos, saltaremos a otra página.




                                              63/195                          ACADEMIA USERO
@INTE ACADEMIA                                                                 Curso de PHP




15.5. Validar los datos

     Para validar los datos, vamos a conectarnos a la base de datos, abrir la tabla y
vamos a buscar los datos que hemos escrito en la tabla. Si aparecen, dejamos que
entre el usuario, si no, pues no lo dejamos.

<?

//empezar la sesión

session_start();

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

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

$db_usuario = 'root';

$db_contrasena = '';




//leer los datos en variables

$usuario=$_POST['usuario'];

$contrasena=$_POST['contrasena'];

//print($usuario);

//print($contrasena);




                                               64/195                     ACADEMIA USERO
@INTE ACADEMIA                                                           Curso de PHP

//nos conectamos a la base de datos

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

//seleccionamos la base de datosº

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

//se crea la cadena de consulta SQL

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

print($consulta);

print("<br>");

//se ejecuta la consulta

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

$filasdevueltas=mysql_num_rows($resultado);

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

if($filasdevueltas == 1) {

               print 'Validado';

      }

      else {

               print 'No validado';

      }




?>


               Sesión 16. Insertar y eliminar

                                        65/195                      ACADEMIA USERO
@INTE ACADEMIA                                                                      Curso de PHP




16.1. Insertar un registro

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




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

<?

//empezar la sesión

session_start();

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

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

$db_usuario = 'root';

$db_contrasena = '';

//leer los datos en variables

$usuario=$_POST['usuario'];

$contrasena=$_POST['contrasena'];

//nos conectamos a la base de datos

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

//seleccionamos la base de datosº

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




                                                66/195                       ACADEMIA USERO
@INTE ACADEMIA                                                                     Curso de PHP

//se crea la cadena de consulta SQL

$insercion            =        "INSERT            INTO           usuarios           SET
idusuario='$usuario',contrasena='$contrasena'";

print($insercion);

print("<br>");

//se ejecuta la consulta

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

?>




      El código es similar al que nos permite entrar en nuestra página. La diferencia
está en la consulta SQL. La consulta INSERT permite introducir datos en una tabla.
Hay que decir en que tabla queremos introducir los datos, y luego especificar el valor
de cada uno de los campos de la tabla.




16.2. Eliminar un registro

      También puede eliminar un registro fácilmente.




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

<?

//empezar la sesión

session_start();



                                             67/195                           ACADEMIA USERO
@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'   AND
contrasena='$contrasena'";

print($eliminacion);

print("<br>");

//se ejecuta la consulta

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

?>


                                Sesión 17. Buscar



17.1. Buscar datos: crear la base de datos

      Vamos a crear un formulario que busque los datos de una agenda de personas
en una base de datos. Cree una base de datos llamada agenda. Dentro de la misma



                                                   68/195                            ACADEMIA USERO
@INTE ACADEMIA                                                              Curso de PHP

cree 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 formulario

Ahora cree un formulario para buscar los datos. Vamos a crear un formulario donde
podamos introducir los datos y se nos busque automáticamente el teléfono de la
persona buscada.




17.3. El código de búsqueda

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

<?

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

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

$db_usuario = 'root';

$db_contrasena = '';



                                             69/195                    ACADEMIA USERO
@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('Error
buscando');




//contamos las filas devueltas

$filasdevueltas=mysql_num_rows($resultado);




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

if ($filasdevueltas==0) {

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

} else {




                                    70/195                   ACADEMIA USERO
@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ódigos

Mysql_fetch_array extrae los resultados de la sentencia SQL como una matriz
asociativa. En una matriz asociativa cada fila tiene un nombre, en este caso los
nombres son los nombre de los campos.

                                nombre                       juan
                                telefono                  952555555



Una vez obtenidos los datos del array podemos acceder a estos datos como en un
array. El código $fila[“telefono”] permite imprimir el teléfono.


                          Sesión 18. Headers



18.1. ¿Qué son los headers?

Son cabeceras de las páginas que permiten especificar ciertos datos sobre las
mismas. Observe como, al crear una nueva página web con Dreamweaver, se añaden
algunos headers a la página.

<!DOCTYPE        html    PUBLIC       "-//W3C//DTD      XHTML       1.0   Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Estos headers definen propiedades de la página.


                                                71/195                          ACADEMIA USERO
@INTE ACADEMIA                                                                  Curso de PHP



18.2. Headers en PHP

La sintaxis de un header en PHP es la siguiente:

Header (nombrecabecer;valorcabecera);




18.3.Ejemplo: enviar a otra página

Cuando creamos el programa que comprobaba si un usuario podía entrar en un sitio,
podrías haber hecho que se abriera una página de error si introducía mal los datos. El
siguient código envía al usuario a otra página:

<?

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

?>

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




18.4. Ejemplo: tipo de documento

Podemos establecer el tipo de documento que será enviado al navegador. Este valor
hace referencia a una página HTML de la forma:

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

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




18.5. Ejemplo: obligar a guardar un documento

Podemos hacer que el usuario, al descargar un archivo, tenga un cuadro de diálogo
donde se le pregunte que nombre quiere dar al archivo que quiere guardar.

En el siguiente caso, enviamos un archivo PDF con la orden readfile y obligamos a
que se muestre el cuadro de diálogo con el header Content-Disposition.




                                               72/195                       ACADEMIA USERO
@INTE ACADEMIA                                                                  Curso de PHP

Primero hemos creado un archivo con dos enlaces, el primero un enlace a la página
despdf.php que contiene las cabeceras indicadas anteriormente y otro enlace normal
al archivo archivo.pdf. Si hacemos clic en el segundo enlace, se nos abre el archivo
PDF dentro del navegador si tenemos instalada la aplicación Acrobat Reader.

El archivo despdf.php tiene el siguiente aspecto:

<?php

// enviaremos un tipo de archivo PDF

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




// Se va a llamar archivo.pdf

header('Content-Disposition:                                         attachment;
filename="descarga.pdf"');




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

readfile('archivo.pdf');

?>

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




                                             73/195                       ACADEMIA USERO
@INTE ACADEMIA                                                              Curso de PHP




18.6. Evitar que una página sea cacheada

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

<?

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

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

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

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

header("Pragma: no-cache");

?>




18.7. Esperar

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

<?php

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

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

?>




                                           74/195                      ACADEMIA USERO
@INTE ACADEMIA                                                                                                 Curso de PHP




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

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

at C:Program FilesApache GroupApache2testheadererror.php:1) in C:Program

FilesApache GroupApache2testheadererror.php on line 2

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

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

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

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

see this error.

590

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

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

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

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

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

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

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

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

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

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

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

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




                                  Sesión 19. Cookies


                                                               75/195                                       ACADEMIA USERO
@INTE ACADEMIA                                                                 Curso de PHP




19.1. ¿Qué son las cookies?

Según Wikipedia, una cookie es:

Una cookie es un fragmento de información que se almacena en el disco duro del
visitante de una página web a través de su navegador, a petición del servidor de la
página. Esta información puede ser luego recuperada por el servidor en posteriores
visitas.

Las principales utilidades de una cookie son:

           Controlar los usuarios que entran en una página
           Dar opciones de diseño a los usuarios



19.2. Introducir el nombre

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




19.3. Guardar el dato introducido

La siguiente página guarda el nombre introducido en una cookie. Observe como
hemos usado el método GET en el formulario.

<?php

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

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


                                                76/195                  ACADEMIA USERO
@INTE ACADEMIA                                                                      Curso de PHP

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

<head>

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

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

</head>




<body>

Hola, tu nombre es

<?

print $_GET['nombre'];

?>

</body>

</html>




19.4. Recuperar el valor

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

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

<head>

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

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




                                             77/195                         ACADEMIA USERO
@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 fondo

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

Formulario para seleccionar el color




Script que graba la cookie con el color

<?php

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

?>




                                             78/195                       ACADEMIA USERO
@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
@INTE ACADEMIA                                                                    Curso de PHP



20.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 y
entra en modo HTML al principio del archivo requerido, después vuelve al modo PHP
al final.

      Así, los códigos dentro del archivo requerido que deban ser ejecutados como
PHP deben ser encerrados dentro de etiquetas de comienzo y fin de PHP.

      Una sentencia condicional no afecta a require(): un require() siempre lee el
archivo referenciado, incluso si la línea en que se encuentra no se ejecuta nunca. Si se
quiere incluir condicionalmente un archivo, se usa include().

      Lo mismo ocurre con los bucles: aunque el código contenido en el archivo
referenciado esté en un bucle, el require() sólo se ejecuta una vez. No se puede poner
un require() en una estructura de bucle y esperar que incluya un archivo distinto en
cada iteración. Puede usar include() para ello.

20.2 Crear el sitio

1.    Como quiera que ya podemos empezar a hacer cositas, vamos a crear un nuevo
      sitio en Dreamweaver que use tecnología PHP. Cree un nuevo sitio en
      Dreamweaver.
2.    Escriba un nombre para el sitio.




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




                                              80/195                         ACADEMIA USERO
@INTE ACADEMIA                                                              Curso de PHP




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




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




6.   No usaremos un servidor remoto.




                                            81/195                      ACADEMIA USERO
@INTE ACADEMIA                                                               Curso de PHP




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




20.3. Crear la cabecera y el pie

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




                                              82/195                      ACADEMIA USERO
@INTE ACADEMIA                                                                    Curso de PHP




20.4 Crear la página central

Use Dreamweaver para crear el contenido de la página que irá en el centro y guárdela
con el nombre cuerpo.html.

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




<body>

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

 <tr>

       <?

       require("cabecera.html");

?>




 </tr>

 <tr>




                                            83/195                         ACADEMIA USERO
@INTE ACADEMIA                                                                   Curso de PHP

     <td><p>Este es el contenido de la p&aacute;gina. Aqu&iacute;
puedo dise&ntilde;ar con total libertad.</p>

     <p>a</p>

     <p>c</p>

     <p>d</p>

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

    </tr>

    <tr>

    <?

         require("pie.html");

?>

    </tr>

</table>




20.5. Include

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

Observe el siguiente ejemplo:

$ficheros = array(„a1.htm‟,‟a2.htm‟,‟a3.htm‟);

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

}

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




                                                 84/195                     ACADEMIA USERO
@INTE ACADEMIA                                                                  Curso de PHP

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




El código es muy similar al anterior:

<body>

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

 <tr>

       <?

       include("cabecera.html");

?>




 </tr>

 <tr>

   <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
@INTE ACADEMIA                                                                Curso de PHP

 </tr>

</table>


                         Sesión 21. Sesiones


21.1. Sesiones

     Las sesiones nos permiten mantener información entre las páginas cuando un
usuario está navegando. Esto nos permite, por ejemplo, guardar las compras que hace
en una tienda virtual para cobrarle al final.

     Las sesiones permiten guardar algunos datos mientras el usuario está activo, de
modo que podamos identificarlo conforme va navegando por nuestra página.

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




21.2. Un primer ejemplo

El siguiente código permite crear un contador que vaya indicando cuantas páginas
hemos visitado en un sitio:

<?

session_register('contador');

//$contador=0;

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

?>

Lo primero que se hace es abrir la sesión. Esto se puede conseguir de dos maneras,
con session_start(), que comienza una sesión o con sessión_register(), que comienza
una sesión y crea una variable de sesión nueva.




es2.php.net



                                                86/195                   ACADEMIA USERO
@INTE ACADEMIA                                                                   Curso de PHP

session_start() crea una sesión (o la continúa basandose en el session id
pasado por GET o mediante una cookie).
Si desea usar una sesión con un nombre en concreto, debe llamar a
session_name() antes de llamar a session_start()



session_register() acepta un número variable de argumentos, cualquiera de los
cuales puede ser o una cadena que contiene el nombre de una variable, o una matriz
que consista de nombres de variables u otras matrices. Para cada nombre,
session_register() registra la variable global con ese nombre en la sesión actual.

21.3. La ID de sesión

La SID o identificador de sesión nos permite acceder a un identificador único que tiene
cada sesión dentro del servidor.

A continuación puede ver un pequeño programa que crea una sesión, nos imprime el
número y luego la destruye.

session_destroy() destruye todos los datos asociados con la sesión actual. No
destruye ninguna de las variables globales asociadas a la sesión ni la cookie.




<?

session_start();

echo SID;

session_destroy();

?>




21.4. Guardar campos de formularios

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




                                             87/195                          ACADEMIA USERO
@INTE ACADEMIA                                                  Curso de PHP

01nombre.php

<?

session_start();

echo SID;

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

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

<head>

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

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

</head>




<body>

<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
@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
@INTE ACADEMIA                                                   Curso de PHP

print($nombrecillo);

?>

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

<form           id="form1"         name="form1"         method="post"
action="03resultado.php">

 <p>Apellidos

  <label>

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

  </label>

 </p>

 <p>

  <label>

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

 </label></p>

 </form>

</body>

</html>




03resultado.php

<?

session_register('apellidos');

$nombrecillo=$_SESSION['nombrecillo'];

$apellidos=$_POST['capellidos'];

print($apellidos);

?>




                                     90/195                  ACADEMIA USERO
@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 formulario
llama al archivo 02apellidos.php. Aquí lo primero que se hace es procesar el nombre e
introducirlo en una variable de sesión llamada nombrecillo.

session_register('nombrecillo');



                                             91/195                       ACADEMIA USERO
@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 llamada
apellidos.

Además, necesitamos la orden $_SESSION['nombrecillo']; para recuperar el valor
de la variable de sesión nombrecillo y poder introducirla en la página.




session_register('apellidos');

$nombrecillo=$_SESSION['nombrecillo'];

$apellidos=$_POST['capellidos'];

print($apellidos);




                              Sesión 22. GD


22.1. GD

     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
@INTE ACADEMIA                                                              Curso de PHP




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




5.   Haga clic en el botón Aplicar.
6.   Ahora gd2 está instalado. Para comprobarlo escriba la siguiente página web y
     créela en su navegador.
                                      <?phpinfo()?>




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
@INTE ACADEMIA                                                                Curso de PHP




Las sesiones nos permiten mantener informEstaación entre las páginas cuando un
usuario está navegando. Esto nos permite, por ejemplo, guardar las compras que hace
en una tienda virtual para cobrarle al final.

     Las sesiones permiten guardar algunos datos mientras el usuario está activo, de
modo que podamos identificarlo conforme va navegando por nuestra página.

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




22.2. Un primer ejemplo

<?php

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

$imagen=imagecreate(200,200);

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

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

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




                                                94/195                   ACADEMIA USERO
@INTE ACADEMIA                                                         Curso de PHP




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

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




imagejpeg($imagen);

imagedestroy($imagen);

?>




22.3. Texto en una imagen

El siguiente código crea texto en la imagen:

<?php

$im = imagecreate (250, 28);

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

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

ImageTTFText            ($im,        20,        0,      10,   20,   $yellow,
"/WINDOWS/Fonts/IMPACT.ttf",

          "Muy bien");

ImagePNG($im);

?>




22.4. Imagen dentro de página

Si queremos que nuestra página genere una imagen no tenemos más que
llamar al archivo PHP dentro del TAG:



                                               95/195               ACADEMIA USERO
@INTE ACADEMIA                                                            Curso de PHP




<body>

<img src="textogd.php">

</body>

</html>




22.5. Pasar parámetros

Podemos pasar parámetros a un archivo PHP que cree una imagen, para por
ejemplo, cambiar el color de fondo de la misma.




Esta es la llamada:




Y esta es la respuesta:

<?

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

$im = imageCreate(50,50);

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

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

imagePNG($im);

imageDestroy($im);




function hex2int($hex) {

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



                                        96/195                       ACADEMIA USERO
@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 isn't valid

* @return string           the validated 6-digit hexadecimal color

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

*       otherwise returns $default (which defaults to black)

*/

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

     // A valid Hexadecimal color is exactly 6 characters long

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

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

}

?>


                          Sesión 23. Clases


22.1. ¿Qué es una clase?

       Una clase es un contenedor que nos permite acceder a un objeto como un todo,
con todas las funciones y las datos que puede necesitar en un único lugar. Piense en
un coche: un coche tiene un montón de piezas y mecanismos. ¿Es necesario conocer


                                            97/195                       ACADEMIA USERO
@INTE ACADEMIA                                                                 Curso de PHP

todos esos aparatos para saber manejar el coche? No. Se nos dejan unos controles o
métodos para poder mover el coche: volante, frenos y acelerador.

     Una clase es algo similar: definimos un objeto mediante una serie de
propiedades y métodos y el usuario de la clase solo tiene que conocer esas
propiedades o métodos para usar la clase.




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

Vamos a crear una clase llamada Página que nos permita mostrar una página web a
partir de algunas de sus propiedades.




1.   El archivo principal se llamará clase.php y contendrá la definición de la clase.
     Para empezar cree un nuevo sitio en Dreamweaver, y configúrelo como en
     sesiones anteriores, de modo que podamos acceder al servidor directamente al
     hacer vists previas de las páginas.
2.   Cree un nuevo archivo PHP y guárdelo con el nombre clasepagina.php. Vamos a
     ir viendo el código.
<?php

class Pagina

{

       //atributos de la clase

       //para simplificar el ejemplo, cada página solo tendrá estas
propiedades, el título y el contenido

       var $contenido;

       var $titulo='Construcciones Vicente';




       //operaciones de la clase

       //para cambiar el contenido y el título de la página, vamos a
crear unos métodos



                                             98/195                       ACADEMIA USERO
@INTE ACADEMIA                                                          Curso de PHP




     function EstablecerContenido($nuevocontenido) {

             //this   es   el   objeto   actual   sobre   el   que   estamos
trabajando

             //en este caso, la página

             //lo que estamos diciendo es que la propiedad contenido
de la página actual

             //sea la variable que le hemos pasado como parámetro
al método

             $this->contenido=$nuevocontenido;

     }




     function EstablecerTitulo($nuevotitulo) {

             $this->titulo = $nuevotitulo;

             //igual que antes pero para el título

     }




     function MostrarTitulo()

     {

             //se imprime el título

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

     }




     function MostrarCabecera()




                                         99/195                      ACADEMIA USERO
@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    Vilchez
2006</td>


                                   100/195                      ACADEMIA USERO
@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
@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
@INTE ACADEMIA                                                                  Curso de PHP



24.1. ¿Qué es un CMS?

     Un CMS es un sistema de gestión de contenidos que nos permite publicar
distintas noticias a partir de una base de datos.

     La idea principal de un CMS es tener una serie de redactores que puedan entrar
y escribir sus noticias. Una vez escrita la noticia, esta va a una base de datos donde
se guarda. Cuando un usuario quiere ver la web, la página accede a la base de datos,
saca las noticias de la misma y las muestra.

     El aspecto del CMS depende de una serie de archivos que guardamos como una
plantilla. Así, el aspecto de la página depende de esos archivos.




24.2. Instalar WAMP

Vamos a instalar el servidor WAMP.

1.   Entre en WAMPSERVER.COM y descargue el servidor.
2.   Instale el servidor web.
3.   Pruebe el servidor web entrando en la URL localhost.




                                               103/195                     ACADEMIA USERO
@INTE ACADEMIA                                                                Curso de PHP




24.3. Crear las tablas

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




2.   Una vez en phpMyAdmin, cree una base de datos llamada content.
3.   Cree una tabla llamada writers con 3 campos.
4.   Establezca las propiedades de los campos según indica la siguiente imagen:




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




                                          104/195                        ACADEMIA USERO
@INTE ACADEMIA                                                                  Curso de PHP

Esta tabla guardará los escritores, las personas que pueden editar las páginas y
publicar 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
@INTE ACADEMIA                                                                 Curso de PHP




Esta 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
@INTE ACADEMIA                                                            Curso de PHP

11.    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
@INTE ACADEMIA                                                              Curso de PHP




               Sesión 25. Crear un CMS (II)


25.1. index.php

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




25.2. Cabecera y pie

1.   Lo primero que vamos a hacer es diseñar el aspecto de nuestra web. Cree un
     nuevo archivo con Photoshop para la cabecera y el pie.




                                          108/195                      ACADEMIA USERO
@INTE ACADEMIA                                                                Curso de PHP




2.   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
@INTE ACADEMIA                                                            Curso de PHP




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




                                        110/195                      ACADEMIA USERO
@INTE ACADEMIA                                                                       Curso de PHP

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




6.    Guarde el archivo.
7.    Ahora vamos a exportar el archivo de modo que tengamos una página web.
      Haga clic en el menú Archivo.
8.    Haga clic en Guardar optimizada como…
9.    Escriba un nombre para la página HTML.
10.   Haga clic en el botón Guardar.
11.   Se ha generado una página web en formato HTML. Ábrala desde Dreamweaver.
12.   Observe como tiene una imagen en blanco en el centro. Bórrela.
13.   Por último, ajuste el tamaño de las celdas.




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




                                             111/195                         ACADEMIA USERO
@INTE ACADEMIA                                                                Curso de PHP

15.   Use la imagen de la cabecera y del pie para crear los archivos header.php y
      footer.php que formarán parte de la página.
      HEADER.PHP




        FOOTER.PHP




25.3. Código

      Vamos a implementar un archivo que va a realizar las operaciones básicas sobre
las tablas de la base de datos, y que nos servirá para el resto de los scripts. Este
archivo se va a llamar db_fns.php. Veamos lo que hace:




<?php




//connexion a la base de datos

function db_connect()

{

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

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

        //si no se ha podido conectar devuelve false


                                            112/195                      ACADEMIA USERO
@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
@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
@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
@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 archivo
db_fns.php por el nombre de usuario y contraseña de su base de datos.

function db_connect()

{

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

     if (!$handle)

     {

         return false;

     }

     return $handle;

}




26.2. Pages de cada storie

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

1.         Entre en phpMyAdmin.
2.         Acceda a la base de datos Content y entre en la tabla stories.
3.         Haga clic en el botón Examinar.




                                                  116/195                    ACADEMIA USERO
@INTE ACADEMIA                                                                Curso de PHP

4.    Desde aquí puede modificar los datos. Haga clic en el botón Modificar de cada
      registro e introduzca la page correspondiente.




26.3. El archivo index.php

16.   A continuación vamos a ver el archivo index.php que es la página principal del
      sitio. Este es el aspecto de la página al ejecutarla.




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

//voy a usar el archive db_fns, que tiene los accesos a algunas
funciones importantes como la conexión a la base de datos y otras

 include_once('db_fns.php');




                                               117/195                   ACADEMIA USERO
@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 para
conectarme a la base de datos

 $handle = db_connect();




//venga, defino una variable llamada pages_sql que contiene una
consulta sql que me saca todas las pages (o temas) de la base de
datos ordenadas por code (código)

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




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

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




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

//defino una tabla

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




//la orden asigna a la variable pages cada una de las filas de la lista
de pages que dio la consulta anterior, así que, mientras hayas mas
filas, sigo sacando pages, cuando ya no haya más filas, se sale del
bucle while




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

 {


                                    118/195                   ACADEMIA USERO
@INTE ACADEMIA                                                            Curso de PHP

       //otra   consulta   para   sacar   todas   las   historias    de    un
determinado tema, selecciona las historias con la condición de que
pertenezcan a un tema determinado, que viene determinado por el
campo CODE de la variable pages, que contiene la lista de temas de
las páginas

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

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

  $story_sql = "select * from stories

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

           and published is not null

           order by published desc";

//se crea una variable llamada story_result              que guarda el
resultado de la consulta, es decir, la lista de stories de un page

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




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

//entonces muestro la lista de stories de una page

  if ($story_result->num_rows)

  {

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

   $story = $story_result->fetch_assoc();



                                     119/195                        ACADEMIA USERO
@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 a
la imagen

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

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



                                       120/195                 ACADEMIA USERO
@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.php

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

1.       Haga clic en el icono de WAMP SERVER.
2.       Haga clic en PHP EXTENSIONS
3.       Haga clic en php_gd2




                                           121/195                    ACADEMIA USERO
@INTE ACADEMIA                                                                  Curso de PHP




4.   Copie algunas imágenes a la carpeta del servidor. Vamos a usar estas fotos para
     asignarlas a las stories.
5.   Entre en la base de datos content y modifique el campo Picture de alguna de las
     stories de la base de datos. Escriba el nombre de los archivos que ha copiado.




                                           122/195                         ACADEMIA USERO
@INTE ACADEMIA                                                                    Curso de PHP



6.   El resultado será similar al siguiente:




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

<?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
@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 dos
tamaños

//así que las divido

 $x_ratio = $max_width / $width;

 $y_ratio = $max_height / $height;




                                   124/195               ACADEMIA USERO
@INTE ACADEMIA                                              Curso de PHP

//si el ancho es menor que el ancho máximo y el alto menor que el
alto máximo pa que lo voy a cambiar

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

  $tn_width = $width;

  $tn_height = $height;

 }

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

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

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

  $tn_width = $max_width;

 }

 else {

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

  $tn_height = $max_height;

 }

//creo la imagen a partir de la original

 $src = ImageCreateFromJpeg($image);

//creo otra imagen con el tamaño deseado

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

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

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

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

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



                                    125/195             ACADEMIA USERO
@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 o
PAGE. Veamos como se hace.




<?php

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

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

 {

//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
@INTE ACADEMIA                                                           Curso de PHP

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

 $page = $_REQUEST['page'];

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




//hago uso del archive db_fns.php que tiene algunos scripts importantes
para el manejo de la base de datos

 include_once('db_fns.php');

//introduzco la cabecera del sitio

 include_once('header.php');




//me conecto a la base de datos

 $handle = db_connect();

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

 if($story)

 {

//hago una consulta sobre la base de datos para seleccionar la historia
siempre que haya sido publicada

  $query = "select * from stories

         where id = '$story' and

              published is not null";

 }

 Else




                                        127/195                     ACADEMIA USERO
@INTE ACADEMIA                                                            Curso de PHP

//si no he especificado una historia en concreto, estoy buscando sobre un
tema, así que hago una consulta que saque todas las historias de un tema

 {

  $query = "select * from stories

             where page = '$page' and

                published is not null

             order by published desc";

 }

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

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

//mientras pueda sacar más historias del array asociativo que es resultado
de la consulta

 while ($story = $result->fetch_assoc())

 {

     // imprimo el titular de la noticia

  echo "<h2>{$story['headline']}</h2>";

     //si hay imagen para la noticia la saco también

  if ($story['picture'])

  {

      echo '<div style="float:right; margin:0px 1px 6px 6px;">';

      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
@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áginas
donde la gente pueda publicar las noticias, dar de alta escritores. A eso vamos ahora.

1.       Cree una carpeta admin dentro de su sitio web.
2.       Cree un nuevo archivo llamado index.php dentro de esa carpeta con el siguiente
         contenido.
<html>

<head>

<title>Menú Administración</title>

</head>



                                              129/195                       ACADEMIA USERO
@INTE ACADEMIA                                                                    Curso de PHP

<body>

<h1>Menú Administración</h1>

<ul>

 <li>Escritores         -    <a        href    =     'writer.php'>Añadir/Editar
historias</a></li>

 <li>Editores       -   <a   href      =   'publish.php'>Publicar/No         Publicar
Historias</a></li>

</ul>

</body>

</html>

3.   Este archivo solo contiene un par de enlaces a las páginas writer.php y
     publish.php.




27.3. Writer.php

El archivo writer.php permite a los escritores gestionar las historias. Vamos a ver como
funciona.




1.   Lo primero que tenemos que tener en cuenta es que cualquiera no puede entrar
     en nuestro sitio así que lo primero que se hace al entrar en el fichero es llamar a
     un fichero que compruebe nuestra identidad. Este es el fichero include_fns.php,
     cuyo contenido es el siguiente.
<?php

 // All the include files for admin pages in the site

 include_once('../db_fns.php');


                                              130/195                        ACADEMIA USERO
@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 los
escritores cuyo nombre de usuario y contraseña coincidan con los
parámetros de la función

     $result = $handle->query("select * from writers

                        where username='$username' and

                          password = SHA1('$password')");




                                              131/195                         ACADEMIA USERO
@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
@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 sus
datos

 function login_form()

 {

  ?>

  <form action='login.php' method='POST'>

  <table border=0>

  <tr>

     <td>Nombre Usuario</td>

     <td><input size='16' name='username'></td>

  </tr>

  <tr>

     <td>Contraseña</td>


                                       133/195                     ACADEMIA USERO
@INTE ACADEMIA                                                   Curso de PHP

     <td><input              size='16'               type='password'
name='password'></td>

  </tr>

  </table>

  <input type='submit' value='Log in'>

  </form>

  <?php

 }




//esta función comprueba si el usuario tiene permiso para modificar la
historia

 function check_permission($username, $story)

 // check user has permission to act on this story

 {

  // connect to db

  $handle = db_connect();

  if (!$handle)

     return 0;




  if(!$_SESSION['auth_user'])

     return 0;




  $result = $handle->query("select * from writer_permissions wp,
stories s




                                   134/195                   ACADEMIA USERO
@INTE ACADEMIA                                                                     Curso de PHP

                       where wp.writer = '{$_SESSION['auth_user']}'
and

                          wp.page = s.page and

                          s.id = $story

                       ");

  if (!$result)

  {

     return 0;

  }

  if ($result->num_rows>0)

  {

     return 1;

  }

  else

  {

     return 0;

  }

 }

?>


                 Sesión 29. Crear un CMS (V)


29.1. El archivo DELETE_STORY.PHP

       Este archivo borra una historia. Está enlazado en la página de historias.




                                            135/195                          ACADEMIA USERO
@INTE ACADEMIA                                                            Curso de PHP



<?php

 // delete_story.php

//voy a usar el archivo con el script que se conecta a la base de datos

 include_once('include_fns.php');

//me conecto a la base de datos

 $handle = db_connect();

//obtengo de la llamada URL el número de la historia que quiero borrar

 $story = $_REQUEST['story'];

//uso el script check_permission para comprobar si el usuario activo en este
momento puede borrar esa historia

 if(check_permission($_SESSION['auth_user'], $story))

 {

//esta consulta borra la historia de la base de datos cuya id coincide con la
id que se ha pasado como parámetro en la llamada URL

  $query = "delete from stories where id = $story";

//ejecuto la consulta

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

 }

Vuelvo a la página donde estaba antes

 header('Location: '.$_SERVER['HTTP_REFERER']);

?>




29.2. Palabras clave



                                        136/195                     ACADEMIA USERO
@INTE ACADEMIA                                                                 Curso de PHP

        Las palabras clave nos permiten buscar noticias dentro de nuestro sitio. Cada
página tendrá unas palabras clave con un peso determinado, que determina la
importancia del sitio con respecto a esa palabra clave.




        Vamos a ver la página que nos permite asignar palabras clave y pesos a una
noticia, el archivo keywords.php:

<?php

 // keywords.php

//uso el archivo con el script para conectarme a la base de datos

 include_once('include_fns.php');

//si no hay ningún usuario activo

 if (!check_auth_user())

 {

//se muestra el formulario de login

     login_form();

 }

//si hay un usuario activo, compruebo que tiene permiso para modificar la
//historia

 else                       if(check_permission($_SESSION['auth_user'],
$_REQUEST['story']))

 {

//me conecto a la base de datos

   $handle = db_connect();




                                             137/195                      ACADEMIA USERO
@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 el
título //de la historia

   echo                   "<h2>Palabras                clave            para
<i>{$story['headline']}</i></h2>

//creo un formulario para añadir          las palabras llamando al archivo
//keyword_add.php

       <form action='keyword_add.php' method='POST'>

//campo oculto para el código de la clave

       <input type=hidden name='story' value='$story_code'>

//campo para la palabra clave

       <input size='20' name='keyword'>

//lista para el peso de la noticia

       <select name='weight'>

          <option>10</option>

          <option>9</option>

          <option>8</option>

          <option>7</option>

          <option>6</option>

          <option>5</option>

          <option>4</option>




                                          138/195                    ACADEMIA USERO
@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
@INTE ACADEMIA                                               Curso de PHP

          </td><td>

          {$keyword['weight']}

          </td><td>

//y con un enlace para borrarlas.

          [<a

href='keyword_delete.php?story=$story_code&keyword=";

      echo urlencode($keyword['keyword']);

      echo "'>del</a>]

         </td></tr>";

     }

     echo '</table>';

  }

 }

?>




29.3. El archivo KEYWORD_ADD.PHP

Este archivo añade las palabras clave que introducimos.

<?php




 include_once('include_fns.php');




 $handle = db_connect();

 $story = $_REQUEST['story'];




                                           140/195        ACADEMIA USERO
@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.PHP

Este archivo borra una palabra clave de la historia.

<?php

 include_once('include_fns.php');




 $handle = db_connect();

 $story = $_REQUEST['story'];



                                             141/195             ACADEMIA USERO
@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 and
keyword = '$keyword'";




   $handle->query($query);

 }

 header("Location: keywords.php?story=$story");

?>


               Sesión 30. Crear un CMS (VI)


30.1. El formulario de búsqueda SEARCH_FORM.PHP

       Este archivo es el necesario para que un usuario pueda buscar noticias. A
diferencia de los anteriores, debe ser accesible a todos los usuarios, así que no debe
estar en la carpeta ADMIN.




<?php include_once('header.php'); ?>

 <h2>Búsqueda</h2>

 <p>Escriba una palabra clave a buscar:</p>




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




                                            142/195                          ACADEMIA USERO
@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.PHP

Este archive es el que se ejecuta cuando buscamos una noticia, y muestra las noticias
según el peso que tengan asignadas.




<?php




 include_once('db_fns.php');

 include_once('header.php');


                                           143/195                        ACADEMIA USERO
@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
@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
@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.PHP

Este archivo nos permite publicar las noticias y editarlas.




<?php


                                              146/195         ACADEMIA USERO
@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>)         (<a
href="index.php">Menú</a>) (<a href="../">Sitio Público</a>)
</p>';

//hago una consulta para mostrar todas las historias de un determinado
autor

  $query = "select * from stories s, writer_permissions wp

         where wp.writer = '{$_SESSION['auth_user']}' and

            s.page = wp.page

         order by modified desc";

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




                                     147/195                  ACADEMIA USERO
@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                                                      '[<a
href="unpublish_story.php?story='.$story['id'].'">no
publicar</a>] ';

   }

   else

   {

      echo                                                      '[<a
href="publish_story.php?story='.$story['id'].'">publicar</a>] ';

      echo                                                      '[<a
href="delete_story.php?story='.$story['id'].'">borrar</a>] ';

   }

   echo '[<a href="story.php?story='.$story['id'].'">editar</a>] ';


                                   148/195                ACADEMIA USERO
@INTE ACADEMIA                                                   Curso de PHP




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

  }

  echo '</table>';

 }

?>




        Sesión 31. Crear un CMS (VII) y fin


31.1. El archivo PUBLISH_STORY.PHP

      Este archivo publica la historia que hayamos editado.

<?php

 // publish_story.php -- action a release, go back to publish.php




 include_once('include_fns.php');




 $handle = db_connect();




 $now = time();

//toma el código de la historia de la llamada php

 $story = $_REQUEST['story'];



                                           149/195            ACADEMIA USERO
@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.php

Este fichero coloca la fecha de publicación a NULL, de modo que la historia deja de
estar como publicada. Es similar al anterior, lo único que cambia es que coloca la
fecha de publicación a NULL.

<?php

 // unpublish_story.php -- action a release, go back to release.php




 include_once('include_fns.php');




                                            150/195                         ACADEMIA USERO
@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
@INTE ACADEMIA                                                                 Curso de PHP

31.3. El fichero delete_story.php

Este fichero borra la historia seleccionada.




<?php

 // delete_story.php




 include_once('include_fns.php');




 $handle = db_connect();




 $story = $_REQUEST['story'];

 if(check_permission($_SESSION['auth_user'], $story))

 {

   $query = "delete from stories where id = $story";

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

 }

 header('Location: '.$_SERVER['HTTP_REFERER']);

?>


                         Sesión 32. Gráficos


32.1. Gráfico

       Vamos a hacer un script que tome los datos de una encuesta y los muestre en
un gráfico. Lo primero que tenemos que hacer es crear la base de datos y la tabla que
contendrá las distintas opciones de la encuesta.



                                               152/195                    ACADEMIA USERO
@INTE ACADEMIA                                                                Curso de PHP



1.   Entre en phpMyAdmin.
2.   Cree una base de datos nueva llamada encuesta.
3.   Cree una nueva tabla dentro de la base de datos llamada resencuesta con los
     siguientes campos:




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
@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=vote
value="Shakespeare">Shakespeare<br>

<input type=radio name=vote
value="Lovecraft">Lovecraft<br><br>

<input type=submit value="Mostrar gráfico">

</form>

</body>

</html>




                                 154/195             ACADEMIA USERO
@INTE ACADEMIA                                                   Curso de PHP




32.3. El archivo show_poll.php

<?

/*******************************************

 Petición a la base de datos para obtener la información de la
encuesta

*******************************************/

// hacer log in en la base de datos

//cojo el escritor votado del formulario

$vote=$_POST['vote'];

//me conecto a la base de datos

if (!$db_conn = @mysql_connect("localhost", "root", ""))

{

 echo "No se puede conectar a la base de datos<br>";

 exit;

};

//seleccione la base de datos encuesta

@mysql_select_db("encuesta");




if (!empty($vote)) // Si han cubierto bien el formulario



                                      155/195               ACADEMIA USERO
@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
@INTE ACADEMIA                                                  Curso de PHP




// calcular el número total de votos hasta ahora

$total_votes=0;

//cuento el número total de votos

while ($row = mysql_fetch_object ($result))

{

    $total_votes += $row->nvotos;

}

mysql_data_seek($result, 0); // resetear el resultado




/*******************************************

 Cálculo inicial para el gráfico

*******************************************/

// configurar constantes

$width=500;        // ancho de la imagen en pixeles - encajará en
640x480

$left_margin = 50; // espacio a dejar a la izquierda de la imagen

$right_margin= 50; // lo mismo para la derecha

$bar_height = 40;

$bar_spacing = $bar_height/2;

$font = "arial.ttf";

$title_size= 16; // puntos

$main_size= 12; // puntos


                                    157/195                 ACADEMIA USERO
@INTE ACADEMIA                                                     Curso de PHP

$small_size= 12; // puntos

$text_indent = 10; // posición para las etiquetas de texto a la
izquierda




// configurar el punto inicial desde el cual dibujar

$x = $left_margin + 60; // colocar la línea de base para dibujar del
gráfico

$y = 50;             // lo mismo

$bar_unit = ($width-($x+$right_margin)) / 100;         // un "punto" en
el gráfico




// 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
@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 dibujar

ImageFilledRectangle($im,0,0,$width,$height,$bg_color);




// Dibujar borde en torno al lienzo

ImageRectangle($im,0,0,$width-1,$height-1,$line_color);




// Añadir Título

$title = "Escritor favorito";

$title_dimensions = ImageTTFBBox($title_size, 0, $font, $title);

$title_length = $title_dimensions[2] - $title_dimensions[0];

$title_height = abs($title_dimensions[7] - $title_dimensions[1]);

$title_above_line = abs($title_dimensions[7]);

$title_x = ($width-$title_length)/2; // centrarlo en x

$title_y = ($y - $title_height)/2 + $title_above_line; // centrarlo
en y


                                      159/195                ACADEMIA USERO
@INTE ACADEMIA                                                   Curso de PHP

ImageTTFText($im, $title_size, 0, $title_x, $title_y,

         $text_color, $font, $title);




// Dibujar una línea de base un poco por encima de la primera
localización de la barra

// a un poco por debajo de la última

ImageLine($im, $x, $y-5, $x, $height-15, $line_color);




/*******************************************

 Dibujar los datos en el gráfico

*******************************************/

// Obtener cada línea de los datos de la base de datos y dibujar las
barras correspondientes

while ($row = mysql_fetch_object ($result))

{

 if ($total_votes > 0)

//cojo cada una de las cantidades y las divido entre el número total
de votos

    $percent = intval(round(($row->nvotos/$total_votes)*100));

 else

    $percent = 0;




 // muestra el tanto por ciento para este valor

 ImageTTFText($im, $main_size, 0, $width-30,
$y+($bar_height/2),


                                        160/195             ACADEMIA USERO
@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
@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. PDF


33.1. PDF




                                    162/195                 ACADEMIA USERO
@INTE ACADEMIA                                                              Curso de PHP

       Vamos a aprender a crear ficheros PDF con PHP. Para ello primero nos vamos
a descargar un pequeño script que nos permite hacerlo fácilmente.




1.   Entre en la página fpdf.org
2.   Descargue el script a una carpeta de su ordenador




3.   Cree un nuevo sitio llamado pdf y descomprima dentro el script que acaba de
     descargar.




                                           163/195                     ACADEMIA USERO
@INTE ACADEMIA                                                                 Curso de PHP

4.   Cree un nuevo archivo llamado prueba1.php y pruebe el siguiente código.
<?php

require('fpdf.php');

//crea una variable FPDF

$pdf=new FPDF();

//le añade una página

$pdf->AddPage();

//establece la fuente

$pdf->setFont('Arial','B',16);

//escriba a partir de la posición 40,10 el texto hola, mundo

$pdf->Cell(40,10,'Hola, mundo');

//lo manda

$pdf->Output();

?>




5.   Ahora añada la siguiente línea al programa y compruebe el resultado:
<?php

require('fpdf.php');




$pdf=new FPDF();

$pdf->AddPage();

$pdf->setFont('Arial','B',16);

$pdf->Cell(40,10,'Hola, mundo');

$pdf->Cell(60,10,'Hecho con PDF',0,1,'C');



                                           164/195                          ACADEMIA USERO
@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 funciones
header y footer se ejecutan automáticamente y añaden la cabecera y el pie al
documento.

<?php
require('fpdf.php');



class PDF extends FPDF

{

//Cabecera de página

function Header()

{

    //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
@INTE ACADEMIA                                                   Curso de PHP

    //Salto de línea

    $this->Ln(20);

}




//Pie de página

function Footer()

{

    //Posición: a 1,5 cm del final

    $this->SetY(-15);

    //Arial italic 8

    $this->SetFont('Arial','I',8);

    //Número de página

    $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');

}

}




//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
@INTE ACADEMIA                                                                     Curso de PHP

$pdf->Output();

?>




Funciones usadas:

Image: Imprime una imagen en la página. Las coordenadas de la esquina superior
izquierda deben especificarse.

SetFont: Establece la fuente usada para imprimir cadenas de carácteres. Es
obligatorio invocar este método por lo menos una vez antes de imprimir texto o el
documento               resultante              no               será             válido.
La fuente puede ser una estándar o una adicionada via el método AddFont(). La
fuentes estándar usan codificación cp1252 (Western Europe) de Windows.
El método puede ser invocado antes que la primera página sea creada y es mantenido
de                        página                        a                        página.
Si sólo desea cambiar el tamaño de la fuente actual, es más simple invocar
SetFontSize().

Cell: Imprime una celda (de área rectangular) bordes opcionales, color de fondo y
secuencia de carácteres La esquina superior izquierda de la celda corresponde a la
posición actual. El texto puede ser alineado o centrado. Despues de invocar, la
posición actual se desplaza a la derecha o la siguietne línea. Es posible poner una
referencia                         en                       el                     texto.
Si esta el salto de página automático habilitado y la celda esta por fuera del límite, es
realizado un salto de página antes de producir la salida.

AliasNBPages: Define un alias para el número total de páginas. Se sustituira en el
momento que el documento se cierre.




                            Sesión 34. Foro


34.1. Foro: la base de datos




                                             167/195                         ACADEMIA USERO
@INTE ACADEMIA                                                         Curso de PHP

       Vamos a crear un foro donde los usuarios puedan ir dejando noticias y
comentarios.

A continuación tiene el archivo de base de datos.

       Ejecute esta consulta entrando en la ventana SQL.



CREATE TABLE foro (

 id int(7) NOT NULL auto_increment,

 autor varchar(200) NOT NULL default '',

 titulo varchar(200) NOT NULL default '',

 mensaje text NOT NULL,

 fecha datetime NOT NULL default '0000-00-00 00:00:00',

 respuestas int(11) NOT NULL default '0',

 identificador int(7) NOT NULL default '0',

 ult_respuesta datetime default NULL,

 KEY id (id)

) TYPE=MyISAM;




                                              168/195             ACADEMIA USERO
@INTE ACADEMIA                                                                         Curso de PHP




Ejecute también estas dos consultas para añadir algunos datos a la base de datos.




INSERT INTO foro VALUES (1,'pablo','probando','Este es un mensaje de prueba','0000-00-00
00:00:00',2,0,'0000-00-00 00:00:00');

INSERT INTO foro VALUES (2,'federico','Otra prueba bedelesca','SEguimos metiendo
mensajes que no sirven para nada‟,'2003-05-02 00:14:47',3,0,'2003-05-02 00:14:47');




34.2. El archivo configuracion.php

Este archivo contiene la conexión a la base de datos.



                                               169/195                              ACADEMIA USERO
@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.php

Este archivo contiene un par de funciones útiles.

La función mostrarTemplate extrae las variables e imprime el tema.

La función parsearTags busca el tag CITAR y lo sustituye por un texto en formato de
cita (quote).

<?php

function mostrarTemplate($tema, $variables)

{



                                            170/195                       ACADEMIA USERO
@INTE ACADEMIA                                               Curso de PHP

     //var_dump($variables);

     extract($variables);

     eval("?>".$tema."<?");

}




function parsearTags($mensaje)

{

     $mensaje = str_replace("[citar]", "<blockquote><hr
width='100%' size='2'>", $mensaje);

     $mensaje = str_replace("[/citar]", "<hr width='100%'
size='2'></blockquote>", $mensaje);

     return $mensaje;

}

?>




                                 171/195                  ACADEMIA USERO
@INTE ACADEMIA                                           Curso de PHP



34.4. El archivo header.html

Este archivo es la cabecera de todas las páginas.




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">

<html>

<head>

<title>El Foro de ZonaPHP</title>

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

//ahí un estilo css embebido en la cabecera

<style type="text/css">

<!--

body {

       font-family: Arial, Helvetica, sans-serif;

       color: #FFFFFF;

}

a{

       text-decoration: none;

}

-->

</style>




                                           172/195    ACADEMIA USERO
@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> ] [ <a
href="respuesta.php">Nuevo

       Tema</a> ]</div></td>

 </tr>

</table>




34.5. El archivo footer.html

Este es el archivo que va al final de cada página.




<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
@INTE ACADEMIA                                                    Curso de PHP

</html>




34.6. El archivo index.php

Este es el archivo principal. Lista las noticias del foro.




<?php

require('configuracion.php');

require('funciones.php');

include('header.html');

/* Pedimos todos los temas iniciales (identificador==0)

* y los ordenamos por ult_respuesta */

$sql = "SELECT id, autor, titulo, fecha, respuestas, ult_respuesta ";

$sql.= "FROM foro WHERE identificador=0 ORDER BY ult_respuesta
DESC";

$rs = mysql_query($sql, $con);

if(mysql_num_rows($rs)>0)

{

       // 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
@INTE ACADEMIA                                                                 Curso de PHP

              mostrarTemplate($template, $row);

       }

}

include('footer.html');

?>


                    Sesión 35. Usar Google


35.1. Lo que vamos a hacer

       Vamos a usar el servicio de Google SOAP Search API para hacer uso de
Google dentro de nuestras aplicaciones.

       Una API (del inglés Application Programming Interface - Interfaz de
Programación de Aplicaciones) es un conjunto de especificaciones de comunicación
entre componentes software. La API que vamos a usar nos permite acceder al
buscador Google y enviarle órdenes de búsqueda desde nuestros propios programas.




35.2. Primero darse de alta

Lo primero que tenemos que hacer es darnos de alto en el servicio. Sin darnos de alta
no podemos usar ninguno de los servicios.

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
@INTE ACADEMIA                                                               Curso de PHP




3.   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
@INTE ACADEMIA                                                              Curso de PHP




5.   Ahora tiene que obtener una cuenta de Google. Haga clic en el enlace Create a
     Google account en la zona inferior de la página de descarga.




6.   Rellene los datos de la cuenta.




                                           177/195                     ACADEMIA USERO
@INTE ACADEMIA                                                           Curso de PHP




7.   Ahora entre en su cuenta de correo y siga las instrucciones que se le han
     enviado para dar de alta la cuenta.




                                           178/195                  ACADEMIA USERO
@INTE ACADEMIA                                                                  Curso de PHP



8.    Una vez que la cuenta ha sido verificada se nos muestra el siguiente mensaje.




9.    Una vez que se verifica la cuenta, nos envían un email con la clave de licencia.
      Esta clave de licencia nos permite hacer 1000 busquedas al día con fines no
      comerciales.




10.   El email nos da la clave de licencia.




                                              179/195                      ACADEMIA USERO
@INTE ACADEMIA                                                                Curso de PHP




35.3. Activar SOAP

SOAP es un servicio que no viene activado por defecto. Hay que activarlo añadiendo
una línea al archivo php.ini que está dentro de la carpeta bin de la carpeta Apache2
del servidor WAMP.

La línea es la siguiente:

;extension=php_pdo_oci8.dll

;extension=php_pdo_odbc.dll

;extension=php_pdo_pgsql.dll

extension=php_sqlite.dll

extension=php_soap.dll

Una vez activado, reinicie el servidor WAMP,entre en LOCALHOST y compruebe que
se ha activado SOAP haciendo clic en el enlace PHPINFO().




35.4. Usar SOAP y Google




<?
////////////////////////////////////////////////////////////
// This is example code of how to query the Google API using
// Web Services, SOAP, and PHP.
//
// Author: Geoff Peters, January 6th 2004.
//
// To run this script you need to obtain the Pear::SOAP package.
// You can obtain it from http://pear.php.net.
// The example shown uses Pear::SOAP version 0.7.5.
//
// If you don't have administrative access to you web server,
// you can place the SOAP directory that contains the Pear::SOAP
// source files somewhere on your server, and then modify the
// PHP include path using ini_set to include this directory.



                                          180/195                        ACADEMIA USERO
@INTE ACADEMIA                                                      Curso de PHP

//
// For example:
/*

// set the include path to use the new pear stuff
ini_set( 'include_path', '.:/home/user/pearstuff:/usr/local/lib/php');

*/
// Note that Pear::SOAP has several dependencies on other Pear
packages,
// which you should also install on your web server.
/////////////////////////////////////////////////////////////

//
// Initialize SOAP web services
//
include("SOAP/Client.php");

$soapclient = new SOAP_Client('http://api.google.com/search/beta2');
$soapoptions = array('namespace' => 'urn:GoogleSearch',
                 'trace' => 0);

////////////////////////////////////////////////////////////
// Calls the Google API and retrieves the estimated number of
// search results for that query into $num.
function do_search( $query, $key, &$num )
{
        global $soapclient;
        global $soapoptions;

          // Note that we pass in an array of parameters into the Google
search.
          // The parameters array has to be passed by reference.
          // The parameters are well documented in the developer's kit on
the
          // Google site http://www.google.com/apis

        $params = array(
                'key' => $key, // the Developer's key
                'q' => $query, // the search query
                'start' => 0,      // the point in the search results
should Google start
                'maxResults' => 1, // the number of search results
(max 10)
                'filter' => false, // should the results be filtered?
                'restrict' => '',
                'safeSearch' => false,
                'lr' => '',
                'ie' => '',
                'oe' => ''
         );

          // Here's where we actually call Google using SOAP.
          // doGoogleSearch is the name of the remote procedure call.

          $ret = $soapclient->call('doGoogleSearch', $params,
                                   $soapoptions);

          if (PEAR::isError($ret))
          {




                                      181/195                    ACADEMIA USERO
@INTE ACADEMIA                                                         Curso de PHP

                print("<br>An error #" . $ret->getCode() . "
occurred!<br>");
                print(" Error: " . $ret->getMessage() . "<br>n");
                return false;
        }
        else // We have proper search results
        {
                // Results from the Google search are stored in the
object $ret.
                // The following block of code prints
                // out the structure and contents of the object to the
screen:
                print("n<br><pre>");
                print_r( $ret );
                print("</pre><br>n");

                 // in this example, the only thing we need from the
search results
                 // is the estimatedTotalResultsCount
                 $num = $ret->estimatedTotalResultsCount;
       }

       return true;
}

////////////////////////////////////////////////
// Does Google search with retry.
// Retry is useful because sometimes the connection will
// fail for some reason but will succeed when retried.
function search( $query, $key, &$num )
{
        $result = false;
        $max_retries = 5;
        $retry_count = 0;

        while( !$result && $retry_count < $max_retries )
        {
                $result = do_search( $query, $key, $num );
                if( !$result )
                {
                        print( "Attempt $retry_count failed.<br>n");
                }
                $retry_count++;
        }
        if( !$result )
        {
                print("<br>Sorry, connection to Google failed after
retrying several times. Please check that the Google Developer's Key
you entered was correct. To obtain a developer's key or for more
information on the Google API, visit <a
href="http://www.google.com/apis/">Google API home
page</a>.<br>n");
        }
        return $result;
}

//////////////////////////////////////////////////////////
// The main part of this script

print("<html>n<head>n<title>Google API Example with PHP, SOAP, and
Web Services</title>n</head>n<body>");



                                     182/195                   ACADEMIA USERO
@INTE ACADEMIA                                                      Curso de PHP


print("
<h1>Google API Example Using PHP</h1>
<p>For more info on the Google API, visit the <a
href="http://www.google.com/apis">Google developer's page</a></p>
");

if ( $key == "" )
{
        /*
        You get a developer's key when you register to use Google's
API.
        A developer's key is a unique string that identifies you to
Google.
        You get a maximum of 1000 searches per day using your
developer's key.
        */
        $key = 'thisIsNotaRealKeyBQSgnSiZySpQmfd1wqG'; // put your
developer's key here.
}

if( $query != "" )
{
        // remove the slashes that are automatically added by PHP
before each quotation mark
        $query = stripslashes($query);

        if( search( $query, $key, $num ) )
        {
                print("<h2>Search results</h2>n<p>The estimated number
of results for the search query <i>$query</i> is <b>$num</b>.</p>");
        }
}

//
// print the input form
//
print("<hr><h2>Test out the Google API with PHP, SOAP, and Web
Services:</h2><p>
<form method="POST" action="apiexample.php">
   <p>Search Query <input type="text" name="query" size="20"></p>
   <p>Google Developer's Key <input type="text" name="key"
size="20"></p>
   <p><input type="submit" value="Submit"><input type="reset"
value="Reset"></p>
</form></p>");

print("<hr><h2>About</h2><p>This example was created by <a
href="http://www.sfu.ca/~gpeters">Geoff Peters</a>, creator of <a
href="http://www.googleduel.com/">GoogleDuel</a> and <a
href="http://www.googleduel.com/googlebusinessmain.php">GoogleDuel-
Ultra</a>. Feel free to re-use or distribute this source code.</p>");

print("<hr><h2>Source Code</h2><br><br>");

highlight_file("apiexample.php");

print("</body>n
</html>");
?>




                                    183/195                   ACADEMIA USERO
@INTE ACADEMIA                                                                      Curso de PHP




     Sesión 36. Usar clases externas: traducir


36.1. Darse de alta

1.    Primero tienes que entrar en la página www.phpclasses.org y darte de alta.
2.    Una vez que te des de alta, recibirás un correo.
3.    Haz clic en el enlace de ese correo para elegir una contraseña.
4.    Una vez elegida la contraseña, puedes entrar en la página y descargarte lo que
      quieras.
5.    Luego tiene que elegir tu país.
6.    Luego puedes elegir un grupo de usuarios.



36.2. Descargar el código

1.    Ahora en el cuadro de búsqueda escribe babelfish.




2.    Ahora haga clic en el primer enlace para ir a la página de la clase de babelfish.
3.    Vaya hacia abajo en la página y haga clic en el enlace de descarga .zip.




                                              184/195                         ACADEMIA USERO
@INTE ACADEMIA                                                                       Curso de PHP




4.   Descargue el archivo en una nueva carpeta y descomprímalo.
5.   Entre en Dreamweaver y cree un nuevo sitio en esa carpeta.



36.3. Instalar CURL

Esta clase necesita usar CURL para funcionar. Para activar CURL realice lo siguente:

1.   Abra el archivo php.ini que se encuentra en la carpeta C: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.dll

3.   Reinicie los servidores. Ahora haga una vista previa del archivo example.php.




                                             185/195                           ACADEMIA USERO
@INTE ACADEMIA                                                                    Curso de PHP

¡¡¡Muy bien!!! El programa hace uso del archivo descargado para traducir una frase a
francés y holandés.




36.4. El formulario

A continuación tiene el código de un formulario que nos permite escribir un texto que
será traducido más tarde.

<html>

<head>

<title>traducir</title>

<link rel="stylesheet" type="text/css"

href="estilo.css"/>

</head>

<body>


                                            186/195                         ACADEMIA USERO
@INTE ACADEMIA                                       Curso de PHP

<center>

<table width="550">

<tr bgcolor= #FF9933><td
align="center"><BR><H3>AINTE.COM<BR>"TRADUCTOR
ONLINE"<BR> Formulario</H3></td></tr>

</td></tr></table>

</center>




<FORM METHOD=post ACTION="traductor.php">

<P>Texto a traducir: <input type="text" size=30
name="mensaje">

<P><input type="submit" value="Enviar">

</body>

</html>




                                 187/195          ACADEMIA USERO
@INTE ACADEMIA                                                              Curso de PHP

36.5. Traductor.php

Y este es el código que traduce.

<?php

/* ejemplo simple */

include("babelfish.class.php");

$mensaje = $_POST['mensaje'];

echo "En Español: ".$mensaje.'<br>';

/* Uso de la clase babel */

$tr=new babelfish();

echo "En Francés: ".$tr-
translate($mensaje,'spanish','French').'<br>';

echo "En inglés: ".$tr-
>translate($mensaje,'spanish','english').'<br>';

?>




                      Sesión 37. Flash y PHP


37.1. Hacer que hablen

         Vamos a hacer un pequeño programa que envíe una variable a un archivo de
Flash.




                                          188/195                      ACADEMIA USERO
@INTE ACADEMIA                                                                 Curso de PHP

1.   Abra Dreamweaver, cree un sitio, y cree un archivo con el nombre hola.php con
     el siguiente contenido:
<?php

echo "mivariable=Hello World";

?>

        Lo único que hace este archivo es definir una variable llamada mivariable y
dale el valor Hello World.

2. Ahora entre en Flash, cree una nueva película y guárdela con el nombre hola.fla en
la misma carpeta del servidor donde ha guardado el archivo PHP.

3. Haga clic en el primer fotograma.

4. Abra el panel de acciones y escriba lo siguiente.

//crea un campo de texto

this.createTextField("display_txt",1,0,0,100,20);

//crea un objeto LOADVARS para cargar los datos

var hello_lv:LoadVars = new LoadVars();

//si el objeto LOADVARS recibo los datos

hello_lv.onLoad = function(success){

//si tiene éxito

if(success){

//establece el texto del cuadro con el texto de la variable
mivariable

display_txt.text = this.mivariable;

}else{

//si no, señala un error

trace("Ha ocurrido un error.");




                                             189/195                      ACADEMIA USERO
@INTE ACADEMIA                                                            Curso de PHP

}

}

//carga el código PHP

hello_lv.load("http://localhost/flash/hola.php");




37.2. Enviar correo: el archivo PHP

Cree un nuevo archivo llamado sendmail.php en Dreamweaver y escriba dentro este
código:

<?php

//obtiene las variables externas

$destMail = $_REQUEST["destMail"];

$senderName = $_REQUEST["senderName"];

$senderMail = $_REQUEST["senderMail"];

$senderSubject = $_REQUEST["senderSubject"];

$senderBody = $_REQUEST["senderBody"];

//envía el email con HACIA, ASUNTO, CUERPO

mail($destMail, $senderSubject, $senderBody);

?>


                                        190/195                      ACADEMIA USERO
@INTE ACADEMIA                                                                 Curso de PHP



Las 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 Flash

1.   Cree un nuevo archivo de Flash y guárdelo con el nombre sendmail.fla
2.   Vamos a poner un cuadro de texto para que el usuario pueda introducir datos.
     Haga clic en la herramienta Texto.




3.   Haga clic en el escenario y arrastre para crear un cuadro de texto.




4.   Ahora vaya al panel de Propiedades en la zona inferior y haga clic en el cuadro
     combinado para elegir el tipo de cuadro de texto.




5.   Haga clic en la opción Introducción de texto.
6.   Active la propiedad Mostrar borde.


                                            191/195                         ACADEMIA USERO
@INTE ACADEMIA                                                                      Curso de PHP




7.    Cambie el tamaño de letra a 12.



8.    Cambie el nombre de la instancia a destMail_txt




9.    Cree un texto de tipo normal y colóquelo a su izquierda con el título: Destinatario.




10.   Cree otros cuatro cuadros de texto con sus etiquetas con los nombres de
      instancia que se indican a continuación:
               senderName_txt
               senderEmail_txt
               senderSubject_txt
               senderBody_txt



11.   Modifique la propiedad del campo senderBody_txt a Multilínea y estírela hacia
      abajo.




                                              192/195                          ACADEMIA USERO
@INTE ACADEMIA                                                                     Curso de PHP




12.   Por último hay que crear un butón. Cree un rectángulo en la zona inferior,
      rellénelo de un color y luego colóquelo un texto sobre él.




13.   Ahora selecciona los dos objetos, el texto y el rectángulo, pulsando fuera de ellos
      y arrastrando.
14.   Haga clic en el menú Modificar.
15.   Haga clic en la opción Convertir en símbolo.




16.   Haga clic en la opción Botón.




17.   Haga clic en el símbolo Aceptar.
18.   Cambie el nombre de la instancia a send_btn.



                                              193/195                         ACADEMIA USERO
@INTE ACADEMIA                                                               Curso de PHP

19.   Ahora ya podemos agregar el código, haga clic en el primer fotograma,
      despliegue el panel de Acciones y escriba lo siguiente:
//crea un objeto que se activa cuando soltamos una tecla

//este objeto comprueba que todos los campos estén rellenos

//si es así, activa el botón de enviar y si no lo mantiene desactivado

fieldsFilled = new Object();

fieldsFilled.onKeyUp = function(){

if(destMail_txt.text       !=    ''   &&    senderName_txt.text   !=    ''    &&
senderMail_txt.text !=

'' && senderSubject_txt.text != '' && senderBody_txt.text != ''){

send_btn.enabled = true;

} else {

send_btn.enabled = false;

}

}

//aplica el objeto de modo que este activo cuando se pulsa una
tecla

Key.addListener(fieldsFilled);

//desactiva el campo

send_btn.enabled = false;

//este es el objeto que se comunicará con el archivo PHP

var sendMail_lv:LoadVars = new LoadVars()

//al soltar el botón

send_btn.onRelease = function(){

//establezco las variables a enviar


                                             194/195                   ACADEMIA USERO
@INTE ACADEMIA                                             Curso de PHP

sendMail_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 PHP

sendMail_lv.sendAndLoad("http://localhost/flash/sendmail.php",
sendMail_lv, "POST");

}




                                     195/195            ACADEMIA USERO

Más contenido relacionado

DOC
DOCX
Aprendiendo php my sql, javascript, css, html5 capitulo 3 (introduccion a php
DOCX
Aprendiendo php my sql, javascript, css, html5 capitulo 2
PDF
Apuntes php
DOCX
Aprendiendo php mysql, javascript, css, html5 LIbro Traducido
DOCX
Aprendiendo php my sql, javascript, css, html5 capitulo 4 expresiones y contr...
PDF
Manual completo-php-5
Aprendiendo php my sql, javascript, css, html5 capitulo 3 (introduccion a php
Aprendiendo php my sql, javascript, css, html5 capitulo 2
Apuntes php
Aprendiendo php mysql, javascript, css, html5 LIbro Traducido
Aprendiendo php my sql, javascript, css, html5 capitulo 4 expresiones y contr...
Manual completo-php-5

La actualidad más candente (12)

PPSX
Primera sesion
PDF
Manual de php con ejercicios
PPT
Tema1
PDF
Tutorial A Z A - Programador PHP
PDF
Manual Completo Php 5
PPT
Servidor De Prueba (Wamp Y Php)Presentacion
 
PDF
Curso php desde_cero
PPT
Servidor de prueba wamp
PDF
(Desarrollo web).manual.php.5
PDF
Manual De Php
PDF
Producto 4 programacion web
PPTX
Primera sesion
Manual de php con ejercicios
Tema1
Tutorial A Z A - Programador PHP
Manual Completo Php 5
Servidor De Prueba (Wamp Y Php)Presentacion
 
Curso php desde_cero
Servidor de prueba wamp
(Desarrollo web).manual.php.5
Manual De Php
Producto 4 programacion web
Publicidad

Destacado (12)

PDF
IDEs PHP (PHPBarcelona en Lancelona)
PDF
Aplicaciones PHP para empresas (PHPBarcelona en Lancelona)
PDF
Optimización de aplicaciones PHP (server side)
PPT
Php basico y avanzado
PDF
PHP Avanzado: Características avanzadas de PHP
PDF
PHP Avanzado: Seguridad Web
PDF
Curso Php
PDF
Php desde cero
PDF
PHP Avanzado: Patrones de diseño
PDF
Cuaderno de-ejercicios-y-practicas-php
PDF
Users - Desarrollo PHP + MySQL
PDF
Buenas Prácticas de Programación en PHP
IDEs PHP (PHPBarcelona en Lancelona)
Aplicaciones PHP para empresas (PHPBarcelona en Lancelona)
Optimización de aplicaciones PHP (server side)
Php basico y avanzado
PHP Avanzado: Características avanzadas de PHP
PHP Avanzado: Seguridad Web
Curso Php
Php desde cero
PHP Avanzado: Patrones de diseño
Cuaderno de-ejercicios-y-practicas-php
Users - Desarrollo PHP + MySQL
Buenas Prácticas de Programación en PHP
Publicidad

Similar a Curso PHP Academia Usero (20)

PDF
Diseño e instalación de sitios web (PHP hypertext preprocessor)
PDF
Manualdephpconejercicios 150226132934-conversion-gate01
PDF
Programacion en php atavez de ejemplos
PDF
PDF
Apuntes php
PDF
Desarrollo_web_con_PHP_y_MySQL.pdf
PPTX
Instalar servidor web, php y mysql
 
PPTX
Instalar servidores web y php
 
PDF
Apuntes php
PDF
Apuntes php
PDF
Ejemplos en php
PDF
Programacion en php a traves de ejemplos
PDF
Apuntes php.pdf ejemplos
DOCX
PDF
Manual completo-php-5
PDF
Manual de php
PDF
(Desarrollo web).manual.php.5
PPTX
Tutorial de cómo crear una pagina web
DOCX
Usando Netbeans para desarrollos en PHP
Diseño e instalación de sitios web (PHP hypertext preprocessor)
Manualdephpconejercicios 150226132934-conversion-gate01
Programacion en php atavez de ejemplos
Apuntes php
Desarrollo_web_con_PHP_y_MySQL.pdf
Instalar servidor web, php y mysql
 
Instalar servidores web y php
 
Apuntes php
Apuntes php
Ejemplos en php
Programacion en php a traves de ejemplos
Apuntes php.pdf ejemplos
Manual completo-php-5
Manual de php
(Desarrollo web).manual.php.5
Tutorial de cómo crear una pagina web
Usando Netbeans para desarrollos en PHP

Más de IES Kursaal (20)

DOCX
cdypc-Programacion20222023-V01-paracopiar.docx
PPTX
UD1009 Cerrar programas y procesos IES Kursaal FPB
PPTX
UD1008 Actualizar Sistema Operativo Windows OACE FPB1 IES Kursaal
PPTX
Ud1007 Programador de tareas OACE FPB1 IES Kursaal
PPTX
Normas generales MOOC
PPTX
Word UD0101 Los 5 pasos
PPTX
UD04 Examen Que es el Modding
DOC
Curso Word Academia Usero
DOC
Curso Contabilidad Contaplus Academia Usero
PDF
Curso Word Academia Usero
ODP
Pablo y xema
ODP
Nerea & amparo pensar positivamente )l
ODP
Maria y ana rocio presentacion
ODP
Ana rocio
ODP
Africa y maria diapositiva
ODP
Fumar... ¿para qué? Nerea y Tamara
ODP
Fumar... ¿para qué? Nereo
ODP
Fumar... ¿para qué? Christian y Nerea
ODP
Fumar... ¿para qué? Elizabeth Carmona
ODP
Educación para la paz Spiderman
cdypc-Programacion20222023-V01-paracopiar.docx
UD1009 Cerrar programas y procesos IES Kursaal FPB
UD1008 Actualizar Sistema Operativo Windows OACE FPB1 IES Kursaal
Ud1007 Programador de tareas OACE FPB1 IES Kursaal
Normas generales MOOC
Word UD0101 Los 5 pasos
UD04 Examen Que es el Modding
Curso Word Academia Usero
Curso Contabilidad Contaplus Academia Usero
Curso Word Academia Usero
Pablo y xema
Nerea & amparo pensar positivamente )l
Maria y ana rocio presentacion
Ana rocio
Africa y maria diapositiva
Fumar... ¿para qué? Nerea y Tamara
Fumar... ¿para qué? Nereo
Fumar... ¿para qué? Christian y Nerea
Fumar... ¿para qué? Elizabeth Carmona
Educación para la paz Spiderman

Último (20)

PDF
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
DOCX
PROYECTO DE APRENDIZAJE para la semana de fiestas patrias
PDF
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
PDF
DI, TEA, TDAH.pdf guía se secuencias didacticas
PDF
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
PDF
Escuelas Desarmando una mirada subjetiva a la educación
PDF
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
PDF
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
PDF
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
PDF
PFB-MANUAL-PRUEBA-FUNCIONES-BASICAS-pdf.pdf
PDF
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
PDF
OK OK UNIDAD DE APRENDIZAJE 5TO Y 6TO CORRESPONDIENTE AL MES DE AGOSTO 2025.pdf
PPTX
caso clínico iam clinica y semiología l3.pptx
PDF
Escuela Sabática 6. A través del Mar Rojo.pdf
PPT
Cosacos y hombres del Este en el Heer.ppt
PDF
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
PDF
biología es un libro sobre casi todo el tema de biología
DOCX
2 GRADO UNIDAD 5 - 2025.docx para primaria
PDF
Metodologías Activas con herramientas IAG
DOCX
V UNIDAD - PRIMER GRADO. del mes de agosto
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
PROYECTO DE APRENDIZAJE para la semana de fiestas patrias
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
DI, TEA, TDAH.pdf guía se secuencias didacticas
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
Escuelas Desarmando una mirada subjetiva a la educación
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
PFB-MANUAL-PRUEBA-FUNCIONES-BASICAS-pdf.pdf
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
OK OK UNIDAD DE APRENDIZAJE 5TO Y 6TO CORRESPONDIENTE AL MES DE AGOSTO 2025.pdf
caso clínico iam clinica y semiología l3.pptx
Escuela Sabática 6. A través del Mar Rojo.pdf
Cosacos y hombres del Este en el Heer.ppt
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
biología es un libro sobre casi todo el tema de biología
2 GRADO UNIDAD 5 - 2025.docx para primaria
Metodologías Activas con herramientas IAG
V UNIDAD - PRIMER GRADO. del mes de agosto

Curso PHP Academia Usero

  • 1. @INTE ACADEMIA Curso de PHP Sesión 1. Instalar el servidor y probarlo 1.1. Instalar servidor Para aprender PHP lo primero que tenemos que hacer es instalar un servidor web en nuestro ordenador, de modo que podamos ejecutar nuestros programas en PHP antes de subirlos a un servidor. Una buena opción que instala todo lo necesario para empezar a trabajar es easyphp. Vamos a instalarlo. 1. Entre en la siguiente dirección: www.easyphp.org 2. Haga clic en el enlace Descargas. 1/195 ACADEMIA USERO
  • 2. @INTE ACADEMIA Curso de PHP 3. Descargue la última versión disponible. En la realización de estos apuntes estaba vigente la versión 1.8 4. Seleccione uno de los mirrors para descargar el programa. 5. Una vez descargado el programa, instálelo haciendo doble clic sobre el icono del programa y siguiendo las instrucciones. 2/195 ACADEMIA USERO
  • 3. @INTE ACADEMIA Curso de PHP 1.2. Reiniciar y probar el servidor Una vez instalado el programa, una de las operaciones más comunes a realizar es reiniciar el servidor, ya que puede haber veces que modifiquemos algunos parámetros del mismo y queramos que estén activos. 1. Una vez que arranca EasyPHP, tiene un icono en la barra de tareas y, si hace clic, una ventana en el Escritorio con información sobre PHP. Si hace clic en el icono de EasyPHP, obtiene el siguiente menú, desde donde puede Reiniciar los servidores. 2. Una vez reiniciado el servidor, vamos a probar si está correctamente instalado el programa. Abra Internet Explorer. 3. En el cuadro de dirección, escriba la siguiente dirección: http://localhost 4. Cuando pulse Intro, obtendrá la siguiente ventana, donde se indica que se muestran las carpetas en la carpeta raíz del servidor. Se puede borrar el archivo de esta página y siempre obtener una copia en index-safe.php. 3/195 ACADEMIA USERO
  • 4. @INTE ACADEMIA Curso de PHP 1.3. La carpeta del servidor Vamos a probar la carpeta del servidor para comprobar que, efectivamente, el servidor está bien instalado y funcionan nuestras páginas. 1. Si todo ha ido bien y ha instalado EasyPHP, la carpeta donde se guardan los archivos de las webs es la siguiente: C:Archivos de programaEasyPHP1-8www 2. Entre en esta carpeta. 3. Observe como hay un solo archivo index.php, desde donde puede cargar la página de inicio. 4. Cree un nuevo archivo en el bloc de notas con el siguiente contenido y guárdelo con el nombre prueba.htm: <HTML> <HEAD> <TITLE> Página de prueba </TITLE> </HEAD> <BODY> Esta es la página de prueba </BODY> </HTML> 4/195 ACADEMIA USERO
  • 5. @INTE ACADEMIA Curso de PHP 5. Abra este archivo en el navegador para probarlo. 1.4. El primer programa en PHP Ya que sabemos donde tenemos que poner el archivo para que funcione, vamos a escribir nuestro primer programa en PHP y vamos a probarlo. 1. Cree un nuevo archivo llamado primero.php con el bloc de notas y guárdelo en la carpeta C:Archivos de programaEasyPHP1-8www 2. Escriba el siguiente contenido en ese archivo: <HTML> <HEAD> <TITLE> Página de prueba 1 en PHP </TITLE> </HEAD> <BODY> <? print("Hola, esto es PHP"); ?> </BODY> </HTML> 3. Guarde el archivo y ábralo en su navegador. Observe el contenido del mismo. 5/195 ACADEMIA USERO
  • 6. @INTE ACADEMIA Curso de PHP ¡¡¡Muy bien!!! Ya ha escrito su primer programa en PHP. 1.5. Sintaxis Observe como las ordenes de PHP están encerrados entre los signos <? Y ¿>. Además, la única orden que hemos escrito en PHP termina en ; como todos los comandos que usemos en PHP. 1.6. Tomar datos de formularios Para poder trabajar en posteriores sesiones, vamos a aprender a tomar datos de formularios. 1. Entre en el bloc de notas y cree una página web con el siguiente formulario. <HTML> <HEAD> <TITLE> Formulario 1 </TITLE> </HEAD> <BODY> Formulario 1 <form action="nombre.php" method="POST"> Nombre: <input type= text name=nombre> Edad: <input type=text name=edad> <input type=submit> </BODY> </HTML> 6/195 ACADEMIA USERO
  • 7. @INTE ACADEMIA Curso de PHP 2. Ahora entre en el bloc de notas y cree un archivo llamado nombre.php con el siguiente código PHP: Hola <?php echo $_POST['nombre'];?>. Tu tienes <?php echo $_POST['edad'];?> años . 3. Abra el formulario y pruébelo. Sesión 2. Instrucciones condicionales 2.1. La instrucción IF Sea lo que sea que haga, habrá ocasiones en las que sus programas tomarán decisiones. Por ejemplo, puede decidir cargar una página si el navegador es Internet Explorer u otra página si el navegador es Mozilla. PHP incorpora varias opciones de control de flujo de programa, entre ellas IF. Vamos a hacer un pequeño programa para aprender su funcionamiento. 1. Cree un formulario con el siguiente aspecto. Observe como tiene un campo de texto donde puede introducir el nombre del color: <HTML> <HEAD> <TITLE> Formulario Color </TITLE> </HEAD> 7/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 PHP TABLA DE COLORES WEB http://es.wikipedia.org/wiki/Colores_HTML_ (2) 4. Ahora vamos a cambiar el código de modo que, según el contenido del cuadro, se muestre un color de fondo u otro. Dentro de la parte de código PHP, borre la orden print y escriba lo siguiente. $varcolor=$_POST['color']; if ($varcolor=="rojo") { print("FF0000"); } else { print("ADFF2F"); } 5. ORDEN DE ASIGNACIÓN: Lo primero que se hace es crear una variable llamada varcolor y se le asigna el texto que hemos escrito en el formulario: varcolor lo que sea 6. Anatomía de un IF: La orden IF comienza con la palabra if, que significa SI, el condicional. Luego hay que poner una condición entre paréntesis. Una condición en PHP compara dos valores y da una respuesta negativa o positiva. En este caso se compara el valor de la variable varcolor con la constante de texto “rojo”. La variable de texto varcolor contiene el texto lo que sea y, como no es igual (==) que rojo, pues se ejecute todo lo que está entre llaves detrás del else (en otro caso). IF POSITIVO: se cumple la condición IF NEGATIVO: no se cumple la condición $varcolor=”rojo” $varcolor=”lo que sea” $varcolor=$_POST['color']; $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 edad introducida. 1. Cree un formulario con el siguiente aspecto y guárdelo con el nombre formedad.htm. <HTML> <HEAD> <TITLE> Formulario Edad </TITLE> </HEAD> <BODY> 10/195 ACADEMIA USERO
  • 11. @INTE ACADEMIA Curso de PHP Formulario 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 PHP 3. Este código presenta dos grandes diferencias con respecto al anterior. En este caso, el código está dentro del BODY, por tanto, lo que se imprima se imprimirá dentro de la página. Segundo, la condición ya no tiene un igual, sino un mayor o igual. Este programa primero toma la edad que hemos introducido en el formulario y la introduce en una variable. Luego, dependiendo del valor de esta variable, imprime una cosa u otra en la página. 4. Abra el archivo y pruébelo para comprobar que, efectivamente, según la edad que introduzca, se muestra un dato u otro. Sesión 3. Condiciones SWITCH y Bucles 8.1. ELSEIF Si tiene muchos colores, ha de disponer de una condición múltiple que, dependiendo del color escrito, muestre un color de fondo u otro. 1. Cree un formulario para escribir el color y llámele formcolor3.htm 2. Modifique este formulario de modo que ejecute el archivo elseif.php cuando sea enviado. 3. Ahora escriba el siguiente código en el nuevo archivo elseif.php: <HTML> <HEAD> <TITLE> Página con color de fondo en PHP </TITLE> </HEAD> 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 con un montón de ELSEIF y un ELSE. Hay una instrucción más elegante para hacer lo mismo, es la instrucción SWITCH. 13/195 ACADEMIA USERO
  • 14. @INTE ACADEMIA Curso de PHP La instrucción SWITCH depende del valor de una variable. Según lo que valga esa variable se ejecutará una acción u otra. Vamos a hacer un ejemplo para ver como funciona: 1. Cree un formulario para escribir el color y llámele formcolor4.htm 2. Modifique este formulario de modo que ejecute el archivo switch.php cuando sea enviado. 3. Escriba este nuevo archivo switch.php <HTML> <HEAD> <TITLE> Página con color de fondo en PHP </TITLE> </HEAD> <BODY BGCOLOR= <? $varcolor=$_POST['color']; switch ($varcolor) { case "rojo": print("FF0000"); break; case "blanco": print("FFFFFF"); break; case "negro": print("000000"); break; case "verde": print("00FF00"); break; default: 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 la contraseña de un usuario. Si el usuario introduce el dato una sola vez y se equivoca, no podemos permitirlo entrar. Para hacer un programa que pregunte varias veces los datos del usuario hasta que sean correctos necesitamos un bucle, algo que se repita hasta que se cumpla una cierta condición. 1. Cree un nuevo archivo llamado while.php con el siguiente código: <HTML> <HEAD> <TITLE> While </TITLE> </HEAD> <BODY> <? $contador=0; 15/195 ACADEMIA USERO
  • 16. @INTE ACADEMIA Curso de PHP while ($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 un operador de asignación. La orden while tiene siempre una condición entre paréntesis. En este caso, la condición es que la variable contador debe ser menor que 10. Luego hay dos órdenes, un print que imprime en la página el valor de la variable que hemos creado, y un incrementador, que suma uno a la variable que hemos creado. Vamos a hacer un recorrido por el programa para ver como funciona. 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 PROGRAMA Ejercicios. 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 PHP 4.1. DO…WHILE Puede usar la sentencia DO…WHILE si quiere ejecutar el bucle por lo menos una vez. En este caso, se ejecuta el bucle al menos una vez y luego se comprueba la condición. 5. Cree un formulario para escribir el color y llámele formcolor3.htm 6. Modifique este formulario de modo que ejecute el archivo elseif.php cuando sea enviado. 7. Cree un nuevo archivo llamado dowhile.php con el siguiente código: <HTML> <HEAD> <TITLE> DO WHILE </TITLE> </HEAD> <BODY> <? $contador=0; do { print($contador."<br>"); $contador=$contador+1; } while ($contador<=10); ?> </BODY> </HTML> 20/195 ACADEMIA USERO
  • 21. @INTE ACADEMIA Curso de PHP 8. 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 PHP 4.2. FOR La instrucción FOR permite ejecutar una serie de acciones un número determinado de veces. 1. Cree un nuevo archivo llamado FOR.PHP con el siguiente contenido. <HTML> <HEAD> <TITLE> DO WHILE </TITLE> </HEAD> <BODY> <? for ($contador=0;$contador<=10;$contador++) { print($contador."<br>"); } ?> </BODY> </HTML> 2. La sintaxis del FOR es más compacta, ya que se hace la inicialización de la variable, se define la condición y se hace el incremento en una sola línea. La estructura es la siguiente: for (inicialización variable; condición; incremento o decremento) { 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 PHP 4.3. Comentarios Los comentarios nos permiten añadir texto donde podemos escribir que es lo que hace una línea de código y otra información. Hay tres tipos de comentarios: Comentarios con barra doble (//): permiten hacer comentarios de una sola línea //esto es un comentario Comentarios con almohadilla (#): permiten hacer comentarios de una sola línea con almohadilla #esto es un comentario Comentario con varias líneas (/* */): /* este comentario tiene varias líneas */ 4.4. Operadores Ya sabemos un poco de PHP así que vamos a hacer un pequeño programa que calcule cuanto cuesta el pedido de un usuario. 1. Para empezar, cree el siguiente formulario (solo hemos añadido el texto del formulario). 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 3 cuadros de texto con los nombres ndvd, ncd y ndvdreg. 2. Ahora tenemos que crear el archivo procesarpedido.php que tiene que tomar los datos del formulario, procesarlos y dar una respuesta. Empezamos por lo más fácil, cree el siguiente archivo que toma los datos del formulario y los mete en variables, además de escribir la fecha del código: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859- 1" /> <title>Pedido procesado</title> </head> <body> 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 PHP 4. Ahora vamos a definir los precios de cada artículo. Para definir unos número que no van a cambiar durante el programa, se usan constantes. Escriba las siguientes 3 líneas de código al final, que definen 3 constantes en el programa. define(“PRECIODVD”,1); define(“PRECIOCD”,2); 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. Funciones 5.1. Funciones Una función permite escribir un bloque de código que puede ser usado distintas veces dentro de un programa. Vamos a ver un ejemplo de uso de las funciones dentro de un pequeño programa. Vamos a hacer un pequeño programa que nos calcule el cuadrado de un número y lo ponga en un cuadro. 1. Cree el siguiente formulario: 29/195 ACADEMIA USERO
  • 30. @INTE ACADEMIA Curso de PHP 2. 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 PHP 5. La segunda y más importante, devuelve el valor de la función. Lo que hace es devolver el contenido de la variable que calculamos anteriormente y que contiene el cuadrado del número. 6. La palabra function lo único que hace es definir la función, luego la tenemos que usar. Esto es lo que se produce en la parte principal del programa. Primero se toma el contenido del formulario y se introduce en una variable: $varnumero=$_POST['numero']; 7. Luego se llama a la función cuadrado pasando como argumento el contenido de la variable y el resultado se imprime en la pantalla: print ("Cuadrado:".cuadrado($varnumero)); 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 tablas 8.1. Funciones y tablas Vamos a crear una función que haga una tabla con tantas filas como indique el número que pasamos como argumento. 1. Cree el siguiente formulario: 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 PHP 3. La orden print(“<table border=1>”); imprime en la página el código HTML necesario para que comience un tabla. 4. Luego comienza un bucle cuyo contador es la variable i. Se repite tantas veces como indica la variable $varnfilas. Luego el contador i se incrementa en uno. 5. Dentro del bucle se produce la impresión de la celda en sí. Además, se introduce dentro de la celda la palabra fila y el número del contador, de modo que sabemos el número de la fila. 6. ¿Cómo cambiaríamos esto para que la impresión de una fila fuera una función? Observe el siguiente código: <? 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 PHP 7. Ahora tenemos una función crearTabla que contiene todo el código necesario para insertar la tabla en la página web. 6.2. Tablas con varias columnas Vamos a hacer un pequeño programa que cree una tabla insertando el número de filas y columnas. 1. Cree el siguiente formulario: 2. El código necesario para que se imprima una tabla es el siguiente: <? 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 que se introduzca en un formulario. 37/195 ACADEMIA USERO
  • 38. @INTE ACADEMIA Curso de PHP Sesión 7. Arrays 7.1. Arrays Si vendemos 3 artículos nos puede servir un formulario con 3 filas y ya está, pero, ¿y si vendemos mil artículos? ¿Cómo hacemos para apuntar todos los artículos que vamos a vender? Vamos a usar arrays. Un array es una variable que puede contener muchos números. Cada número ocupa una posición dentro del array y puede ser accedido por un número o índice. Array de amigos Posición Amigos 0 Pedro 1 Juan 2 Miguel 3 Antonio 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 en pantalla: 8. Cree el siguiente documento PHP y guárdelo con el nombre array.php: <? $amigos[0]="Pedro"; $amigos[1]="Juan"; $amigos[2]="Miguel"; $amigos[3]="Antonio"; $i=0; do { print($amigos[$i]."<br>"); $i++; } while ($i<=3); ?> 9. Observe como se definen los valores del array: $nombredelarray[número]=valor; Se define el nombre del array y, entre corchetes, el número del índice, esto es, la posición que se va a buscar dentro del array. 10. Luego hemos puesto un bucle desde el que se van imprimiendo los elementos del array. El resultado del programa debe ser similar al siguiente: 39/195 ACADEMIA USERO
  • 40. @INTE ACADEMIA Curso de PHP 7.2. Contar los elementos del array A continuación tiene una modificación del mismo programa donde añadimos una función que permite contar cuantos elementos tiene el array. Eso se define para luego usarlo como límite para el bucle FOR. <? $amigos[0]="Pedro"; $amigos[1]="Juan"; $amigos[2]="Miguel"; $amigos[3]="Antonio"; $nelementos=count($amigos); for($i=0;$i<$nelementos;$i++) { print($amigos[$i]."<br>"); }; ?> 7.3. Sesión 8. Arrays 40/195 ACADEMIA USERO
  • 41. @INTE ACADEMIA Curso de PHP 8.1. Foreach La función FOREACH nos permite recorrer un array de la forma más elegante posible. <? $jugadores["portero"]="Casillas"; $jugadores["defensa"]="Pujol"; $jugadores["medio"]="Alonso"; $jugadores["delantero"]="Reyes"; reset($jugadores); foreach($jugadores as $value) { print($value."<br>"); } ?> 8.2. Ordenar un array: sort Podemos usar la función sort para ordenar los elementos de un array. Pruebe el siguiente programa para observar el resultado: <? 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 índices numé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: asort Para evitar este problema puede usar el comando asort, que ordena el array junto con los índices. Pruebe el siguiente programa y compruebe el resultado: <? $jugadores["portero"]="Casillas"; $jugadores["defensa"]="Pujol"; $jugadores["medio"]="Alonso"; $jugadores["delantero"]="Reyes"; 42/195 ACADEMIA USERO
  • 43. @INTE ACADEMIA Curso de PHP asort($jugadores); reset($jugadores); foreach($jugadores as $value) { print($value."<br>"); } print($jugadores["portero"]); ?> 8.4. Orden inverso Puede usar las funciones rsort() y arsort() para ordenar un formulario de forma inversa. Pruebe a cambiar la orden asort por arsort y compruebe el resultado. 8.5. Ordenar por el índice Ahora cambie la orden asort por la orden ksort(). Esta orden le permite ordenar un array según el índice. 43/195 ACADEMIA USERO
  • 44. @INTE ACADEMIA Curso de PHP Ejercicio. Haz un programa que calcule el número mayor de una lista de 5 números introducidos en un formulario. <? $numeros[0] =$_POST['n1']; $numeros[1] =$_POST['n2']; $numeros[2] =$_POST['n3']; $numeros[3] =$_POST['n4']; $numeros[4] =$_POST['n5']; reset($numeros); foreach($numeros as $value) { print($value."<br>"); } $mayor=$numeros[0]; foreach($numeros as $value) { if ($value>$mayor) { $mayor=$value; } } 44/195 ACADEMIA USERO
  • 45. @INTE ACADEMIA Curso de PHP print($mayor); ?> Sesión 9. Email con PHP 9.1. Email Es bien fácil enviar un email a través de PHP. Lo único que tenemos que tener en cuenta es que debemos modificar el fichero PHP.INI para especificar el nombre del servidor SMTP que usaremos para enviar el correo. 1. Para modificar el fichero PHP.INI haga clic en el icono de EASYPHP en la barra de tareas. 2. Haga clic en el submenú Configuración. 3. Haga clic en PHP. 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 PHP 5. Guarde este archivo. 9.2. El formulario Ahora cree un formulario con un par de campos de texto cuya acción sea el archivo email.php. 9.3. Email.php Observe el código email.php que procesa los datos de lformulario. <? $correo="jluserovilchez@hotmail.com"; $asunto="Este es el asunto"; $redireccion="gracias.html"; $mensaje=""; 46/195 ACADEMIA USERO
  • 47. @INTE ACADEMIA Curso de PHP foreach($_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 para probar de nuevo."); } ?> 9.4. Como funciona el comando mail() Para el comando mail() necesitamos tener la dirección de la persona a la que queremos enviar el email, el asunto y el mensaje que queremos enviar. Por ello, hemos definido las variables correo y asunto. Luego para el cuerpo del mensaje hemos usado un bucle FOREACH que va tomando todos los valores del formulario que están dentro de la variable $_POST. Una vez llena la variable mensaje, podemos ejecutar el comando mail dentro de un IF. ¿Por qué? Porque el comando mail devuelve un valor booleano indicando si el 47/195 ACADEMIA USERO
  • 48. @INTE ACADEMIA Curso de PHP envío ha sido correcto o no. Aprovechamos esto para imprimir en la página de respuesta del envío si el mensaje ha sido correctamente enviado. Sesión 10. Funciones de cadena 10.1. Funciones de cadena: substr Habrá ocasiones en que tenga que comprobar o modificar algunos datos introducidos en el formulario para que se ajusten a sus necesidades. La función substr devuelve un trozo de una cadena de texto. Tiene 3 argumentos: substr(string cadena, int posicionInicial, int longitudcadenadevuelta) Cadena: cadena que introducimos para obtener una parte. PosicionInicial: donde queremos que empiece. 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 PHP print(substr($varpalabra,4)); ?> 3. Este código saca todas las letras a la derecha del carácter 4. Si escribimos juliancito, el programa devuelve ancito. 10.2. La función trim() Elimina al principio y al final los espacios en blanco, tabulaciones y caracteres de línea nueva. Esto puede ser útil para quitar los errores que pueda cometer el cliente al escribir sus datos. Por ejemplo, la orden: print(trim($varpalabra)); imprime el contenido de la variable $varpalabra, quitando todos los caracteres sobrantes a la izquierda y a la derecha. 10.2. La función strlen() Da la longitud de la cadena de caracteres. Por ejemplo: Print(strlen($varpalabra) Imprimir la longitud de la cadena de caracteres. 10.3. Las funciones strtolower() y strtoupper() Convierten la cadena de texto a minúsculas y mayúsculas. 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 de otra cadena. Por ejemplo, puede usar esta función para comprobar si existe la arroba cuando un usuario escribe los datos de un correo electrónico. ereg(“@”,$email) Sesión 11. Enviar archivos al servidor 11.1. El formulario Cree el siguiente formulario. El formulario tiene un nuevo tipo de entrada de formulario, una entrada de tipo file que permite seleccionar un archivo, para ello añade un botón Examinar. 50/195 ACADEMIA USERO
  • 51. @INTE ACADEMIA Curso de PHP 11.2. PHP El código PHP que hay que añadir al fichero de respuesta es el siguiente: <? $target_path=""; $target_path = $carpetadestino . basename( $_FILES['fichero']['name']); 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 PHP 11.3. ¿Dónde acaba el fichero? El fichero termina en la carpeta apache dentro de la carpeta donde tenga instalado EASYPHP. Sesión 13. Enviar archivos a un servidor FTP 13.1. El formulario Cree el siguiente formulario. El formulario tiene un nuevo tipo de entrada de formulario, una entrada de tipo file que permite seleccionar un archivo, para ello añade un botón Examinar. 52/195 ACADEMIA USERO
  • 53. @INTE ACADEMIA Curso de PHP 13.2. PHP Pedazo de script. Vamos a ver que hace. <? PRIMERO COJO LAS VARIABLES DEL FORMULARIO Y LAS METO EN VARIABLES CON NOMBRES QUE TENGAN SENTIDO $servidor = $_POST['servidor']; $usuario = $_POST['usuario']; $contrasena = $_POST['contrasena']; DEJO QUE LA CARPETA DE TRABAJO SEA LA CARPETA RAIZ DEL SERVIDOR $carpetatrabajo=""; DEFINO LA CARPETA TEMPORAL COMO AQUELLA QUE ESPECIFICA EL SERVIDOR HTTP (el apache) $carpetatemporal=basename($_FILES['fichero']['tmp_name']); SUBO EL FICHERO AL SERVIDOR HTTP 53/195 ACADEMIA USERO
  • 54. @INTE ACADEMIA Curso de PHP move_uploaded_file($_FILES['fichero']['tmp_name'],$carpetatrabajo."/".$carpetatempor al) or die("No puedo subir el fichero a la carpeta de trabajo"); AHORA EMPIEZA EL FTP CREO LA CONEXIÓN FTP $conexion = ftp_connect($servidor) or die ("No puedo conectarme al host"); ME CONECTO AL SERVIDOR FTP USANDO LOS DATOS QUE HE METIDO EN EL FORMULARIO ftp_login($conexion, $usuario, $contrasena) or die("Los datos de usuario y contraseña están bien"); DEFINO LA CONEXIÓN FTP COMO PASIVA: ESTO ES MUY IMPORTANTE ftp_pasv( $conexion, true ); LE DIGO QUE SUBA EL FICHERO CON LA ORDEN FTP_PUT, ESPECIFICANDO COMO FICHERO EL QUE SE SUBIÓ ANTES AL SERVIDOR HTTP $cargar=ftp_put($conexion,$_FILES['fichero']['name'],$carpetatrabajo."/".$carpetatemp oral,FTP_BINARY); LA VARIABLE CARGAR ES VERDADERA SI SE HA SUBIDO EL ARCHIVO CORRECTO Y SI NO PUES SE AVISA DE QUE NO SE HA PODIDO SUBIR if (!$cargar) { print "No puedo subir el fichero"; } else { print "Subida exitosa"; 54/195 ACADEMIA USERO
  • 55. @INTE ACADEMIA Curso de PHP } CIERRO LA CONEXIÓN ftp_close($conexion); ?> Sesión 14. Escribir y leer datos en ficheros 14.1. Un caso Cuando los datos son enviados mediante un formulario, podemos hacer que estos sean enviados a un correo electrónico. Esto supone una larga lista de mensajes que responder en el correo. Vamos a hacer que todos los mensajes se escriban en un archivo de texto: este archivo de texto puede despues ser procesado por un software de respuesta automática. 14.2. Cree el formulario Cree el siguiente formulario. Observe como hay un campo de área de texto. 55/195 ACADEMIA USERO
  • 56. @INTE ACADEMIA Curso de PHP 14.3. El código para escribir Escribir en un fichero es muy fácil. Observe el siguiente código. <? //cogemos los datos $nombre=$_POST['nombrepers']; 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 final if($fp=fopen($fichero,"a")) { //si se abre correctamente se escribe en la variable fichero fp el contenido de 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 fichero fclose($fp); ?> El contenido del fichero opiniones.txt ,que está en el directorio raiz del servidor es el siguiente: ececec rhnn qsvs rvrvrv eccec 57/195 ACADEMIA USERO
  • 58. @INTE ACADEMIA Curso de PHP dfdfdef 14.4. El código para leer El fichero está escribo en nuestro servidor. ¿Cómo leerlo desde PHP? Para ello vamos a abrir el fichero con la orden fopen en modo “r”, de forma que solo se lea el fichero. Luego usaremos un bucle cuya condición es que no se haya llegado al final del fichero. Dentro del bucle introduciremos una roden que irá leyendo cada una de las líneas del fichero y poniéndolas en la página. <? //especificamos el nombre del fichero a abrir $fichero="opiniones.txt"; //lo abrimos en modo solo lectura $fp=fopen($fichero,"r"); //el bucle tiene la condición de que no termine el fichero while (!feof($fp)) { //se lee una línea del fichero y se imprime en pantalla print(fgets($fp)); //se imprime una línea print("<br>"); } //y luego se cierra el fichero fclose($fp); 58/195 ACADEMIA USERO
  • 59. @INTE ACADEMIA Curso de PHP ?> Sesión 15. Base de datos MySQL 15.1. MySQL Al instalar EasyPHP, instalamos el compilador de PHP y además, un gestor de base de datos como MySQL. Vamos a crear una pequeña base de datos en MySQL para gestiona el acceso a una página web. 15.2. Entrar en PHPMyAdmin y crear la tabla PHPMyAdmin nos permite gestionar las bases de datos y las tablas de las mismas. Vamos a ver como se entra. 1. Haga clic con el botón derecho del ratón sobre el icono de EasyPHP en la barra de tareas. 2. En el menú objeto, haga clic en el submenú Configuración. 59/195 ACADEMIA USERO
  • 60. @INTE ACADEMIA Curso de PHP 3. 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 PHP 7. 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 PHP 11. 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 PHP 3. Luego haga clic en la opción Insertar nuevo registro y haga clic en el botón Continúe. 4. Siga insertando dos registros más para dos nuevos usuarios con los datos: u2 y cu2, u3 y cu3. 5. Vamos a ver los datos que hemos introducido. Haga clic en el botón Examinar. 6. Observe como puede ver los datos que ha introducido. 15.4. Crear el formulario Cree el siguiente formulario de entrada: el usuario introducirá los datos en el formulario y si sus datos son correctos, saltaremos a otra página. 63/195 ACADEMIA USERO
  • 64. @INTE ACADEMIA Curso de PHP 15.5. Validar los datos Para validar los datos, vamos a conectarnos a la base de datos, abrir la tabla y vamos a buscar los datos que hemos escrito en la tabla. Si aparecen, dejamos que entre el usuario, si no, pues no lo dejamos. <? //empezar la sesión session_start(); // estos son los datos de entrada en la base de datos MYSQL // por defecto el nombre de usuario es ROOT y la contraseña PASSWORD $db_usuario = 'root'; $db_contrasena = ''; //leer los datos en variables $usuario=$_POST['usuario']; $contrasena=$_POST['contrasena']; //print($usuario); //print($contrasena); 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) or die(mysql_error()); //seleccionamos la base de datosº mysql_select_db('control', $conexion) or die(mysql_error()); //se crea la cadena de consulta SQL $consulta = "SELECT * FROM usuarios WHERE idusuario='$usuario' AND contrasena='$contrasena'"; print($consulta); print("<br>"); //se ejecuta la consulta $resultado = mysql_query($consulta, $conexion) or die('Error haciendo consulta'); $filasdevueltas=mysql_num_rows($resultado); //si hay una fila, es que está dado de alta, si no, es que no es un usuario if($filasdevueltas == 1) { print 'Validado'; } else { print 'No validado'; } ?> Sesión 16. Insertar y eliminar 65/195 ACADEMIA USERO
  • 66. @INTE ACADEMIA Curso de PHP 16.1. Insertar un registro Si tenemos una tabla, tenemos que permitir al usuario introducir datos. Cree el siguiente formulario: Él código PHP que introduce los datos del formulario en la tabla es el siguiente: <? //empezar la sesión session_start(); // estos son los datos de entrada en la base de datos MYSQL // por defecto el nombre de usuario es ROOT y la contraseña PASSWORD $db_usuario = 'root'; $db_contrasena = ''; //leer los datos en variables $usuario=$_POST['usuario']; $contrasena=$_POST['contrasena']; //nos conectamos a la base de datos $conexion = mysql_connect('localhost', $db_usuario, $db_contrasena) or die(mysql_error()); //seleccionamos la base de datosº mysql_select_db('control', $conexion) or die(mysql_error()); 66/195 ACADEMIA USERO
  • 67. @INTE ACADEMIA Curso de PHP //se crea la cadena de consulta SQL $insercion = "INSERT INTO usuarios SET idusuario='$usuario',contrasena='$contrasena'"; print($insercion); print("<br>"); //se ejecuta la consulta $resultado = mysql_query($insercion, $conexion) or die('Error insertando registro'); ?> El código es similar al que nos permite entrar en nuestra página. La diferencia está en la consulta SQL. La consulta INSERT permite introducir datos en una tabla. Hay que decir en que tabla queremos introducir los datos, y luego especificar el valor de cada uno de los campos de la tabla. 16.2. Eliminar un registro También puede eliminar un registro fácilmente. El código PHP que nos permite eliminar un registro el el siguiente. <? //empezar la sesión session_start(); 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' AND contrasena='$contrasena'"; print($eliminacion); print("<br>"); //se ejecuta la consulta $resultado = mysql_query($eliminacion, $conexion) or die('Error insertando registro'); ?> Sesión 17. Buscar 17.1. Buscar datos: crear la base de datos Vamos a crear un formulario que busque los datos de una agenda de personas en una base de datos. Cree una base de datos llamada agenda. Dentro de la misma 68/195 ACADEMIA USERO
  • 69. @INTE ACADEMIA Curso de PHP cree 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 formulario Ahora cree un formulario para buscar los datos. Vamos a crear un formulario donde podamos introducir los datos y se nos busque automáticamente el teléfono de la persona buscada. 17.3. El código de búsqueda Este es el código que realiza la búsqueda: <? // estos son los datos de entrada en la base de datos MYSQL // por defecto el nombre de usuario es ROOT y la contraseña PASSWORD $db_usuario = 'root'; $db_contrasena = ''; 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('Error buscando'); //contamos las filas devueltas $filasdevueltas=mysql_num_rows($resultado); //si no hay filas devueltas es que no se ha encontrado if ($filasdevueltas==0) { print ("No se ha encontrado a la persona en la base de datos"); } else { 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ódigos Mysql_fetch_array extrae los resultados de la sentencia SQL como una matriz asociativa. En una matriz asociativa cada fila tiene un nombre, en este caso los nombres son los nombre de los campos. nombre juan telefono 952555555 Una vez obtenidos los datos del array podemos acceder a estos datos como en un array. El código $fila[“telefono”] permite imprimir el teléfono. Sesión 18. Headers 18.1. ¿Qué son los headers? Son cabeceras de las páginas que permiten especificar ciertos datos sobre las mismas. Observe como, al crear una nueva página web con Dreamweaver, se añaden algunos headers a la página. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> Estos headers definen propiedades de la página. 71/195 ACADEMIA USERO
  • 72. @INTE ACADEMIA Curso de PHP 18.2. Headers en PHP La sintaxis de un header en PHP es la siguiente: Header (nombrecabecer;valorcabecera); 18.3.Ejemplo: enviar a otra página Cuando creamos el programa que comprobaba si un usuario podía entrar en un sitio, podrías haber hecho que se abriera una página de error si introducía mal los datos. El siguient código envía al usuario a otra página: <? header("Location: http://localhost/bonita.html"); ?> Este código nos conduce automáticamente a la URL que indiquemos 18.4. Ejemplo: tipo de documento Podemos establecer el tipo de documento que será enviado al navegador. Este valor hace referencia a una página HTML de la forma: header(“Content-Type:text/html”); Así podemos indicar al navegador el tipo de página que le vamos a enviar. 18.5. Ejemplo: obligar a guardar un documento Podemos hacer que el usuario, al descargar un archivo, tenga un cuadro de diálogo donde se le pregunte que nombre quiere dar al archivo que quiere guardar. En el siguiente caso, enviamos un archivo PDF con la orden readfile y obligamos a que se muestre el cuadro de diálogo con el header Content-Disposition. 72/195 ACADEMIA USERO
  • 73. @INTE ACADEMIA Curso de PHP Primero hemos creado un archivo con dos enlaces, el primero un enlace a la página despdf.php que contiene las cabeceras indicadas anteriormente y otro enlace normal al archivo archivo.pdf. Si hacemos clic en el segundo enlace, se nos abre el archivo PDF dentro del navegador si tenemos instalada la aplicación Acrobat Reader. El archivo despdf.php tiene el siguiente aspecto: <?php // enviaremos un tipo de archivo PDF header('Content-type: application/pdf'); // Se va a llamar archivo.pdf header('Content-Disposition: attachment; filename="descarga.pdf"'); // La fuente del PDF se encuentra en original.pdf readfile('archivo.pdf'); ?> Cuando hacemos clic en el primer enlace, se nos muestra la siguiente ventana: 73/195 ACADEMIA USERO
  • 74. @INTE ACADEMIA Curso de PHP 18.6. Evitar que una página sea cacheada Puede evitar que una página sea cacheada usando el siguiente código: <? // From PHPLib library (http://phplib.netuse.de/. Released under LGPL) header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-cache"); header("Pragma: no-cache"); ?> 18.7. Esperar La siguiente página espera 3 segundos para cargar otra página y muestra un mensaje de espera: <?php header( 'refresh: 3; url=http://www.nba.com' ); echo '<h1>Espera 3 segundos</h1>'; ?> 74/195 ACADEMIA USERO
  • 75. @INTE ACADEMIA Curso de PHP Headers Already Sent” Error You may encounter an error message that looks like this: Warning: Cannot modify header information - headers already sent by (output started at C:Program FilesApache GroupApache2testheadererror.php:1) in C:Program FilesApache GroupApache2testheadererror.php on line 2 This is a common error when working with sessions and cookies. It can occur if you try to set them after you have sent HTML code to the server. The server has to deal with these before any HTML output is sent to the server, which means that these lines must be the first in the code before any HTML code or echo statement. If you have even a trailing leading space before your first <?php line of code, you will see this error. 590 Chapter 17 If you need to set cookie or session variables within the body of your code, you need to rethink your logic to accommodate this limitation. As we discuss in Chapter 2, those variables need to be addressed at the beginning of your code for them to be parsed correctly by the PHP server. There are ways to get around this error, using the output buffer to suppress these errors. The output buffer is used to store all HTML output in a buffer until you are ready to send it to the browser. The command ob_start is used to begin the output buffering process, and ob_end_flush will send all of the stored HTML output to the browser, empty the buffer, and end the output storing process. This will let you cheat the system and store session and cookie variables in the body of the code, as well as allow you to use the header(“location:”) function in the body of the code. While this is not recommended for beginners, as it is more important for you to learn to code well, and according to the “rules,” this can be a useful set of functions for a more experienced programmer. If you would like to learn more about the output buffer functions, you can find a complete list of them in Appendix C, or visit www.php.net. Sesión 19. Cookies 75/195 ACADEMIA USERO
  • 76. @INTE ACADEMIA Curso de PHP 19.1. ¿Qué son las cookies? Según Wikipedia, una cookie es: Una cookie es un fragmento de información que se almacena en el disco duro del visitante de una página web a través de su navegador, a petición del servidor de la página. Esta información puede ser luego recuperada por el servidor en posteriores visitas. Las principales utilidades de una cookie son: Controlar los usuarios que entran en una página Dar opciones de diseño a los usuarios 19.2. Introducir el nombre Por ejemplo, podemos hacer una cookie que recuerde nuestro nombre. Cree el siguiente formulario. 19.3. Guardar el dato introducido La siguiente página guarda el nombre introducido en una cookie. Observe como hemos usado el método GET en el formulario. <?php setcookie("usuario",$_GET['nombre']); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 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 valor La siguiente página recuperar el valor de la cookie y la muestra en el navegador: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859- 1" /> <title>Documento sin t&iacute;tulo</title> 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 fondo Las siguientes páginas permiten cambiar el color de fondo de las páginas según una cookie establecida: Formulario para seleccionar el color Script que graba la cookie con el color <?php setcookie("fondo",$_GET['fondo']); ?> 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 PHP 20.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 y entra en modo HTML al principio del archivo requerido, después vuelve al modo PHP al final. Así, los códigos dentro del archivo requerido que deban ser ejecutados como PHP deben ser encerrados dentro de etiquetas de comienzo y fin de PHP. Una sentencia condicional no afecta a require(): un require() siempre lee el archivo referenciado, incluso si la línea en que se encuentra no se ejecuta nunca. Si se quiere incluir condicionalmente un archivo, se usa include(). Lo mismo ocurre con los bucles: aunque el código contenido en el archivo referenciado esté en un bucle, el require() sólo se ejecuta una vez. No se puede poner un require() en una estructura de bucle y esperar que incluya un archivo distinto en cada iteración. Puede usar include() para ello. 20.2 Crear el sitio 1. Como quiera que ya podemos empezar a hacer cositas, vamos a crear un nuevo sitio en Dreamweaver que use tecnología PHP. Cree un nuevo sitio en Dreamweaver. 2. Escriba un nombre para el sitio. 3. Seleccione como tecnología de servidor PHP MySQL. 80/195 ACADEMIA USERO
  • 81. @INTE ACADEMIA Curso de PHP 4. Cree una carpeta dentro de la carpeta del servidor de PHP y selecciónela para almacenar los archivos del sitio. 5. La URL del navegador de prueba será algo similar a la siguiente: http://localhost/nombredetucarpeta 6. No usaremos un servidor remoto. 81/195 ACADEMIA USERO
  • 82. @INTE ACADEMIA Curso de PHP 7. Para terminar, haga clic en el botón Finalizar. 20.3. Crear la cabecera y el pie Usando las imágenes cabecera.jpg y pie.jpg cree las siguientes páginas. 82/195 ACADEMIA USERO
  • 83. @INTE ACADEMIA Curso de PHP 20.4 Crear la página central Use Dreamweaver para crear el contenido de la página que irá en el centro y guárdela con el nombre cuerpo.html. Es en esta página donde introducirá el código PHP para insertar cabecera y pie. <body> <table width="600" border="1" cellspacing="0" cellpadding="0"> <tr> <? require("cabecera.html"); ?> </tr> <tr> 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. Include Puede usar include() con un array y un bucle para incluir varios archivos en una página web. Observe el siguiente ejemplo: $ficheros = array(„a1.htm‟,‟a2.htm‟,‟a3.htm‟); for ($i=0; $i<count($ficheros),$i++) { include $ficheros[$i]; } Esta orden crea una página con el contenido de los archivos primero.inc, segundo.inc y tercero.inc. 84/195 ACADEMIA USERO
  • 85. @INTE ACADEMIA Curso de PHP La diferencia entre include y require es que include se vuelva a calcular cada vez que se encuentra. El código es muy similar al anterior: <body> <table width="600" border="1" cellspacing="0" cellpadding="0"> <tr> <? include("cabecera.html"); ?> </tr> <tr> <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. Sesiones 21.1. Sesiones Las sesiones nos permiten mantener información entre las páginas cuando un usuario está navegando. Esto nos permite, por ejemplo, guardar las compras que hace en una tienda virtual para cobrarle al final. Las sesiones permiten guardar algunos datos mientras el usuario está activo, de modo que podamos identificarlo conforme va navegando por nuestra página. Los datos de una sesión se guardan todos en la misma sección del servidor, junto con todos los datos de la misma. 21.2. Un primer ejemplo El siguiente código permite crear un contador que vaya indicando cuantas páginas hemos visitado en un sitio: <? session_register('contador'); //$contador=0; print("Contador vale:". ++$_SESSION['contador']); ?> Lo primero que se hace es abrir la sesión. Esto se puede conseguir de dos maneras, con session_start(), que comienza una sesión o con sessión_register(), que comienza una sesión y crea una variable de sesión nueva. es2.php.net 86/195 ACADEMIA USERO
  • 87. @INTE ACADEMIA Curso de PHP session_start() crea una sesión (o la continúa basandose en el session id pasado por GET o mediante una cookie). Si desea usar una sesión con un nombre en concreto, debe llamar a session_name() antes de llamar a session_start() session_register() acepta un número variable de argumentos, cualquiera de los cuales puede ser o una cadena que contiene el nombre de una variable, o una matriz que consista de nombres de variables u otras matrices. Para cada nombre, session_register() registra la variable global con ese nombre en la sesión actual. 21.3. La ID de sesión La SID o identificador de sesión nos permite acceder a un identificador único que tiene cada sesión dentro del servidor. A continuación puede ver un pequeño programa que crea una sesión, nos imprime el número y luego la destruye. session_destroy() destruye todos los datos asociados con la sesión actual. No destruye ninguna de las variables globales asociadas a la sesión ni la cookie. <? session_start(); echo SID; session_destroy(); ?> 21.4. Guardar campos de formularios A continuación tiene los códigos de tres páginas llamadas 01nombre.php, 02apellidos.php, 03resultado.php. 87/195 ACADEMIA USERO
  • 88. @INTE ACADEMIA Curso de PHP 01nombre.php <? session_start(); echo SID; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859- 1" /> <title>Documento sin t&iacute;tulo</title> </head> <body> <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 PHP print($nombrecillo); ?> hemos guardado tu nombre. Ahora mete tu apellido.</p> <form id="form1" name="form1" method="post" action="03resultado.php"> <p>Apellidos <label> <input name="capellidos" type="text" id="capellidos" /> </label> </p> <p> <label> <input type="submit" name="Submit" value="Enviar" /> </label></p> </form> </body> </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 formulario llama al archivo 02apellidos.php. Aquí lo primero que se hace es procesar el nombre e introducirlo en una variable de sesión llamada nombrecillo. session_register('nombrecillo'); 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 llamada apellidos. Además, necesitamos la orden $_SESSION['nombrecillo']; para recuperar el valor de la variable de sesión nombrecillo y poder introducirla en la página. session_register('apellidos'); $nombrecillo=$_SESSION['nombrecillo']; $apellidos=$_POST['capellidos']; print($apellidos); Sesión 22. GD 22.1. GD 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 PHP 4. En la ventana de configuración de extensiones de PHP, active la opción php_gd2. 5. Haga clic en el botón Aplicar. 6. Ahora gd2 está instalado. Para comprobarlo escriba la siguiente página web y créela en su navegador. <?phpinfo()?> 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 PHP Las sesiones nos permiten mantener informEstaación entre las páginas cuando un usuario está navegando. Esto nos permite, por ejemplo, guardar las compras que hace en una tienda virtual para cobrarle al final. Las sesiones permiten guardar algunos datos mientras el usuario está activo, de modo que podamos identificarlo conforme va navegando por nuestra página. Los datos de una sesión se guardan todos en la misma sección del servidor, junto con todos los datos de la misma. 22.2. Un primer ejemplo <?php header("Content-Type: image/jpeg"); $imagen=imagecreate(200,200); $maroon = ImageColorAllocate($imagen,123,9,60); $white = ImageColorAllocate($imagen,255,255,255); $black = ImageColorAllocate($imagen,0,0,0); 94/195 ACADEMIA USERO
  • 95. @INTE ACADEMIA Curso de PHP ImageFilledRectangle($imagen,0,0,99,99,$maroon); ImageFilledRectangle($imagen,100,100,199,199,$white); imagejpeg($imagen); imagedestroy($imagen); ?> 22.3. Texto en una imagen El siguiente código crea texto en la imagen: <?php $im = imagecreate (250, 28); $black = ImageColorAllocate ($im, 0, 0, 0); $yellow = ImageColorAllocate ($im, 235, 235, 51); ImageTTFText ($im, 20, 0, 10, 20, $yellow, "/WINDOWS/Fonts/IMPACT.ttf", "Muy bien"); ImagePNG($im); ?> 22.4. Imagen dentro de página Si queremos que nuestra página genere una imagen no tenemos más que llamar al archivo PHP dentro del TAG: 95/195 ACADEMIA USERO
  • 96. @INTE ACADEMIA Curso de PHP <body> <img src="textogd.php"> </body> </html> 22.5. Pasar parámetros Podemos pasar parámetros a un archivo PHP que cree una imagen, para por ejemplo, cambiar el color de fondo de la misma. Esta es la llamada: Y esta es la respuesta: <? $imColor = hex2int(validHexColor($_REQUEST['color'])); $im = imageCreate(50,50); $background = imageColorAllocate($im, $imColor['r'], $imColor['g'], $imColor['b']); header('Content-type: image/png'); imagePNG($im); imageDestroy($im); function hex2int($hex) { return array( 'r' => hexdec(substr($hex, 0, 2)), // 1st pair of digits 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 isn't valid * @return string the validated 6-digit hexadecimal color * @desc returns $input if it is a valid hexadecimal color, * otherwise returns $default (which defaults to black) */ function validHexColor($input = '000000', $default = '000000') { // A valid Hexadecimal color is exactly 6 characters long // and eigher a digit or letter from a to f return (eregi('^[0-9a-f]{6}$', $input)) ? $input : $default ; } ?> Sesión 23. Clases 22.1. ¿Qué es una clase? Una clase es un contenedor que nos permite acceder a un objeto como un todo, con todas las funciones y las datos que puede necesitar en un único lugar. Piense en un coche: un coche tiene un montón de piezas y mecanismos. ¿Es necesario conocer 97/195 ACADEMIA USERO
  • 98. @INTE ACADEMIA Curso de PHP todos esos aparatos para saber manejar el coche? No. Se nos dejan unos controles o métodos para poder mover el coche: volante, frenos y acelerador. Una clase es algo similar: definimos un objeto mediante una serie de propiedades y métodos y el usuario de la clase solo tiene que conocer esas propiedades o métodos para usar la clase. 22.3. Un ejemplo de clase: la clase Página Vamos a crear una clase llamada Página que nos permita mostrar una página web a partir de algunas de sus propiedades. 1. El archivo principal se llamará clase.php y contendrá la definición de la clase. Para empezar cree un nuevo sitio en Dreamweaver, y configúrelo como en sesiones anteriores, de modo que podamos acceder al servidor directamente al hacer vists previas de las páginas. 2. Cree un nuevo archivo PHP y guárdelo con el nombre clasepagina.php. Vamos a ir viendo el código. <?php class Pagina { //atributos de la clase //para simplificar el ejemplo, cada página solo tendrá estas propiedades, el título y el contenido var $contenido; var $titulo='Construcciones Vicente'; //operaciones de la clase //para cambiar el contenido y el título de la página, vamos a crear unos métodos 98/195 ACADEMIA USERO
  • 99. @INTE ACADEMIA Curso de PHP function EstablecerContenido($nuevocontenido) { //this es el objeto actual sobre el que estamos trabajando //en este caso, la página //lo que estamos diciendo es que la propiedad contenido de la página actual //sea la variable que le hemos pasado como parámetro al método $this->contenido=$nuevocontenido; } function EstablecerTitulo($nuevotitulo) { $this->titulo = $nuevotitulo; //igual que antes pero para el título } function MostrarTitulo() { //se imprime el título echo '<title>$this->titulo</title>'; } function MostrarCabecera() 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 Vilchez 2006</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 PHP 24.1. ¿Qué es un CMS? Un CMS es un sistema de gestión de contenidos que nos permite publicar distintas noticias a partir de una base de datos. La idea principal de un CMS es tener una serie de redactores que puedan entrar y escribir sus noticias. Una vez escrita la noticia, esta va a una base de datos donde se guarda. Cuando un usuario quiere ver la web, la página accede a la base de datos, saca las noticias de la misma y las muestra. El aspecto del CMS depende de una serie de archivos que guardamos como una plantilla. Así, el aspecto de la página depende de esos archivos. 24.2. Instalar WAMP Vamos a instalar el servidor WAMP. 1. Entre en WAMPSERVER.COM y descargue el servidor. 2. Instale el servidor web. 3. Pruebe el servidor web entrando en la URL localhost. 103/195 ACADEMIA USERO
  • 104. @INTE ACADEMIA Curso de PHP 24.3. Crear las tablas 1. Entre en phpMyAdmin haciendo clic en el icono de WAMP en la barra de tareas y luego haciendo clic sobre phpMyAdmin. 2. Una vez en phpMyAdmin, cree una base de datos llamada content. 3. Cree una tabla llamada writers con 3 campos. 4. Establezca las propiedades de los campos según indica la siguiente imagen: Observe como la clave de esta tabla es el campo username. 104/195 ACADEMIA USERO
  • 105. @INTE ACADEMIA Curso de PHP Esta tabla guardará los escritores, las personas que pueden editar las páginas y publicar 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 PHP Esta 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 PHP 11. 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 de los temas. 25.2. Cabecera y pie 1. Lo primero que vamos a hacer es diseñar el aspecto de nuestra web. Cree un nuevo archivo con Photoshop para la cabecera y el pie. 108/195 ACADEMIA USERO
  • 109. @INTE ACADEMIA Curso de PHP 2. 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 PHP 4. Usando la herramienta Sector, cree tres sectores, uno para cada zona de la página. 110/195 ACADEMIA USERO
  • 111. @INTE ACADEMIA Curso de PHP 5. Haga clic en el sector Central, y en el panel Sector, seleccione Sin imagen. 6. Guarde el archivo. 7. Ahora vamos a exportar el archivo de modo que tengamos una página web. Haga clic en el menú Archivo. 8. Haga clic en Guardar optimizada como… 9. Escriba un nombre para la página HTML. 10. Haga clic en el botón Guardar. 11. Se ha generado una página web en formato HTML. Ábrala desde Dreamweaver. 12. Observe como tiene una imagen en blanco en el centro. Bórrela. 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 PHP 15. Use la imagen de la cabecera y del pie para crear los archivos header.php y footer.php que formarán parte de la página. HEADER.PHP FOOTER.PHP 25.3. Código Vamos a implementar un archivo que va a realizar las operaciones básicas sobre las tablas de la base de datos, y que nos servirá para el resto de los scripts. Este archivo se va a llamar db_fns.php. Veamos lo que hace: <?php //connexion a la base de datos function db_connect() { //mysqli permite conectarse a la base de datos content con la contraseña $handle = new mysqli('localhost', 'content', 'password', 'content'); //si no se ha podido conectar devuelve false 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 archivo db_fns.php por el nombre de usuario y contraseña de su base de datos. function db_connect() { $handle = new mysqli('localhost', 'root', '', 'content'); if (!$handle) { return false; } return $handle; } 26.2. Pages de cada storie Vamos a asignar un page(o tema) a cada noticia. 1. Entre en phpMyAdmin. 2. Acceda a la base de datos Content y entre en la tabla stories. 3. Haga clic en el botón Examinar. 116/195 ACADEMIA USERO
  • 117. @INTE ACADEMIA Curso de PHP 4. Desde aquí puede modificar los datos. Haga clic en el botón Modificar de cada registro e introduzca la page correspondiente. 26.3. El archivo index.php 16. A continuación vamos a ver el archivo index.php que es la página principal del sitio. Este es el aspecto de la página al ejecutarla. 17. Este es el archivo index. Vamos a ver como funciona. <?php //voy a usar el archive db_fns, que tiene los accesos a algunas funciones importantes como la conexión a la base de datos y otras include_once('db_fns.php'); 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 para conectarme a la base de datos $handle = db_connect(); //venga, defino una variable llamada pages_sql que contiene una consulta sql que me saca todas las pages (o temas) de la base de datos ordenadas por code (código) $pages_sql = 'select * from pages order by code'; //ejecuto la consulta y paso el resultado de la misma a la variable $pages_result $pages_result = $handle->query($pages_sql); //aquí empiezo a imprimir cosas en la página //defino una tabla echo '<table border="0" width="400">'; //la orden asigna a la variable pages cada una de las filas de la lista de pages que dio la consulta anterior, así que, mientras hayas mas filas, sigo sacando pages, cuando ya no haya más filas, se sale del bucle while while ($pages = $pages_result->fetch_assoc()) { 118/195 ACADEMIA USERO
  • 119. @INTE ACADEMIA Curso de PHP //otra consulta para sacar todas las historias de un determinado tema, selecciona las historias con la condición de que pertenezcan a un tema determinado, que viene determinado por el campo CODE de la variable pages, que contiene la lista de temas de las páginas //otra condición es que la condición Publisher (publicado) no sea nula //también se ordenan los datos por fecha de publicación en orden descendente $story_sql = "select * from stories where page = '{$pages['code']}' and published is not null order by published desc"; //se crea una variable llamada story_result que guarda el resultado de la consulta, es decir, la lista de stories de un page $story_result = $handle->query($story_sql); //si el número de filas de la page actual es distinto de 0 //entonces muestro la lista de stories de una page if ($story_result->num_rows) { //la variable story guarda en un array asociativo la lista de stories de una page $story = $story_result->fetch_assoc(); 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 a la imagen echo '<img src="resize_image.php?image='; //pongo la URL de la imagen en código URL con la función urlencode 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.php Para que se vean las imágenes, es necesario activar la extensión GD que vimos en anteriores sesiones. 1. Haga clic en el icono de WAMP SERVER. 2. Haga clic en PHP EXTENSIONS 3. Haga clic en php_gd2 121/195 ACADEMIA USERO
  • 122. @INTE ACADEMIA Curso de PHP 4. Copie algunas imágenes a la carpeta del servidor. Vamos a usar estas fotos para asignarlas a las stories. 5. Entre en la base de datos content y modifique el campo Picture de alguna de las stories de la base de datos. Escriba el nombre de los archivos que ha copiado. 122/195 ACADEMIA USERO
  • 123. @INTE ACADEMIA Curso de PHP 6. El resultado será similar al siguiente: 7. A continuación tiene el código del script que cambia el tamaño de la imagen: <?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 dos tamañ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 el alto máximo pa que lo voy a cambiar if ( ($width <= $max_width) && ($height <= $max_height) ) { $tn_width = $width; $tn_height = $height; } //si no, pues sí que le cambio el tamaño else if (($x_ratio * $height) < $max_height) { $tn_height = ceil($x_ratio * $height); $tn_width = $max_width; } else { $tn_width = ceil($y_ratio * $width); $tn_height = $max_height; } //creo la imagen a partir de la original $src = ImageCreateFromJpeg($image); //creo otra imagen con el tamaño deseado $dst = ImageCreate($tn_width,$tn_height); //haga una copia de la imagen cambiándole el tamaño con esta función ImageCopyResized ImageCopyResized($dst, $src, 0, 0, 0, 0, $tn_width,$tn_height,$width,$height); //le digo a la página que le voyh a mandar una foto 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 o PAGE. Veamos como se hace. <?php //primero se comprueba si existen las variables page y story en la llamada if (!isset($_REQUEST['page'])&&!isset($_REQUEST['story'])) { //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 en sendas variables $page = $_REQUEST['page']; $story = intval($_REQUEST['story']); //hago uso del archive db_fns.php que tiene algunos scripts importantes para el manejo de la base de datos include_once('db_fns.php'); //introduzco la cabecera del sitio include_once('header.php'); //me conecto a la base de datos $handle = db_connect(); //si está definida la variable story, es decir, si estoy buscando una historia en concreto if($story) { //hago una consulta sobre la base de datos para seleccionar la historia siempre que haya sido publicada $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 un tema, así que hago una consulta que saque todas las historias de un tema { $query = "select * from stories where page = '$page' and published is not null order by published desc"; } //ejecuto la consulta y paso el resultado a la variable $result $result = $handle->query($query); //mientras pueda sacar más historias del array asociativo que es resultado de la consulta while ($story = $result->fetch_assoc()) { // imprimo el titular de la noticia echo "<h2>{$story['headline']}</h2>"; //si hay imagen para la noticia la saco también if ($story['picture']) { echo '<div style="float:right; margin:0px 1px 6px 6px;">'; 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áginas donde la gente pueda publicar las noticias, dar de alta escritores. A eso vamos ahora. 1. Cree una carpeta admin dentro de su sitio web. 2. Cree un nuevo archivo llamado index.php dentro de esa carpeta con el siguiente contenido. <html> <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/Editar historias</a></li> <li>Editores - <a href = 'publish.php'>Publicar/No Publicar Historias</a></li> </ul> </body> </html> 3. Este archivo solo contiene un par de enlaces a las páginas writer.php y publish.php. 27.3. Writer.php El archivo writer.php permite a los escritores gestionar las historias. Vamos a ver como funciona. 1. Lo primero que tenemos que tener en cuenta es que cualquiera no puede entrar en nuestro sitio así que lo primero que se hace al entrar en el fichero es llamar a un fichero que compruebe nuestra identidad. Este es el fichero include_fns.php, cuyo contenido es el siguiente. <?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 los escritores cuyo nombre de usuario y contraseña coincidan con los pará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 sus datos function login_form() { ?> <form action='login.php' method='POST'> <table border=0> <tr> <td>Nombre Usuario</td> <td><input size='16' name='username'></td> </tr> <tr> <td>Contraseña</td> 133/195 ACADEMIA USERO
  • 134. @INTE ACADEMIA Curso de PHP <td><input size='16' type='password' name='password'></td> </tr> </table> <input type='submit' value='Log in'> </form> <?php } //esta función comprueba si el usuario tiene permiso para modificar la historia function check_permission($username, $story) // check user has permission to act on this story { // connect to db $handle = db_connect(); if (!$handle) return 0; if(!$_SESSION['auth_user']) return 0; $result = $handle->query("select * from writer_permissions wp, stories s 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 este momento puede borrar esa historia if(check_permission($_SESSION['auth_user'], $story)) { //esta consulta borra la historia de la base de datos cuya id coincide con la id que se ha pasado como parámetro en la llamada URL $query = "delete from stories where id = $story"; //ejecuto la consulta $result = $handle->query($query); } Vuelvo a la página donde estaba antes header('Location: '.$_SERVER['HTTP_REFERER']); ?> 29.2. Palabras clave 136/195 ACADEMIA USERO
  • 137. @INTE ACADEMIA Curso de PHP Las palabras clave nos permiten buscar noticias dentro de nuestro sitio. Cada página tendrá unas palabras clave con un peso determinado, que determina la importancia del sitio con respecto a esa palabra clave. Vamos a ver la página que nos permite asignar palabras clave y pesos a una noticia, el archivo keywords.php: <?php // keywords.php //uso el archivo con el script para conectarme a la base de datos include_once('include_fns.php'); //si no hay ningún usuario activo if (!check_auth_user()) { //se muestra el formulario de login login_form(); } //si hay un usuario activo, compruebo que tiene permiso para modificar la //historia else if(check_permission($_SESSION['auth_user'], $_REQUEST['story'])) { //me conecto a la base de datos $handle = db_connect(); 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 el título //de la historia echo "<h2>Palabras clave para <i>{$story['headline']}</i></h2> //creo un formulario para añadir las palabras llamando al archivo //keyword_add.php <form action='keyword_add.php' method='POST'> //campo oculto para el código de la clave <input type=hidden name='story' value='$story_code'> //campo para la palabra clave <input size='20' name='keyword'> //lista para el peso de la noticia <select name='weight'> <option>10</option> <option>9</option> <option>8</option> <option>7</option> <option>6</option> <option>5</option> <option>4</option> 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. [<a href='keyword_delete.php?story=$story_code&keyword="; echo urlencode($keyword['keyword']); echo "'>del</a>] </td></tr>"; } echo '</table>'; } } ?> 29.3. El archivo KEYWORD_ADD.PHP Este archivo añade las palabras clave que introducimos. <?php include_once('include_fns.php'); $handle = db_connect(); $story = $_REQUEST['story']; 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.PHP Este 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 and keyword = '$keyword'"; $handle->query($query); } header("Location: keywords.php?story=$story"); ?> Sesión 30. Crear un CMS (VI) 30.1. El formulario de búsqueda SEARCH_FORM.PHP Este archivo es el necesario para que un usuario pueda buscar noticias. A diferencia de los anteriores, debe ser accesible a todos los usuarios, así que no debe estar en la carpeta ADMIN. <?php include_once('header.php'); ?> <h2>Búsqueda</h2> <p>Escriba una palabra clave a buscar:</p> <form action="search.php" method="POST"> 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.PHP Este archive es el que se ejecuta cuando buscamos una noticia, y muestra las noticias según el peso que tengan asignadas. <?php include_once('db_fns.php'); include_once('header.php'); 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.PHP Este 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>) (<a href="index.php">Menú</a>) (<a href="../">Sitio Público</a>) </p>'; //hago una consulta para mostrar todas las historias de un determinado autor $query = "select * from stories s, writer_permissions wp where wp.writer = '{$_SESSION['auth_user']}' and s.page = wp.page order by modified desc"; $result = $handle->query($query); 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 '[<a href="unpublish_story.php?story='.$story['id'].'">no publicar</a>] '; } else { echo '[<a href="publish_story.php?story='.$story['id'].'">publicar</a>] '; echo '[<a href="delete_story.php?story='.$story['id'].'">borrar</a>] '; } echo '[<a href="story.php?story='.$story['id'].'">editar</a>] '; 148/195 ACADEMIA USERO
  • 149. @INTE ACADEMIA Curso de PHP echo '</td></tr>'; } echo '</table>'; } ?> Sesión 31. Crear un CMS (VII) y fin 31.1. El archivo PUBLISH_STORY.PHP Este archivo publica la historia que hayamos editado. <?php // publish_story.php -- action a release, go back to publish.php include_once('include_fns.php'); $handle = db_connect(); $now = time(); //toma el código de la historia de la llamada php $story = $_REQUEST['story']; 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.php Este fichero coloca la fecha de publicación a NULL, de modo que la historia deja de estar como publicada. Es similar al anterior, lo único que cambia es que coloca la fecha de publicación a NULL. <?php // unpublish_story.php -- action a release, go back to release.php include_once('include_fns.php'); 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 PHP 31.3. El fichero delete_story.php Este fichero borra la historia seleccionada. <?php // delete_story.php include_once('include_fns.php'); $handle = db_connect(); $story = $_REQUEST['story']; if(check_permission($_SESSION['auth_user'], $story)) { $query = "delete from stories where id = $story"; $result = $handle->query($query); } header('Location: '.$_SERVER['HTTP_REFERER']); ?> Sesión 32. Gráficos 32.1. Gráfico Vamos a hacer un script que tome los datos de una encuesta y los muestre en un gráfico. Lo primero que tenemos que hacer es crear la base de datos y la tabla que contendrá las distintas opciones de la encuesta. 152/195 ACADEMIA USERO
  • 153. @INTE ACADEMIA Curso de PHP 1. Entre en phpMyAdmin. 2. Cree una base de datos nueva llamada encuesta. 3. Cree una nueva tabla dentro de la base de datos llamada resencuesta con los siguientes campos: 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=vote value="Shakespeare">Shakespeare<br> <input type=radio name=vote value="Lovecraft">Lovecraft<br><br> <input type=submit value="Mostrar gráfico"> </form> </body> </html> 154/195 ACADEMIA USERO
  • 155. @INTE ACADEMIA Curso de PHP 32.3. El archivo show_poll.php <? /******************************************* Petición a la base de datos para obtener la información de la encuesta *******************************************/ // hacer log in en la base de datos //cojo el escritor votado del formulario $vote=$_POST['vote']; //me conecto a la base de datos if (!$db_conn = @mysql_connect("localhost", "root", "")) { echo "No se puede conectar a la base de datos<br>"; exit; }; //seleccione la base de datos encuesta @mysql_select_db("encuesta"); if (!empty($vote)) // Si han cubierto bien el formulario 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 votos while ($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á en 640x480 $left_margin = 50; // espacio a dejar a la izquierda de la imagen $right_margin= 50; // lo mismo para la derecha $bar_height = 40; $bar_spacing = $bar_height/2; $font = "arial.ttf"; $title_size= 16; // puntos $main_size= 12; // puntos 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 la izquierda // configurar el punto inicial desde el cual dibujar $x = $left_margin + 60; // colocar la línea de base para dibujar del gráfico $y = 50; // lo mismo $bar_unit = ($width-($x+$right_margin)) / 100; // un "punto" en el gráfico // 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 dibujar ImageFilledRectangle($im,0,0,$width,$height,$bg_color); // Dibujar borde en torno al lienzo ImageRectangle($im,0,0,$width-1,$height-1,$line_color); // Añadir Título $title = "Escritor favorito"; $title_dimensions = ImageTTFBBox($title_size, 0, $font, $title); $title_length = $title_dimensions[2] - $title_dimensions[0]; $title_height = abs($title_dimensions[7] - $title_dimensions[1]); $title_above_line = abs($title_dimensions[7]); $title_x = ($width-$title_length)/2; // centrarlo en x $title_y = ($y - $title_height)/2 + $title_above_line; // centrarlo en y 159/195 ACADEMIA USERO
  • 160. @INTE ACADEMIA Curso de PHP ImageTTFText($im, $title_size, 0, $title_x, $title_y, $text_color, $font, $title); // Dibujar una línea de base un poco por encima de la primera localización de la barra // a un poco por debajo de la última ImageLine($im, $x, $y-5, $x, $height-15, $line_color); /******************************************* Dibujar los datos en el gráfico *******************************************/ // Obtener cada línea de los datos de la base de datos y dibujar las barras correspondientes while ($row = mysql_fetch_object ($result)) { if ($total_votes > 0) //cojo cada una de las cantidades y las divido entre el número total de votos $percent = intval(round(($row->nvotos/$total_votes)*100)); else $percent = 0; // muestra el tanto por ciento para este valor ImageTTFText($im, $main_size, 0, $width-30, $y+($bar_height/2), 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. PDF 33.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 vamos a descargar un pequeño script que nos permite hacerlo fácilmente. 1. Entre en la página fpdf.org 2. Descargue el script a una carpeta de su ordenador 3. Cree un nuevo sitio llamado pdf y descomprima dentro el script que acaba de descargar. 163/195 ACADEMIA USERO
  • 164. @INTE ACADEMIA Curso de PHP 4. Cree un nuevo archivo llamado prueba1.php y pruebe el siguiente código. <?php require('fpdf.php'); //crea una variable FPDF $pdf=new FPDF(); //le añade una página $pdf->AddPage(); //establece la fuente $pdf->setFont('Arial','B',16); //escriba a partir de la posición 40,10 el texto hola, mundo $pdf->Cell(40,10,'Hola, mundo'); //lo manda $pdf->Output(); ?> 5. Ahora añada la siguiente línea al programa y compruebe el resultado: <?php require('fpdf.php'); $pdf=new FPDF(); $pdf->AddPage(); $pdf->setFont('Arial','B',16); $pdf->Cell(40,10,'Hola, mundo'); $pdf->Cell(60,10,'Hecho con PDF',0,1,'C'); 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 funciones header y footer se ejecutan automáticamente y añaden la cabecera y el pie al documento. <?php require('fpdf.php'); class PDF extends FPDF { //Cabecera de página function Header() { //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ágina function Footer() { //Posición: a 1,5 cm del final $this->SetY(-15); //Arial italic 8 $this->SetFont('Arial','I',8); //Número de página $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C'); } } //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 superior izquierda deben especificarse. SetFont: Establece la fuente usada para imprimir cadenas de carácteres. Es obligatorio invocar este método por lo menos una vez antes de imprimir texto o el documento resultante no será válido. La fuente puede ser una estándar o una adicionada via el método AddFont(). La fuentes estándar usan codificación cp1252 (Western Europe) de Windows. El método puede ser invocado antes que la primera página sea creada y es mantenido de página a página. Si sólo desea cambiar el tamaño de la fuente actual, es más simple invocar SetFontSize(). Cell: Imprime una celda (de área rectangular) bordes opcionales, color de fondo y secuencia de carácteres La esquina superior izquierda de la celda corresponde a la posición actual. El texto puede ser alineado o centrado. Despues de invocar, la posición actual se desplaza a la derecha o la siguietne línea. Es posible poner una referencia en el texto. Si esta el salto de página automático habilitado y la celda esta por fuera del límite, es realizado un salto de página antes de producir la salida. AliasNBPages: Define un alias para el número total de páginas. Se sustituira en el momento que el documento se cierre. Sesión 34. Foro 34.1. Foro: la base de datos 167/195 ACADEMIA USERO
  • 168. @INTE ACADEMIA Curso de PHP Vamos a crear un foro donde los usuarios puedan ir dejando noticias y comentarios. A continuación tiene el archivo de base de datos. Ejecute esta consulta entrando en la ventana SQL. CREATE TABLE foro ( id int(7) NOT NULL auto_increment, autor varchar(200) NOT NULL default '', titulo varchar(200) NOT NULL default '', mensaje text NOT NULL, fecha datetime NOT NULL default '0000-00-00 00:00:00', respuestas int(11) NOT NULL default '0', identificador int(7) NOT NULL default '0', ult_respuesta datetime default NULL, KEY id (id) ) TYPE=MyISAM; 168/195 ACADEMIA USERO
  • 169. @INTE ACADEMIA Curso de PHP Ejecute también estas dos consultas para añadir algunos datos a la base de datos. INSERT INTO foro VALUES (1,'pablo','probando','Este es un mensaje de prueba','0000-00-00 00:00:00',2,0,'0000-00-00 00:00:00'); INSERT INTO foro VALUES (2,'federico','Otra prueba bedelesca','SEguimos metiendo mensajes que no sirven para nada‟,'2003-05-02 00:14:47',3,0,'2003-05-02 00:14:47'); 34.2. El archivo configuracion.php Este 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.php Este archivo contiene un par de funciones útiles. La función mostrarTemplate extrae las variables e imprime el tema. La función parsearTags busca el tag CITAR y lo sustituye por un texto en formato de cita (quote). <?php function mostrarTemplate($tema, $variables) { 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><hr width='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 PHP 34.4. El archivo header.html Este archivo es la cabecera de todas las páginas. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>El Foro de ZonaPHP</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> //ahí un estilo css embebido en la cabecera <style type="text/css"> <!-- body { 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> ] [ <a href="respuesta.php">Nuevo Tema</a> ]</div></td> </tr> </table> 34.5. El archivo footer.html Este es el archivo que va al final de cada página. <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.php Este es el archivo principal. Lista las noticias del foro. <?php require('configuracion.php'); require('funciones.php'); include('header.html'); /* Pedimos todos los temas iniciales (identificador==0) * y los ordenamos por ult_respuesta */ $sql = "SELECT id, autor, titulo, fecha, respuestas, ult_respuesta "; $sql.= "FROM foro WHERE identificador=0 ORDER BY ult_respuesta DESC"; $rs = mysql_query($sql, $con); if(mysql_num_rows($rs)>0) { // 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 Google 35.1. Lo que vamos a hacer Vamos a usar el servicio de Google SOAP Search API para hacer uso de Google dentro de nuestras aplicaciones. Una API (del inglés Application Programming Interface - Interfaz de Programación de Aplicaciones) es un conjunto de especificaciones de comunicación entre componentes software. La API que vamos a usar nos permite acceder al buscador Google y enviarle órdenes de búsqueda desde nuestros propios programas. 35.2. Primero darse de alta Lo primero que tenemos que hacer es darnos de alto en el servicio. Sin darnos de alta no podemos usar ninguno de los servicios. 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 PHP 3. 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 PHP 5. Ahora tiene que obtener una cuenta de Google. Haga clic en el enlace Create a Google account en la zona inferior de la página de descarga. 6. Rellene los datos de la cuenta. 177/195 ACADEMIA USERO
  • 178. @INTE ACADEMIA Curso de PHP 7. Ahora entre en su cuenta de correo y siga las instrucciones que se le han enviado para dar de alta la cuenta. 178/195 ACADEMIA USERO
  • 179. @INTE ACADEMIA Curso de PHP 8. Una vez que la cuenta ha sido verificada se nos muestra el siguiente mensaje. 9. Una vez que se verifica la cuenta, nos envían un email con la clave de licencia. Esta clave de licencia nos permite hacer 1000 busquedas al día con fines no comerciales. 10. El email nos da la clave de licencia. 179/195 ACADEMIA USERO
  • 180. @INTE ACADEMIA Curso de PHP 35.3. Activar SOAP SOAP es un servicio que no viene activado por defecto. Hay que activarlo añadiendo una línea al archivo php.ini que está dentro de la carpeta bin de la carpeta Apache2 del servidor WAMP. La línea es la siguiente: ;extension=php_pdo_oci8.dll ;extension=php_pdo_odbc.dll ;extension=php_pdo_pgsql.dll extension=php_sqlite.dll extension=php_soap.dll Una vez activado, reinicie el servidor WAMP,entre en LOCALHOST y compruebe que se ha activado SOAP haciendo clic en el enlace PHPINFO(). 35.4. Usar SOAP y Google <? //////////////////////////////////////////////////////////// // This is example code of how to query the Google API using // Web Services, SOAP, and PHP. // // Author: Geoff Peters, January 6th 2004. // // To run this script you need to obtain the Pear::SOAP package. // You can obtain it from http://pear.php.net. // The example shown uses Pear::SOAP version 0.7.5. // // If you don't have administrative access to you web server, // you can place the SOAP directory that contains the Pear::SOAP // source files somewhere on your server, and then modify the // PHP include path using ini_set to include this directory. 180/195 ACADEMIA USERO
  • 181. @INTE ACADEMIA Curso de PHP // // For example: /* // set the include path to use the new pear stuff ini_set( 'include_path', '.:/home/user/pearstuff:/usr/local/lib/php'); */ // Note that Pear::SOAP has several dependencies on other Pear packages, // which you should also install on your web server. ///////////////////////////////////////////////////////////// // // Initialize SOAP web services // include("SOAP/Client.php"); $soapclient = new SOAP_Client('http://api.google.com/search/beta2'); $soapoptions = array('namespace' => 'urn:GoogleSearch', 'trace' => 0); //////////////////////////////////////////////////////////// // Calls the Google API and retrieves the estimated number of // search results for that query into $num. function do_search( $query, $key, &$num ) { global $soapclient; global $soapoptions; // Note that we pass in an array of parameters into the Google search. // The parameters array has to be passed by reference. // The parameters are well documented in the developer's kit on the // Google site http://www.google.com/apis $params = array( 'key' => $key, // the Developer's key 'q' => $query, // the search query 'start' => 0, // the point in the search results should Google start 'maxResults' => 1, // the number of search results (max 10) 'filter' => false, // should the results be filtered? 'restrict' => '', 'safeSearch' => false, 'lr' => '', 'ie' => '', 'oe' => '' ); // Here's where we actually call Google using SOAP. // doGoogleSearch is the name of the remote procedure call. $ret = $soapclient->call('doGoogleSearch', $params, $soapoptions); if (PEAR::isError($ret)) { 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 the object $ret. // The following block of code prints // out the structure and contents of the object to the screen: print("n<br><pre>"); print_r( $ret ); print("</pre><br>n"); // in this example, the only thing we need from the search results // is the estimatedTotalResultsCount $num = $ret->estimatedTotalResultsCount; } return true; } //////////////////////////////////////////////// // Does Google search with retry. // Retry is useful because sometimes the connection will // fail for some reason but will succeed when retried. function search( $query, $key, &$num ) { $result = false; $max_retries = 5; $retry_count = 0; while( !$result && $retry_count < $max_retries ) { $result = do_search( $query, $key, $num ); if( !$result ) { print( "Attempt $retry_count failed.<br>n"); } $retry_count++; } if( !$result ) { print("<br>Sorry, connection to Google failed after retrying several times. Please check that the Google Developer's Key you entered was correct. To obtain a developer's key or for more information on the Google API, visit <a href="http://www.google.com/apis/">Google API home page</a>.<br>n"); } return $result; } ////////////////////////////////////////////////////////// // The main part of this script print("<html>n<head>n<title>Google API Example with PHP, SOAP, and Web Services</title>n</head>n<body>"); 182/195 ACADEMIA USERO
  • 183. @INTE ACADEMIA Curso de PHP print(" <h1>Google API Example Using PHP</h1> <p>For more info on the Google API, visit the <a href="http://www.google.com/apis">Google developer's page</a></p> "); if ( $key == "" ) { /* You get a developer's key when you register to use Google's API. A developer's key is a unique string that identifies you to Google. You get a maximum of 1000 searches per day using your developer's key. */ $key = 'thisIsNotaRealKeyBQSgnSiZySpQmfd1wqG'; // put your developer's key here. } if( $query != "" ) { // remove the slashes that are automatically added by PHP before each quotation mark $query = stripslashes($query); if( search( $query, $key, $num ) ) { print("<h2>Search results</h2>n<p>The estimated number of results for the search query <i>$query</i> is <b>$num</b>.</p>"); } } // // print the input form // print("<hr><h2>Test out the Google API with PHP, SOAP, and Web Services:</h2><p> <form method="POST" action="apiexample.php"> <p>Search Query <input type="text" name="query" size="20"></p> <p>Google Developer's Key <input type="text" name="key" size="20"></p> <p><input type="submit" value="Submit"><input type="reset" value="Reset"></p> </form></p>"); print("<hr><h2>About</h2><p>This example was created by <a href="http://www.sfu.ca/~gpeters">Geoff Peters</a>, creator of <a href="http://www.googleduel.com/">GoogleDuel</a> and <a href="http://www.googleduel.com/googlebusinessmain.php">GoogleDuel- Ultra</a>. Feel free to re-use or distribute this source code.</p>"); print("<hr><h2>Source Code</h2><br><br>"); highlight_file("apiexample.php"); print("</body>n </html>"); ?> 183/195 ACADEMIA USERO
  • 184. @INTE ACADEMIA Curso de PHP Sesión 36. Usar clases externas: traducir 36.1. Darse de alta 1. Primero tienes que entrar en la página www.phpclasses.org y darte de alta. 2. Una vez que te des de alta, recibirás un correo. 3. Haz clic en el enlace de ese correo para elegir una contraseña. 4. Una vez elegida la contraseña, puedes entrar en la página y descargarte lo que quieras. 5. Luego tiene que elegir tu país. 6. Luego puedes elegir un grupo de usuarios. 36.2. Descargar el código 1. Ahora en el cuadro de búsqueda escribe babelfish. 2. Ahora haga clic en el primer enlace para ir a la página de la clase de babelfish. 3. Vaya hacia abajo en la página y haga clic en el enlace de descarga .zip. 184/195 ACADEMIA USERO
  • 185. @INTE ACADEMIA Curso de PHP 4. Descargue el archivo en una nueva carpeta y descomprímalo. 5. Entre en Dreamweaver y cree un nuevo sitio en esa carpeta. 36.3. Instalar CURL Esta clase necesita usar CURL para funcionar. Para activar CURL realice lo siguente: 1. Abra el archivo php.ini que se encuentra en la carpeta C: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.dll 3. 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 a francés y holandés. 36.4. El formulario A continuación tiene el código de un formulario que nos permite escribir un texto que será traducido más tarde. <html> <head> <title>traducir</title> <link rel="stylesheet" type="text/css" href="estilo.css"/> </head> <body> 186/195 ACADEMIA USERO
  • 187. @INTE ACADEMIA Curso de PHP <center> <table width="550"> <tr bgcolor= #FF9933><td align="center"><BR><H3>AINTE.COM<BR>"TRADUCTOR ONLINE"<BR> Formulario</H3></td></tr> </td></tr></table> </center> <FORM METHOD=post ACTION="traductor.php"> <P>Texto a traducir: <input type="text" size=30 name="mensaje"> <P><input type="submit" value="Enviar"> </body> </html> 187/195 ACADEMIA USERO
  • 188. @INTE ACADEMIA Curso de PHP 36.5. Traductor.php Y este es el código que traduce. <?php /* ejemplo simple */ include("babelfish.class.php"); $mensaje = $_POST['mensaje']; echo "En Español: ".$mensaje.'<br>'; /* Uso de la clase babel */ $tr=new babelfish(); echo "En Francés: ".$tr- translate($mensaje,'spanish','French').'<br>'; echo "En inglés: ".$tr- >translate($mensaje,'spanish','english').'<br>'; ?> Sesión 37. Flash y PHP 37.1. Hacer que hablen Vamos a hacer un pequeño programa que envíe una variable a un archivo de Flash. 188/195 ACADEMIA USERO
  • 189. @INTE ACADEMIA Curso de PHP 1. Abra Dreamweaver, cree un sitio, y cree un archivo con el nombre hola.php con el siguiente contenido: <?php echo "mivariable=Hello World"; ?> Lo único que hace este archivo es definir una variable llamada mivariable y dale el valor Hello World. 2. Ahora entre en Flash, cree una nueva película y guárdela con el nombre hola.fla en la misma carpeta del servidor donde ha guardado el archivo PHP. 3. Haga clic en el primer fotograma. 4. Abra el panel de acciones y escriba lo siguiente. //crea un campo de texto this.createTextField("display_txt",1,0,0,100,20); //crea un objeto LOADVARS para cargar los datos var hello_lv:LoadVars = new LoadVars(); //si el objeto LOADVARS recibo los datos hello_lv.onLoad = function(success){ //si tiene éxito if(success){ //establece el texto del cuadro con el texto de la variable mivariable display_txt.text = this.mivariable; }else{ //si no, señala un error trace("Ha ocurrido un error."); 189/195 ACADEMIA USERO
  • 190. @INTE ACADEMIA Curso de PHP } } //carga el código PHP hello_lv.load("http://localhost/flash/hola.php"); 37.2. Enviar correo: el archivo PHP Cree un nuevo archivo llamado sendmail.php en Dreamweaver y escriba dentro este código: <?php //obtiene las variables externas $destMail = $_REQUEST["destMail"]; $senderName = $_REQUEST["senderName"]; $senderMail = $_REQUEST["senderMail"]; $senderSubject = $_REQUEST["senderSubject"]; $senderBody = $_REQUEST["senderBody"]; //envía el email con HACIA, ASUNTO, CUERPO mail($destMail, $senderSubject, $senderBody); ?> 190/195 ACADEMIA USERO
  • 191. @INTE ACADEMIA Curso de PHP Las 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 Flash 1. Cree un nuevo archivo de Flash y guárdelo con el nombre sendmail.fla 2. Vamos a poner un cuadro de texto para que el usuario pueda introducir datos. Haga clic en la herramienta Texto. 3. Haga clic en el escenario y arrastre para crear un cuadro de texto. 4. Ahora vaya al panel de Propiedades en la zona inferior y haga clic en el cuadro combinado para elegir el tipo de cuadro de texto. 5. Haga clic en la opción Introducción de texto. 6. Active la propiedad Mostrar borde. 191/195 ACADEMIA USERO
  • 192. @INTE ACADEMIA Curso de PHP 7. Cambie el tamaño de letra a 12. 8. Cambie el nombre de la instancia a destMail_txt 9. Cree un texto de tipo normal y colóquelo a su izquierda con el título: Destinatario. 10. Cree otros cuatro cuadros de texto con sus etiquetas con los nombres de instancia que se indican a continuación: senderName_txt senderEmail_txt senderSubject_txt senderBody_txt 11. Modifique la propiedad del campo senderBody_txt a Multilínea y estírela hacia abajo. 192/195 ACADEMIA USERO
  • 193. @INTE ACADEMIA Curso de PHP 12. Por último hay que crear un butón. Cree un rectángulo en la zona inferior, rellénelo de un color y luego colóquelo un texto sobre él. 13. Ahora selecciona los dos objetos, el texto y el rectángulo, pulsando fuera de ellos y arrastrando. 14. Haga clic en el menú Modificar. 15. Haga clic en la opción Convertir en símbolo. 16. Haga clic en la opción Botón. 17. Haga clic en el símbolo Aceptar. 18. Cambie el nombre de la instancia a send_btn. 193/195 ACADEMIA USERO
  • 194. @INTE ACADEMIA Curso de PHP 19. Ahora ya podemos agregar el código, haga clic en el primer fotograma, despliegue el panel de Acciones y escriba lo siguiente: //crea un objeto que se activa cuando soltamos una tecla //este objeto comprueba que todos los campos estén rellenos //si es así, activa el botón de enviar y si no lo mantiene desactivado fieldsFilled = new Object(); fieldsFilled.onKeyUp = function(){ if(destMail_txt.text != '' && senderName_txt.text != '' && senderMail_txt.text != '' && senderSubject_txt.text != '' && senderBody_txt.text != ''){ send_btn.enabled = true; } else { send_btn.enabled = false; } } //aplica el objeto de modo que este activo cuando se pulsa una tecla Key.addListener(fieldsFilled); //desactiva el campo send_btn.enabled = false; //este es el objeto que se comunicará con el archivo PHP var sendMail_lv:LoadVars = new LoadVars() //al soltar el botón send_btn.onRelease = function(){ //establezco las variables a enviar 194/195 ACADEMIA USERO
  • 195. @INTE ACADEMIA Curso de PHP sendMail_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 PHP sendMail_lv.sendAndLoad("http://localhost/flash/sendmail.php", sendMail_lv, "POST"); } 195/195 ACADEMIA USERO