Você está na página 1de 93

CONTEDO PROGRAMTICO

1. APRESENTAO

2. DANDO VIDA AO HTML!
Diferenas entre HTML e PHP
Formulrio em HTML ou PHP?
Funcionamento do PHP

3. SEU PRIMEIRO PHP
Criando um formulrio em PHP
Como diagramar o layout da mensagem
Variveis mais importantes
Enviando Mensagens com PHP

4. APRENDA A USAR UM BANCO DE DADOS
Noes sobre Banco de Dados
Entendendo o MySQL
Criando base da dados e tabelas
Adicionando e editando dados
Conectando seu PHP a um banco de dados
Adicionando, editando e excluindo dados atravs de funes PHP

5. CRIE UM SISTEMA DE NEWSLETTER
Aprenda a arquitetar seu sistema
Cadastramento de contatos e emails

6. "TUNANDO" SUA NEWSLETTER
Crie um validador de emails
Testando mltiplas condies com AND e OR
Checando envio
Trabalhando com checkboxes

7. TRABALHANDO COM ARQUIVOS
Guardando imagens e PDFs
Como relacionar imagens e arquivos ao banco de dados
Como fazer upload de arquivos com PHP
GETs e POSTs

8. SEGURANA
Protegendo seus dados
Deixando seu sistema PHP mais seguro
Autenticaes

9. CRIANDO SISTEMA COM USURIO E SENHA
Construindo uma interface para login
Encriptando senhas
Autorizaes de usurios
Cadastro de novos usurios
Assinatura
Cookies

10. CONTROLE SEUS DADOS
Trabalhando com mltiplas tabelas
Relacionando dados

11. CRIE UM SISTEMA DE BUSCA
Trabalhando com strings
Busca avanada
Paginando resultados

12. EXPRESSES REGULARES
Trabalhando com padres ( Nmeros de telefone, CEP, email, etc)

13. GERANDO GRFICOS COM PHP
Aprenda a gerar nmeros de segurana (CAPTCHA)
Gerando imagens a partir de funes GD e PHP
Criando grficos automaticamente

14. CONECTE SEU SISTEMA A OUTROS SERVIOS WEB
Trabalhando com RSS e PHP
Do banco de dados para o Newsreader
Interao com YouTube

15. CONCLUSO





Introduo
Muito bom dia, boa tarde, boa noite, boa madrugada para voc aluno do Curso Online
PHP para Web Designers! Finalmente hoje teremos noassa primeira aulinha que ser
dividido em trs partes. Na primeira parte explicarei como ser o funcionamento do
curso, os objetivos, o que voc ir encontrar por aqui e uma mensagem de boas-vindas.
Assista pois muito importante. Depois irei mostrar como transformar o seu
computador num servidor local. No obrigatrio mas ser de grande utilidade pois
voc poder testar seus sistemas rapidamente em seu computador. Porm recomendo a
todos assinar um planozinho de hosting para que voc possa testar seus sistemas num
servidor remoto. Logo mais abaixo irei falar mais sobre isso.
Agora fique com minha mensagem de boas-vindas e explicao sobre o curso. Depois
de assistir continue lendo os textos que esto logo abaixo do vdeo.



Video

Quem Astrogildo?
Voc deve ter percebido na vinheta dos vdeos a apario desse simptico ursinho.
Trata-se de Astrogildo Bear, o web designer camarada que durante alguns anos esteve
aqui conosco no Brasil. Com seu lindo pelo de pelcia, conquistou vrias ursinhas pelo
Brasil enquanto c viveu. Porm teve que voltar para sua terra natal, mais precisamente
para as Ilhas Kodiak, terra dos ursos marrons, onde vive sua famlia. Enquanto morava
aqui deu o ar de sua graa em diversas aulas de nossos cursos. E agora ele est de volta
para pedir nossa ajuda j que ele no quer perder contato com suas ursinhas brasileiras.
Vamos ajud-lo nessa?


Quem ElePHPant?

Vocs perceberam o sorridente elefante azul que aparece na abertura dos nossos vdeos?
Trata-se do ElePHPante, o simptico mascote do PHP. Esse grandalho ir ajudar
Astrogildo na sua saga pelo mundo do PHP junto com vocs, meus queridos alunos!


DESAFIO: Instalando o Apache, PHP e MySQL em
seu computador
Vamos comear nosso curso com esse desafio: instalar o Apache, PHP e MySQL no seu
computador. Antigamente era mais difcil mas com o tempo foi ficando mais fcil, com
softwares que podem nos ajudar nessa tarefa.
Nosso objetivo nesse primeiro momento instalar um servidor local, onde voc poder
testar os seus scripts PHP com maior rapidez.

A misso transformar seu Windows num servidor web como qualquer outro. Devemos
instalar o Apache, o MySQL e o PHP em sua mquina. Vou explicar o que cada um
desses meninos faro:

Apache: um software gratuito, considerado o mais bem sucedido servidor web
gratuito do mundo. Atravs desse software que o seu computador se transformar num
servidor web como qualquer outro. Voc poder rodar sistemas em php por exemplo e
ver a coisa funcionando em seu navegador.

MySQL: trata-se de um sistema de gerenciamento de banco de dados que utiliza a
linguagem SQL. Sendo mais direto, ele que vai armazenar as notcias, usurios e todas
as informaes que voc queira armazenar atravs do seu sistema PHP. Seria uma
espcie de armrio virtual. Quando o seu sistema quiser puxar aquela notcia que voc
incluiu ontem, ele ir procurar nas gavetas do MySQL.

PHP: a dita cuja. O responsvel pelo funcionamento de todas as engenhocas de um site.
Instalando o PHP na sua mquina, os sistemas de atualizao, consulta ao MySQL e
todos os outros sistemas que voc programar, podero funcionar tranquilamente
realizando todas as suas operaes.

Existem duas formas de instalar esses trs sistemas em seu computador.
1. Instalando um por um, caso voc goste de jogar no modo avanado ou seja um
sadomasoquista. ;)
2. Utilizando o Wampserver

Eu prefiro o item nmero 2. O Wampserver instala esses trs sistemas em sua mquina
com apenas alguns cliques, fcil, rpido e prtico. Em nossa vdeo-aula mostro como
instalar o Wampserver, d uma olhadinha l:


Video


Aqui est o link de download do WampServer:
http://www.wampserver.com/en/download.php

Agora, caso o Wampserver no funcione, a o negcio apelar para o modo avanado
do jogo e tentar instalar manualmente cada sistema. Neste tutorial escrito por Marcos
Elias voc ter todas as instrues de como instalar o Apache, PHP e MySQL
separados sem auxlio do Wampserver:
http://www.guiadohardware.net/tutoriais/apache-php-mysql-windows/
Outra opo ao Wampserver o Xampp, que voc pode pegar aqui. Porm a sua
configurao um pouco mais complicada.

DESAFIO II: Instalando um Servidor de Email em seu
computador
Nas aulas que ainda viro vocs iro precisar testar seus formulrios, enviando seu
contedo para algum email. Se o formulrio est sendo testado em seu servidor local,
como que esse formulrio ser enviado para um email externo? Parece simples mas
no . Primeiro que hoje todo SMTP
(servidor responsvel pelo envio de emails) necessita de autenticao com login e
senha. Ento no basta mais colocar o endereo de smtp no cdigo php, necessrio
fazer com que o sistema se autentique nele, o que torna o trabalho um pouquinho
complicado.
Segundo que hoje grandes servidores de email como Google, Hotmail e Yahoo no
aceitam mensagens partindo de servidores "caseiros" como o que voc est fazendo
agora com seu computador. Eles barram automaticamente. Isso porqu espalhou-se pelo
mundo milhares de cavalo de tria que instalavam servidores de email nas mquinas de
suas vtimas sem elas saberem, tudo isso para enviar spam adoidado sem ningum saber
de onde partiu. Assim, todos os grandes hostings acabaram barrando emails enviados de
servidores suspeitos, vindo de computadores e conexes comuns.
Dessa forma o nico jeito de testar localmente o envio de emails instalando um
servidor de email e criando um email local. Assim voc poder enviar formulrios para
um email que est no seu prprio computador, no necessitando estar conectado a
internet nem que a mensagem passe pela grande rede, evitando assim que a mensagem
seja barrada por antispam.
No vdeo ensino a instalar um desses servidores, o Mercury/32. Assista o vdeo abaixo:
Video



Para pegar o Mercury/32 clique aqui.

NO FUNCIONOU? UTILIZE UM SERVIDOR
REMOTO
Caso voc no tenha conseguido instalar o servidor local ou o servidor de email, no se
preocupe. Voc ainda est apto a fazer o curso. Para isso recomendo a contratao de
um plano de hosting, onde voc poder testar as suas pginas e scripts num servidor
totalmente pronto para isso. L j estaro rodando php, o apache e MySQL onde voc
no ter preocupao nenhuma em fazer funcionar tudo isso. E se esses servios sairem
do ar voc ter o suporte da empresa de Hosting. A seguir indico uma dessas empresas

ESSA PRA VALER: Teste seus scripts PHP
Mesmo com servidor local, fundamental que voc teste seus scripts PHP num servidor
remoto, onde voc poder testar pra valer o envio de formulrios pra qualquer email,
sem ser o seu email @localhost. Por isso aconselho contratar junto com esse curso um
plano de hospedagem, pequeno, com suporte a PHP para que voc possa testar seus
scripts.
Fizemos uma parceria muito legal que ir beneficiar todos vocs. Teste seus scripts PHP
num servidor voltado exclusivamente para os nossos alunos do curso PHP para Web
Designers. Trata-se da empresa Internet Paulista que se prontificou a criar um plano
exclusivo para vocs por um preo simblico de R$ 7/ms. Digo simblico pois, afinal,
R$ 7 no d nem pra comprar 5 esfihas de queijo, 1 kibe e 1 refresco de laranja no
Habibs, no mesmo? ;)
Aproveite essa oferta exclusiva. Para contratar o plano basta clicar aqui.

Firefox
Se voc Webdesigner ou Programador, esquea o IE como navegador principal. Tanto
nas aulas do Curso PSD para HTML & CSS como neste curso vocs notaro o quanto
importante o Firefox em nossas vidas. Recortando e montando o layout que fique bem
visualizado no Firefox, ele tambm ser bem visualizado em outros navegadores...
menos no IE. Porm, ao construir um layout tendo o Firefox como navegador primrio,
facilmente possvel alterar o CSS atravs de CSS Hacks e folhas de estilo dedicados
apenas ao IE. J o contrrio, construir o layout para o IE como navegador principal e
depois adaptar ao Firefox e demais navegadores, algo bem mais difcil. Portanto no
perca tempo, use o Firefox j!
IE6
Voc ainda usa? Que isso, esquea esse navegador. Entre nessa campanha.

LIVROS INDICADOS
Nossas aulas sero baseadas em diversos livros de PHP que serviro como fonte de
exerccios e assuntos apresentados nesse curso. A aquisio desses livros no
obrigatrio e voc poder acompanhar o curso normalmente sem eles. Mas recomendo a
compra de um desses ttulos pois poder lhe ajudar muito:
Desenvolvendo Web Sites com PHP, de Juliana Niederauer
Clique aqui para adquirir

Aprendendo PHP & MySQL, de Jon Philips
Clique aqui para adquirir
PHP 5: Guia de Consulta Rpida
Clique aqui apra adquirir



Parte 2
D vida a suas pginas HTML!
Quem aqui j teve a oportunidade de fazer o curso PSD para HTML & CSS j sabe
como criar sites bem otimizados, seguindo os padres W3C, separando estrutura e
visual utilizando os recursos do CSS. Porm, com o conhecimento de html e css, voc
s conseguir criar sites passivos, sem interao do usurio no contedo das pginas.
o que a gente chama de comunicao de uma via.
HTML esttico chato pra caramba
O HTML, puro e simples, no permite a manipulao de contedo entre diferentes
partes do site muito menos a realizao de buscas, consulta a dados, etc. Ele foi
desenvolvido apenas para mostrar informaes na tela, sem possibilidade de mudanas
em tempo real, muito menos interao do visitante.













