Vous êtes sur la page 1sur 57

1 Adicionando Vida s Suas Pginas Estticas

Est Vivo
Quero v-la dizer que eu sou chato agora...

Voc tem criado timas pginas web com HTML, com recursos de CSS mas tem percebido que os visitantes do seu site no podem fazer muita coisa alm de olhar
passivamente o contedo das pginas. A comunicao apresenta-se de forma unidirecional e voc gostaria de mudar isso. Na verdade, o que voc realmente gostaria de saber o que o seu pblico est pensando. Mas para isso precisa permitir que os usurios digitem informaes em um formulrio web, para que possa saber o que eles tm em mente. E seu site precisa ser capaz de processar essas informaes, para que elas lhe sejam entregues. Est comeando a parecer que voc ir precisar de mais do que HTML para levar seu site para o prximo nvel.

este um novo captulo 4

as vezes somente HTML no suficiente

HTML esttico e chato


O HTML timo para se criar pginas web, at a voc j sabe. Mas, e quando voc precisa que as pginas realizem alguma ao? Suponha que seja necessrio fazer uma busca em um banco de dados ou enviar um email... como fazer? O HTML deixa a desejar, porque uma linguagem sem vida, elaborada para exibir informaes que nunca se modificam.
Al?

O HTML timo quando a inteno apenas compartilhar uma foto do seu bicho de estimao... mas no tanto quando deseja interagir com os visitantes do seu site.

Estas pessoas esto em busca de interao.

O cdigo HTML destas pginas determinado quando o desenvolvedor web cria as pginas.

Servidor web

s se modificam Pginas HTML estticasweb edita um arquivo quando o desenvolvedorseu servidor web. html e o envia para o

Navegador web cliente

O servidor web representa uma grande parte do problema com o HTML esttico, uma vez que ele funciona como nada mais que um mecanismo de entrega sem graa. O navegador requisita uma pgina, o servidor responde com HTML, fim da histria. Para transformar sites em aplicaes web interativas, o servidor precisa assumir um papel novo, mais dinmico... um papel possibilitado pelo PHP. 2
Captulo 1

Com pginas HTML puras, o servidor simplesmente serve HTML esttico, que s capaz de exibir contedo.

O servidor web limita-se a servir uma pgina HTML esttica atrs da outra.

Com uma pequena ajuda do servidor!

adicionando vida s suas pginas estticas

PHP d vida s pginas web


O PHP lhe permite manipular o contedo das pginas web no servidor, imediatamente antes de a pgina ser enviada ao navegador cliente. Funciona da seguinte maneira: um script PHP executado no servidor, e pode alterar ou gerar cdigo HTML vontade. Uma pgina HTML ento entregue ao navegador, que no sabe e nem liga se h PHP envolvido na produo ou ajuste do HTML, no lado do servidor.

O navegador ainda recebe pginas HTML normais, mas o cdigo foi gerado dinamicamente atravs de PHP, no servidor.

O cdigo HTML destas pginas gerado por PHP, e pode se modificar dinamicamente, dependendo do que a aplicao web precisa.

Com PHP na parada, o servidor web capaz de gerar pginas HTML de forma dinmica, em tempo real.
Scripts PHP so armazenados no servidor web, onde so processados e depois os resultados entregues ao navegador como pginas HTML.
Servidor web

PHP
Navegador web cliente

Pginas HTML dinmicas se modificam em resposta lgica programtica presente nos scripts PHP, tornando-os incrivelmente flexveis.
Banco de dados MySQL

Os scripts PHP contm cdigo HTML e cdigo de script PHP, os quais o determinam o modo como . cdigo HTML manipulado O PHP armazena e retira dados de um banco de dados e os incorpora ao cdigo HTML gerado.

voc est aqui 4

Ces no espao
Este o Owen. Ele perdeu seu cachorro, Fang. Mas encontrar seu co no se restringe a uma simples tarefa de procurar pelo bairro. Acontece que Fang foi abduzido por aliengenas, o que expande a busca de Owen por todo o universo. Owen sabe um pouco de HTML e CSS e acha que um site personalizado poderia ajud-lo a resolver seu problema, ao permitir que outras pessoas compartilhem suas prprias experincias de abduo aliengena. Mas, para obter informaes das pessoas, Owen precisar de um formulrio web capaz de receber input (entrada de dados) dos usurios e notific-lo sobre esse input. Sem problema o HTML possui vrias tags para a criao de formulrios web.

Voc o viu?

mas o Os detalhes so confusos,ng foi Fa que ns sabemos que ao cu arrebatado em direo por um raio de luz.

Owen sabe um pouco de HTML e CSS e acha que poder usar a web como forma de ajud-lo a descobrir o paradeiro de seu co, Fang.

Captulo 1

adicionando vida s suas pginas estticas

Um formulrio ajuda Owen a descobrir toda a histria


O novo site de Owen, AliensMeAbducteme.com, tem por objetivo conect-lo com abduzidos que possam ajudar a esclarecer um pouco sobre o desaparecimento de Fang. Owen sabe que precisa de um formulrio HTML para requisitar histrias de abduo dos visitantes e que precisa descobrir se por acaso, eles viram Fang durante as suas jornadas interestelares. Mas Owen precisa de ajuda para conseguir montar o site e coloc-lo no ar. Eis o que ele tem em mente para o formulrio.

Este o campo para o endereo de email do visitante.


Owen quer uma descrio fsica dos aliens.

Owen espera que algum responda sim, que eles viram Fang na espaonave aliengena.

Quaisquer comentrios adicionais so colocados aqui.


Owen deseja receber uma mensagem de email quando o usurio submeter o formulrio.

Este formulrio 100%, puro HTML!

O que voc achou do formulrio HTML de Owen? Voc consegue pensar em quaisquer problemas com os quais Owen poder se deparar quando tentar obter dados sobre abdues usando este formulrio? V em frente, ponha suas ideias no papel.

voc est aqui 4

Se precisar de um refresco de memria Formulrios so feitos de HTML sobre como criar formulrios HTML, d O formulrio Relate uma Abduo de Owen (baixe este cdigo atravs olhada no Captulo do site da altabooks.com.br) se compe, inteiramente, de tags e atributos uma 14 de Use a Cabea! HTML. H campos de texto para a maioria das perguntas, botes de HTML com CSS & rdio para descobrir se o visitante viu Fang e uma rea de texto para XHTML. comentrios adicionais. E o formulrio est configurado para enviar os dados recebidos para o endereo de email de Owen. Owen ir receber o contedo deste formulrio enviado mailto um protocolo que permite para ele neste endereo de que dados de formulrios sejam email ponha aqui o seu enviados por email. prprio endereo para testar o formulrio. <p>Share your story of alien abduction:</p> <form method="post" action="mailto:owen@aliensabductedme.com"> Este valor diz ao servidor <label for="firstname">First name:</label> como enviar os dados. <input type="text" id="firstname" name="firstname" /><br /> Ser post ou get. Ns <label for="lastname">Last name:</label> explicaremos a diferena <input type="text" id="lastname" name="lastname" /><br /> mais frente. <label for="email">What is your email address?</label> As tags input dizem ao <input type="text" id="email" name="email" /><br /> formulrio para esperar <label for="whenithappened">When did it happen?</label> informaes, aqui.
<input type="text" id="whenithappened" name="whenithappened" /><br /> <label for="howlong">How long were you gone?</label> <input type="text" id="howlong" name="howlong" /><br /> <label for="howmany">How many did you see?</label> <input type="text" id="howmany" name="howmany" /><br /> <label for="aliendescription">Describe them:</label> <input type="text" id="aliendescription" name="aliendescription" size="32" /><br /> <label for="whattheydid">What did they do to you?</label> <input type="text" id="whattheydid" name="whattheydid" size="32" /><br /> <label for="fangspotted">Have you seen my dog Fang?</label> Yes <input id="fangspotted" name="fangspotted" type="radio" value="yes" /> No <input id="fangspotted" name="fangspotted" type="radio" value="no" /><br /> <img src="fang.jpg" width="100" height="175" alt="My abducted dog Fang." /><br /> <label for="other">Anything else you want to add?</label> <textarea id="other" name="other"></textarea><br /> <input type="submit" value="Report Abduction" name="submit" /> </form>

formulrio html do Owen

O atributo type diz ao do formulrio para esperar texto.

O formulrio fica contido dentro de tags <form> de abertura e de fechamento.

Nenhuma surpresa aqui o formulrio 100% puro cdigo HTML!

O boto "submeter" diz ao formulrio para executar a ao exposta ali.

Captulo 1

adicionando vida s suas pginas estticas

Test Drive
Teste o formulrio Relatar uma Abduo. Baixe o cdigo da pgina Relatar uma Abduo no site da Alta Books, em www.altabooks.com.br. O cdigo estar no cadastro deste Livro. O folder ch1 contm o formulrio de Owen em report.html, bem como uma folha de estilo (style.css) e uma imagem de Fang (fang.jpg). Abra a pgina report.html em um editor de texto e troque o endereo de email de Owen pelo seu. Em seguida, abra a pgina em um navegador web, digite algumas informaes no formulrio e clique no boto Relatar Abduo (Report Abduction).

style.css

l report.htm

fang.jpg

Quando voc submete o formulrio, isso resulta nos dados a serem enviados... ou quase isso.
O formulrio HTML no sabe, realmente, como enviar uma mensagem de email, ento ele delega a tarefa para o programa de email do prprio usurio.

Os dados do formulrio no so enviados para Owen, a no ser que o usurio manualmente envie esta estranha mensagem de email.
Ento, o que voc achou? Voc recebeu os dados do formulrio como uma mensagem de email na sua caixa de entrada?
voc est aqui 4

mailto = m idia

O formulrio HTML apresenta problemas


O formulrio Relatar uma Abduo est no ar, operante, mas ele no consegue obter muitas informaes dos usurios. Ser que a abduo de Fang corresponde a um incidente isolado... ou tem algo de errado com o formulrio. Vejamos o que os usurios tm a dizer.
Quando clico no boto, ele abre o meu programa de email, o Outlook, e nada do que digitei, durante 15 minutos, ficou registrado no formulrio! Eu observei algo parecido com o seguinte no campo Assunto: ?When=&Where=. Estou confuso.

Apareceu um email em branco. Todas as respostas que eu tive o trabalho de digitar foram ignoradas. Deveriam abduzir este formulrio idiota!

No aconteceu nada, porque o meu navegador no tem um cliente de email padro... seja l o que isso signifique.

Por algum motivo, o formulrio est extraindo mais frustrao de Owen informao dos visitantes do seudo que site.

O que est acontecendo aqui? Voc tem ideias sobre como consertar o formulrio? 8
Captulo 1

adicionando vida s suas pginas estticas

Parece estar tudo OK com o formulrio. Ser que o problema tem algo a ver com aquela parte do "mailto"?

