martes, 21 de junio de 2011

15. Los formularios II. Include() y require()

Hola de nuevo, seguimos con el tema de los formularios, también he querido añadir en esta entrada el uso de include( ) y require ( ) dos funciones muy poderosas que ahorran tiempo y código, sobre todo códigos complejos y largos. Estas funciones se usan para no tener que sobrescribir código ya escrito anteriormente, aunque esto lo veremos un poco más adelante con más profundidad. De momento seguimos con los formularios.
Si os habéis fijado en muchas páginas Web tienen un apartado de Contacto en el que aparece un formulario para que os envíen información acerca de los servicios que ofrece la Web, o que le envíes un CV, etc. Incluso algunas Web desean saber a través de cómo les has conocido, si disponen de varios servicios, elegir el servicio concreto del que deseas información, dependiendo del servicio o producto que hayas elegido se enviará a una cuenta de correo u otra, etc. Todo esto lo vamos a ver.
El primer formulario es muy básico, es un formulario de contacto que cuando se dé al botón enviar se envié a una cuenta de correo y a la misma vez se redireccione a otra Web para indicar que el formulario se ha enviado correctamente. Primero crearemos una página html llamada contacto.html. Y será una cosa similar a la siguiente, vosotros mismos la podéis hacer similar, lo importante es el formulario en si.

El código HTML es el siguiente:
<html>
<head>
<title>Formulario de contacto</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Estilo1 {
     font-family: Geneva, Arial, Helvetica, sans-serif;
     font-weight: bold;
}
.Estilo2 {
     font-family: Arial, Helvetica, sans-serif;
     font-weight: bold;
}
body {
     background-color: #B69C0C;
}
-->
</style>
</head>

<body>
<form name="form1" method="post" action="contacto.php">
  <table width="200" border="0" align="center">
    <tr>
      <td colspan="2"><div align="center" class="Estilo1">FORMULARIO DE CONTACTO </div></td>
    </tr>
    <tr>
      <td><span class="Estilo2">Nombre:</span></td>
      <td><input name="nombre" type="text" id="nombre" size="20" maxlength="20"></td>
    </tr>
    <tr>
      <td class="Estilo2">Email:</td>
      <td><input name="email" type="text" id="email" size="25" maxlength="25"></td>
    </tr>
    <tr>
      <td class="Estilo2">Comentarios:</td>
      <td><textarea name="comentarios" cols="40" rows="5" id="comentarios"></textarea></td>
    </tr>
    <tr>
      <td><div align="right">
        <input type="submit" name="Submit" value="Enviar">
      </div></td>
      <td><input type="reset" name="Submit2" value="Restablecer"></td>
    </tr>
  </table>
</form>
</body>
</html>
Lo que más nos interesa del código HTML es lo que va entre <FORM> y </FORM> Lo he resaltado en negrita. Como podéis comprobar en action esta escrito el archivo contacto.php. El campo de texto al igual que el área de texto deben tener un nombre, en este caso coinciden.
Al darle al botón enviar nos llevará a la página contacto.php
<html>
<head>
<title>Formulario de contacto</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Estilo1 {
     font-family: Geneva, Arial, Helvetica, sans-serif;
     font-weight: bold;
}
.Estilo2 {
     font-family: Arial, Helvetica, sans-serif;
     font-weight: bold;
}
body {
     background-color: #B69C0C;
}
.Estilo3 {font-family: Geneva, Arial, Helvetica, sans-serif}
-->
</style>
</head>