Astrogildo voltou!
, Astrogildo voltou! Mas dessa vez ele voltou para sua terra natal, no Alasca, mais
precisamente nas Ilhas Kodiak. Precisamos nos comunicar com ele e l a nica forma de
comunicao atravs de sua pgina pessoal pois em Kodiak proibido aos outros
ursos o uso do Orkut, MSN, Twitter e qualquer outra rede social.

Alm disso, outro problema que Astrogildo antes de voltar para Kodiak me pediu para
criar um formulrio de contato em seu site e que no deixasse pblico o seu endereo de
email. Isso porqu ele tem medo dessa informao ficar pblica no s para spammers
como tambm para outros ursos invejosos que ficam morrendo de raiva de seu sucesso,
principalmente com as suas fs ursinhas de pelcia.



Podemos fazer esse formulrio em HTML, o que voc acha? Vamos testar? Veja:
Video

EXPERIMENTE J!
Vamos ver se esse negcio funciona. Voc pode ver como ficou o formulrio clicando
aqui. Aproveite e tente mandar um formulrio. Preencha tudo e clique em "Enviar!".
Viu o que aconteceu?


HOUSTON! HOUSTON! NS TEMOS UM PROBLEMA!
Voc deve ter percebido que abriu uma janela do seu programa de email ou algo do
tipo, correto? Alm das informaes ficarem todas embaralhadas, o email dele
apareceu! E no isso que nosso querido ursinho camarada pediu. E agora Jos???

Verificando o cdigo do formulrio vemos que est tudo ok. Menos uma coisa: o uso do
mailto.

Quanto usamos o mailto, deixamos exposto o endereo de email para onde ser enviado
os dados do formulrio. Alm disso o email no enviado automaticamente, sendo
necessrio a abertura de um programa de emails para que o formulrio seja enviado. O
problema que nem todos utilizam esses programas, preferindo os webmails. Sem falar
que voc no ter nenhum controle no armazenamento dos dados.

Ser que o PHP pode resolver esse problema?




PHP roda apenas no servidor
Voc ir notar ao fazer seus sisteminhas em PHP que o cdigo colocado na pgina no
aparecer no cdigo-fonte da pgina quando visualizado no navegador. Isso porqu
todas as tags PHP servem para serem rodadas e processadas no servidor, entregando ao
navegador apenas HTML e CSS. Para isso, todas as pginas contendo cdigos PHP
devem vir com a extenso ".php". Se voc colocar ".html" o servidor no ir saber que
ali dentro existem cdigos php e consequentemente no ir processar o que pedido.



Substituindo o Mailto por uma ao PHP
Vamos ento fazer nosso teste com o formulrio do Astrogildo, substituindo o mailto
pelo cdigo PHP. Esse cdigo ir processar e enviar o contedo do formulrio
diretamente para o email do Astrogildo sem precisar abrir nenhum programa de email
para isso. Todos esses cdigos ficaro dentro de um arquivo PHP chamado envio.php

Veja como faremos:

Video

TUDO QUE VOC QUIS SABER SOBRE PHP MAS TINHA MEDO DE PERGUNTAR (PARTE
1)

1. Bem, eu sei que essa pergunta parece bem besta mas... o que significa PHP?

R: PHP (um acrnimo recursivo para "PHP: Hypertext Preprocessor") uma
linguagem de programao de computadores interpretada, livre e muito utilizada para
gerar contedo dinmico na World Wide Web, como por exemplo a Wikipdia. ;)

2. P, quando eu acesso um site que tem no endereo final o arquivo com extenso
".php" eu vou l bisbilhotar o cdigo fonte e no encontro nada a no ser html.
Porqu?! Cad o PHP?

R: Os cdigos PHP so processados no servidor, entregando ao navegador o resultado
do processamento no formato HTML. No h nenhum processamento feito pelo
navegador e o que voc v no browser apenas o resultado do processamento, por isso
que o que voc v no cdigo-fonte apenas html.

3. Ah t certo, acho que entendi...

R: No se preocupe que no decorrer da aula voc vai entender ainda mais. Afinal voc
est prestes a criar o seu primeiro script em PHP!

Parte 03



Botando o formulrio PHP pra funcionar!
Na ltima aula fizemos um formulrio HTML, mas vimos que no era isso que
Astrogildo queria. O endereo de email dele ficaria exposto alm da mensagem ir toda
truncada no email. Ento apelamos para o PHP, criando um arquivo separado com as
instrues dadas somente ao servidor, sem que o usurio visse o endereo do
Astrogildo. O problema que no enviamos a mensagem por email.

Agora vamos botar esse negcio pra funcionar dizendo ao servidor para onde ele deve
enviar o email e com que cara essa mensagem deve chegar at Astrogildo. E ento, est
preparado?

Criando o corpo do email com PHP
Voc j deve ter percebido que podemos puxar vrias informaes enviadas atravs de
um formulrio colocando no meio de um texto esttico, utilizando PHP, no mesmo?
Normalmente chamamos isso de concatenao, nome esquisito, mas que pode ser
visualizado nesses pontinhos a, olha s:

Note que difcil entender esse emaranhado de letras, cifres e pontos. Uma dica dar
uma quebrada no cdigo s para visualizar melhor. Mas no se preocupe que mesmo
fazendo a quebra de linha o cdigo continuar funcionando. Olha s:

$corpo = 'Nome' . $nome . 'diz que prefere um' . $preferencia .
'Cidade:' . $cidade .
'Estado:' . $estado .
'Astrogildo bonito?' . $bonito .
'Email:' . $email .
'Tel:' . $telefone;
'Mensagem:' . $mensagem;
, deu pra entender melhor. Mas cad a formatao? I sso vai aparecer tudo
misturado, n no?

verdade. Mesmo que voc organize o PHP no quer dizer que a mensagem no HTML
ou no email v aparecer bonitinho tambm.

Isso s para voc compreender melhor o cdigo quando for edit-lo mas para deixar a
coisa bonita para quem for ver o resultado final necessrio colocar formataes
HTML.

Veja agora no vdeo o que foi que aconteceu depois de colocar o cdigo acima pra
funcionar. Ser que ficou bonito ou embaralhado?
Video

Colocando o assunto e destino da mensagem
Bem, como voc viu, rapidinho ns conseguimos fazer uma diagramao mais bonita
para o email enviado pelo formulrio. Agora vamos acrescentar algumas variveis
importantes para a identificao do Email, o assunto e o destino do formulrio.


Para isso, coloque as seguintes variveis em seu formulrio antes do $corpo:

$to =" astrogildo@gmail.com "
$subject ="Formulrio do Astrogildo"
$corpo = "Name: $nome diz que prefere um $preferencia\n" .
"Cidade: $cidade\n" .
"Estado: $estado . '\n" .
"Astrogildo bonito? $bonito\n" .
"Email: $email\n" .
"Tel: $telefone\n" .
"Mensagem: $mensagem";

Veja agora no vdeo que fim levou essa histria:
Video


Tudo que voc queria saber sobre PHP mas tinha vergonha de perguntar
1. O que acontece com o cdigo PHP no navegador?
R: Nada, absolutamente nada. O navegador nem toma conhecimento de que existe PHP.
Tudo rodado no servidor. O que o PHP faz processar a informao e enviar para o
navegador a resposta em HTML. Ento o que o navegador v apenas uma pgina
HTML, o PHP fica no servidor e no sai de l nem pra comprar po.

2. T, mas como que o servidor sabe que quando PHP e HTML?
R: Graas ao <?php e ?>, lembra? O que estiver dentro desses sinais, quem cuidar
disso o servidor, o restante, em HTML o navegador.

3. T bom, mas como que o PHP vai enviar o resultado em HTML? Isso que no
t entendendo, em qu momento essa operao feita e como feita?
R: a que entre em cena o comando echo. O que voc quiser que aparea escrito na
tela, voc colocar depois do echo, como foi mostrado em aula. Ser nesse local que
voc colocar os atributos HTML j conhecidos, como <br /> por exemplo e assim
montar a resposta que ser enviada para o navegador, em HTML.

4. Tava vendo aqui, muito legal a histria das aspas duplas, facilita pra caramba!
Po, porqu at agora a gente s tava usando aspas simples?
R: Humm... verdade. Mas No se esquea que as aspas simples e aspas duplas tem
diferenas importantes, no sendo processadas pelo PHP de qualquer maneira. As aspas
simples por exemplo so ideais para frases sem variveis incorporadas. Ento ns
vamos continuar a usar aspas simples a no ser que haja uma razo convincente para
usar uma string com aspas duplas em vez disso.

5. Por falar nisso, o que acontece se eu tiver que colocar a seguinte frase "Eu gosto
de tomar ovomaltine do Bob's" dentro de aspas simples? No vai dar problema
essa aspa a na palavra Bob's?
R: Ah, vai sim. Por isso que voc deve utilizar o caractere de controle \, ou seja, uma
barra invertida antes da aspa do Bob's. Pois seno o PHP vai interpretar que a frase
termina ali, no Bob'. Ento a coisa ficaria assim:

'Eu gosto de tomar o ovomaltine do Bob\'s'

Mesma coisa se voc quer colocar na frase um $. O PHP vai achar que uma varivel,
ento o jeito tacar barra invertida nele. Nesse caso ficaria assim:

'Ah, ovomaltine muito caro, R\$ 7 reais, t fora.'

O que voc aprendeu at agora com o Tio Bruno


PHP
A linguagem PHP uma linguagem de programao de domnio especfico, ou seja, seu
escopo se estende a um campo de atuao que o desenvolvimento web (embora tenha
variantes como o PHP-GTK). Seu propsito principal de implementar solues web
velozes, simples e eficientes.


MySQL
O MySQL um sistema de gerenciamento de banco de dados (SGBD), que utiliza a
linguagem SQL (Linguagem de Consulta Estruturada, do ingls Structured Query
Language) como interface. atualmente um dos bancos de dados mais populares, com
mais de 10 milhes de instalaes pelo mundo.

<?php ?>
Todo script PHP s reconhecido como tal se voc escrev-lo entre esses sinais,
iniciando com <?php e terminando com ?>.

Varivel
Um recipiente de armazenamento para uma parte dos dados. No PHP, as variveis
devem comear com o sinal de cifro, como este e $nome_varivel

$_POST
Varivel global muito utilizada para envio de contedo atravs de formulrio.

echo
Comando PHP para mostrar textos ou enviar comandos de formatao ao navegador.

array
Uma estrutura de dados que armazena um conjunto de valores. Cada valor tem um texto
identificador que voc pode usar para acess-lo.

Caractere de escape
Usado para representar caracteres em cdigo PHP que so difceis de escrever ou que
possam entrar em conflito com outros cdigos, como \n (para uma nova linha)
Arquivos da Aula 01
Voc quer comparar o seu arquivo da Aula 01 com o meu? Ento clique aqui e faa o
download.


Conectando a um banco de dados
Nas duas primeiras aulas voc foi capaz de fazer seu primeiro script PHP. O script
funcionou bem, enviou o contedo do formulrio para o email do Astrogildo, assim
como ele queria. Porm coisas estranhas aconteceram e que nem ele nem voc
imaginavam que pudesse acontecer.

Astrogildo no recebeu 1, 2, 5 emails. Ele recebeu dezenas, centenas, milhares de
emails, chegando de minuto em minuto, sem parar, em sua caixa de email. O email
ficou entupido. Para voc ter uma idia, ele conseguiu preencher os 10 gigas de espao
que o Gmail oferece. Eram emails de fs enlouquecidas com a beleza de nosso amigo
ursinho de pelcia.


MySQL
A coisa t difcil de administrar. Como ler todos esses emails? Como responder todas as
fs? Como fazer com que Astrogildo organize sua vida? Ah! Isso um trabalho para o
MySQL!


Nosso amigo MySQL, o banco de dados camarada ir nos ajudar nessa empreitada. O
banco de dados, segundo o pai dos burros internuticos, Wikipdia :

Bancos de dados (ou bases de dados), so conjuntos de registros dispostos em
estrutura regular que possibilita a reorganizao dos mesmos e produo de
informao. Um banco de dados normalmente agrupa registros utilizveis para um
mesmo fim.

Traduzindo, banco de dados nada mais que um conjunto de informaes armazenados
e organizados de uma forma em que eu possa encontrar facilmente essas informaes,
mover e editar. Existem diversos mtodos para se organizar alguma coisa. O mtodo
mais utilizado pelos bancos de dados o mtodo relacional, que utiliza tabelas,
relacionando linhas e colunas.

