• Nenhum resultado encontrado

~POST fornece os dados do formulário

No documento Use a cabeca php.pdf (páginas 123-127)

A b oa n o tícia é que o script r e p o r t .p h p j á tM n o 's c ia cíctsh

fo rm u lário arm azen ados em variáveis, graças a ^ r p e r g lo b a l $_P O ST . V ocê lem b ra deste có d igo PHP?

$name = $_POST['firstname'] . ' ' . $_POST['lastnameT $when_it_happened = $_POST['whenithappened'

$how__long = $_POST [ 1howlong1 ] ; $how_many = $_POST [ ' howxnany1 ] ;

$alien_description = $_POST['aliendescription'] $what_they_did = $_POST['whattheydid'

$fang_spotted = $_POST[’fangspotted1]

$email = $_POST[1email']; $other = $ POST [’other ' ]■;

L1UI

1

A superglobal ?__P0£T já esèá sendo usada pava e s v a ir os dados de dada dampo do -rormulari© de t para inseri—|©s em variáveis.

Le»brs-sC) o nome <\ue vode usar para f JPÜST predisa ser o mesmo do dampo dorrespondente, *o

•formulário ttTM l—

Assim, você já tem os dados do formulário e só precisa incorporá-los na instrução IN SER T . Mas é preciso fazer um a pequena modificação, primeiro. Agora que você não está mais enviando os dados por email, não precisa da variável $nam e. Você ainda precisa do nom e e do sobrenom e do usuário, para que o relato possa ser adicionado ao banco de dados - mas precisa tê-los em variáveis separadas.

0 nome e o sobrenome do wuario agora sao armazenados em variáveis

$last name = $ POST ['lastname'] ; .separadas, |>arâ ^ue possam ser

inseridos em dolunas di-Perentes da tabela aliens__abdud£ion.

$first name = $ POST['firstname'];

Escreva o código PHP para criar a string de query i n s e r t armazenada na

variável $query, certificando-se de que ela esteja armazenando os dados do formulário na tabela a l i e n s a b d u c t i o n , ao ser executada.

... ...

. aj. s . t . ^ y > ? ;

. r í . ^ r ^ r - . e . f . ...

é*y. V.É L. y..E. S. C. .. 1}Í Íà&.-t. *>.ò>v5... wf.

aspas simples e duplas no php

Escreva o código PHP para criar a string de query i n s e r t armazenada na variável $query, certificando-se de que ela esteja armazenando os dados do formulário na tabela aliens^abduction, ao ser executada.

S o L u ç ã o

Os nomes das dolun3s aparedem «a instrução exatamente domo antes

f

query

— “INS&RT IKT0

aliehs^abdudtion (-firstjriam e, last^name, wKen^it^bappened, Kowjon«^ w "Kow^many, alien^desdription, what^they^did, -Canc^spotted, other, email) w .

w\//lLUES (lf-first_nan*e,, Vlast_name\ t*v/hen_it_bappened,) 'fhov/_Joh^, 'fh^TSnãfP^"

w?alien_desdription > 'fv;Viat__they_jiid',l?-Pan^_spotted,) '/o th e r, 'femailOw; £m vez. de dados estitidos sobre a ^ ^

abdução de Sally Jones, ajora *cs_y A ordem das variáveis predisa ser a mesma dos inserimos os dados que o usuário nomes das dolunas, f ara que os dados seja» distou no -formulário- armazenados nas dolunas dorretas da tabela-

na° existem

Eu tenho mesmo que criar todas essas variáveis para armazenar os dados de $_POST? Não posso, simplesmente, referenciar os dados de $_POST

diretamentejao^çntro da string $query?

?car Pode. Não háflad£Tque lhe impeça de

$__PO ST diretamente em uma query. Porém, é um bom hábito de programação isolar os dados do \ formulário antes de fazer qualquer coisa com eies. Is s \ acontece devido ao fato de ser relativamente comum a \ necessidade de processar os dados de alguma forma, antes de inseri-los no bansoJ&texemplo, existem técnicas inteligentes qufhackers^>odem usar para “sequestrar” suas query, dignando aados perigosos no formulário. Você verá como evitar tais ataques no Capítulo 6. Para manter a simplicidade, neste capítulo não fazemos nenhum processamento nos dados, mas isso não significa que não deva adquirir o hábito de ^armazenar os dados do formulário nas suas próprias • /

varáveis antes de colocá-los em uma query. /

T \ .

1 - Faz alguma-difgrença usar aspas-sfmples ou dupias? Posso usar aspas simples em torno de toda a consulta, e aspas duplas em torno de cada variável?

tomo das variáveis. 0 motivo é que o PHP trata as strings de forma diferente, dependendo da fornia como elas aparecem: dentro de aspas simples ou duplas. A diferença é que as aspas simples representam exatamente o texto contido nelas, enquanto, ao se fazer uso das aspas duplas, significa que há algum processamento adicional no texto quando se usam aspas duplas. Esse prõcessamento resulta no fato,de que os valores das variáveis colocadas dentro de aspas duplas são mostradas em strings, no lugar do nome da variável. Isso é bastante útil, e é por isso que as aspas duplas geralmente são preferidas para-se criar strings de query SQL.

Não seria possível criar strings de query simplesmente concatenando-se as variáveis com o código S Q L ?

Í ^ I Sim, e se você decidir usar esse método, certamente poderá usar aspas simples em vez das duplas. Mas as strings de query já tendem a ser

bagunçadas por natureza, de modo que tudo o que puder fazer para torná-las mais legíveis é bom - inserir variáveis diretamente em uma string dentro de aspas duplas, em vez de as concatená-las com aspas simples, definitivamente torna as strings mais fáceis de serem entendidas.

Sim, faz diferença. E não, você não pode usar aspas simples em torno da query inteira, com aspas duplas em

Vamos usar tudo o que já aprendemos para terminar o script PHP de Owen, para que ele possa armazenar com sucesso os dados sobre as abduções em um banco de dados. Escreva abaixo o código PHP necessário para completar O script report.php.

<?php

$when_it_happened = $_PQST [' whenithappened' ] ;

$how_long = $ POST [ ' howlor.ç' ] ;

$how^many '== $_POST['howmany1]; ■

