Você está na página 1de 46

PHP & MySQL

Este manual pode ser redistribuído sob os termos da


Licença Pública Geral (GNU) conforme publicada pela
Free Software Foundation; a versão 2 da Licença ou (a
seu critério) qualquer versão posterior.

CEFET Roraima
Professor: Talles Dino Monteiro Figueiredo
Tecnologias Web

SUMÁRIO
1. PHP: Princípios Básicos
1.1 O que é o PHP?
1.2 A História do PHP
2. Razões para utilizar o PHP
2.1 Custo
2.2 Código fonte aberto
2.3 Licença
2.4 Adequação
3. O PHP é rápido
4. Adicionando PHP à HTML
5. Comentários, Variáveis e Impressão
6. Tipos no PHP
7. Controle
8. Utilizando e definindo funções
9. Strings
10. Arrays
11. Operadores
12. Banco de dados MySQL
13. Instalando o PHP
13.1 Windows
14. O PHP na prática
14.1 Criando as tabelas
14.2 Área administrativa
2

14.2.1 Página inicial (index.php)


14.2.2 Página com as opções (opcoes.php)
14.2.3 Cadastro (cadclientes.php)
14.2.4 Gerenciamento (gerlientes.php)
14.2.5 Alteração(altclientes.php)
14.2.6 Exclusão(excluirclientes.php)
14.2.7 Expressões Regulares
15. Considerações finais
15.1 Resumo
15.2 Referências bibliográficas
3

1. PHP: Princípios Básicos

1.1 O que é o PHP?


É uma linguagem para a criação de scripts para a Web do lado servidor
incorporados na HTML(meta-linguagem), open source(código aberto), e que é
compatível com os mais importantes servidores Web (especialmente o Apache). PHP
significa: PHP: Hypertext Preprocessor. Inicialmente chamada de Personal Home Page
Tolls. O PHP permite incorporar fragmentos de códigos em páginas de HTML normais –
código esse é interpretado à medida que suas páginas são oferecidas aos usuários.
Estritamente falando, o PHP tem pouco a ver com o layout, eventos ou qualquer coisa
relacionada à aparência de uma página Web. De fato, a maior parte do que o PHP
realiza é invisível para o usuário final. Alguém visualizando uma página de PHP não
será definitivamente capaz de afirmar que ela não foi escrita em HTML, porque o
resultado final do PHP é HTML.

1.2 A História do PHP


Rasmus Lerdorf é o criador e a força propulsora original por trás do PHP. A
primeira parte do PHP foi desenvolvida para sua utilização pessoal no final de 1994.
Tratava-se de Wrapper(“envoltório”) de CGI que ajudava a monitorar as pessoas que
acessavam seu site pessoal. No ano seguinte ele montou um pacote chamado Personal
Home Page Tools em resposta à demanda de usuários que por acaso ou por indicações
deparavam-se com seu trabalho. A versão 4 do PHP apresentou a maioria das
funcionalidades necessárias para uma programação eficiente e organizada, mas faltava
algo que outras linguagens tinham, como o Java, por exemplo.Esse algo mais era uma
aderência mais forte à Orientação a Objetos. A versão do PHP 5 veio para cobrir esta
lacuna. Nessa versão é possível finalmente, definir classes, atributos e métodos quanto
à sua visibilidade, instanciação e herança. Está disponível também a definição de
interfaces, construtores, etc.
4

PHP também tem como uma das características mais importantes o suporte a
um grande número de bancos de dados, como dBase, Interbase, mSQL, mySQL,
Oracle, Sybase, PostgreSQL e vários outros. Construir uma página baseada em um
banco de dados torna-se uma tarefa extremamente simples com PHP.

2. Razões para utilizar o PHP


Abaixo será descrito algumas vantagens da linguagem PHP:

2.1 Custo
PHP não custa nada, ele é um produto totalmente FREE. A maioria das pessoas
obtém o PHP via downloads gratuitos, mas é possível ter pago por ele como parte de
uma distribuição Linux, de um livro técnico ou de algum outro produto.

Para fins comparativos, a tabela abaixo mostra alguns números do mercado de


varejo para produtos semelhantes nos Estados Unidos. Todos os preços citados são
para um servidor Web público de um único processador com a correspondente
ferramenta de banco de dados mais comum.

Item ASP Cold Fusion JSP PHP


Desenvolvimento US$ 0-2,499 US$ 800 US$ 0-~2,000 US$ 0
Servidor US$ 1,199 US$ 2,000 US$ 0 – ~35,000 US$ 0
Tabela - Comparação e custos

Como pode-se ver o PHP é o único que não tem custo nenhum tanto para
desenvolvimento quanto para o servidor pois eles são totalmente gratuitos bastando
apenas que se baixe da Internet.

2.2 Código fonte aberto


Eles causam uma certa dúvida sobre a qualidade e a viabilidade de um software
sem nenhum custo. E para piorar o conceito, até bem pouco tempo atrás, acreditava-
se que softwares que não tinham nenhum custo primeiramente chamados de freeware,
shareware ou softwares gratuitos geralmente caíam em uma das 4 categorias:
5

 Programas preenchendo pequenos nichos não-comerciais.


 Programas fazendo trabalhos sujos, de baixo nível.
 Programas para pessoas com "questões" sócio políticas esquisitas.
 Programas contendo “cavalos de tróia”.

De uma vez por todas é tempo de rever alguns conceitos. Atualmente o mundo
se encontra no meio de um turbilhão de mudanças no negócio de software. Hoje,
muitos dos mais importantes (se não a maioria) dos softwares de consumidor são
distribuídos sem custo: clientes de correio eletrônico, navegador da Web, jogos e até
conjuntos completos de serviços de escritórios estão sendo distribuídos tão
rapidamente quanto seus criadores podem criar versões de Web ou configurar
servidores de FTP.

O software para consumidor é visto cada vez mais, como um líder perdido, a
flor que atrai a abelha polinizadora em outras palavras, uma maneira de vender mais
hardware de servidor, sistemas operacionais, conectividade, anúncios publicitários,
utensílios opcionais ou ações da bolsa. Portanto, o preço de varejo total de um
software não é mais uma medida confiável de sua qualidade, nem do nível de
exigência do usuário.

2.3 Licença
A liberdade de código-fonte aberto e software gratuito é garantida por um
grupo de esquemas de licença, sendo o mais famoso a GPL (GNU General Public
License) ou "copyleft". O PHP costumava ser liberado tanto sob a licença de GPL como
por sua própria licença, com cada usuário livre para escolher entre eles. Entretanto,
recentemente isso mudou: agora o programa como um todo é distribuído sob sua
licença extremamente "laissez-faire" do PHP4; ao passo que Zend como um produto
independente é distribuído sob a Q Public License (essa cláusula aplica-se comente se
você separar a Zend do PHP e tentar vendê-lo).
A maioria das pessoas obtém o PHP via downloads gratuitos, mas talvez você
possa ter pagado por ele, seja como parte da distribuição do Linux, de um livro técnico
ou de algum outro produto. Nesse caso, pode-se pensar sobre essa afirmação de que o
PHP não custa nada. Eis o "x" da questão: embora nenhuma taxa seja necessária para
a maioria dos softwares de código-fonte aberto, você pode cobrar a entrega deste
software em um formato mais conveniente como colocá-lo em um disco e despachar o
6

disco para o cliente. Pode-se também cobrar qualquer coisa que o mercado esteja
disposto a pagar por querer realizar certos serviços ou aceitar os riscos que a equipe
de desenvolvimento não quer correr. Por exemplo, pode-se cobrar para garantir que
cada cópia do software que você distribui esteja livre de vírus ou com uma qualidade
razoável, assumindo o risco de ser processado caso um grupo de clientes obtém os
CD-ROM ruins com vírus que apagam a unidade de disco rígido.

Normalmente, usuários de software de código-fonte aberto podem escolher


livremente a melhor equação entre custo/benefício para cada situação particular:
nenhum custo e nenhuma garantia, ou algo caro, mas com bom suporte, ou um meio
termo. Mas até agora não foi feita nenhuma tentativa organizada de vender serviço ao
suporte para o PHP. (embora isso venha a ser um valor agregado no caso do Zend).

2.4 Adequação
Somente a pessoa envolvida ao projeto poderá decidir se o PHP será a
linguagem de sua escolha, seja um desenvolvedor de sites pessoais e comerciais em
larga ou pequena escala. O PHP é flexível, rápido e simples em seus requisitos, no
entanto poderoso nos resultados.

Antes de decidir se irá utilizar o PHP em larga escala para desenvolvedores de


projetos comerciais, devem-se considerar as respostas para as questões seguintes:

Pode-se afirmar com absoluta certeza que irá utilizar sempre o mesmo servidor
da Web em nível de software e hardware? Se não for, deve-se pesquisar alguma
plataforma neutra e disponível para múltiplos servidores de Web: PHP.

Terá sempre e exatamente a mesma equipe de desenvolvimento inteiramente


composta por desenvolvedores em ASP (ou ColdFusion)? Ou irá esperar alguém
disponível quando precisar de desenvolvedores ou de alguém que use uma linguagem
fácil de aprender e sintaticamente similar ao C e ao Perl? Se a pessoa envolvida tem
razões para acreditar que os desenvolvedores em Asp ou ColdFusion podem sumir de
face da Terra, estas ferramentas não devem ser utilizadas, use o PHP.
7