Existem diversos tipos de softwares gerenciadores de banco de dados. MySQL apenas
um deles. Existem tambm Access, Dbase, Oracle, DB2 e tantos outros que no
interessam pra gente nesse momento. Vamos nos atentar ao MySQL.

Existem duas formas de acessar o seu banco de dados MySQL. Atravs do MySQL
Terminal, onde os comandos so todos por linha e com o phpMyAdmin, onde tudo
visual e mais fcil.

Na aula de introduo mostrei para voc como instalar o PHP e o MySQL na sua
mquina. Junto foi o phpMyAdmin. Se voc no viu esse vdeo, v at a aula de
Introduo e assista novamente. Alm disso a maioria dos servidores Linux que voc
contratar vem com phpMyAdmin instalado. Veja com o suporte do seu hosting.

Video
! Criando sua primeira base de dados
Antes de mais nada preciso apresentar a vocs o phpMyAdmin. Apesar desse nome
nos levar a acreditar que trata-se de "Meu administrador de PHP", ele na realidade tem
como funo principal administrar os seus bancos e tabelas MySQL.

Claro que posso criar, editar, excluir tabelas utilizando comandos de linha, como os que
usamos no prompt de comando do Windows ao manipular arquivos. Mas como no sou
to masoquista assim e no quero ver vocs sofrendo, por isso vamos utilizar algo mais
visual, utilizando o recurso do mouse para acessar bancos e tabelas. isso vai agilizar o
seu trabalho e dessa forma iremos logo ao que interessa.

Os comandos fundamentais do MySQL iremos ver mesmo assim, l na frente, quando
conectarmos com nosso script PHP. Ento senta, senta que l vem a histria!


Conectando o PHP a um banco MySQL
Com o banco de dados criado, devemos agora fazer com que aquele formulrio que
vimos na aula 02 se conecte ao banco da dados que criamos, no caso o banco de dados
"astrogildo", mais precisamente na tabela "formulario". Para isso eu preciso dizer ao
PHP:

1. O endereo onde est localizado o seu MySQL
2. O login para acessar o banco de dados
3. A senha para acessar o banco de dados
4. O nome do banco de dados

Sempre nessa ordem. No vdeo mostro direitinho pra voc como ser nossa empreitada
rumo ao desconhecido.
Video

Tudo que voc queria saber sobre PHP e MySQL mas
tinha vergonha de perguntar ao Tio Bruno


1. Eu no entendi a diferena entre banco de dados e tabela. Ambos no servem
pra guardar dados?
R: Sim, mas as tabelas servem para dividir melhor os dados. Imagina voc jogando um
monte de currculos numa caixa bem grande. A voc tem que procurar o currculo do
Zezinho dentro de uma caixa com mais de 10 mil currculos. Se tivesse uma caixa
grande, com caixinhas pequenas separadas por ordem alfabtica seria melhor no
mesmo? Voc procuraria a caixinha da letra Z e assim acharia o currculo do Zezinho.

2. Eu no posso colocar todo o cdigo SQL diretamente no mysqli_query () ao
invs de colocar tudo no $query?
R: Sim, voc pode mas a coisa ficaria bem bagunada. Assim fica mais fcil entender
seu cdigo.

3. Legal, aprendi como inserir dados em uma tabela MySQL, mas ainda estou um
pouco confuso sobre como as tabelas e seus dados foram parar l. E agora?
R: Entendo sua preocupao querido(a) aluno(a). verdade que voc precisa entender
como a coisa funciona e no apenas usar o cdigo que lhe apresentado. At agora,
voc criou uma tabela sem entender muito da sintaxe CREATE TABLE. Pelo menos o
formulrio do Astrogildo deu certo mas quando voc precisar criar vrias tabelas de seu
prprio projeto, a o bicho vai pegar. Voc tambm vai precisar prestar ateno no tipo
de dado que voc estar armazenando e pensar sobre a melhor maneira de represent-la.
Mas no se preocupe pois a brincadeira s est comeando. Vamos deixar isso para as
cenas dos prximos captulos. Aguarde!
Arquivos da Aula 02
Voc quer comparar o seu arquivo da Aula 02 com o meu? Ento clique aqui e faa o
download.


Parte 04

Criando um sistema de Newsletters
At o momento vimos apenas o bsico do bsico do bsico, que foi a criao de um
formulrio gravando em banco de dados. Agora vamos fazer realmente uma aplicao
PHP pra valer com tela de administrao e tudo. Podemos dizer que esse ser a sua
primeira aplicao em PHP. E ser um sistema muito til, mais precisamente um
sistema de envio de newsletter!
Astrogildo entra para o mundo da Moda
Tenho uma novidade muito legal para lhe contar. Astrogildo, aproveitando a sua fama
quase que internacional, resolveu entrar no mundo da moda das ursinhas de pelcia. Ele,
com seu faro apurado para o mundo dos negcios percebeu o mercado milionrio de
roupinhas e acessrios para ursinhas de todo mundo. Foi a que teve a brilhante idia de
abrir a sua loja, a Astr Fashion Bear.

Comercializando apenas figurinos de primeira qualidade diretamente das Ilhas Kodiak,
a terra dos ursos marrons, Astrogildo viu a necessidade de divulgar isso para o mundo,
principalmente para suas fs brasileiras. Depois que criamos o formulrio do
Astrogildo, ele recebeu dezenas de centenas de milhares de emails carinhosos de suas
fs. A partir da coletou alguns emails e agora quer divulgar para elas sobre o
lanamento de sua loja.

Astrogildo pensou em pegar seus 1580 emails e colocar no Outlook. S que o coitado
desistiu depois de copiar/colar os emails 340 vezes. Astrogildo precisa de uma soluo
para isso.


Uma aplicao PHP feita especialmente para
Astrogildo
Uma aplicao um software desenhado especialmente para atender as necessidades
especficas de seus usurios. Astrogildo precisa de uma aplicao onde o prprio
usurio possa cadastrar o seu email, adicionando esse email numa lista gravada no
banco de dados e tambm uma aplicao voltada para o envio de emails a todos os
cadastrados bastando colocar o texto e clicar em "enviar". Ento, a aplicao deve
seguir os seguintes requisitos:
Possibilitar o cliente (Astrogildo) a enviar emails para sua lista atravs do seu
navegador web;
Escrever o texto da mensagem, clicar em "Enviar" e a mensagem ser enviada a todos
os cadastrados em sua lista de emails.
Permitir a incluso de novos emails em sua lista a partir de seus usurios atravs de
uma pgina de cadastro.

A partir da j podemos arquitetar uma aplicao para nosso amigo Astrogildo. Bora desenhar
esse esquema?


Plano de Ataque!
Vamos primeiro planejar como vamos comear a fazer isso tudo. Precisamos seguir um
plano, comeando, claro, pelo comeo.

1. Criar a base de dados e as tabelas da lista de emails.
Essa tabela dever conter primeiro nome, ltimo nome e email.

2. Criar o formulrio de cadastro de email com seu script PHP para adicionar
novos clientes a lista.
Esse formulrio dever ser algo simples, onde o cliente dever colocar facilmente seu
primeiro nome, ltimo nome e seu email.

3. Criar o formulrio de envio de email com seu script PHP para o envio de
mensagens para todos os emails cadastrados.
Finalmente iremos construir um formulrio onde nosso querido amigo Astrogildo
poder compor sua mensagem de email e o mais importante, o script que far com que
essa mensagem seja enviada para todos os emails cadastrados.

Comeando com a base de dados e as tabelas
O processo de criao da base de dados e das tabelas semelhante ao da ltima aula,
quando fizemos o mesmo para o formulrio do Astrogildo. Dessa vez siga os passos
atravs do PHPMyAdmin:

1. Em criar "novo banco de dados", crie o banco astrofashiobear sem esquecer de
colocar collation latin1_general_ci

2. Em astrofashiobear crie a tabela lista_email com 3 arquivos.

3. Em lista_email insira os campos nome, sobrenome e email, todos do tipo VARCHAR
e tamanho 20, 20 e 60 respectivamente. Basta mandar executar e pronto! Base de dados
criada!

Criando o cadastro de emails
Astrogildo precisa de uma pgina contendo um formulrio para coletar os emails de sua
clientela. Para isso iremos criar um script PHP que se conecte a base de dados que
criamos, incluindo esses dados na tabela lista_email.

Na pgina cadastro.html vamos colocar apenas trs campos e um boto "enviar". A
intermediao entre o cadastro.html e o servidor ser feito pelo enviarcadastro.php.

Vamos ver melhor tudo isso atravs do nosso primeiro vdeo. Ento senta, senta que l
vem a histria!
Video

Criando a aplicao de envio de emails
Bem, j vimos como criar o cadastro de emails, agora vamos para o mais importante, a
tela de envio das mensagens para todos esses emails onde Astrogildo ir entrar em
contato com suas freguesas.

A construo dessa aplicao bem semelhante ao que fizemos no cadastro de emails
mas com uma grande diferena: a ao do sistema dever ser feita repetidas vezes,
enviando mensagem por mensagem a cada destinatrio sem a necessidade de clicar
vrias vezes no boto "enviar". Tudo dever ocorrer automaticamente at o ltimo
endereo de email.

Em nosso segundo vdeo de hoje mostrarei como faremos o sistema de envio de emails
do Astrogildo. Confira!


Video
Descadastrando emails
importante sempre oferecer ao assinante do newsletter uma forma dele mesmo se
desecadastrar da lista. Portanto temos que criar um sisteminha de descadastro.

O sistema muito simples e bem parecido com o script de cadastro. Por isso vou fazer
uma brincadeira com vocs. Tentem criar o sistema de descadastro sozinhos, apenas
com as dicas que vou dar a seguir. Depois de tentarem, passe para a prxima pgina
para ver a soluo completa do caso. ;)

1. Crie dois arquivos, o descadastrar.html e removeremail.php

2. O descadastrar.html um formulrio simples, apenas com campo email e um action
para removeremail.php

3. Em removeremail.php no se esquea da sequncia: primeiro se faz a $conexao com
local do banco de dados, login, senha e nome do banco de dados, depois puxe o
contedo do campo $email usando o array global $_POST, siga com o $consulta onde a
dica utilizar o comando de banco de dados "DELETE FROM lista_email WHERE
email = '$email'". Faa o $result, logo depois crie um echo com algo como 'Email
removido:' . $email; e finalmente fecha a conexo.

Veja se voc consegue. Coloque um email que est cadastrado no banco de dados e
ento tente descadastr-lo com esse sisteminha. Somente depois de tentar, dando certo
ou no, passe para a prxima pgina.

SOLUO: Descadastrando emails


O sisteminha simples, se voc no conseguiu foi porqu esqueceu alguma coisinha.
Veja s como ficaram os cdigos.

1. descadastrar.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Astr Fashion Bear - Cadastro de Emails</title>
</head>

<body>

<h1>Astr Fashion Bear </h1>
<p>Coloque seu nome, sobrenome e email para se cadastrar em nossa newsletter.</p>
<p>
<form method="post" action="removeremail.php">
<label>Email:</label><input type="text" name="email" id="email" /><br />
<input type="submit" name="enviar"value="Enviar" />
</form>
</p>
</body>
</html>

2. removeremail.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Envio de Email</title>
</head>

<body>


<?php
$conexao = mysqli_connect ('localhost','root','123456','astrofashionbear')
or die ('Ih, deu erro na conexo com o servidor MySQL');

$email = $_POST['email'];

$consulta = "DELETE FROM lista_email WHERE email = '$email'";
$result = mysqli_query ($conexao, $consulta)
or die('Erro na consulta a base de dados.');

echo 'Email removido:' . $email;

mysqli_close($conexao);
?>


</body>
</html>

Viu que simples? Se voc no conseguiu, procure ver onde est o erro comparando os
cdigos.

Na prxima aula iremos turbinar esse newsletter, onde criaremos um validador de
emails, trabalharemos com AND, OR, Checkboxes e muito mais. At l! Para o alto e
avante!
Arquivos da Aula 03
Voc quer comparar o seu arquivo da Aula 03 com o meu? Ento clique aqui e faa o
download.