Sim. O cdigo HTML do formulrio est correto, mas mailto no uma boa maneira de enviar dados O formulrio de Owen funciona bem at o usurio clicar no boto Relatar Abduo. Nesse ponto, voc passa a depender do recurso de mailto para empacotar os dados do formulrio em uma mensagem de email. Mas este email no enviado automaticamente ele criado no programa de mail padro do computador do usurio. E o pior: o usurio precisa enviar ele mesmo o email, para que os dados sejam realmente enviados para voc! Voc no tem nenhum controle sobre a entrega do email, significando que ele poder ou no fazer a viagem do seu formulrio web, passando pelo navegador do usurio e pelo seu cliente de email, at chegar a voc como uma mensagem de email. Nada bom. Voc precisa de uma forma para ter o controle sobre a entrega do formulrio web. Mais especificamente, voc precisa que o PHP empacote os dados em uma mensagem de email, e depois se certifique de que essa mensagem ser enviada. Isto envolve desviar a sua ateno do cliente (HTML, mailto, etc.) para o servidor (PHP).

O formulrio est timo, at que voc clica no boto"Relatar Abduo" ento tudo desmorona!

voc est aqui 4

lado-cliente versus lado-servidor

HTML roda no cliente


O formulrio de Owen foi escrito em HTML puro, com uma ao mailto que tenta enviar os dados via email. Embora a pgina report. html venha de um servidor web, ela preenchida e processada inteiramente no navegador web do usurio.
E u gostaria de receber a pgina "Relatar uma Abduo", por favor.

O navegador requisita a pgina web de Owen, a qual inclui o formulrio

Aqui est.

O software navegador do seu computador roda aqui, tambm conhecido como CLIENTE.
Agora, eu gostaria de submeter o formulrio com os dados que o usurio digitou, por favor.

2 O servidor retorna o cdigo HTML para a pgina web. 3 O usurio preenche o formulrio e o submete.
<form action = "mailto: ...

O software servidor web de Owen roda aqui, tambm conhecido como SERVIDOR.
Ahm, no tem nenhum trabalho para mim aqui.

Owen poder receber ou no o email.

4 A tag de ao do formulrio diz ao navegador para pedir ao programa de email do usurio que crie uma mensagem de email.

5 O programa de email do usurio cria uma mensagem com os dados do formulrio mas o usurio que precisa envi-los, manualmente, a Owen. O papel do servidor, aqui, limita-se a apenas entregar a pgina web ao navegador. Quando o usurio submete o formulrio, o navegador (cliente!) precisa resolver sozinho a questo de como fazer os dados serem enviados via email. O cliente no est equipado para entregar dados do formulrio esse um trabalho para o servidor.
10
Captulo 1

O servidor jamais entra em contato com os dados digitados em formulrios que usem mailto.

adicionando vida s suas pginas estticas

PHP roda no servidor


O PHP lhe permite controlar os dados que o usurio digita no formulrio, enviando-os para voc de forma transparente. O usurio digita o seu caso de abduo no formulrio, clica no boto Relatar Abduo e pronto! O cdigo PHP cria a mensagem de email, a envia para voc e ento gera uma pgina de confirmao para o usurio.
Eu gostaria de receber a pgina "Relatar uma Abduo", por favor. Aqui est.

1 O navegador requisita a pgina web de Owen.

2 O servidor responde com o cdigo HTML para a pgina web. 3 O usurio preenche o formulrio e o submete, enviando os dados a um script PHP presente no servidor.
Eu processo as informaes do formulrio e envio o email.

Agora, eu gostaria de submeter o formulrio, por favor.

<form action = "report.php" ...

4 O script PHP gera uma pgina de confirmao em HTML e envia os dados para Owen, por email. 5 O servidor envia uma confirmao em HTML ao navegador.

Owen recebe, com certeza, um email agradavelmente formatado.


Marque os lugares onde voc acha que os scripts PHP devem residir: no cliente no servidor em ambos em nenhum dos dois
voc est aqui 4

11

php uma linguagem do lado-servidor

Os scripts PHP rodam no servidor


O cdigo PHP roda no servidor e armazenado em scripts PHP que geralmente tem a extenso .php. Os scripts PHP frequentemente se parecem bastante com pginas HTML normais, porque contm tanto cdigo HTML quanto CSS. De fato, quando o servidor executa um script PHP, o resultado final sempre HTML e CSS puros. Assim, todo script PHP acaba se transformando em HTML e CSS, uma vez terminada a sua execuo no servidor. Vamos dar uma olhada mais detalhada no modo como o script PHP modifica o fluxo do formulrio web de Owen.

1 O navegador do cliente requisita uma pgina HTML neste caso, o formulrio Relatar uma Abduo".

report.html

2 O servidor retorna a pgina HTML.

Ao clicar no boto "Relatar Abduo", o usurio submete os dados do formulrio para o script PHP do servidor.

3 O usurio preenche o formulrio e o submete, fazendo o navegador repassar os dados para um script PHP no servidor.

12

Captulo 1

adicionando vida s suas pginas estticas

O PHP uma linguagem de programao do lado do servidor (serve-side) pois ele roda em um servidor web.

5 O servidor retorna uma pgina de HTML puro, gerada pelo script PHP.

O script PHP roda no servidor!


report.php

Embora o nome da pgina apare uma extenso .php no navegador, a com ela puro HTML, neste ponto.
6 O navegador exibe a pgina de confirmao.

report.php

4 O servidor executa o script PHP, o qual envia um email e gera uma pgina de confirmao em HTML.

O usurio v uma pgina de confirmao.


7 O email enviado para a Caixa de Entrada de Owen.

Owen recebe o email.

voc est aqui 4

13

o atributo action do formulrio

OK. Mas o que, realmente, faz o script PHP ser executado no servidor?

O atributo action dos elementos do formulrio o que conecta este ltimo ao script PHP, fazendo o script ser executado quando o formulrio submetido. Os formulrios so criados usando-se a tag HTML <form> e cada tag <form> possui um atributo action. O arquivo cujo nome voc inclui com o atributo action usado pelo servidor web para processar o formulrio quando este submetido. Assim, se o script PHP de Owen se chamar report.php, ento a tag <form> para conect-lo ao formulrio se parecer com o seguinte:

<form action = "report.php" method = "post">

Este o nome do seu script PHP.

Quando o usurio clica no boto Relatar Abduo, a ao do formulrio faz o script report.php ser executado no servidor, para processamento dos dados.

<html> <head> <title>Aliens Abducted Me - Report an Abduction</titl e> </head> <body> <h2>Aliens Abducted Me - Repor t an Abduction</h2> <link rel="stylesheet" type= "text/css" href="style.css " /> </head> <body> <h2>Aliens Abducted Me - Repor t an Abduction</h2>

O atributo action da tag <form> o que faz o script PHP ser executado no servidor, quando o formulrio submetido.

report.html

<p>Share your story of alien abduction:</p> <form method="post" action="re port.php"> <label for="firstname">Firs t name:</label> <input type="text" id="firstn ame" name="firstname" /><br />

report.php

14

Captulo 1

adicionando vida s suas pginas estticas

Perguntas Idiotas

no existem

P: R:

O que significa PHP?

P: R:

PHP um acrnimo que originalmente significava Personal Home Pages (Pginas Pessoais). De alguma forma, o acrnimo teve o seu significado modificado para PHP: Hypertext Processor (Processador de Hipertexto PHP). Este ltimo considerado um acrnimo recursivo, porque ele referencia a si mesmo um acrnimo (PHP) dentro do acrnimo. Inteligente? Confuso? Voc decide! Mesmo que o meu navegador esteja mostrando que o nome da pgina termina com .php, ela ainda puro HTML? Como possvel?

P:

Isso possvel porque a pgina comea a sua vida como cdigo PHP no servidor, mas transformada em cdigo HTML antes de ser enviada para o navegador. Assim, o servidor executa o cdigo PHP e o converte em HTML antes de envi-lo para ser visualizado no navegador. Isso significa que, mesmo que o arquivo .php contenha cdigo PHP, o navegador nunca v esse cdigo ele v apenas o cdigo HTML, resultado da execuo do cdigo PHP no servidor. Mas no verdade que toda pgina web se origina no servidor, inclusive as pginas HTML puras, em arquivos .html?

R:

Sim. Todos os arquivos que compem um site ficam armazenados no servidor . html, .css, .php, etc. Mas nem todos eles so processados pelo servidor. Os arquivos HTML e CSS, bem como arquivos grficos, so enviados diretamente para o navegador do cliente, sem preocupaes sobre o contedo deles. Os arquivos PHP so diferentes porque contm cdigos que so processados e executados no servidor web. No o cdigo PHP que enviado ao navegador, e sim os resultados obtidos ao se executar o cdigo PHP, esses resultados so HTML e CSS puros.

voc est aqui 4

15

seu 1o script php

Use PHP para acessar os dados do formulrio


Ento, Owen precisa de um script PHP capaz de fazer com que as informaes do formulrio cheguem a ele de forma mais confivel do que atravs do e-mail. Vamos criar esse script. No se preocupe em entender tudo agora ns chegaremos l:

<html> <head>

Os scripts PHP frequentemente comeam parecendose bastante com uma pgina HTML normal.

Ah, aqui que as coisas ficam interessantes este o comeo do cdigo PHP propriamente dito.

perfeitamente normal um script PHP incluir tags e atributos HTML normais.

<title>Aliens Abducted Me - Report an Abduction</title> </head> <body> <h2>Aliens Abducted Me - Report an Abduction</h2>

O bloco de cdigo inteiro PHP... o restante do script HTML normal.


Este pedao de cdigo PHP obtm os dados do formulrio, para que eles possam ser exibidos como parte de uma pgina de confirmao.

<?php $when_it_happened = $_POST['whenithappened']; $how_long = $_POST['howlong']; $alien_description = $_POST['description']; $fang_spotted = $_POST['fangspotted']; $email = $_POST['email'];

echo 'Thanks for submitting the form.<br />'; echo 'You were abducted ' . $when_it_happened; echo ' and were gone for ' . $how_long . '<br />'; echo 'Describe them: ' . $alien_description . '<br />'; echo 'Was Fang there? ' . $fang_spotted . '<br />'; echo 'Your email address is ' . $email; ?>

Aqui, ns usamos PHP para gerar cdigo HTML a partir dos dados do formulrio.

</body> </html>

Assim como uma pgina web normal, este script PHP termina fechando quaisquer tags HTML abertas.

16

Captulo 1

adicionando vida s suas pginas estticas

Test Drive
Modifique o formulrio de Owen de forma que ele use um script PHP para processar os dados do formulrio. Crie um novo arquivo de texto chamado report.php e digite nele todo o cdigo da pgina anterior. Esse o script que ir processar o formulrio web de Owen. O script PHP ainda no est conectado ao formulrio; abra a pgina report.html em um editor de textos e modifique a ao do formulrio para report.php em vez de mailto.
<form action = "report.php" method = "post">

report.html style.css fang.jpg report.php

Abra a pgina report.html em um navegador web, digite algumas informaes do seu caso de abduo no formulrio e clique no boto Relatar Abduo.

Dependendo do seu navegador, voc poder ver uma pgina web com um texto esquisito ou possivelmente apenas o cdigofonte PHP do script report.php.

Voc acha que assim mesmo que o script PHP deveria funcionar? Escreva aqui a sua opinio, e o que acha que est acontecendo.

voc est aqui 4

17

