Validação de formulário. Bloco "else" não está trabalhando

Olá pessoal,

Não estou conseguindo encontrar o motivo para este código não entrar no último bloco (else). Fiz o teste para todos os outros “if’s” e está indo normalmente. Logo, se nenhum dos “if’s” entrar, é o bloco “else” que precisa trabalhar. Porém, ele não está indo. Alguém pode me ajudar?

<body>


	<?php
		$nome = $telefone = $nomeErro = $telefoneErro = "";
		
		if ($_SERVER['REQUEST_METHOD'] == "POST") {
                            //Se nome e telefone estiverem em branco:
			if (empty($_POST['nome']) or empty($_POST['telefone'])) {
				if (empty($_POST['nome'])) {
					$nomeErro = "Nome Inválido!";
				}
				
				if (empty($_POST['telefone'])) {
					$telefoneErro = "Telefone Inválido!";
				}
			} else if (strlen($_POST['telefone']) < 8) {
                            //Se telefone tiver menos de 8 dígitos:
				$telefoneErro = "Telefone Inválido! Possui " . strlen($_POST['telefone']) . " dígito(s).";
			} else if ($_POST['telefone'][0] == 9) {
                            //Se telefone começar com 9 (celular), precisa ter 9 dígitos:
				if (strlen($_POST['telefone']) < 9) {
					$telefoneErro = "Telefone Inválido. Possui " . strlen($_POST['telefone']) . " dígitos.";
				}
			} else {
				$nome = formata($_POST['nome']);
				$telefone = formata($_POST['telefone']);
				echo "Cadastro realizado! Senhor(a) $nome, entraremos em contato através do número $telefone";
			}
		}
		
		#Eliminando espaços, tags, contrabarras
		function formata($dado) {
			$dado = trim($dado);
			$dado = stripslashes($dado);
			$dado = htmlspecialchars($dado);
			return $dado;
		}
	?>


	<div id = "divOrcamento">
		<h3>Como podemos ajudá-lo(a)?</h3>
		<form method = "post" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">
			<p>
				Seu nome: <span class = "spnErro">* <?php echo $nomeErro; ?></span>
			</p>
			<p>
				<input type = "text" maxlength = "50" id = "inputNome" name = "nome" value = "<?php echo $nome ?>">
			</p>
			<p>
				Seu telefone: 
				<span class = "spnErro">* <?php echo $telefoneErro; ?></span>
			</p>
			<p>
				<select>
					<option>27</option>
					<option>11</option>
					<option>12</option>
					<option>13</option>
					<option>14</option>
					<option>15</option>
					<option>16</option>
					<option>17</option>
					<option>18</option>
					<option>19</option>
					<option>21</option>
					<option>22</option>
					<option>24</option>
					<option>27</option>
					<option>28</option>
					<option>31</option>
					<option>32</option>
					<option>33</option>
					<option>34</option>
					<option>35</option>
					<option>37</option>
					<option>38</option>
					<option>41</option>
					<option>42</option>
					<option>43</option>
					<option>44</option>
					<option>45</option>
					<option>46</option>
					<option>47</option>
					<option>48</option>
					<option>49</option>
					<option>51</option>
					<option>53</option>
					<option>54</option>
					<option>55</option>
					<option>61</option>
					<option>62</option>
					<option>63</option>
					<option>64</option>
					<option>65</option>
					<option>66</option>
					<option>67</option>
					<option>68</option>
					<option>69</option>
					<option>71</option>
					<option>73</option>
					<option>74</option>
					<option>75</option>
					<option>77</option>
					<option>79</option>
					<option>81</option>
					<option>82</option>
					<option>83</option>
					<option>84</option>
					<option>85</option>
					<option>86</option>
					<option>87</option>
					<option>88</option>
					<option>89</option>
					<option>91</option>
					<option>92</option>
					<option>93</option>
					<option>94</option>
					<option>95</option>
					<option>96</option>
					<option>97</option>
					<option>98</option>
					<option>99</option>
				</select>
			</p>
			<p>
				<input type = "text" pattern="\d*" id = "inputTel" maxlength = "9" name = "telefone" value = "<?php echo $telefone ?>">
			</p>
			<a href = "#"><input type = "submit" value = "Enviar" id = "btnSubmeter"></a>
		</form>
	</div>


	<script src = "_script/script.js"></script>
	
</body>

Se debugar vai descobrir.

Esta meio bagunçado seu código.
Faz apenas um “if” para cada campo, utilizando a função “strlen”, além disto, tira este “empty”, a utilização dele neste conceito esta desnecessária.

1 curtida

provavelmente vc quer combinar a condicao do else if com esse if interno usando and / &&

mas assim, ta dificil de entender…

1 curtida

Eu faria assim:

$temErro = false;
if (empty($_POST['nome'])) {
    $nomeErro = "Nome Inválido!";
    $temErro = true;
}

$lenTel = strlen($_POST['telefone']);
if ($lenTel < 8 or ($_POST['telefone'][0] == 9 and $lenTel < 9)) {
    $telefoneErro = "Telefone Inválido! Possui {$lenTel} dígito(s).";
    $temErro = true;
}

if (!$temErro) { //se não tem erro...
    $nome = formata($_POST['nome']);
    $telefone = formata($_POST['telefone']);
    echo "Cadastro realizado! Senhor(a) {$nome}, entraremos em contato através do número {$telefone}";
}

As vezes uma variável a mais melhora muito na leitura do código, poucos if’s também, sucesso!

1 curtida

Lucas,

Obrigado pelo retorno e desculpe minha demora!

Se eu fizer um “if” para cada campo, como eu iria fazer um “else” para validar caso tudo esteja certo? A ideia que tive foi criar um bloco para ele retornar o nome e telefone inválido juntos para o usuário caso o usuário deixasse ambos em branco. Caso contrário, se o usuário deixasse os dois campos em branco iria retornar apenas um como sendo inválido sendo que os dois estariam errados.

Eu descobri o erro no fim das contas. O PHP não reconhece o $_POST[‘telefone’][0]. Eu utilizei ele para detectar o primeiro dígito do telefone. Caso seja 9, então é celular e deve conter nove dígitos. Agora o meu problema é como fazer isso, rs. Se puder me ajudar.

Forte abraço.

pczenyj,

Obrigado pelo retorno e desculpe minha demora!

O problema está exatamente neste bloco. Eu comentei ele e o código funcionou direitinho. Eu utilizei ele para detectar o primeiro dígito do telefone. Caso seja 9, então é celular e deve conter nove dígitos. Mas não consegui encontrar uma maneira. Talvez eu deva refazer este trecho todo. Se tiver uma ideia, agradeço!

Forte abraço.

Obrigado rodevops pelo retorno e desculpe minha demora.

Vou aplicar a sua forma de fazer e dou-lhe um retorno.

Forte abraço!