Turbinando o sistema de Newsletter com comandos
condicionais
Sistema de Newsletter do Astrogildo enfrenta problemas do mundo real
Normalmente quando planejamos sites e sistemas, no conseguimos prever todos os
problemas que enfrentaremos pelo caminho. Nos testes tudo parece mil maravilhas. Mas
quando colocamos o sistema no ar, a realidade bem outra.

Lembro do dia em que comprei minha primeira barraca de camping. Armei dentro do
quarto, fcil de instalar, rapidamente consegui mont-la. Dias depois l estava eu
correndo atrs da barraca que voava como uma pipa nas areias dos lenis maranhenses.

Eu no sabia que l ventava tanto. ;)

Por isso comum modificarmos nossos projetos aps colocarmos no ar devido a uma
coisa ou outra que no deu certo.

E esse o caso do sistema de newsletter do nosso amigo Astrogildo. Colocamos o
sistema no ar e dias depois Astr comeou a receber emails de suas freguesas com
reclamaes desconcertantes.

Veja que a maior reclamao referente a emails estranhos, que chegam em branco e
com mensagens de teste. Estranho, muito estranho!

Ser que o problema est no nosso enviaremail.php?

Bem, Astrogildo foi investigar o que estava ocorrendo e para sua surpresa, o grande
causador de toda essa dor de cabea era ele mesmo!


O problema entre a cadeira e o computador!

Isso mesmo! Astrogildo clicava no formulrio sem querer, mesmo quando no tinha
nada escrito no campo texto, apenas como teste ou sabe-se l porqu. Dessa forma,
todas as suas 1500 freguesas cadastradas em seu informativo recebiam os tais emails em
branco ou apenas com o assunto.

Para resolver isso precisamos colocar algumas condies na nossa programao que
diga ao PHP o que ele deve fazer em determinada situao.

Para isso utilizaremos alguns comandos condicionais. Esses comandos, para quem sabe
ingls, bem fcil de entender. Vejamos o nosso caso. Precisamos dizer ao PHP que ao
clicar no boto enviar seja verificado se o campo assunto e texto possuem algum
contedo. Caso no possua, o envio deve ser barrado para que no ocorra o problema do
email em branco ir para toda a lista. Ento, resumidamente, poderiamos dizer ao PHP o
seguinte:

"Ol Sr. PHP,

SE o assunto tiver contedo E o campo texto tambm,
ENTO envie o email.

Obrigado,

Bruno"

Traduzindo isso para o ingls seria mais ou menos assim:
"Hi Sr. PHP,

I F subject form contain text AND text form too,
THEN send email.

Thanks,

Bruno"
Basta traduzir o texto que j verificamos a existncia de trs comandos condicionais
importantes, o IF, AND e THEN. Ah! se PHP fosse em portugus! Seria mais fcil
entender alguns comandos. Se voc comear a traduzir alguns deles, a coisa ficar mais
fcil.

Existem outros, mas primeiramente vamos nos atentar a um deles, o IF.

Tomando decises com IF
O comando condicional IF pode fazer com que seu cdigo tome decises baseado em
informaes do tipo verdadeiro ou falso.

No exemplo abaixo mostro como geralmente utilizamos o comando IF:
if (isValid($numero_cadastro)) {

enviarCardastro();

}
1. Iniciamos com o comando IF

2. Inserimos a condio de teste ou expresso condicional, sempre entre parnteses aps
IF. Aqui que voc ir determinar se deseja testar a validade da informao, verificando
se verdadeiro ou falso.

3. Logo aps a expresso condicional, colocamos entre chaves a ao que deve ser
desencadeada caso a expresso seja verdadeira ou falsa.


Fale a verdade! Somente a verdade!
A principal funo do IF testar condies, com interpretaes de falso ou verdadeiro.
A aplicabilidade dessa funo variada, tanto para efeitos de comparao, validao de
cadastro. aplicao de aes e por a vai.



1000 e 1 utilidades do IF
Uma instruo "if" pode verificar se h mais do que apenas igualdade. A condio de
teste em sua instruo "if" pode tambm verificar se um valor maior do que outro. Se
for, o resultado da condio ser verdadeiro e o cdigo da ao ser executado. Aqui
esto alguns testes que voc pode usar para controlar a deciso de uma instruo if.



Trabalhando com IF e outras funes no sistema do
Astrogildo
Agora que voc sabe o que IF e os comandos condicionais mais importantes, vamos
trazer todos esses conhecimentos para a criao de solues que devero ser
empregadas no sistema de newsletter do Astrogildo, afim de proteg-lo de seus cliques
fora de hora.

Veja o vdeo e divirta-se!
Video
Agora com voc!


Vocs lembram do formulrio do Astrogildo que fizemos nas primeiras aulas? A sua
misso ser resgatar esse formulrio e fazer algumas modificaes importantes com os
conceitos que voc aprendeu na sala de hoje. O objetivo tornar todos os campos nome,
email e mensagens em itens obrigatrios. Se no houver preenchimento, uma mensagem
de erro deve aparecer, dizendo quais campos faltaram completar. E a, topa o desafio?

Na prxima aula voc poder comparar o seu cdigo com o meu e assim identificar os
possveis erros. Alm disso iremos incrementar ainda mais nosso sistema de newsletter.

Arquivos da Aula 04
Voc quer comparar o seu arquivo da Aula 04 com o meu? Ento clique aqui e faa o
download.

Finalizando o sistema de Newsletter com comandos
condicionais
Na ltima aula comeamos algumas reformas no sistema de Newsletter do Astrogildo
com o objetivo de proteger o sistema dele mesmo! Alcanamos algumas melhorias,
graas aos comandos condicionais que aprendemos. Agora precisamos finalizar esse
sistema pois ainda estamos escutando algumas reclamaes oriundas no s das
freguesas como do prprio Astrogildo.


Exibindo o formulrio sem clicar em "voltar"

Astrogildo me confidenciou que estava de saco cheio de clicar no boto "voltar" do
navegador toda vez que esquecia de preencher um dos campos do formulrio. Reclamou
mas no deu nenhuma idia. Ai ai ai! Ento tive que matutar aqui o que fazer.

Foi a que tive a idia de mostrar o formulrio junto com a mensagem de erro! E com
isso vocs tero oportunidade de conhecer algumas coisinhas.

Veja como ficou meu plano.


Colocando o plano em prtica!
Agora que voc tomou conhecimento do plano, vamos colocar ele em prtica. Voc
deve estar imaginando "Ah Bruno, isso moleza, basta repetir o formulrio, colocando
ele dentro do enviaremail.php com echo". Ah ? Ento tente fazer isso e depois volte
pra c.

Os problemas so muitos. Primeiro que mesmo que seja o email seja enviado com
sucesso, o formulrio ir aparecer. Outro problema, que ser muito chato, que o que
foi escrito no formulrio em admin.html no ser mantido no formulrio que aparecer
com a mensagem de erro. Imagina, voc escreve um texto enorme no campo mensagem,
esquece o assunto e ao clicar em enviar, aparece a mensagem de erro e o formulrio de
novo sem nada escrito? Vontade de chorar...

Por isso vamos fazer de uma forma que o formulrio aparea apenas com as mensagens
de erro e conservando o que foi escrito na tela anterior. Veja em nosso primeiro vdeo
como que vamos fazer isso. com voc Tio Bruno!

Video
As freguesas ainda esto insatisfeitas
Astrogildo ainda est passando por alguns problemas junto as suas freguesas queridas.
Veja:

Astrogildo! Eu recebi 5 emails seus com a mesma coisa!!! Ah, meu querido, assim no
d! Eu gosto muito de voc, acho voc um fofo, mas 5 emails iguais a j abuso!

Astr, eu concordo com ela, 5 emails iguais abuso mesmo. Mas pera, porqu 5
emails iguais?

, temos emails repetidos! E agora, quem poder nos defender?


No contavam com minha astcia!
Por alguma razo, freguesas de Astrogildo repetiram o mesmo email, apesar de nomes
diferentes. Vai ver da mesma famlia. Mas no interessa, temos que resolver isso
urgente! Sigam-me os bons!
Video

Soluo do Dever de Casa


Para voc que topou o desafio do exerccio e tentou em casa meus parabns! Agora
voc poder comparar com o meu cdigo. O objetivo era validar apenas os campos
nome, email e mensagem. Veja como ficou clicando aqui.
Arquivos da Aula 05
Voc quer comparar o seu arquivo da Aula 05 com o meu? Ento clique aqui e faa o
download.

Enviando, guardando e consultando arquivos atravs
do PHP e MySQL
Voc at agora aprendeu a guardar textos, nomes e nmeros no banco de dados no
mesmo? Agora, como que guardamos dados binrios? Estou falando de imagens,
arquivos PDF, ZIP, etc. Parece complicado mas s parece mesmo. No coisa do outro
mundo no, sem dvida mais fcil do que fazer um bolo de chocolate. Quer ver? Ento
pegue uma travessa untada e anti-aderente e vamos l!
Concurso de Pescaria: o novo hobby do Astrogildo

Astrogildo, ao voltar para as ilhas Kodiak, relembrou uma velha brincadeira de infncia
entre os ursos da regio. Como vocs sabem, ursos marrons adoram peixe, sobretudo
salmo. E pescar sempre fez parte da cultura local. Quando Astrogildo estava no Brasil
era frequente suas visitas a restaurantes japoneses para provar de tal iguaria e matar
saudade de sua terrinha.


Agora, de volta a Kodiak, Astrogildo promove concursos de pescaria para ver quem
pega o peixe mais pesado. Foi a que Astr teve a idia de armazenar todas essas
informaes na Internet e assim todos os competidores ficarem sabendo quem foi que
pegou o peixe mais gordo da ilha.

A voc deve pensar: "fcil, basta criar um formulrio onde o pescador colocaria o nome
e o peso do peixe. Isso seria gravado no banco de dados e quando consultado apareceria
numa lista em ordem descrescente de peso, mostrando no topo da lista o peixe mais
pesado."

Ah! Mas voc acredita em histria de pescador? Vai confiar na informao dada pelo
prprio sem nenhuma comprovao de veridicidade?

Veja s, tenho uma idia:


Criando o cadastro associado a data
A idia do esquema anterior onde iremos agregar uma foto ao cadastro boa. Assim o
pescador vai ter que comprovar atravs de foto que pegou mesmo um peixe com o peso
que ele registrou. T, tudo bem, ele at pode tentar burlar no Photoshop, mas pelo
menos um trabalho a mais e o que queremos dificultar a enrolao, no mesmo? ;)

Primeiro vamos fazer o cadastro simples, pedindo o nome, peso do peixe e fazer com
que ao gravar esse cadastro v junto a data de gravao. Veja o esquema:

Veja agora no vdeo abaixo como vamos fazer isso. com voc Tio Bruno!

Video

Download do arquivo SQL com para ser importado no banco de dados
Aqui est o arquivo que citei no vdeo com todas as configuraes da tabela "pescaria".
Basta clicar aqui e proceder como no vdeo.


Como guardar uma imagem no MySQL?
Agora chegou o ponto crucial, como que vou mandar uma imagem pro servidor e
guard-lo tambm no MySQL atrelado a um cadastro? Bem, vou apresentar para vocs
um plano de ataque que pode nos auxiliar nessa tarefa.



1a Etapa: Adicionando a coluna imagem
Como definido em nosso plano de ataque, vamos comear adicionando uma coluna na
nossa tabela pescaria. A forma como se faz voc j conhece, lembra do sistema de
newsletter? Pois ento, a coisa parecida, v no seu PHPMyAdmin, selecione o banco
"Astrogildo", clique na tabela pescaria e nas abazinhas que iro aparecer no topo,
selecione "Estrutura".

Em "Estrutura", l embaixo, adicione 1 campo, no final da tabela e clique em
"Executar".

Aparecer a tela de cadastro de novo campo, coloque o nome de "imagem", tipo
"VARCHAR" e tamanho 64. Clique em executar e pronto, est criado a nova coluna!

2a Etapa: incluindo o campo de envio de imagem em
adicionar.php
Voc agora dever editar o arquivo adicionar.php que comeamos a fazer no vdeo.
Abra o arquivo e faa a seguinte modificao:

