mai
25
2009
0

Minicurso 6ª Parte: declarando arrays e matrizes em PHP

Olá Pessoal,

Vamos entrar num assunto novo e muito importante: arrays em PHP. Com eles podemos armazenar inúmeros dados de diferentes tipos, o que aumenta bastante a nossa produtividade. O PHP fornece uma série de funções para gerenciamento de arrays, e é importante conhecer bem o funcionamento dessa estrutura.

Declarando arrays

Em PHP temos duas formas de declarar arrays:

Usando a função array():

1
2
3
4
5
6
<?php
//Declarando um array sem manusear os índices
$nomes = array("Diego", "Marcelo", "Mauro", "João", "José");
//Declarando um array manuseando os índices
$nomes = array(0 => "Diego", 1 => "Marcelo", 2 => "Mauro", 3 => "João", 4 => "José");
?>

Adicionando valor diretamente:

1
2
3
4
5
6
7
<?php
$nomes[] = "Diego";
$nomes[] = "Marcelo";
$nomes[] = "Mauro";
$nomes[] = "João";
$nomes[] = "José";
?>

Para imprimir os valores de um array, basta referenciar o índice respectivo dentro dos colchetes:

1
2
3
4
5
6
7
<?php
echo $nomes[0];
echo $nomes[1];
echo $nomes[2];
echo $nomes[3];
echo $nomes[4];
?>

Lembrando que em PHP os índices de arrays podem ser inteiros (positivos) ou strings, e os valores podem ser de qualquer tipo, inclusive um outro array.

Arrays multidimensionais ou matrizes

Um array pode ter qualquer tipo de dados em seus valores, inclusive um outro array. Arrays que contém, em suas posições, outros arrays são chamados de arrays muldimensionais ou matrizes. Veja o exemplo de um array multidimensional:

1
2
3
4
5
6
7
8
9
10
<?php
$alunos = array(0 => array("nome" => "Diego",
     "idade" => 23,
      "escolaridade" => "Superior Completo"),
      1 => array("nome" => "João",
     "idade" => 30,
     "escolaridade" => "Ensino Médio Completo")
      );
echo $alunos[0]["nome"]; //Irá imprimir o nome Diego - nome do aluno de índice 0
?>

Por hoje é só pessoal. Consolidem o conceito de arrays simples e multidimensional, e amanhã falaremos sobre como percorrer arrays usando loops. Até lá.

Abraços,
Diego.

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á!

mai
15
2009
2

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

Olá Pessoal,

Estou meio sumido, eu sei… A vida tá uma correria só, e foi extremamente complicado atualizar o blog e manter minhas newsletters. Mas vamos retomar nosso curso online de PHP (e vamos até o fim, que eu já comecei a escrever os minicursos de WebStandards e SQL). A partir de agora eu vou dar um foco maior para o blog e buscar aproveitá-lo melhor, afinal, mesmo sem postar há um mês, o número de visitas aumentou consideravelmente (visitantes únicos), tenho recebido comentários e emails pedindo para voltar a ativa. Então, vamos que vamos!!!! :D

O assunto de hoje é tratamento de strings. O PHP possui uma série de funções para trabalhar com texto, e não pretendo esgotar o tema. Iremos abordar as principais funções que a linguagem nos fornece, e você pode consultar a documentação oficial do PHP sempre que precisar.

O PHP é uma linguagem case sensitive, ou seja, faz distinção entre letras maiúsculas e minúsculas. O que pode ser um problema quando precisamos comparar duas strings. Por exemplo, em um formulário de login é necessário comparar o usuário e senhas digitados com os valores correspondentes armazenados em um banco de dados. Digamos agora que o usuário tenha ativado o CAPS LOCK, em PHP o valor “TESTE123″ é diferente de “teste123″, por mais que a sintaxe seja a mesma. Ou seja, teremos um erro no login. Para evitar isso, temos duas funções que colocam uma string inteira para caixa baixa ou caixa alta: strtolower() e strtoupper(). Iremos utilizar o exercício de login e senha feito anteriormente:

LOGIN.PHP

1
2
3
4
5
<form action="validaLogin.php" method="post" id="form" name="form">
<label for="login">Login: <input type="text" name="login" id="login" /></label>
<label for="senha">Senha: <input type="password" name="senha" id="senha" /></label>
<button type="submit">LOGIN</button>
</form>

