dilluns, 18 de novembre del 2013

Formulari. PHP. Processar les dades.


El procés per tractar FORMULARIS fa necessari generalment programar dues pàgines : una per el disseny del formulari on entrarem les dades i una altra que procesa les dades carregades o introduides en el formulari. 

Un cop tenim l'estructura del document HTML, cal processar les dades en PHP.
  • PHP crea un array am les dades enviades anomenat $_REQUEST
  • L’índex és les etiquetes name de cada camp
  • El contingut és el que hem entrat a cada camp
Exemple:
$_REQUEST[‘nombre’]= dades introduïdes al camp ‘nombre’

ATENCIÓ: case sensitive. : És a dir, no és el mateix Nombre que nombre que NOMBRE. Ho hem d’escriure tal com hem definit en la primera pàgina.

Supossem que tenim el següent formulari:

<!DOCTYPE html>
<html lang=es>
<head> 

<meta charset="utf-8">
<title>Formulari d'entrada de dades</title>
</head>
<body>
<form method="post" action="pagina2.php">
Nom:
<input type="text" name="nombre">
<br>
<input type="submit" value="enviar">
</form>
</body>
</html>




Com es pot veure aquesta pàgina conté marques HTML.
L’etiqueta <form> i </form> ens pernet definir un formulari en una pàgina.
L’etiqueta FORM té dues propietats que cal inicialitzar obligatòriament: action i method.

La propietat action indica el nom de l’arxiu o pàgina que rebrà les dades ingressades per l’operador del formulari i que seran enviades al servidor quan es presioni el botó de submit
La propietat method indica com s’organitzen aquestes dades per enviar-les al servidor, i pot ser amb el mètode post o get. Normalment les dades s’envien amb el mètode post.

Per crear un camp de tipus text per l’ingrés del nom cal definir un objecte de tipus “text” i donar-li un nom a aquest objecte:


<input type="text" name="nombre">
La propietat type ens permet definir el tipus de control i la propietat name ens permet indicar el nom del control o camp.
Finalment el formulari té un botó de tipus submit.


<input type="submit" value="confirmar">
 

També en aquest cas tenim l’etiqueta input però la propietat type ens indica que es tracta d’un botó d’enviament de dades. En la propietat value estem indicant el texte que volem que apareixi en el botó. 

Ara necessitarem d’una pàgina amb un petit programa PHP que processi les dades ingressades en el formulari:

<!DOCTYPE html>
<html lang=es>
<head> 

<meta charset="utf-8">
<title>Captura de datos del form</title>
</head>
<body>
<?php
echo "El nom introduit és:";
echo $_REQUEST['nombre'];
?>
</body>
</html>


Per accedir a les dades en PHP s’utilitza un vector o array anomenat $_REQUEST .


L'índex de l’array és el nom del camp de texte que hem definit en el formulari. Atenció perquè és sensible a les majúscules i minúscules. És a dir, no és el mateix Nombre que nombre que NOMBRE. Ho hem d’escriure tal com hem definit en la primera pàgina.
En aquest exemple només mostrem per pantalla el valor ingressat en la primera pàgina echo $_REQUEST['nombre'];

Com hem vist en aquest exemple les dades s'enviaven pel mètode post, però també es poden enviar per get.

Diferències entre GET i  POST
Tant GET i POST crear una matriu (per exemple array (clau => valor, key2 => valor2, key3 => value3, ...)).

Aquesta matriu conté parells clau / valor, on les claus són els noms dels controls de formulari i els valors són les dades d'entrada de l'usuari.

Tant GET i POST són tractats com $ _GET i $ _POST. 

Aquests són superglobals, el que significa que sempre són accessibles, independentment d'abast - i es pot accedir a ells des de qualsevol funció, classe o arxiu sense haver de fer res especial.
$ _GET És una matriu de variables passades a l'script actual a través dels paràmetres d'URL.
$ _POST És un array de variables passades a l'script actual mitjançant el mètode HTTP POST.


La informació enviada des d'un formulari amb el mètode GET és visible per a tots (tots els noms i valors de les variables es mostren a la URL). 


GET també té límits en la quantitat d'informació a enviar. La limitació és d'uns 2000 caràcters. No obstant això, pel fet que les variables es mostren a la URL, és possible marcar la pàgina, paginar resultats etc.. Això pot ser útil en alguns casos.
GET pot ser utilitzat per enviar dades no sensibles. Per tant mai usarem GET per enviar contrasenyes etc..
La informació enviada des d'un formulari amb el mètode POST és invisible per als altres (tots els noms / valors estan integrats dins del cos de la petició HTTP) i no hi ha límits en la quantitat d'informació a enviar.
A més POST suporta funcions avançades com el suport per a l'entrada de diverses parts binari en pujar arxius al servidor.
Però, ja que les variables no es mostren a la URL, no és possible marcar la pàgina.