<form enctype="multipart/form-data" method="post" action="<?php echo
$_SERVER['PHP_SELF']; ?>">
<input type="hidden" nome="MAX_FI LE_SI ZE" value="32768" />
<label for="nome">Nome:</label>
<input type="text" id="nome" nome="nome" value="<?php if (!empty($nome)) echo
$nome; ?>" /><br />
<label for="peso">peso:</label>
<input type="text" id="peso" nome="peso" value="<?php if (!empty($peso)) echo
$peso; ?>" /><br />
<label for="imagem">Imagem:</label>
<input type="file" id="imagem" nome="imagem" />
<hr />
<input type="submit" value="Adicionar!" nome="submit" />
</form>

Explicando:

enctype="multipart/form-data"
Isso um atributo de formulrio que diz que o formulrio usar um tipo especial
codificao para o envio de arquivos. Isso afeta a forma como os dados POST so
empacotados e enviados quando o formulrio submetido.

<input type="hidden" nome="MAX_FI LE_SI ZE" value="32768" />
Aqui estabeleo um tamanho mximo de arquivo que poder ser enviado, no caso o
mximo aqui de 32kb (32.768 bytes)

<input type="file" id="imagem" nome="imagem" />
Isso o campo especfico do tipo "file", onde aparecer o boto para escolher a
imagem, abrindo o gerenciador de arquivos e possibilitando ao usurio escolher o
arquivo que ser enviado.


3a Etapa: Inserindo o nome do arquivo na coluna
Imagem

Depois de fazer as alteraes no formulrio, devemos alterar tambm algumas coisinhas
no script. A primeira delas na linha INSERT INTO, onde devemos colocar assim:

$consulta = "INSERT INTO pescaria VALUES (0, NOW(), '$nome', '$peso',
'$imagem')";

Dessa forma o nome do arquivo da imagem enviada ser gravada no banco de dados.
Porm pra isso funcionar preciso algo mais, que irei mostrar na quarta etapa, siga em
frente!

4a Etapa: informando o local onde o arquivo ser
gravado
Vamos fazer com que a imagem aparea na listagem no seu index.php. Abra ele e aps:

while ($row = mysqli_fetch_array($dados)) {

coloque o seguinte cdigo:

echo '<tr><td class="pescadorinfo">';
echo '<span class="peso">' . $row['peso'] . '</span><br />';
echo '<strong>Nome:</strong> ' . $row['nome'] . '<br />';
echo '<strong>Data:</strong> ' . $row['data'] . '</td>';
if (is_file($row['imagem']) && filesize($row['imagem']) > 0) {
echo '<td><img src="' . $row['imagem'] . '" alt="imagem" /> </td></tr>';
}
else {

echo '<td><img src=vazio.gif alt="Sem imagem" /></td></tr>';

}
}


echo '</table>';

mysqli_close($dbc);
?>

Note que acrescentamos em echo algumas informaes para que a imagem aparea.
Deixa eu explicar algumas dessas linhas:

if (is_file($row['imagem']) && filesize($row['imagem']) >0) {
A funo "is_file" verifica se o arquivo da imagem realmente existe. J o "filesize"
verifica se o arquivo de imagem est vazio ou no, checando seus kilobytes.

echo '<td><img src="' . $row['imagem'] . '" alt="imagem" />
Portanto, se o arquivo imagem existir e se ele tiver tamanho em kilobytes maior que
zero, pode mostrar a imagem sem medo de ser feliz.

else {
echo '<td><img src=vazio.gif alt="Sem imagem" /></td></tr>';
Agora se o arquivo no existir ou tiver 0 byte, a ao invs de no mostrar nada, digo
para mostrar o arquivo "vazio.gif" com um alt "sem imagem".

Feito essas alteraes, basta gravar o index.php

Bem, chegou a hora de dizer ao PHP onde ele dever gravar as imagens e testar tudo pra
ver se realmente a imagem vai ser enviada. Fique agora com o segundo vdeo do Tio
Bruno. com voc!
Video

O index.php continua "Sem Imagem" ?


Se voc abriu o index.php e continua aparecendo "sem imagem", no fique preocupado
no, ainda daremos uma guaribada nesse index. Iremos adapt-lo para que a imagem
seja puxada do banco de dados, com os pesos em ordem descrescente, alm de criar
formas de remover o cadastro e uma pequena tela de administrao. T vendo? Tem
muita coisa ainda! Mas isso sero cenas dos prximos captulos. Aguardem!
Arquivos da Aula 06
Voc quer comparar o seu arquivo da Aula 06 com o meu? Ento clique aqui e faa o
download.


Enviando, guardando e consultando arquivos atravs
do PHP e MySQL - Parte II
Na ltima aula voc foi pego pela pegadinha do malandro, no foi? "Se voc t triste,
no fique triste" costuma dizer Malandro, mas no fique triste mesmo pois hoje iremos
solucionar esse problema e tantos outros que voc sequer sabia que existia.

Vamos comear ento a estruturar nosso script, fazendo algumas mudanas que nos
sero muito teis. A primeira separar do script algumas informaes de conexo e
caminhos de arquivo.
Compartilhamento de scripts requeridos

No nosso sisteminha de pontuao existem alguns comandos que se repetem na maioria
dos scripts. Que tal a gente separar essas informaes criando um outro arquivo e
fazendo apenas um link entre o arquivo e o script? Veja o esquema abaixo:


Voc deve fazer o seguinte, siga os passos:

1. Crie um arquivo chamado path.php
2. V at o adicionar.php e pegue somente a linha referente ao caminho da pasta onde
ficaro as fotos, esse aqui:

<?php
define('PASTA_UPLOAD', 'fotos/');
?>


3. Salve o arquivo path.php. Agora vamos chamar esse arquivo no index.php e
adicionar.php. Abra os dois arquivos e inclua a seguinte linha logo aps <?php:

require_once('path.php');

Pronto! Dessa forma voc poder facilmente incluir essa informao em outras pginas
e alterar o caminho da pasta de fotos modificando apenas um arquivo. Imagina o
trabalho que voc teria se tivesse que modificar mais de 10 arquivos que possuem o
mesmo dado?


Tudo que voc quis saber sobre require_once mas
tinha medo de perguntar

Ei Bruno, porqu uso esse require_once a? No podia ser um include? Qual a
diferena entre os dois?
R: Existem algumas diferenas entre o include e o require_once. Um deles quanto a
mensagem de erro. Quando o arquivo chamado pelo comando include no encontrado,
nada acontece e a pgina toda carregada, apenas no carrega o cdigo referente ao
include. J o require_once no, se o arquivo no for encontrado gera-se um erro fatal,
que no permite o carregamento de toda a pgina, ficando travado na mensagem de erro.

Como as informaes que estamos puxando so fundamentais, vimos que seria melhor
utilizar o require_once ao invs do include. Assim, em caso de erro nessas informaes,
o restante do carregamento no seria executado.


Tacando require_once na conexo tambm!
Outra informao importante que podemos separar em arquivo e puxar atravs do
require_once so as informaes de conexo. Para isso siga o passo a passo:


1. Crie um arquivo chamado conexao.php
2. V at o adicionar.php e pegue somente a linha referente a conexo e cole no arquivo
conexao.php:

<?php
// Define database connection constants
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', '123456');
define('DB_NAME', 'astrogildo');
?>


3. Depois de salvar conexao.php apague as informaes de conexo de index.php e
adicionar.php, substituindo inclua uma outra linha onde voc ir definir o tamanho
mximo do arquivo, ficando todo o cdigo assim:

<?php
define('PASTA_UPLOAD', 'fotos/');
?>

4. Salve o arquivo path.php. Agora vamos chamar esse arquivo no index.php e
adicionar.php. Abra os dois arquivos e inclua a seguinte linha abaixo de
require_once('path.php');:

require_once('path.php');
require_once('conexao.php');

Maravilha! Agora se voc alterar o nome do banco, senha, etc, facilmente voc poder
fazer no arquivo conexao.php, modificando em todos os scripts.


Colocando o peso em ordem
Voc deve ter notado que todos os pesos esto bagunados. No esto em ordem
decrescente com os maiores pesos entre os primeiros e os menores pesos no final. Hoje
esto ordenados por nmero de cadastro. Precisamos mudar isso. Mas como?

Veja como vamos fazer isso e algumas outras coisas no nosso vdeo de hoje. com
voc Tio Bruno!
video

Planejando a administrao do sistema
Para remover alguns resultados sem imagens, ou seja, sem comprovao de
autenticidade, perfeitamente possvel usar apenas o PHPMyAdmin para remover
manualmente os registros no banco de dados utilizando a funo DELETE. Mas isso
poder ser frequente e tornar um saco toda vez que recorrer a tela de administrao do
MySQL para apagar registros, sem falar no risco que Astrogildo vai ter de clicar num
boto errado e apagar a tabela toda! A idia aqui criar um aplicativo que possa ser
mantida pelo administrador do site com o menor risco de aborrecimento possvel.

O que precisamos de uma pgina que somente o administrador do site tenha acesso,
podendo us-lo para remover pontos. Estamos falando de uma pgina de Admin. Porm
precisamos ter muito cuidado em fazer uma distino clara entre a tela destinada ao
administrador do site e o layout destinado aos usurios do site.

Embora possamos fazer um script para remover os registros da tabela num arquivo do
tipo remover.php, precisamos de um script dentro do admin, que nos permita selecionar
cada registro para fazer a remoo. O script admin.php deve gerar uma lista de pesos
indo do mais alto para o mais baixo, com links em cada registro para remov-lo ao
clicar. Estes links repassaro os dados a serem removidos ao script removescore.php
que completar a operao.

Tio Bruno ir mostrar isso para gente em vdeo, veja:

video


Arquivos da Aula 07 e 08
Voc quer comparar o seu arquivo da Aula 7 e 08 com o meu? Ento clique aqui e faa
o download.

Segurana com PHP
Socorro! Apagaram tuuuudo!

Foi com os gritos de Astrogildo que fui acordado no meio da noite. Astr me ligou no
meio da madrugada para dizer que tinham apagado todos os registros do concurso de
pescaria. Fui correndo para a Internet quando me deparei com cena to desoladora.
Nada, absolutamente nada sobrou dos registros dos salmes e seus respectivos pesos.

E agora?

Tranquilizei Astrogildo dizendo q tinha uma cpia de backup guardada dos ltimos
registros. E que o que ele precisava era de segurana. Realmente vacilamos em deixar a
tela de administrao aberta.

Em breve reunio por teleconferncia Ilhas Kodiak - Brasil, chegamos a algumas
concluses e metas. Vamos a elas:

1. Proteo por usurio e senha. necessrio uma proteo para a tela de administrao,
com usurio e senha para que ela no fique assim exposta pra todo mundo. Somente
quem tiver posse desses dados conseguir acessar e remover os registros.

2. Criar um registro de usurios. Para que exista uma tela de login necessrio colocar
em algum local os dados de login e senha, registrando o usurio que a gente determinar.

3. Criar uma opo de moderao, onde antes do resultado entrar no ar voc poder
aprovar ou no aquele resultado.


Ento queridos alunos, sigam-me os bons!

Protegendo a tela da administrao
O que eu acho legal no Astrogildo que ele inventa essas besteirolas dele mas pelo
menos a gente acaba aprendendo. O nosso primeiro desafio colocar uma tela de login
e senha na administrao do sistema. Existem inmeras formas de se fazer isso porm
escolhi uma das formas, a autenticao via HTTP.

Com esse tipo de autenticao aparecer uma tela do prprio navegador pedindo o login
e senha da administrao, como esse que mostro a seguir:

PHP entra em ao atravs de seu acesso ao nome de usurio e senha digitada pelo o
usurio. Eles so armazenados no superglobal $SERVER, que similar a outros
superglobals que voc j usou ($ _POST, $_FILES, etc...). Um script PHP pode analisar
o nome de usurio e senha digitados pelo usurio e decidir se ele devem ser autorizado
ou no a ter acesso pgina protegida.

A autenticao HTTP t precisando de cabea...
A idia por trs de autenticao HTTP que o servidor possui uma pgina protegida e
ento pede ao navegador para alertar ao usurio que necessrio colocar um login e
senha. Se o usurio digita essas informaes corretamente, o navegador vai em frente e
deixa voc entrar na pgina. Este dilogo entre o navegador e o servidor ocorre atravs
de cabealhos, o que chamamos de headers, que so pequenas mensagens com
instrues especficas sobre o que est sendo solicitado ou entregue.

Headers so utilizados cada vez que voc visita uma pgina web e no apenas quando a
autenticao necessria. Veja no esquema abaixo como uma pgina web sem proteo
entregue a partir do servidor para o navegador com a ajuda de cabealhos:



Controlando headers com PHP
possvel criar e controlar headers utilizando PHP com a funo header(). Essa funo
imediatamente envia um cabealho do servidor para o navegador, onde deve ser
chamado antes de qualquer contedo real enviado para o navegador. Esta uma
exigncia muito rigorosa - mesmo se um nico caractere ou espao enviado frente de
um cabealho, o navegador ir rejeit-la com um erro. Por esta razo, as chamadas para
o header() deve preceder qualquer cdigo HTML em PHP. Veja s:



Autenticando com headers!
Autenticar a pgina de administrao usando headers envolve a elaborao de um
conjunto muito especfico de header, dois na verdade, que permitem ao navegador saber
como solicitar ao usurio um login e senha antes de entrar na pgina. Estes dois
cabealhos so gerados pelo cdigo PHP no script de administrao.

Preste ateno no vdeo do Tio Bruno, ele ir mostrar pra gente como faremos essa
autenticao. com voc Tio Bruno
Video
Segurana contra a m-f humana
Agora o problema outro. Desde que colocamos o sistema no ar, Astrogildo vinha se
queixando de pescadores maldosos e mentirosos que colocavam fotos claramente
photoshopadas, com salmes com o tamanho de verdadeiras baleias jubarte.

Infelizmente o PHP no tem olhos para poder verificar cada foto e barrar aqueles com
evidncias de montagem. Por isso a nica maneira de barrar esses registros criando
uma moderao a cada registro novo.

A idia que, na tela de administrao, aparea um link "aprovar" somente nos registros
includos recentemente.

Para isso desenvolvemos um plano, dividido em 4 etapas.

1. Criar uma outra coluna na tabela pescaria chamada "aprovacao".

2. Criar um script responsvel por modificar o status da aprovao no banco de dados,
se o administrador dizer que no est aprovado, ser gravado o nmero zero na coluna
aprovao, se for aprovado ser gravado o nmero 1.

3. Modificar a pgina de admin para incluir o link "Aprovar" somente nos registros
novos e assim possibilitar que o administrador aprove ou no o registro.

4. Mudar a pgina index para que sejam listados somente os registros aprovados, ou
seja, os que possuem o nmero 1 na coluna aprovao.

Para essa nova misso vamos chamar ele, o nosso querido, sbio e amvel guru, Tio
Bruno Tiburcio. com voc!

Listando apenas os aprovados no index.php
A ltima modificao que voc dever fazer no index.php para que ele possa listar
apenas os aprovados pelo moderador. Para isso necessrio passar um comando para o
banco de dados dizendo que deseja que apenas os que possuem valor 1 na coluna
aprovacao apaream na lista.
Substitua essa linha:
consulta = "SELECT * FROM pescaria ORDER BY peso DESC, data ASC";
Por essa linha:
$consulta = "SELECT * FROM pescaria WHERE aprovacao = 1 ORDER BY peso
DESC, data ASC";
No comando estou dizendo:

"Selecionar tudo em pescaria onde o valor da coluna aprovacao seja 1, ordenando por
peso em lista decrescente e data por lista ascendente."
Agora s testar e partir pra galera!

Arquivos dessa aula?
O desejo do seu querido professor que voc assista as aulas e tente fazer as alteraes
nos arquivos da aula 08, incluindo a autenticao e moderao conforme mostrado na
aula 09. Na prxima aula irei disponibilizar os arquivos para que voc possa comparar
com o seu cdigo e assim ficar todo serelepe. ;)
E piriri e poror!


Login e Senha Criptografada
Criando uma rede social de freguesas de Astrogildo

L vem de novo Astr com suas idias mirabolantes. Empolgado com as vendas de sua
coleo de inverno, Astrogildo resolveu investir no que h de mais moderno em
tcnicas de fidelizao de clientes.

Utilizando a filosofia de Silvio Santos que encara suas freguesas como colegas de
trabalho, Astrogildo teve a idia de juntar as freguesas em uma comunidade prpria,
para que possam se conhecer, fofocar e assim ajud-lo a vender mais.

Para isso Astrogildo me enviou um Fax (, em Kodiak no tem MSN mas ainda tem Fax
e telex) com o rascunho do que ele queria, veja s:

L vem de novo Astr com suas idias mirabolantes. Empolgado com as vendas de sua
coleo de inverno, Astrogildo resolveu investir no que h de mais moderno em
tcnicas de fidelizao de clientes.

Utilizando a filosofia de Silvio Santos que encara suas freguesas como colegas de
trabalho, Astrogildo teve a idia de juntar as freguesas em uma comunidade prpria,
para que possam se conhecer, fofocar e assim ajud-lo a vender mais.

Para isso Astrogildo me enviou um Fax (, em Kodiak no tem MSN mas ainda tem Fax
e telex) com o rascunho do que ele queria, veja s:


T vendo a, o que precisamos algo que lembre um pouco, de longe, um orkut da vida.
Pessoas acessam o site, se cadastram e esse cadastro aparece para todos os cadastrados,
acompanhado de uma fotinha. Clicando em cada fotinha e nome temos o perfil do
cadastrado.

A idia que cada freguesa possa incluir e editar seu prprio cadastro, criando inclusive
seu login e senha.

Assim que vi esse desafio pensei em vocs nobres alunos. Seria uma tima
oportunidade de ensinar mais sobre logins e cadastros. E ento, topa esse desafio?

Criando logins para cada usurio
Se voc est aqui porqu topou o desafio, no foi? Ento vamos nessa, planejando
primeiro a criao do nosso sistema de login. Na aula passada criamos uma rea com
login e senha porm era um cadastro s, o do administrador, que colocvamos direto no
PHP, sem precisar armazenar num banco de dados. Mas como faremos com que cada
usurio possa registrar seu login e senha sem nosso intermdio, gravando no banco de
dados? isso que faremos agora.

Teremos que cumprir trs etapas.

1. Incluir os campos login e senha na tabela freguesas

2. Criar um novo script de login

3. Conectar o sistema de login ao restante da aplicao.

Download do Banco de Dados e Arquivos - Parte I
O seu professor est bonzinho hoje. Resolveu disponibilizar alguns arquivos para
facilitar sua vida. Afinal voc no tem mais nada a aprender com eles pois j
aprendemos nas aulas passadas, ento praqu repetir o que fazer? Porm vamos ter que
fazer muitas mudanas nesses arquivos para que fique tudo direitinho como a gente,
alis, como o Astrogildo quer.

Portanto estou disponibilizando os arquivos, basta clicar aqui. Voc ir encontrar
um arquivo SQL com nossa tabela inicial, o index.php, editarperfil, verperfil, conexao e
path.php.

Depois de descompactar o arquivo, importe o SQL para o seu banco de dados e altere o
arquivo conexao.php com os dados do seu banco de dados.

Abra o index.php no seu localhost e veja se aparece uma listinha como essa:

Enquanto isso, vai clicando em "prximo" logo ai embaixo, no cantinho.

Download do Banco de Dados e Arquivos - Parte II
Como estava dizendo, no sistema da aula passada aprendemos a colocar login e senha
na nossa administrao. Mas aquilo foi uma maneira rpida e rstica de resolvermos o
problema do Astrogildo. O legal mesmo seria se pudessemos incluir novos usurios e
que tudo ficasse gravado no banco de dados. Pois isso que vamos aprender agora no
primeiro videozito de hoje do professor Bruno. Tio Bruno, com voc!
video
Novo SQL e Download do Arquivo de Login
Aqui esto os arquivos que citei no vdeo acima. Este download contm nosso segundo
SQL, onde voc deve remover o primeira tabela que criamos e importar essa que estou
disponibilizando agora, e tambm o arquivo login.php juntamente com os arquivos
alterados pois o professor aqui ficou com pena de vocs terem que digitar tanto. :)
Clique aqui para fazer o segundo download

