RECUPERAR DADES DE FORMULARIS. VARIABLES $_REQUEST, $_GET i $_POST

 

Quan un usuari prem el botó enviar d'un formulari, la informació que contenien els seus camps és enviada a una adreça URL des d'on haurem de recuperar-la per tractar-la d'alguna manera. Per exemple, si fa una compra, haurem de recuperar les dades per a completar el procés de pagament. La informació del formulari "viatja" emmagatzemada en variables que podrem recuperar i utilitzar mitjançant PHP.

La recuperació de variables amb PHP és bastant fàcil, ja siguin dades d'un formulari enviat pel mètode post (paràmetres no visibles) o pel mètode get (paràmetres a la URL si visibles). Primer de tot cal aclarir que hi ha diversos mètodes per recuperar variables amb PHP. Per als formularis tenim els mètodes GET, POST, i REQUEST.

 

RECUPERAR VARIABLES AMB GET

GET ens permet recuperar paràmetres des de la URL o des formularis enviats amb el mètode GET.

Escriu aquest codi i guardeu amb un nom de fitxer com ejemplo1.html. A continuació, puja el fitxer al servidor, introdueix un nom en el camp del formulari i visualitza el resultat.

<Form name = mètode de "Formulari" = "get" action = "exempleGet.php">

       Nom: <input type = "text" name = valor "nom" = "">

       <Input type = "submit" />

</Form>

Abans de prémer sobre el botó enviar, hem de crear el fitxer ejemploGet.php que és l'indicat en el formulari per a l'enviament de les dades.

Escriu aquest codi i guardeu amb un nom de fitxer com ejemploGet.php. A continuació, puja el fitxer al servidor a la mateixa carpeta on vas pujar el ejemplo1.html

<? Php // Exemple

       $nom=$_GET['nom'];

       echo $nom;

?>

Fixa't que la instrucció $ _GET ['nombreDelParametro'] serveix per recuperar la informació rebuda.

Un cop completem el pas anterior, premerem sobre el botó enviar l'ejemplo1.html i veurem una pantalla com a la següent.

Anem a explicar el procés que ha tingut lloc.

El primer arxiu és un document HTML. Per ser més correctes, hauríem d'haver escrit d'aquesta manera:

<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 Transitional // EN" "http://www.w3.org/TR/html4/loose.dtd">

<Html>

<Head>

<Títol> Example </ title>

</ Head>

       <Body>

              <Form name = mètode de "Formulari" = "get" action = "ejemploGet.php">

              Nom: <input type = "text" name = valor "nom" = "">

              <Input type = "submit" />

             </ Form>

       </ Body>

</ Html>

No obstant això, vam comprovar que els navegadors tracten d'interpretar i mostrar el resultat d'un codi HTML (o PHP) fins i tot quan la sintaxi o la definició del document no és del tot correcta. Això hem de conèixer-lo, però recomanem que sempre es tracti de ser el més correctes possibles a l'hora d'escriure codi web.

Veiem que hem definit un formulari en la capçalera hem posat que el mètode d'enviament de les dades va ser el mètode get i que l'URL de destinació serà ejemploGet.php. Al seu torn, el formulari té un camp l'atribut name és "nom". Aquest atribut defineix el nom de la variable que anem a poder recuperar a l'URL de destinació.

A l'arxiu php hem inclòs la línia $ nom = $ _GET ['nom']; que vol dir que creem una variable php anomenada $ nom on emmagatzemem la informació del camp 'nom' que rep la URL a través del mètode get provinent del formulari. Si haguéssim altres camps que haguéssim definit com cognoms, telèfon, edat, el tractament seria similar. Per exemple:

$cognoms=$_GET['cognoms'];

$telefon=$_GET['cel·lular'];

$edatPersona=$_GET['edat'];

Fixa't que una cosa és la variable en la qual emmagatzemem la informació recuperada, i una altra cosa és el nom del camp del formulari d'on prové. Per exemple a $cognoms = $_GET ['cognoms']; coincideixen el nom de la variable que utilitzem amb el nom del camp del formulari. No obstant això, en $telefon = $_GET['cel·lular']; no coincideixen. En aquest cas, el camp que prové del formulari es diu 'cel·lular' mentre que la informació que vingui en aquest camp l'emmagatzemem en una variable a la qual hem anomenat $telefon. Finalment, en $edatPersona= $_GET['edat']; estem emmagatzemant en una variable a la qual hem anomenat $ edadPersona la informació provinent d'un camp del formulari anomenat 'edat'.

