Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Salve tripulação,
A pergunta me parece boba, mas eu não encontrei a solução! haha
A questão é a seguinte, tenho o seguinte if:
// SE TODOS OS CAMPOS FOREM PREENCHIDOS
if ($_POST["a"] != "" && $_POST["b"] != "" && $_POST["c"] != "") {
// INSERE NO BANCO DE DADOS
}elseif ($_POST["a"] == "" && $_POST["b"] == "" && $_POST["c"] == "") {
// NÃO FAZ NADA, SOMENTE IGNORA (NÃO TEM COMANDO NENHUM AQUI)
}
// SE ALGUM CAMPO FOI PREENCHIDO, MAS NÃO TODOS
else {
// DÁ ERRO INFORMANDO QUE TODOS DEVEM SER PREENCHIDOS
}
Aquele elseif do meio, que não faz nada, só ignora, é desnecessário. Eu gostaria de retirá-lo, visto que não tem utilidade. Para isso eu teria que transformar o else em um elseif.
Pergunto: qual teria de ser a condição do elseif? Sei que se fossem 2 campos eu poderia usar xor (^), mas no caso de três campos, se eu fizer $a != "" ^ $b != "" ^ $c != "", não acontece nada, sempre retorna falso!
Alguém poderia me dar uma luz?
Desde já obrigado!
// SE TODOS OS CAMPOS FOREM PREENCHIDOS
if ($_POST["a"] != "" && $_POST["b"] != "" && $_POST["c"] != "") {
// INSERE NO BANCO DE DADOS
else {
// DÁ ERRO INFORMANDO QUE TODOS DEVEM SER PREENCHIDO
echo 'preencha os campos!';
}Não pessoal.
A lógica é que, se o cara preenche todos, ELE FAZ UMA AÇÃO. Se não preenche NENHUM, ele ignora. Se preenche algum, mas não todos, DÁ ERRO.
Ou seja, só tem ação quando:
Se deixar todos vazios, não acontece nada! Então não pode ser só um else. Eu tenho que fazer um elseif no IF!
Pelo que você explicou fica meio vago essa lógica, mas você tem seus motivos de acordo com sua aplicação.
Pelo que você postou ....
Então eu faria assim:
Se não digitou nada -> Não faz nada
Senãose digitou algo -> Verifica se os três post passam
Senão digitou tudo -> Insere no banco
if($var != '' AND $var2 != '' AND $var3 != ''... AND $varn != ''){
// Aqui você verifica se todas estão preenchidas, observa que dá pra usar !empty($var) em vez de $var != ''
}elseif($var != '' XOR $var2 != '' XOR $var3 != ''... XOR $varn != ''){
// Aqui retornará verdade apenas se uma OU outra estiver em branco
}else{
// Aqui não faz nada na sua lógica.
}
entendi que, se todos estiverem vazios, não há ação alguma.
portanto, removi a condição que identifica esse estado:
$error = false;
if ( empty( $_POST['a'] ) or empty( $_POST['b'] ) or empty( $_POST['c'] ) ) {
// DÁ ERRO INFORMANDO QUE TODOS DEVEM SER PREENCHIDOS
$error = 1;
}
// SE TODOS OS CAMPOS FOREM PREENCHIDOS
if ( !$error ) {
// INSERE NO BANCO DE DADOS
}
e pode simplificar ainda mais:
if ( empty( $_POST['a'] ) or empty( $_POST['b'] ) or empty( $_POST['c'] ) ) {
// DÁ ERRO INFORMANDO QUE TODOS DEVEM SER PREENCHIDOS
}else{
// INSERE NO BANCO DE DADOS
}Valeu! ESerra.
XOR resolvia o problema. Era isso. O último else que você colocou eu nem precisaria fazer, já que não tem ação.
Ficou assim:
if (!empty($var) AND !empty($var2) AND !empty($var3)) { // Aqui você verifica se todas estão preenchidas} elseif (!empty($var) XOR !empty($var2) XOR !empty($var3)) { // Aqui retornará verdade apenas se uma OU outra estiver em branco}
Eu eu achando que jamais veria uso para XOR... :o
Eu eu achando que jamais veria uso para XOR... :o
somos dois :)
A lógica é se todos devem ser preenchidos, para que esse elseif ?
Você já deu condição única de verificação todos devem ser preenchidos