Usurio cadastrando ele mesmo!
Precisamos agora criar uma janelinha que permita novas freguesas a se cadastrarem na
rede social de freguesas do Astr. Penso em um formulrio que tenha apenas 3 campos,
um de login e os outros dois campos para a senha e checagem de senha, onde a freguesa
colocar novamente sua senha para ver se est ok.

Colocando esses dados e clicando em assinar, o script deve acessar o banco de dados e
checar se o login j est sendo utilizado por outra pessoa. Se j existir, deve ser exibido
uma mensagem de erro. Se no existir, ento a gravao do registro realizada.

Com o registro gravado, a freguesa acessar o sistema e a sim completar os dados do
registro, clicando em editar perfil.

Como faremos isso? Tio Bruno vai dizer pra gente! Ento senta, senta que l vem a
histria!
Video

Arquivos finais da aula
Aqui esto os arquivos dessa aula, com tudo que foi mostrado e o resultado final.
Clique aqui para fazer o download de todos os arquivos dessa aula.

Arquivos da aula 09
Aqui esto os arquivos da aula09. Ainda teremos o bnus track onde falaremos sobre
SQL Injection. Aguarde!
Clique aqui para fazer o download dos arquivos da aula 09.



Desafio do Tio Ronaldo


"Chega de ursinho chega de elefantinho, o negcio agora ficou feio pro seu lado!
Apresento agora o Cambuquirio, o mascote bizarro do tio Ronaldo.

Ele est se sentindo meio triste porqu muita gente acha ele feio e com um nome muito
estranho. Por isso tente deix-lo mais feliz fazendo um mural de recados! Olha, no se
esquea que ele vai precisar administrar os recados pois creio que muita gente maldosa
vai postar mensagens indelicadas e deix-lo um pouco triste.
Bora l ento?
Fiz um briefing juntamente com Cambuquirio para que voc possa acertar no sistema e
conseguir deixar este cliente mais feliz.
Ento queridos alunos, sigam-me os bons! (clicando em prximo!)

Briefing
Mural de recados com rea de administrao restrita para excluir os recados
indesejveis.
Investimento:
$B 750,00 (Setecentos e cinquenta Billis).
Prazo de entrega:
5 Dias


Dicas
A aula sobre o concurso de pescaria foi bacana para aprender a fazer listagens de
contedo do Banco de Dados, que tal dar uma olhadinha lah?
Nas aulas 8 a 10 tambm aprendemos sobre segurana com PHP, vamo precisar usar
alguns passos para fazer autenticao no admin.
Veja um exemplo da utilizao do PHP com um HTML mais bonitinho. Tente seguir o
mesmo layout sugerido no exemplo abaixo:
Link do Mural
http://4twts.com/mural/index.php
Link do Admin
http://4twts.com/mural/admin.php
Campos necessrios para o Banco de Dados:
id, nome, email, mensagem, data
Agora com voc! Faa o exerccio, tenho certeza que voc capaz. Qualquer dvida
poste em nosso frum. Na prxima aula iremos disponibilizar aqui os arquivos desse
sistema para que voc possa comparar com o seu, ok?
Meus melhores cumprimentos,

___________________________
Tio Ronaldo


Cookies e Sesses
Na ltima aula aprendemos a criar uma pgina de cadastro de usurio com login e
senha, ainda mais criptografado. Realmente um luxo! Mas hoje percebemos que esse
sistema pode tomar corpo, ficar maior, com mais pginas e assim a autenticao http ser
insuficiente. Isso porqu o servidor web v cada solicitao de pgina sem o contexto de
outras requisies e por isso no pode lembrar os dados entre as requisies.

Alm disso toda hora as freguesas de Astrogildo tero que ficar colocando senha e login
por diversas vezes, quando o navegador pedir.

Precisamos de uma forma de manter o login e senha acionado entre as pginas at
mesmo quando saimos por alguns minutos do site e voltamos logo depois.

Como eu sou um resolvedor de problemas, c estou com a soluo. Tenho duas figuras
para apresentar para vocs, primeiro conheam o cookie!