Sovint els noms de les variables i dels camps del formulari es fan coincidir, però en altres ocasions no. Això queda a elecció del programador.

Com podem observar, recuperar dades enviades per un formulari amb el mètode GET és bastant simple usant PHP.

 

EXERCICI RESOLT Nº 1

Dissenyar un formulari web que demani l'altura i el diàmetre d'un cilindre en metres. Un cop l'usuari introdueixi les dades i premi el botó calcular, s'ha de calcular el volum del cilindre i mostrar el resultat al navegador.

 

SOLUCIÓ

La solució esquematitzada en pseudocodi és la següent:

1. Inici [Exemple en pseudocodi

2. Mostra "Introduïu el diàmetre, en metres": Demanar D 

3. Mostrar "Introduïu l'altura, en metres": Demanar H 

4. R = D / 2: Pi = 3,141593

5. V = Pi * (R ^ 2) * H

6. Mostrar "El volum del cilindre és de", V, "metres cúbics"

 7. Fi

 

Esquematitzar la solució en pseudocodi és una bona idea abans de realitzar la programació, ja que ens permet definir conceptualment com va a ser el nostre codi abans de escriure-ho. És sobretot adequat per a persones que s'estan iniciant en la programació.

En primer lloc, crearem l'arxiu html amb el formulari.

<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 Transitional // EN" "http://www.w3.org/TR/html4/loose.dtd">

<Html>

<Head>

<Títol> Example aprenderaprogramar.com </title>

<Charset meta = "UTF-8">

</Head>

       <Body>

              <Form name = mètode "formularioDatos" = "get" action = "ejemploGet1.php">

              <P> CÀLCUL DEL VOLUM D'UN CILINDRE </p>

             <br/>

             Introdueixi el diàmetre en metres: <input type = "text" name = "diam" value = "">

              <br/>

             Introduïu L'Altura bany metres: <input type = "text" name = valor "alçària" = "">

              <br/>

             <= Valor d'entrada tipus "Calcular" = "submit" />

             </Form>

       </Body>

</Html>

 

D'altra banda, crearem l'arxiu php amb el tractament de dades:

<? Php // Exemple aprenderaprogramar.com

       $diàmetre=$_GET['diam'];

       $alçada=$_GET['alçària'];

       $=$radi Diàmetre/2;

       Els $=3.141593;

       $volum=$pi*$radi*$radi*$altura;

       echo "<br/> El volum del cilindre és de". $volum. "Metres cúbics";

?>

Fixa't que hem escrit la potència del radi com $radi*$radi. En altres llenguatges existeix l'operador de exponenciació, però en php aquesta operació s'ha de realitzar recorrent a una funció matemàtica. Aquesta funció l'estudiarem en un altre moment.

Finalment obtenim un resultat. Fes proves introduint com a valors de diàmetre i altura 2,15 i 1,75 en comptes de 2.15 i 1.75. Possiblement no obtinguis un resultat adequat si fas servir les comes, ja que en PHP el separador de la part decimal d'un nombre és el punt.

 

EXERCICI RESOLT Nº 2

Dissenyar un desenvolupament web simple amb php que demani a l'usuari el preu de tres productes en tres establiments diferents denominats "Botiga 1", "Botiga 2" i "Botiga 3". Un cop s'introdueixi aquesta informació s'ha de calcular i mostrar el preu mitjà del producte.

 

SOLUCIÓ

La solució esquematitzada en pseudocodi és la següent:

1. Inici [Exemple en pseudocodi - aprenderaprogramar.com]

2. Mostra "Introduïu el preu del producte en l'establiment número 1, en euros": Demanar Precio1

3. Mostrar "Introduïu el preu del producte en l'establiment número 2, en euros": Demanar Precio2

4. Mostra "Introduïu el preu del producte en l'establiment número 3, en euros": Demanar Precio3

5. Mitjana = (Precio1 + Precio2 + Precio3) / 3

6. Mostrar "El preu mitjà del producte és", Mitjana, "euros" 

7. Fi

 

<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 Transitional // EN" "http://www.w3.org/TR/html4/loose.dtd">

<Html>

<Head>

<Títol> Example aprenderaprogramar.com </title>

<Charset meta = "UTF-8">

</ Head>

       <Body>

             <Form name = mètode "formularioDatos" = "get" action = "ejemploGet2.php">

             <P> CÀLCUL DEL PREU MITJÀ D'UN PRODUCTE </p>

             <br/>

             Introduïu el preu del producte en l'establiment número 1, en euros: <input type = "text" name = "precio1" value = "">

             <br/>

             Introduïu el preu del producte en l'establiment número 1, en euros: <input type = "text" name = "precio2" value = "">

             <br/>

             Introduïu el preu del producte en l'establiment número 3, en euros: <input type = "text" name = "precio3" value = "">

             <br/>

             <= Valor d'entrada tipus "Calcular" = "submit" />

             </ Form>

       </ Body>

</ Html>

És possible que durant el desenvolupament del curs et trobis visualitzacions d'aquest tipus, on podràs comprovar que els accents o titlles no es veuen bé.

Recordar-te que la solució a això és, quan estem treballant amb Notepad ++, triar al menú Format l'opció "Codificar en UTF-8 sense BOM". En cas que per error l'arxiu estigui en un altre format, tria l'opció "Convertir en UTF-8 sense BOM" per deixar correctament la codificació de l'arxiu. També pot ser necessari introduir l'etiqueta: <meta charset = "utf-8"> entre les etiquetes <head> ... </ head> per aconseguir que la visualització sigui correcta.

D'altra banda necessitem l'arxiu php per mostrar els resultats. El codi seria:

<? Php // Exemple aprenderaprogramar.com

$preu1=$_GET ['preu1'];

$preu2=$_GET ['preu2'];

$preu3=$_GET ['preu3'];

$mitjana=($preu1+$preu2+$preu3)/3;

echo "<br/> DADES REBUDES";

echo "<br/> Preu producte establiment 1:". $preu1. "Euros";

echo "<br/> Preu producte establiment 2:". $preu2. "Euros";

echo "<br/> Preu producte establiment 3:". $preu3. "Euros";

echo "<br/> El preu mitjà del producte és de". $mitjana." Euros";

?>

 

¿DES ON RECUPEREN LES DADES?

Si has fet l'exercici anterior hauràs comprovat que la URL un cop es prem el botó d'enviament del formulari és d'aquest tipus:

Aquí podem comprovar que les dades estan a la URL. Ara bé, les dades venien del formulari. Des d'on s'estan recuperant les dades? Per respondre a aquesta pregunta escriu una URL d'aquest tipus:

  DADES REBUDES

  Preu producte establiment 1: 10 euros

  Preu producte establiment 2: 15 euros

  Preu producte establiment 2: 20 euros

  El preu mitjà del producte és de 15 euros

Arribem a una conclusió: les dades passen del formulari a la URL, i des de la URL són recuperats per l'intèrpret PHP usant $_GET ['nombreDelParametro']. Per tant les dades no vénen directament del formulari, sinó que són recuperats a través de la URL.

 

EXERCICI PROPOSAT

Dissenyar un desenvolupament web simple amb PHP que doni resposta a la necessitat que es planteja a continuació.

Un operari d'una fàbrica rep de tant en tant un dipòsit cilíndric de dimensions variables, que ha d'omplir d'oli a través d'una presa amb cert cabal disponible. Es vol crear una aplicació web que li indiqui quant temps transcorrerà fins l'ompliment del dipòsit. El cabal disponible es considera estable per als temps que triguen els omplerts de dipòsits i el facilita el propi operari, aportant la dada en litres per minut.

 

 

ORIENTACIÓ PER A LA SOLUCIÓ

La solució esquematitzada en pseudocodi és la següent:

 1. Inici

2. Mostra "Introduïu el cabal disponible en litres/minut": Demanar Q

3. Mostrar "Introduïu el diàmetre del dipòsit, en metres": Demanar D

4. Mostrar "Introduïu l'alçada del dipòsit, en metres": Demanar H

5. La majoria = 3,141593

6. R = D/2

7. V = Pi*(R^2)*H: Vlitros = V * 1000

8. tminutos = Vlitros / Q

9. Mostrar "El temps que transcorrerà fins l'ompliment del dipòsit és de", tminutos, "minuts"

10. Fi

 

Realitza l'exercici i comprova els resultats. Perquè tinguis una referència, si el cabal disponible és de 125 litres per minut i els valors de diàmetre i altura del cilindre són 2.15 i 1.75, el resultat que has obtenir és que el dipòsit triga a omplir-se serà d'aproximadament 50 minuts.