<body>
<form name="form1" method="post" action="contacto.php">
  <table width="200" border="0" align="center">
    <tr>
      <td colspan="2"><div align="justify" class="Estilo3">
        <div align="center"><strong>Su formulario se ha enviado correctamente. En la mayor brevedad posible nos pondremos en contacto con usted. Gracias.</strong></div>
      </div></td>
    </tr>
    <tr>
      <td colspan="2"><div align="center" class="Estilo1">FORMULARIO DE CONTACTO </div></td>
    </tr>
    <tr>
      <td><span class="Estilo2">Nombre:</span></td>
      <td><input name="nombre" type="text" id="nombre" size="20" maxlength="20"></td>
    </tr>
    <tr>
      <td class="Estilo2">Email:</td>
      <td><input name="email" type="text" id="email" size="25" maxlength="25"></td>
    </tr>
    <tr>
      <td class="Estilo2">Comentarios:</td>
      <td><textarea name="comentarios" cols="40" rows="5" id="comentarios"></textarea></td>
    </tr>
    <tr>
      <td><div align="right">
        <input type="submit" name="Submit" value="Enviar">
      </div></td>
      <td><input type="reset" name="Submit2" value="Restablecer"></td>
    </tr>
  </table>
</form>
<?php
$dia=date("m.d.Y");
$hora=date("H:i:s");
$destinatario="amizba@gmail.com";
$subject= " Consulta";
$desde = 'From: ' .$_POST[email];
$contingut = "
El mensaje se ha enviado el dia $dia a las $hora\n\n
----------------------------------------------------------------------------\n
Nombre: $_POST[nombre]\n
Mail: $_POST[email]\n
Comentarios: $_POST[comentarios]\n
----------------------------------------------------------------------------\n
";
mail($destinatario, $subject, $contingut, $desde);

?>
</body>
</html>
Lo importante del código es el código php que lo he resaltado en negrita, como podeis comprobar las dos primeras líneas indican la fecha:
$dia=date("m.d.Y");
$hora=date("H:i:s");
Aunque en el blog no hemos hablado de cómo escribir fechas en PHP, lo iremos viendo sobre la marcha en ejercicios, ejemplo o practicas que vayamos dando. Esta es una de las formas en las que se escribe la fecha y la hora en PHP.
La siguiente línea indica a donde se va a enviar el formulario, en este caso se enviara a mi correo de gmail:
$destinatario="amizba@gmail.com";
La siguiente línea es el asunto, yo he puesto “Consulta” pero podía haber puesto “Información acerca de la Web” o algo similar.
$subject= " Consulta";
La siguiente línea indica el email del remitente.
$desde = 'From: ' .$_POST[email];
Y luego ya por último tenemos lo siguiente:
$contingut = "
El mensaje se ha enviado el dia $dia a las $hora\n\n
----------------------------------------------------------------------------\n
Nombre: $_POST[nombre]\n
Mail: $_POST[email]\n
Comentarios: $_POST[comentarios]\n
----------------------------------------------------------------------------\n
";
El contenido incluye todo lo que va entre comillado. El cuerpo del mail será: El mensaje se ha enviado el dia… Habra un salto de línea y luego el contenido del formulario, el nombre, el email y los comentarios.
Y lo más importante la función de mail:
mail($destinatario, $subject, $contingut, $desde);
Indica que se enviara a mi mail, el asunto el contenido y el mail del remitente. Son variables que se han declarado al principio del código.
Ahora bien, imaginaros que esta Web necesita saber como les ha conocido el usuario y se le añade lista/menú. Crearemos dos páginas una llamada know.html y know.php.
La página know.html será la siguiente:

Cuyo código es el siguiente:
<html>
<head>
<title>Formulario de contacto</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Estilo1 {
     font-family: Geneva, Arial, Helvetica, sans-serif;
     font-weight: bold;
}
.Estilo2 {
     font-family: Arial, Helvetica, sans-serif;
     font-weight: bold;
}
body {
     background-color: #B69C0C;
}
-->
</style>
</head>