Analisando um Cookie
Com esse rapaz a voc pode rastrear certos detalhes de usurios, como o nmero de
visitas, nomes, datas, etc. Cookie nada mais do que um pequeno arquivo de dados que
pode ter no mximo 4kb. Esse pequeno arquivo enviado para o navegador do usurio
e fica gravado no seu computador. Assim possvel passar informaes entre as pginas
do site sem necessidade de sempre fazer uma requisio ao servidor.

Ao contrrio de uma varivel, um cookie pode ter uma data de expirao. Quando chega
esta data de expirao, o cookie destrudo. Assim, os cookies no so exatamente
imortais, eles s "vivem mais" do que as variveis do PHP. Voc pode criar um cookie
sem uma data de validade, caso em que ele atua apenas como uma varivel PHP porm
no adianta, ele destrudo quando o navegador fecha.


Cookies gotas crocantes de PHP
O PHP nos fornece acesso aos cookies atravs de uma funo chamada setcookie () e um
superglobal chamado $ _COOKIE. A funo setcookie () usada para criar o cookie, definindoo
valor e data de vencimento de um cookie e o superglobal $ _COOKIE usado para recuperar o
valor de um cookie.

O poder do uso do cookie que seus dados persistem em vrios scripts, para que
possamos lembrar o nome de usurio sem a necessidade de efetuar login novamente
sempre que passar de uma pgina para outra dentro do mesmo site. Mas no se esquea,
tambm precisamos de arrumar o ID do usurio em um cookie, pois serve como uma
chave primria para consultas de banco de dados.

A funo setcookie () tambm aceita um terceiro argumento opcional que define a data
de expirao do cookie, que a data em que o cookie automaticamente eliminado. Se
voc no especificar uma expirao, como no exemplo acima, o cookie expira
automaticamente quando o
navegador for fechado.

Com Cookies, o Login muda
Se utilizarmos os cookies para potencializar nosso script de login, precisaremos ,ud-lo para
receber essas novas mudanas. O plano o seguinte:

Pelo que voc viu teremos que fazer algumas mudanas e tambm criar um novo arquivo, o
logout.php. Para isso Tio Bruno entra em ao em nosso primeiro vdeo de hoje. com voc
fess!

video

Autenticando atravs de sesses
Ser que no existe uma forma de fazer a autenticao mas gravando os dados no servidor ao
invs do navegador?

Sim, atravs de sesses! Eles so equivalentes aos cookies, gravando temporariamente os
dados de login e continua l podendo ser acessado pelo script e assim evitando ter que se
logar repetidamente.

Alm disso, permitem que sejam armazenados qualquer tipo de informao, assim como
arrays e certos tipos de resources. Outra coisa bacana das sesses que valores podem ser
alterados mesmo depois do envio do HTML. possvel at agrupar sesses e grav-las com
outros nomes carregando grupos diferentes de acordo com a necessidade.

Mas claro, existe um problema em utilizar a sesso que em alguns casos se faz preferir o
cookie. Sim, existe. Na sesso no tenho o controle de tempo de expirao como nos cookies.
Na sesso basta fechar o navegador que a sesso se perde e ento necessrio logar de novo.

Iniciando uma sesso
Para iniciar uma sesso basta chamar pela funo session_start(). J para forar o trmino de
uma sesso basta utilizar o session_destroy().

O melhor mesmo ensinar como a sesso funciona na prtica. Vamos ver isso na companhia
do nosso querido professor Bruno, com voc!
video
Arquivos finais da aula
Aqui esto os arquivos dessa aula, com tudo que foi mostrado e o resultado final.
Clique aqui para fazer o download de todos os arquivos dessa aula.

Soluo - Exerccio do Tio Ronaldo
Quer comparar os seus arquivos com o ltimo exerccio do Tio Ronaldo?
Clique aqui para fazer o download de todos os arquivos desse exerccio.


Como fazer um sistema de busca
Estamos de volta trazendo, claro, mais uma idia mirabolante de nosso querido Astrogildo. O
webdesigner camarada mandou email dizendo o quanto suas lojas Astr Fashion Bear estavam
fazendo sucesso. A procura era to grande que resolveu colocar em prtica um novo objetivo:
abrir uma nova filial de sua loja.

Porm para abrir uma nova loja necessrio funcionrios. E nas Ilhas Kodiak, diferente do
Brasil, emprego no falta. L a realidade contrria a nossa, sobra emprego e falta gente
desempregada! V se pode!

Ento o jeito foi fazer um intercmbio entre Ilhas Kodiak e Brasil afim de achar pessoas
dispostas a trabalhar em Kodiak, mais precisamente em sua loja.

Para isso Astrogildo coletou currculos de brasileiros durante alguns dias e o que mais
surpreendeu foi que ele nem anunciou no site essa abertura de vagase j tinha gente
mandando currculo. Temendo o sucesso estrondoso que esse convite de emprego far no
Brasil, Astrogildo me mandou email dando a seguinte idia:


Prepare-se para muitas funes!
A idia parece simples, um script que possibilite buscar palavras-chave dentro do
campo escolhido. Astrogildo poder buscar por cargo, descrio ou estado. Alm disso
ser exibido 5 resultados por pgina e bastar um arquivo para que essa busca funcione.

Para isso iremos aprender algumas coisinhas novas. Na realidade iremos trazer diversas
funes que juntas iro buscar as respectivas palavras-chave pelo banco de dados
minicurriculo.

Nesse script no podemos deixar nenhuma margem de erro. Imagino que voc deve
estar pensando logo de cara "Hum, basta colocar um SELECT nesse script pra buscar a
palavra desejada.

Por exemplo:

SELECT cargo, descricao, cidade FROM minicurriculo WHERE cargo = engenheiro

Temos um problema nesse SELECT. Ele mora no sinalzinho de igual. Lembre-se que o
campo de busca aberto, o usurio entra l e coloca qualquer palavra-chave, encanador,
bombeiro, balconista, o que der na telha. Portanto devemos levar isso em considerao.
Que tal colocarmos algo como...

SELECT cargo, descricao, cidade FROM minicurriculo WHERE cargo LIKE
'%engenheiro%'

Acredito que esse LIKE seja novidade pra voc. Esse rapaz faz uma busca mais
especfica entre as frases gravadas no MySQL ao ponto de encontrar no s a palavra
inteira mas tambm a metade dela. Por exemplo, digamos que ao invs de procurar
"engenheiro" procure por "engenh". O resultado seria todas as palavras que tivessem
"engenh" no seu nome. Seria mostrado algo como:

Engenheiro
Engenharia
Engenho
Engenhoca

Para que isso ocorra necessrio que a palavra esteja entre % aps o comando LIKE.

Bora explodir esse negcio?
Alm da funo LIKE do MySQL, precisamos aprender outras funes de PHP para
conseguirmos criar o sistema de busca. Uma delas apresento a vocs: o explode().

Esse nome tem tudo a ver com sua funo. Pense comigo: antes de uma granada explodir ela
toda uniforme, uma nica coisa, nada mais do que um objeto chamado granada.

Porm, quando a granada explode, vai caquinho de granada pra todo lado. Aquele objeto
nico chamado granada acaba se tornando dezenas de caquinhos de uma granada.

A funo explode() faz a granada explodir, ou seja, pega um string e corta ele em
pedacinhos, dividindo uma string em vrias strings.

Por exemplo:

//STRING
$cidades = "So Paulo, Rio de Janeiro, Belo Horizonte, Braslia, Fortaleza";

//TRANSFORMANDO A STRING EM VRIAS STRINGS
$resultado = explode ( ' , ', $cidades);

//FINAL
for ($i=0; $i
echo "Cidade $i: ".$resultado[$i]."
";
}


Se voc der uma olhadela rpida logo ir perceber o que fiz.

Primeiro mostrei a string com as cidades, sendo o primeiro item a cidade de So Paulo e
por ltimo Fortaleza.

Depois mandei "explodir" essa string, dizendo que cada item da string $cidades est
dividida por vrgula. Assim explode vai separar cada item que encontrar aps cada
vrgula.

Em resultado vemos o comando "For" que utilizamos quando queremos executar um
conjunto de instrues num determinado nmero de vezes. Afinal a string foi dividida
em vrios pedaos e precisamos imprimir isso na tela, um por um. O for necessrio
para que ele repita o mesmo comando at a ltima string.

Portanto digo que "for" vai inicializar do zero ($i=0). Ser mostrado na tela (echo) a
cidade acompanhado do $i resultando em $resultado[sua posio]. Vimos que $i
comea do zero e vai somando at o ltimo string. Portanto temos as cidades cuja
posies esto entre 0 a 4 listadas uma a uma.

Cidade 0: So Paulo
Cidade 1: Rio de Janeiro
Cidade 2: Belo Horizonte
Cidade 3: Braslia
Cidade 4: Fortaleza

A funo explode ser muito til em nossa busca. Afinal ser gerado um resultado com
diversas palavras-chave que dever ser dividido e listado. Logo mais veremos isso em
funcionamento. ;)

Descobrindo novas funes na prtica
O problema da maioria dos livros de PHP que eles no mostram as funes sendo aplicadas
na prtica. Mostram exemplos, mas nada mais do que isso. J ns, alunos do curso PHP para
Web Designers vamos aprender novas funes vendo esse treco funcionando. assim que
aprendemos pra valer! Por isso Tio Bruno vai mostrar, numa tacada s, uma srie de funes
importantes do PHP a partir do desenvolvimento do nosso sistema de busca de currculos.

Ser apenas um script, mas altamente poderoso. Querem ver? Ento senta, senta que l vem a
histria!

video

Arquivos finais da aula
Aqui esto os arquivos dessa aula, com tudo que foi mostrado e o resultado final. Alm disso
voc ir encontrar o minicurriculo.sql, bastando importar para seu banco de dados. Clique aqui
para fazer o download de todos os arquivos dessa aula.

Referncias
Se voc no tem um livro de PHP o acompanhando nessa jornada, conhea outras
opes na internet para consultar todas as funes utilizadas no PHP. Uma delas o
prprio manual oficial do PHP, que est disponvel na ntegra e gratuitamente na
internet, porm com aquela linguagem que s quem tirava 10 em matemtica no colgio
entende. Mas algumas partes do manual pode lhe ajudar como referncia. No link
abaixo voc ir encontrar todas as funes, variveis, operadores, classes, condicionais,
sintaxes e tudo mais que foi citado nessa aula e centenas de outras mais que voc poder
utilizar.
Clique aqui para visualizar as referncias do PHP do seu manual oficial


Como validar campos de um formulrio
Meus queridos alunos, estamos de volta com mais uma aulinha divertida de Tio Bruno. Hoje
vamos fazer uma coisinha que deixamos de fazer na aula passada, o cadastro de currculos!

Formulrio de cadastro gravando no banco de dados todo mundo aqui deve saber fazer no
mesmo? Mas validando campos utilizando expresses regulares? R, te peguei!

Precisamos validar os campos da seguinte forma:

1. Os campos nome, cidade, estado e descrio devem ser preenchidos.
2. O campo cep deve conter nmeros
3. O campo telefone deve conter nmeros e seguir uma regra de montagem
(Ex: (011) 8888-8888)
4. O campo email deve ser preenchidos com um email vlido, checando se o domnio tambm
vlido.

A validao de nome, cidade, estado, descrio, mole n pessoal! Ai ai ai, no me
decepcionem! Basta usar if e empty, lembram? Dizendo: se o campo estiver vazio, "if
(empty...)", uma mensagem de erro deve aparecer e o formulrio aparecer de novo, (
output_form = 'yes' )

Agora vem o problema. Veja s:


Respeitando padres
Bem, vocs viram que podemos escrever um nmero de inmeras formas. Com DDD,
sem DDD, junto, separado, enfim, no final uma baguna s.

O que queremos padronizar esses nmeros, forando o usurio a digitar o nmero do
jeito que a gente quer! Isso mesmo! verdade que o cliente sempre tem razo mas a
vezes temos que mandar tambm nessa parada.

Para que isso acontea precisamos fazer uso de expresses regulares.

PHP oferece uma poderosa forma de criar e combinar padres de texto. Voc pode criar
regras que permitem que voc procure por padres em seqncias de texto com
expresses regulares. Com a ajuda delas, voc poder fazer com que s sejam aceitos
telefones digitados seguindo esse padro (888)8888-8888, por exemplo.

