Conexao php

Pessoal, bom dia!
Através deste form, estou tentando testar a conexao:

div class="container">
            <form class="form-signin" method="POST" action="valida_login.php">
                <h2 class="form-signin-heading">Área Restrita</h2>
                <label for="inputEmail" class="sr-only">Usuário</label>
                <input type="text" name="usuario" class="form-control" placeholder="Usuário" required   >
                <label for="inputPassword" class="sr-only">Senha</label>
                <input type="password" name="senha" class="form-control" placeholder="Senha" required>
                <div>
                    <button class="btn btn-lg btn-primary " type="submit">Entrar</button> 
                    <a href="index.php" class="btn btn-success">Cancelar</a>
                </div>
            </form>
        </div> <!-- /container --

Aqui tenho o arquivo valida_login:

<?php
    session_start();

    $usuario = $_POST["usuario"];
    $senha = $_POST["senha"];
    
    /*echo $usuario. ' - ' .$senha;*/
    
    include_once ('conexao.php');
    
    $result = mysql_query("select * from usuario where login='$usuario' and senha='$senha' LIMIT 1");
    $resultado = mysql_fetch_assoc($result);
    echo $resultado ['nome'];

E aqui a conexao com o banco:

> <?php
>     $conectar = mysql_connect('localhost', 'root', 'xxx') or die('Erro na conexao');
>     mysql_select_db("projetoipe") or die ('base não encontrada');
> ?>

Quando executo, aparece este erro erro:

Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:\xampp\htdocs\IPE_PROJETO\conexao.php:2 Stack trace: #0 C:\xampp\htdocs\IPE_PROJETO\valida_login.php(9): include_once() #1 {main} thrown in C:\xampp\htdocs\IPE_PROJETO\conexao.php on line 2

Pelo pouco que sei, acredito ser o erro na classe de conexao. Será isso mesmo?
Obrigado a todos.

As funções mysql_* não existem mais na versão >= 7 do php, utilize mysqli ou pdo

Havia pensando nisso, mas quando iniciei o projeto, selecionei a o php 5.6, mas o erro continuava. Muito obrigado. Dúvidas posteriores posto aqui.

Continuando…
Criei este arquivo de conexão com mysqli:

<?php
    $servidor = "localhost";
    $usuario = "root";
    $servidor = "localhost";
    $usuario = "root";
    $senha = "xxx";
    $database = "projetoipe";
    
    $conn = mysqli_connect($servidor, $usuario, $senha, $database);

Não sei se está correto

Quando vou executar o arquivo de login, aparece este erro:

Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\xampp\htdocs\PROJETO-IPE\valida_login.php on line 10

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in C:\xampp\htdocs\PROJETO-IPE\valida_login.php on line 11

Apontando para este arquivo:

1. <?php
2.     session_start();
3.     
4.     $login = $_POST['login'];
5.     $senha = $_POST['senha'];
6.     
7.     echo $login.' - ' .$senha;
8.     include_once "conexao.php";
9.     
10.     $result = mysqli_query("SELECT * FROM usuario WHERE login='$usuario' AND senha='$senha' LIMITE 1");
11.     $resultado = mysqli_fetch_assoc($result);
12.     
13.     echo $resultado['nome'];

Agora não sei onde estou errando. Poderiam me ajudar. Obrigado.

Em relação a linha 10, consegui resolver, bastava inserir o link da conexão. Agora estou com mesmo erro na linha 11:
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\PROJETO-IPE\valida_login.php on line 11

Ainda pesquisando.

No seu SQL, você declarou LIMITE, mas é LIMIT, por isso está causando erro e a função mysqli_query não está retornando um resource…

$result = ...
var_dump($result);

Faça o teste antes de mudar, se o var_dump mostrar FALSE, quer dizer que sua query tem erro de sintaxe, depois de mudar o var_dump deve mostrar RESOURCE…

Aliás, para o seu caso o LIMIT 1 é desnecessário, já que não faz sentido algum trazer do banco mais de um mesmo usuário com a mesma senha não é mesmo? (se isso acontecer você tem erro de lógica no seu código, já que deveria tratar a entrada de um único login/senha por usuário…)

E recomendo muito, independentemente da versão do PHP, usar PDO, isso evita você ter problemas de segurança no banco, seu SQL está muito fácil de ser “invadido” ou ter sql “injetado” (SQL injection)… estude sobre prepared statements…

Para fins de teste, faça…

$sql = "SELECT...";
echo $sql;

