L'array superglobale $_POST in PHP

POST è un array superglobale che viene utilizzato per inviare informazioni al server, solo che a differenza di $_GET le informazioni scambiate con il server non sono in chiaro nell'url e non possono quindi essere modificate dall'utente, risultando così più sicure.
Indice
Esempio di sintassi con $_POST in php:
<?php
$username = $_POST["username"];
$password = $_POST["password"];
echo "L'username è $username e la password è $password"
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="post.php" method="POST">
<input type="text" name="username" placeholder="Username *">
<input type="password" name="password" placeholder="Password *">
<input type="submit" value="Invia">
</form>
</body>
</html>
Come abbiamo detto in precedenza, tramite _POST i dati NON vengono aggiunti all'URL. In questo esempio, per poter generare gli array con chiave username e password e valori Donato e miapassw.

La funzione extract($_POST)
Con la funzione extract($_POST) possiamo estrarre i valori dell'array $_POST e creare delle variabili con i relativi parametri chiave-valore.
Facciamo un esempio della funzione extract($_POST) che estrae i valori all'interno di un form su una pagina web.
<?php
extract($_POST);
var_dump($_POST);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="get.php" method="POST">
<input type="text" name="nome" placeholder="Nome *">
<input type="text" name="cognome" placeholder="Cognome *">
<input type="submit" value="Invia">
</form>
</body>
</html>
Misure di sicurezza minime.
E' possibile che un utente malintenzionato, possa lanciare del codice malevolo che PHP potrebbe eseguire. Facciamo un esempio inserendo un semplice alert javascript all'interno del form:
<?php
if(isset($_POST['username'])){
echo $_POST['username'];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="post.php" method="POST">
<input type="text" name="username" placeholder="Username *">
<input type="password" name="password" placeholder="Password *">
<input type="submit" value="Invia">
</form>
</body>
</html>

Per evitare che venga passato in output quello che viene passato dagli utenti in input, possiamo utilizzare la funzione htmlspecialchars()
<?php
if(isset($_POST['username'])){
$usernameClean = htmlspecialchars($_POST['nome']);
echo $usernameClean;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="post.php" method="POST">
<input type="text" name="username" placeholder="Username *">
<input type="password" name="password" placeholder="Password *">
<input type="submit" value="Invia">
</form>
</body>
</html>

In questo modo, ci assicuriamo che i tag di apertura e chiusura vengano convertiti in entità html e quindi il codice non viene eseguito.