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