PHP Iniciante

2 respostas
G

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;

}

2 Respostas

G

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.

W

@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.

Criado 31 de maio de 2017
Ultima resposta 3 de jun. de 2017
Respostas 2
Participantes 3