jun
15
2009
3

Minicurso 8ª Parte: Funções para gerenciamento de sessão / session em PHP

Olá Pessoal,

Esse é o último texto do nosso minicurso. Durante esses meses (e pensar que meu plano inicial seria postar esse minicurso em um mês…) vimos os principais fundamentos do PHP, e foi dada a base necessária para avançarmos para outros tutoriais e aplicações. O que para mim é ótimo pois, sou obrigado a confessar, listar funções básicas do PHP é muito chato… :-P

Hoje vamos tratar das principais funções para gerenciamento de sessões em PHP, e com isso fechar um ciclo básico de aprendizado. Vamos em frente!

session_start()

Essa função inicia a sessão do usuário, e disponibiliza para a página todas as variáveis de sessão desse usuário. Em resumo: somente iniciando a sessão, poderemos trabalhar com sessão em uma página. Ela sempre retorna TRUE. Outra coisa importante: sempre utilize a função session_start() no topo da página, acima de qualquer outro elemento, caso contrário ela pode não funcionar. Veja um exemplo de session_start() em funcionamento:

1
2
3
4
5
6
7
<?php
//INICIO A SESSÃO
session_start();
 
$_SESSION["nome"] = "Diego";
echo $_SESSION["nome"];
?>

session_cache_expire()

Essa função modifica o tempo de expiração da sessão do usuário. Normalmente quando uma sessão fica inativa por mais de 180 minutos ela expira, apagando todas as variáveis gravadas nela. A função session_cache_expire() aumenta ou diminui o tempo de expiração de uma sessão. Recebe como parâmetro o tempo em minutos para expiração da sessão. Precisamos declarar essa função antes de session_start(). Veja um exemplo dessa função:

1
2
3
4
5
6
7
8
<?php
//INICIO A SESSÃO COM UM TEMPO DE EXPIRAÇÃO DE 10 MINUTOS
session_cache_expire(10);
session_start();
 
$_SESSION["nome"] = "Diego";
echo $_SESSION["nome"];
?>

session_id()

Essa função retorna o ID da sessão, ou seja, um código identificador único para cada sessão de usuário. Essa função retorna o ID da sessão de usuário. Veja session_id() em funcionamento:

1
2
3
4
5
6
7
<?php
//INICIO A SESSÃO
session_start();
 
$id = session_id();
echo $id;
?>

Essa função destrói a sessão e todos os dados associados a ela. Retorna TRUE em caso de sucesso, FALSE em caso de erro. Veja um exemplo da função em funcionamento:

1
2
3
4
5
6
7
8
9
10
11
<?php
//INICIO A SESSÃO
session_start();
 
if (session_destroy()) {
    echo "Sessão destruída";
}
else {
    echo "Não foi possível destruir a sessão";
}
?>

Bem pessoal, o minicurso de PHP acaba aqui. Recomendo que todos leiam meu tutorial de PHP e MySQL postado aqui. Entendam como a última etapa do minicurso. Vimos o be-a-bá do PHP, e com isso podemos avançar tranquilamente para outros tópicos. Estudem, revisem e se aprofundem nos assuntos já estudados. Lembrem-se que todo bom programador já soube o mesmo que você: nada ou muito pouco. O que vale é sua dedicação e empenho.

Nos próximos dias teremos algumas mudanças no Projetista: nova cara, novos assuntos, serviços novos etc. Então não se assustem se as coisas mudarem um pouco: eu resolvi profissionalizar a casa. Então, até mais.

Forte abraço,
Diego.

jun
13
2009
1

Minicurso 8ª Parte: Trabalhando com Sessão / Session em PHP

Olá Pessoal,

É eu sei, estou em dívida com os posts de quarta e sexta-feira. Mas tive uma infecção brava, e não consegui chegar perto do PC para postar o conteúdo. Então para compensá-los, vou postar o conteúdo que faltou no sábado e domingo. Assim não atrasamos a programação de segunda.