colocando scripts php no servidor

Os scripts PHP precisam ficar em um servidor!


A no ser que voc, por acaso, tenha um servidor web rodando no seu computador local, o script report.php no poder ser executado quando voc submeter o formulrio Relatar uma Abduo. Lembre-se, o PHP uma linguagem de programao e precisa de um ambiente onde possa rodar. Esse ambiente um servidor web com suporte a PHP. Scripts PHP e pginas web que dependem deles precisam ser colocadas em um servidor web real, no basta apenas abrir um script diretamente a partir de um sistema de arquivos local.

E se voc tiver um servidor web instalado localmente, e ele tiver suporte a PHP, ento poder testar os scripts PHP diretamente no seu computador.

Ao contrrio de pginas HTML, que podem ser abertas localmente em um m navegador web, os scripts PHP precisa sempre ser abertos atravs de uma URL, a partir de um servidor web.
Os navegadores web no sabem nada sobre PHP e, portanto, no so capazes de rodar scripts PHP.

Este script PHP representa apenas um monte de cdigo sem sentido para o navegador web.

O servidor web entende este cdigo PHP e executa o script!

Os servidores web com suporte a PHP so equipados para rodar scripts PHP e transformlos em pginas HTML que os navegadores possam entender.

Uma forma rpida de saber se uma pgina web est sendo entregue por um servidor web olhar se a UR comea com http:. Pginas web L abertas como arquivos locais sempre comeam com file:

Os scripts PHP devem ser executados em um servidor web, ou ento no funcionaro.

18

Captulo 1

adicionando vida s suas pginas estticas

Coloque os seus scripts PHP no servidor


perfeitamente vlido criar e editar scripts PHP no seu computador local. Porm, voc precisa colocar os arquivos em um servidor web antes de execut-los. Os arquivos PHP, frequentemente, so colocados junto com arquivos HTML em um servidor. No h nada fora do comum em colocar scripts PHP no servidor web basta coloc-los em um lugar onde as suas pginas web possam acess-los. Para fazer o upload (envio) dos arquivos para o servidor, voc precisar da ajuda de um utilitrio, como por exemplo, um programa de FTP (File Transfer Protocol ou Protocolo de Transferncia de Arquivos).

root

www

Geralmente, h uma pasta no servidor web onde a maioria, se no todos, os arquivos so armazenados.

A maioria dos scripts PHP aparece junto com outros arquivos, na mesma pasta, dentro do servidor.

report.html

report.php

style.css

fang.jpg

As imagens so, s vezes, armazenadas em uma pasta prpria, para melhor organizao no servidor... mas no neste caso.

Fazer o upload dos seus scripts PHP para um servidor web no o suficiente esse servidor tambm precisa ter o PHP instalado nele. Alguns servidores incluem o PHP por padro, alguns no.

P: R:

Perguntas Idiotas
o Apndice ii.

no existem

Como eu posso saber se o meu servidor web tem o PHP instalado?

Voc pode perguntar ao seu administrador, ou sua empresa de hospedagem de sites, ou ento pode realizar um pequeno teste, voc mesmo. Crie um arquivo de texto chamado teste.php e coloque o seguinte cdigo nele:
<?php phpinfo(); ?>

Se voc no tiver o PHP instalado no seu servidor web, consulte Nele, encontrar instrues para ter o PHP instalado e operante no seu servidor.

Este cdigo pede para que informaes sobre o PHP sejam mostradas no Agora, envie (upload) o teste.php para o serviservidor, e ento digite seu dor
a sua URL em um navegador web. Se o PHP estiver instalado no seu servidor, aparecero vrias informaes detalhadas sobre o PHP, incluindo a sua verso. Bingo!

Lembre-se de deletar o script phpinfo quando estiver terminado, desta forma, ningum mais consegue ver isto
voc est aqui 4

19

test drive no seu script php

Test Drive

Faa o upload dos arquivos da pgina Relatar uma Abduo e teste o formulrio... novamente. Envie os arquivos report.html, report.php, style. css e fang.jpg para um servidor web que tenha o PHP instalado. Digite a URL da pgina report.html no seu navegador, preencha o formulrio com informaes do seu caso de abduo, e clique no boto Relatar Abduo.

style.css report.html report.php fang.jpg

O script PHP funciona! Ele exibe os dados do formulrio em uma pgina de confirmao.

20

Captulo 1

adicionando vida s suas pginas estticas

Legal. Agora s preciso adicionar um pouco de cdigo PHP para enviar os dados do formulrio por email.

Isso mesmo. O script report.php ainda precisa de algum cdigo para enviar os dados para Owen por email. Mas isso no problema, porque o PHP oferece uma funo, que um pedao de cdigo pronto reutilizvel, que voc pode usar para enviar mensagens por email. Voc s precisa determinar o que a mensagem deve informar, e ento pode usar o PHP para cri-la e envi-la.

Um momentinho! Ns nem sabemos como o script report.php original funciona, e agora ainda temos de torn-lo capaz de enviar emails. Isso, tipo, muito difcil... o que vocs esto pensando!?

verdade. Para fazer mais coisas com o PHP, preciso saber mais sobre o PHP Assim, para adicionar a funcionalidade de email ao script report.php de Owen, voc ter de se aprofundar um pouco mais no PHP e precisar ter um entendimento slido de como o script funciona pelo menos at aqui.

voc est aqui 4

21

como o cdigo php muda para html

O servidor transforma PHP em HTML


Para que se entenda como um script PHP funciona, o principal entender o que acontece com o script quando ele executado no servidor. A maioria dos scripts PHP contm tanto cdigo PHP quanto HTML, e o PHP executado e transformado em HTML antes de o servidor enviar tudo na forma de HTML para o navegador web do cliente. No script report.php de Owen, o cdigo PHP gera a maior parte do contedo HTML no corpo da pgina de confirmao. O cdigo HTML em torno do PHP enviado sem modificaes.

Este cdigo HTML enviado sem modificaes para o navegador.


<html> <head> t an Abduction</title> <title>Aliens Abducted Me - Repor </head> <body> an Abduction</h2> <h2>Aliens Abducted Me - Report

Este cdigo PHP executado pelo servidor e gera o cdigo HTML contendo os dados que foram digitados no formulrio.

