Boa tarde,
Estou começando com php e criei essa função para buscar um usuário e senha, mas ele só retorna vazio.
function buscarUsuario($conn,$usuario,$senha){
$stmt = $conn->prepare("SELECT* FROM funcionario WHERE LOGIN_Funcionario = '?'
AND SENHA_Funcionario = '?' AND ID_TipoUsuario>=2");
$stmt->bind_param("ss",$usuario,$senha);
$stmt->execute();
$resultado = $stmt->fetch();
return $resultado;
}
Aqui é onde eu valido o usuário e redireciono ele:
$usuario=filter_input(INPUT_POST,'nUsuario');
$senha=filter_input(INPUT_POST,'nSenha');
$row = buscarUsuario($conn,$usuario,$senha);
$user=$row['LOGIN_Funcionario'];
$permissao=$row['ID_TipoUsuario'];
$redirecionar="";
if($row['LOGIN_Funcionario']==""){
$redirecionar="../web/autenticarAdm.php?code=0";
}else{
if($permissao==4){
$redirecionar="../web/recuperarPedidoProjetoADM.php";
}elseif($permissao==3){
$redirecionar="../web/recuperarPedidoProjeto.php";
}else{
$redirecionar="../web/ambienteCliente.php";
}
}
$conn->close();
header("location:$redirecionar");`Texto pré-formatado`
O buscar sempre retorna vazio e entra no primeiro if
Retire as aspas dos pontos de interrogação do seu sql e veja o que acontece
Retirei mas continua retornando vazio.
function buscarUsuario($conn,$usuario,$senha){
$stmt = $conn->prepare("SELECT* FROM funcionario WHERE LOGIN_Funcionario = ?
AND SENHA_Funcionario = ? AND ID_TipoUsuario>=2");
$stmt->bind_param("ss",$usuario,$senha);
$stmt->execute();
$resultado = $stmt->fetch();
return $resultado;
}
Você está usando o fetch de maneira errada, segundo a documentação ele sempre vai retornar true ou false indicando se conseguiu executar e não que irá trazer o registro na base, para isso você deve usar o bind_result…
$stmt->bind_param("ss",$usuario,$senha);
$stmt->execute();
$stmt->bind_result($campo1, $campo2); // campo3, etc...
$resultado = $stmt->fetch();
Como pode ver, ele vai colocando cada coluna do select nas variáveis que você marcou $campo1, etc… não é lá muito intuitivo não é?
Sugiro se você ainda estiver começando, usar PDO ao invés do mysqli, na minha opinião ele é bem mais flexível ao trazer registros da base, e você ainda ganha abstração de base, caso você queira mudar de base de dados, seu código sofre poucas mudanças, vale a pena conhecê-lo…
Obs: no mysqli também tem o get_result, talvez seja melhor opção…
Valeu mais uma vez, o get_result resolveu meu problema o código ficou assim:
function buscarUsuario($conn,$usuario,$senha){
$stmt = $conn->prepare("SELECT LOGIN_Funcionario,ID_TipoUsuario FROM funcionario WHERE LOGIN_Funcionario = ?
AND SENHA_Funcionario = ? AND ID_TipoUsuario>=2");
$stmt->bind_param("ss",$usuario,$senha);
$stmt->execute();
$resultado = $stmt->get_result();
return $resultado;
}
Eu to usando uma array e pegando as posições que preciso para validar o login, não se essa seria a melhor forma ou a mais correta, o código ficou assim:
$row = buscarUsuario($conn,$usuario,$senha);
$user= $row->fetch_array(MYSQLI_NUM);
var_dump($user);
$permissao= $user[1];
$redirecionar="";
if($user[0]==""){
$redirecionar="../web/autenticarAdm.php?code=0";
}else{
if($permissao===4){
$redirecionar="../web/recuperarPedidoProjetoADM.php";
}elseif($permissao==3){
$redirecionar="../web/recuperarPedidoProjeto.php";
}else{
$redirecionar="../web/ambienteCliente.php";
}
}
$conn->close();
header("location:$redirecionar");
to usando por enquanto apenas o mysqli mas mais pra frente pretendo usar o PDO.
Vai depender do propósito da função, no caso ela busca um usuário, deve retornar um usuário certo e não um resultado (resultset)… eu costumo retornar um objeto pronto nesse caso, pois não preciso ficar calculando posíção do array…
...
$resultado = $stmt->get_result();
return $resultado->fetch_object();
Depois na hora de pegar…
$user = buscarUsuario($conn,$usuario,$senha); //faz mais sentido não?
var_dump($user);
$permissao = $user->ID_TipoUsuario; //aqui o pulo do gato!
...
if (empty($user)) { //melhor que usar == ""
...
}
O seu var_dump vai imprimir um tipo object, onde cada atributo será o nome de uma coluna no select… pegou?
2 curtidas
Entendi vou melhorar essa parte do código vlw!
1 curtida