Crear un formulario utilizando PHP

Aquí voy a explicar los mínimos conocimientos que se necesitan para crear un formulario simple utilizando lenguaje HTML y procesarlo con PHP.

Primero, es importante saber que el lenguaje PHP se puede ejecutar únicamente en un servidor.

Es decir, si nunca hiciste nada con PHP, y no tenés una página web subida en un hosting con acceso por FTP, vas a necesitar comenzar por un tutorial de “Primeros pasos en PHP“, o un poco más difícil los que se explican en “La manera correcta”

Es decir que empezamos pensando que ya hiciste algún programita mínimo con PHP.

También, que ya practicaste un poco creando un formulario que no utilice PHP.

Primer paso, el formulario

Para crear un formulario de contacto, por ejemplo, vamos a necesitar dos archivos. En uno va a estar el formulario en sí, en lenguaje HTML. Este podría ser el código:

<!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>
 <title>Enviar mensaje</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form action="enviamail.php" method="post" id="formulario_contacto">
 <label for="nombre">Nombre</label>
 <input name="nombre" id="nombre" type="text" size="40" value=" " />
 
 <label for="correo">Correo electrónico</label>
 <input name="correo" id="correo" type="text" size="40" value=" " />
 
 <label for="mensaje">Escriba su mensaje</label>
 <textarea name="mensaje" id="mensaje" rows="5" cols="30" ></textarea>
 
 <div><input name="enviar" id="enviar" type="submit" value="Enviar mensaje" /></div>
 </form>
</body>
</html>

Los encabezados de HTML y tipo de codificación son obligatorios para crear un documento válido. La parte del formulario comienza en la sentencia form, y en la acción se utiliza el nombre del archivo que va a procesar el formulario (enviarmail.php), que está en lenguaje PHP.

Segundo paso, el programa que procesa los datos del formulario

Este archivo (enviarmail.php) recibe la información enviada al pulsar el botón “Enviar mensaje”. ¿Cómo utiliza esa información? Utilizando $_POST y el nombre del objeto en el formulario. Aquí guardamos los tres valores en tres variables:

$nombre = $_POST[‘nombre‘];
$mail = $_POST[‘correo‘];
$mensaje = $_POST[‘mensaje‘];

Este sería el contenido completo del archivo PHP, al cual le falta mucho trabajo todavía, porque no controla la validez de los datos, no da error si algo sale mal, etc.:

<!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=UTF-8" />
<title>Enviar mensaje</title>
</head>
<body>
<?php
////Tomar el valor recibido y almacenarlo en variables/////
$nombre = $_POST['nombre'];
$mail = $_POST['correo'];
$mensaje = $_POST['mensaje'];
 
///////Configuración del mensaje: destinatario y asunto/////
$mail_destinatario = 'blablablablabla@gmail.com';
$asunto = "Mensaje enviado desde el formulario";
///////Fin configuración//
///En esta próxima línea es donde verdaderamente se envía el mail///
mail ($mail_destinatario, $asunto, $mensaje);
echo "Mensaje enviado"
?>
</body>
</html>

Tercer paso, aprender mucho más

Hacer un formulario que no permita código HTML (para evitar códigos maliciosos), que valide datos (para obligar a completar algunos campos o evaluar el contenido), o que guarde la información de diversas maneras (creando un archivo PDF, un archivo de texto o una base de datos) serán nuestros próximos pasos.

Artículos sobre cómo crear formularios accesibles:

Crear un formulario utilizando PHP

Aquí voy a explicar los mínimos conocimientos que se necesitan para crear un formulario simple utilizando lenguaje HTML y procesarlo con PHP.

Primero, es importante saber que el lenguaje PHP se puede ejecutar únicamente en un servidor.

Es decir, si nunca hiciste nada con PHP, y no tenés una página web subida en un hosting con acceso por FTP, vas a necesitar comenzar por un tutorial de “Primeros pasos en PHP“, o un poco más difícil los que se explican en “La manera correcta”

Es decir que empezamos pensando que ya hiciste algún programita mínimo con PHP.

También, que ya practicaste un poco creando un formulario que no utilice PHP.

Primer paso, el formulario

