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ão GET (padrão) e POST.

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:

  1. 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 atributo type definido como "text".

  2. 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 atributo type definido como "password".

  3. 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 atributo type definido como "radio". Vários botões de opção com o mesmo atributo name formam um grupo de opções.

  4. 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 atributo type definido como "checkbox". Cada caixa de seleção opera independentemente das outras.

  5. 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 atributo type definido como "file".

  6. 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 atributo type definido como "hidden". Campos ocultos são frequentemente usados para passar informações adicionais ou metadados para o servidor.

  7. Botões de Envio e Redefinição (type="submit" e type="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 atributo type 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:

  1. 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 atributo name serve como chave. Também é usado para referenciar controles de formulário usando JavaScript.

  2. 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.

  3. 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.

  4. 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.

  5. Os atributos disabled e readonly:

    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 atributo readonly, 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:

  1. 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
  2. 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.