<body>
<form name="form1" method="post" action="know.php">
  <table width="200" border="0" align="center">
    <tr>
      <td colspan="2"><div align="center" class="Estilo1">FORMULARIO DE CONTACTO </div></td>
    </tr>
    <tr>
      <td><span class="Estilo2">Nombre:</span></td>
      <td><input name="nombre" type="text" id="nombre" size="20" maxlength="20"></td>
    </tr>
    <tr>
      <td class="Estilo2">Email:</td>
      <td><input name="email" type="text" id="email" size="25" maxlength="25"></td>
    </tr>
    <tr>
      <td class="Estilo2">&iquest;C&oacute;mo nos has conocido?</td>
      <td><select name="fill" size="1" id="fill">
        <option value="a">Me lo recomend&oacute; un amigo</option>
        <option value="b">Buscador Google</option>
        <option value="c">Otros buscadores</option>
        <option value="d">Otros medios de comunicaci&oacute;n</option>
      </select></td>
    </tr>
    <tr>
      <td class="Estilo2">Comentarios:</td>
      <td><textarea name="comentarios" cols="40" rows="5" id="comentarios"></textarea></td>
    </tr>
    <tr>
      <td><div align="right">
        <input type="submit" name="Submit" value="Enviar">
      </div></td>
      <td><input type="reset" name="Submit2" value="Restablecer"></td>
    </tr>
  </table>
</form>
</body>
</html>
Y lo que nos interesa del código es la lista/menú.
La página know.php será la siguiente:
Y el código:
<html>
<head>
<title>Formulario de contacto</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Estilo1 {
     font-family: Geneva, Arial, Helvetica, sans-serif;
     font-weight: bold;
}
.Estilo2 {
     font-family: Arial, Helvetica, sans-serif;
     font-weight: bold;
}
body {
     background-color: #B69C0C;
}
-->
</style>
</head>

<body>
<form name="form1" method="post" action="know.php">
  <table width="200" border="0" align="center">
    <tr>
      <td colspan="2"><? echo "<b><center>El formulario se ha enviado correctamente. En la mayor brevedad posible nos pondremos en contacto con usted. Gracias.</b></center>"?>&nbsp;</td>
    </tr>
    <tr>
      <td colspan="2"><div align="center" class="Estilo1">FORMULARIO DE CONTACTO </div></td>
    </tr>
    <tr>
      <td><span class="Estilo2">Nombre:</span></td>
      <td><input name="nombre" type="text" id="nombre" size="20" maxlength="20"></td>
    </tr>
    <tr>
      <td class="Estilo2">Email:</td>
      <td><input name="email" type="text" id="email" size="25" maxlength="25"></td>
    </tr>
    <tr>
      <td class="Estilo2">&iquest;C&oacute;mo nos has conocido?</td>
      <td><select name="fill" size="1" id="fill">
        <option value="a">Me lo recomend&oacute; un amigo</option>
        <option value="b">Buscador Google</option>
        <option value="c">Otros buscadores</option>
        <option value="d">Otros medios de comunicacion</option>
      </select></td>
    </tr>
    <tr>
      <td class="Estilo2">Comentarios:</td>
      <td><textarea name="comentarios" cols="40" rows="5" id="comentarios"></textarea></td>
    </tr>
    <tr>
      <td><div align="right">
        <input type="submit" name="Submit" value="Enviar">
      </div></td>
      <td><input type="reset" name="Submit2" value="Restablecer"></td>
    </tr>
    <tr>
      <td colspan="2"><? switch ($fill)
       {
       case "a":
       echo "<p><b>Nos conoció a través de un amigo.</b>";
       break;
       case "b":
       echo "<p><b>Nos conoció a través del buscador Google.</b><br>";
       break;
       case "c":
       echo "<p><b>Nos conoció a través de otros buscadores.</b><br>";
       break;
       case "d":
       echo "<p><b>Nos conoció a través de otros medios de comunicación.</b><br>";
       break;
       default:
       echo "<p><b>No sabemos como nos ha conocido este cliente</b><br>";
       break;
       }?>&nbsp;</td>
    </tr>
  </table>
