PHP Iniciante

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.