E depois entre com sua senha dessa forma…

' OR 1 = 1;

E veja como sua SQL é impressa…

Fiz esta conexão com PDO:

<?php
    class Database 
{
	private static $dbName = 'projetoipe' ; 
	private static $dbHost = 'localhost' ;
	private static $dbUsername = 'root';
	private static $dbUserPassword = 'xxx';
	
	private static $cont  = null;
	
	public function __construct() {
		exit('Init function is not allowed');
	}
	
	public static function connect()
	{
	   // One connection through whole application
       if ( null == self::$cont )
       {      
        try 
        {
          self::$cont =  new PDO( "mysql:host=".self::$dbHost.";"."dbname=".self::$dbName, self::$dbUsername, self::$dbUserPassword);  
        }
        catch(PDOException $e) 
        {
          die($e->getMessage());  
        }
       } 
       return self::$cont;
	}
	
	public static function disconnect()
	{
		self::$cont = null;
	}
}

Os erros sumiram :pray: :pray:

Porém é mostrado os dados digitados nos campos login e senha. Pelo que percebi não está validando com o banco, pois inseri outros dados, e é impresso o que é digitado.

Este é o arquivo valida_login:

<?php
    session_start();
    
    $login = $_POST['login'];
    $senha = $_POST['senha'];
    
    echo $login.' - ' .$senha;
    include_once "conexao.php";
    
    $pdo = Database::connect();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo = ("SELECT * FROM usuario WHERE login='$login' AND senha='$senha'");

Obrigado pela dicas.

Não adianta usar pdo com velhas práticas…

$login = filter_input(INPUT_POST, 'login'); // melhor que $_POST
$senha = filter_input(INPUT_POST, 'senha');

...

$sql = "SELECT * FROM usuario WHERE login = ? AND senha = ?";
$query = $pdo->prepare($sql);
$query->bindValue(1, $login);
$query->bindValue(2, $senha);
$query->execute();
$result = $query->fetchObject();

if (is_object($result)) {
    echo $result->nome; // orientado a objetos...
} else {
    echo 'Usuário inválido/não cadastrado!';
}

Após dois dias pesquisando bastante, acho que consegui resolver a questão do login.

Esta a minha classe de conexão:

<?php
{
    $servidor = "localhost";
    $usuario = "root";
    $senha = "xxx";
    $dbname = "projetoipe";
    
    $conn = mysqli_connect($servidor, $usuario, $senha, $dbname);

Primeiro gostaria de saber como aplicar recursos contra sql injection.

Nesse arquivo, faço as validações. Da forma que testei, é sempre obrigado entrar com os dados corretos. Mas poderiam checar se ainda tem algo de errado.

<?php
    session_start();
    
    include_once "conexao.php";
    
    $btnLogin = filter_input(INPUT_POST, 'btnLogin', FILTER_SANITIZE_STRING);
    
    if($btnLogin)
    {
        /*echo "tentar logar";*/
        $usuario = filter_input(INPUT_POST, 'usuario', FILTER_SANITIZE_STRING);
        $senha = filter_input(INPUT_POST, 'senha', FILTER_SANITIZE_STRING);
        
        /*echo "$usuario - $senha";*/
        
        if((!empty($usuario)) AND (!empty($senha)))
        {
            //gerar senha e criptografar
            //echo password_hash($senha, PASSWORD_DEFAULT);
            //Pesquisar o usuario no banco de dados
            
            $result_usuario = "SELECT id, nome, email, senha FROM usuarios WHERE usuario='$usuario'";
            $resultado_usuario = mysqli_query($conn, $result_usuario);
            
            if($resultado_usuario)
            {
                $row_usuario = mysqli_fetch_assoc($resultado_usuario);
                
                if(password_verify($senha, $row_usuario['senha']))
                {
                    $_SESSION['id'] = $row_usuario['id'];
                    $_SESSION['nome'] = $row_usuario['nome'];
                    $_SESSION['email'] = $row_usuario['email'];
                    header("Location: admin.php");
                }
                else
                {
                    $_SESSION['msg'] = "LOGIN OU SENHA INCORRETOS!";
                    header("Location: login.php");
                }
            }
        }
        else
        {
            $_SESSION['msg'] = "Login ou senha incorretos!";
            header("Location: login.php");
        }
    }
    else
    {
        $_SESSION['msg'] = "Página não encontrada!";
        header("Location: login.php");
    }

Obrigado pelas dicas.