In questo articolo vedremo come possiamo conservare i valori inviati in un form dopo un redirect con PHP.
Salviamo i campi ed i valori del form come array associativo in una variabile della sessione corrente.
session_start();
if(count($_POST) > 0) {
$form_data = [];
foreach($_POST as $key => $value) {
$form_data[$key] = $value;
}
$_SESSION['form_data'] = $form_data;
}
// Elaborazione della richiesta
// Redirect
header('Location: https://site.tld/contact');
exit;
Quindi creiamo una funzione che reperisca e mostri un campo specifico.
function old($key) {
if(isset($_SESSION['form_data'][$key])) {
echo htmlspecialchars($_SESSION['form_data'][$key]);
}
}
Possiamo infine usare tale funzione nella pagina che contiene il form.
<?php
session_start();
require_once 'lib/funcs.php';
?>
<form action="send-contact.php" method="post" novalidate>
<div>
<label for="name">Name</label>
<input type="text" name="name" id="name" value="<?php old('name'); ?>">
</div>
<div>
<label for="email">E-mail</label>
<input type="email" name="email" id="email" value="<?php old('email'); ?>">
</div>
<div>
<label for="message">Message</label>
<textarea name="message" id="message"><?php old('message'); ?></textarea>
</div>
<p><input type="submit" value="Send"></p>
</form>