yo lo hago de esta forma:
hago un include con el codigo de la validacion en la pagina donde esta el formulario asi:
Código PHP:
if (isset($_POST['tu_formulario'])) include ('codigo_validacion.php');
tambien dejo el 'action' del formulario en blanco para que cargue en la misma pagina.
en la pagina 'codigo_validacion.php' hago varias cosas:
1- hago un header a la pagina de el formulario si se muestra sola. esto lo hago con un codigo de seguridad al azar que pongo en la pagina donde esta el formulario (eje.
$codigo_de_seg = 'dktifje734nrhfh4';, y luego en la pagina 'codigo_validacion.php' coloco en header:
Código PHP:
if($codigo_de_seg != 'dktifje734nrhfh4') header('Location: forma.php');
2- verifico si el formulario ha sido enviado
3- valido los campos individuales, dependiendo del caso:
Código PHP:
if (isset($_POST['tu_formulario'])) {
//si el campo 1 esta vacio
if (empty($_POST['campo_1'])) $error = "El campo 1 esta vacío";
//si el campo 1 tiene mas de 200 caracteres
if (strlen($_POST['campo_1']) > 200) $error = "El campo 1 tiene mas de 200 caracteres";
//etcetera...
}
Luego el error lo muestro en la pagina del formulacio asi:
Código PHP:
if(isset($error) && !empty($error)) echo $error;
Esto es basicamente lo que hago, aunque tambien trato de acomodar todas las validaciones juntas para facil acceso y uso CSS para darle es aspecto que quiera al error.
Tambien es una buena idea usar Javascript si puedes para validar tambien del lado del cliente y asi no tener que recargar la pagina cada vez. Si tienes los dos tipos de validaciones no tienes el problema de que algun usuario no tenga el JS habilitado.
Saludos.