Sistemas Dinâmicos Web normalmente são repletos de formulários. Em alguns deles, é útil que o navegador ofereça sugestões de preenchimento automático baseado no histórico de preenchimento de determinado campo. Normalmente os navegadores gravam estes tipos de informação de acordo com o valor do atributo "name" do input de texto (e, talvez, de acordo com a URL em que o campo foi gerado).
Porém, em alguns campos, não desejamos este recurso por uma questão de segurança e/ou confidencialidade.
Para resolver isso, existem algumas soluções:
- Usando o atributo (não oficializado pela W3C) autocomplete="off";
- Gerando o valor do atributo "name" dinamicamente.
Incluir autocomplete="off" no input de texto funciona em alguns navegadores (não todos) e não é um atributo oficializado pela W3C. Então programadores podem usar de acordo com seus valores.
A solução de gerar o "name" dinamicamente é relativamente simples: você gera o name baseado no timestamp (por exemplo), e coloca no input de texto. No mesmo formulário, você pode colocar um input hidden com o valor do name do input de texto e, no PHP, você verifica este valor para recuperar o campo de texto. Outra possibilidade é gravar esse name em sessão e utilizá-lo para recuperar o outro valor. Veja os exemplos abaixo para gerar um campo de texto que será preenchido com CPF:
Usando um input hidden
// Trecho que gera o formulario if (isset($_POST['nome_campo_cpf'])) { $name = $_POST['nome_campo_cpf']; } else { $name = 'cpf'.time(); } echo '<input type="text" name="'.$name.'" />'; echo '<input type="hidden" name="nome_campo_cpf" value="'.$name.'" />';
// Trecho que obtem o CPF do formulario if (isset($_POST[$_POST['nome_campo_cpf']])) { $cpf = $_POST[$_POST['nome_campo_cpf']]; } else { // O usuario provavelmente modificou o formulario e nao enviou o CPF corretamente }
Usando sessão
// Trecho que gera o formulario if (isset($_SESSION['nome_campo_cpf'])) { $name = $_SESSION['nome_campo_cpf']; } else { $name = 'cpf'.time(); } $_SESSION['nome_campo_cpf'] = $name; echo '<input type="text" name="'.$name.'" />';
// Trecho que obtem o CPF do formulario if (isset($_POST[$_SESSION['nome_campo_cpf']])) { $cpf = $_POST[$_SESSION['nome_campo_cpf']]; } else { // O usuario provavelmente modificou o formulario e nao enviou o CPF corretamente }
Observação
Usar as duas soluções em conjunto também é válido.
2 comentários
Muito legal Rubens, eu sempre uso autocomplete="off", o editor que eu uso tambem não reconhecem esse atributo, sempre quando uso o atributo fica em vermelho, outro tambem que fica em vermelho é opacity do css.
Falou e ate mais.
Realmente, Lucas.
O opacity é uma propriedade prevista para o CSS 3, por isso ainda não fica em destaque em todos os editores. Já o autocomplete eu não sei se existe alguma previsão de oficializar.
Postar um comentário
Nota: fique a vontade para expressar o que achou deste artigo ou do blog.
Dica: para acompanhar as respostas, acesse com uma conta do Google e marque a opção "Notifique-me".
Atenção: o blogger não permite inclusão de tags nos comentários, por isso, use algum site externo para postar seu código com dúvidas e deixe o link aqui. Exemplo: pastebin.com