Memória e tempo de leitura no servidor são importantes? Sendo assim, não se


deve usar uma partição de HD transbordando com softwares que requerem muito da
sua preciosa memória, use o PHP.

3. O PHP é rápido
O PHP é surpreendente veloz em sua execução, especialmente quando
compilado um módulo Apache.
O PHP 5 é rápido em quase todas as aplicações, com exceção dos scripts de
CGI. Embora sofra uma ligeira queda de desempenho por ser interpretado em vez de
compilado, isso é de longe superado pelos benefícios que o PHP deriva de seu status
como um módulo de servidor Web. Quando compilado dessa maneira, o PHP torna-se
parte do próprio daemon de http. Como não há nenhuma transferência para e a partir
de um servidor de aplicação separado (como há, por exemplo, com o ColdFusion), as
solicitações podem ser atendidas de maneira mais eficiente possível.
Embora nenhum benchmark sistemático e formal tenha comparado os dois,
muitos comentários e muitos pequenos benchmarks sugerem que o PHP é pelo menos
tão rápido quanto o ASP ou JSP na maioria das aplicações.

4. Adicionando PHP à HTML


4.1. Escapando para o modo PHP:
Agora você deve estar se perguntando: Como o analisador de sintaxe do PHP
reconhece o código de PHP dentro seu documento HTML? A resposta é que você
é quem determina quando o programa deve entrar em ação, utilizando as tags
PHP especiais no início e no final de cada seção do PHP. Esse processo é
chamado escapando da HTML ou, alternativamente, escapando para o PHP.
4.2. Escolhendo estilos de tag do PHP:
4.2.1. Tags canônicas: <?php ?> esse método não corre de ficar obsoleto;
4.2.2. Tags abreviadas: <? ?> é menos portável;
4.2.3. Tags no estilo ASP: <% %>;
4.2.4. Tags de script de HTML: <script language=“PHP”> </script>
4.3. Escrevendo um programa Hello World em PHP:
<?php
print(“Hello World!!<br><br>\n”);
phpinfo();
?>
8

4.4. Incluindo arquivos:


4.4.1. Há quatro funções include:
include(‘filename’);
require(‘filename’);
include_once(‘filename’);
require_once(‘filename’).
Como escolher uma função include preferida? Basicamente você precisa decidir
se deseja se forçar a escrever bom código sob pena de erros fatais. A melhor
alternativa é require(), que travará tudo o que for perfeito em seu código. A
pior alternativa é include_once(), que educadamente ocultará as conseqüências
de alguns de seus maus hábitos de codificação.

5. Comentários, Variáveis e Impressão


5.1. Comentários: Um comentário é uma parte de um programa que só existe para
o leitor humano. Os comentários são de valor inestimável para a próxima ler seu
código, porque facilita a compreensão do que você estava pensando quando escreveu
o código.
Comentários multilinha no estilo C: O estilo multilinha de comentar é como no C:
um comentário inicia com o par de caracteres /* e termina com o par de caracteres */.
Comentários de uma única linha: # e //.
5.2. Variáveis: Eis as coisas mais importantes para conhecer sobre variáveis do
PHP:
 Todas as variáveis no PHP têm um sinal de cifrão ($) na frente;
 Variáveis são atribuídas com o operador =;
5.3. Saída:
 Echo
• echo “exemplo de echo”;
• echo(“exemplo de echo”);
• Você também pode fornecer diversos argumentos à versão
sem parênteses de echo, separado por vírgulas, como em:
• echo "exemplo echo ", "outro exemplo.";
• A versão entre parênteses, porém não aceitará múltiplos
argumentos:
• echo ("exemplo echo ", "outro exemplo.");
 print
9

• Diferentemente de echo, print somente aceita um


argumento;
• Diferentemente de echo, print retorna uma valor que
informa se a instrução foi bem sucedida;
• Tanto echo como print são normalmente utilizados como
argumentos de string:
 print(“3.14875”);
 print(3.14875);

 Aspas simples versus aspas duplas


 print('teste linha \n\n\n toda linha');
 print("<br>teste \"linha \n\n\n toda linha");

 Aspas simples lêem e armazenam seus caracteres literalmente:


 $literalmente=‘minha $variavel escondida!\\n’;
 Produz a saída no navegador:
 Minha $variavel escondida!\n

 Para inserir uma aspas simples(como um apóstrofo) em uma string entre aspas
simples, “escape” a aspa simples com uma barra invertida:
 $literalmente=‘mike\’s homepage’;

6. Tipos no PHP
6.1. Os tipos simples:
Os tipos simples do PHP (inteiro, números de dupla precisão, booleanos, NULL e
strings) devem ser em sua maioria familiar àqueles com experiência em programação.
Inteiros: Inteiros são o tipo mais simples e correspondem ainteiros simples,
tanto positivos como negativos.
Formatos de leitura: Os inteiros podem ser lidos em 3 formatos, que
correspondem à base: decimal, octal e hexadecimal. O formato decimal é o padrão.
Para a maioria das plataformas o maior número inteiro é 2.147.483.647 e o mesmo
corresponde ao valor negativo.
Números de dupla precisão: São os números de ponto flutuante.
Booleanos: O PHP fornece um par de constantes especialmente para utilização
como booleanos: TRUE e FALSE.
10

Strings: São seqüências de caracteres.


6.2. Arrays: Os arrays são um dos recursos mais úteis e interessantes do PHP e
embora pareçam arrays de outras linguagens.

7. Controle
7.1. Operadores:
7.1.1. Lógicos: and, or, &&, ||.
7.1.2. Comparação: ==, !=, <, >, <=, >= e ===.
7.2. Desviando: if-else(ou elseif, para seqüências em cascata) e switch.
7.3. Fazendo Loops: While, do-while(teste no final), for.
Break e continue:
Exemplo:
Break: Encerra o loop mais interno que o contém.
for ($x = 1; $x < 10; $x++)
{
// se $x é ímpar, interrompe
if ($x % 2 != 0)
break;
print("$x ");
}

Continue: Pula para o fim da repetição atual do loop mais interno que o contém. O
efeito da instrução é pular a impressão de qualquer número ímpar.
for ($x = 1; $x < 10; $x++)
{
// se $x é ímpar, interrompe
if ($x % 2 != 0)
continue;
print("$x ");
}

8. Utilizando e Definindo Funções


8.1. Utilizando funções:
Definindo funções

A sintaxe básica para definir uma função é:


11

function nome_da_função([arg1, arg2, arg3]) {


Comandos;
... ;
[return <valor de retorno>];
}

Qualquer código PHP válido pode estar contido no interior de uma função. Como
a checagem de tipos em PHP é dinâmica, o tipo de retorno não deve ser declarado,
sendo necessário que o programador esteja atento para que a função retorne o tipo
desejado. É recomendável que esteja tudo bem documentado para facilitar a leitura e
compreensão do código. Para efeito de documentação, utiliza-se o seguinte formato de
declaração de função:

tipo function nome_da_funcao(tipo arg1, tipo arg2, ...);

Este formato só deve ser utilizado na documentação do script, pois o PHP não
aceita a declaração de tipos. Isso significa que em muitos casos o programador deve
estar atento ao tipos dos valores passados como parâmetros, pois se não for passado
o tipo esperado não é emitido nenhum alerta pelo interpretador PHP, já que este não
testa os tipos.

Valor de retorno
Toda função pode opcionalmente retornar um valor, ou simplesmente executar
os comandos e não retornar valor algum.
Não é possível que uma função retorne mais de um valor, mas é permitido fazer
com que uma função retorne um valor composto, como listas ou arrays.

Argumentos
É possível passar argumentos para uma função. Eles devem ser declarados logo
após o nome da função, entre parênteses, e tornam-se variáveis pertencentes ao
escopo local da função. A declaração do tipo de cada argumento também é utilizada
apenas para efeito de documentação.

Exemplo:

function imprime($texto){
echo $texto;
}

imprime(“teste de funções”);
12

Passagem de parâmetros por referência


Normalmente, a passagem de parâmetros em PHP é feita por valor, ou seja, se
o conteúdo da variável for alterado, essa alteração não afeta a variável original.

Exemplo:

function mais5($numero) {
$numero += 5;
}

$a = 3;
mais5($a); //$a continua valendo 3

No exemplo acima, como a passagem de parâmetros é por valor, a função


mais5 é inútil, já que após a execução sair da função o valor anterior da variável é
recuperado. Se a passagem de valor fosse feita por referência, a variável $a teria 8
como valor. O que ocorre normalmente é que ao ser chamada uma função, o
interpretador salva todo o escopo atual, ou seja, os conteúdos das variáveis. Se uma
dessas variáveis for passada como parâmetro, seu conteúdo fica preservado, pois a
função irá trabalhar na verdade com uma cópia da variável.7 Porém, se a passagem de
parâmetros for feita por referência, toda alteração que a função realizar no valor
passado como parâmetro afetará a variável que o contém.
Há duas maneiras de fazer com que uma função tenha parâmetros passados
por referência: indicando isso na declaração da função, o que faz com que a passagem
de parâmetros sempre seja assim; e também na própria chamada da função. Nos dois
casos utiliza-se o modificador “&”. Vejamos um exemplo que ilustra os dois casos:

