Nessa página HTML simples eu descrevo, de forma sucinta, as principais funcionalidades de cada exemplo.
Nesse exemplo, o código PHP faz a busca de dados de uma tabela do banco de dados MySQL utilizando PDO e exibe os dados em uma tabela HTML estilizada com Bootstrap. A seguir, explico cada parte do código com mais detalhes:
Conexão com o banco de dados MySQL:
A primeira linha do código requer o arquivo "conexaoMysql.php", que contém as informações de conexão
com o banco de dados MySQL. Em seguida, a função mysqlConnect()
é chamada, que é responsável
por criar uma conexão com o banco de dados utilizando a extensão PDO e retornar um objeto PDO.
Execução de uma consulta SQL:
O bloco try-catch
é utilizado para executar a consulta SQL que busca os dados da tabela
"aluno" do banco de dados. A consulta é definida na variável $sql
utilizando a sintaxe
HEREDOC, que permite definir uma string multilinha com variáveis interpoladas. Em seguida, a função
query()
é chamada no objeto PDO (
, que retorna um objeto
$pdo
)PDOStatement
contendo o resultado da consulta.
Exibição dos dados em uma tabela HTML:
Os dados retornados pela consulta são exibidos em uma tabela HTML utilizando a biblioteca Bootstrap.
A linha <table class="table table-striped table-hover">
define uma tabela estilizada
com listras e efeitos de hover. O bloco while é utilizado para iterar sobre cada linha da consulta e
exibir os valores na tabela. A função htmlspecialchars()
é utilizada para escapar caracteres
especiais e evitar a execução de código malicioso.
Escapando caracteres especiais:
A função htmlspecialchars()
é utilizada nas variáveis $nome
e
$telefone
antes de exibi-las na tabela. Essa função converte caracteres especiais em
entidades HTML, evitando que eles sejam interpretados como código HTML. Isso é importante para evitar
ataques XSS (cross-site scripting) em que um invasor pode inserir código malicioso em um formulário ou
campo de entrada e fazer com que o usuário execute esse código sem saber. A função
htmlspecialchars()
garante que os dados exibidos na tabela não contenham código malicioso.
conexaoMysql.php
é requerido na primeira linha. Na sequência, a função mysqlConnect()
é invocada, a qual
cria uma conexão com o banco de dados usando a extensão PDO e retorna um objeto PDO.
try-catch
é utilizado para executar uma
consulta SQL que busca os dados da tabela "aluno" do banco de dados. A consulta é definida na variável
"$sql" utilizando a sintaxe HEREDOC, que permite definir uma string multilinha com variáveis
interpoladas.
query()
é chamada no objeto PDO ($pdo
),
que retorna um objeto PDOStatement contendo o resultado da consulta. Para exibir os dados na tabela
HTML, a variável $stmt
é iterada com um loop while
, que permite iterar sobre
cada linha da consulta e exibir os valores na tabela.
htmlspecialchars()
" é usada nas variáveis
$nome
e $telefone
para escapar caracteres especiais e evitar a execução de
código malicioso.
$nome
e $telefone
são definidas a partir dos dados recebidos por POST.
try-catch
é utilizado para executar uma consulta SQL que insere os dados na
tabela "aluno" do banco de dados. A consulta é definida na variável $sql
utilizando a
sintaxe HEREDOC, o que pode levar a uma vulnerabilidade de segurança por injeção de SQL.
$pdo
) para executar a consulta.
Depois de executar a consulta, a página é redirecionada para a página "mostra-alunos.php". Caso ocorra
uma exceção, a mensagem de erro será exibida.
POST
.$hashsenha
que é o resultado da aplicação do algoritmo de hash de
senha seguro do PHP na senha informada pelo usuário.
execute()
do objeto $stmt
.
mysqlConnect()
presente
no arquivo conexaoMysql.php. Não é possível avaliar a segurança dessa conexão sem conhecer a
implementação dessa função.
SELECT
para selecionar todos os dados de
todos os clientes cadastrados na tabela cliente.
while
utilizando o método
fetch()
para obter cada linha de resultado do banco de dados.
htmlspecialchars()
para limpar os
dados produzidos pelo usuário, com possibilidade de ataque XSS, antes de inseri-los na página HTML.
password_hash()
não é utilizada para gerar hashes seguros de senhas, uma vez
que a função PASSWORD_DEFAULT
pode utilizar algoritmos de hash obsoletos e vulneráveis.
É recomendado utilizar uma opção mais segura, como a função password_hash()
com o
algoritmo Argon2i ou Bcrypt.
$cpf = $_GET["cpf"] ?? "";
utiliza o operador de coalescência nula (??
) para
atribuir um valor vazio à variável $cpf
caso o CPF não esteja presente na URL.
?
) para o CPF.
PDOStatement
é criado a partir da declaração SQL preparada anteriormente. Em
seguida, é executado um comando execute()
passando o valor do CPF como parâmetro, para
prevenirataques de SQL injection.
mostra-clientes.php
utilizando a função
header("location: mostra-clientes.php")
.
exit()
. A mensagem de erro inclui uma explicação do erro obtido através
do método getMessage()
do objeto Exception.
A função checkLogin(
é definida
com três parâmetros: a conexão PDO com o banco de dados, o email do usuário e a senha do usuário. A função
cria uma consulta SQL para buscar o hash da senha armazenado no banco de dados para o email fornecido. A
consulta é executada usando prepared statements para evitar ataques de injeção de SQL. A função verifica
se há um resultado para a consulta e se a senha fornecida pelo usuário corresponde ao hash armazenado no
banco de dados usando a função $pdo
, $email
, $senha
)password_verify
. Se as credenciais estiverem corretas, a
função retorna true
; caso contrário, retorna false
.
A conexão PDO com o banco de dados é criada usando a função "mysqlConnect" definida em "conexaoMysql.php".
O email e a senha são obtidos do formulário de login usando as variáveis superglobais $_POST
.
Caso uma dessas variáveis não esteja definida, será atribuído um valor padrão vazio.
A função checkLogin
é chamada com os parâmetros $pdo
, $email
e
$senha
. Se a função retornar true
, o usuário é redirecionado para a página
"home.html" usando a função "header". Caso contrário, o usuário é redirecionado para a página
"index.html".
<<<SQL
e SQL;
que é passada para
$pdo
->query()
para ser executada. Como não há parâmetros fornecidos pelo
usuário na consulta SQL, não há necessidade de usar declarações preparadas para evitar injeções de SQL.
htmlspecialchars()
é usada para limpar quaisquer
caracteres que possam ser usados em um ataque XSS. Finalmente, um link é fornecido para voltar ao menu
principal.
$pdo
que recebe o resultado da função
mysqlConnect()
, que é responsável por realizar a conexão com o banco de dados utilizando a
API PDO.
$_POST
, que é
uma superglobal que contém dados submetidos através de um formulário HTTP POST.
Igor Augusto