Ну а вообще - говнокод. Так не делают давным давно.
после
header("Location: ".$_SERVER['PHP_SELF']);
полезно добавить
exit;
После
if(isset($_POST['user'], $_POST['pass'])){
try{
// проверки. Если что-то не понравилось то в любом месте
if($something_wrong)
throw new Exception('Жалоба что не понравилось');
// иначе flow катится как обычно до записи и редиректа с Exit'ом
}
catch(Exception $e) {
echo $e->getMessage();
}
Одно только неясно - зачленом вам pdo в таком гавнокоде.
Обработку прерывания можно сделать системной, или классовой. Но самое простое это трай-катч. А чтобы собирать свои ошибки и рендерить красиво, делается расширения Exception и там все дописывается, как правило __toString() делается свой. Или допустим чтобы собрать сразу все ошибки в массив делается свой приемник, ибо стандартный Exception массивов на входе не понимает.