function mais5(&$num1, $num2) {


$num1 += 5;
$num2 += 5;
}

$a = $b = 1;
mais5($a, $b); /* Neste caso, só $num1 terá seu valor alterado, pois a
passagem por referência está definida na declaração da função. */

mais5($a, &$b); /* Aqui as duas variáveis terão seus valores alterados. */


13

Argumentos com valores pré-definidos (default)


Em PHP é possível ter valores default para argumentos de funções, ou seja,
valores que serão assumidos em caso de nada ser passado no lugar do argumento.
Quando algum parâmetro é declarado desta maneira, a passagem do mesmo na
chamada da função torna-se opcional.

function teste($php = “testando”) {


echo $php;
}

teste(); // imprime “testando”


teste(“outro teste”); // imprime “outro teste”

É bom lembrar que quando a função tem mais de um parâmetro, o que


tem valor default deve ser declarado por último:

function teste($figura = circulo, $cor) {


echo “a figura é um “. $figura. “ de cor “ $cor;
}

teste(azul);
/* A função não vai funcionar da maneira esperada, ocorrendo um erro no
interpretador. A declaração correta é: */

function teste2($cor, $figura = circulo) {


echo “a figura é um “. $figura. “ de cor “ $cor;
}

teste2(azul);

/* Aqui a função funciona da maneira esperada, ou seja, imprime o texto: “a


figura é um círculo de cor azul” */

Contexto

O contexto é o conjunto de variáveis e seus respectivos valores num


determinado ponto do programa. Na chamada de uma função, ao iniciar a execução do
bloco que contém a implementação da mesma é criado um novo contexto, contendo as
variáveis declaradas dentro do bloco, ou seja, todas as variáveis utilizadas dentro
daquele bloco serão eliminadas ao término da execução da função.

8.2. Funções e escopo de variável:


14

Escopo
O escopo de uma variável em PHP define a porção do programa onde ela pode
ser utilizada. Na maioria dos casos todas as variáveis têm escopo global. Entretanto,
em funções definidas pelo usuário um escopo local é criado. Uma variável de escopo
global não pode ser utilizada no interior de uma função sem que haja uma declaração.

Exemplo:
$php = “Testando”;

function Teste() {
echo $php;
}

Teste();

O trecho acima não produzirá saída alguma, pois a variável $php é de escopo
global, e não pode ser referida num escopo local, mesmo que não haja outra com
nome igual que cubra a sua visibilidade. Para que o script funcione da forma desejada,
a variável global a ser utilizada deve ser declarada.

Exemplo:
$php = “Testando”;

function Teste() {
global $php;
echo $php;
}

Teste();

Uma declaração “global” pode conter várias variáveis, separadas por vírgulas.
Uma outra maneira de acessar variáveis de escopo global dentro de uma função é
utilizando um array pré-definido pelo PHP cujo nome é $GLOBALS. O índice para a
variável referida é o próprio nome da variável, sem o caracter $. O exemplo acima e o
abaixo produzem o mesmo resultado:

Exemplo:
$php = "Testando";

function Teste() {
echo $GLOBALS["php"]; // imprime $php
echo $php; // não imprime nada
}

Teste();
15

9. Strings e funções de string


9.1. Strings no PHP: Strings são seqüências de caracteres que podem ser tratadas
como uma unidade e atribuídas a variáveis. A maneira mais simples para especificar
uma string em um código do PHP é incluí-la entra aspas, seja aspas simples (‘) ou
aspas duplas (“), como a seguir:
$minha_string = ‘A literal string’;
$outra_string = “outra string”;
A diferença entre aspas simples e aspas duplas depende da interpretação que o
PHP dá aos caracteres entre os sinais de aspas, antes de criar a string em si.

Uma string é uma série de caracteres. No PHP, um caracter é o mesmo que um


byte, ou seja, há exatamente 256 caracteres diferentes possíveis. Isto implica que o
PHP não tem suporte nativo ao Unicode.

Nota: Não há nenhum problema nas strings se tornarem muito grandes. Não há
nenhum limite para o tamanho de strings imposta pelo PHP, então não há razão para
se preocupar com strings longas.

Sintaxe

Uma string literal pode ser especificada de três formas diferentes.

 apóstrofo

 aspas

 sintaxe heredoc

Apóstrofos

