lunes, 19 de mayo de 2014

[Parte 2] PHP

Crear un formulario HTML

Para crear un formulario solo necesitamos conocimiento de HTML. Un formulario se crea de la siguiente manera:


 <!DOCTYPE html>
<html>
<head>
 <title>Formulario a procesar</title>
 <meta charset="utf-8">
</head>
<body>
 <form action="" method="post">
  <!-- Aqui dentro van los inputs, selects, checkboxes, radiobuttons, etc -->
 </form>
</body>
</html>

En el formulario tenemos dos cosas importantes:

1.- action = En este atributo se indica a donde son enviados los datos para que sean procesados, en este caso debe ser un script PHP

2.- method = Este atributo se indica como los datos seran enviados. Existen dos metodos POST y  GET.
GET - Se envia por la URL (las variables se ven reflejadas en la url)
POST - Se envian por las cabeceras de manera que no se ven en la URL, sino que se envian ocultos de cierta forma (como vimos en las partes de seguridad en PHP veiamos como capturar las cabeceras con ello los formularios)

Lo bueno que tiene el metodo GET es que es mas facil de comprender los datos que contiene la pagina, al igual que es una buena manera de que los buscadores te encuentren por algunas palabras que tengas en la URL, pero lo malo es que tiene un limite de caracteres (HTTP Error 414 Request URI Too Long, por ello es mejor enviar algunos tipos de datos por el metodo POST.



 <!DOCTYPE html>
<html>
<head>
 <title>Formulario a procesar</title>
 <meta charset="utf-8">
</head>
<body>

 <form action="" method="post">
  <h1>Deja tu opinion</h1>
  <p><input type="text" name="nombre" placeholder="nombre" /> <b>Nombre</b></p>
  <p><input type="email" name="email" placeholder="email" /> <b>Email</b></p>
  <p><input type="url" name="url" placeholder="url" /></p>
  <p><textarea rows="5" cols="35"></textarea></p>
  <p><input type="submit" name="enviar" value="Enviar Comentario" /></p>
 </form>
</body>

En la estructura anterior tenemos un formulario en el cual nos pide unos datos para comentar en una pagina web.

Tip: Si tu pagina solo utiliza HTML, entonces no es necesario que utilices la extension .php.

Procesar el formulario HTML

Para procesar un formulario tenemos de cierto modo que "atrapar" las entradas del mismo. Para ello no valemos de su atributo name el cual contiene el nombre de tal, en el ejemplo anterior teniamos algo como:



 <input type="text" name="nombre" placeholder="nombre" /> 


Atrapamos ese campo de entrada con el siguiente codigo:



 $nombre = $_REQUEST['nombre'];

En el cual tenemos una variable llamada "nombre" la cual puede tener cualquier valor, me refiero a que puede llamarse $nombreASD, $nombrefgh, o como tu quieras llamarlo, y tenemos otra variable superglobal llamada $_REQUEST la cual atrapa metodos como $_POST, $_GET y $_COOKIE. Con este codigo de arriba tendremos almacenado el valor del input en la variable llamada $nombre cuando el formulario sea procesado en el archivo que se especifique en action.


Magic Quotes


Cuando estan habilitadas escapa automaticamente las comillas simples y dobles (',") al igual que las barras (\) y caracteres NULL. 

Algo por lo que esta obsoleta esta caracteristica es que al tenerla habilitado muchas veces es necesario tener esas comillas simples, dobles o barras o caracteres NULL. Por lo que si se necesitara en realidad esta caracteristica se podria usar en ese caso la funcion stripslashes() - esta funcion quita las barras de un string con comillas escapadas o addslashes() - esta funcion escapa strings con barras invertidas  que tiene el mismo efecto.



 $barras = addslashes($_REQUEST['nombre'])


Condiciones y operadores

Los principales terminos para crear condicionales son if, else y elseif (este tambien puede ser escrito como else if), todas las condicionales comienzan con if:

if(condicion){ //¡Realizar algo!}

Y tambien pueden llevar la clausula else:

if(condicion){//¡Realizar algo!}else{//¡Realizar algo mas!}

Tambien podemos agregar mas de una condicion, con elseif:

if(condicion){//¡Realizar algo!}elseif{//¡Realizar algo mas!}else{//¡Realizar algo mas!}


-> Con if decimos que si la condicion es verdadera se ejecute lo que esta encerrado entre llaves...
-> Con else decimos que sino es verdad if se ejecute else 
-> Con else if, es como otro if, es decir es otra condicion mas ...

Operadores comparativos y logicos


Una condicion en PHP puede ser verdadera por cualquier numero de razones:

-> $variable, si $variable tiene otro valor que no sea 0, o una cadena vacia o FALSE, o NULL.
-> isset($variable), si $variable tiene otro valor que no sea NULL, 0, FALSE o una cadena vacia.
-> TRUE, true, True, etc.

Con la funcion isset() decimos que $variable sea un valor que no sea NULO y que la $variable exista o este establecida.

Veamos un ejemplo muy basico de una condicional:


 <form action="" method="post">
 <input name="acepto" type="submit"  value="Acepto entrar soy mayor de edad" />
 <input name="noacepto" type="submit" value="Soy menor de edad, me pegan mis padres si entro" />
</form>

<?php
 if (isset($_POST['acepto'])) {
  echo "Has aceptado esto es contenido privado :D";
 }elseif(isset($_POST['noacepto'])){
  echo "Nimodo que hacerle, si te PEGAN te PEGAN :(";
 }
 
?>



Switch

Cuando tienes un condicional if-elseif-else demasiado largo puedes usar Switch:



 switch ($variable) {
  case 'valor1':
   # codigo...
   break;
  case 'valor2':
   # codigo...
   break;
  case 'valor3':
   # codigo...
   break; 
  default:
   # codigo...
   break;
 }


El condicional Switch compara la $variable en diferentes casos, si el codigo es verdad y se ejecuta, ponemos un break para que este descanse, default es un valor por defecto se ejecuta si ninguno de los casos existe.

Validando los datos de un formulario

Podemos usar algunas funciones para validar algun formulario, como por ejemplo la funcion isset() que determina si una variable esta definida y no es NULL. O la funcion empty() que determina si una variable esta vacia. Veamos un ejemplo:


 <form action="" method="post">
<b>Cual es tu color preferido:</b><input type="text" name="color" /><br />
<input type="submit" name="enviar" />
</form>
<?php
 if(isset($_POST['enviar'])){
  if(!empty($_POST['color'])){
   $color = htmlentities($_POST['color']);
   switch ($color) {
    case 'rojo':
     $color = "red";
     echo '<div style="background-color:'.$color.';width:100px;height:100px"></div>';
     break;
    case 'amarillo':
     $color = "yellow";
     echo '<div style="background-color:'.$color.';width:100px;height:100px"></div>';
     break;
    case 'azul':
     $color = "blue";
     echo '<div style="background-color:'.$color.';width:100px;height:100px"></div>';
     break;
    case 'blanco':
     $color = "white";
     echo '<div style="background-color:'.$color.';width:100px;height:100px"></div>';
     break;
    case 'negro':
     $color = "black";
     echo '<div style="background-color:'.$color.';width:100px;height:100px"></div>';
     break;
    default:
     echo "Ese color no esta disponible, lo sentimos :(";
     break;
   }
  }else{
   echo "Por favor no deje el campo vacio.";
  }
 }
?>


Tip1: Podemos usar tambien alguna funcion como is_numeric() que comprueba si una variable es un numero o un string numerico.

Tip2: Tambien podriamos usar expresiones regulares en PHP, para hacer comparaciones o validar formularios, hay un tutorial dedicado a esto en este BLOG: http://www.arthusu.com.mx/2013/07/phpexpresiones-regulares-pcre.html

Tip3: Otra forma aunque no muy recomendable ya que se valida del lado del cliente, es utilizar INPUTS HTML5, para validar por ejemplo ya sean numeros de telefono, email, etc. Aunque como dije esto no es seguro, es mas seguro validar del lado del servidor, como hizo en su tutorial nuestro amigo rotceh: http://www.arthusu.com.mx/2013/10/porque-no-debes-validar-en-el-lado-del.html

Arrays

Los arrays puede contener varias piezas de informacion separada (ya sean numeros o cadenas), se estructura de forma clave-valor. Hay dos tipos de arrays: los que tienes indices numericos que tienen un numero en la clave del array, y los de indices asociativos que contienen una cadena en la clave del array. Veamos una tabla de ejemplo:

Tabla indices numericos:


Tabla indices asociativos:


En este caso para acceder al valor de un array por ejemplo Shinedown, en caso de que sea numerico seria de la siguiente manera:

$grupos_rock[1]; // accedemos de forma con indice numerico
$grupos_rock['S']; // accedemos de forma con indice asociativo

En este caso la variable $grupos_rock es un array.

PHP incluye varios arrays predefinidos llamados variables superglobales. Ellos son: $_GET, $_POST, $_REQUEST, $_SERVER, $_ENV, $_SESSION, $_COOKIE.

$_GET - Contiene informacion de alguna variable enviada por el metodo $_GET o por la URL
$_POST - Cotiene la informacion enviada desde algun formulario por el metodo $_POST o de manera Oculta (usando cabeceras)
$_REQUEST - Contiene informacion de los metodos $_GET, $_POST, $_COOKIE
$_SERVER - Contiene informacion acerca del servidor
$_ENV - Contiene informacion de variables de entorno
$_SESSION - Contiene informacion sobre las sesiones del usuario
$_COOKIE - Contiene informacion sobre las cookies del usuario

Un error muy comun al imprimir un array seria de manera que estamos usando entre comillas dobles (Ya que son las que interpretan nuestras variables, por que las simples la toman de manera literal). Es no encerrar entre llaves {} nuestro array, por ejemplo:



 <?php
 $grupos_rock = array("LP"=>"Linkin Park","S"=>"Shinedown","N"=>"Nirvana","MCR"=>"My Chemical Romance","FF"=>"Foo Figthers","TDG"=>"Three Days Grace","TK"=>"The Killers");
 echo "Uno de mis grupos de rock preferido es $grupos_rock['LP']";
?>


Esto daria un error como el siguiente:


La manera de corregirlo es encerrar con llaves el array:

 <?php
 $grupos_rock = array("LP"=>"Linkin Park","S"=>"Shinedown","N"=>"Nirvana","MCR"=>"My Chemical Romance","FF"=>"Foo Figthers","TDG"=>"Three Days Grace","TK"=>"The Killers");
 echo "Uno de mis grupos de rock preferido es {$grupos_rock['LP']}";
?>

Dando el resultado correcto o deseado que es valor de nuestro array:



Uno de mis grupos de rock preferido es Linkin Park

Crear un array

Crear un array no es nada del otro mundo, podemos crear un array definiendo elemento por elemento... por ejemplo:



En este caso para crear un array usamos los corchetes como clave ya sea asociativa o numerica (en caso de que sea numerica no es necesario agregar el numero ya va aumentando automaticamente)... Y para acceder usamos su $nombre_variable[clave_numerica] o $nombre_variable["clave_asociativa"] una cosa que debemos tener en cuenta es que si no comenzamos nuestro array con clave numerica desde 1 esta comenzara desde 0 automaticamente.

Como dijimos anteriormente en el caso anterior estabamos definiendo los arrays de elemento por elemento, pero se puede hacer de manera mas rapida y ordenada usando el constructor array().

En el codigo de arriba donde mostrabamos las llaves {} usabamos ese tipo de sintaxis para crear nuestro array con clave asociativa, creemoslo con clave numerica:




 <?php
 $grupos_rock = array(1=>"Linkin Park","Shinedown","Nirvana","My Chemical Romance","Foo Figthers","Three Days Grace","The Killers");
 echo "Uno de mis grupos de rock preferido es $grupos_rock[5]";
?>



Tambien podemos utilizar una funcion muy interesante como lo es range() que crea un array con un rango de elementos:

 
En este caso utilizamos la funcion print_r() para que imprima la informacion de manera que sea legible para humanos sobre una variable, esto pasa por que es un array ya que si usaramos echo solamente mostraria la palabra Array... En este caso podriamos recorrer el array mostrando valor por valor.

Accediendo a arrays de manera completa

Una manera de mostrar la clave y valor de un array es utilizar el constructor foreach() que proporciona un modo sencillo para iterar sobre arrays. Su sintaxis mas basica es:

foreach ($array as $valor){ // Hacer algo con $valor }

Un ejemplo, podriamos mostrar los meses usando un array:

Como puedes ver, esta es una manera de generar contenido dinamico de forma muy facil y tambien de mostrar los valores de un array, ahorrandonos codigo y haciendolo simple, como dijimos en los capitulos de seguridad en php "lo simple es bello" :D.

Arrays multidimensionales

Un array multidimensional es un array y dentro de el contiene otro array, esto es creado cuando tenemos mucha cantidad de informacion que agregar, y la queremos dividir por grupo, por ejemplo:



Como ves incluimos un array dentro de otro y accedemos a el de la misma manera, primero al array grupo dentro de el se encuentra otra llave que seria 0 para linkin park y 1 para shinedown...

Por que como deciamos anteriormente cuando no le damos la clave a un array comienza desde 0.


Tip1: Para contar los elementos de un array podemos utilizar la funcion count(), echo count($nombre_array); // $numero de elementos del array

Tip2: Con la funcion is_array() podemos comprobar si una variable es un array, de la siguiente manera: is_array($nombre_array).

Algunas cosas interesantes mas sobre arrays


Podemos crear un array utilizando alguna cadena junto con su separador, un ejemplo seria el siguiente:



Con la funcion explode() lo que hacemos es primero ingresarle un delimitador (en este caso - ) y luego la cadena (en este caso $usuarios_most) lo que nos crearia un array cortando valor a valor usando el delimitador.

La funcion inversa a explode seria implode() que une los elementos de un array en un string.

Tambien podemos ordenar nuestros arrays utilizando por ejemplo la funcion sort() ordena un array de menor a mayor. Ejemplo:

echo sort($nuestro_array);

La funcion shuffle() al contrario de la funcion sort() mezcla un array de manera aleatoria...

echo shuffle($nuestro_array);

Otro ejemplo es usar un array en un formulario de manera que podamos seleccionar multiples opciones y mostrarlas... obteniendo un array multidimensional:


Repeticiones for y while

Cuando accedimos a un array de manera completa utilizamos una repticion foreach. En este caso mostraremos el uso de las repeticiones o bucles for y while.

La sintaxis de la repeticion while es de la siguiente manera:


while(condicion) {//Hacer algo}

Que significa que mientras la condicion sea verdadera realice lo que esta entre las llaves. 
La sintaxis de la repeticion o bucle for es un poco mas complicada:

for (valor inicial, condicion, aumento o decremento ){//Hacer algo}

Esto significa algo como lo siguiente: para valor incial mientras la condicion se cumpla se repite hasta que deje de ser verdadera y esta va aumentando o decrementando con el paso de la repeticion.

Un ejemplo muy basico seria mostrar el numero de dias que tienes un mes, que por lo general son 30:



O tambien podriamos hacer lo mismo con el bucle while:


Ahora te estaras preguntando ¿Que diferencia hay, cual uso? Pues la experiencia revela que el bucle for se utiliza cuando sabes el numero de veces que quieres repetir determinada accion y el bucle while es utilizado cuando la condicion debe ser verdadera y no sabes el numero de veces que se tiene que repetir. Entonces solo te debes adaptar a esos dos tipos de ambientes.

Nota importante: En PHP tambien existe el bucle do...while



La diferencia de este bucle al de while es que esta es verificada al final de cada iteracion en lugar de al principio.

Hasta aqui terminamos la parte 2 de php espero que les haya gustado, nos vemos en la tercera parte, intente hacer esta parte lo mas corta posible para que no se les hiciera tan aburrido. Si les gusto dejen su comentario eso me ayuda a seguir publicando :P

No hay comentarios:

Publicar un comentario