Lo ideal sería que la comprobación la hicieras mediante JavaScript (Ajax) antes de enviar el formulario. Y si todo está correcto, que lo envíe. Eso si, quien no utilice javascript, tendrá que volver a rellenar los datos.
La otra idea, si no quieres pasar los parámetros por get (por si hay contraseñas por el medio), es: si el nombre de usuario ya existe, recoge todos datos igualmente y devuélvelos.
El ejemplo:
Código PHP:
$usuario = $_POST['nombre'];
$campo2 = $_POST['campo2'];
$campo3 = $_POST['campo3'];
// aquí la conexión a base de datos y comprobación
// si el usuario ya existe... devolvemos los datos (menos datos privados como la contraseña o el e-mail, claro)
header('Location: /form.php?error=yaexiste&campo2='.$campo2.'&campo3='.$campo3);
// si todo va bien continuamos con el registro
Y en el formulario...
Código PHP:
<?php
switch( @$_GET['error'] )
{
case 'yaexiste':
$campo2 = $_GET['campo2'];
$campo3 = $_GET['campo3'];
// etc
break;
}
?>
<form action="/enviar.php" method="post">
<input type="text" name="usuario" />
<input type="text" name="campo2" value="<?php echo $campo2; ?>" />
<input type="text" name="campo3" value="<?php echo $campo3; ?>" />
</form>
De esta manera devolvemos los valores a los campos, aunque repito: Mucho mejor con JavaScript y Ajax. Más sencillo, más limpio y por tanto más eficiente. La pega, usuarios que no lo tengan (claro que estos siempre podrán volver a rellenar los campos de nuevo...)
Espero haberte ayudado. Un saludo.