RECUPERAR DADES DE FORMULARI. $_REQUEST

 

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 $ _REQUEST.

 

 

RECUPERAR VARIABLES AMB REQUEST

REQUEST ens permet capturar variables enviades des formularis amb els mètodes GET o POST. Anem a veure dos exemples de formularis (ejemplo1.html i ejemplo2.html), que en un cas s'enviaran usant GET i en un altre usant POST. Tots dos formularis enviaran la informació (action) a una pàgina comuna des d'on recuperarem les dades usant $ _REQUEST.

El codi dels arxius html seria el següent per ejemplo1.html i ejemplo2.html. Escriu el codi en un editor de text com Notepad++ i visualízalos al navegador:

<Form nom = "Formulari" mètode = "obtenir" una acció = "ejemploRequest.php" >

Nom: <input tipus = "text" nom = "nom" valor = "">

<Input tipus = "submit" />

</Form>


 

<Form nom = "Formulari" mètode = "post" acció = "ejemploRequest.php" >

Nom: <input tipus = "text" nom = "nom" valor = "" >

<Input tipus = "submit" />

</Form>

 

Com podem observar, el ejemplo1.html envia les dades per GET mentre que el ejemplo2.html envia les dades per POST. Ara bé, l'acció o destinació on s'enviaran les dades és la mateixa en els dos casos, la direcció exempleRequest.php.

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

<? Php // Exemple

$nom=$_REQUEST['nom'];

echo $nom;

?>

A continuació, observa el resultat obtingut en introduir el nom tant al ejemplo1.html com en el ejemplo2.html, i veuràs que és el mateix.

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>

<Meta charset = "utf-8">

</ Head>

<Body>

<Form nom = "Formulari" mètode = "obtenir" una acció = "ejemploRequest.php" >

Nom: <input tipus = "text" nom = "nom" valor = "" >

<Input tipus = "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à ejemploRequest.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 = $ _REQUEST ['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 =$_REQUEST['cognoms'];

$telefon=$_REQUEST Telefon['cel·lular'];

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

 

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. L'enviament de dades s'ha de fer per GET i la recuperació amb REQUEST.

 

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ó. Crearem l'arxiu html:

<! 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>

<Meta charset = "utf-8">

</Head>

<Body>

<Form nom = "formularioDatos" mètode = "obtenir" una acció = "ejemploRequest1.php" >

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

<br/>

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

<br/>

Introduïu L'Altura bany metres: <input tipus = "text" nom = "alçària" value = "" >

<br/>

<Input valor = "Calcular" tipus = "submit" />

</Form>

</Body>

</Html>

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

<? Php // Exemple aprenderaprogramar.com

$diametre=$_REQUEST['diam'];

$alçada=$_REQUEST['alçaria'];

$radi=$Radio Diametre/2;

Els $ = 3.141593 ;

$volum=$Pi*$radi*radio*$altura;

echo "<br/> & nbsp; 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. L'enviament de dades s'ha de fer per POST i la recuperació amb REQUEST.

 

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 = (Preu1+Preu2+Preu3)/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>

<Meta charset = "utf-8">

</Head>

<Body>

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

<Input valor = "Calcular" tipus = "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

$preu1=$_REQUEST['preu1'];

$preu2=$_ REQUEST['preu2'];

$preu3=$_ REQUEST['preu3'];

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

echo "<br/> & nbsp; DADES rebuts";

echo "<br/> & nbsp; Preu producte establiment 1:" . $preu1."euros" ;

echo "<br/> & nbsp; Preu producte establiment 2:" . $preu2."euros" ;

echo "<br/> & nbsp; Preu producte establiment 2:" . $preu3."euros <br/>" ;

echo "<br/> & nbsp; 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: Vlitres=V*1000

8. tminuts=Vlitres/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 losvalores 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.

Per comprovar si les teves respostes i codi són correctes pots consultar als fòrums aprenderaprogramar.com.

 

RESUM DE LES DIFERÈNCIES ENTRE $ GET, $ POST I $ REQUEST

MÈTODE

CONCEPTE

OBSERVACIONS

ACONSEGUEIXI

GET porta les dades de manera "visible" al client (navegador web). El mitjà d'enviament és la URL.Per recollir les dades que arriben a la url s'usa $_GET.

Les dades són visibles per la URL, per exemple:

www.aprenderaprogramar.com/

action.php? nom = pedro & apellidos1 = Gomez

POSTE

POST consisteix en dades "ocults" (perquè el client no els veu) enviats per un formulari el mètode d'enviament és post. És ideal per a formularis. Per recollir les dades que arriben per aquest mètode s'usa $_POST.

L'avantatge d'usar POST és que aquestes dades no són visibles a l'usuari de la web. En el cas d'usar get, el propi usuari podria modificar la URL escrivint diferents paràmetres als reals en el seu navegador, donant lloc a que la informació tractada no sigui la prevista.

SOL·LICITUD

No és un mètode d'enviament pròpiament dit, és a dir, no podem posar en un formulari HTML que l'method sigui REQUEST. Amb la variable $_REQUEST recuperarem les dades dels formularis enviats tant per GET com per POST.

L'avantatge principal d'aquesta manera de recuperar les dades d'un formulari és que no hem de saber amb quin mètode va ser enviat. El desavantatge principal, com veurem en el següent exemple, és que no podrem diferenciar una variable enviada per GET o per POST.

Ara ens podem estar preguntat: Què passaria si envio una variable nom amb un formulari per mètode post i més en la pàgina de recuperació de dades també està definida aquesta variable a la url i obtinc dit variable amb $ _REQUEST? Quin em tornaria?

Doncs bé, per contestar aquesta qüestió plantegem el següent exercici.

Escriu aquest codi i guardeu amb un nom de fitxer com ejemploPostGetRequest.html. A continuació, puja el fitxer al servidor.

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

<Html>

<Head>

<Títol> Example </ title>

<Meta charset = "utf-8">

</ Head>

<Body>

<Form nom = "formularioDatos" mètode = "post" acció = "ejemploGetPostRequest.php? nom = pepito" >

Introdueixi el seu nom: <input tipus = "text" nom = "nom" valor = "" >

<br/>

<Input valor = "Enviar" tipus = "submit" />

</Form>

</Body>

</Html>

Introduirem un nom diferent a pepito, amb el que en la pàgina de recuperació de dades, tindrem dos valors per a 'nom'. I ara comprovarem quin ens retorna $ _REQUEST ['nom']. Per això escriu aquest codi i guardeu amb un nom de fitxer com ejemploPostGetRequest.php. A continuació, puja el fitxer al servidor a la mateixa carpeta on vas pujar el ejemploPostGetRequest.html

<? Php // Exemple

echo "nom=" . $_REQUEST['nom'];

?>

Com podem observar, el valor que pren $_REQUEST és primer el valor enviat per POST i després l'enviat per GET (si no vingués en POST). Després, com hem observat, $_REQUEST dóna prioritat als valors enviats per POST abans que als enviats per GET.