Curso PHP 5 VI || Aprendamos sobre Formularios

Actividades V

Crea un programa en PHP a forma de calculadora utilizando el mínimo de funciones posible.


<?php 

function calcula($num$oper$num2) { 
    switch (
$oper) { 
     
        case 
'+'
            
$res $num $num2
        break;; 
        case 
'-'
            
$res $num $num2
        break;; 
        case 
'*'
            
$res $num $num2
        break;; 
        case 
'/'
            
$res $num $num2
        break;; 
        case 
'%'
            
$res $num $num2
    } 
    return 
$res


echo 
calcula(2,'+',2); # Resultado: 4 
?> 



Crea un programa en PHP en el que tengas que exponer todo lo aprendido en este apartado
Este ejercicio era bastante libre, y podíais aplicar todo lo aprendido o solo lo de la última clase. Aquí las soluciones son infinitas.


<?php 

$message 
"Este es mi mensaje! saludos, nax"

$fake givetome($message"nax""thief"); 
echo 
$fake

function 
givetome($original$autor$ladron) { 
    
$original explode(' '$original); 
    if (
in_array($autor,$original)) 
        
$original[array_search($autor,$original)] = $ladron;     
    return 
implode(' ',$original); 

?> 


Este ejemplo toma un mensaje original y cambia el autor por el que le indicamos, un ejemplo como cualquier otro que me hayas enviado.

VIII. Introducción a los formularios


Ya hemos dado todos los puntos que me había propuesto para este tutorial/curso, por lo tanto voy a dar una clase práctica de integración con formularios y ya doy por cerrado este curso.

Por supuesto seguiré trayendo cosas tanto en Bl4ck-P0rt4l y CUH como en mi blog. Así que si seguís interesados en el mundo de PHP y sus áreas derivadas no os alejéis mucho.

Empecemos por el principio:

Un formulario web es, a día de hoy, un elemento imprescindible para una página web dinámica, gracias a ellos podemos loguear y registrar usuarios, enviar mensajes, publicar encuestas, comentarios, etc.
Por lo tanto conocer su funcionamiento y proporcionar facilidades a los usuarios es una tarea importante en el desarrollo web.
Hay mucha gente, quizá por comodidad o facilidad, que crea un .html para los formularios y un .php para el código, yo tengo por costumbre hacerlo todo en vista de código y por lo tanto siempre lo hago todo en un .php así que vamos a aprender a hacerlo de esa forma.

Un simple formulario:

Vamos a ver un ejemplo simple.


<?php 

if (isset($_POST['nombre'])) { 
    echo 
"Bienvenido "$_POST['nombre']; 
} else { 
    echo 
'<form action="'.$_SERVER['PHP_SELF'].'" method="post"> 
          Bienvenido desconocido por favor dinos tu nombre: 
          <input name="nombre" type="text" /> 
            <input type="submit" name="Submit" id="button" value="Enviar" /> 
          </form>'


?> 


Este es un ejemplo muy claro, una página que se envía un form a sí mismo.
El if() comprueba que se haya enviado la variable, en caso de ser así es porque se nos ha enviado un nombre para mostrar, sino, mostramos el formulario pidiéndole que nos dé su nombre.

En este ejemplo ya podemos destacar dos cosas, la variable $_SERVER y la variable $_POST, como ya comenté anteriormente la variable $_SERVER es una variable propia del sistema PHP lo mismo pasa con $_POST ambas tienen su función y existen más variables de servidor que explicaremos a continuación.

Variables de Servidor útiles:

La variable $_SERVER contiene un montón de elementos más, pero nos vamos a centrar en aquellos que nos puedan ser de mayor utilidad.

Elemento Ejemplo Descripción
PHP_SELF /pagina.php Nos devuelve la ruta de la página en que se ejecuta
QUERY_STRING id=3&post=4 Es la parte que vemos en la url (store.php?id=3)
PATH_INFO pagina.php?/browse Es parecido a lo anterior pero con directorios
SERVER_NAME http://www.bl4ck-p0rtal.org Nombre del servidor que ejecuta el intérprete
DOCUMENT_ROOT /usr/local/htdocs Ruta local de la carpeta html
REMOTE_ADDR 175.56.23.2 IP del usuario/cliente
REMOTE_HOST pool.cvx.dialup.. Nombre del host del usuario/cliente
HTTP_REFERER foro.el-hacker.com Si se hizo clic para llegar al link esta variable lo contiene
HTTP_USER_AGENT Mozilla/4.0… Información del navegador y sistema operativo.

Os invito a probar el resto estas son, quizá, las más utilizadas.

Procesando y accediendo a los parámetros de los documentos:

Los formularios funcionan con dos métodos POST y GET.
La principal diferencia entre ambos (y las que nos interesa ahora) es que POST se envía en segundo plano y GET se puede ver fácilmente en la barra de direcciones (esto no implica que los POST no se puedan ver, solo que es más ‘dificil’).

Entonces te preguntarás ¿y porqué existe GET si POST es claramente mejor? Bueno, mi profesor de PHP me enseñó en su momento que en PHP si hay 2 formas de hacer las cosas siempre prevalece la mejor y la otra se elimina de el intérprete, pero en el caso de que ambas formas sean útiles en determinados momentos se mantienen ambas. Es decir, un POST es útil con un formulario que, por ejemplo envía una contraseña para que no se vea en la URL, pero sin embargo no podemos enviar datos a otra página (o a la misma) sin usar un formulario y en ese momento es GET el que entra en acción.

Un claro ejemplo de variables GET son los foros SMF todo lo que va detrás de .php? se está enviando vía GET.

Entonces, como conclusión usaremos POST para los formularios y GET para las url. En php accedemos a los métodos con $_POST y $_GET. En los formularios el parámetro name es el que marca el nombre que tendrá en el $_POST o $_GET.

Los elementos de múltiples valores serán enviados como un array:

<?php 

if (isset($_POST['nombre'])) { 
    echo 
"Bienvenido "$_POST['nombre'] . 
    
'<br />Hoy quieres comer: ' $_POST['food'][0] .  

    ' y ' $_POST['food'][1]; 
} else { 
    echo 
'<form action="'.$_SERVER['PHP_SELF'].'" method="post"> 
          Bienvenido desconocido por favor dinos tu nombre: 
          <input name="nombre" type="text" /> <br /> 
            
         <select name="food[]" multiple> 
             <option value="Fideos"> Fideos </option> 
            <option value="carne"> Carne </option> 
            <option value="pescado"> Pescado </option> 
         </select> 
          
         <br /><input type="submit" name="Submit" id="button" 

         value="Enviar" /> 
         </form>'


?> 



Como veis en el form agregamos una lista en la cual al nombre ya le indicamos que será un array con los signos [] y le damos el parámetro múltiple.

En el ejemplo estamos dando por supuesto que se recibirán 2 parámetros, para asegurarnos de ello deberíamos crear una función en JS para asesorarnos que es así.

Comprobar direcciones de correo:

Como este último capitulo pretende ser un repaso muy por encima de los formularios no voy a hablar de validación de datos, pero si os voy a dejar la forma de validar, en parte, un correo electrónico.

Luego, cuando estéis más acostumbrados a PHP se puede verificar que estos correos existan de verdad haciendo consultas whois y cosas por el estilo. Pero con este ejemplo nos aseguraremos de que al menos la sintaxis del correo sea correcta

<?php 

if (! preg_match('/^[^@s]+@([-a-z0-9]+.)+[a-z]{2,}$/i'$_POST['email'])) { 
    
$errores[] = 'Introduce un email valido'
?> 


Valores por defecto:

Al principio hablábamos de dar comodidad al usuario. Una de las formas de hacerlo es recordando los datos que se ingresaron y en caso de haber algún error rellenar los datos que el usuario tiene bien y otra forma es crear valores por defecto a modo de ejemplo.

<?php 

if ($_POST['_check']) { 
    
$defaults $_POST
} else { 
    
$defaults = array( 'nombre' => 'nax'
                        
'edad'  => '20'
                        
'ciudad' => 'Villanax' ); 

?> 


Con este ejemplo tenemos una variable llamada _check que en caso de no existir significa que no se envió un formulario y por lo tanto nombramos nuestros valores por defecto, sino lo que estaríamos haciendo es guardar los valores enviados.

Para establecer valores por defecto es imperativo hacer los form en PHP. Un ejemplo de cómo se cargarán dichos valores es:

<?php 

if ($_POST['_check']) { 
    
$defaults $_POST
} else { 
    
$defaults = array( 'nombre' => 'nax'
                        
'edad'  => '20'
                        
'ciudad' => 'Villanax' ); 

echo 
'<form action="'.$_SERVER['PHP_SELF'].'" method="post">  
          Bienvenido desconocido por favor dinos tu nombre:  
          <input name="nombre" type="text" value="'
. 

          $defaults['nombre'].'" /> <br />  
             
          Edad: <input name="nedad" type="text" value="'
. 

          $defaults['edad'].'" /> <br /> 
           
          Ciudad: <input name="ciudad" type="text" value="'
.

          $defaults['ciudad'].'" /> <br /> 
          <br /><input type="submit" name="Submit" 

          id="button" value="Enviar" /> 
          </form>'

?> 


Con esta buena práctica ahorramos muchos dolores de cabeza a las personas con tendencia a equivocarse en los formularios de registro por ejemplo, y si... lo digo por experiencia propia.


Y bien, con este último capítulo doy por concluido el tutorial de PHP 5. Gracias a todos los que lo han ido siguiendo día a día, a los que enviaron los ejercicios y a los comentarios de crítica (tanto buenos como malos).
Si creen que falta algo o creen que sería bueno ampliar alguna parte del tutorial solo háganmelo saber.

Para:
~ Syntax Error ~
Bl4ck~P0rtal -
http://foro.el-hacker.com

Saludos Nax.


Version .doc:Formularios.doc
Version .pdf: Formularios.pdf