Tu as plusieurs possibilités, qui ne s'excluent pas l'une l'autre :
- côté client, lors du submit du formulaire, en javascript, tu vérifies les champs, et tu n'envoies pas le formulaire au serveur tant que les champs à remplir ne sont pas remplis (note, en html5, sur les navigateurs récents, tu peux ajouter l'attribut "required" sur les inputs : un champs required vide empêchera l'envoi du formulaire).
- côté serveur, si un champs est rempli, tu as sa valeur dans une variable, en PHP, pour un form en méthode POST, tu as le champs dans $_POST[ "name_du_input" ]. Puisque tu réaffiches le même formulaire en cas d'erreur, il te suffit d'écrire, dans les champs du formulaire, la valeur du tableau post correspondante : <input name="name_du_input" value="<?=$_POST["name_du_input"] ?>" />
Bien sûr, je donne mon exemple en php pasque je suppose que c'est ce que tu fais, mais tu peux adapter le tout dans tous les langages serveurs.
Voilà, voilà 