Veja no exemplo abaixo uma expresso regular focado em 10 dgitos numa fileira. Este
padro ir somente coincidir com uma seqncia que consiste em um nmero de 10
dgitos. Se a seqncia mais ou menos do que isso, no ir corresponder. Se a cadeia
contm nada alm de nmeros, tambm no ser vlido. Vamos dividi-la.


Construindo padres utilizando metacaracteres
Assim como voc aprendeu que o metacaractere \n significa um pulo de linha, existe outros
metacaracteres que podem nos ajudar na nossa padronizao. Veja os mais utilizados:

\d dgito
\D no-dgito
\w palavra
\W no-palavra
\s espao
\S sem espao

Voc deve ter notado que sempre que tivermos a letrinha em maisculo ela quer dizer o
contrrio do significado que tem o metacaractere cuja letra est em minsculo.

Exemplo:

\s espao
\S sem espao

Alm disso temos outros caracteres importantes, veja:

^ : o circunflexo, carinhosamente apelidado de chapuzinho do vov, marca o comeo de uma
linha onde teremos a padronizao.

$ : j o cifro, carinhosamente apelidade de marquinha de dinheiro, marca o fim de uma linha
e s vlido no final de uma expresso regular.

. : o pontinho serve para fazer uma correspondncia entre dgitos. Ele ir corresponder a uma
letra ou um dgito, tal como \w, bem como um espao ou tabulao, como \s.

Ento vamos fazer um pequeno teste com o nmero de telefone. Se quisssemos seguir o
padro abaixo:

555-888-9999

Ou seja, 3 dgitos, um trao, 3 dgitos, um trao e 4 dgitos, como ficaria a expresso regular?

Tempo! Tic-tac, Tic-tac, Tic-tac, Tic-tac, Tic-tac, Triiiiiimmmm!

A resposta :
/^\d{3}-\d{3}-\d{4}$/

, dessa vez voc no levou a casa. Hoje quem vai levar a casa ooooo auditrio!

Padronizando nosso formulrio
Pronto, j que apresentamos as expresses regulares para voc j estamos preparados para
trazer tudo isso para o nosso formulrio de cadastro de currculo. Existem ainda muitos
delimitadores e funes que devemos aprender mas no se preocupe pois voc ficar sabendo
muito mais, agora, no nosso videozito de hoje. Diga l Tio Bruno!
video
Arquivos mostrados no vdeo
Aqui esto os arquivos dessa aula, com tudo que foi mostrado no vdeo. Clique aqui para fazer
o download de todos os arquivos dessa aula.

Testando domnios
Bem, testamos o campo de telefone, deu tudo certinho. Agora precisamos testar tambm a
veracidade do email, o que outra forma de contato muito importante e que no pode ser
inserida errada no nosso banco de dados.

Em nosso segundo vdeo de hoje, Tio Bruno ir mostrar como validar emails com expresses
regulares. Ento senta, senta que l vem a histria!
video


Desafio da Semana
O que vocs tem para fazer at a prxima aula? Nada? Ento tenho uma sugesto para
vocs: participar do nosso desafio da semana!

O desafio muito simples. Vocs devem ter percebido que nosso sisteminha de cadastro
no est gravando no banco de dados. Alm disso peo novos dados que no existem
em nossa tabela minicurriculos.

Portanto, voc, querido aluno, aplicado, inteligente, que acompanhou todas as nossas
aulinhas, receber a incumbncia botar esse negcio pra funcionar, fazendo com que ele
se conecte no banco de dados e grave todas as informaes alm de incluir no banco os
campos novos que aparecem no formulrio.

A dica verificar como fizemos a conexo e insero de dados no formulrios que
produzimos at hoje, como o formulrio de contato do Astrogildo, o formulrio de
concurso de pescaria ou o formulrio q cadastro das fregueses de Astr Fashion Bear. O
local onde voc deve colocar o cdigo de conexo eu jpa sugeri no arquivo da aula de
hoje. Agora com voc!

Faa o download do arquivo clicando em prximo ou em arquivos da aula 14.

Arquivos da Aula 14
Aqui esto os arquivos dessa aula, com tudo que foi mostrado no vdeo. Clique aqui
para fazer o download de todos os arquivos dessa aula.

Referncias
Voc quer conhecer novas expresses regulares e funes? Trago da Internet essa dica,
um tutorial sobre expresses regulares que pode valer como consulta a outras funes,
feito por Jos Ensio e publicado no frum Imasters.
Clique aqui para visualizar o tutorial sobre expresses regulares

Divulgando com RSS!
Alunos queridos do meu corao, estamos de volta com mais uma aulinha divertida de Tio
Bruno. Hoje iremos ressuscitar o sisteminha do concurso de pescaria, lembram? O senhor
Astrogildo Bear, o webdesigner camarada, estilista famoso e empresrio de sucesso, pediu
para que ajudssemos a divulgar o seu Concurso de Pescaria, pelo menos entre os
participantes. Ele disse que queria uma maneira de alertar todos os pescadors sempre que
entrasse um novo registro no site.

Foi a que pensei, pensei e pensei, buscando uma soluo para tal pepino.

Do nada, a idia surgiu! Claro, vamos manter todo mundo informado atravs de Feed!


O que Feed e RSS?
Para quem no sabe, basta consultar o Wikipedia para saber que Feed " um formato de
dados usado em formas de comunicao com contedo atualizado frequentemente,
como sites de notcias ou blogs. Distribuidores de informao, blogueiros ou canais de
notcias disponibilizam um feed ao qual usurios podem se inscrever, no formato de um
link. Outros formatos de dado possveis de serem comunicados por feeds so arquivos
de udio, podcasts e vdeos."

Bem, resumindo, Feed nada mais do que um arquivo contendo vrios links, seguidos
ou no de algum texto, reunindo todo o contedo de um blog ou site. A idia organizar
essas informaes de uma tal forma que qualquer navegador ou software de leitura
possa apresentar esses links do jeito que quiser.

Uma forma de organizar essas informaes de uma maneira que qualquer software leia
utilizar a especificao RSS. RSS nada mais do que um padro de organizao,
reunindo todas as informaes em um arquivo XML e possibilitando sua interpretao
em diversas plataformas, de sites a softwares.

A idia utilizar essa tecnologia para agrupar todas as informaes do concurso,
gerando um XML a partir do banco de dados e um link para que o usurio possa se
inscrever no RSS do Concurso.


Criando o RSS do Concurso
Vamos ento dar incio aos nossos trabalhos, onde irei mostrar como criar o RSS do Concurso
de Pescaria. Voc deve ter notado na imagem anterior que teremos outros campos alm
daqueles que criamos para o concurso. Para facilitar sua vida, j fiz o SQL com todas as
modificaes na tabela, incluindo os seus dados. Pegue aqui o arquivo pescaria2.sql e importe
para seu banco de dados "astrogildo".

Depois de importado as modificaes na tabela, vamos comear a trabalhar, assistindo ao
videozito do professor Brunildo. Ento senta, senta que l vem a histria!

video
Requisitando vdeos do YouTube com PHP!
Bora aprontar uma surpresa pro Astrogildo? Lembra que ele s queria uma forma de divulgar
as informaes do Concurso direto no navegador do usurio? Bem, isso j conseguimos com
RSS, por isso poderiamos dizer que a misso est cumprida? Nada disso! Como bons
profissionais que somos, temos que surpreender o cliente, fazendo mais do que ele pede. Por
isso tive uma brilhante idia que ir fazer os olhos de nosso ursinho camarada brilharem.
Vamos incluir vdeos com dicas de receitas de Salmo para nossos pescadores. Quer ver como?
Ento veja nosso segundo videozito de hoje. com voc Tio Bruno!
Colocando os vdeos para aparecer no index.php
Se vocs notarem, no vdeo no mostro como colocar o youtube.php para aparecer no
index.php. Mas muito simples. Basta colocar aps o link "Assine nosso RSS" o seguinte
cdigo:

echo '<h4>Sugesto de Receitas de Salmo em Vdeo:</h4>';
require_once('youtube.php');

Prontinho. A vai aparecer no rodap os vdeos selecionados. ;)


Arquivos do Desafio da Semana
E ento? Fez o nosso desafio da semana? Ah, claro que voc fez, aluno meu nunca me
decepciona! Agora compare o que voc fez com o arquivo do professor Bruno. Pegue o
resultado clicando aqui!

Arquivos da Aula 15
Aqui esto os arquivos dessa aula, com tudo que foi mostrado no vdeo. Clique aqui
para fazer o download de todos os arquivos dessa aula.

Referncias
Voc quer conhecer como funciona os feeds do YouTube e conhecer todas as suas
referncias?
Clique aqui para visualizar as referncias dos feeds do YouTube

Manipulando imagens com PHP
Bem queridos alunos do Curso PHP para Web Designers! Meus parabns a todos vocs que
conseguiram chegar at a ltima aulinha do curso depois de tantos obstculos, arrays e ifs!
Olha a que legal, os meninos trouxeram bebidas, as meninas trouxeram salgados, um ali
trouxe at o violo, para a festinha de despedida que vamos fazer no final da aula.

Mas no precisa chorar de saudade agora no pois ainda nos falta um desafio. Astrogildo me
ligou desesperado na madrugada dizendo que robs estavam atacando o site do concurso de
pescaria, incluindo dados falsos automaticamente com o objetivo de fazer SPAM. Nossa, que
absurdo! Tive que e solidarizar com Astrogildo e dizer "Amigo, pode ficar tranquilo, irei
encontrar uma soluo para voc. Levarei tal desafio aos meus queridos alunos e com certeza
iremos ajud-lo a banir esses robs malditos!

O desafio parece ir um pouco alm das nossas capacidades. Afinal a nica soluo ser mesclar
imagens com PHP, assim os robs no conseguiro decifrar o que tem dentro da imagem
gerada pelo PHP. Vamos hoje sair um pouquinho do bsico dando um gostinho para o PHP
intermedirio. Preparados?


Danando ao som do Captcha!
Vocs ja ouviram falar numa coisa chamada Captcha, no ? Com certeza voc j deve
ter topado com algum por a, principalmente em formulrios. s vezes so imagens com
frases dentro, palavras, letras ou nmeros. Ao lado temos que repetir o que tem escrito
dentro daquela imagem.

A idia simples. Nenhum sistema automtico de preenchimento de formulrios, vulgo
"rob" ir conseguir ler o que tem dentro de uma imagem. T, pode at conseguir ler
uma imagem simples que s tenha uma palavra, como aquelas ferramentas de trace
bitmap ou OCR, mas podemos dificultar colocando rabiscos por trs e distorcendo as
fontes, como um papel moeda com proteo a falsificaes.



De qualquer maneira para gerar um captcha necessrio conhecer algumas funes
novas contidas em uma biblioteca chamada GD2, com instrues para criao de
imagens automticas, que encontramos hoje em todo PHP. No Wamp j vem
funcionando, na maioria dos servidores remotos tambm.

A idia conseguir criar um captcha a partir de algumas instrues bsicas e
importantes do GD2.

Por isso vamos aprender algumas dessas funes agora, no nosso primeiro videozito de
hoje. Ento senta, senta que l vem a histria!
video
Danando ao som do Captcha - Parte II
Agora que aprendemos a fazer os mais variados desenhinhos com PHP, vamos fazer algo de
til agora. Finalmente criaremos o tal do Captcha. Para isso precisamos seguir os seguintes
passos:

1. Gerar letras aleatrias
2. Desenhar a imagem Captcha utilizando as letras aleatrias geradas automaticamente
3. Mostrar essa imagem Captcha no arquivo adicionar.php do Concurso de Pescaria
juntamente com um campo texto para que o usurio possa repetir a ordem das letras
apresentados pelo Captcha.
4. Verificar se o que o usurio digitou no campo corresponde as letras contidas no Captcha.

Vamos para mais esse desafio? Sim, bora, no nosso segundo videozite de hoje. com voc Tio
Bruno!
video
Certificado e Apostila
Nos prximos dias irei disponibilizar para download a apostila com tudo que foi dito no
curso e o certificado de cada aluno, ambos no formato PDF. Aguarde notcias no nosso
frum.
Sucesso para todos! Para o alto e Avante!
Tio Bruno vila