VALIDALOGIN.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$login = array("user01", "user02", "user03", "user04", "user05");
$senha = array("senha01", "senha02", "senha03", "senha04", "senha05");
//Calculo o tamanho do array $login
$tamArray = count($login);
//Crio uma variável auxiliar
$msg = FALSE;
//Uso um loop para percorrer o array - escolherei o FOR, mas você pode usar qualquer outro
for ($i = 0; $i < $tamArray; $i++) {
if ($_POST["login"] == $login[$i] && $_POST["senha"] == $senha[$i]) {
$msg = TRUE;
break;
}
}
//Verifico se a variável auxiliar $msg saiu do loop com o valor TRUE (indicando login efetuado com sucesso)
if ($msg) {
echo "ok";
}
else {
echo "erro";
}
?>

Pelo código acima se eu digitar USER01, ainda que a senha esteja correta, será retornada uma mensagem de erro. Isso não é bom, afinal não importa se o usuário digita em caixa alta ou baixa, o importante é o valor digitado conferir com o armazenado no banco – array no nosso caso (principalmente para buscas). Para isso usamos as funções strtolower() ou strtoupper(), afinal elas convertem todos os caracteres de uma string para caixa baixa e caixa alta, respectivamente. Veja como ficaria o código:

VALIDALOGIN.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$login = array("user01", "user02", "user03", "user04", "user05");
$senha = array("senha01", "senha02", "senha03", "senha04", "senha05");
//Calculo o tamanho do array $login
$tamArray = count($login);
//Crio uma variável auxiliar
$msg = FALSE;
//Uso um loop para percorrer o array - escolherei o FOR, mas você pode usar qualquer outro
for ($i = 0; $i < $tamArray; $i++) {
//Converto ambas as strings para caixa baixa 
if (strtolower($_POST["login"]) == strtolower($login[$i]) && strtolower($_POST["senha"]) == strtolower($senha[$i])) {
$msg = TRUE;
break;
}
}
//Verifico se a variável auxiliar $msg saiu do loop com o valor TRUE (indicando login efetuado com sucesso)
if ($msg) {
echo "ok";
}
else {
echo "erro";
}
?>

Em muitas ocasiões necessitamos de apenas um pedaço da string, sendo necessário retirar essa parte do texto completo. Para isso usamos a função substr() que admite os seguintes parâmetros: string a ser trabalhada, posição inicial da substring dentro da string maior, tamanho da substring. Agora vocês devem se perguntar: que raios é posição inicial da substring? Explicando: uma string é também conhecida como cadeia de caracteres, ou seja, dentro de um texto cada caractere corresponde a uma posição. Sim, como vocês devem estar visualizando, um texto acaba sendo entendido como um array de caracteres. Veja o exemplo a seguir: imaginem a string “Paulo Silva”. Dizemos que 0 (zero) é a posição inicial da string, correspondente a letra P; na posição 2 temos a letra u; na posição 4 temos a letra o. Uma substring que se inicie na posição 0 e tenha um comprimento de 5 caracteres irá retornar o nome Paulo. Ficou mais claro agora, né? Legal! Outra coisa importante: dentro de uma string, o espaço vazio é contado como um caracter válido, ou seja ocupa uma posição. Ao trabalhar com substrings devemos levar em consideração os espaços vazios, evitando erros desnecessários. Vejamos a função substr() em ação:

SUBSTR.PHP

1
2
3
4
5
6
7
8
<?php
//Declaro a string maior
$string = "João Paulo Rodrigues da Silva Mendes";
//Mando imprimir uma substring de 4 caracteres, iniciando a partir da posição 0
echo substr($string, 0, 4);
//Mando imprimir uma substring de 5 caracteres, iniciando a partir da posição 5
 echo substr($string, 5, 5);
?>

Para praticar, tentem imprimir todas partes do nome acima isoladamente, usando a função substring (será necessário extrair cinco substrings). Uma outra função útil para tratar strings, é a strlen() que retorna o tamanho de uma string. Por tamanho de uma string, nos referimos a quantidade de caracteres que ela possui. Se vamos tratar strings cujo tamanho nos é desconhecido, essa função é fundamental para evitarmos erros em nosso programa. Veja o código abaixo:

STRLEN.PHP

1
2
3
4
5
6
<?php
//Declaro a string maior
 $string = "João Paulo Rodrigues da Silva Mendes";
 //Mando imprimir o tamanho da string
echo strlen($string);
?>

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