Como salvar informações de um formulário HTML em um banco MySQL
Os formulários HTML permitem que usuários insiram dados diretamente em um site, que depois podem ser armazenados em um banco de dados. Assim, eles formam a interface entre o site e a base de dados, para que entradas como nomes, endereços de e-mail ou comentários sejam registradas e gerenciadas de forma sistemática. Neste guia, mostramos como usar PHP para salvar informações de um formulário HTML em um banco MySQL/MariaDB.
Requisitos
Para salvar dados de um formulário HTML de forma confiável em um banco MySQL ou MariaDB, você precisa de um ambiente que atenda aos seguintes requisitos:
- Servidor web com suporte a PHP: um servidor web Apache ou NGINX com PHP instalado e ativado, para que scripts do lado do servidor possam processar as informações do formulário
- Conhecimentos básicos de PHP e SQL: noções essenciais de PHP e SQL para estabelecer a conexão entre o formulário e o banco de dados e inserir os dados corretamente
- Acesso à configuração do servidor web: possibilidade de acessar o servidor web para que você possa executar scripts PHP, criar tabelas no banco de dados e, se necessário, configurar permissões
Apache, MySQL/MariaDB e PHP fazem parte de uma instalação padrão e funcionam nela. Se o seu servidor foi criado com uma instalação mínima, você precisará instalar e configurar Apache, MySQL/MariaDB e PHP antes de poder continuar.
Como inserir informações de um formulário HTML no MySQL/MariaDB
Para este tutorial, vamos criar um site fictício para um restaurante. O objetivo é oferecer às aos clientes a possibilidade de enviar avaliações diretamente pelo site. Para isso, mostramos como o formulário é processado com um script em PHP e como os dados inseridos são armazenados em um banco de dados MySQL ou MariaDB, usando formulários HTML.
Etapa 1: criar o banco de dados
Em um primeiro passo, criaremos um banco de dados para que você possa armazenar todas as informações do formulário nele. Para isso, primeiro faça login no cliente MySQL/MariaDB pela linha de comando:
mysql -u root -pbashAgora, crie um banco de dados para as avaliações usando o comando SQL CREATE DATABASE:
CREATE DATABASE reviews;bashEm seguida, mude para esse banco de dados:
USE reviews;bashNo nosso exemplo, para simplificar, criaremos apenas uma tabela. Essa tabela terá os três campos a seguir:
- Um campo de ID: esse campo será definido como
AUTO_INCREMENT. Esse parâmetro faz com que o campo aumente automaticamente em 1 a cada novo registro, garantindo que cada entrada receba um valor único. - Nome da pessoa que fez a avaliação: aqui será usado um campo de texto com comprimento de até 100 caracteres.
- Uma avaliação por estrelas: uma avaliação numérica de 1 a 5, tipo de dado
TINYINT. - Verifique os detalhes: um campo de texto armazena detalhes ou comentários sobre as avaliações e é dimensionado com
VARCHAR(4000)para comportar cerca de 500 palavras. Crie agora a tabela com CREATE TABLE:
CREATE TABLE user_review (
id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
reviewer_name VARCHAR(100),
star_rating TINYINT,
details VARCHAR(4000)
);bashEmpresas de médio e grande porte optam pela nuvem da Alemanha. Serviços IaaS e PaaS são para campeões.
- Seguro
- Confiável
- Flexível
Etapa 2: criar usuário
Por motivos de segurança, é recomendável criar um usuário exclusivo para cada banco de dados, especialmente quando esse banco de dados é acessado a partir de um site.
O seguinte comando do MariaDB cria um usuário chamado review_site com a senha JxSLRkdutW e concede a ele acesso ao banco de dados com as avaliações:
GRANT ALL ON reviews.* TO review_site@localhost IDENTIFIED BY 'JxSLRkdutW';bashSe você usa MySQL, o comando GRANT ... IDENTIFIED BY ... não é mais recomendado nas versões atuais. Em vez disso, primeiro deve-se criar o usuário com CREATE USER e depois usar GRANT:
CREATE USER 'review_site'@'localhost' IDENTIFIED BY 'JxSLRkdutW';
GRANT ALL PRIVILEGES ON reviews.* TO 'review_site'@'localhost';
FLUSH PRIVILEGES;bashEtapa 3: criar formulário HTML para o site
Na próxima etapa, vamos criar o formulário HTML para as avaliações dos clientes. Para isso, crie um arquivo chamado reviews.html no seu espaço na web e abra-o para edição. Para, por exemplo, criar o arquivo em /var/www/html com o editor de texto nano, o comando é:
sudo nano /var/www/html/reviews.htmlbashAgora, insira o seguinte conteúdo neste arquivo:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Avaliação do restaurante</title>
</head>
<body>
<p>O que você achou da sua experiência conosco?</p>
<form action="addreview.php" method="POST">
Seu nome: <input type="text" name="reviewer_name"><br><br>
Quantas estrelas você nos daria?
<select name="star_rating">
<option value="1">1 estrela</option>
<option value="2">2 estrelas</option>
<option value="3">3 estrelas</option>
<option value="4">4 estrelas</option>
<option value="5">5 estrelas</option>
</select><br><br>
Sua avaliação: <br>
<textarea name="details" rows="10" cols="30"></textarea><br><br>
<input type="submit" value="Enviar" name="submit">
</form>
</body>
</html>htmlA seguir, alguns pontos que você deve observar sobre este formulário básico:
- Este formulário usa o método
POSTpara enviar dados ao script PHPaddreview.php. - O nome de cada campo de entrada é usado na próxima etapa como nome de variável PHP. Em geral, faz sentido usar para esses valores o nome do campo da tabela do banco de dados.
- Nunca confie em entradas de usuários. Neste exemplo, precisamos de um número de 1 a 5 para a avaliação por estrelas. Se pedíssemos que as pessoas digitassem manualmente, poderiam inserir um valor inválido. Por isso, o ideal é solicitar que escolham valores predefinidos em um menu suspenso.
Etapa 4: criar o script PHP
Na última etapa, criamos o script PHP que insere os dados do formulário no banco de dados. Para isso, estabelecemos uma conexão com MySQL ou MariaDB, capturamos as entradas do formulário e as salvamos na tabela criada anteriormente. Primeiro, crie um arquivo addreview.php no seu espaço de hospedagem e abra-o para edição. É nele que o código PHP será inserido. Para criar o arquivo em /var/www/html usando o nano, o comando é:
sudo nano /var/www/html/addreview.phpbashTodo script PHP deve começar com a tag de abertura do PHP:
<?phpphpEm seguida, adicione um bloco de conexão com MySQL/MariaDB com o endereço do servidor (localhost), o nome do banco de dados, além do nome de usuário e da senha do banco de dados.
$hostname = "localhost";
$username = "review_site";
$password = "JxSLRkdutW";
$db = "reviews";phpO trecho de código a seguir permite estabelecer uma conexão com o banco de dados usando a função mysqli_connect. Além disso, o script exibe um erro caso essa conexão falhe:
$dbconnect = mysqli_connect($hostname, $username, $password, $db);
if (mysqli_connect_errno()) {
die("Database connection failed: " . mysqli_connect_error());
}phpNa próxima etapa, vamos obter os dados inseridos pelo usuário no formulário HTML e salvá-los em variáveis PHP, para que possamos usá-los em seguida no processamento e na inserção no banco de dados:
if (isset($_POST['submit'])) {
$reviewer_name = $_POST['reviewer_name'];
$star_rating = $_POST['star_rating'];
$details = $_POST['details'];phpEm seguida, os dados inseridos pelo usuário precisam ser gravados no banco de dados. Para isso, criamos uma consulta SQL INSERT, que pega os valores das variáveis PHP e os insere nos campos correspondentes da tabela user_review. Para evitar SQL-Injections, usamos aqui Prepared Statements:
$stmt = $dbconnect->prepare("INSERT INTO user_review (reviewer_name, star_rating, details) VALUES (?, ?, ?)");
$stmt->bind_param("sis", $reviewer_name, $star_rating, $details);
$stmt->execute();phpAdicione uma instrução if-else em PHP que exiba uma mensagem de erro caso o processo falhe. Se o processo for bem-sucedido, agradeça ao usuário pela avaliação:
if ($stmt->execute()) {
echo "Obrigado pela sua avaliação.";
} else {
die("Ocorreu um erro.");
}
$stmt->close();
}phpPor fim, feche a instrução if de abertura e adicione uma tag de fechamento do PHP:
}
?>phpSe você receber a mensagem de erro “Falha na conexão com o banco de dados: acesso negado para o usuário ‘review_site’@’localhost’ (com senha: SIM)”, você pode testar as credenciais fazendo login no MySQL/MariaDB pela linha de comando com o seguinte comando:
Etapa 5: testar o script
Para testar o script, acesse reviews.html em um navegador e, em seguida, envie uma avaliação de exemplo. Depois, faça login no banco de dados de reviews pelo cliente MySQL/MariaDB na linha de comando:
mysql -u root -p reviewsbashUse SELECT * FROM user_review para exibir todo o conteúdo da tabela:
MariaDB [reviews]> SELECT * FROM user_review;
+----+---------------+-------------+---------------------------------------------------------+
| id | reviewer_name | star_rating | details |
+----+---------------+-------------+---------------------------------------------------------+
| 1 | Ben | 5 | Calzone deliciosa! |
| 2 | Leslie | 1 | A calzone não é boa. |
+----+---------------+-------------+---------------------------------------------------------+
2 rows in set (0.00 sec)bashO script PHP completo é:
<?php
// Dados de conexão com o banco de dados
$hostname = "localhost";
$username = "review_site";
$password = "JxSLRkdutW";
$db = "reviews";
// Estabelecer conexão com o banco de dados
$dbconnect = new mysqli($hostname, $username, $password, $db);
// Verificar conexão
if ($dbconnect->connect_error) {
die("Falha na conexão com o banco de dados: " . $dbconnect->connect_error);
}
// Executar somente quando o formulário for enviado
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit'])) {
// Validar entradas (verificação mínima)
$reviewer_name = trim($_POST['reviewer_name'] ?? '');
$star_rating = intval($_POST['star_rating'] ?? 0);
$details = trim($_POST['details'] ?? '');
// Validação simples
if ($reviewer_name === '' || $star_rating < 1 || $star_rating > 5 || $details === '') {
die("Por favor, preencha todos os campos corretamente.");
}
// Criar Prepared Statement
$stmt = $dbconnect->prepare("INSERT INTO user_review (reviewer_name, star_rating, details) VALUES (?, ?, ?)");
if ($stmt === false) {
die("Erro no banco de dados: " . $dbconnect->error);
}
$stmt->bind_param("sis", $reviewer_name, $star_rating, $details);
// Executar statement
if ($stmt->execute()) {
echo "Obrigado pela sua avaliação.";
} else {
die("Ocorreu um erro: " . $stmt->error);
}
$stmt->close();
}
// Fechar conexão
$dbconnect->close();
?>php