Para crear un formulario de contacto, por ejemplo, vamos a necesitar dos archivos. En uno va a estar el formulario en sí, en lenguaje HTML. Este podría ser el código:

<!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>
 <title>Enviar mensaje</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form action="enviamail.php" method="post" id="formulario_contacto">
 <label for="nombre">Nombre</label>
 <input name="nombre" id="nombre" type="text" size="40" value=" " />
 
 <label for="correo">Correo electrónico</label>
 <input name="correo" id="correo" type="text" size="40" value=" " />
 
 <label for="mensaje">Escriba su mensaje</label>
 <textarea name="mensaje" id="mensaje" rows="5" cols="30" ></textarea>
 
 <div><input name="enviar" id="enviar" type="submit" value="Enviar mensaje" /></div>
 </form>
</body>
</html>

Los encabezados de HTML y tipo de codificación son obligatorios para crear un documento válido. La parte del formulario comienza en la sentencia form, y en la acción se utiliza el nombre del archivo que va a procesar el formulario (enviarmail.php), que está en lenguaje PHP.

Segundo paso, el programa que procesa los datos del formulario

Este archivo (enviarmail.php) recibe la información enviada al pulsar el botón “Enviar mensaje”. ¿Cómo utiliza esa información? Utilizando $_POST y el nombre del objeto en el formulario. Aquí guardamos los tres valores en tres variables:

$nombre = $_POST[‘nombre‘];
$mail = $_POST[‘correo‘];
$mensaje = $_POST[‘mensaje‘];

Este sería el contenido completo del archivo PHP, al cual le falta mucho trabajo todavía, porque no controla la validez de los datos, no da error si algo sale mal, etc.:

<!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=UTF-8" />
<title>Enviar mensaje</title>
</head>
<body>
<?php
////Tomar el valor recibido y almacenarlo en variables/////
$nombre = $_POST['nombre'];
$mail = $_POST['correo'];
$mensaje = $_POST['mensaje'];
 
///////Configuración del mensaje: destinatario y asunto/////
$mail_destinatario = 'blablablablabla@gmail.com';
$asunto = "Mensaje enviado desde el formulario";
///////Fin configuración//
///En esta próxima línea es donde verdaderamente se envía el mail///
mail ($mail_destinatario, $asunto, $mensaje);
echo "Mensaje enviado"
?>
</body>
</html>

Tercer paso, aprender mucho más

Hacer un formulario que no permita código HTML (para evitar códigos maliciosos), que valide datos (para obligar a completar algunos campos o evaluar el contenido), o que guarde la información de diversas maneras (creando un archivo PDF, un archivo de texto o una base de datos) serán nuestros próximos pasos.

Artículos sobre cómo crear formularios accesibles:

Agregar un pie a las fotos de una página

Un café con leche realizado con arte

Esta imagen muestra un rico café con leche decorado, y su correspondiente vasito de jugo de naranja.

Para que una foto tenga un texto debajo, como en el ejemplo de la derecha, podemos utilizar un DIV dentro de otro:

<div style=”width: 50%; border: 1px solid; background-color: #eee; padding: 0.5em; float: right; margin-left: 0.5em;”>

<a href=”fotogrande.png”>

<img src=”fotochica.png” alt=”Un café con leche realizado con arte” width=”100%” />

</a>

<div style=”width: 90%; padding: 0.5em; font-size: 0.8em; margin: auto;”>Esta imagen muestra un rico café con leche decorado, y su correspondiente vasito de jugo de naranja. </div>

</div>

De esa manera tendremos un DIV dentro de otro. El DIV más grande tiene un color de fondo gris muy clarito y el de adentro contiene la imagen.

Separando diseño de contenido

En los casos en que tenemos la posibilidad de acceder a la hoja de estilo de la página, será mucho mejor separar el diseño (que va en la hoja de estilo, CSS) del contenido (que va en el archivo HTML). Tomé la base de este blog (CiudadBlogger)

Café con leche y jugo de naranja

Este es el código para la hoja de estilo:

.piedefoto { padding: 0; width: 40%; position: relative; }

.piedefoto img { width: 40%; display: block; padding: 0; border: 0; }

