Прежде всего, использование глобальных является грехом. Вы загрязняете глобальное пространство имен, и это плохая идея, за исключением небольших специальных сценариев и устаревшего кода.
Во-вторых, вы неправильно используете isset - по двум причинам:
а) в данном контексте вы передаете переменную $ name в функцию, поэтому она всегда установлена
б) пустая проверка, установлена ли переменная или нет
В-третьих, вы должны отделить проверку от создания html.
В-четвертых, вы можете использовать filter_var вместо регулярного выражения, чтобы проверить, правильна ли почта.
Наконец, ваш код может выглядеть так:
<?php
if (isset($_POST['submit'])) {
$fields = array ('name' => $_POST['name'], 'email' => $_POST['email'], 'message' => $_POST['message']);
//CONVERT ARRAY KEYS TO VARIABLE NAMES
extract ($fields);
$errors = validateFields($name, $email, $message);
if (!empty($errors)){
# error
foreach ($errors as $error){
print "<p class='error'>$error</p>";
}
} else {
# all ok, do your stuff
} // if
} // if
function validateFields($name, $email, $post){
$errors = array();
if (empty($name)){$errors[] = "Name can't be empty";}
if (empty($email)){$errors[] = "Email can't be empty";}
if (empty($post)){$errors[] = "Post can't be empty";}
if (!empty($email) && !filter_var($email,FILTER_VALIDATE_EMAIL)){$errors[] = "Invalid email";}
if (!empty($post) && strlen($post)<10){$errors[] = "Post too short (minimum 10 characters)";}
# and so on...
return $errors;
}