</form>
<?php
$dia=date("m.d.Y");
$hora=date("H:i:s");
$destinatario="amizba@gmail.com";
$subject= " Consulta";
$desde = 'From: ' .$_POST[email];
$contingut = "
El mensaje se ha enviado el dia $dia a las $hora\n\n
----------------------------------------------------------------------------\n
Nombre: $_POST[nombre]\n
Mail: $_POST[email]\n
Comentarios: $_POST[comentarios]\n
----------------------------------------------------------------------------\n
";
mail($destinatario, $subject, $contingut, $desde);

?>
</body>
</html>
Lo que nos interesa es lo que he resaltado en negrita. Hemos utilizado la función switch para la lista/menú del formulario. Creo que no hay mucho que explicar, ya hemos visto anteriormente la sentencia switch y si no es una opción será otra, y sino, será la defecto, en este caso default.
Otro ejemplo de formulario es dependiendo del producto o de los servicios que ofrece la Web se enviará el formulario a una cuenta de correo o a otra. Crearemos otros dos archivos correo.html y correo.php. Seguimos con el mismo formulario que hemos utilizado al principio de esta entrada. Imaginaros que en comentarios escribis que queréis información sobre “ventas” pues se enviará a una cuenta de correo, que querís información sobre algún producto en concreto que ofrece la web, se envía a otra cuenta de correo, etc. Y a la misma vez hay que escribir un mail valido. Pues de eso va este formulario. La pagina correo.htm es la siguiente:

Fijaros que no le hemos puesto un mail válido y nos devolverá la página correo.php con lo siguiente:
Indico el código de cada una de las páginas. De la página correo.htm:
<html>
<head>
<title>Formulario de contacto</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Estilo1 {
     font-family: Geneva, Arial, Helvetica, sans-serif;
     font-weight: bold;
}
.Estilo2 {
     font-family: Arial, Helvetica, sans-serif;
     font-weight: bold;
}
body {
     background-color: #B69C0C;
}
-->
</style>
</head>

<body>
<form name="form1" method="post" action="correo.php">
  <table width="200" border="0" align="center">
    <tr>
      <td colspan="2"><div align="center" class="Estilo1">FORMULARIO DE CONTACTO </div></td>
    </tr>
    <tr>
      <td><span class="Estilo2">Nombre:</span></td>
      <td><input name="nombre" type="text" id="nombre" size="20" maxlength="20"></td>
    </tr>
    <tr>
      <td class="Estilo2">Email:</td>
      <td><input name="email" type="text" id="email" size="25" maxlength="25"></td>
    </tr>
    <tr>
      <td class="Estilo2">Comentarios:</td>
      <td><textarea name="comentarios" cols="40" rows="5" id="comentarios"></textarea></td>
    </tr>
    <tr>
      <td><div align="right">
        <input type="submit" name="Submit" value="Enviar">
      </div></td>
      <td><input type="reset" name="Submit2" value="Restablecer"></td>
    </tr>
  </table>
</form>
</body>
</html>
Y de la página correo.php
<html>
<head>
<title>Formulario de contacto</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Estilo1 {
     font-family: Geneva, Arial, Helvetica, sans-serif;
     font-weight: bold;
}
.Estilo2 {
     font-family: Arial, Helvetica, sans-serif;
     font-weight: bold;
}
body {
     background-color: #B69C0C;
}
-->
</style>
</head>

<body>
<?
  $nombre=trim($nombre);
  $mail=trim($email);
  $comentarios=trim($comentarios);

  if (!ereg("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$", $email))
  {
    echo "<b><center>Esta no es una dirección email válida.  Por favor, vuelva a la"
         ." página previa e inténtelo de nuevo.</b></center>";
    exit;
  }

  $adireccion = "amizba@gmail.com";  // el formulario se enviará a esta cuenta por defecto

  // Cambiar la $adireccion si el criterio se cumple

  // versión String

  if (strstr($comentarios, "pedidos"))
    $adireccion = "pedidos@gmail.com";
  else if (strstr($comentarios, "ventas"))
    $adireccion = "ventas@gmail.com";
  else if (strstr($comentario, "compras"))
    $adireccion = "compras@gmail.com";

 $asunto = "Comentario del sitio";
  $contenidomail = "nombre cliente: ".$nombre."\n"
                 ."email cliente: ".$email."\n"
                 ."comentarios cliente: \n".$comentarios."\n";
 $dedireccion = 'From: ' .$_POST[email];

  mail($adireccion, $asunto, $contenidomail, $dedireccion);