Essa é a última parte do nosso minicurso (na verdade a penúltima, pois a última fala sobre PHP e MySQL, porém esses foram os primeiros posts do blog). Vale lembrar que esse minicurso visa apresentar os fundamentos do PHP, é a base necessária para que muitos de vocês entendam os próximos tutoriais do blog. Assim sendo, todo o conteúdo aqui é voltado para quem nunca viu nada da linguagem, ou está começando a programar agora (exatamente o perfil de alunos que encontro nos cursos técnicos que ministro lá no SENAC). Portanto, se você ficou frustrado com algum tópico e achou que eu explorei pouco, lembro que a idéia é ser o mais básico possível, de maneira a introduzir o leigo nos pormenores da arte de programar. Bem, o assunto dessa última parte do curso são as famosas SESSÕES. Com elas poderemos montar carrinhos de compras, sistemas de login e autenticação de usuário etc. Portanto, estudem com afinco.

O que é sessão?

A sessão ou session nos permite passar dados de uma página para outra, sem que haja perda de informação ou necessidade usar os métodos POST ou GET. Cada visitante ao acessar o site recebe um identificador único, a ser propagado via URL ou armazenado em um cookie na máquina do usuário. Podemos declarar inúmeras variáveis e associá-las a sessão do usuário, criando ambientes personalizados para cada usuário do nosso site. Para não dificultar a compreensão do conceito, vamos assumir que as variáveis de sessão ficarão armazenadas na sessão do usuário enquanto o seu navegador continuar aberto, ou enquanto a mesma não for encerrada (seja por inatividade, ou por intermédio de alguma função própria para esse fim). Uma vez encerrada, as variáveis de sessão não eliminadas.

Uma sessão é iniciada pela função session_start(), a ser colocada no topo da página, antes de qualquer outro código. Veja o exemplo abaixo:

1
2
3
4
<?php
session_start();
//Resto do código.... <html>...</html>
?>

Salvo em alguns casos especiais, sempre usaremos a função session_start() no início da página e antes de qualquer outro código. O que essa função faz é habilitar o uso de todas as variáveis de sessão dentro da página onde foi chamada, ou seja, dizemos ao PHP que essa página poderá fazer uso de variáveis de sessão e funções para gerenciamento da mesma. Toda sessão pode expirar por inatividade, pois possui algo chamado “tempo de vida” definido em 180 minutos, por padrão. Se precisarmos alterar o tempo de vida de uma função podemos fazer uso de funções específicas como session_cache_expire(), a serem estudadas mais a frente.

Array $_SESSION

Ok! Já entendemos o que é uma sessão, como iniciá-la e para o que ela serve, agora vamos descobrir como armazenar dados na sessão. Todas as informações gravadas em sessão ficam armazenadas em uma variável superglobal definida pelo próprio PHP, chamada $_SESSION. Trata-se de um array onde, uma vez iniciada a sessão, temos acesso aos seus campos e podemos adicionar campos novos. Veja o exemplo abaixo:

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
23
24
25
26
27
28
29
30
31
<?php
//INICIO A SESSÃO
session_start();
 
$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
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) {
//Armazeno duas informações na sessão do usuário: se ele está logado, e o login de acesso. A partir desse momento, qualquer página habilitada a trabalhar com variáveis de sessão, poderá resgatar essas variáveis, manipulá-las, sobreescrevê-las etc.
$_SESSION["logado"] = TRUE;
$_SESSION["user"] = $_POST["login"];
//Uso a função header() para fazer o redirecionamento para a página principal do site, uma vez que o login foi executado com sucesso
header ("Location: home.php");
}
else {
//Caso o login dê errado, devolvo o usuário para a página de login
header ("Location: login.php");
}
?>

A única novidade no script acima é o uso da função header() que, dentre outras coisas, permite o redirecionamento do usuário de uma página para outra. Bem, vimos que esse script funciona em três tempos: o usuário entra com os dados de login na página LOGIN.PHP, esses dados são recebidos e tratados em VALIDALOGIN.PHP e, em caso de sucesso armazenamos dois dados em variáveis de SESSÃO, caso contrário devolvemos o usuário para a tela de login. Já sabemos como armazenar dados na sessão do usuário, agora veremos como resgatá-los. Ao redirecionar o usuário para a página HOME.PHP, devemos verificar se ele de fato está logado no sistema. Sabemos disso através da variável de sessão $_SESSION["logado"], se ela existir e seu valor for TRUE, é porque o usuário fez login e senha corretamente. Vamos ao código:

HOME.PHP

1
2
3
4
5
6
7
8
9
10
11
12
<?php
//INICIO A SESSÃO
session_start();
 
//Verifico se o usuário está logado no sistema
if (!isset($_SESSION["logado"]) || $_SESSION["logado"] != TRUE) {
    header("Location: login.php");
}
else {
    echo "<h1>Seja bem-vindo, ".$_SESSION["user"]."</h1>";
}
?>

Viram? Basta iniciar session_start() e todas as variáveis de sessão declaradas em qualquer lugar da aplicação, estarão disponíveis na página de chamada. Maneiro, né? A novidade do script acima fica por conta da função isset(), que verifica se uma variável existe e, em caso afirmativo retorna TRUE, caso contrário retorna FALSE. E aí, gostaram do uso de sessões? Já conseguem imaginar algumas brincadeiras para se fazer com elas? Amanhã falamos das principais funções envolvendo o uso de sessões. Até lá.

Abraços,
Diego.

jun
08
2009
1

Minicurso 7ª Parte:Funções para gerenciamento de datas no PHP

Olá Pessoal,

Agora é oficial! O Projetista Digital não fica mais às moscas. Atualização de conteúdo aqui será diária, vou explorar melhor os temas dentro de Design e Programação para Web, postar outros minicursos e tutoriais esporádicos. Isso aqui começou como um local para postar minhas aulas no SENAC, e acabou se tornando referência para outros tantos estudantes e programadores que caíram no blog graças ao Google. Em fim, o Projetista Digital cresceu muito e sozinho, e agora eu vou retomar o controle da zona! Vamos botar ordem nisso aqui logo.

Continuando com nosso minicurso de PHP, vamos tratar hoje de um tema importante: gerenciamento e formatação de datas. A documentação oficial do PHP nos traz uma lista enorme de funções, e estudaremos as principais. Recomendo que dê uma olhada na documentação e conheça as demais funções. Bem, chega de papo e vamos em frente!

Função date()

Essa função retorna a data atual do servidor. Podemos especificar o formato como a data é apresentada passando um parâmetro para a função, esse parâmetro é uma string, cujo valor deve ser um dos apresentados na lista a ser verificada na página da documentação dessa função. Por exemplo, se passarmos o parâmetro “d”, a função irá retornar o dia do mês com dois dígitos; “j” retorna o dia do mês com um ou dois dígitos; “l” (L minúsculo) retorna o dia por extenso (em inglês); “m” retorna o mês com dois diígitos; “Y” retorna o ano com 4 dígitos. Em resumo, dependendo do parâmetro passado a função
date() retornará um valor específico referente a data atual (de acordo com o servidor web). Vejamos a função date() em funcionamento:

1
2
3
4
5
6
7
8
9
10
<?php
//Imprimo o dia atual
echo date("d")."<br />";
//Imprimo o mês atual
echo date("m")."<br />";
//Imprimo o ano atual
echo date("Y")."<br />";
//Exibo uma data completa
echo date("d")."/".date("m")."/".date("Y");
?>

Função getdate()

A função getdate() retorna um array com todas as informações referentes a data atual. O array retornado por essa função possui os seguintes campos:

Chave Descrição Exemplo dos valores retornados
“seconds” Representação numérica dos segundos 0 a 59
“minutes” Representação numérica dos minutos 0 a 59
“hours” Representação numérica das horas 0 a 23
“mday” Representação numérica do dia do mês 1 a 31
“wday” Representação numérica do dia da semana 0 (para Sunday) a 6 (para Saturday)
“mon” Representação numérica de um mês 1 a 12
“year” Representação numérica completa do ano, 4 digitos Exemples: 1999 ou 2003
“yday” Numeric representation of the day of the year 0 a 366
“weekday” Representação textual completa do dia da semana Sunday a Saturday
“month” Representação textual completa de um mês, tal como January ou March January a December
0 Segundos desde a época UNIX, similar aos valores retornados pela time() e usados por date(). Dependente do sistema, tipicamente -2147483648 à 2147483647.

Veja um exemplo da função em funcionamento:

1
2
3
4
5
6
7
<?php
//Imprimo o array retornado pela função
$data = getdate();
print_r($data);
//Imprimo apenas a representação textual do mês
echo $data["month"];
?>

