RECUPERAR DADES DEL FORMULARI. $_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.Una de les formes de recuperació consisteix a usar $ _POST.

 

RECUPERAR VARIABLES AMB POST

POST ens permet recuperar dades enviades des formularis amb el mètode POST.

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

<Form name = "Formulari" method = "post" action = "ejemploPost.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 ejemploPost.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 ejemploPost.php. A continuació, puja el fitxer al servidor a la mateixa carpeta on vas pujar el fitxer html.

<? Php

$nom=$_POST['nom'];

echo $nom;

?>

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 aprendreaprogramar.com </ title>

<Charset meta = "UTF-8">

</ Head>

<Body>

<Form name = "Formulari" method = "post" action = "ejemploPost.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 post i que l'URL de destinació serà ejemploPost.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=$_POST['nom']; que vol dir que creem una variable php anomenada $ nom on emmagatzemem la informació del camp 'nom' a través del mètode post provinent del formulari. Si haguéssim altres camps que haguéssim definit com cognoms, telèfon, edat, el tractament seria similar. Per exemple:

$cognoms=$_POST['cognoms'];

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

$edatPersona=$_POST['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=$_POST['cognoms']; coincideixen el nom de la variable que utilitzem amb el nom del camp del formulari. No obstant això, en $telefon=$_POST['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 $ telèfon.

Finalment, en $edatPersona=$_POST['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 POST é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

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 </ title>

<Charset meta = "UTF-8">

</ Head>

<Body>

<Form name = mètode "formularioDatos" = "post" action = "ejemploPost1.php">

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

<br/>

Introduïu d'el diàmetre bany metres: <input type = "text" name = valor "diam" = "">

<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=$_POST['diam'];

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

$=$radi Diametre/2;

Els $=3.141593;

$volum=$pi*$radi*$radi*$alçada;

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

?>

Fixa't que hem escrit la potència del radi com $radi*$radio. 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

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 </ title>

<Charset meta = "UTF-8">

</ Head>

<Body>

<Form name = mètode "formularioDatos" = "post" action = "ejemploPost2.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.

<? Php // Exemple aprenderaprogramar.com

$preu1=$_POST['preu1'];

$preu2=$_POST['preu2'];

$preu3=$_POST['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 2:". $preu3. "Euros <br/>";

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

?>

 

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.