?>
<form name="form1" method="post" action="correo.php">
  <table width="200" border="0" align="center">
    <tr>
      <td colspan="2"><div align="center" class="Estilo1">FORMULARIO DE CONTACTO </div></td>
    </tr>
    <tr>
      <td><span class="Estilo2">Nombre:</span></td>
      <td><input name="nombre" type="text" id="nombre" size="20" maxlength="20"></td>
    </tr>
    <tr>
      <td class="Estilo2">Email:</td>
      <td><input name="email" type="text" id="email" size="25" maxlength="25"></td>
    </tr>
    <tr>
      <td class="Estilo2">Comentarios:</td>
      <td><textarea name="comentarios" cols="40" rows="5" id="comentarios"></textarea></td>
    </tr>
    <tr>
      <td><div align="right">
        <input type="submit" name="Submit" value="Enviar">
      </div></td>
      <td><input type="reset" name="Submit2" value="Restablecer"></td>
    </tr>
  </table>
</form>
</body>
</html>
Le hechaís un vistazo a los códigos y si teneis otra forma de hacerlo estaría bien que me lo enviaraís y así lo comparto con todos vosotros.
Bueno de momento por hoy dejamos el tema de los formularios.
Vamos a pasar ahora a explicar include ( ) y requiere ( ). Include( ) y requiere( ) se utilizan para utilizar el mismo código en más de una página Web. Estas funciones sobre todo se utilizan en trabajos largos, más que complejos. Por ejemplo, en una página que contenga muchos menús y dentro de esos menús hayan submenús, y en algunso submenús otros submenús. Cuando se tenga simplificar o añadir contenido a uno de los submenús para impedir volver a insertar el encabezado, el pie de página, etc. se recurre a estas funciones. Pero lo voy a explicar poniendo ejemplos muy sencillos, y en los proyectos que hagamos más adelante ya usaremos include() y require() para tenerlo mucho más claro.
Include() y requiere() son sinónimos, se puede utilizar uno que otro, sin embargo hay una diferencia entre ellos y son los errores que dan. Include() da un error fatal y en cambio requiere indica que tipo de error, por lo que se utiliza más require().
Voy a crear un archivo php llamado sent.php cuyo contenido es el siguiente:
<?
echo “<center>Esto es un ejemplo de require()</center><br>”;
?>
Creo otro archivo llamado reb.php cuyo contenido es el siguiente:
<?
echo “<center>Esto es un ejemplo de las funciones require() y include()</center><br>”;
require(“sent.php”);
echo “<center>El contenido que aparece arriba esta dentro del archivo sent</center>”;
?>
Crear vosotros mismos estos archivos y hacer la prueba. Intentarlo con include() y ya me decís algo.
Por ahora doy como finalizado estas dos funciones, aunque más adelante las veremos con más profundidad en ejercicios prácticos. De momento esto es todo, hasta la próxima!

2 comentarios:

  1. Oye amigo, no podes hacerlo más sencillo esto? Algo que se entienda y que se visualice bien.

    ResponderEliminar
  2. Más sencillo??? Puedes seleccionar el texto le das a la opcion copiar y lo pegas en un documento de texto y le das un tamaño de letra que puedas leerlo con claridad... y si no te bajas un manual de PHP... lo siento no poderte complacer para que lo entiendas y lo visualices mejor...

    ResponderEliminar