POST

$_POST és un array associatiu de variables passades a l'script actual mitjançant el mètode HTTP POST quan s'utilitza application/x-www-form-urlencoded o multipart/form-data com a tipus de contingut HTTP a la sol·licitud.

Exemple

Suposa que en el servidor tenim aquest fitxer /test.php:

<?php
echo 'Hola ' . htmlspecialchars($_POST["name"]) . '!';
?>

Si l'usuari fés un POST curl -d "name=David" -X POST http://localhost:3000/test.php, el resultat seria "Hola David!".

ACTIVITAT

Modifica el fitxer test.php perquè mostri tot el que envia aquest post:

`curl -d "name=David&gender=male" -X POST http://localhost:3000/test.php`

Formulari HTML

Els usuaris normalment no utilitzen un terminal per transferir dades mitjançant curl (recorda que els programdors web si que l'utilitzem molt per treballar).

El que fan servir són págines web generades per un script PHP, que contenenen un formulari.

<FORM ACTION="test.php" METHOD="POST">
Si us plau, escriu el teu nom:<INPUT TYPE="text" NAME="name"><BR>
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>

<?php
echo 'Hola ' . htmlspecialchars($_POST["name"]) . '!';
echo 'El teu sexe és ' . htmlspecialchars($_POST["gender"]) . '!';

?>

Un formulari en HTML s’emmarca entre les etiquetes

i
. Per manipular aquest formulari s’utilitza l’atribut ACTION. L’atribut ACTION indica el programa que s’encarrega de manipular les dades, tasca que encomanareu a un codi dissenyat en llenguatge PHP. L’etiqueta
us permet fer servir dos mètodes per enviar informació: GET i POST. El mètode GET és molt útil en motors de cerca, però no ofereix gaire seguretat, ja que les dades que envia es poden veure en l’URL del navegador. El mètode POST és molt més segur, ja que quan el servidor detecta que el mètode de transacció d’informació és POST espera rebre dades immediatament sense fer servir l’URL, la qual cosa implica que aquestes dades no seran visibles en l’URL.

Com valora el PHP un formulari

En el moment d’enviar les dades des del formulari d’una pàgina HTML a un fitxer escrit en PHP s’ha de tenir en compte que l’atribut NAME emmagatzema el valor.

<HTML>
<head>
<title>Resposta a la petició de dades</title>
</head>
<body>
<H1>...Continuem amb l’exemple!</H1>
El teu nom és:
<?php
echo $_POST['nom'];
?>
</body>
</HTML>

En el moment en què s’envien dades del formulari HTML cap a un fitxer PHP, aquestes dades apareixeran dins d’un array superglobal amb tots els seus valors.

Exercici Mini Calculadora

Se desea realizar una calculadora de sólo SUMA, para ello tendremos dos inputs y un botón, cuando se aprete el botón deberá enviar enviar el formulario al server haciendo la operación y mostrándola. Exercici Formulari amb Vectors

Se desea realizar un formulario en el servidor que genere 10 inputs y un botón, a continuación el servidor recogerá todos los datos los mostrará y calculará la suma total.

Les matrius associatives i els formularis

Podeu utilitzar les matrius associatives $_POST i $_GET ; el seu ús, però, serà condicionat pel mètode utilitzat en el pas de dades en el codi HTML. Així, si en el codi HTMLel mètode és POST haureu de fer servir la matriu associativa $_POST; en canvi, si heu fet servir el mètode GET en el codi HTML, haureu de fer servir la matriu associativa $_GET.

Per accedir als valors emmagatzemats en les matrius associatives fareu servir l’atribut corresponent NAME de l’HTML com a índex de la matriu associativa.

No heu d’oblidar que el PHP és un llenguatge de programació que, entre altres coses, us permet utilitzar bucles. En el formulari següent es defineix una selecció múltiple, en què podreu marcar els navegadors que coneixeu.

<HTML>
<head>
<title>Un exemple amb un formulari</title>
</head>
<body>
<form action="seleccioMultiple.php" method="POST">
Nom: <input type="text" name="nom"><br>
Correu electrònic: <input type="text" name="email"> <br>
Navegadors que coneixes: <br>
<select name="navegadors[]" multiple>
<option value="Chrome">Chrome</option>
<option value="MozillaFirefox">Mozilla Firefox</option>
<option value="Safari">Safari</option>
<option value="Opera">Opera</option>
<option value="Lynx">Lynx</option>
</select><br>
<input type="submit" value="Envia" >
</form>
</body>
</HTML>

Aquí us trobareu amb un petit problema. Per recuperar els valors introduïts com a nom i correu electrònic no hi ha cap problema, la matriu $_POST us permetrà un recorregut buscant els valors emmagatzemats a nom iemail. Amb la selecció múltiple, però, sorgeix un petit problema. A diferència dels casos anteriors, ara navegadors pot contenir més d’un valor, com ho fareu per mostrar tots els valors per pantalla? La solució és utilitzar un bucle:

<?php
foreach ($_POST['navegadors'] as $opcio)
echo $opcio."\n";
?>

Un altre exemple:

<?php
if ($_POST) {
    echo '<pre>';
    //echo htmlspecialchars(print_r($_POST, true));
    print_r($_POST);
    print_r($_POST['personal']);
    print_r($_POST['personal']['nombre']);
    echo '</pre>';
}
?>
<form action="" method="post">
    Nombre:  <input type="text" name="personal[nombre]" /><br />
    Email:   <input type="text" name="personal[email]" /><br />
    Cerveza: <br />
    <select multiple name="cerveza[]">
        <option value="warthog">Warthog</option>
        <option value="guinness">Guinness</option>
        <option value="stuttgarter">Stuttgarter Schwabenbräu</option>
    </select><br />
    <input type="submit" value="¡enviarme!" />
</form>