HTML - Formulários
Elementos de Formulário
A Tag <form>
A tag <form>
define um formulário HTML para entrada de dados do usuário. É um contêiner para vários controles de formulário, como campos de texto, caixas de seleção, botões de opção e botões. A tag <form>
possui vários atributos que controlam o comportamento e o envio do formulário.
Os atributos comuns da tag <form>
são:
action
: Especifica a URL ou script do lado do servidor para onde os dados do formulário serão enviados para processamento quando o formulário for submetido.method
: Define o método HTTP usado para enviar os dados do formulário. Os dois valores possíveis sãoGET
(padrão) ePOST
.
Exemplo de um formulário básico usando a tag <form>
<form action="/submit-form" method="POST">
<!-- Controles do formulário vão aqui -->
</form>
Controles de Formulário
Controles de formulário são os elementos interativos dentro de um formulário que permitem aos usuários inserir e selecionar dados. HTML fornece vários elementos de controle de formulário, cada um com seu próprio propósito e funcionalidade.
Os controles de formulário comumente usados são:
Controle de Formulário | Descrição |
---|---|
<input> |
O elemento <input> é um controle de formulário versátil. Pode criar vários tipos de entradas, como campos de texto, caixas de seleção, botões de opção e mais. O atributo type determina o tipo de entrada. |
<textarea> |
O elemento <textarea> é usado para entrada de texto de várias linhas. Permite que os usuários insiram grandes quantidades de texto, como comentários ou descrições. |
<select> e <option> |
O elemento <select> cria uma lista suspensa, enquanto os elementos <option> definem as opções disponíveis dentro da lista. Os usuários podem selecionar uma ou mais opções da lista. |
<button> |
O elemento <button> representa um botão clicável. Pode ser usado para enviar o formulário, redefinir o formulário ou executar ações personalizadas usando JavaScript. |
Exemplo mostrando o uso de diferentes controles de formulário
<form>
<label for="name">Nome:</label>
<input type="text" id="name" name="name"><br>
<label for="message">Mensagem:</label>
<textarea id="message" name="message"></textarea><br>
<label for="country">País:</label>
<select id="country" name="country">
<option value="usa">EUA</option>
<option value="canada">Canadá</option>
<option value="uk">Reino Unido</option>
</select><br>
<button type="submit">Enviar</button>
</form>
Usando esses controles de formulário, você pode criar formulários interativos e fáceis de usar que coletam dados dos usuários.
Tipos de Entrada de Formulário
O HTML oferece vários tipos de entrada que determinam o comportamento e a aparência dos controles de formulário. Cada tipo de entrada serve a um propósito específico e fornece uma interface de usuário diferente. Aqui estão alguns tipos de entrada de formulário comumente usados:
-
Entrada de Texto (
type="text"
): A entrada de texto é o controle de formulário mais básico. Ela permite que os usuários insiram uma única linha de texto. É criada usando o elemento<input>
com o atributotype
definido como"text"
. -
Entrada de Senha (
type="password"
): A entrada de senha é semelhante à entrada de texto, mas ela oculta os caracteres inseridos pelo usuário, substituindo-os por pontos ou asteriscos. Isso é útil para informações sensíveis como senhas. É criada usando o elemento<input>
com o atributotype
definido como"password"
. -
Botões de Opção (
type="radio"
): Os botões de opção permitem que os usuários selecionem uma única opção de um grupo de opções mutuamente exclusivas. São criados usando o elemento<input>
com o atributotype
definido como"radio"
. Vários botões de opção com o mesmo atributoname
formam um grupo de opções. -
Caixas de Seleção (
type="checkbox"
): As caixas de seleção permitem que os usuários selecionem várias opções de um grupo de opções. São criadas usando o elemento<input>
com o atributotype
definido como"checkbox"
. Cada caixa de seleção opera independentemente das outras. -
Upload de Arquivo (
type="file"
): A entrada de upload de arquivo permite que os usuários selecionem e enviem arquivos de sua máquina local. É criada usando o elemento<input>
com o atributotype
definido como"file"
. -
Campos Ocultos (
type="hidden"
): Os campos ocultos não são visíveis para os usuários, mas armazenam dados que precisam ser enviados com o formulário. São criados usando o elemento<input>
com o atributotype
definido como"hidden"
. Campos ocultos são frequentemente usados para passar informações adicionais ou metadados para o servidor. -
Botões de Envio e Redefinição (
type="submit"
etype="reset"
): Os botões de envio e redefinição são usados para controlar o envio do formulário. O botão de envio envia os dados do formulário para o servidor para processamento, enquanto o botão de redefinição limpa todos os campos do formulário e os redefine para seus valores padrão. São criados usando o elemento<input>
com o atributotype
definido como"submit"
ou"reset"
, respectivamente.
Estes são apenas alguns exemplos dos tipos de entrada disponíveis em formulários HTML. Cada tipo de entrada fornece uma maneira específica para os usuários interagirem com o formulário e inserirem dados.
Atributos de Formulário
Os elementos de formulário HTML têm atributos que permitem controlar seu comportamento e fornecer funcionalidades. Esses atributos ajudam a identificar campos de formulário, definir valores padrão, fornecer dicas aos usuários e impor validação. Vamos ver alguns atributos de formulário comumente usados:
-
O atributo
name
:O atributo
name
dá um identificador único a um controle de formulário. É importante para o processamento dos dados do formulário no lado do servidor. Quando um formulário é enviado, os dados são enviados como pares de chave-valor, onde o atributoname
serve como chave. Também é usado para referenciar controles de formulário usando JavaScript. -
O atributo
value
:O atributo
value
especifica o valor inicial ou padrão de um controle de formulário. Para entradas de texto e áreas de texto, define o texto padrão que aparece no campo. Para botões de rádio e caixas de seleção, define o valor enviado ao servidor quando o controle é selecionado. Para botões de envio, define o texto que aparece no botão. -
O atributo
placeholder
:O atributo
placeholder
fornece um texto de dica ou exemplo exibido dentro de um controle de formulário quando está vazio. Ajuda os usuários a entender que tipo de entrada é esperada no campo. O texto do placeholder desaparece quando o usuário começa a digitar ou o campo recebe foco. -
O atributo
required
:O atributo
required
é um atributo booleano que especifica se um controle de formulário deve ser preenchido antes que o formulário possa ser enviado. Se um campo obrigatório for deixado vazio, o formulário não será enviado e o usuário será solicitado a preencher as informações ausentes. Esse atributo ajuda na validação do formulário no lado do cliente. -
Os atributos
disabled
ereadonly
:O atributo
disabled
é usado para desativar um controle de formulário, tornando-o não editável e não clicável. Controles de formulário desativados não são enviados com os dados do formulário. O atributoreadonly
, por outro lado, torna um controle de formulário somente leitura, impedindo que os usuários modifiquem seu valor, mas ainda permitindo que seja enviado com o formulário.
Esses atributos fornecem controle e funcionalidade adicionais aos elementos de formulário HTML, permitindo criar formulários mais interativos e amigáveis. Ao usar esses atributos, você pode orientar os usuários, definir valores padrão, realizar validação básica de formulário e controlar o comportamento dos controles de formulário.
Validação de Formulário
A validação de formulário ajuda na integridade dos dados e na experiência do usuário. O HTML oferece atributos e mecanismos para validação de formulário no lado do cliente antes de enviar o formulário ao servidor.
A validação de formulário no lado do cliente usa atributos HTML e JavaScript. Isso permite feedback imediato ao usuário sobre sua entrada e ajuda a evitar que dados inválidos sejam enviados ao servidor.
O atributo pattern
é comumente usado para validação de formulário. Ele permite especificar um padrão de expressão regular que o valor de entrada deve corresponder. Se o valor de entrada não corresponder ao padrão, o formulário não será enviado.
Exemplo do atributo pattern para validação de e-mail
<input type="email" name="email" pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" required>
O atributo pattern
no exemplo valida um campo de entrada de e-mail. O padrão de expressão regular especifica que a entrada deve conter caracteres, dígitos e símbolos específicos, seguidos por um símbolo "@", nome de domínio e um domínio de nível superior.
Para validar campos de entrada numérica, o HTML fornece os atributos min
, max
e step
. Os atributos min
e max
definem os valores mínimo e máximo permitidos para a entrada, enquanto o atributo step
especifica os intervalos numéricos permitidos.
Exemplo dos atributos min, max e step para validação de número
<input type="number" name="quantity" min="1" max="10" step="1" required>
O atributo min
define o valor mínimo permitido como 1, o atributo max
define o valor máximo permitido como 10, e o atributo step
especifica que o valor deve aumentar em 1.
Para campos de entrada de texto, o atributo maxlength
limita o número máximo de caracteres que podem ser inseridos. Isso restringe a entrada a um comprimento específico.
Exemplo do atributo maxlength para validação de entrada de texto
<input type="text" name="username" maxlength="20" required>
O atributo maxlength
limita a entrada a um máximo de 20 caracteres.
Em alguns casos, você pode querer desativar a validação de formulário. O atributo novalidate
pode ser adicionado à tag <form>
para indicar que o formulário não deve ser validado no envio.
Exemplo do atributo novalidate para desativar a validação de formulário
<form action="/submit" method="post" novalidate>
<!-- Controles do formulário -->
</form>
O atributo novalidate
enviará o formulário sem validação no lado do cliente, e qualquer validação precisará ser feita no lado do servidor.
Embora a validação no lado do cliente melhore a experiência do usuário e reduza requisições desnecessárias ao servidor, não se deve confiar apenas nela. A validação no lado do servidor deve sempre ser implementada para garantir a integridade e segurança dos dados, já que a validação no lado do cliente pode ser contornada pelos usuários.
Estilização de Formulários
Você pode estilizar formulários HTML usando CSS para melhorar sua aparência e torná-los mais fáceis de usar. O CSS possui seletores e propriedades que permitem direcionar e estilizar elementos de formulário. Aqui estão algumas maneiras de estilizar formulários.
Estilizando Elementos de Formulário com CSS
Para estilizar elementos de formulário, use seletores CSS para direcionar elementos ou classes específicas. Aqui estão alguns exemplos:
Exemplo: Estilizando campos de entrada de texto
input[type="text"] {
width: 200px;
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 16px;
}
Este CSS estiliza todos os campos de entrada de texto (<input type="text">
). Ele define a largura, o preenchimento, a borda, o raio da borda e o tamanho da fonte.
Exemplo: Estilizando botões
button {
padding: 10px 20px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}
Este CSS estiliza o elemento <button>
. Ele dá ao botão preenchimento, uma cor de fundo, cor do texto, sem borda e um raio de borda. A pseudo-classe :hover
muda a cor de fundo quando o mouse passa sobre o botão.
Pseudo-classes para Elementos de Formulário
As pseudo-classes CSS permitem estilizar elementos de formulário com base em seu estado. Algumas pseudo-classes comuns para elementos de formulário são:
:focus
: Estiliza um elemento quando ele tem foco (por exemplo, quando um campo de entrada é clicado ou selecionado por tabulação).:valid
: Estiliza um elemento quando seu valor é válido com base nas regras de validação.:invalid
: Estiliza um elemento quando seu valor é inválido com base nas regras de validação.
Exemplo: Estilizando elementos de formulário usando pseudo-classes
input:focus {
outline: none;
border-color: #4CAF50;
box-shadow: 0 0 5px #4CAF50;
}
input:valid {
border-color: #4CAF50;
}
input:invalid {
border-color: #ff0000;
}
Aqui, a pseudo-classe :focus
remove o contorno padrão e aplica uma cor de borda e sombra quando um campo de entrada está em foco. A pseudo-classe :valid
estiliza o campo de entrada com uma cor de borda verde quando seu valor é válido, enquanto a pseudo-classe :invalid
aplica uma cor de borda vermelha quando o valor é inválido.
Personalizando a Aparência de Entradas de Formulário
O CSS permite alterar a aparência das entradas de formulário para combinar com seu design. Você pode alterar propriedades como cor de fundo, borda, preenchimento e estilos de fonte.
Exemplo: Personalizando a aparência de entradas de formulário
input[type="text"],
textarea {
background-color: #f1f1f1;
border: none;
border-radius: 4px;
padding: 10px;
font-family: Arial, sans-serif;
font-size: 14px;
}
select {
appearance: none;
background-color: #f1f1f1;
border: none;
border-radius: 4px;
padding: 10px;
font-family: Arial, sans-serif;
font-size: 14px;
background-image: url("arrow-down.png");
background-repeat: no-repeat;
background-position: right 10px center;
}
Isso estiliza os campos de entrada de texto e textarea com uma cor de fundo cinza claro, sem borda, raio de borda, preenchimento e estilos de fonte. O elemento select
é personalizado removendo a aparência padrão, aplicando estilos semelhantes aos campos de entrada e adicionando uma imagem de fundo personalizada para a seta do menu suspenso.
Estilizando Rótulos de Formulário e Mensagens de Erro
Rótulos de formulário e mensagens de erro ajudam a orientar os usuários e fornecer feedback. Você pode estilizá-los com CSS para torná-los atraentes e fáceis de entender.
Exemplo: Estilizando rótulos de formulário e mensagens de erro
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
.error-message {
color: #ff0000;
font-size: 12px;
margin-top: 5px;
}
Isso estiliza os elementos label
como elementos de nível de bloco com uma margem inferior e peso de fonte em negrito. As mensagens de erro são estilizadas com uma cor vermelha, tamanho de fonte menor e margem superior.
Ao aplicar estilos CSS aos elementos de formulário, você pode criar formulários que parecem bons e são fáceis de usar. Teste seus formulários em diferentes navegadores e dispositivos para garantir que eles apareçam de forma consistente e funcionem bem.
Envio de Formulário
O envio de formulário é o processo de enviar dados do formulário do lado do cliente (navegador web) para o lado do servidor para processamento. Quando você preenche um formulário e clica no botão de enviar, os dados do formulário são coletados e enviados ao servidor usando um método e tipo de codificação específicos.
Quando um formulário é enviado, o navegador envia uma requisição HTTP ao servidor com os dados do formulário incluídos no corpo da requisição ou nos parâmetros da URL, com base no atributo method
do formulário. O servidor recebe a requisição, processa os dados do formulário e geralmente responde com uma nova página ou envia dados de volta ao cliente.
Existem dois métodos comuns para enviar dados de formulário:
Método | Descrição |
---|---|
GET | - Os dados do formulário são adicionados à URL como parâmetros de consulta. - Os dados do formulário se tornam parte da URL, separados por um ponto de interrogação ( ? ) e seguidos por pares de chave-valor.- Exemplo: http://exemplo.com/enviar?nome=João&idade=25 - As requisições GET são geralmente usadas para obter dados do servidor e têm limitações de comprimento devido às restrições de tamanho da URL. |
POST | - Os dados do formulário são enviados no corpo da requisição, separados da URL. - Os dados do formulário não são visíveis na URL, tornando-o mais seguro para enviar informações sensíveis. - As requisições POST são comumente usadas para enviar dados ao servidor, como criar ou atualizar registros. |
Quando os dados do formulário são enviados ao servidor, eles são codificados usando um formato específico. Os dois tipos de codificação comuns são:
-
application/x-www-form-urlencoded
:- Este é o tipo de codificação padrão para envio de formulário.
- Os dados do formulário são codificados como pares de chave-valor separados por "e" comercial (
&
). - Caracteres especiais são codificados em URL, substituindo-os por seu código ASCII precedido por um sinal de porcentagem (
%
). - Exemplo:
nome=João&idade=25
-
multipart/form-data
:- Este tipo de codificação é usado quando o formulário inclui uploads de arquivos.
- Os dados do formulário são divididos em várias partes, cada uma representando um campo do formulário ou arquivo.
- Cada parte tem seu próprio conjunto de cabeçalhos e limites para separá-la de outras partes.
- Esta codificação permite a transmissão eficiente de dados binários, como arquivos, junto com outros campos do formulário.
No lado do servidor, os dados do formulário são recebidos e processados com base na tecnologia e framework do lado do servidor sendo utilizados. Linguagens e frameworks comuns do lado do servidor, como PHP, Node.js (Express.js), Ruby on Rails e Python (Django), fornecem maneiras de lidar e acessar dados de formulários enviados através dos métodos GET e POST.
Exemplo de Envio de Formulário
<form action="/enviar" method="post" enctype="multipart/form-data">
<label for="nome">Nome:</label>
<input type="text" id="nome" name="nome" required>
<label for="email">E-mail:</label>
<input type="email" id="email" name="email" required>
<label for="arquivo">Arquivo:</label>
<input type="file" id="arquivo" name="arquivo">
<button type="submit">Enviar</button>
</form>
Lidar com o envio de formulários de forma segura é importante para prevenir ataques como cross-site scripting (XSS) e cross-site request forgery (CSRF). Validação do lado do servidor, sanitização de dados e o uso de tokens CSRF são práticas recomendadas para proteger contra essas vulnerabilidades.