Potresti passarli in sessione. Nella pagina di invio del form (quella di conferma, insomma):
PHP:
<?php
session_start();
if ('POST' === $_SERVER['REQUEST_METHOD']) {
$name = isset($_POST['name']) ? trim($_POST['name']) : '';
$surname = isset($_POST['surname']) ? trim($_POST['surname']) : '';
// ...
$_SESSION['data'] = array(
'name' => $name,
'surname' => $surname,
// ...
);
echo <<<EOF
<h1>Riepilogo dati</h1>
<p>Nome: {$name}</p>
<p>Cognome: {$surname}</p>
<form action="final.php" method="post">
<input type="submit" value="Conferma informazioni" />
</form>
EOF;
} else {
echo <<<EOF
<form action="{$_SERVER['PHP_SELF']}" method="post">
<p>
<label>Nome:</label>
<input type="text" name="name" />
</p>
<p>
<label>Cognome:</label>
<input type="text" name="surname" />
</p>
<input type="submit" value="Invia dati" />
</form>
EOF;
}
?>
E nella pagina di conferma:
PHP:
<?php
session_start();
// l'utente non arriva dalla pagina di conferma
if (!isset($_SESSION['data'])) {
header('Location: form.php');
exit();
}
// qui fai quello che devi fare con i dati (es. inserimento nel database)
// ...
?>
Se ti stai chiedendo perché ho usato le sessioni invece di campi nascosti o in sola lettura, è perché questi ultimi possono comunque essere manipolati tramite Javascript o plugin per il browser (es. Firebug).
Inoltre potevi fare tutto nella stessa pagina PHP, usando due bottoni di invio con nomi diversi, ma il codice poi diventa leggermente più complicato. Se ci vuoi provare fammi sapere e ti mostro come.