mai
19
2009
1

Minicurso 5ª Parte: Validação de formulário em PHP (simples) – aplicação das funções para tratamento de string

Olá Pessoal,

Hoje vamos aplicar algumas das funções para tratamento de string em um exercício simples de validação de formulários. Lembrando que o foco aqui é aplicar e compreender as funções listadas anteriormente. Não vamos atentar aos pormenores da validação de formulário (faremos isso posteriormente, quando estudarmos um pouquinho de segurança). O exercício será composto de um código comentado linha à linha, portanto leiam com atenção e aproveitem:

FORM.PHP

1
2
3
4
5
6
7
8
<form action="validaForm.php" method="post">
        <label for="nome">Nome: <input type="text" name="nome" id="nome" /></label>
        <label for="email">E-mail: <input type="text" name="email" id="email" /></label>
        <label for="telefone">Telefone: <input type="text" name="telefone" id="telefone" maxlength="13" /></label>
        <label for="assunto">Assunto: <input type="text" name="assunto" id="assunto" /></label>
        <label for="mensagem">Mensagem: <textarea name="mensagem" id="mensagem"></textarea></label>
        <button type="submit">ENVIAR</button>
</form>

VALIDAFORM.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
//Trato os campos que o usuário digitou: retiro as tags com stripslashes(), e converto os caracteres especiais para um formato HTML com htmlentities()
$nome = htmlentities(strip_tags($_POST["nome"]), ENT_QUOTES);
$email = htmlentities(strip_tags($_POST["email"]), ENT_QUOTES);
$telefone = htmlentities(strip_tags($_POST["telefone"]), ENT_QUOTES);
$assunto = htmlentities(strip_tags($_POST["assunto"]), ENT_QUOTES);
$mensagem = strip_tags(htmlentities($_POST["mensagem"], ENT_QUOTES), "<a><p><h1><h2><h3><h4><h5><h6>");
 
//Monto a mensagem do email - Os campos a serem preenchidos e enviados pela função mail()
$msg = "<h1>Formulário de Contato</h1><p>O usuário $nome, enviou a seguinte mensagem:</p><p>$mensagem</p>Telefone: $telefone<br />Email: $email";
$headers = "From: 3dm.digital@gmail.com \n";
$headers .= "Cc: utibrasil@ig.com.br \n";
$headers .= "Bcc: luizcf2001@hotmail.com \n";
$headers .= "Reply-To: diego@diegomarques.com \n";
$headers .= "Content-type: text/html; charset=UTF-8";
 
//Edito o email - Verifico se existe o caractere @ no email digitado pelo usuário, com a função strpos(), lembrem-se que ela me retornará a posição de @ dentro da string maior
$posicao = strpos($email, "@");
//Monto uma substring a partir do email digitado pelo usuário com todo o conteúdo após @ (obti a posição de @ na linha acima)
$emailPeq = substr($email, $posicao, strlen($email) - $posicao);
 
//Edito o telefone - Pego o tamanho da string
$foneLen = strlen($telefone);
 
//Vejo se algum campo está
if (($nome == "") || ($email == "") || ($telefone == "") || ($assunto == "") || ($mensagem == "")) {
      header("Location: form.php?msg=vazio");
}
else {
    //Verifico se o usuário inseriu @ no email, e se a substring com o resto do email possui o caracter "."
    if ($posicao == false || strpos($emailPeq, ".") == false) {
           header("Location: form.php?msg=email");
     }
     //Verifico se o usuário digitou 13 caracteres no campo telefone, e se existem os caracteres (, ) e - nas posições correspondentes ao formato (XX)XXXX-XXXX
     else if ($foneLen <> 13 || strpos($telefone, "(") <> 0 || strpos($telefone, ")") <> 3 || strpos($telefone, "-") <> 8) {
        header("Location: form.php?msg=fone");
     }
     else {
         //Envio o email caso os dados estejam todos Ok
         $mail = mail("teste@rj.senac.br", $assunto, $msg, $headers);
          if ($mail == true) {
              echo "Email enviado com sucesso";
          }
          else {
              echo "Email não enviado";
          }
      }
}
?>

E aí? Que tal fazer você também uma pequena validação e melhorar esse código? É um bom desafio.

mai
18
2009
1

Minicurso 5ª Parte: Funções para Tratamento de Strings (Parte 2)

Olá Pessoal,

Vamos continuar com o assunto do post passado: principais funções para tratamento de strings.

Em muitas situações precisamos substituir caracteres ou pedaços de uma string, seja para evitar o uso de palavras proibidas, envio de emails etc. Para esses casos usamos a função str_replace(). Ela admite três parâmetros: texto a ser substituído, texto de substituição e string onde será feita a busca. Veja um exemplo dela abaixo:

STR_REPLACE.PHP

1
2
3
4
5
6
<?php
//Declaro a string maior
 $email = "teste@teste.com.br, teste2@teste.com.br, teste3@teste.com.br";
 //Mando imprimir a string, substituindo o @ por um espaço vazio
 echo str_replace("@", "", $email);
?>

Outra funcionalidade importante é poder buscar uma substring dentro de uma string maior. Por exemplo: preciso descobrir quais usuários possuem o sobrenome Silva; para isso basta buscar dentro da string nome a substring “Silva”. A função strpos() faz o trabalho sujo pra gente (rs). Essa função admite dois parâmetros: a string maior, e a substring a ser buscada. Veja strpos() em funcionamento:

STRPOS.PHP

1
2
3
4
5
6
<?php
//Declaro a string maior
 $nome = "João Paulo Rodrigues da Silva Mendes";
 //Mando imprimir a string, substituindo o @ por um espaço vazio
 echo strpos($nome, "Silva");
?>

A função strpos() retorna a posição inicial (um valor numérico) da substring dentro da string maior (falamos sobre posição da substring acima, ao estudar a função substr()) caso encontre o valor buscado, em caso de erro, a função retorna FALSE ou um valor correspondente (0 ou “” – string vazia). Uma outra função importantíssima é htmlentities(), ela converte todos os caracteres especiais para o padrão HTML (ex: ã seria convertido para ã). Ela admite três parâmetros: a própria string, uma constante para codificação de aspas (ENT_COMPAT – converte apenas as aspas duplas; ENT_QUOTES – converte ambas as aspas; ENT_NOQUOTES – não converterá nenhum dos tipos de aspas), e o charset (o padrão é ISO-8859-1, mas você pode converter conforme o padrão de codificação da sua página). Veja função htmlentities() em funcionamento:

HTMLENTITIES.PHP

1
2
3
4
<?php
$texto = "<a href='#'>Essa declaração será bombástica para o seu avô.</a>";
echo htmlentities($texto, ENT_QUOTES, "UTF-8");
?>

A função html_entity_decode() faz o trabalho inverso de htmlentities, ou seja, ela converte caracteres especiais no formato HTML para o formato de string. Os parâmetros admitidos por essa função são os mesmos de htmlentities(). Veja a função html_entity_decode() em ação:

HTML_ENTITY_DECODE.PHP

1
2
3
4
<?php
$texto = "&lt;a href=&#039;#&#039;&gt;Essa declara&ccedil;&atilde;o ser&aacute; bomb&aacute;stica para o seu av&ocirc;.&lt;/a&gt;";
echo html_entity_decode($texto, ENT_QUOTES, "UTF-8");
?>

Existem situações onde precisamos escapar caracteres como \, ‘ ou “. A função addslashes() coloca uma barra (\) antes desses caracteres, fazendo com que os caracteres citados anteriormente sejam interpretados como parte do texto. Por muito tempo usaram addslashes() como forma de validar dados antes de inserí-los no banco. Esse uso para função é ultrapassado, sendo aconselhável usar a função mysql_real_escape_string(). Veja addslashes() em funcionamento:

ADDSLASHES.PHP

1
2
3
4
<?php
$texto = "Baba O'Riley do The Who é uma das melhores músicas para se viajar, tão boa quanto 'Back in Black' do AC\DC";
echo addslashes($texto);
?>

A função stripslashes() desfaz o trabalho de addslashes(), ou seja, retira as barras (\) de escape dentro de uma string. Veja a função em ação:

STRIPSLASHES.PHP

1
2
3
4
<?php
$texto = "Baba O\'Riley do The Who é uma das melhores músicas para se viajar, tão boa quanto \'Back in Black\' do AC\\DC";
        echo stripslashes($texto);
?>

Uma outra função muito útil para o nosso trabalho é a strip_tags(). Ela retira todos os caracteres HTML e PHP de uma string. Digamos que o usuário tenha inserido código dentro de um campo de formulário, essa função retiraria todo o HTML e PHP, deixando apenas as tags que você permitir. Legal, né? Ela admite dois parâmetros: a string tratada, e os parâmetros a serem permitidos. Veja strip_tags() em ação:

STRIP_TAGS.PHP

1
2
3
4
5
6
7
8
<?php
$texto = "<div style='background-color:red; color:white;'><a href='#'>Link</a></div>";
//Retiro todas as tags da string $texto
echo strip_tags($texto);
echo "<br/>";
//Retiro todas as tags da string $texto, permitindo apenas a tag <a>
echo strip_tags($texto, "<a>");
 ?>

Bem, essas são as principais funções para tratamento de strings. No próximo tutorial usaremos essas funções para realizar uma validação de formulário simples. Até lá!

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com