<?php appened']; $when_it_happened = $_POST['whenith = $_POST['howlong']; $how_long scription']; $alien_description = $_POST['aliende ]; $fang_spotted = $_POST['fangspotted' $email = $_POST['email']; echo echo echo echo echo echo ?> <br />'; 'Thanks for submitting the form. appened; 'You were abducted ' . $when_it_h . '<br />'; ' and were gone for ' . $how_long . '<br />'; ribe them: ' . $alien_description 'Desc />'; there? ' . $fang_spotted . '<br 'Was Fang l; 'Your email address is ' . $emai

</body> </html>

Mais cdigo HTML esttico, que transmitido pelo servidor ao navegador sem modificaes.

report.php

22

Captulo 1

adicionando vida s suas pginas estticas

Este cdigo HTML criado em tempo real pelo script PHP, o que permite ao cdigo fazer coisas interessantes, como por exemplo, incluir dados que acabaram de ser digitados em um formulrio.

Esttico isto no se modifica.

Dinmico modificase cada vez que algum submete o formulrio!

<html> <head> <title>Aliens Abducted Me - Report an Abduction</title > </head> <body> <h2>Aliens Abducted Me - Repo rt an Abduction</h2>

Thanks for submitting the form.<br /> You were abducted last Nove mber and were gone for 11 hours<br /> Describe them: <br /> Was Fang there? no<br /> Your email address is alfn @theyreallgreen.com

< / </html>

body>

report.php

O resultado final do script PHP uma pgina web em HTML puro, que foi gerada dinamicamente no servidor.

voc est aqui 4

23

anatomia do script php do owen

Desconstruindo o script PHP de Owen


O script report.php acionado pelo formulrio Relatar uma Abduo e o seu trabalho (no momento) acessar os dados digitados e gerar uma pgina de confirmao. Vejamos como. O primeiro pedao de cdigo corresponde a HTML puro. Ele simplesmente configura a pgina que estamos criando, incluindo algumas tags HTML requeridas em toda a pgina web.
<html> <head> <title>Aliens Abducted Me - Report an Abduction</title> </head> <body> <h2>Aliens Abducted Me - Report an Abduction</h2>

report.php

Aqui as coisas comeam a ficar interessantes. Estamos prontos para sair do cdigo HTML e entrar no PHP. A tag <?php abre uma seo de cdigo PHP tudo o que vier depois desta tag puro PHP.
<?php

Sim, este cdigo HTML mnimo normalmente voc teria um DOCTYPE, tags <meta>, etc., mas estamos mantendo as coisas simples, aqui. Daqui em diante, estaremos lidando com cdigo PHP... pelo menos at chegarmos tag de fechamento ?>.

Este cdigo rene os dados do formulrio e os armazena em variveis individuais, para que possamos acess-los posteriormente. As variveis do PHP permitem que voc armazene valores, sejam eles nmeros, textos ou outros tipos de dados.
$when_it_happened = $_POST['whenithappened']; $how_long = $_POST['howlong']; $alien_description = $_POST['description']; $fang_spotted = $_POST['fangspotted'] $email = $_POST['email'];

Cada linha do cdigo PHP rene os dados do field do formulrio para uma nova varivel

Agora sim! Aqui, as variveis que acabamos de criar so colocadas em ao, sendo inseridas no cdigo HTML, gerado dinamicamente. O comando echo ocasiona o output (sada) de cdigo HTML, que retornado diretamente para o navegador web.
echo echo echo echo echo echo 'Thanks for submitting the form.<br />'; 'You were abducted ' . $when_it_happened; ' and were gone for ' . $how_long . '<br />'; 'Describe them: ' . $alien_description . '<br />'; 'Was Fang there? ' . $fang_spotted . '<br />'; 'Your email address is ' . $email;

Produz a sada de cdigo html para o navegador

A tag ?> correspondente a <? encerra a seo de cdigo PHP. Daqui em diante, estamos de volta ao cdigo HTML normal.
?>

Isto fecha o cdigo php

Isto finaliza o cdigo PHP depois desta tag, estamos de volta ao HTML normal.
</body> </html>

24

Agora, termine a pgina fechando as tags HTML que havamos aberto.

Captulo 1

o seu cdigo Algumas regras PHP para a sua vida

adicionando vida s suas pginas estticas

O script report.php de Owen revela algumas regras fundamentais da linguagem PHP, que se aplicam a todo script PHP. Vamos dar uma olhada nelas. O cdigo PHP sempre fica entre tags <?php e ?>.

Seu cdigo , fica aqui.

<?php ... ?>

A maioria dos scripts PHP so apenas pginas HTML com cdigo PHP inserido em algum lugar estas tags informam ao servidor qual parte do cdigo PHP.

Toda instruo PHP precisa terminar com ponto e vrgula (;) echo 'Thanks for submitting the form.<br />';

Se por acaso seu cdigo falhar, verifique se voc no esqueceu de colocar o "ponto e vrgula". Isso acontece com mais frequncia do que se pode imaginar.

O "ponto e vrgula" informa ao PHP que isto corresponde ao final de uma instruo.

Caso haja qualquer cdigo PHP em uma pgina web, uma boa ideia nomear o arquivo com .php, e no com .html, no servidor.

No essencial, mas uma boa ideia nomear scripts PHP com a extenso .php.
report.php

Os nomes de variveis PHP precisam comear com um cifro ($). $email = $_POST['email'];

O cifro identifica claramente a varivel PHP, responsvel por armazenar informaes dentro de um script PHP.

Observando as variveis usadas no script report.php, voc consegue ver quaisquer outras regras do PHP referentes a variveis? Escreva-as aqui!

voc est aqui 4

25

nomeando as variveis

A varivel Encontrando o nome perfeito para a sua varivel corresponde a Alm de comear com $, os nomes de variveis PHP so tambm case- um container sensitive. Mas isso no tudo existem outras regras importantes para ^ os nomes que voc pode dar s suas variveis. Algumas delas se referem onde voc pode sintaxe, significando que o seu cdigo falhar se voc as ignorar, armazenar dados, e enquanto outras outras obras correspondem a apenas boas ideias transmitidas de uma gerao de programadores PHP para outra. cada varivel tem Vamos comear com as regras oficiais que iro definitivamente causar um nome nico. problemas se voc ignor-las ao nomear suas variveis. Siga estas regras
para criar nomes de variveis vlidas. O primeiro caracter tem de ser um cifro ($).

Entendido!

O nome da varivel precisa ter no mnimo um caracter. O primeiro caracter depois do cifro pode ser uma letra ou um "underscore" (_), e os caracteres seguintes podem ser uma letra, um underscore ou um nmero. Espaos e caracteres especiais, fora _ e $, no so permitidos em nenhuma parte do nome de uma varivel

Sem contar o $, que requerido no nome de toda varivel.


Invlido! Nomes de variveis PHP no podem conter hfens nem espaos.

$email

Vlido

$fang-spotted

Vlido

$how_long

permitidos em nomes de variveis PHP.

$when-it happened id $what_they_d ption Invlido! Hfens no so alien_descri

Vlidol

Se voc no seguir estas regras, o seu cdigo no funcionar. Existem ainda, outras regras que podem ser seguidas por uma questo de convenes de programao. Estas so regras que ajudam a tomar o cdigo PHP um pouco mais consistente e fcil de ser lido. Use minsculas nos nomes das variveis.

Invlido! Nomes de variveis PHP precisam comear com um cifro ($).

Os nomes das variveis PHP Em nomes de variveis com mais de uma palavra, devem comear separe-as com "underscores". com um cifro($), Se voc ignorar estas duas ltimas regras, no sero geradas falhas no seu cdigo. Certamente, voc encontrar cdigos PHP que no e no podem seguem estas regras e, mesmo assim, funcionam perfeitamente. Isso ocorre porque estas regras sobre as quais estamos nos referindo conter espaos.
tratam-se de uma conveno estilstica. Elas tornam-se teis quando comeam a criar e nomear suas prprias variveis.
Captulo 1

26

P:

Perguntas Idiotas
para os navegadores. O PHP no muda esse fato. O que o PHP lhe permite fazer modificar o contedo HTML em tempo real, inserindo dados como a data de hoje, informaes retiradas de um banco de dados, ou at mesmo valores calculados, como o valor total do pedido, em um site de compras. Assim, o PHP permite que voc manipule o HTML que compe as pginas web, em vez de t-las criadas estaticamente, apenas uma vez. bastante comum ter uma pgina HTML com cdigo PHP aqui e ali para inserir dados importantes, ou alterar programaticamente o HTML de alguma forma.

no existem

adicionando vida s suas pginas estticas

R:

Faz diferena escrever os comandos PHP em maisculas ou minsculas?


Sim e no. Em geral, o PHP no "case-sensitive", portanto, voc pode misturar maisculas e minsculas na maioria dos comandos. Isso significa que voc pode usar echo, ECHO ou EchO. Entretanto, por uma questo de conveno, uma tima ideia ser consistente nos seus scripts. A maioria dos programadores PHP prefere usar minsculas na maior parte dos seus cdigos, e por isso que ver a grafia echo sendo usada nos exemplos de cdigos deste livro.

P:

R:

Ento, mesmo sendo uma m prtica de programao, posso misturar maisculas e minsculas no meu cdigo PHP?

P:

: Lembre-se de que toda pgina web corresponde ao resultado de uma comunicao de duas vias, envolvendo uma requisio feita pelo navegador cliente e uma resposta do servidor web. A URL a base da requisio, enquanto contedo retornado pelo servidor a resposta. Os scripts PHP so requisitados da mesma forma que pginas HTML normais, atravs de URLs digitadas no navegador ou linkadas a partir de outras pginas, ou como aes de formulrios. Isso explica porque a URL de uma pgina PHP mostra o nome do script.

P:

No completamente. A exceo corresponde aos nomes das variveis, o que tambm se aplica s localidades de armazenamento de dados que voc cria. Vejamos a varivel $email usada no script "Relatar uma Abduo", como exemplo. O nome desta varivel "case-sensitive", portanto, voc no pode se referir a ela como $EMAIL ou $eMail. Todos os nomes de variveis, em PHP, so "case-sensitive", por isso, importante nomear as variveis com cuidado e referenci-las de forma consistente, em todo o cdigo. Falaremos mais sobre nomes de variveis em outro momento.

R:

O cdigo PHP inserido em um arquivo HTML precisa estar na sua prpria linha ou posso coloc-lo em uma linha HTML, como parte do atributo de uma tag HTML, por exemplo?
Fora a necessidade de colocar o seu cdigo PHP dentro das tags <?php e ?>, no h restries sobre como inserir esse cdigo no HTML. Na verdade, necessrio colocar, frequentemente, um bloco de cdigo PHP no meio do cdigo HTML, por exemplo, quando est sendo configurado o atributo de uma tag HTML. Esse um uso perfeitamente legtimo do PHP.

P:

R:

J vi cdigos PHP iniciados por <? como tag de abertura, em vez de <?php. Isso est certo?

R: P: R:

Realmente no tem problema colocar cdigo PHP e HTML no mesmo arquivo?


Nenhum problema. Na verdade, em muitos casos, absolutamente necessrio fazer isso.

E por que colocar PHP e HTML no mesmo arquivo?

P:

Na verdade, no. Tecnicamente isso permitido, mas no recomendado. preciso que uma configurao do servidor esteja habilitada para que a tag abreviada (<?) funcione. A tag <? php usual sempre funciona, ento melhor simplesmente us-la, sabendo que o seu cdigo vai funcionar.

Porque o verdadeiro propsito um servidor web servir pginas web HTML

Se o servidor web sempre retorna HTML puro para o navegador do cliente, por que as URLs mostram o nome do script PHP, como, por exemplo, paginaweb.php?

Certamente. Voc pode us-las para armazenar dados Booleanos (verdadeiro/falso). E dados numricos podem ser tanto nmeros inteiros quanto de ponto flutuante (decimais). H tambm os "arrays", os quais armazenam um conjunto de dados, bem como objetos, os quais associam um conjunto de dados ao cdigo usado para manipul-los. Os "arrays" sero abordados um pouco mais adiante ainda neste captulo, enquanto os "objetos" so assunto do Captulo 12. Existe tambm um tipo de dado especial chamado NULL, que representa "nenhum valor". Por exemplo, uma varivel que no tenha nenhum valor atribudo a ela considerada NULL.

P: R:

A outra metade da equao a resposta do servidor, que o cdigo resultante gerado pelo script PHP. Uma vez que a maioria dos scripts PHP gera HTML, faz sentido que esse cdigo seja HTML e no PHP. Assim, no por acidente que a URL referencie um arquivo .php no servidor, o que faz o cdigo PHP ser executado no servidor, resultando em um contedo puramente HTML, que retornado ao navegador.

As variveis PHP podem armazenar outros tipos de dados?

voc est aqui 4

27

adicionando dados perdidos no owen

Ou a memria do PHP no to boa assim ou h algo de errado com o script... h alguns dados que no aparecem.

Claramente, foi digitada uma descrio (describe) dos aliens no formulrio...

...mas a descrio no aparece na pgina de confirmao.

28

Captulo 1

adicionando vida s suas pginas estticas

Aponte seu lpis

H um problema com os dados referentes descrio dos aliens, no script report.php de Owen. Circule as linhas do cdigo que voc acha que tem a ver com o problema e escreva o que elas esto causando. Alguma ideia do que h de errado?

<html> <head> <title>Aliens Abducted Me - Report an Abduction</tit le> </head> <body> <h2>Aliens Abducted Me - Report an Abduction</h2>

<?php $when_it_happened = $_POST['whenithappened']; $how_long = $_POST['howlong']; $alien_description = $_POST['description']; $fang_spotted = $_POST['fangspotted'] $email = $_POST['email'];

echo 'Thanks for submitting the form.<br />'; echo 'You were abducted ' . $when_it_happened; echo ' and were gone for ' . $how_long . '<br />'; echo 'Describe them: ' . $alien_description . '<br />'; echo 'Was Fang there? ' . $fang_spotted . '<br />'; echo 'Your email address is ' . $email; ?>

</body> </html>

report.php

voc est aqui 4

29

apontando soluo

H um problema com os dados referentes descrio dos aliens, no script report.php de Owen. Circule as linhas do cdigo que voc acha que tem a ver com o problema e escreva o que elas esto causando. Alguma ideia do que h de errado?
<html> <head>

Esta linha do cdigo obtm a descrio dos aliens do respectivo campo no formulrio HTML, e os dados armazena em uma varivel PHP chamada $alien_description.
Este cdigo combina a descrio dos aliens com alguns outros textos e cdigos HTML e envia tudo isso para o navegador.

<title>Aliens Abducted Me - Report an Abduction</tit le> </head> <body> <h2>Aliens Abducted Me - Report an Abduction</h2>

<?php $when_it_happened = $_POST['whenithappened']; $how_long = $_POST['howlong']; $alien_description = $_POST['description']; $fang_spotted = $_POST['fangspotted'] $email = $_POST['email'];

echo 'Thanks for submitting the form.<br />'; echo 'You were abducted ' . $when_it_happened; echo ' and were gone for ' . $how_long . '<br />'; echo 'Describe them: ' . $alien_description . '<br />'; echo 'Was Fang there? ' . $fang_spotted . '<br />'; echo 'Your email address is ' . $email; ?>

</body> </html>

Por algum motivo, a varivel $alien_ description parece estar vazia... nada bom.

report.php

30

Captulo 1

adicionando vida s suas pginas estticas

Variveis servem para armazenar dados de scripts


lit tle gre en men

As variveis PHP so como containers que armazenam informaes, da mesma forma que um copo armazena uma bebida. Uma vez que a varivel $alien_description est vazia, ns sabemos que os dados correspondentes do formulrio no esto chegando at ela. Assim, a varivel $alien_description permanece vazia, apesar da nossa tentativa de atribuir alguns dados a ela.

Este o nome da varivel.


$alien_description

Infelizmente, nosso copo encontra-se vazio.

Ns precisamos de um copo transbordando descries dos aliengenas!

$alien_description

Uma forma de consertar o script seria atribuir a string exata que estamos esperando para a varivel $alien_description, desta forma:
$alien_description = 'Homenzinhos verdes';

O sinal de igual instrui o PHP a atribuir o valor da direita varivel da esquerda.

Em PHP, os "pedaos" de texto, tambm chamados de strings, devem sempre ser colocados dentro de aspas, que podem ser simples ou duplas.

Este cdigo armazena, definitivamente, o texto 'homenzinhos verdes' na varivel $alien_description. Mas ns resolvemos um problema criando outro este cdigo faz a descrio ser sempre a mesma, independentemente do que o usurio digitar no formulrio.

Por algum motivo, a atribuio dos dados do formulrio referentes descrio dos aliengenas varivel $alien_description no est funcionando. $alien_description = $_POST['description']; O que voc acha que est errado com este cdigo?

voc est aqui 4

31

tudo sobre $_POST

O problema obviamente tem algo a ver com aquele negcio de $_POST. Mas no tenho ideia do que possa ser.

O problema, de fato, tem algo a ver com $_POST, que um mecanismo usado para que os dados do formulrio sejam transferidos para um script. O cifro no incio de $_POST uma dica... $_POST um container! Mais especificamente, $_POST um conjunto de locais de armazenamento usados para que os dados de um formulrio web fiquem armazenados. No caso de Owen, todos os dados enviados para script report.php so armazenados quando algum preenche o formulrio e clica no boto de Relatar Abduo. Assim, para acessar os dados do formulrio e fazer qualquer coisa com eles, ns temos que usar $_POST. Lembra-se deste cdigo?
$when_it_happened = $_POST['whenithappened']; $how_long = $_POST['howlong']; $alien_description = $_POST['description']; $fang_spotted = $_POST['fangspotted']; $email = $_POST['email'];

Os dados do formulrio referentes durao da abduo so atribudos varivel $how_long.

O mesmo acontece aqui, exceto pelo fato de que os dados referentes ao email esto sendo armazenados na varivel $email.

Assim, os dados de cada campo do formulrio Relatar uma Abduo so acessados usando-se $_POST. Mas o que exatamente $_POST... uma varivel?

32

Captulo 1

adicionando vida s suas pginas estticas

$_POST uma varivel especial, conhecida tambm como superglobal, porque ela interna ao PHP e fica disponvel para o script inteiro. $_POST j existe quando o seu script executado voc no a cria, como as outras variveis no PHP.

A superglobal $_POST armazena todos os dados digitados no formulrio.


$_POST[howlong]
<html> <head> <title>Aliens Abducted Me - Repor t an Abduction</title> </head> <body> <h2>Aliens Abducted Me - Report an Abduction</h2> <?php $when_it_happened = $_POST['whenith appened']; $how_long = $_POST['howlong']; $alien_description = $_POST['descrip tion']; $fang_spotted = $_POST['fangspotted' ] $email = $_POST['email']; echo echo echo echo echo echo ?> </body> </html>
report.php

'Thanks for submitting the form. <br />'; 'You were abducted ' . $when_it_h appened; ' and were gone for ' . $how_long . '<br />'; 'Describe them: ' . $alien_descript ion . '<br />'; 'Was Fang there? ' . $fang_spotted . '<br />'; 'Your email address is ' . $emai l;

A superglobal $_POST vinculada diretamente ao mtodo de submisso usado pelo formulrio HTML. Se o mtodo tiver sido definido como post, ento todos os dados so empacotados dentro da superglobal $_POST, onde cada informao pode ser retirada e usada conforme necessrio.

O nome howlong (por quanto tempo) vem do atributo name usado na tag <input> correspondente a este campo do formulrio.

... ion="report.php"> <form method="post" act ...

O mtodo de submisso do formulrio determina o modo como os dados so fornecidos ao script PHP.

report.html

Como voc acha que a superglobal $_POST funciona? Como ela capaz de armazenar mltiplos valores originrios de todas aquelas caixas de texto do formulrio de Owen?

11 hou rs

$POST uma varivel especial que armazena dados do formulrio

voc est aqui 4

33

$_POST como um array

$POST transporta os dados do formulrio para o seu script


$_POST um tipo especial de container PHP, conhecido como array, que armazena um conjunto de variveis sob um nico nome. Quando o usurio submete o formulrio de Owen, os dados que ele digitou nos campos so armazenados no array $_POST, cujo trabalho repassar esses dados para o script. Cada elemento do array $_POST corresponde a uma determinada informao, digitada em um determinado campo do formulrio. Para acessar os dados referentes a um campo especfico, voc usa o nome desse campo com $_POST. Por exemplo, a durao da abduo armazenada em $_ POST['howlong']. O cdigo HTML do formulrio de Owen revela o modo como os nomes do formulrio se relacionam com os dados armazenados em $_POST.
<p>Share your story of alien abduction:</p> <form method="post" action="report.php"> <label for="firstname">First name:</label> <input type="text" id="firstname" name="firstname" /><br /> <label for="lastname">Last name:</label> <input type="text" id="lastname" name="lastname" /><br /> <label for="email">What is your email address?</label> <input type="text" id="email" name="email" /><br /> <label for="whenithappened">When did it happen?</label> <input type="text" id="whenithappened" name="whenithappened" /><br /> <label for="howlong">How long were you gone?</label> <input type="text" id="howlong" name="howlong" /><br /> <label for="howmany">How many did you see?</label> <input type="text" id="howmany" name="howmany" /><br /> <label for="aliendescription">Describe them:</label> <input type="text" id="aliendescription" name="aliendescription" size="32" /><br /> <label for="whattheydid">What did they do to you?</label> <input type="text" id="whattheydid" name="whattheydid" size="32" /><br /> <label for="fangspotted">Have you seen my dog Fang?</label> Yes <input id="fangspotted" name="fangspotted" type="radio" value="yes" /> No <input id="fangspotted" name="fangspotted" type="radio" value="no" /><br /> <img src="fang.jpg" width="100" height="175" alt="My abducted dog Fang." /><br /> <label for="other">Anything else you want to add?</label> <textarea name="other"></textarea><br /> <input type="submit" value="Report Abduction" name="submit" /> </form>

O array $_POST preenchido com os valores que o usurio digitou no formulrio.

al fn @t .. .

la st .. .

Al f

Na de r

li tt le .. .

11

do ze ns

O nome do campo, no formulrio, determina o modo como ele acessado dentro do array $_POST.
...

firstname lastname

email

howlong

ho ur s

aliendescription howmany

whenithappened

$_POST
34
Captulo 1

Todos os dados do formulrio ficam disponveis atravs do array $_POST.

adicionando vida s suas pginas estticas

Aponte seu lpis


Examine o cdigo de report.php que est fazendo a descrio dos aliens ficar em branco e depois escreva a soluo para o problema. Dica: use o cdigo HTML do formulrio exposto na pgina anterior para ajudar a isolar o problema.

<html> <head> <title>Aliens Abducted Me - Report an Abduction</tit le> </head> <body> <h2>Aliens Abducted Me - Report an Abduction</h2>

<?php $when_it_happened = $_POST['whenithappened']; $how_long = $_POST['howlong']; $alien_description = $_POST['description'];

Lembre-se: anteriormente, ns isolamos o problema para essas duas linhas de cdigo.

$fang_spotted = $_POST['fangspotted'] $email = $_POST['email'];

echo 'Thanks for submitting the form.<br />'; echo 'You were abducted ' . $when_it_happened; echo ' and were gone for ' . $how_long . '<br />'; echo 'Describe them: ' . $alien_description . '<br />'; echo 'Was Fang there? ' . $fang_spotted . '<br />'; echo 'Your email address is ' . $email; ?>

</body> </html>

report.php

voc est aqui 4

35

apontando soluo

Examine o cdigo de report.php que est fazendo a descrio dos aliens ficar em branco e depois escreva a soluo para o problema. Dica: use o cdigo HTML do formulrio exposto na pgina anterior para ajudar a isolar o problema.

<html> /> escription" size="32" ... cription" name="aliend e="text" id="aliendes <input typ <head> ... <title>Aliens Abducted Me - Report an Abduction</tit le> </head>

O nome do campo em report.html aliendescription, diferente do nome description usado com $_POST.
Ns precisamos modificar $_POST para corrigir o nome do campo: aliendescription.

<body>

report.html

<h2>Aliens Abducted Me - Report an Abduction</h2>

<?php $when_it_happened = $_POST['whenithappened']; $how_long = $_POST['howlong'];

$alien_description = $_POST['description']; $fang_spotted = $_POST['fangspotted'] $email = $_POST['email'];

aliendescription

echo 'Thanks for submitting the form.<br />'; echo 'You were abducted ' . $when_it_happened; echo ' and were gone for ' . $how_long . '<br />'; echo 'Describe them: ' . $alien_description . '<br />'; echo 'Was Fang there? ' . $fang_spotted . '<br />'; echo 'Your email address is ' . $email; ?>

</body> </html>

report.php

36

Captulo 1

adicionando vida s suas pginas estticas

Test Drive
Conserte e teste o script. Modifique a linha de cdigo problemtica em report.php e depois a envie para o seu servidor web. Abra a pgina report. html no seu navegador, preencha o formulrio com as informaes do seu caso de abduo e clique no boto Relatar Abduo para submeter o formulrio agora corrigido script.

Agora, pgina de confirmao exibe corretamente os dados referentes descrio dos aliens!

Excelente. Mas acontece que ainda esto faltando alguns dados do formulrio...

voc est aqui 4

37

revisando o script php do owens

Aponte seu lpis


H alguns dados digitados no formulrio Relatar uma Abduo que ainda no estamos usando. Lembre-se, esses dados incluem informaes vitais sobre um caso de abduo, as quais poderiam ajudar Owen a encontrar seu co Fang. Portanto, precisamos acessar ou filtrar todos os dados do caso e armazen-los em variveis PHP.

Atualmente o script report.php est ignorando cinco campos do formulrio. Inacreditvel!


... <form method="post" action="report.php"> <label for="firstname">First name:</label> <input type="text" id="firstname" name="firstname" /><br /> <label for="lastname">Last name:</label> <input type="text" id="lastname" name="lastname" /><br /> <label for="email">What is your email address?</label> <input type="text" id="email" name="email" /><br /> <label for="whenithappened">When did it happen?</label> <input type="text" id="whenithappened" name="whenithappened" /><br /> <label for="howlong">How long were you gone?</label> <input type="text" id="howlong" name="howlong" /><br /> <label for="howmany">How many did you see?</label> <input type="text" id="howmany" name="howmany" /><br /> <label for="aliendescription">Describe them:</label> <input type="text" id="aliendescription" name="aliendescription" size="32" /><br /> <label for="whattheydid">What did they do to you?</label> <input type="text" id="whattheydid" name="whattheydid" size="32" /><br /> <label for="fangspotted">Have you seen my dog Fang?</label> Yes <input id="fangspotted" name="fangspotted" type="radio" value="yes" /> No <input id="fangspotted" name="fangspotted" type="radio" value="no" /><br /> <img src="fang.jpg" width="100" height="175" alt="My abducted dog Fang." /><br /> <label for="other">Anything else you want to add?</label> <textarea id="other" name="other"></textarea><br /> <input type="submit" value="Report Abduction" name="submit" /> </form> </body> </html>

A tag <input> de cada campo do formulrio a chave para se acesso aos dados, a partir do PHP.

report.html

Escreva o cdigo PHP a fim de criar quatro novas variveis que armazenem os dados do formulrio que esto faltando: $name, $how_many, $what_they_did e $other. Dica: Crie a varivel $name de forma que ela armazene o nome completo do usurio.

38

Captulo 1

adicionando vida s suas pginas estticas

Seu trabalho ainda no terminou. A pgina de confirmao gerada pelo script PHP precisa usar essas novas variveis para exibir mais informaes sobre a abduo.

Precisamos partir disto...

...para isto! Repare na quantidade de novas informaes exibidas.

O nome do usurio no essencial para a pgina de confirmao, mas voc precisar dele posteriormente, quando enviarmos o email com os dados para Owen.
Usando todas as variveis que acabou de criar, exceto $name, complete o cdigo abaixo, o qual ir gerar uma pgina de confirmao mais informativa. echo 'Thanks for submitting the form.<br />'; echo 'You were abducted ' . $when_it_happened; echo ' and were gone for ' . $how_long . '<br />';

echo 'Describe them: ' . $alien_description . '<br />';

echo 'Was Fang there? ' . $fang_spotted . '<br />';

echo 'Your email address is ' . $email;

voc est aqui 4

39

o script php do owen revisado

H alguns dados digitados no formulrio Relatar uma Abduo que ainda no estamos usando. Lembre-se: esses dados incluem informaes vitais sobre um caso de abduo, as quais poderiam ajudar Owen a encontrar seu co Fang. Portanto, precisamos acessar ou filtrar todos os dados do caso e armazen-los em variveis PHP.

Atualmente o script report.php est ignorando cinco campos do formulrio. Inacreditvel!


... <form method="post" action="report.php"> <label for="firstname">First name:</label> <input type="text" id="firstname" name="firstname" /><br /> <label for="lastname">Last name:</label> <input type="text" id="lastname" name="lastname" /><br /> <label for="email">What is your email address?</label> <input type="text" id="email" name="email" /><br /> <label for="whenithappened">When did it happen?</label> <input type="text" id="whenithappened" name="whenithappened" /><br /> <label for="howlong">How long were you gone?</label> <input type="text" id="howlong" name="howlong" /><br /> <label for="howmany">How many did you see?</label> <input type="text" id="howmany" name="howmany" /><br /> <label for="aliendescription">Describe them:</label> <input type="text" id="aliendescription" name="aliendescription" size="32" /><br /> <label for="whattheydid">What did they do to you?</label> <input type="text" id="whattheydid" name="whattheydid" size="32" /><br /> <label for="fangspotted">Have you seen my dog Fang?</label> Yes <input id="fangspotted" name="fangspotted" type="radio" value="yes" /> No <input id="fangspotted" name="fangspotted" type="radio" value="no" /><br /> <img src="fang.jpg" width="100" height="175" alt="My abducted dog Fang." /><br /> <label for="other">Anything else you want to add?</label> <textarea id="other" name="other"></textarea><br /> <input type="submit" value="Report Abduction" name="submit" /> </form> </body> </html>

A tag <input> de cada campo do formulrio a chave para se acesso aos dados, a partir do PHP
Este espao separa o primeiro nome do sobrenome.

report.html

O ponto final lhe permite juntar vrias strings de texto em uma s um processo conhecido como concatenao.
40
Captulo 1

Escreva o cdigo PHP a fim de criar quatro novas variveis que armazenem os dados do formulrio que esto faltando: $name, $how_many, $what_they_did e $other. Dica: Crie a varivel $name de forma que ela armazene o nome completo do usurio.

$name = $_POST[firstname] . . $_POST[lastname]; $how_many = $_POST[howmany]; $what_they_did = $_POST[whattheydid]; $other = $_POST[other];

adicionando vida s suas pginas estticas

Seu trabalho ainda no terminou. A pgina de confirmao gerada pelo script PHP precisa usar essas novas variveis para exibir mais informaes sobre a abduo.

Precisamos partir disto...

...para isto! Repare na quantidade de novas informaes exibidas.

O nome do usurio no essencial para a pgina de confirmao, mas voc precisar dele posteriormente, quando enviarmos o email com os dados para Owen.

O comando echo usado para enviar as informaes ao navegador, na forma de contedo HTML.

Usando todas as variveis que acabou de criar, exceto $name, complete o cdigo abaixo, o qual ir gerar uma pgina de confirmao mais informativa. echo 'Thanks for submitting the form.<br />'; echo 'You were abducted ' . $when_it_happened;

As tags <br /> ajudam a formatar as informaes no se esquea de que estamos usando PHP para criar HTML.

echo ' and were gone for ' . $how_long . '<br />';

echo Number of aliens: . $how_many . <br />; ente, pontos Novam finais so usados echo 'Describe them: ' . $alien_description para concatenar echo The aliens did this: . $what_they_did . <br />; strings e variveis. echo Other comments: . $other . <br />;

. '<br />';

echo 'Was Fang there? ' . $fang_spotted . '<br />';

echo 'Your email address is ' . $email;

voc est aqui 4

41

test drive no script php do owen

Test Drive
Ajuste o script de Owen e teste as modificaes. Adicione o cdigo das novas variveis a report.php, bem como o cdigo que envia as variveis para o navegador, com o HTML formatado. Em seguida, envie o script para o seu servidor web, abra a pgina report.html no seu navegador e preencha o formulrio com as informaes do seu caso de abduo. Finalmente, clique no boto Relatar Abduo para submeter o formulrio e ver os resultados.

P: R:

Perguntas Idiotas

no existem

O que realmente acontece quando eu fao a concatenao de vrias strings, usando pontos finais?

P:

P: R:

Concatenar, neste caso, significa juntar diversas strings para formar outra, totalmente diferente. O resultado final sempre uma nica string, no importa quantas tenham existido originalmente. Assim, quando voc concatena strings como parte de um comando echo , o PHP, primeiramente, as combina em uma s string e depois envia esta ltima para o navegador. Quando eu concateno uma varivel com uma string, a varivel precisa conter texto?

R: P:

OK, ento como, exatamente, o servidor transforma o cdigo PHP em cdigos HTML e CSS?

Em primeiro lugar, lembre-se de que, por padro, assume-se que o cdigo em um script PHP cdigo HTML. Voc pode identificar o cdigo PHP dentro de um script colocando-o entre tags <?php e ?>. O servidor v essas tags e entende que deve rodar o cdigo dentro delas como PHP e todo o cdigo fora dessas tags informado ao navegador como sendo um HMTL.

P: R:

No. Embora a concatenao sempre resulte em uma string, as variveis no precisam conter strings para que voc possa us-las em um processo de concatenao. Por exemplo, digamos que uma varivel contenha um nmero; o PHP primeiramente converte o nmero em uma string e depois a inclui na concatenao. O que acontece com o cdigo PHP no navegador?

Nada. E isso porque o cdigo PHP nunca visto pelo navegador. O cdigo PHP executado no servidor e se transforma em cdigo HTML, este sim sendo enviado para o navegador. Assim, o navegador nem sequer fica sabendo da existncia do PHP as pginas web chegam como puros HTML e CSS. Captulo 1

Ah, a que o comando echo entra em cena. Voc pode pensar no echo como um comando para enviar as informaes que estejam fora do domnio das tags <?php e ?>. Assim, o comando echo representa a chave para a capacidade do PHP de gerar cdigo HTML/CSS, dinamicamente. Concatenando strings de texto com variveis PHP, voc pode construir cdigo HTML em tempo real e depois usar echo para envi-lo ao navegador como parte da pgina web resultante. Um bom exemplo disso, no script report.php, quando a tag <br /> anexada ao final de um pedao de texto para gerar uma quebra de linha no HTML resultante.

R:

Certo. Mas isso ainda no explica como o cdigo PHP transformado em HTML/CSS. E ento?

42

adicionando vida s suas pginas estticas

A pgina de confirmao til para o usurio, mas no para mim. Ainda preciso que os dados do formulrio sejam enviados para mim atravs de um email.

O script PHP ainda precisa enviar os dados do formulrio para Owen. Da forma como est, o script report.php est usando os dados do formulrio Relatar uma Abduo para gerar uma pgina de confirmao HTML para o usurio. Mas isso ainda no est resolvendo o problema original, que baseia-se no envio de uma mensagem por email para Owen, uma vez submetido o formulrio. Ele quer apenas receber uma simples mensagem de email em modo texto, mais ou menos como a seguinte:
Alf Nader foi abduzido em novembro passado e esteve ausente por 11 horas.

De forma semelhante pgina web de confirmao, esta mensagem de email consiste em texto esttico, combinado com dados do formulrio.

Nmero de aliens: dzias Descrio dos aliens: homenzinhos verdes s O que eles fizeram: me perguntaram sobre leis para as OVNI Fang foi visto: no Outros comentrios: Por favor vote em mim.

Esta mensagem de email pode ser gerada a partir de cdigo PHP, criando-se uma string que combine textos estticos como "Outros comentrios:" com dados do formulrio que estejam armazenados em variveis. Escreva aqui como voc criaria uma mensagem de email a partir de texto esttico e variveis PHP.

voc est aqui 4

43

construindo o corpo da msg no php

Criando o corpo da mensagem de email com PHP


Voc j viu como um ponto final pode ser usado em cdigos PHP para concatenar vrias strings de texto em uma s. Agora precisa usar novamente a concatenao para criar uma string que ser a mensagem de email, com variveis sendo usadas juntamente com texto esttico.

Variveis e texto esttico so concatenados em uma nica string (a mensagem de email) usando-se pontos finais.

A maioria dos editores de texto, automaticamente, quebra o texto para a linha seguinte, mesmo que voc no inclua no cdigo a sua prpria quebra de linha (return).

$msg = $name . ' was abducted ' . $when_it_happened . ' and was gone for ' . $how_long . '.' . 'Number of aliens:' . $how_many . 'Alien description: ' . $alien_description . 'What they did: ' . $what_they_did . 'Fang spotted: ' . $fang_spotted . 'Other comments: ' . $other;

Um problema ao se criar uma string desse tamanho que ela demanda uma grande linha de cdigo PHP, difcil de ler e entender. Voc pode dividir o cdigo PHP em vrias linhas, para deix-lo mais fcil de ser estudado. Certifique-se, apenas, de separar o cdigo em pontos onde o espaamento no faa diferena, como por exemplo, entre duas strings concatenadas e no no meio de uma string. Em seguida, coloque um ponto e vrgula no final da ltima linha de cdigo, para finalizar a instruo PHP.

Lembre-se: cada varivel armazena uma string de texto retirada do formulrio Relatar uma Abduo.

Isto na verdade apenas uma grande linha de cdigo dividida em vrias linhas.

$msg = $name . ' was abducted ' . $when_it_happened . ' and was gone for ' . $how_long . '.' . 'Number of aliens: ' . $how_many . 'Alien description: ' . $alien_description . 'What they did: ' . $what_they_did . 'Fang spotted: ' . $fang_spotted . 'Other comments: ' . $other;

A linha de cdigo cuidadosamente dividida, evitando-se separar uma string no meio.

Quando uma linha de cdigo PHP : deliberadamente, dividida em vrias linhas, costuma-se indentar as linhas aps a primeira, para que se perceba, com mais facilidade, quais linhas compem uma mesma instruo no seu cdigo.
44
Captulo 1

Voc ainda precisa finalizar a instruo, com um ponto e vrgula.

Uma longa linha de cdigo PHP pode ser dividida em vrias linhas, desde que ^ voc tenha cuidado na hora de separar o cdigo.

adicionando vida s suas pginas estticas

Esse cdigo PHP certamente ficou bonito. Mas sem formatao, a mensagem de email no vai ficar toda bagunada?

Sim. S porque o cdigo PHP est bem organizado, no quer dizer que o seu output, (sada) automaticamente, tambm ficar bonito. Organizar o cdigo PHP para que voc possa entend-lo melhor completamente diferente de formatar o output que os usurios iro ver. Voc normalmente usar tags HTML para formatar o output do cdigo PHP, uma vez que, na maioria dos casos, o PHP usado para se gerar, dinamicamente, uma pgina web. Porm no neste caso. Aqui, estamos gerando uma mensagem de email, que puro texto, e no HTML. Precisamos lidar com o fato de que a mensagem, atualmente, se parece com o resultado seguinte:
Alf Nader foi abduzido em novembro passado e esteve ausente por 11 horas.Nmero de aliens: dziasDescrio dos aliens: homenzinhos verdesO que eles fizeram: me perguntaram sobre leis para as OVNIsFang foi visto: noOutros comentrios: Por favor vote em mim.

Hm... isto NO o que Owen tinha em mente para a sua mensagem de e-mail.

P:

Perguntas Idiotas

no existem

R:

Existe alguma maneira de se usar formatao HTML em emails que voc envia a partir de um script PHP?

Existe. Mas isso requer um passo adicional, que envolve definir o cabealho do tipo de contedo para a mensagem. Cabealhos e tipos de contedo vo um pouco alm do escopo desta discusso, por isso, estamos nos limitando a mensagens de email em formato de texto simples. Voc aprender mais sobre os cabealhos no Captulo 6, portanto, no se preocupe voc ver como enviar emails em HTML mais adiante.

Como voc reformataria a mensagem de email para torn-la mais fcil de ler?

voc est aqui 4

45

formatando texto com php

At mesmo texto simples pode ser formatado... um pouco


Uma vez que Owen est enviando mensagens de email como texto simples, sem nenhuma formatao especial HTML, ele no pode colocar tags <br /> para adicionar quebras de linha para separar o contedo. Mas ele pode usar caracteres newline (nova linha) , que so escapados na forma \n. Assim, em qualquer lugar do email onde aparea \n, ser inserida uma quebra de linha, fazendo o contedo que vier a seguir se iniciar na linha seguinte. Eis o novo cdigo para a mensagem de email, com os newlines adicionados:

Caracteres de escape em PHP comeam com uma barra invertida (\).

\n usado para que sejam inseridos caracteres newline na mensagem de email.

$msg = $name . ' was abducted ' . $when_it_happened . ' and was gone for ' . $how_long . '.\n' . 'Number of aliens: ' . $how_many . '\n' . 'Alien description: ' . $alien_description . '\n' . 'What they did: ' . $what_they_did . '\n' . 'Fang spotted: ' . $fang_spotted . '\n' . 'Other comments: ' . $other;

Os newlines me parecem uma boa ideia... pena que o cdigo no parece funcionar.

Alf Nader foi abduzido em novembro passa do e esteve ausente por 11 horas.\n Nmero de aliens: dzias \n Descrio dos aliens: homenzinhos verdes \n O que eles fizeram: me perguntaram sobre leis para as OVNIs \n Fang foi visto: no \n Outros comentrios: Por favor vote em mim.

: Um caracter de escape um caracter que: ou difcil de digitar ou que, por algum motivo, poderia causar confuso no cdigo PHP. Voc pode estar familiarizado com os caracteres de escape do HTML, programados de uma forma um pouco diferente, como por exemplo, &#169 ou &copy para o smbolo de copyright. O PHP tem um conjunto bastante pequeno de caracteres de escape que so teis para se escrever coisas que poderiam se confundir com a prpria linguagem, como por exemplo, aspas simples (\'), aspas duplas (\") e, claro, newlines (\n).

P: R

O que , exatamente, um caracter de escape?

O \n est aparecendo como texto normal, em vez de um caracter newline... nada bom.

46

Captulo 1

adicionando vida s suas pginas estticas

A concatenao O problema com o cdigo de Owen que o PHP trata as strings de forma no mais diferente, conforme elas se apresentem: dentro de aspas simples ou duplas. Mais necessria, especificamente, os caracteres newline (\n) s podem ser escapados dentro de uma vez que aspas duplas. Assim, a mensagem de email com os dados do formulrio precisa ser s construda usando-se strings dentro de aspas duplas, para as newlines funcionarem. as varivei podem ser Mas a histria das aspas simples x duplas no termina a. As strings dentro de aspas referenciadas simples so consideradas como texto puro, enquanto que o PHP processa as strings diretamente dentro de aspas duplas em busca de variveis. Quando uma varivel encontrada dentro da dentro de uma string em aspas duplas, o PHP insere o seu valor dentro da string, string entre como se tivesse ocorrido uma concatenao. Assim, a string dentro de aspas duplas no s necessria para o funcionamento dos newlines na mensagem de email, como aspas duplas.
tambm nos permite simplificar o cdigo, colocando as variveis diretamente na string.
$msg = "$name was abducted $when_it_happened and was gone for $how_long.\n" . "Number of aliens: $how_many\n" . "Alien description: $alien_description\n" . "What they did: $what_they_did\n" . "Fang spotted: $fang_spotted\n" "Other comments: $other";

Newlines precisam de aspas duplas

No preciso de uma nova linha quando for a linha final.

Os caracteres newline agora so interpretados corretamente, graas string apresentada entre . aspas duplas. Mas ainda precisamos dividir a mensagem em vrias strings concatenadas para tornar o cdigo mais legvel.

P:

Perguntas Idiotas

no existem

R:

Se as aspas duplas so to legais, por que que por que fizemos uso, praticamente, aspas simples, at agora? Bem, tenha em mente que as aspas simples no so processadas pelo PHP de nenhuma maneira, o que as torna ideias para strings que so puro texto, sem nenhuma varivel inserida. Assim, continuaremos a usar aspas simples ao longo do livro, a no ser que haja um bom motivo para usar as duplas. A coisa mais importante nesta questo de usar aspas simples ou duplas para as strings, tentar manter-se o mais consistente possvel.

P:

usar um apstrofo em uma string dentro de aspas simples, basta fazer escape dele como \', desta forma: ' He\'s lost! '. O mesmo se aplica se voc quiser usar uma s aspa dupla dentro de uma string delimitada por aspas duplas use \". No preciso fazer escape das aspas quando no houver conflito, como por exemplo, ao usar um apstrofo em uma string contida entre aspas duplas: "He's lost!". Ento, com as aspas simples, pode-se usar \' mas no \n. Como saber quais caracteres de escape eu posso usar dentro de aspas simples?

O que acontece se eu tiver de usar um apstrofo dentro de uma string que esteja dentro de aspas simples, como por exemplo, em 'He's lost!' (ele est perdido!)?

P:

R:

R:

As strings dentro de aspas simples s permitem os caracteres de escape \' e \\. Todos os outros caracteres de escape s podem ser usados em strings dentro de aspas duplas.

a que os caracteres de escape so teis. Para voc est aqui 4

47

crie email para owen

Crie uma mensagem de email para Owen


Com o corpo da mensagem gerado como uma string, voc pode prosseguir e montar o restante do email de Owen. Uma mensagem de email mais do que o corpo existem vrias partes diferentes. Embora algumas sejam opcionais, as seguintes informaes so usadas, praticamente, em todo o email:

1 Corpo da mensagem 2 Assunto da mensagem

J fizemos!

Voc pode colocar o que quiser aqui isto o que aparecer como o assunto do email, na caixa de entrada de Owen.

O endereo de email do usurio.

3 O endereo de email do remetente (campo FROM da mensagem). 4 O endereo de email do destinatrio (campo TO da mensagem).

Esse o tipo de mensagem que Owen espera receber sempre que algum submeter um relatrio de abduo aliengena.

Este o endereo de email do usurio, que j est armazenado na varivel $email.

Isto pode ser uma string esttica.


3 4

O endereo de email de Owen. Este o endereo de email de Owen, o que tambm pode ser uma string esttica.

Ns j construmos uma string para o corpo do email, a qual fica armazenada na varivel $msg.
Este exemplo de mensagem de email revela que a maior parte do contedo fica no corpo da mensagem, o que j est pronto. S preciso bolar algo para o campo assunto, preencher os endereos do remetente e do destinatrio... e, claro, usar o PHP de alguma forma para, realmente, enviar a mensagem! 48
Captulo 1

adicionando vida s suas pginas estticas

As variveis armazenam as partes do email


Ns j temos o corpo da mensagem armazenado em $msg, mais ainda faltam o assunto e os endereos do remetente (from) e do destinatrio (to). O assunto e o endereo to podem ser definidos como texto esttico em novas variveis, enquanto que o endereo from j est armazenado na varivel $email, graas ao cdigo processador do formulrio que escrevemos anteriormente, neste captulo.
$to = 'owen@aliensabductedme.com';

$email = $_POST['email'];

3 4

$subject = 'Aliens Abducted Me - Abdu ction Report';


$how_long.\n" . $msg = "$name was abducted $when_it_happened and was gone for "Number of aliens: $how_many\n" . "Alien description: $alien_description\n" . "What they did: $what_they_did\n" . "Fang spotted: $fang_spotted\n" . "Other comments: $other";

1 Corpo da mensagem 2 Assunto da mensagem

Todas as informaes esto nos seus lugares!

3 O endereo de email do remetente (campo FROM da mensagem). 4 O endereo de email do destinatrio (campo TO da mensagem).
voc est aqui 4

49

envie email com PHP

Enviando uma mensagem de email com PHP A funo


Ento, voc est pronto para escrever o cdigo PHP que enviar a mensagem a Owen por email. Isto requer a funo interna mail() do PHP, a qual envia uma mensagem com base em informaes que voc fornece.

O endereo de email to.

O assunto da mensagem.

mail($to, $subject, $msg);

O corpo da mensagem.
Essas trs informaes so requeridas pela funo mail(), portanto, voc sempre tem de fornec-las. O endereo de email from no exigido, mas ainda uma boa ideia inclu-lo. Para especificar o campo from ao chamar a funo mail(), preciso usar um outro argumento da funo, junto a alguma concatenao de strings.

mail(), do PHP, envia uma mensagem de email a partir de um script.

O texto From: precisa ser colocado antes do endereo, ao se especificar o endereo de email do remetente.

mail($to, $subject, $msg, 'From:' . $email);

om'; $to = 'owen@aliensabductedme.c


$subject = 'Aliens Abducted Me Abduction Report'; for $how_long.\n" . = "$name was abducted $when_it_happened and was gone

$msg

"Number of aliens: $how_many\n" . "Alien description: $alien_description\n" . "What they did: $what_they_did\n" . "Fang spotted: $fang_spotted\n" . "Other comments: $other";
$email = $_POST[' email'];

P:

Perguntas Idiotas

O ponto final til mais uma vez, para concatenar From: com o endereo de email de Owen. no existem

Cada parte do email fornecida funo mail() por uma varivel.

Sim. Voc pode especificar tambm recipientes copy (cpia) e blind copy (cpia oculta) da mesma forma que o from basta usar 'Cc:' ou 'Bcc:' em vez de 'From:'. Se quiser especificar tanto um from quanto um copy, voc ter de separ-los com uma combinao de caracteres return e newline (\r\n), desta forma:
"From:" . $from . "\r\nCc:" . $cc

R:

H mais alguma coisa que possa ser especificada como parte de uma mensagem de email, alm do endereo from?

isso mesmo, dois caracteres de escape colados um no outro!

50

Captulo 1

Precisamos usar aspas duplas aqui, uma vez que estamos usando os caracteres de escape \r e \n.

adicionando vida s suas pginas estticas Mas ento, como que ns usamos, realmente, a funo mail()?

Basta adicionar ao seu script o cdigo para chamar mail(). A linha de cdigo que chama a funo mail() tudo o que voc precisa para enviar a mensagem de email. Certifique-se de que este cdigo aparea no script aps o cdigo que cria as variveis para o email, e pronto. Eis aqui o cdigo completo para o script report.php de Owen, incluindo a chamada para a funo mail().

<html> <head> <title>Aliens Abducted Me - Repor t an Abduction</title> </head> <body> <h2>Aliens Abducted Me - Repor t an Abduction</h2> <?php $name = $_POST['firstname'] . ' ' . $_POST['lastname']; $when_it_happened = $_POST['wh enithappened']; $how_long = $_POST['howlong']; $how_many = $_POST['howmany']; $alien_description = $_POST['al iendescription']; $what_they_did = $_POST['whatthe ydid']; $fang_spotted = $_POST['fangspo tted']; $email = $_POST['email']; $other = $_POST['other'];

Pegue todos os dados do formulrio no array $_POST e coloque-os em variveis individuais.


Certifique-se de trocar este endereo de email pelo seu prprio, para testar o script.

Envie a mensagem.

$to = 'owen@aliensabductedme.co m'; $subject = 'Aliens Abducted Me - Abduction Report'; $msg = "$name was abducted $when _it_happened and was gone for $how_long.\n" . "Number of aliens: $how_many\n" . "Alien description: $alien_des cription\n" . "What they did: $what_they_did\ n" . "Fang spotted: $fang_spotted\n " . "Other comments: $other"; mail($to, $subject, $msg, 'From :' . $email); echo echo echo echo echo echo echo echo echo ?> </body> </html> 'Thanks for submitting the form. <br />'; 'You were abducted ' . $when_it_h appened; ' and were gone for ' . $how_long . '<br />'; 'Number of aliens: ' . $how_many . '<br />'; 'Describe them: ' . $alien_des cription . '<br />'; 'The aliens did this: ' . $what _they_did . '<br />'; 'Was Fang there? ' . $fang_spot ted . '<br />'; 'Other comments: ' . $other . '<br />'; 'Your email address is ' . $emai l;

Junte os diferentes pedaos da mensagem a ser enviada para Owen.

Gere uma pgina HTML, em tempo real, para confirmar que o formulrio foi submetido com sucesso.

report.php

voc est aqui 4

51

o teste drive final

Test Drive
Finalize o script de Owen e depois teste-o. Adicione as trs novas variveis para o email ($to, $ subject e $msg) ao script report.php, bem como a chamada funo mail(). Certifique-se de configurar a varivel $to com o o seu prprio endereo de email e no o de Owen! Envie (upload) o script para o seu servidor web, abra-o no seu navegador e preencha o formulrio com informaes do seu caso de abduo. Clique no boto Relatar Abduo para submeter o formulrio. Espere alguns segundos e depois verifique se a mensagem est na sua Caixa de Entrada de emails.

Os dados do formulrio foram formatados e enviados como uma mensagem de email!

A pgina de confirmao dinamicamente gerada ainda confirma que o formulrio foi submetido.

Voc poder ter de configurar o PHP no seu servidor web, para que ele saiba como enviar emails. Se a funo mail() no estiver funcionando para voc, o problema poder poder estar no suporte a email, que no est corretamente configurado na sua instalao do PHP. Consulte www.php.net/mail para mais detalhes sobre como configurar os recursos de email no seu servidor web. 52

Captulo 1

adicionando vida s suas pginas estticas

Owen comea a receber emails


Owen est feliz por estar recebendo as informaes sobre abdues aliengenas, que so encaminhadas do formulrio diretamente para a sua caixa de e-mail. Agora Owen no precisa se preocupar em saber se algum viu seu cachorro, porque receber mensagens de email de todos que resolverem entrar em contato. E melhor ainda, ele poder consultar as mensagens quando quiser.

Esta Sally, recentemente abduzida por aliens.

Sally submete o formulrio.

<form action = "report.php" ...

O atributo action da tag <form> faz o script report.php processar os dados do formulrio.

Isto fantstico! Com relatrios de abduo como este, sei que encontrarei Fang!

O script PHP gera, dinamicamente, uma pgina HTML de confirmao.

Agora que est recebendo relatos de abduo diretamente do formulrio para o seu email, Owen est feliz..

O script PHP gera tambm uma mensagem de emai a envia para Owenl. e
voc est aqui 4

53

email overload

Owen comea a perder emails


A boa notcia que Owen est recebendo emails. A m notcia que ele est recebendo muitos, muitos emails. Tantos que est tendo dificuldade em acompanh-los. A sua Caixa de Entrada est lotada, e ele j apagou alguns acidentalmente... Owen precisa de uma forma melhor de armazenar os dados sobre as abdues.

Isto no bom. Olhe todos estes emails! Eu preciso de alguma forma de obter os dados que preciso, na hora que quiser. E preciso t-los em um lugar seguro, p a r a no perd-los.

54

Captulo 1

adicionando vida s suas pginas estticas

Os aliens mexeram com o seu crebro? Coloque as coisas no lugar ligando cada componente HTML ou PHP descrio do que eles fazem.

HTML PHP formulrio Web navegador <?php ?> varivel aspas echo $_POST servidor web array superglobal mail()

Um software que serve para visualizar e interagir com pginas web. Age como o lado do cliente em comunicaes na web. Um comando PHP usado para fazer o output de algum contedo, como, por exemplo, texto simples ou cdigo HTML. Estas tags so usadas para delimitar o cdigo PHP a fim de que o servidor web saiba que deve process-lo e execut-lo. Um array interno do PHP que armazena os dados submetidos usando o mtodo post. Uma linguagem de programao usada para a criao de scripts, que so executados em um servidor web. Toda string precisa estar dentro de uma varivel. Um software para enviar pginas web, o qual age como um servidor em comunicaes na web. Uma linguagem marcao usada para descrever a estrutura do contedo das pginas web, que so visualizadas em um navegador web. Um nome usado para descrever as variveis internas do PHP que ficam acessveis a todos os scripts. Uma srie de campos de input, em uma pgina web, usados para se obter informaes dos usurios. Uma funo interna do PHP que envia mensagens de email. Um local de armazenamento, em um script PHP, que tem o seu prprio nome e tipo nico de dados. Um tipo de armazenamento de dados em PHP que permite que vrias informaes sejam armazenadas em um mesmo local.

voc est aqui 4

55

quem faz o que soluo

Os aliens mexeram com o seu crebro? Coloque as coisas no lugar ligando cada componente HTML ou PHP descrio do que eles fazem.

HTML PHP formulrio Web navegador <?php ?> varivel aspas echo $_POST servidor web array superglobal mail()

Um software que serve para visualizar e interagir com pginas web. Age como o lado do cliente em comunicaes na web. Um comando PHP usado para fazer o output de algum contedo, como, por exemplo, texto simples ou cdigo HTML. Estas tags so usadas para delimitar o cdigo PHP a fim de que o servidor web saiba que deve process-lo e execut-lo. Um array interno do PHP que armazena os dados submetidos usando o mtodo post. Uma linguagem de programao usada para a criao de scripts, que so executados em um servidor web. Toda string precisa estar dentro de uma varivel. Um software para enviar pginas web, o qual age como um servidor em comunicaes na web. Uma linguagem marcao usada para descrever a estrutura do contedo das pginas web, que so visualizadas em um navegador web. Um nome usado para descrever as variveis internas do PHP que ficam acessveis a todos os scripts. Uma srie de campos de input, em uma pgina web, usados para se obter informaes dos usurios. Uma funo interna do PHP que envia mensagens de email. Um local de armazenamento, em um script PHP, que tem o seu prprio nome e tipo nico de dados. Um tipo de armazenamento de dados em PHP que permite que vrias informaes sejam armazenadas em um mesmo local.

56

Captulo 1

adicionando vida s suas pginas estticas

Sua Caixa de Ferramentas do PHP e MySQL


No Captulo 1, voc aprendeu como utilizar o PHP para dar vida nova ao formulrio web de Owen. Veja quanta coisa j foi aprendida...

CAPTULO 1

Varivel

Um container para armazenamento de algum dado. No PHP, as variveis devem comear com um cifro, desta forma: $nome_da_variavel.
$_POST

PHP

Uma linguagem de scripts, que roda no lado do servidor, que lhe permite manipular o contedo de pginas web no servidor antes da pgina ser entregue ao navegador cliente.

Uma varivel especial, que armazena os dados de formulrios.


echo

<?php ?p>

Script PHP

Estas tags devem "circundar" todo o cdigo PHP nos seus scripts PHP.
mail()

Um arquivo de texto que contm cdigo PHP para executar tarefas A funo do PHP para enviar emails. Ela trata o assunto em um servidor web. email, o corpo do texto e o do endereo do destinatrio como parmetros (opcionalmente, voc pode especificar o endereo do MySQL remetente, tambm). Um aplicativo que lhe permite armazenar dados em bancos de dados e tabelas, inserir e recuperar informaes usando a linguagem SQL. te

O comando PH us output para a P neado para enviar ja la do navegador. A sua sintaxe :


echo 'Hello World';

array
Uma estrutura de dados que armazena um conjunto de valores. Cada valor possui um ndice que voc pode usar para acessar o array.

SQL

Lado do clien

Uma linguagem de consulta usada para a interao com ado do servidor , aplicativos de bancos de dados, L um servidor web como o MySQL. terpretado por In e. e no pelo client

unicamente pelo interpretado do cliente. navegador web

Caracter de escape

Usado para representar caracteres no cdigo PHP que sejam difceis de digitar ou que poderiam entrar em conflito com outras partes do cdigo, como por exemplo \n (newlines).

voc est aqui 4

57