Ajax receiving array that should not

0

I'm putting together a popup form, so I needed to use Ajax for authentication. It happens that when I type an already registered e-mail it shows me the message correctly (E-mail already registered!), But when I put an e-mail not registered, it first shows me the message of (E-mail already registered!) and then show me the message of (Successfully Signed!).

$("#btn-cadastro").click(function(){

var data = $("#myRegister").serialize();

$.ajax({
type : 'POST',
url  : 'conexao/cadastro.php',
data : data,
dataType: 'json',
beforeSend: function()
{   
    $("#btn-cadastro").html('Validando ...');
},
success :  function(response){                      
    if(response.erro == "0"){   
        $("#pass-info3").css('display', 'none')
        $("#btn-cadastro").html('Entrar');
        $("#btn-cadastro").prop('disabled', true);
        setTimeout(function () {
        $("#pass-info3").removeClass( "weakpass" )
        $("#pass-info3").addClass( "goodpass" )
        $("#pass-info3").css('display', 'block')
        $("#pass-info3").html(response.mensagem);
        }, 4101);
        setTimeout(function () {
        window.location.href = "index.php";
        }, 6101);
    }else{
        if(response.erro == "1"){   
            $("#pass-info3").css('display', 'none')
            $("#pass-info3").removeClass( "goodpass" )
            $("#pass-info3").addClass( "weakpass" )
            $("#btn-cadastro").prop('disabled', true);
            setTimeout(function () {
            $("#btn-cadastro").html('Entrar');
            $("#btn-cadastro").prop('disabled', false);
            $("#pass-info3").css('display', 'block')
            $("#pass-info3").html('<strong>Erro! </strong>' + response.mensagem);
            }, 500);
        }
    }
}
});
});

And the php that does the registration is this:

// Conexao com o Banco de Dados
require_once("conexao.php");

// Recebe os dados de cadastro
$nome       = (isset($_POST['nome'])) ? $_POST['nome'] : null;
$email      = (isset($_POST['email'])) ? $_POST['email'] : null;
$telefone   = (isset($_POST['telefone'])) ? $_POST['telefone'] : null;
$senha      = (isset($_POST['senha'])) ? $_POST['senha'] : null;
$rsenha     = (isset($_POST['rsenha'])) ? $_POST['rsenha'] : null;

// Criptografa senha
$custo     = '08';
$salt      = 'Cf1f11ePArKlBJomM0F6aJ';
$hash = crypt($senha, '$2a$' . $custo . '$' . $salt . '$');

if (empty($nome) || empty($email) || empty($telefone) || empty($senha) || empty($rsenha)):
    $retorno  = array('erro' => '1', 'mensagem' => 'Preencha todos os campos!');
    echo json_encode($retorno);
else:

    $sql = 'SELECT * FROM usuarios WHERE email = :email';
    $stmt = $conexao->prepare($sql);
    $stmt->bindParam(':email', $email);
    $stmt->execute();

    $resposta1 = $stmt->fetch(PDO::FETCH_ASSOC);

    if (is_array($resposta1)):
        $retorno  = array('erro' => '1', 'mensagem' => 'E-mail ja registrado!');
        echo json_encode($retorno);
    else:
        $sql2 = 'INSERT INTO usuarios(nome, email, telefone, senha) VALUES(:nome, :email, :telefone, :hash)';
        $stmt2 = $conexao->prepare($sql2);
        $stmt2->bindParam(':nome', $nome);
        $stmt2->bindParam(':email', $email);
        $stmt2->bindParam(':telefone', $telefone);
        $stmt2->bindParam(':hash', $hash);
        $resposta2 = $stmt2->execute();

        if( ! $resposta2 ):
            $retorno  = array('erro' => '1', 'mensagem' => 'Não foi possivel completar o cadastro!');
            echo json_encode($retorno);
        else:
            $retorno  = array('erro' => '0', 'mensagem' => 'Cadastrado com sucesso!');
            echo json_encode($retorno);
        endif;
    endif;
endif;

I have another just like with only 1 query for Login, and it works normally. I imagine it must be something that went unnoticed or that I do not even know, so I would appreciate it if you would help me!

    
asked by anonymous 28.03.2017 / 21:48

1 answer

1

Probably $stmt->fetch(PDO::FETCH_ASSOC); returns an empty array when the record does not exist.

Try changing the following line:

if (is_array($resposta1)):

To

if (is_array($resposta1) && count($resposta1) > 0):
    
29.03.2017 / 01:26