Bem, o assunto gerenciamento de datas é um pouco mais complicado. E não é escopo desse minicurso usar termos que possam assustar o usuário iniciante. Conforme avançarmos, faremos alguns exercícios e exemplos de validação de datas, e aí entraremos em tópicos mais complexos. Por enquanto, vocês já podem começar a brincar com essas funções. Até a próxima.

Forte abraço,
Diego.

PS: A parte VIII desse minicurso corresponde ao assunto GERENCIAMENTO DE ARQUIVOS, como já foi postado, recomendo que acompanhem os posts antigos antes de avançar para os próximos tópicos (parte 1, parte 2 e parte 3).

jun
01
2009
0

Minicurso 6ª Parte: percorrendo arrays e matrizes com loops em PHP

Olá Pessoal,

Hoje iremos aprender a percorrer arrays e matrizes usando loops, dessa forma podemos acessar automaticamente todas as posições de um array ou matriz. Bem, vejamos o array abaixo:

1
2
3
4
5
6
7
8
9
10
<?php
//Declaramos o array
$nomes = array("Diego", "Marcelo", "Maria", "João", "Mário", "José", "Juliana", "Fernanda");
//Utilizamos o loop while para percorrer o array
$i = 0;
while ($nomes) {
echo $nomes[$i]."<br />";
$i++;
}
?>

Com certeza essa não é a forma mais indicada para percorrer um array. Porém, iremos utilizar o loop WHILE para percorrer arrays com informações obtidas em uma consulta ao banco de dados. Ao menos vocês viram o loop em funcionamento, e não estranharão quando o usarmos no futuro. Podemos também utilizar o loop FOR para alcançar dados de um array:

1
2
3
4
5
6
7
8
9
10
<?php
//Declaramos o array
$nomes = array("Diego", "Marcelo", "Maria", "João", "Mário", "José", "Juliana", "Fernanda");
//Utilizo a função count() para contar o número de posições que esse array possui
$limite = count($nomes);
//Utilizamos o loop for para percorrer o array
for ($i = 0; $i < $limite; $i++) {
echo $nomes[$i]."<br />";
}
?>

Bem, o uso do loop FOR também não é muito convencional. Na grande maioria dos casos, utilizamos um loop especialmente projetado para percorrer arrays: o FOREACH. O FOREACH é uma estrutura de repetição específica para arrays. Sua sintaxe é uma versão simplificada do FOR. Na prática, ele desmembra um array em seus itens, tratando cada índice e valor de forma isolada, por meio da cláusula AS. O FOREACH possui duas formas de aplicação, uma simplificada e outra mais completa. Apresentaremos ambas, porém a versão completa é mais usual. Veja o FOREACH na prática:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$nomes = array("Diego", "Marcelo", "Maria", "João", "Mário", "José", "Juliana", "Fernanda");
 
//Exemplo 1: Versão compacta - Não trabalha com a chave do elemento
foreach ($nomes as $valor) {
echo "$valor - ";
}
 
//Exemplo 2: Versão completa - Trabalha com a chave e valor do elemento
foreach ($nomes as $chave => $valor) {
echo "$chave => $valor;<br />";
}
?>

Reparem que “$chave” corresponde ao índice do elemento, e valor é o conteúdo desse elemento. Com essa estrutura podemos fazer inúmeras coisas interessantes no PHP. O FOREACH é um loop para percorrer ESPECIFICAMENTE arrays e objetos (a partir da versão 5 do PHP), ou seja se você tentar usá-lo em qualquer outra situação, o PHP retornará uma mensagem de erro. Em resumo: você pode usar outros loops para percorrer arrays, mas não pode usar o FOREACH para percorrer nada além de arrays e objetos.

Já vimos como percorrer arrays simples ou unidimensionais. Mas se precisarmos percorrer matrizes ou arrays multidimensionais? Simples: utilizando loops de vários níveis! Veja o exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$alunos = array(0 => array("nome" => "Diego",
     "idade" => 23,
      "escolaridade" => "Superior Completo"),
      1 => array("nome" => "João",
     "idade" => 30,
     "escolaridade" => "Ensino Médio Completo")
      );