.piedefoto::before { content: attr(title); position: absolute; background: #EAF200; /* Color de fondo */

background: rgba(234, 242, 0, 0.6); /* Color de fondo en RGBA */

color: #000; /* Color del texto */

font-size: 14px; /* Tamaño del texto */

padding: 5px; right: 0; bottom: 0; left: 0; text-align: center; z-index: 1; }

Y este, el código para insertar en el documento HTML:

<div style=”width:40%; padding:1em; margin:0 auto; float:right;”><div class=’piedefoto’ title=’Escribí acá el pie de foto’><img src=’Dirección de la imagen’/></div></div>

En el post original explican por qué el color de fondo está dos veces:

En el primer código que añadimos están los estilos para el pie de foto. Verás que el color de fondo está dos veces, primero en código hexadecimal y luego en RGBA, esto es porque con RGBA podemos definir una transparencia, en este caso es de 0.6, pero en el caso de que el navegador (Internet Explorer como siempre) no soporte este estilo entonces tomará el primero, el hexadecimal, pero sin la transparencia. En la secciónColores puedes obtener el código tanto en hexadecimal como en RGB.

Si jugamos un poco con colores y niveles de transparencia podemos lograr muchas variantes:


opciones

 

Estos son los estilos de esos tres ejemplos:

.prueba::before { content: attr(title); position: absolute; background: #00ff00; background: rgba(234, 234, 234, 0.7); color: #000; width:100%;padding: 5px; right: 0; bottom: 0; left: 0; text-align: center; z-index: 1; }
.prueba { padding: 0; position: relative; }
.prueba img { display: block; padding: 0; border: 0; }

.prueba2::before { content: attr(title); position: absolute; background: #0000FF; background: rgba(0, 0, 255, 0.6); color: #fff; width:50%;padding: 5px; right: 0; bottom: 50%; left: 0; text-align: center; z-index: 1; }
.prueba2 { padding: 0; position: relative; }
.prueba2 img { display: block; padding: 0; border: 0; }

.prueba3::before { content: attr(title); position: absolute; background: #FF9A00; background: rgba(255, 154, 0, 0.8); color: #000; width:90%;padding: 5px; bottom: 90%; left: 60px; text-align: left; z-index: 1; }
.prueba3 { padding: 0; position: relative; }
.prueba3 img { display: block; padding: 0; border: 0; }

Lindos botones con CSS (II)

botones con fondo lindo
Al igual que en el post anterior, voy a compartir el código HTM y CSS para hacer unos botones lindos y accesibles, ya que el contenido está separado del formato.

En este caso usé una imagen transparente de frente y una imagen de unas flores como fondo*.
Imagen de frente:

Rectángulo semi transparente hecho en Gimp (lo pongo sobre una superficie gris para que se pueda ver…)

Rectángulo semi transparente

El código es prácticamente el mismo que en el post anterior, pero le modifiqué los márgenes y el padding para que se viera el botón transparente dentro del otro.

Este es el HTML. En el bloque de la izquierda abro y cierro el “marco” por cada botón, y en el de la derecha el “marco” contiene los otros tres divs:

<div style=”width: 15%; float: left;”>
<div class=”marco”>
<div class=”boton”><p>Opción 1</p>
</div></div>
<div class=”marco”>
<div class=”boton”><p>Opción 2</p>
</div></div>
<div class=”marco”>
<div class=”boton”><p>Opción 3</p>
</div></div>
<div class=”marco”>
<div class=”boton”><p>Opción 4</p>
</div></div>
</div>

<div style=”width: 15%; float: left; margin-left: 20px;”>
<div class=”marco” style=”margin: 10px;”>
<div class=”boton”><p>Opción 1</p>
</div>
<div class=”boton”><p>Opción 2</p>
</div>
<div class=”boton”><p>Opción 3</p>
</div>
</div>
</div>

Y acá está el CSS:

.marco {

width: 99%;
background-image: url(‘http://irisfernandez.com.ar/imagenes/flores.jpg’);
background-repeat: repeat-none;
padding-top: 10px;
padding-bottom: 10px;
}

.boton {
width: 80%;
line-height: 40px;
background-image: url(‘http://irisfernandez.com.ar/imagenes/transparente.png’);
color: #000;
margin-left: auto;
margin-right: auto;
margin-top: 10px;
margin-bottom: 10px;
text-align: center;
}
.boton a:link {
color: #000;
text-decoration: none;
}
.boton a:hover {

color: #000;
text-decoration: none;
}
.boton a:visited {

color: #000; text-decoration: none;
}

*Imagen de fondo descargada de Wikimedia Commons:

Douglasia laevigata 2453CC BY-SA 3.0

Walter Siegmund – Own work

Lindos botones con CSS

Botones lindos con CSSEn uno de mis trabajos tenía que hacer unos botones más o menos acordes con el resto del sitio y se me ocurrió hacerlos en un rectángulo con sombra, sobre una franja de otro color.

¿Por qué no hacerlos directamente como imagen?

Porque la regla número uno de la accesibilidad es separar el contenido del formato. Un invidente puede escuchar el nombre de las opciones únicamente si estas están insertadas como texto.

Un dispositivo muy lento mostrará los textos y tardará mucho en cargar las imágenes.

¿Cómo se hacen?

1) En el archivo CSS se definen los tipos de DIV que se usarán:

Un div contiene la franja que está debajo del rectángulo.

Es un div que mide 50px de altura, y que tiene como fondo una imagen (porque esa franja anaranjada tiene un degradado). La imagen de fondo se repite horizontalmente cuanto sea necesario, adaptándose al ancho del DIV.

Este es el código CSS del marco:

.marco {
width: 99%;
height: 50px;
 background-color: #fff;
background: url('http://blabla/pix/fondoopciones.png');
background-repeat: repeat-x;
}

Y este es el CSS del botón en sí

.boton {

 width: 80%;
 line-height: 40px;
 background-color: #773156;
 color: #fff;
 margin-left: auto;
 margin-right: auto;
 text-align: center;
 box-shadow: 5px 5px 2px #999; 
}
.boton a:link {
 color: #fff;
 text-decoration: none;
 }

.boton a:hover {

 color: #fff;
 text-decoration: none;
 }

.boton a:visited {

 color: #fff; text-decoration: none;

}

Luego, en el HTML utilizo un DIV dentro de otro:

<div class="marco">
<div class="boton">
<a href="enlacedelboton">Preguntas frecuentes</a>
</div>
</div>

Mapas de imagen

¿Qué es un mapa de imagen? Se trata de una imagen que contiene zonas sensibles donde, al pasar el mouse, se activa un link. Aquí muestro dos variantes: una sola imagen con zonas sensibles, y una segunda opción donde se dividió la gran imagen en tres imágenes, y se aplicó el intercambio de imágenes explicado en el post anterior.

Mapa de imagen con zonas sensibles y enlaces externos

Para realizarlo, se utiliza una imagen de base con la propiedad usemap, que vincula la imagen con el mapa que describimos previamente, siempre utilizando el atributo ALT, de acuerdo a las recomendaciones de accesibilidad.

Mapamundo Kepler

America septentrionalis Septentrio Terra Australis Incognita Mar di India

Detenga el mouse en los continentes para leer su nombre

El problema que encontré en este caso, es que en el celular con Android no se muestran los Titles ni los ALT. Este es el código del mapa de imagen anterior:

<img alt=”Mapamundo Kepler” src=”800px-Kepler-world.jpg” usemap=”#mapa1″ width=”600″ border=”0″ />

<map id=”mapa1″ name=”mapa1″>

<area title=”America septentrionalis” alt=”America septentrionalis” coords=”10,10,120,234″ shape=”rect” href=”http://……” />

<area title=”Septentrio” alt=”Septentrio” coords=”150,10,350,225″ shape=”rect” href=”http://……” />

<area title=”Terra Australis Incognita” alt=”Terra Australis Incognita” coords=”150,225,350,450″ shape=”rect” href=”http://……” />

<area title=”Mar di India” alt=”Mar di India” coords=”350,10,550,450″ shape=”rect” href=”http://……” /> </map>

<p style=”text-align: center;”>Detenga el mouse en los continentes para leer su nombre</p>

Ejemplo sin mapa de imagen

Utilizando lo explicado en el post anterior, dividimos la imagen grande en varias imágenes pequeñas, a las cuales les cambiamos el aspecto al pasar sobre ellas:

America septentrionalis
Septentrio y Terra Australis Incognita
Mar di India

Cambiar de imagen al pasar el mouse sin Javascript

Este es uno más de esos posts que escribo casi exclusivamente para mí misma, ya que cada vez que lo necesito me pongo a buscar en Internet…

Esta vez apliqué lo que encontré en este artículo: HTML Cambio de imagen sin javascript

El resultado puede verse en estos dos botones:

Letra pe::Letra eme

Este es el ejemplo de código para los botones anteriores:

<a

onmouseover=”document.letrape.src=’http://…./pe_verde.png'”

onmouseout=”document.letrape.src=’http://…./pe_bn.png'”

href=”http://www.irisfernandez.com.ar/betaweblog”>

<img alt=”Letra pe” src=”http://…./pe_bn.png” name=”letrape” />

</a>

<a

onmouseover=”document.letraeme.src=’http://…./eme_azul.png'”

onmouseout=”document.letraeme.src=’http://…/eme_bn.png'”

href=”http://www.irisfernandez.com.ar/betaweblog”>

<img alt=”Letra eme” src=”http://…/eme_bn.png” name=”letraeme” />

</a>

La traducción sería algo así como:

<enlace

onmouseover….cuando el mouse esté sobre esta imagen, cambiar a esta otra imagen: pe_verde.png

onmouseout……cuando el mouse salga de esta imagen, cambiar a esta imagen: pe_bn.png

href……….destino de la imagen >

<img….. imagen que se verá antes de que el mouse pase por encima>

Cómo ganar dinero con la accesibilidad web

Hace muchos años que tengo el honor de dar diversas charlas en eventos vinculados con el software libre, con la educación, o con ambas. Incluso he organizado varios de estos eventos, junto a otros profesionales muy queridos y muy capaces.

Los años, la experiencia, y sobre todo los fracasos me fueron mostrando que en mis charlas sobre Accesibilidad web, los asistentes eran pocos, y si bien solía interesarles el tema en el momento, lo aprendido solía quedar en esa hora y en ese lugar, si lograr encender la llama de la curiosidad y el deseo de profundizar (salvo honrosas excepciones, de gente super interesante con la que continúo en contacto).

Sin embargo, cuando comencé a crear grupos y a dar charlas vinculadas -por ejemplo- con Moodle, el éxito fue inmediato. ¿Cuál era la diferencia? ¿Por qué todo el mundo quería saber sobre Moodle y nadie sobre accesibilidad web? ¿Es que a la gente no le interesa que aquellas personas que tienen alguna limitación para moverse puedan hacer trámites por internet, comprar en el supermercado virtual y estudiar desde su casa?

Crear sitios accesibles es un tema realmente complejo. Hay que aprender, hay que saber, hay que informarse. Y tanto esfuerzo, tanta energía, ¿para qué? Para algo tan importante como no dejar a nadie afuera. 

Las personas con discapacidad no tiene necesidades especiales: como me lo enseñó Jarmila Havlik (nunca olvido sus enseñanzas), las personas con discapacidad necesitan soluciones especiales para las mismas necesidades que tenemos todos los seres humanos: trabajar, estudiar, hacer nuestros trámites, y sobre todo, valernos por nosotros mismos. Y es eso lo que necesitan quienes se ven beneficiados por la accesibilidad web. Un discapacitado visual, una persona sorda, alguien con movimientos poco controlados, con epilepsia fotosensible, con un yeso en un brazo, con un mouse que no funciona, o amamantando a un bebé… ¿no merecen nuestro esfuerzo?

Y ahora, retomando el título del post, me pregunto ¿Cómo ganar dinero con la accesibilidad web? Digo, me lo pregunto porque no tengo ni la menor idea, pero lo único de lo que sí estoy segura, es que el dinero moviliza a la gente, convoca y motiva; no así la sensibilidad social o el deseo de hacer mejor la vida de los otros. Si alguien tiene la respuesta a mi pregunta, le pido que la comparta; a ver si logramos que la accesibilidad empiece a salir en la tele y a enseñarse en las academias…

 

Dedicado a Martín Baldassarre, y a Claudio Segovia, amigos que no dejan de poner energías en esto que a veces parece una lucha contra molinos de viento. Inspirada por una charla con Pablo Medrano.