A maneira mais simples para especificar uma string é delimitá-la entre apóstrofos
(o caracter ').

Para especificar um apóstrofo. você precisará "escapá-la" com uma contra barra
(\), como em muitas outras linguagens. Se uma contra barra precisa ocorrer antes de
um apóstrofo ou no final da string, você precisa duplicá-la. Note que se você tentar
escapar qualquer outro caracter, a contra barra também será impressa! Então
geralmente não é necessário escapar a própria contra barra.

Nota: No PHP 3, um aviso com nível E_NOTICE será emitido quando isto acontecer.
16

Nota: Diferentemente das duas outras sintaxes, variáveis não serão substituídas
quando elas ocorrerem dentro de strings delimitadas por apóstrofes.

echo 'isto é uma string comum';


echo 'Você pode incluir novas linhas em strings,
dessa maneira';
echo 'Arnold disse uma vez: "I\'ll be back"';
// saida: ... "I'll be back"
echo 'Você tem certeza em apagar C:\\*.*?';
// saida: ... apagar C:\*.*?
echo 'Você tem certeza em apagar C:\*.*?';
// output: ... apagar C:\*.*?
echo 'Estou tentando incluir uma nova linha \n neste ponto';
// output: ... nova linha \n neste ponto

Aspas

Se a string é delimitada entre aspas ("), o PHP entende mais seqüências de


escape para caracteres especiais:

Seqüências de escape

Seqüência Significado
\n fim de linha (linefeed ou LF ou 0x0A (10) em ASCII)
\r retorno de carro (carriage return ou CR ou 0x0D (13) em ASCII)
\t TAB horizontal (HT ou 0x09 (9) em ASCII)
\\ contra barra ou barra invertida
\$ sinal de cifrão
\" aspas
a seqüência de caracteres batendo a expressão regular dos caracteres
\[0-7]{1,3}
em notação octal
\x[0-9A-Fa-f] a seqüência de caracteres batendo a expressão regular de um
{1,2} caracter em notação hexadecimal

Novamente se você tentar escapar qualquer outro caracter, a contra barra será
impressa também!

Mas o mais importante dado a respeito de strings delimitadas por aspas está no
fato de que nome de variáveis serão substituídos.

Heredoc

Outra maneira para delimitar strings é utilizando a sintaxe heredoc ("<<<"). É


informado um identificador depois de <<<, então a string, e então o mesmo
identificador para fechar a delimitação.
17

O identificador de fechamento precisa começar na primeira coluna da linha. Além,


o identificador utilizado precisa seguir as mesmas regras de nomeação que qualquer outro
rótulo no PHP: só pode conter caracteres alfanuméricos e sublinhados, e precisa começar
com um caracter não numérico ou sublinhado.

Atenção

É muito importante verificar que a linha do identificador de fechamento não contenha


nenhum outro caracter, exceto, possivelmente um ponto e vírgula (;). O que significa
que o identificador não pode ser endentado, e que não pode haver nenhum espaço ou
tabulações antes ou depois do ponto e vírgula.

Textos heredoc se comportam como strings delimitadas por aspas, com apenas uma
diferença. Você não precisa escapar apóstrofos e aspas em seus heredocs, mas você ainda
pode continuar utilizando os códigos de escape listados acima. Variáveis são substituídas,
mas o mesmo cuidado precisa ser tomado quando expressando variáveis complexas dentro
de heredocs assim como nas strings.

Exemplo de delimitação de strings heredoc

<?php
$str = <<<EOD
Exemplo de uma string
distribuída em várias linhas
utilizando a sintaxe heredoc.
EOD;

/* Exemplo mais complexo, com variáveis */


class foo
{
var $foo;
var $bar;

function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}

$foo = new foo();


$name = 'Meu nome';

echo <<<EOT
Meu nome é "$name". Eu estou imprimindo $foo->foo.
Agora, eu estou imprimindo {$foo->bar[1]}.
Isto deve imprimir um 'A' maiúsculo: \x41
18

EOT;
?>

Nota: O suporte a heredoc foi acrescentado no PHP 4.

Interpretação de variáveis

Quando uma string é especificada dentro de aspas ou heredoc, variáveis são


interpretadas dentro delas.

Há dois tipos de sintaxe, um simples e um complexo . A sintaxe simples é a


mais comum e conveniente, provendo uma maneira de interpretar uma variável, um
valor de array ou uma propriedade de objeto.

A sintaxe completa foi introduzida no PHP 4, e pode ser reconhecida por chaves
({}) envolvendo a expressão.

Sintaxe simples

Se um sinal de cifrão ($) é encontrado, o interpretador tentará obter tantos


identificadores quanto possíveis para formar um nome de variável válido. Envolva o nome
da variável com chaves se você deseja explicitamente especificar o fim do nome.

$cerveja = 'Heineken';
echo "O sabor das '$cerveja's é otimo"; // funciona, "'" é um caracter inválido para
nome de variáveis
echo "Ele bebeu algumas $cervejas"; // não funciona, 's' é um caracter válido para
nome de variáveis
echo "Ele bebeu algumas ${cerveja}s"; // funciona

Similarmente, você também pode interpretar um índice de array ou uma

propriedade de objeto. Com índices de arrays, o colchete de fechamento (]) marca o


final do índice. Para propriedades de objetos se aplicam as mesmas regras das variáveis
comuns, embora não exista um truque para as propriedades de objetos como para as
variáveis.

$frutas = array( 'morangos' => 'vermelho' , 'banana' => 'amarelo' );

// note que isto funciona diferentemente fora de delimitadores de string


echo "Uma banana é $frutas[banana].";

echo "Este quadrado tem $square->width metros de lado.";

// Não funciona. Para uma solução, veja a sintaxe complexa.


19

echo "Este quadrado tem $square->width00 centímetros de lado.";

Para qualquer coisa mais complexa, você precisa utilizar a sintaxe complexa.

Sintaxe complexa (chaves)

Isto não é chamado sintaxe complexa porque a sintaxe em si é complexa, mas


porque você pode incluir expressões complexas desta maneira.

De fato, você pode incluir qualquer valor no que esteja no espaço de nomes dentro
de strings com esta sintaxe. Você simplesmente escreve a expressão da mesma maneira que
faria fora da string, e então incluí-la entre chaves. Desde que você não pode escapar '{', esta
sintaxe somente será reconhecida quando o $ é imediatamente seguido de um {. (Utilize "{\
$" ou "\{$" para obter um literal "{$"). Alguns exemplos para tornar isso mais claro:

$maravilhoso = 'fantástico';
echo "Isto é { $maravilhoso}"; // não funciona, imprime: Isto é { fantástico}
echo "Isto é {$maravilhoso}"; // funciona, imprime: Isto é fantástico
echo "Este quadrado tem {$square->width}00 centímetros de lado.";
echo "E isto funciona: {$arr[4][3]}";

// E isto está errado pela mesma razão


// como $foo[bar] é incorreto fora de uma string.
echo "Isto está errado: {$arr[foo][3]}";

echo "Você deve fazer desta maneira: {$arr['foo'][3]}";


echo "Você pode sempre escrever {$obj->values[3]->name}";
echo "Este é o valor da variável chamada $name: {${$name}}";

Acesso a caracteres da string

Caracteres nas strings podem ser acessados apenas especificando o


deslocamento baseado em zero do caracter desejado depois da string dentro de
chaves.

Nota: Para manutenção de compatibilidade, você ainda pode utilizar colchetes. Entretanto,
esta sintaxe for marcada como em extinção desde o PHP 4.

Alguns exemplos com strings

<?php
/* Assimilando uma string. */
$str = "Isto é uma string";
20

/* Anexando a ela. */
$str = $str . " com uma pouco mais de texto";

/* Outra maneira de acrescentar, incluindo uma nova linha. */


$str .= " e um fim de linha no final (duh).\n";

/* Esta string será mostrada assim '<p>Número: 9</p>' */


$num = 9;
$str = "<p>Número: $num</p>";

/* Isto será apenas '<p>Número: $num</p>' */


$num = 9;
$str = '<p>Número: $num</p>';

/* Pega o primeiro caracter de uma string */


$str = 'Isto é um teste.';
$first = $str{0};

/* Pega o último caracter da string. */


$str = 'Isto ainda é um teste.';
$last = $str{strlen($str)-1};
?>

10. Arrays
10.1. O uso de arrays: Para acessar o conteúdo de uma variável, o nome é utilizado.
Se a variável é um array, o seu conteúdo é acessado usado o nome e a chave do
índice. A chave indica que podemos acessar o seu conteúdo. O índice está posicionado
entre colchetes depois do nome do array. Tipo $products[0] e $products[1]. O
elementos zero é a primeira posição do array. O PHP segue o mesmo esquema de
numeração do C, C++, Java e outras linguagens.
10.2. Usando Loops para acessar um Array: Como o array é indexado por uma
seqüência de números, nós podemos usar um loop “for” para simplificar a exibição dos
dados do array:
For ( $i = 0; $i<3; $i++)
echo “$products[$i]”;

11. Operadores
11.1. Operadores aritméticos: +, -, *, / e % (resto)
11.3. Operadores de incremento: ++.
11.4. Operadores de atribuição: =, +=, -=, /= e %=
10.5. Operadores de comparação: ==, !=, <, >, <=, >= e ===.
21

12. Banco de dados MySQL


O MySQL é rápido e estável. Está disponível através de um esquema de
licenciamento duplo, tanto como um software livre quanto como um software
comercial. Todo o software MySQL é disponibilizado sob o licenciamento GNU General
Public License (GPL), no entanto, você também poderá adquirir o MySQL em situações
onde desejar ou necessitar uma licença comercial. O MySQL suporta a grande maioria
dos recursos considerados importantes pelos usuários e administradores de banco de
dados, como, por exemplo, transações, lock de registros, chaves estrangeiras,
subconsultas e pesquisa full-text. Na versão 5.0 temos ainda a inclusão de stored
procedures. No MySQL, você tem várias opções para interface do usuário. As três
interfaces do usuário mais populares são a interface de linha de comando
mysql(também conhecida como monitor MySQL), o MySQL Control Center(MySQLCC,
para abreviar) e o phpMyAdmin.
O monitor MySQL vem com a sua instalação básica. É uma interface de linha de
comando. Está sempre disponível como uma opção, é simples de usar e funciona em
todas as plataformas.
O MySQL Control Center (MySQLCC) é uma interface gráfica de usuário. É escrita
usando o kit de ferramentas Qt.
O phpMyAdmin é uma interface baseada na Web para usar o MySQL. É muito
popular entre os provedores de Internet que fornecem o MySQL para o
desenvolvimento de aplicações Web.
O desenvolvimento de sites dinâmicos traz consigo a necessidade de acesso a
algum tipo de banco de dados relacional. Em alguns tipos de sites somente para
algumas tarefas simples como guardar usuários e senhas, e em outros sites como
sistemas de banco de dados complexos, em que o site não funciona sem esses dados
(uma loja virtual por exemplo). O PHP é uma das linguagens com maior disponibilidade
de acesso a banco de dados, pois através do PHP podemos acessar o Oracle, SQL
Server, PostgreSQL, FireBird, MySQL, Informix, SQLite e vários outros banco de dados,
além de ser possível utilizar drivers ODBC para acesso aos bancos de dados que não
possuem um módulo específico no PHP.

Para utilização do mysql (módulo antigo), devemos primeiro conectar ao


gerenciador do MySQL. Isso é conseguido com a função mysql_connect cuja sintaxe é:
22

mysql_connect(servidor, usuário, senha,novo_link)


<?php
$_con = @mysql_connect("localhost","root","");
if($_con===FALSE) {
echo "Não foi possivel conectar ao MySQL " .
mysql_error();
exit;
}

mysql_select_db("BD_PHP5",$_con);
if($_con===FALSE) {
echo "Não foi possivel conectar ao Banco de Dados " .
mysql_error();
exit;
}
?>

O parâmetro servidor indica em qual máquina o gerenciador do mysql está


sendo executado, e opcionalmente a porta de conexão. O parâmetro novo_link
determina que, caso seja feita uma nova conexão ao servidor mysql e a conexão tenha
os mesmos parâmetros de uma já existente, a conexão anterior seja retornada como
resultado da função (ou seja, uma nova conexão não é aberta) ou uma nova conexão
seja criada (novo_link=TRUE). Agora que temos o banco de dados selecionado,
podemos realizar qualquer operação com as tabelas disponíveis no banco, tais como:
incluir novos registros, alterar registros existentes, excluir registros, executar
consultas nas tabelas, incluir novas tabelas no banco de dados, alterar ou excluir
tabelas existentes.

mysql_query(comando_SQL,conexão)
Para executar qualquer consulta no banco de dados, devemos utilizar a função
conforme exemplo acima. O parâmetro conexão é opcional e se não for informado, a
função utiliza a última conexão aberta com o MySQL. O resultado dessa função em
caso de fracasso é falso e em caso de sucesso depende do tipo de comando que foi
enviado ao banco de dados. Após e execução de mysql_query, pode-se obter o número
de linhas retornadas no caso de comandos que retornam um identificador.

// incluir alguns registros na tabela Usuario


$_sql = "INSERT INTO Usuario VALUES";
$_sql .= "(NULL,'jose','antonio','ze',5,'ze@tutorial.com.br'),";
$_sql .= "(NULL,'maria','jose','maze',5,'maze@tutorial.com.br'),";
23

$_sql .= "(NULL,'raimundo','antonio','mundico',5,'mundico@tutorial.com.br'),";

$_res = mysql_query($_sql,$_con);

mysql_fetch_array(identificador,tipo)
Retorna um array, com índices tanto numéricos quanto como chaves
associativas, do registro atual da consulta.
<?while($array_cliente = mysql_fetch_array($_res)) {?>
<tr bgcolor="ebebeb">
<td width="19%" height="25"><font face="Arial" size="2">
<?echo $array_cliente['inclusao_user'];?>
</font></td>
<td width="33%" height="25"><font face="Arial" size="2">
<?echo $array_cliente['nome_user'];?>
</font></td>

13. Instalando o PHP


13.1 Windows
Você pode fazer a instalação do PHP, Apache e MySQL no Windows por
intermédio de pacotes ou manualmente. Se você optar por fazer a instalação pelo
pacote você pode usar o Appserv que pode ser encontrado em
http://www.AppServNetwork.com, e trás nesse pacote o Apache, o PHP e o MySQL.

No Browser, digite: se você tiver local na sua máquina:

http://localhost/

14. O PHP na prática


Este tutorial serve para qualquer pessoa que queira construir sites Web mais
complexos do que seria com páginas HTML estáticas. Assume-se que o leitor esteja
familiarizado com o HTML e possua conhecimento básico do funcionamento Web sem
pressupor nenhuma experiência de programação, além disso.
Vamos fazer um cadastro de clientes onde teremos a opção de incluir novos
cadastros, alterar os dados existentes, excluir e buscar determinado cliente.

Cadastro de clientes
24

Área do sistema para a inclusão de novos clientes. Abaixo, segue a estrutura


da tabela.

tb_clientes
- id_user  Número auto – incremento, vai ser a chave primária
- inclusao_user  Data e horário do cadastro do cliente
- user  apelido do cliente
- senha  senha do cliente
- nome_user  Nome completo
- end_user  Endere
- bairro_user  Bairro
- email_user  Email
- tel_user  Telefone
- cidade_user  Cidade
- estado_user  Código do Estado

tb_estados - Essa tabela contém os estados do Brasil.


- id_estado  Número auto – incremento, vai ser a chave primária
- estado  Nome do Estado
- uf  Sigla do Estado

tb_user – Essa tabela contém os usuários que tem permissão para mexer na área
administrativa
- id_user  Número auto – incremento, vai ser a chave primária
- apelido  apelido do usuário que vai ter acesso ao sistema.
- senha  senha do usuário que vai ter acesso ao sistema.

14.1 Criando as tabelas


A Ferramenta de Modelagem DBDesigner
O DBDesigner é uma ferramenta para modelagem de banco de dados que
integra a criação de diagramas, modelagem, construção e manutenção de base de
dados e foi otimizada para trabalhar com o sistema gerenciador de banco de dados
MySQL. É uma ferramenta desenvolvida pela fabForce.net e é livre se usada sob
licença GNU GPL (General Public License), classificando-se como software livre.
25

A integração com o MySQL é total. Depois de modelado o banco, o DBDesigner


pode sincronizar o projeto com o banco físico, efetuando as modificações feitas no
modelo. Podem-se criar tabelas, índices e relacionamentos.

Antes de criarmos as tabelas, devemos criar o Database, para isso digite o


seguinte comando:

CREATE DATABASE acesso;

Assim o banco de dados acesso será criado.

tb_clientes  Tabela com os clientes cadastrados no sistema


tb_estados  Tabela com os estados do Brasil
tb_user  Usuários que tem permissão para entrar na área administrativa do
sistema.

Crie as tabelas no MySQL, executando os comandos abaixo:


26

CREATE TABLE tb_clientes(


id_user int auto_increment primary key,
inclusao_user datetime,
nome_user varchar(80),
end_user varchar(80),
bairro_user varchar(40),
email_user varchar(90),
tel_user varchar(25),
cidade_user varchar(80),
estado_user int
);

CREATE TABLE tb_estados(


Id_estado int auto_increment primary key,
estado varchar(60),
uf char(3));

CREATE TABLE tb_user(


Id_user int auto_increment primary key,
apelido varchar(60),
senha varchar(20));

Depois de termos criado as tabelas, vamos preencher a tabela tb_estados, ou


seja, vamos cadastrar os estados, para isso vamos fazer uso do comando SQL: INSERT
INTO.

INSERT INTO tb_estados(uf,estado) VALUES(‘AC’,’Acre’);


INSERT INTO tb_estados(uf,estado) VALUES(‘AL’,’Alagoas’);
INSERT INTO tb_estados(uf,estado) VALUES(‘AP’,’Amapá’);
INSERT INTO tb_estados(uf,estado) VALUES(‘AM’,’Amazonas’);
INSERT INTO tb_estados(uf,estado) VALUES(‘BA’,’Bahia’);
INSERT INTO tb_estados(uf,estado) VALUES(‘CE’,’Ceará’);
INSERT INTO tb_estados(uf,estado) VALUES(‘DF’,’Distrito Federal’);
INSERT INTO tb_estados(uf,estado) VALUES(‘ES’,’Espírito Santo’);
INSERT INTO tb_estados(uf,estado) VALUES(‘GO’,’Goiás’);
INSERT INTO tb_estados(uf,estado) VALUES(‘MA’,’Maranhão’);
27

INSERT INTO tb_estados(uf,estado) VALUES(‘MT’,’Mato Grosso’);


INSERT INTO tb_estados(uf,estado) VALUES(‘MS’,’Mato Grosso do Sul’);
INSERT INTO tb_estados(uf,estado) VALUES(‘MG’,’Minas Gerais’);
INSERT INTO tb_estados(uf,estado) VALUES(‘PA’,’Pará’);
INSERT INTO tb_estados(uf,estado) VALUES(‘PB’,’Paraíba’);
INSERT INTO tb_estados(uf,estado) VALUES(‘PR’,’Paraná’);
INSERT INTO tb_estados(uf,estado) VALUES(‘PE’,’Pernambuco’);
INSERT INTO tb_estados(uf,estado) VALUES(‘PI’,’Piauí’);
INSERT INTO tb_estados(uf,estado) VALUES(‘RN’,’Rio Grande do Norte’);
INSERT INTO tb_estados(uf,estado) VALUES(‘RS’,’Rio Grande do Sul’);
INSERT INTO tb_estados(uf,estado) VALUES(‘RJ’,’Rio de Janeiro’);
INSERT INTO tb_estados(uf,estado) VALUES(‘RO’,’Rondônia’);
INSERT INTO tb_estados(uf,estado) VALUES(‘RR’,’Roraima’);
INSERT INTO tb_estados(uf,estado) VALUES(‘SC’,’Santa Catarina’);
INSERT INTO tb_estados(uf,estado) VALUES(‘SP’,’São Paulo’);
INSERT INTO tb_estados(uf,estado) VALUES(‘SE’,’Sergipe’);
INSERT INTO tb_estados(uf,estado) VALUES(‘TO’,’Tocantins’);

INSERT INTO tb_user(apelido,senha) VALUES(‘acesso’,’php’);

Antes de construirmos o formulário de cadastro de clientes, vamos criar o


arquivo que vai estabelecer a conexão com a base de dados.

Arquivo: conecta.php
<?
class bd {
var $bd;
var $id;
function bd($sgbd="PostgreSQL"){
$this->bd=$sgbd;
}
function conecta($bd,$srv,$prt,$usr,$senha){
if($this->bd=="PostgreSQL"){
$this->id = pg_connect($srv,$prt,$usr,$senha,$bd);
}else {
$this->id = mysql_connect($srv,$usr,$senha);
if($this->id){
mysql_select_db($bd,$this->id);
28

}else
$this->id=0;
}
}

}
?>

mysql_connect  Abre uma conexão com um banco de dados MySQL

mysql_select_db  Seleciona um banco de dados MySQL.

14.2 Área Administrativa


É a área responsável por fazer o controle dos clientes cadastrados, ou seja, nela
vamos poder, incluir, alterar, excluir e buscar qualquer cliente que esteja cadastro nas
tabelas.
Vamos fazer uso das sessões (método para gerenciamento de usuários que está
disponível a partir da versão 4) em PHP, pois precisamos restringir o acesso a essa
área apenas para pessoas que tenham permissão.
Basta utilizar a função session_start() para iniciar uma sessão. A função
session_is_registered() receberá uma string de nome de variável para testar se a
mesma está registrada na sessão atual, retornando true se estiver, e false caso
contrário. A função session_destroy limpa todas as informações de variáveis de sessão
que foram armazenadas.
ver_sessao.php
Este arquivo faz a verificação da sessão nas páginas protegidas.
<?
session_start("acesso");
if(!(session_is_registered("id_user") AND session_is_registered("apelido_user") AND
session_is_registered("senha_user"))) {
echo "Essa é uma área restrita";
exit;
}
?>

session_destroy.php
<?php
session_start();
session_unset();
29

session_destroy();
header("Location:index.php");
?>

14.2.1 Página inicial (index.php)


Essa é a página inicial do sistema.

Código fonte:

<?
include "conecta.php";
$con = new bd(mySQL);
$con->conecta("clientes","127.0.0.1","","root","12345"); //Conecta com o banco de dados MySQL

if(($apelido_login) AND ($senha_login)) { //Ele entra nessa condição se as duas variáveis não estiverem
vazia

$sql = mysql_query("SELECT * FROM tb_user WHERE apelido='$apelido_login' AND


senha='$senha_login'") or die("ERRO no comando SQL :".mysql_error());

if(mysql_num_rows($sql) > 0) {
$id_user = mysql_result($sql,0,"id_user");
$apelido_user = mysql_result($sql,0,"apelido");
$senha_user = mysql_result($sql,0,"senha");

session_start("acesso"); //Inicializa uma sessão


session_register("id_user","apelido_user","senha_user"); //Registra as variáveis na sessão

header("Location:opcoes.php"); //Redireciono para a página de opções


}
}
?>
<html>
<head>
<title>PHP & MySQL</title>
</head>

<body bgcolor="#FFFFFF" text="#000000">

<form name="frm_login" method="post" action="<?echo $PHP_SELF;?>">


<table width="40%" border="0" cellspacing="0" cellpadding="0">
<tr>
30

<td colspan="2"><b><font face="Arial" size="3">IDENTIFICA&Ccedil;&Atilde;O</font></b></td>


</tr>

<tr>
<td width="33%" height="25"><font face="Arial" size="2">Apelido:</font></td>
<td width="67%" height="25"><font face="Arial" size="2">
<input type="text" name="apelido_login"></font></td>
</tr>

<tr>
<td width="33%" height="25"><font face="Arial" size="2">Senha:</font></td>
<td width="67%" height="25"><font face="Arial" size="2"><input type="password"
name="senha_login"></font></td>
</tr>

<tr>
<td colspan="2"><input type="submit" name="entrar" value="Entrar"></td>
</tr>
</table>
</form>
</body>
</html>

Essa página vai mostrar um formulário com dois campos:


1. Usuário;
2. Senha.

No action do form temos <?echo $PHP_SELF;?>, isso quer dizer que os


dados serão enviados para a mesma página.

Obs: Note que no começo do código temos um if(($apelido_login) AND ($senha_login)).

Depois que digitarmos o usuário e a senha e clicarmos no botão Entrar >>,


vamos acessar a condição que verifica se o usuário digitado e a senha existem no
banco de dados, caso exista, é criada uma sessão chamada acesso e nela são
registradas 3 variáveis, sendo o id, o apelido e a senha, em seguida através do
comando header(“Location:opcoes.php”) o usuário é redirecionado para a página de
opções.
Atenção: Vale lembrar que depois da página index.php, todas as outras são de
uso restrito. Portanto, precisamos criar um arquivo que vai verificar se o usuário está
ativo na sessão ou não. Vamos ver seu código fonte:
31

Código fonte: ver_sessao.php


<?
session_start("acesso");
if(!(session_is_registered("id_user") AND session_is_registered("apelido_user") AND
session_is_registered("senha_user"))) {
echo "Essa é uma área restrita";
exit;
}
?>
Inicializamos a sessão através do session_start(), e verificamos se as variáveis
estão registradas na sessão através do comando session_is_registered(nomevariavel).

Caso elas não estejam, é colocada uma mensagem na tela dizendo que: Essa é
uma área restrita.

Atenção: Precisamos colocar uma include com esse arquivo em todas as


páginas que são de uso restrito. Veja o código fonte abaixo do cadclientes.php.

14.2.2 Página com as opções (opções.php)


Se o usuário e a senha submetidos estiverem no banco o acesso será
redirecionado para a página opcoes.php que é apenas uma página HTML simples, onde
haverão novas opções.

As opções são:
1. Cadastrar clientes;
2. Gerenciar clientes;
3. Logout

Na primeira opção, temos a oportunidade de cadastrar um novo cliente ao sistema.


Na Segunda opção, temos uma listagem dos clientes cadastrados, com as opções
para se fazer uma busca ou alterar os dados de um determinado cliente.
A terceira opção serve para finalizar a sessão do navegador.

14.2.3 Cadastro de Clientes (cadclientes.php)


A principal função desse arquivo é cadastrar um novo usuário para sistema.
32

Código fonte:

<?
include "conecta.php";
$con = new bd(mySQL);
$con->conecta("clientes","127.0.0.1","","root","12345"); //Conecta com ao banco de dados MySQL
include "ver_sessao.php"; //Verifica se a sessão está ativa
?>
<html>
<head>
<title>PHP & MySQL</title>
</head>

<body bgcolor="#FFFFFF" text="#000000">


<br>
<table width="60%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td height="60">
<div align="center"><font face="Arial" size="4"><b>Cadastro de
Clientes</b></font></div></td>
</tr>
</table>
<br>

<?
if($acao == 'cadastrar') { /*Cadastra o cliente depois que o formulário for enviado */
//Verifica os dados enviados

if(empty($nome_user)) {
$erros++;
$campo_vazio = $campo_vazio."<br>Nome";
}

if(empty($end_user)) {
$erros++;
$campo_vazio = $campo_vazio."<br>Endereço";
}

if(empty($bairro_user)) {
$erros++;
$campo_vazio = $campo_vazio."<br>Bairro";
}

if(empty($email_user)) {
33

$erros++;
$campo_vazio = $campo_vazio."<br>Email";
}

if(empty($tel_user)) {
$erros++;
$campo_vazio = $campo_vazio."<br>Telefone";
}

if(empty($cidade_user)) {
$erros++;
$campo_vazio = $campo_vazio."<br>Cidade";
}

if(empty($estado_user)) {
$erros++;
$campo_vazio = $campo_vazio."<br>Estado";
}

if($erros == 0) {
$sql = mysql_query("INSERT INTO
tb_clientes(inclusao_user,nome_user,end_user,bairro_user,email_user,
tel_user,cidade_user,estado_user) VALUES(now(),'$nome_user','$end_user','$bairro_user',
'$email_user','$tel_user','$cidade_user','$estado_user')")
or die("Erro no comando SQL:".mysql_error());

echo "<div align=center><font face=Arial size=2>Cliente cadastrado com Sucesso!!


<br><br><a href='javascript:history.go(-2)'><< Voltar</a></font></div><br><br>";
} //fecha $erros == 0
else {
echo "<div align=center><font face=Arial size=2><b>ATENÇÃO</b><br><br>Foram encontrados
<b>$erros</b>
erro(s) no cadastro do cliente:<br><b>$campo_vazio</b>
<br><br><a href='javascript:history.go(-1)'><< Voltar</a></font></div><br><br>";
}//fecha else
} /*fecha acao= cadastrar*/ ?>

<?
if($acao == 'entrar') { /*Mostra o formulário de cadastro de clientes */

$sql_estados = mysql_query("SELECT * FROM tb_estados ORDER BY estado")


or die("ERRO no comando SQL:".mysql_error());
?>
34

<form name="frm_clientes" method="post" action="<?echo $PHP_SELF;?>?acao=cadastrar">


<table width="80%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td width="24%" height="25"><font face="Arial" size="2">Nome:</font></td>
<td height="25" width="76%"><font face="Arial" size="2">
<input type="text" name="nome_user" size="35"></font></td>
</tr>
<tr>
<td height="25" width="24%"><font face="Arial" size="2">Endereço:</font></td>
<td height="25" width="76%"><font face="Arial" size="2">
<input type="text" name="end_user" size="30"></font></td>
</tr>
<tr>
<td height="25" width="24%"><font face="Arial" size="2">Bairro:</font></td>
<td height="25" width="76%"><font face="Arial" size="2">
<input type="text" name="bairro_user" size="30"></font></td>
</tr>

<tr>
<td height="25" width="24%"><font face="Arial" size="2">Email:</font></td>
<td height="25" width="76%"><font face="Arial" size="2">
<input type="text" name="email_user" size="35"></font></td>
</tr>

<tr>
<td height="25" width="24%"><font face="Arial" size="2">Telefone:</font></td>
<td height="25" width="76%"><font face="Arial" size="2">
<input type="text" name="tel_user" size="20"></font></td>
</tr>

<tr>
<td height="25" width="24%"><font face="Arial" size="2">Cidade:</font></td>
<td height="25" width="76%"><font face="Arial" size="2">
<input type="text" name="cidade_user" size="35"></font></td>
</tr>

<tr>
<td height="25" width="24%"><font face="Arial" size="2">Estado:</font></td>
<td height="25" width="76%"><font face="Arial" size="2">
<select name="estado_user">
<option value="0"><< Selecione o estado >></option>
<?while($array = mysql_fetch_array($sql_estados)) {?>
<option value="<?echo $array['id_estado'];?>"><?echo $array['estado'];?></option>
35

<?}?>
</select></font></td>
</tr>

<tr>
<td height="25" colspan="2">
<div align="center">
<input type="submit" name="cadastrar" value="Cadastrar cliente &gt;&gt;"></div></td>
</tr>
</table>
</form>
<?} /*fecha acao=entrar */?>
</body>
</html>

Ao clicar na opção para cadastrar cliente na página index.php, o usuário é


direcionado para cadclientes.php?acao=entrar, que nada mais é do que a página que
contém o formulário de cadastro e a rotina para a inclusão dos dados no banco.

O procedimento acima tem uma condição depois do nome do arquivo


cadclientes.php?acao=entrar (isto é chamado parâmetro). Vá até o código acima e
procure a linha “if($acao==’entrar’)”. Depois de ter preenchido todos os dados e
clicarmos no botão Cadastrar clientes >> seremos redirecionados para a mesma
página, isso ocorre porque no action do form temos o comando “<?echo $PHP_SELF;?
>”, mais ele não vem sozinho, ele está acompanhado do “?acao=cadastrar”,
encontramos aqui, mais uma condição.

Vá ao código acima e procure a linha if($acao==’cadastrar’). Como vocês podem


observar, fazemos uma verificação dos dados que foram enviados, para ver se nenhum
foi enviado em branco, caso algum dado seja enviado em branco é mostrado uma
mensagem de erro e pedimos para a pessoa retornar ao formulário e complementar os
dados que estão incorretos.

Observe essa linha:

$sql = mysql_query("INSERT INTO tb_clientes(inclusao_user,nome_user,end_user,bairro_user,email_user,


tel_user,cidade_user,estado_user) VALUES(now(),'$nome_user','$end_user','$bairro_user',
'$email_user','$tel_user','$cidade_user','$estado_user')",$con)
or die("Erro no comando SQL:".mysql_error());
36

mysql_query  Envia uma consulta SQL ao banco de dados MySQL.

E o comando SQL para a inserção de dados em uma determinada tabela é o


INSERT INTO.

14 .2.4 Gerenciamento de clientes (gerclientes.php)


Através desse arquivo vamos ter uma listagem de todos os usuários
cadastrados no sistema.
Além disso, será possível também fazer uma busca ou a alteração dos dados de
determinado cliente.

Código fonte:

<?
include "conecta.php";
$con = new bd(mySQL);
$con->conecta("clientes","127.0.0.1","","root","12345"); //Conecta ao banco de dados MySQL
include "ver_sessao.php"; //Verifica se a sessão está ativa
?>
<html>
<head>
<title>PHP & MySQL<title>
</head>

<body bgcolor="#FFFFFF" text="#000000">


<?
$sql_cliente = "SELECT id_user,date_format(inclusao_user,'%d/%m/%Y - %H:%i') as
inclusao_user, nome_user,cidade_user,uf
FROM tb_clientes,tb_estados
WHERE tb_estados.id_estado = tb_clientes.estado_user";

if($pesquisar == 'sim')
$sql_cliente = $sql_cliente." AND nome_user LIKE '%$pesq%'";

$sql_cliente = $sql_cliente." ORDER BY inclusao_user";


$sql_cliente = mysql_query($sql_cliente) or die("Erro no SQL: ".mysql_error());

?>
<br>
<table width="60%" border="0" cellspacing="0" cellpadding="0" align="center">
37

<tr>
<td height="60">
<div align="center"><font face="Arial" size="4"><b>Gerenciamento de
Clientes</b></font></div></td>
</tr>
</table>

<br>
<form name="frm_pesq" method="post" action="<?echo $PHP_SELF?>">
<table width="75%" border="0" cellspacing="1" cellpadding="0" align="center">
<tr bgcolor="#6699CC">
<td colspan="2">
<div align="center"><font face="Arial" size="2"><b>Pesquisa</b></font></div></td>
</tr>

<tr bgcolor="ebebeb">
<td width="32%"><font face="Arial" size="2">Nome a ser procurado:</font></td>
<td width="68%"> <font face="Arial" size="2"><input type="text" name="pesq" size="25">
<input type="submit" name="pesq" value="Pesquisar &gt;&gt;">
<input type="hidden" name="pesquisar" value="sim"></font></td>
</tr>
</table>
</form>

<br>
<?if(mysql_num_rows($sql_cliente) > 0) {?>

<table width="95%" border="0" cellspacing="1" cellpadding="0" align="center">


<tr bgcolor="#6699CC">
<td colspan="5">
<div align="center"><font face="Arial" size="2"><b><font color="#FFFFFF">Clientes
cadastrados</font></b></font></div>
</td>
</tr>
<tr bgcolor="cccccc">
<td width="19%">
<div align="center"><b><font face="Arial" size="2">Data de inclus&atilde;o</font></b></div>
</td>
<td width="33%">
<div align="center"><b><font face="Arial" size="2">Cliente</font></b></div>
</td>
<td width="23%">
<div align="center"><b><font face="Arial" size="2">Cidade/UF</font></b></div>
</td>
38

<td width="13%">
<div align="center"><b><font face="Arial" size="2">Alterar </font></b></div>
</td>
<td width="12%">
<div align="center"><b><font face="Arial" size="2">Excluir</font></b></div>
</td>
</tr>
<?while($array_cliente = mysql_fetch_array($sql_cliente)) {?>
<tr bgcolor="ebebeb">
<td width="19%" height="25"><font face="Arial" size="2">
<?echo $array_cliente['inclusao_user'];?>
</font></td>
<td width="33%" height="25"><font face="Arial" size="2">
<?echo $array_cliente['nome_user'];?>
</font></td>
<td width="23%" height="25"><font face="Arial" size="2">
<?echo $array_cliente['cidade_user'];?>
/
<?echo $array_cliente['uf'];?>
</font></td>
<td width="13%" height="25">
<div align="center"><font face="Arial" size="2">[ <a href='altclientes.php?id_cliente=<?echo
$array_cliente['id_user'];?>&acao=entrar'>Alterar</a>
]</font></div>
</td>
<td width="12%" height="25">
<div align="center"><font face="Arial" size="2">[ <a href='excluirclientes.php?id_cliente=<?echo
$array_cliente['id_user'];?>'>Excluir</a>
]</font></div>
</td>
</tr>
<?}?>
</table>
<?}/* fecha mysql_num_rows > 0 */
else{
echo "<br><br><div align=center><font face=Arial size=2>
Desculpe, mais não achei nada<br><br></font></div>";
}?>
<br><div align=center><font face=Arial size=2>
<a href='opcoes.php'>[ Voltar para o menu de opções ]</a></font></div>
</body>
</html>

Caso o usuário faça uma pesquisa passamos um campo oculto:


<input type="hidden" name="pesquisar" value="sim">
39

Note, que no SQL não efetuamos direto o mysql_query(), fomos concatenando a


variável que continha o SQL.
<?
$sql_cliente = "SELECT id_user,date_format(inclusao_user,'%d/%m/%Y - %H:%i') as inclusao_user,
nome_user,cidade_user,uf FROM tb_clientes,tb_estados WHERE tb_estados.id_estado =
tb_clientes.estado_user";

if($pesquisar == 'sim')
$sql_cliente = $sql_cliente." AND nome_user LIKE '%$pesq%'";

$sql_cliente = $sql_cliente." ORDER BY inclusao_user";


$sql_cliente = mysql_query($sql_cliente,$con) or die("Erro no SQL: ".mysql_error());
?>

Para fazer a pesquisa usamos no SQL a opção LIKE. Note, que formatamos a
saída da data usando date_format().

14.2.5 Alteração dos dados do cliente (altclientes.php)


Esse arquivo é bem parecido com o de cadastro de clientes, a única coisa que
muda é que um faz a inserção de um novo usuário e o outro faz a alteração dos dados.
Observação: O cadastro de clientes e o de alteração poderia ter sido fundido
em um arquivo só, em vez de criarmos dois.

Código fonte:

<?
include "conecta.php";
$con = new bd(mySQL);
$con->conecta("clientes","127.0.0.1","","root","12345"); //Conecta com o banco de dados MySQL
include "ver_sessao.php"; //Verifica se a sessão está ativa
?>
<html>
<head>
<title>PHP & MySQL</title>
</head>

<body bgcolor="#FFFFFF" text="#000000">


<br>
<table width="60%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
40

<td height="60">
<div align="center"><font face="Arial" size="4"><b>Alterar dados do Cliente</b></font></div>
</td>
</tr>
</table>
<br>

<?
if($acao == 'alterar') { /*Cadastra o cliente depois que o formulário for enviado */
//Verifica os dados enviados
if(empty($nome_user)) {
$erros++;
$campo_vazio = $campo_vazio."<br>Nome";
}

if(empty($end_user)) {
$erros++;
$campo_vazio = $campo_vazio."<br>Endereço";
}

if(empty($bairro_user)) {
$erros++;
$campo_vazio = $campo_vazio."<br>Bairro";
}

if(empty($email_user)) {
$erros++;
$campo_vazio = $campo_vazio."<br>Email";
}

if(empty($tel_user)) {
$erros++;
$campo_vazio = $campo_vazio."<br>Telefone";
}

if(empty($cidade_user)) {
$erros++;
$campo_vazio = $campo_vazio."<br>Cidade";
}

if(empty($estado_user)) {
$erros++;
$campo_vazio = $campo_vazio."<br>Estado";
}
41

if($erros == 0) {
$sql = mysql_query("UPDATE tb_clientes SET nome_user='$nome_user',end_user='$end_user',
bairro_user='$bairro_user',email_user='$email_user',tel_user='$tel_user',
cidade_user='$cidade_user',estado_user='$estado_user' WHERE id_user='$id_cliente'")
or die("Erro no comando SQL:".mysql_error());

echo "<div align=center><font face=Arial size=2>Dados do cliente <b>$nome_user</b> alterados com


Sucesso!!<br><br><a href='gerclientes.php?acao=entrar'><< Voltar</a></font></div><br><br>";
} //fecha $erros == 0
else {
echo "<div align=center><font face=Arial size=2><b>ATENÇÃO</b><br><br>Foram encontrados
<b>$erros</b>
erro(s) no cadastro do cliente:<br><b>$html_erros</b>
<br><br><a href='javascript:history.go(-1)'><< Voltar</a></font></div><br><br>";
}//fecha else
} /*fecha acao= alterar*/ ?>

<?
if($acao == 'entrar') { /*Mostra o formulário de alteração dos dados do cliente */

$sql_cliente = mysql_query("SELECT * FROM tb_clientes WHERE id_user='$id_cliente'")


or die("ERRO no comando SQL:".mysql_error());
$array_cliente = mysql_fetch_array($sql_cliente);

$sql_estados = mysql_query("SELECT * FROM tb_estados ORDER BY estado")


or die("ERRO no comando SQL:".mysql_error());
?>

<form name="frm_clientes" method="post" action="<?echo $PHP_SELF;?>?acao=alterar">


<table width="80%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td width="24%" height="25"><font face="Arial" size="2">Nome:</font></td>
<td height="25" width="76%"><font face="Arial" size="2">
<input type="text" name="nome_user" size="35" value="<?echo
$array_cliente['nome_user'];?>"></font></td>
</tr>

<tr>
<td height="25" width="24%"><font face="Arial" size="2">Endere&ccedil;o:</font></td>
<td height="25" width="76%"><font face="Arial" size="2">
<input type="text" name="end_user" size="30" value="<?echo
$array_cliente['end_user'];?>"></font></td>
42

</tr>

<tr>
<td height="25" width="24%"><font face="Arial" size="2">Bairro:</font></td>
<td height="25" width="76%"><font face="Arial" size="2">
<input type="text" name="bairro_user" size="30" value="<?echo
$array_cliente['bairro_user'];?>"></font></td>
</tr>

<tr>
<td height="25" width="24%"><font face="Arial" size="2">Email:</font></td>
<td height="25" width="76%"><font face="Arial" size="2">
<input type="text" name="email_user" size="35" value="<?echo
$array_cliente['email_user'];?>"></font></td>
</tr>

<tr>
<td height="25" width="24%"><font face="Arial" size="2">Telefone:</font></td>
<td height="25" width="76%"><font face="Arial" size="2">
<input type="text" name="tel_user" size="20" value="<?echo
$array_cliente['tel_user'];?>"></font></td>
</tr>

<tr>
<td height="25" width="24%"><font face="Arial" size="2">Cidade:</font></td>
<td height="25" width="76%"><font face="Arial" size="2">
<input type="text" name="cidade_user" size="35" value="<?echo $array_cliente['cidade_user'];?
>"></font></td>
</tr>

<tr>
<td height="25" width="24%"><font face="Arial" size="2">Estado:</font></td>
<td height="25" width="76%"><font face="Arial" size="2">
<select name="estado_user">
<option value="0"><< Selecione o estado >></option>
<?
while($array = mysql_fetch_array($sql_estados)) {
$estado_cliente = $array_cliente['estado_user'];
$cod_estado = $array['id_estado'];
$estado = $array['estado'];
if($estado_cliente == $cod_estado)
echo "<option value='$estado_cliente' selected>$estado</option>";
else
echo "<option value='$cod_estado'>$estado</option>";
43

}?>
</select></font></td>
</tr>

<tr>
<td height="25" colspan="2">
<div align="center">
<input type="submit" name="alterar" value="Alterar dados &gt;&gt;">
<input type="hidden" name="id_cliente" value="<?echo $array_cliente['id_user'];?>">
</div></td>
</tr>
</table>
</form>
<?} /*fecha acao=entrar */?>
</body>
</html>

Na página gerclientes.php (página de gerenciamento), passamos como


parâmetro o id do cliente que vai ser alterado.

Na página altclientes.php (página que altera os dados) fizemos um SELECT na


tabela de clientes acrescentando na cláusula WHERE o id_cliente sendo igual ao código
que foi passado como parâmetro. Com isso, não teremos os dados de todos os clientes
mais sim todos os dados de um determinado cliente.
Depois de ter executado o mysql_query(), usamos o comando
mysql_fetch_array() que vai retornar o resultado da consulta como um array, aí fica
mais fácil para manipularmos os dados do cliente.
Como foi visto anteriormente, esse arquivo é bem parecido com o de cadastro,
e na hora de alterar os dados fazemos uso do comando SQL: UPDATE tabela SET
campo=’$campo’ . No caso, precisamos acrescentar um WHERE porque senão ele vai
alterar os dados de todos os clientes que temos no banco de dados e não é isso que
queremos. É para ele alterar apenas o do usuário escolhido. Então o código vai ficar
desse jeito.
<?
$sql = mysql_query("UPDATE tb_clientes SET nome_user='$nome_user',end_user='$end_user',
bairro_user='$bairro_user',email_user='$email_user',tel_user='$tel_user',
cidade_user='$cidade_user',estado_user='$estado_user' WHERE id_user='$id_cliente'")
or die("Erro no comando SQL:".mysql_error());
?>
44

Sendo que na cláusula WHERE, aquele id_cliente é o código do cliente que está
sendo modificado.

14.2.6 Exclusão do cliente (excluirclientes.php)


Essa página contém apenas o comando SQL para excluir o usuário da tabela
conforme o parâmetro passado. Esse parâmetro será passado pela página
gerclientes.php que nada mais é do que o código do cliente que vai ser excluído.

Código fonte:

<?
include "conecta.php";
$con = new bd(mySQL);
$con->conecta("clientes","127.0.0.1","","root","12345"); //Conecta com o banco de dados MySQL
include "ver_sessao.php"; //Verifica se a sessão está ativa

$sql_del = mysql_query("DELETE FROM tb_clientes WHERE id_user='$id_cliente'")


or die("Erro no SQL: ".mysql_error());
echo "<br><br><div align=center><font face=Arial size=2>Cliente EXCLUÍDO com Sucesso!
<br><br><a href='opcoes.php'>[ Voltar para o menu de opções ]</a> </font></div><br>";

?>

14.2.7 Expressões Regulares


Expressões regulares

São padrões que correspondem strings. Elas são muito utilizadas para criar
testes true/false complexos em strings e também para extrair substrings e fazer
substituições complexas.

Por que expressões regulares?

As funções de comparação de strings e de localização de substring como por


exemplo endereços web que iniciam com www., terminam em .com e tem uma palavra
alfabética em letras minúsculas no meio. Por exemplo, essas são as strings que
queremos:

‘www.ibm.com’
‘www.zend.com’

E não as seguintes:

‘java.sun.com’
‘www.php.net’
45

‘www.IBM.com’
‘www. Qualquer coisa.com’

Pensando um pouco, é óbvio que não há uma maneira conveniente de utilizar


comparação de string e substring para construir o teste que queremos. Podemos testar
a presença de www. e .com, mas é difícil impor o que estaria acontecendo no meio
delas. É para isto que expressões regulares são boas.

Expressões regulares ou regex são padrões para correspondência de string,


com curingas especiais que podem corresponder partes inteiras da string alvo. As
expressões regulares no estilo POSIX descendem da maquinaria de correspondência
padrão da regex utilizada em shells de linha de comando do UNIX.

Um exemplo de regex no estilo POSIX

Nossa expressão escolhida é:

^www\.[a-z]+\.com$

Nessa expressão temos o símbolo ‘^’, que informa que a parte www deve estar
no início da string. A seguir vem o ponto (.), precedido por barras invertidas que
informa que realmente queremos um ponto, não o caractere curinga ‘.’. A seguir,
temos um intervalo incluído entre colchetes de todas as letras alfabéticas em letras
minúsculas. O + seguinte indica que queremos corresponder qualquer número dessas
letras minúsculas em seqüência, contanto que tenhamos pelo menos um deles. E
então outro ‘.’ Literal, o com e o caractere especial $ que informa que com é o final da
string procurada.

Código fonte:

<?
function simple_dot_com($url)
{
return(ereg('^www\\.[a-z]+\\.com$',$url));
}

$urls_to_test = array('www.ibm.com',
'www.sun.com',
'www.zend.com',
'www.java.sun.com',
'java.sun.com',
'www.IBM.com',
'www.php.net',
'www.isto nao é um endereço web.com',);

while ($test=array_pop($urls_to_test)){
if (simple_dot_com($test))
print("\"$test\" é uma url simples<br>");
46

else
print("\"$test\" não é uma url simples<br>");

}
?>

15. Considerações Finais


15.1 Resumo
Como disse Jeff Barr, “o PHP não é uma panacéia para todos os problemas de
desenvolvimento Web, mas tem inúmeras vantagens”. É construído por
desenvolvedores Web para desenvolvedores Web e é suportado por uma grande e
entusiasmada comunidade. No centro do palco ele se destaca por sua leveza,
capacidade, confiabilidade e facilidade de uso.

15.2 Referências bibliográficas


Welling, Luke. PHP and MySQL Web Development, second edition, Developers
Library,2003
Sites utilizados como referência:
www.php.net – Site Oficial do PHP
www.apache.org – Site Oficial do Apache
www.mysql.com – Site Oficial do MySQL

Você também pode gostar