foreach ($alunos as $key => $val) {
echo "Aluno $key<br />";
foreach ($val as $indice => $dado) {
echo "$indice => $dado<br />";
}
}
?>

Por hoje é só pessoal! :-P

Os próximos dois posts falarão sobre as funções para tratamento de arrays! Não percam e até lá!

Abraços,
Diego.

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);
?>
abr
13
2009
2

Minicurso PHP: 4ª Parte – Formulários Web: Enviando email com PHP

Olá Pessoal,

Aproveitaram bem o feriadão? Espero que sim. Vamos retomar a vida normal!!! :-D

Conforme prometido, vamos ver como disparar emails a partir do PHP. Na verdade é bem simples, basta usar a função mail. Uma vez instalado e configurado um serviço de SMTP (seu servidor de hospedagem, provavelmente, já tem isso pronto para você), basta usar a função, passar alguns parâmetros e pronto! Temos um email enviado. A função mail funciona da seguinte forma: mail(destinatário, mensagem, cabeçalhos), onde cabeçalhos são informações como remetente, cópia, cópia oculta e formato do email (texto normal ou html). Veja a função mail em funcionamento.

CONTATO.PHP

1
2
3
4
5
6
7
8
<form action="valida.php" method="post" id="form" name="form">
<label for="nome">Nome: <input type="text" name="nome" id="nome" /></label>
<label for="email">Email: <input type="text" name="email" id="email" /></label>
<label for="telefone">Telefone: <input type="text" name="telefone" id="telefone" /></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>

VALIDA.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
<?php
//Vamos receber os dados do formulário, armazená-los em variáveis e imprimí-los na tela
$nome = $_POST["nome"];
$email = $_POST["email"];
$telefone = $_POST["telefone"];
$assunto = $_POST["assunto"];
$mensagem = $_POST["mensagem"];
 
//Declaro os cabeçalhos do email - From indica o remetente da mensagem
$headers = "From: "$email \n";
//Cc: São os emails que receberão uma cópia da mensagem
$headers .= "Cc: teste2@teste.com.br \n";
//Bcc: São os endereços que receberão uma cópia da mensagem
$headers .= "Bcc: teste3@teste.com.br, teste4@teste.com.br \n";
//Content-type define o tipo do documento - text/plain indica texto comum, já text/html indica texto no formato HTML / charset é o padrão de codificação do conteúdo
$headers .= "Content-type: text/html; charset=iso-8859-1";
 
//Uso a função mail
if (mail("teste@teste.com.br", $mensagem, $headers)) {
echo "Ok";
}
else {
echo "Erro";
}
?>

A função mail() retorna um valor lógico TRUE ou FALSE. Bem, isso é o necessário para se enviar emails com PHP… Nada complicado, né? É provável que você não consiga disparar emails a partir do seu servidor local (localhost), devido a falta de um serviço de SMTP instalado. Recomendo testar direto em sua hospedagem, onde tudo já está devidamente configurado. :-)

Até amanhã, quando falaremos sobre funções para tratamento de strings (adentrando no tema validação de dados com PHP).

Forte abraço e até lá.
Diego.

abr
10
2009
3

Minicurso PHP: 4ª Parte – Formulários Web: Passagem de Parâmetros e Método GET

Olá,

Antes de tratarmos do método GET, vamos resolver o exercício passado na primeira parte desse tutorial sobre passagem de parâmetros e formulários PHP. O exercício era: “vamos montar uma página com o formulário de login. Os dados digitados pelo usuário serão comparados com valores armazenados em dois arrays. Caso o login e senha batam com os valores do array, imprima uma mensagem de sucesso, caso contrário, imprimo uma mensagem de erro”. Abaixo segue a resolução:

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";
}
?>

Bem, vamos ao GET!!!! :-D

MÉTODO GET: FORMULÁRIOS

Vimos que com o método POST os dados de um formulário são enviados ao servidor por uma conexão paralela, de forma oculta. O método GET envia os valores pela URL, de forma aberta, onde todos enxergam os parâmetros passados. Se o formulário acima for enviado pelo método GET, a URL de requisição ao servidor ficará assim: “validaLogin.php?login=user01&senha=senha01″, onde “?” divide o caminho da página dos parâmetros enviados pela requisição; “&” permite o envio de vários parâmetros encadeados, sempre que for necessário enviar um parâmetro novo, precisamos concatená-lo aos demias parâmetros com “&”. Para resgatar parâmetros enviados pelo método GET, usamos o array associativo $_GET, onde os índices equivalem aos atributos NAME dos campos do formulário (assim como o $_POST).

