Il fatto se cliccando back i campi rimangano compilati o meno dipende solo ed esclusivamente dal browser, io se mi serve una funzionalità del genere, mi scrivo una funzione display_form, che prende come parametro un array di valori, e poi uso del codice tipo questo
codice:
function form_commento($data = array()) { ?>
<form name="comment" method="post" action="<?=text2html($_SERVER['REQUEST_URI'])?>">
Titolo:
<input type="text" name="titolo" maxlength="50" value="<?=$data['titolo']?>">
</p>
<textarea id="commento" name="commento" wrap="VIRTUAL" cols="60" rows="7"><?=$data['commento']?></textarea>
</p>
Firma:
<input type="text" name="firma" maxlength="30" value="<?=$data['firma']?>">
(lasciare vuoto per un commento anonimo)
</p>
<input name="invia" type="submit" id="invia" value="Invia commento">
<input type="reset" name="Submit3" value="Reimposta">
</p>
</form>
<?
} // fine form commento
?>
quando vuoi stampare il form la chiami senza parametri così il form risulta vuoto, mentre nella pagina che riceve il form (io di solito uso lo stesso script), fai le verifiche sui dati e se i dati sono errati richiami la funzione con l'array $_POST come parametro e i campi saranno di nuovo compilati con i dati immessi dall'utente.