Olá amigo, boa noite.
Você está correto ao se preocupar em fazer uma validação no back-end e front-end. Quanto mais seguro, melhor.
Uma forma simples de fazer validação no front-end é através de expressões regulares utilzando o atributo "pattern" das tags HTML5. Com isso, você deixa a parte de verificação mais eurística para o back-end.
Já no back-end, você pode criar uma função genérica que analisa se o campo está vazio e ainda pode fazer uma segunda verificação, via expressão regular, dos dados inserido.
Como exemplo, no código abaixo demonstrarei a você como fazer verificação de um campo de nome composto através de uma função genérica.
<?php
//Verifica se os dados estão chegando via POST do formulário
if (isset($_POST['salvar'])) {
//Array para armazenar as não-validação dos campos
$erros;
//Verifica se o campo está vazio e compara com a Regex
function VerificaVazioRegex($name_campo, $campo, $reg){
//Verifica se o campo possui conteúdo para poder verificar a Regex
if (empty($campo) || $campo == null || $campo == ""){
global $erros;
$erros["$name_campo"] = "não pode ficar vazio.";
}
else {
//Verificação da string fornecida com a Regex
if (!preg_match($reg, $campo)){
global $erros;
$erros["$name_campo"] = "possui caracteres, formato ou valor inválidos.";
}
}
}
//Retira os caracteres em branco das bordas
$nome = trim($_POST['cmp_nome']);
//Laço para retirar os espaços em branco extras (duplos)
while(strpos($nome, " ") != 0){
$nome = str_replace(" ", " ", $nome);
}
//Cria um padrão para verificação do nome
$regex_nome = '/^[a-zA-Zá-üÁ-Ü]+(( [a-zA-Zá-üÁ-Ü]+)+)?$/';
//Chama a função passando os dados do campo, bem como o padrão
VerificaVazioRegex("Nome", $nome, $regex_nome);
}
?>
Observe que a função que faz a verificação armazena o nome do campo como uma chave no array $erros e como valor armazena o tipo do erro (vazio ou formato inválido).
Ao final, você ainda pode criar um laço para informar as inconsistências ao usuário.
//Iteração para verificar as inconsistências no preenchimento do formulário
if (!empty($erros)){
echo "As seguintes pendências foram encontradas:<br />";
foreach ($erros as $chave => $valor){
echo "O campo <span> $chave</span> $valor<br />";
}
}
Caso o array esteja vazio, significa que não foram encontradas inconsistências. A partir de então você pode prosseguir com o processamento do seu código.
Espero ter ajudado.