Processar les dades d'un camp tipus radio
Supossem el següent exemple. Tenim un formulari amb un camp radio amb dos valors:

<input type="radio" name="radio1" value="suma">sumar<br>
<input type="radio" name="radio1" value="resta">restar

En primer lloc perquè php/html entengui que el camp és el mateix ( i per tant deixi escollir una opció o una altra) en un radio button el name ha de ser el mateix
Al processar el formulari en l'array $_REQUEST , en cas d'haver agafar alguna de les dues opcions ( sumar o restar) guardarà el valor escollit, tenint en compte que guardarà el camp value. 
És a dir, si l'usuari ha escollit sumar l'array $_REQUEST contindrà:
$_REQUEST['radio1']="suma";
Els valors no podran ser tractats amb if diferents.

Exemple:

<!DOCTYPE html>
<html lang=es>
<head> 

<meta charset="utf-8">
<title>Formulari d'entrada de dades</title>
</head>
<body>
<form method="post" action="pagina2.php"> 

Ingrese primer valor:
<input type="text" name="valor1">
<br>
Ingrese segundo valor:
<input type="text" name="valor2">
<br>
<input type="radio" name="radio1" value="suma">sumar
<br>
<input type="radio" name="radio1" value="resta">restar
<br>
<input type="submit" name="operar">
</form>
</body>
</html>


La segona pàgina (pagina2.php)

<!DOCTYPE html>
<html lang=es>
<head> 

<meta charset="utf-8">
<title>Processar les dades</title>
</head>
<body>


<?php

if (isset($_REQUEST['radio1'])){
if ($_REQUEST['radio1']=="suma")
{
  $suma=$_REQUEST['valor1'] + $_REQUEST['valor2'];
  echo "La suma es:".$suma;
}
else
{
  if ($_REQUEST['radio1']=="resta")
  {
    $resta=$_REQUEST['valor1'] - $_REQUEST['valor2'];
    echo "La resta es:".$resta;
  }
}
}
else {
echo "L'usuari no ha introduit cap valor";}



?>
</body>
</html>



Processar les dades d'un camp tipus check-box

En els camps check-box s'actua diferent, ja que com permet escollir totes les opcions o cap, o les que l'usuari desitgi, el camp name , ha de ser obligatòriament diferent.


<input type="checkbox" name="check1">sumar
<br>
<input type="checkbox" name="check2">restar <br>

Si el checkbox no está seleccionat el formulari no crea l’entrada en el vector $_REQUEST.
Per saber si existeix una determinat component en el vector o array es pot utilitzat la funció isset. Aquesta funció retorna true si existeix i per tant, si el checkbox está seleccionat.
Cada valor s'haurà de tractar amb un if per separat.

Exemple:


<!DOCTYPE html>

<html lang=es>
<head> 

<meta charset="utf-8">
<title>Formulari d'entrada de dades</title>
</head>
<body>
<form method="post" action="pagina2.php"> 

Ingrese primer valor:
<input type="text" name="valor1">
<br>
Ingrese segundo valor:
<input type="text" name="valor2">
<br>
<input type="checkbox" name="checkbox1" value="suma">sumar
<br>
<input type="checkbox" name="checkbox2" value="resta">restar
<br>
<input type="submit" name="operar">
</form>
</body>
</html>


La segona pàgina (pagina2.php)

<!DOCTYPE html>
<html lang=es>
<head> 

<meta charset="utf-8">
<title>Processar les dades</title>
</head>
<body>




if (isset($_REQUEST['checkbox1']) || isset($_REQUEST['checkbox2'])){



if (isset($_REQUEST['checkbox1'])){
  if ($_REQUEST['checkbox1']=="suma")
  {
 
  $suma=$_REQUEST['valor1'] + $_REQUEST['valor2'];
  echo "La suma es:".$suma;
  }
}

if (isset($_REQUEST['checkbox2'])){
  if ($_REQUEST['checkbox2']=="resta")
  {

  $resta=$_REQUEST['valor1'] - $_REQUEST['valor2'];
    echo "La resta es:".$resta;
  }
}
}
else {
echo "L'usuari no ha introduit cap valor";
}

?>
</body>
</html>


Processar les dades d'un camp tipus select


Cap comentari:

Publica un comentari a l'entrada