Bem, além da forma de envio de parâmetros, qual a diferença entre POST e GET? O método GET possui limites quanto a capacidade envio de dados (2KB apenas), e não pode ser usado para envio de dados confidenciais, uma vez que todas as informações são passadas abertamente pela URL. Usamos GET para envio de palavras-chave de busca e outros parâmetros curtos que não prejudiquem a segurança do usuário (ou você quer a senha dele passeando por URL’s a fora?). Veja o nosso exemplo anterior reescrito com o método GET:

FORM.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- Nesse formulário irei cadastrar vários campos de diferentes tipos -->
<form action="recebeForm.php" method="get" id="form" name="form">
<label for="nome">Nome: <input type="text" name="nome" id="nome" /></label>
<label for="email">Email: <input type="text" name="email" id="email" /></label>
<label for="telefone">Telefone: <input type="text" name="telefone" id="telefone" /></label>
<label for="assunto">Assunto:
<select name="assunto" id="assunto">
<option value="elogios">Elogios</option>
<option value="sugestoes">Sugestões</option>
<option value="reclamacoes">Reclamações</option>
<option value="outros">Outros</option>
</select>
</label>
<label for="mensagem">Mensagem: <textarea name="assunto" id="assunto"></textarea></label>
<button type="submit">ENVIAR</button>
</form>

RECEBEFORM.PHP

1
2
3
4
5
6
7
8
9
10
11
<?php
//Vamos receber os dados do formulário, armazená-los em variáveis e imprimí-los na tela
$nome = $_GET["nome"];
$email = $_GET["email"];
$telefone = $_GET["telefone"];
//Recebo o valor enviado pelo SELECT assunto. Reparem que o valor resgatado corresponde ao VALUE do option selecionado pelo usuário
$assunto = $_GET["assunto"];
$mensagem = $_GET["mensagem"];
 
echo "Nome: $nome <br /> Email: $email <br /> Telefone: $telefone <br /> Assunto: $assunto <br /> Mensagem: $mensagem";
?>

MÉTODO GET: LINKS

Uma das vantagens do método GET é que com ele não ficamos atrelados a formulários. Uma vez que os parâmetros são passados todos pela URL, é bem fácil enviar parâmetros a partir de links diretamente no atributo HREF da tag <a>. Veja o exemplo abaixo:

MENU.PHP

1
2
3
4
5
6
7
<ul id="menu">
<li><a href="conteudo.php?id=0">Item 1</a></li>
<li><a href="conteudo.php?id=1">Item 2</a></li>
<li><a href="conteudo.php?id=2">Item 3</a></li>
<li><a href="conteudo.php?id=3">Item 4</a></li>
<li><a href="conteudo.php?id=4">Item 5</a></li>
</ul>

CONTEUDO.PHP

1
2
3
4
5
6
7
8
<?php
//Monto um array com todos os conteúdos
$conteudo = array("Conteúdo 0...", "Conteúdo 1...", "Conteúdo 2...", "Conteúdo 3...", "Conteúdo 4...");
//Resgato o ID do conteúdo
$id = $_GET["id;"];
//Imprimo o conteúdo referente ao ID passado pelo usuário
echo $conteudo[$id];
?>

E aí? Gostaram? Esse é o princípio para se trabalhar com consultas a banco de dados (aliás, boa parte desses exercícios que fazemos com arrays são preparatórios para quando trabalharmos com MySQL). Então para encerrar, vou deixar um exercício: tentem construir um sistema de menu e conteúdo parecido com esse último exemplo, usando APENAS UMA PÁGINA. Ou seja, você vai criar uma página chamada “index.php” e apontar todos os links para ela mesma. E o conteúdo da página muda conforme o link de menu que o usuário clique. Para fechar esse quarto ciclo de tutoriais, falaremos sobre como enviar emails a partir do PHP. Até amanhã.

Abraços,
Diego.

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