Existem várias maneiras de verificar se os dados fornecidos pelo usuário correspondem aos dados em um banco de dados MySQL usando o PHP. A melhor abordagem depende do que você está comparando e de como deseja lidar com possíveis discrepâncias. Aqui estão alguns exemplos, concentrando -se nas melhores práticas de segurança:
1. Verificando para um único usuário (por exemplo, login): Este é o cenário mais comum. Vamos verificar se um nome de usuário e senha correspondem a um registro no banco de dados.
crucialmente, veremos a senha antes de compará -la. Nunca armazene as senhas em texto simples!
`` `php
php
// Credenciais de banco de dados (substitua -os por suas credenciais reais!)
$ servername ="your_servername";
$ userName ="your_username";
$ senha ="your_password";
$ dbname ="your_dbname";
// Entrada do usuário (higienize isso!)
$ userNameInput =$ _Post ["nome de usuário"];
$ PasswordInput =$ _Post ["senha"];
// higienizar as entradas do usuário para impedir a injeção de SQL
$ userNameInput =mysqli_real_escape_string ($ conn, $ userNameInput);
$ PasswordInput =mysqli_real_escape_string ($ Conn, $ PasswordInput);
// Crie conexão
$ conn =new mysqli ($ servername, $ nome de usuário, $ senha, $ dbname);
// Verifique a conexão
if ($ conn-> Connect_error) {
Die ("Falha na conexão:". $ Conn-> Connect_error);
}
// preparar e vincular
$ stmt =$ conn-> preparar ("selecione senha_hash dos usuários onde o nome de usuário =?");
$ stmt-> bind_param ("s", $ userNameInput);
$ stmt-> Execute ();
$ resultado =$ stmt-> get_result ();
if ($ resultado-> num_rows> 0) {
$ row =$ resultado-> fetch_assoc ();
$ hashedPassword =$ row ["senha_hash"];
// Verifique se a senha usando a Password_Verify (função de hash de senha integrada do PHP)
if (senha_verify ($ senhaInput, $ hashedpassword)) {
// Login bem -sucedido
eco "Login bem -sucedido!";
} outro {
// Senha incorreta
eco "senha incorreta";
}
} outro {
// nome de usuário não encontrado
eco "nome de usuário não encontrado";
}
$ stmt-> close ();
$ conn-> close ();
?>
`` `
Explicação: *
Credenciais de banco de dados: Substitua as credenciais de espaço reservado pelos seus detalhes reais do banco de dados MySQL.
*
Entrada do usuário: Este código assume que o nome de usuário e a senha são enviados por meio de uma solicitação de postagem.
Sempre higienize a entrada do usuário Para evitar vulnerabilidades de injeção de SQL. `mysqli_real_escape_string ()` é uma etapa básica, mas declarações preparadas (usadas aqui) são muito mais robustas.
* Declaração preparada: Uma instrução preparada impede a injeção de SQL separando a consulta SQL dos dados fornecidos pelo usuário. É crucial para a segurança.
*
Hash de senha: O banco de dados deve armazenar senha *Hashes *, não senhas de texto simples. `Password_hash ()` Cria um hash seguro e `senha_verify ()` compara a entrada do usuário com o hash armazenado.
*
Manuseio de erro: O código inclui manuseio básico de erro para conexão com o banco de dados e falhas de consulta.
2. Verificação de várias correspondências (por exemplo, pesquisando uma tabela): Se você precisar encontrar várias correspondências com base na entrada do usuário (como procurar produtos com um nome específico), você precisará adaptar a consulta:
`` `php
php
// ... (conexão do banco de dados como acima) ...
$ search term =$ _post ["Search term"];
$ search term =mysqli_real_escape_string ($ conn, $ search term); // Sanitize!
$ sql ="Selecione * de produtos onde o nome como '%$ search term%'"; // Exemplo simples - use uma instrução preparada para melhor segurança!
$ resultado =$ Conn-> Query ($ sql);
if ($ resultado-> num_rows> 0) {
while ($ row =$ result-> fetch_assoc ()) {
// Processar cada linha correspondente
eco "Produto:". $ row ["nome"]. "
";
}
} outro {
eco "nenhum produto encontrado".;
}
// ... (conexão próxima) ...
?>
`` `
Nota importante: O exemplo de pesquisa acima usa concatenação de string, que é
vulnerável à injeção de SQL se `$ searchtern` não estiver higienizado . Para uma solução segura, reescreva -a usando declarações preparadas. Exemplo:
`` `php
$ stmt =$ conn-> preparar ("selecione * de produtos onde o nome?");
$ search term ="%". $ search term. "%"; // Adicionar curingas para curtir
$ stmt-> bind_param ("s", $ search termin);
$ stmt-> Execute ();
// ... restante do código para lidar com os resultados ...
`` `
Lembre -se de substituir os nomes da tabela e colunas do espaço reservado pelo seu esquema real de banco de dados. Sempre priorize a segurança usando declarações preparadas e adequada para a higienização de entrada para evitar ataques de injeção de SQL. Considere o uso de consultas parametrizadas para qualquer interação com a entrada do usuário e seu banco de dados. Para cenários mais complexos ou conjuntos de dados grandes, convém explorar técnicas mais avançadas, como procedimentos armazenados.