Problem sending JSON via ajax to PHP

1

I've been trying to solve this problem for 2 days, I saw some questions from the site, but none solves the problem. I'm putting Ajax in my CBT login, but it will not, it does not make a mistake. I already made a file_exists in the path of the target file of the request and that's right. And if they can confirm if I'm getting the data right in PHP, because the examples I saw on the site were only with a value inside the JSON.

index.php

//coloquei só o script porque o código é longo.. (JQuery está incluso pelo bootstrap..
<script>
    function enviar() {

        var usuario = $("[name='txtu']").val();
        var senha = $("[name='txts']").val();
        //está chegando os valores
        console.log(usuario +'/'+ senha);
        $.ajax({
            url: "./controller_php/verificaLogin.php",
            type: "POST",
            data: {'usuario' : usuario, 'senha' : senha},
            dataType: "json"

        }).done(function (resposta) {
            console.log(resposta);
        }).fail(function () {
            // está caindo aqui sempre
            console.log("Falha");
        });
    }
</script>

checkLogin.php

require_once './model_php/login.class.php';

if ($_POST) {
    $user = json_decode($_POST['usuario']);   
    $senha = json_decode($_POST['senha']);
    session_start();
    //coloquei isso pra testar em uma outra página para ver se estava ocorrendo o post, e na outra página mostra que a variável não foi criada.
    $_SESSION['a'] = $json;

    if (Login::logar($user, $senha)){
        $_SESSION['nome'] = $user;
        $cpf = Login::pegaCPFUsuario($user);
        $_SESSION['tipoUsuario'] = Login::pegaTipoUsuario($user);

        if ($_SESSION['tipoUsuario'] == 2) {
            $_SESSION['log'] = 'ativo';
            return true;
        } else {
            $_SESSION['log'] = 'ativoTecnico';
            return true;
        }
    } else {
        return false;
    }
}
    
asked by anonymous 12.09.2018 / 03:35

1 answer

6

Your code has some errors

if ($_POST)

The ideal thing was to check that all the parameters you need were completed

if(isset($_POST["usuario"], $_POST["senha"]))

This part is also incorrect

$user = json_decode($_POST['usuario']);   
$senha = json_decode($_POST['senha']);

json_decode expects to receive a json string, in your case, it is just a common string sent by jquery, the correct one would be to do just

$user = $_POST['usuario'];   
$senha = $_POST['senha'];
//coloquei isso pra testar em uma outra página para ver se estava ocorrendo o post, e na outra página mostra que a variável não foi criada.
$_SESSION['a'] = $json;

This is because the value passed to json_decode is incorrect, so it returns an empty string

This part could be edited too

    if (Login::logar($user, $senha)){
    $_SESSION['nome'] = $user;
    $cpf = Login::pegaCPFUsuario($user);
    $_SESSION['tipoUsuario'] = Login::pegaTipoUsuario($user);

    if ($_SESSION['tipoUsuario'] == 2) {
        $_SESSION['log'] = 'ativo';
        return true;
    } else {
        $_SESSION['log'] = 'ativoTecnico';
        return true;
    }
} else {
    return false;
}

Getting:

    if (Login::logar($user, $senha)){
    $_SESSION['nome'] = $user;
    $cpf = Login::pegaCPFUsuario($user);
    $_SESSION['tipoUsuario'] = Login::pegaTipoUsuario($user);

    if ($_SESSION['tipoUsuario'] == 2) {
        $_SESSION['log'] = 'ativo';
        echo json_encode(["log" => "ativo"]);
    } else {
        $_SESSION['log'] = 'ativoTecnico';
        echo json_encode(["log" => "ativoTecnico"]);
    }
} else {
    echo json_encode(["log" => "não encontrado"]);
}

Notice that I've changed the

return true;

to display on the json-form screen the result of your request AJAX can not interpret the "true return" of php, just what is in the output, so your request does not return anything, because return true does not display anything

The complete code looks like this:

require_once './model_php/login.class.php';

if(isset($_POST["usuario"], $_POST["senha"])) {
$user = $_POST['usuario'];   
$senha = $_POST['senha'];

session_start();
//coloquei isso pra testar em uma outra página para ver se estava ocorrendo o post, e na outra página mostra que a variável não foi criada.
$_SESSION['a'] = $json;

if (Login::logar($user, $senha)){
    $_SESSION['nome'] = $user;
    $cpf = Login::pegaCPFUsuario($user);
    $_SESSION['tipoUsuario'] = Login::pegaTipoUsuario($user);

    if ($_SESSION['tipoUsuario'] == 2) {
        $_SESSION['log'] = 'ativo';
        echo json_encode(["log" => "ativo"]);
    } else {
        $_SESSION['log'] = 'ativoTecnico';
        echo json_encode(["log" => "ativoTecnico"]);
    }
} else {
    echo json_encode(["log" => "não encontrado"]);
}
}
    
12.09.2018 / 06:17