$alien_description = $_POST[raliendescription’];

$whàt_they_did = $_POST[1.whattheydid’1;

$fang_spotted = $_POST['fançspotted'] $email = $_POST['email'];

$other = $_PGST['other'];

$query = "INSERT INTO aiíens_abduction (f irst_n-ame, last_name, ' when_i.t_happened, how__lcng, " .

”how_aany, alien_description, what_they_diã,.- fang__spotted, other, email) " -

"VALUES ('$first_name1, ' $last_nam.e 1 ' $when_it_happene.d', '$how_iong', ' $how__many', " .

” ' $alien_description 1 , 1 ?.what_they_did' , ' $rang_spotted1 ,'■ ' $other1 , '$emaii')"; $result =

echo . 1 Thanks for submitting the fom.cbr />';

echo You were abducted ' .’ $when_it_happened;

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

echo 'Number 'of aliens: '■ . $how_m.any . '<br />’;

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

echo 'The aliens did this: ' . $what_they_did . '<br />';

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

echo 'Other comments: 1 . $othsr . 1 <br ■/>';

echo 'Your email. address is ' . $eii>ail;\

$dbc =

?>

CO

o

4 cicio

~ L x e R c i c i o Vamos usar tudo o que já aprendemos para terminar o script PHP de Owen, O r ti . c ã o Para c'ue e 'e P°ssa armazenar com sucesso os dados sobre as abduções em

unr| [jarico çjg dados Escreva abaixo o código PHP necessário para completar

O script report . php.

As novas variáveis armazém* o nome c o sobrenome do usuário, do jei-fco

ele digitou no formulário.

<3:

f-^rst^name — fmP0STrClfirstn3me>J;

flast_na»e — f^P OST C lastra mel',

Vode predisa se donedtâr ao bando

de dados e fomeder as informações nedessárias antes de realizar quaisquer donsultas £ $ L a p a rtir do PHP.

A query e donstruída domo uma string PHP- Certifique —se de usar os dados extraídos dos dampos do formulário-

$when_it_happened = $_?OST['whenithappened']; $how_long = $_POST[’howlong'] ;

$how_many = 5_P0ST['howmany'];

$alien_description = $_POST['aliendescription'] $what_they_did = $_POST[1whattheydid1 ] ;

$fang_spotted = $__POST [1 fangspotted' ] ; $ email = $__POST ['email1 ] ;

$other = $_POST[1 other 1 ]; $dbc =

m y s q |i_ d o n n e d t^ d a ^ S\ien sab d u d ^d m e d o m V w e n , 'aiiew rool', 'alienda^UbaseO o r d ie C E rro r donnedting t o MySfiJL server/)^

Squery = "INSERT INTO a!iens_abdu.ction (first_name, last_name, when_it_happened, how long, "how_many, alien_descriptionr what_they_did, fang_spotted, other, email) ” .

"VALUES (’$first_name', '$last_name', '$when_it_happened', '$how_long1, '$how many', " . $alien_description’, '$what_they_did', '5fang spotted', '$other', '$email')";

or dieC&rror querying database-0;

ri»ys«í I it_it 1 osçÇ f db^^i

txedute a query ao bando

de dados - isto e o que insere os dadosf

■i--\—... ■1 ...'•... •-... FedHe a dcmexao a© bando.

echo ’Thanks for submitting the form.cbr />'; echo 'You were abducted ' . $when_it happened; echo ' and were gone for ' . $how long . ’<br />'; echo 'Number of aliens; ' . $how_many . ’<br />'; echo 'Describe them: 1 . $alien_description . '<br />'; echo 'The aliens did this: ' . $what they did . '<br />'; echo 'Was Fang there? ' . $fang_spotted . 1<br />'; echo 'Other comments: ' . $other . '<br />'; echo 'Your email address is ' . $email;

Confirme se o formulário fo i submetido dom sudesso, da mes*»a forma torno fazia no sdript antigo-

T fe S T O R fv e

M odifique o scrip t de Owen de fo rm a a usar os dados do form u lário para fa ze r um INSERT.

Remova a variável $name do script r e p o r t .php, adicione as variáveis $first_name e $ l a s t name e modifique $query para usar as variáveis do formulário, em vez de texto estático na instrução IN SE R T . Envie a nova versão dò script para o servidor e teste-o, submetendo o formulário da página r e p o r t . html algumas vezes, digitando dados diferentes a cada vez.

U your e tt« i g d d ltg ?

WtaH dkl it feâppeo?

No documento Use a cabeca php.pdf (páginas 123-127)