Caros colegas programadores!
Estou iniciando minha jornada em PHP, porém, estou com pequenas dificuldades.
Antes de qualquer coisa obs.: Sou iniciante, não conheço muito bem a linguagem.
Estou tentando fazer uma tela de login, onde o usuário entra com os dados (usuário e senha) o sistema deve fazer a busca e validação através dos dados cadastrados no banco.
está da seguinte forma:
index:
Receitas Dona Ana
<?php
require_once __DIR__ . '/banco_dados.php';
if($_SERVER['REQUEST_METHOD'] == "POST"){
$retorno = usuario($_POST['nome'], $_POST['senha']);
if ($retorno != null){
echo 'ACERTOU';
}
else{
echo 'BURRO';
}
}
?>
<img src="imagens/Cake-icon_1.png">
<form method="POST" action="index.php">
<div id="formulario">
<table>
<tr>
<td>E-mail: </td>
<td><input name="e-mail" type="text"></td>
</tr>
<tr>
<td>Senha: </td>
<td><input name="senha" type="password"></td>
</tr>
<tr>
<td><input name="entrar" type="submit" value="Entrar"></td>
</tr>
</table>
</div>
</form>
</body>
PHP (conexão no banco)
$conexao = new PDO(‘mysql:dbname=receitas;host=127.0.0.1;charset=UTF8’, ‘root’, ‘’);
$conexao->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$conexao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//busca usuário e senha no banco
function usuario ($nome, $senha){
global $conexao;
//executa sql
$buscar = $conexao->prepare(‘select nome, senha where nome: ? and senha: ?’);
$buscar->execute($nome, $senha);
return $buscar;
}
Olá!
Você está usando PHP orientado a objetos? Não entendi direito o que você quer fazer, é um sistema para autenticação de usuários?
Caso sim,está um pouco diferente do jeito que eu usaria. Eu faria algo assim mais ou menos assim:
Arquivo banco_dados.php
<?php
$servidor = "127.0.0.1";
$usuario = "root";
$senha = "";
$banco = "receitas";
//Conexao ao Banco de Dados
$conexao = mysqli_connect ($servidor, $usuario, $senha, $banco);
?>
<img src="imagens/Cake-icon_1.png">
<!--Deveria ser action="login.php" onde no arquivo login.php você faz toda a validação -->
<form method="POST" action="index.php">
<div id="formulario">
<table>
<tr>
<td>E-mail: </td>
<!--input name="nome" -->
<td><input name="e-mail" type="text"></td>
</tr>
<tr>
<td>Senha: </td>
<td><input name="senha" type="password"></td>
</tr>
<tr>
<td><input name="entrar" type="submit" value="Entrar"></td>
</tr>
</table>
</div>
</form>
Não tem nenhum input com a variável "nome" e sim "e-mail" no seu formulário então a consulta nunca vai dar certo, você ta falando pro PHP pegar um input que não existe. Daí fica seu critério se você vai utilizar "nome" ou o "email" para logar.
**Arquivo login.php**
> <?php
> include ('banco_dados.php');
//As variáveis login e senha recebem os dados digitados na página Index.php
$login = $_POST[‘nome’];
$senha = $_POST[‘senha’];
//Comando MySQL de verificação de autenticação
$sql = “SELECT * FROM usuario WHERE nome = ‘$nome’ AND senha = ‘$senha’”;
$resultado = mysqli_query($conexao, $sql) or die (“Erro na seleção da tabela.”);
//Caso consiga logar cria a sessão
if (mysqli_num_rows ($resultado) > 0) {
$linha = mysqli_fetch_array ($resultado) ;
$nome = $linha['nome'];
// session_start inicia a sessão
session_start();
$_SESSION['lnome'] = $nome;
$_SESSION['senha'] = $senha;
header('location:index.php');
}
//Caso contrário mostra a mensagem de erro
else {
echo “Não foi possível logar”;
}
?>
Outra coisa que eu percebi foi que você está deixando todo o código da busca no mesmo lugar, você tem que deixar a autenticação em um arquivo separado que no caso aqui eu dei o nome de login.php.
@gbsantos ele está utilizando POO sim, é melhor ele fazer do jeito dele mesmo. PS: Sua arquitetura está certa, porém da forma POO é mais segura e nova. Recomendo.
@gtbarbosa Faz o que o amigo gbsantos recomendou! Eu trabalho do mesmo método de arquitetura, sempre separando as funções, métodos em outro arquivo.
Porém utilize suas funções e métodos em arquivos com o nome de NOMEQUALQUER.class.php
Para indicar que é uma classe, lembre-se de que o nome da classe tem que ser o mesmo do arquivo.
Caso não saiba fazer a arquitetura POO (Orientada a Objetos) utilize o método do nosso amigo GTBARBOSA mesmo.