Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Caro leitor,
Prosseguindo no árduo trabalho de lhe proporcionar uma boa leitura, estamos lançando a terceira edição da
única revista sobre linguagem PHP em português.
A partir deste momento a revista passará para uma nova fase em que os novos voluntários começam a traba-
lhar efetivamente. Fruto da organização interna da revista, da definição de funções e dos objetivos traçados.
Em maio, ministramos uma palestra sobre a PHP Magazine no PHP Road Show, primeiro evento de PHP no
Distrito Federal. Percebemos que a maioria dos participantes já conhecia a revista, o que nos deixa muito satisfei-
tos com nosso trabalho. E, melhor ainda, ao final da palestra várias pessoas se ofereceram para integrar nossa
equipe de colaboradores. Assim, inicialmente damos as boas vindas ao Thiago Inácio, nosso novo design gráfico,
que já está com a mão na massa.
Não podemos deixar de agradecer aos autores que nos prestigiam com seus artigos altamente qualificados.
Agradecemos, principalmente, a todos que já escreveram em outras edições. Aos novos autores, damos as nossas
boas-vindas e já aguardamos os próximos trabalhos.
Estamos também comemorando o marco de 5.000 assinantes que nos prestigiam e nos motivam a seguir
com este trabalho. Agradecemos, portanto, aos moderadores de listas famosas de tecnologia que, de maneira bas-
tante amigável, contribuem na divulgação da revista e da linguagem PHP em si.
Nesta edição você encontrará matérias de temas variados e importantes. A matéria principal traz um peque-
no demonstrativo das IDE’s mais novas para PHP, assunto que tem sido muito discutido nas listas de PHP Brasil
a fora. Há também um artigo sobre segurança, que apresenta alguns passos para programar de maneira segura, e
outro artigo sobre codificação limpa, com dicas para os iniciantes deixarem seus códigos mais limpos e agradá-
veis. Você lerá também outros artigos interessantes sobre PHP-GTK, Guará, Arrays e gerenciamento de conteú-
do de aprendizagem. Além disso, preparamos um resumo sobre o 8º Fórum Internacional de Software Livre
(FISL 8.0) e do 1° PHP Road Show.
Mais uma vez a administração da PHP Magazine agradece a você pelo apoio. Lembramos que o sucesso da
revista é fruto da sua leitura e da sua divulgação entre amigos, colegas de trabalho e em aulas.
Boa leitura.
Editores
Flávio Z. Fagundes, zach@phpmagazine.com.br
Ricardo Aragão, ricardoaragao@phpmagazine.com.br
SUMÁRIO
Administração
Flávio Z. Fagundes, zach@phpmagazine.com.br 3, Criando uma Agenda com PHP-GTK e SQLite
Norberto Augusto, augusto@phpmagazine.com.br
Ricardo Aragão, ricardoaragao@phpmagazine.com.br
7, Tratamento de Vetores e Matrizes em PHP – Parte II
Comercial
Norberto Augusto 11, Escrevendo código PHP de fácil manutenção
Projeto gráfico
14, Ambientes de livre distribuição para gerenciamento
Ricardo Aragão
Flávio Z. Fagundes de conteúdo de aprendizagem
Thiago Inácio
19, Um pequeno tour pelas IDEs: PDT, Delphi e Dream-
Revisão técnica weaver CS3
Ricardo Aragão da Silva
Flávio Zacharias Fagundes
27, Guará: Uma solução em software livre para redução
Revisão português de custos no desenvolvimento de aplicações Web
Camilla Carvalho
31, Segurança no PHP: Os 6 requisitos mínimos
Correspondentes e colaboradores
Adler Brediks Medrado
Cleber Sousa 36, 8º Fórum Internacional de Software Livre
Er Galvão Abbott
Josiane Lima de Oliveira 38, 1º. PHP Road Show
Leandro Schwarz
Pablo Dall'Oglio
Pascoal Vernieri
Como a maioria de vocês já sabe, o PHP conec- ra distribuir seu programa! Lembra do forma-
ta em todos os bancos de dados importantes existen- to .DBF, comum entre as aplicações clipper, ou os
tes (Postgres, Mysql, Oracle, SqlServer, Firebird, arquivos .MDB do MS Access ? Pois é, o SQLite
DB2, dentre outros). Na biblioteca GTK programa- tem o mesmo foco: proporcionar uma estrutura de
mos o acesso ao banco de dados da mesma forma banco de dados simples em arquivo para ser distri-
que uma aplicação web, com a diferença de que o buído juntamente com aplicações standalone, mas é
acesso aos dados será remoto (cliente-servidor). muito melhor que seus antecessores, tendo em vista
Já há algum tempo eu pensava em um exemplo que implementa o padrão SQL92, permite transa-
bem simples de aplicação em PHP-GTK, em que as ções, triggers e permite bancos de dados de até 2
pessoas pudessem copiar e colar e já sair utilizando tebibytes de tamanho (2 na 41), ou seja, é muito by-
conjuntamente com um banco de dados, mas, para te. O banco de dados pode servir várias requisições
isso, o banco de dados teria de ser de fácil instala- de leitura (SELECT) ao mesmo tempo, entretanto,
ção. um lock do arquivo é realizado em operações de
Foi aí que me veio a idéia de desenvolver uma escrita (INSERT, UPDATE, DELETE).
Agenda, afinal, todos nós precisamos controlar nos- A biblioteca de acesso ao SQLite é parte inte-
sos compromissos. E resolvi utilizar o SQLite, um grante do PHP5. Isto quer dizer, que as funções de
banco de dados em sistema de arquivos que poderia criação e acesso ao banco de dados são nativas da
ser compactado junto com a aplicação, dispensando linguagem, o que torna seu uso extremamente sim-
a instalação de um servidor de banco de dados, tor- ples.
nando sua instalação infinitamente simples.
1. SQLite
O SQLite é um banco de dados relacional cuja
estrutura (tabelas, índices, dados) está contida em
um único arquivo no sistema. O acesso aos dados é
implementado por uma biblioteca de funções escri-
tas em C por Richard Hipp e a manipulação dos da-
dos é realizada por meio da linguagem SQL.
Você deve estar acostumado com bancos de
dados relacionais cuja estrutura cliente-servidor exi-
ge a instalação do servidor de banco de dados, que
irá se comunicar com a aplicação, geralmente atra-
vés de uma porta específica, via protocolo TCP/IP.
Como o SQLite não tem nada disto, ele pode ser
compactado juntamente com a aplicação. Imagine
um arquivo chamado "meusistema.db" contendo
todas as tabelas do seu sistema! Você só terá de
Figura 1 – Estrutura do SQLite
compactar este arquivo junto com sua aplicação pa-
// pergunta ao usuário
$dialog = new GtkMessageDialog(...
'Deseja excluir a tarefa ?');
$resposta = $dialog->run();
if ($resposta == Gtk::RESPONSE_YES)
{
// exclui registro
$this->conn->Query("DELETE FROM Figura 2 – Tela da Agenda riada
agenda WHERE data='$data' and hora='$hora'");
}
// fecha diálogo Considerações finais
$dialog->destroy(); Neste artigo escrevemos uma simples aplicação
}
// recarrega as tarefas do mês para controle de compromissos em PHP-GTK com
$this->onMonthChanged(); menos de 200 linhas de código, descartando os co-
} mentários. Como o programa ficou um pouco gran-
Por último, temos o método que é executado quando a de para o formato da revista, optamos por cortar al-
janela da aplicação é fechada, ou seja, destruída. Neste ca- guns pedaços, substituindo-os por “...” por motivos
so, estamos fechando a conexão PDO com o banco SQLite didáticos. Você pode fazer download da aplicação
simplesmente destruindo o objeto de conexão. completa no site da Agenda, em http://pagenda.php-
/*
* método __destruct gtk.com.br
* Executado quando janela for destruída
*/
function __destruct() Referências e links sugeridos
{ [PHP-GTK Brasil] – http://www.php-gtk.com.br
// fecha conexão PDO [Livro PHP-GTK] – http://www.php-gtk.com.br/book
unset($this->conn);
} [Site do autor] – http://www.pablo.blog.br
[Site da Agenda] –http://pagenda.php-gtk.com.br
}
Tratamento de Vetores e
Matrizes em PHP – Parte II
As formas mais utilizadas para a criação e manipulação de vetores e matrizes já fo-
ram explicadas na segunda edição, portanto, o objetivo deste artigo é demonstrar ao
leitor as funções específicas para ordenação de matrizes e vetores em PHP.
Grande parte dos vetores ou matrizes devem ser to que se for negativo, o índice será contado a partir
mesclados, divididos, tratados ou ordenados, para do final do vetor de dados. O terceiro argumento,
permitir que seus dados sejam trabalhados de forma que pode ser omitido, é o número de elementos que
mais adequada pelo sistema. Nas seções seguintes serão copiados para o vetor de saída. Se o número
serão demonstradas algumas das funções da distri- de elementos a serem copiados for positivo, então
buição nativa do PHP específicas para estas tarefas. será copiado este número de elementos na direção
do índice para o final do vetor de dados. Se for ne-
1. Mesclagem, divisão e fatiamento de gativo, será copiado este número de elementos na
vetores direção do índice para o início do vetor de dados.
É possível juntar vetores separados em um úni- Por fim, se este argumento for omitido, o vetor de
co vetor ou ainda dividir um vetor em vários vetores saída conterá os elementos do índice até o final do
diferentes. No script a seguir, foi utilizada a função vetor de dados.
array_merge() para mesclar os dois vetores
$vetor01 e $vetor02 em um único vetor $frutas. <?
Esta função pode ser utilizada para mesclar vários $vetor01 = array(“maça”,“laranja”,
vetores ao mesmo tempo. Para isso, basta acrescen- “melancia”,“pera”);
tar os vetores como argumentos na chamada da fun- $vetor02 = array(“abacaxi”,“pêssego”,
ção. O vetor $frutas foi, também, dividido em sub- “limão”);
vetores de três elementos, no vetor $chunk através $frutas = array_merge($vetor01,
da função array_chunk(). O terceiro argumento $vetor02);
desta função é opcional. Se este argumento for omi- $chunk = array_chunk($frutas,3,false);
tido ou false, serão criados novos índices numéricos
$slice = array_slice($frutas,2,2);
no vetor de saída, ou seja, apenas os valores dos ele-
?>
mentos serão passados. Caso seja true, os mesmos
índices do vetor de dados serão mantidos, sendo
passados para o vetor de saída o valor e o índice dos
elementos. Por fim, uma fatia do vetor $frutas foi As saídas nas telas, mostradas neste artigo
copiada para o vetor $slice através da função ar- foram obtidas através das funções show_vars()
ray_slice(). e print_a() da biblioteca debuglib, constituin-
Observe no script a seguir que a função foi cha- do importante recurso, tanto para programado-
mada com a passagem de três argumentos. O pri- res recém-iniciados, quanto para aqueles com
meiro argumento é o vetor de dados. O segundo ar- muitos anos de experiência. A biblioteca não
gumento é um número correspondente ao índice do faz parte da distribuição padrão do PHP, no en-
primeiro elemento a ser copiado do vetor de dados. tanto, pode ser distribuída e utilizada gratuita-
Se o índice for positivo, o índice será contado a par- mente. O download pode ser feito em http://
tir do primeiro elemento do vetor de dados, enquan- www.atomar.de/.
?>
3. Ordenar os elementos do vetor
O script acima apresenta a projeção na tela a- Existem várias funções específicas para ordenação
baixo. A explicação será fornecida na seqüência. de vetores. Nas seções seguintes serão demonstradas
Inversão de um vetor significa tornar o primeiro algumas delas. A função sort() ordena os elementos de
elemento deste vetor o último elemento de um novo um vetor em ordem crescente. Além do vetor a ser orde-
vetor, o segundo elemento, o penúltimo e assim por nado, um argumento opcional pode ser passado de forma
diante. No script seguinte, foi utilizada a função ar- a identificar como os elementos devem ser comparados
ray_reverse() para inverter o vetor $frutas em um entre si. Se for passada a constante SORT_NUMERIC,
outro vetor nomeado $reverse. Além do vetor a ser os elementos serão comparados numericamente. Se for
invertido, é possível inverter também os índices do passado SORT_STRING, será considerada a ordem
vetor de dados, passando-se um segundo argumento alfabética. Por fim, se o argumento não for passado, será
opcional com valor true. considerado o valor padrão SORT_REGULAR, que
A reversão de um vetor é a troca dos valores faz a detecção automática do tipo de comparação. A fun-
dos elementos pelos seus índices e vice-versa. A ção rsort() ordena os elementos de um vetor em ordem
função array_flip() realiza esta tarefa, bastando a- decrescente e funciona de forma análoga à função sort().
penas que seja passado o vetor a ser revertido, como As funções asort() e arsort() trabalham de forma
pode ser visto no vetor $flip. análoga às funções sort() e rsort(), respectivamente. A
O embaralhamento de vetores pode ser realiza- única diferença entre estes pares de função é que o par
$natsort = $fotos;
natsort($natsort);
$natcasesort = $ fotos;
natcasesort($natcasesort);
?>
Engenheiro eletricista pela Universidade Federal de Santa Catarina (UFSC). Atuando desde 2000 com desenvolvi-
mento WEB, possui sólidos conhecimentos em PHP e MySQL.
Atualmente é mestrando em Engenharia Elétrica no Instituto de Engenharia Biomédica da UFSC e projeta websites e
lojas virtuais como autônomo. Engenheiro eletricista pela Universidade Federal de Santa Catarina (UFSC). Atuando
desde 2000 com desenvolvimento WEB, possui sólidos conhecimentos em PHP e MySQL.
Atualmente é mestrando em Engenharia Elétrica no Instituto de Engenharia Biomédica da UFSC e projeta websites e
lojas virtuais como autônomo.
Introdução sentadas.
Uma das maiores críticas ao PHP é que a lin-
guagem facilita os desenvolvedores a programarem Codificação inline: um grande problema
códigos sujos e de difícil manutenção. O que é mais fácil de entender?
Normalmente, quem faz estas críticas conheceu
PHP a alguns anos atrás, numa época em que os de- if ($a>50) { echo 'Código inválido'; } else
{ echo 'Código válido';}
senvolvedores não se preocupavam com a qualidade
do código e, tendo em vista a facilidade que a lin- ou
guagem nos permite desenvolver, os desenvolvedo- if ($a > 50)
res acabaram por criar códigos do tipo {
'macarronada', onde se misturavam HTML, PHP, echo 'Código inválido';
}
Conexão com bancos de dados e etc. Tudo em um else
único arquivo. {
Realmente este tipo de código existiu e em al- echo 'Código válido';
}
guns locais ainda existem, porém, algumas técnicas
simples nos permitem criar um código limpo e de
Muitos desenvolvedores criam códigos ilegíveis
fácil manutenção.
por medo de ter um código com mais linhas. Ora, é
melhor ter um código maior, porém mais fácil de
O que é código de fácil manutenção? ler, do que um código menor e mais difícil de ler.
O código é de fácil extensão a ponto de novas Outra forma de codificação bem comum é:
funcionalidades serem adicionadas a ele?
Depois de alguns meses, você consegue enten- function somaDoisNumeros($num1,$num2) { return
$num1+$num2; }
der o código facilmente a ponto de adicionar funcio-
nalidades nele?
Não seria mais legível se fosse assim?
Outro desenvolvedor pode entender o código
facilmente a ponto de adicionar funcionalidades ne- function somaDoisNumeros($num1,$num2)
{
le? return $num1+$num2;
Se a resposta for sim para todas as perguntas }
acima, seu código é de fácil manutenção e provavel-
mente este artigo não lhe será muito útil. Caso a res- Reescrever funcionalidades já existentes
posta tenha sido não, sugiro que continue lendo este É muito comum encontrar neste tipo de código
artigo, pois alguma coisa poderá lhe servir. funções definidas pelo usuário que fazem a mesma
coisa que uma função interna do PHP. Isto além de
Quem vai trabalhar com esse código? tornar o código mais difícil de manter, ainda faz
Neste artigo vamos pressupor que o código será com que ele perca em performance, porque ele vai
manipulado por mais de um desenvolvedor. Mesmo executar um procedimento em um nível mais alto
que seja manipulado por apenas um desenvolvedor, sendo que já existe esta funcionalidade pronta para
é interessante utilizar as técnicas e ferramentas apre- ser executada em um nível mais baixo.
Até pouco tempo estudar era visto meramente nhecidos por várias outras denominações, dentre
como um simples ato de ir a uma instituição de ensi- elas a LCMS (Learning Content Management Sys-
no, assistir as aulas e tentar entender os assuntos tem), que será abordado neste texto. No geral, po-
lecionados. Hoje, em muitos lugares, essa visão rém esses ambientes cumprem com o mesmo objeti-
continua a mesma, porém, já existe uma vertente em vo: disponibilizar conteúdos de aprendizagem, e em
prol de uma nova visão: a de que o professor é ape- alguns casos gerenciá-los, sendo que geralmente
nas o mediador no processo de aprendizagem. utilizam uma ou várias dessas teorias pedagógicas
Mediador, nesse contexto é aquele que não é o em suas estruturas.
dono da verdade, mas que tenta traçar um caminho Nos próximos tópicos serão descritos de forma
para que seus alunos possam descobrir suas próprias sucinta esses ambientes, suas características básicas,
verdades por meio de bases sólidas de experiências uma pequena análise e as expectativas referentes à
e vivência auxiliadas por ele, e a partir daí construir possíveis melhoras em seu desenvolvimento.
seu próprio conhecimento.
O importante é fazer com que o aluno evolua O que são LCMS
em seu próprio ritmo sem, no entanto, desprendê-lo Antes de entrar no conceito de LCMS
de um determinado grupo. Para que isso aconteça (Learning Content Management System), é interes-
são necessárias ferramentas que mantenham a aten- sante entender o significado de três outras siglas:
ção desse indivíduo de tal forma que ele seja induzi- CMS, LMS e RLO.
do a fazer atividades necessárias para seu aprendiza- O CMS (Content Management System) ou Sis-
do de maneira espontânea e até, por que não, praze- tema de Gestão de Conteúdo é um software que se
rosa. destina à agregação de vários conteúdos de forma a
A esse tipo de pensamento denomina-se cons- gerenciá-los. Os blogs são exemplos de CMS, ou
trutivismo, onde o estudante constrói seu conheci- seja, você envia um texto e o software mantém a
mento através de pequenas atividades individuais ou organização através da criação de categorias (dias,
coletivas [1]. Teorias como o construtivismo, beha- mês, ano, outros), mantendo para isso mecanismos
viorismo e o cognitivismo tentam descrever como o de publicação em que o usuário só tem que se preo-
processo de aprendizagem acontece. cupar com o seu texto.
Hoje, existem vários ambientes instrucionais Um CMS, contudo, possui uma utilização mui-
que acolhem a essas teorias pedagógicas, dando en- to mais ampla que apenas o gerenciamento de con-
foque mais para uma do que para a outra. No entan- teúdos de blogs, possui várias funcionalidades co-
to, é necessário saber qual utilizar em cada situação. mo, por exemplo, a de administração de artigos, mí-
Na modalidade de ensino a distância existem os dias, sites, relatórios, lojas e cursos. O seu principal
Ambientes Virtuais de Aprendizagem, também co- foco é possibilitar a agilização do processo de publi-
Site do ATutor
Um pequeno exemplo
Seremos objetivos criando um exemplo com
um grid usando MySQL. Primeiramente vamos cri-
ar um projeto:
Figura 4 – Definindo um projeto PHP no Delphi Figura 6 – Configurando uma conexão com o MySql
//Class definition
class Unit11 extends Page
{
public $dduser1 = null;
public $dsuser1 = null;
public $dbmysql1 = null;
public $tbuser1 = null;
}
global $application;
global $Unit11;
?>
Como se pode observar, já estão disponíveis Figura 11 – Visão dos arquivos remotos
Guará
Uma solução em software livre para
redução de custos no desenvolvimento
de aplicações Web
Este artigo tem por objetivo demonstrar o Gerenciador Guará como uma alternativa
desenvolvida em software livre para redução de custos no desenvolvimento de aplica-
ções Web, bem como, comparar as vantagens de sua tecnologia sob as formas tradi-
cionais de desenvolvimento de aplicações Web.
Segurança no PHP
Os 6 requisitos mínimos
Apresentaremos neste artigo 6 requisitos que todo o desenvolvedor PHP deveria con-
templar em sua aplicação. São boas práticas e hábitos simples que implementam um
nível mínimo de segurança em qualquer sistema ou ferramenta desenvolvida com a
linguagem.
A linguagem PHP é, sem dúvida, uma das mais plementada no PHP. É popular entre os desenvolve-
populares quando o assunto é desenvolvimento de dores por tornar o processo de programação muito
aplicações web. Existe, porém, um preconceito mui- mais ágil e prático. É polêmica porque retira tanto
to grande com a linguagem quando a questão é se- do programador quanto do interpretador da lingua-
gurança. Neste artigo veremos 6 requisitos básicos gem a responsabilidade em definir a origem das in-
que toda aplicação deveria possuir e que implemen- formações utilizadas pela aplicação.
tarão o mínimo de segurança em tudo o que você Esta diretiva causou tantos problemas que co-
desenvolver. meçou a vir desabilitada por default a partir da ver-
são 4.2.0 e será eliminada na versão 6. Por isso, se
Conceito: PHP é uma linguagem mais vul- você ainda programa com register_globals ligada,
nerável do que as outras? está mais do que na hora de mudar.
Atualmente impera no mercado de desenvolvi- Observe o seguinte exemplo de código:
mento um preconceito relacionado à segurança de
aplicações PHP. A linguagem é frequentemente al- <?php
vo de duras críticas por parte da própria comunidade $url = “http://www.meusite.com.br/index.php”;
de desenvolvimento, e não é raro presenciarmos a- $errMsg = “Usuário%20não%20autenticado” ;
plicações extremamente vulneráveis que, com toda if (!$autenticado) {
a certeza, dão razão a estas críticas. header(“Location: $url?erro=$errMsg”);
Este preconceito, totalmente equivocado, tem } else {
suas origens especialmente na extrema flexibilidade /* A aplicação age como se o usuário já
de configuração e uso da linguagem e no número estivesse conectado */
cada vez maior de desenvolvedores inexperientes }
que começam sua carreira desenvolvendo aplica- ?>
ções PHP, ignorando questões básicas, seja por falta
de conhecimento ou porque estão procurando agili- Este código verifica por uma variável booleana
zar a sua produção pessoal. chamada $autenticado, que tipicamente viria de uma
Este artigo não é destinado apenas aos que es- sessão aberta quando o usuário se autenticou em
tão começando. É surpreendente o número de de- nossa aplicação ou mesmo de um cookie. Ao utili-
senvolvedores mais experientes que, por terem ad- zarmos os recursos da register_globals, porém, não
quirido vícios, ainda ignoram as questões que apre- estamos dizendo ao interpretador PHP que este dado
sentaremos aqui. deve vir obrigatoriamente de uma destas duas fon-
tes.
Requisito #1: Esqueça register_globals! Sendo assim, o interpretador procurará por esta
Register_globals é sem dúvida alguma a direti- variável em diversas fontes das quais ele obteve in-
va de configuração mais popular e polêmica já im- formações (veja a Figura 1) até encontrá-la, despre-
O problema deste código é utilizar um dado in- A partir de agora, qualquer dado enviado
formado pela query string (uid) sem fazer nenhuma pela query string será primeiro convertido
filtragem, ou seja, nosso script aceitará cegamente para inteiro e somente depois desta conver-
qualquer coisa que for digitada como valor de uid. são é que o utilizaremos. No caso de uma
Observe a seguinte URL: tentativa de Injeção de SQL, nosso script
considerará apenas a parte numérica (198),
http://www.meusite.com.br/script.php?uid= 198% como deveria ser. Além disso, se por um aca-
20OR%20'x'='x' so nosso script receber apenas texto, a fun-
ção settype converterá isto para o número 1,
Após a conversão dos caracteres especiais desta ou seja, cadastre um usuário falso no registro
URL o valor de uid será (sem as aspas duplas): “198 de id 1 da sua base.
or ‘x’=’x’”. Note que, quando concatenarmos isto à Caso a minha query esteja esperando uma
nossa query, ela terá sofrido uma grande modifica- string a solução reside em criar um tratamen-
ção: to que valide esta string. Vejamos um exem-
plo: possuo uma query que busca dados de
um usuário através de seu endereço de e-
SELECT email FROM usuarios WHERE usuario_id =
198 or ‘x’=’x’ mail:
É p o r i s s o q ue a c h a ma mo s d e <?php
“ I n j e ç ã o d e S Q L ” . A p a r t e e m v e r me l h o $sql = “SELECT nome, sobrenome FROM usuarios
WHERE email = ‘“ . $_GET[‘email’] . “’”;
a c i ma é f o r ma d a d e S Q L v á l i d o , ma s
?>
c o mp l e t a me n t e a l i e n í ge n a à n o s s a a pl i c a -
ç ã o: e l e m o d i f i c a o c om p o r t a m e n t o o r i -
ginal da query. Sabemos que um endereço de e-mail é formado
O b s e r ve q u e , c o m u m mí n i mo d e e s - por um nome de usuário, uma arroba e um domínio.
f o r ç o , u m u s u á r i o c o n s e g u i u e x p or t od o s Para fins de simplificação do exemplo, trabalhare-
o s e - ma i l s c a d a s t r a d o s e m n o s s a b a s e d e mos como se o usuário só pudesse usar letras, nú-
d a d o s : c o mo f o i u t i l i z a do o o p e r a d or meros e o caractere de ponto – para quem quiser
“ O R ” e a s e g u nd a c o n di ç ã o ( ‘ x’ = ’ x’ ) é levar a validação de e-mail a sério consulte a RFC
s e mp r e ve r da d e i r a , s e r ã o e xi b i d o s t od o s 822. Poderíamos representar isso através de uma
os registros. expressão regular:
P a r a e v i t a r mo s e s t e t i p o de p r o bl e ma ,
/^[A-Z|a-z|0-9|\.|]+\@[A-Z|a-z|0-9|\.|]+/
d e v e mo s a p l i c a r um t r a t a me n t o à i nf o r -
ma ç ã o a nt e s d e ut i l i z á - l a . Ca s o a mi nh a
Sendo assim, só aceitaremos o dado de endere-
q u e r y – c o mo n e s t e e x e mp l o – e s t e j a e s -
ço de e-mail se ele estiver dentro dos padrões de
p e r a n d o um n ú me r o i n t e i r o , a s ol u ç ã o é
minha expressão regular. Nosso código então ficaria
s i mp l e s : f o r ç a mo s a c o nv e r s ã o d o d a d o
assim:
r e c e bi d o p a r a n ú me r o i nt e i r o :
Er Galvão Abbott trabalha há mais de dez anos com programação de websites e sistemas corporativos com interface
web.
Autodidata, teve seu primeiro contato com a linguagem HTML em 1995, quando a internet estreava no Brasil.
Além de lecionar em cursos, escrever artigos e ministrar palestras, tem se dedicado ao desenvolvimento de aplica-
ções web, tendo nas linguagens PHP, Perl e JavaScript suas principais paixões.
É fundador e líder do UG PHPRS, além de trabalhar como consultor e desenvolvedor para uma empresa norte-
americana da área de segurança.
Analista de Sistemas e Desenvolvedor Web há 10 anos, atua desde 2004 com tecnologias livres entre elas: PHP,
JSP, MySQL, Postgres e MS SQL.
Trabalhou em grandes empresas como Caixa Seguros, ANTT e Brasil Telecom. Atualmente presta serviços de con-
sultoria para a CTIS. Desenvolve também atividades de Consultor Autônomo.