You are on page 1of 84

3

A U LA 1 Introduo
Aplicaes WEB so empolgantes! Imagine voc, como um programador WEB, criando sua aplicao para poder ser utilizada por milhares de usurios do planeta. Pense no lucro que voc pode obter com isso. Mas, para aproveitar as vantagens e facilidades que a WEB oferece, voc precisa dominar uma linguagem de programao WEB. Voc precisa saber PHP. Porque somente com HTML voc no faz nada alm de stios bonitinhos, mas sem graa e limitados.

OBJETIVOS
Arquitetura de aplicaes WEB Funcionamento e necessidade do servidor WEB A necessidade do interpretador de comandos PHP Compreender a sintaxe bsica de construes da linguagem Marcaes PHP Variveis Constantes Operadores Compreender os mecanismo de entrada e sada A funcionalidade dos mtodos HTTP mais comuns (essencialmente o GET e o POST) Mecanismos de passagem de parmetros pelos mtodos GET e POST Construo de formulrios WEB

Qual a principal tarefa do servidor WEB?


O servidor web atende a requisio do cliente e devolve algo. Atravs do navegador web o cliente consegue realizar uma requisio a um recurso presente no servidor web. Geralmente esse recurso um arquivo de udio, imagem, html, pdf, entre muitos outros formatos padro. Caso o recurso no exista, o servidor devolve cdigo e mensagem de erro.

Como o servidor WEB gerncia programas PHP?


O servidor web sabe o que fazer requisies para com recursos estticos. Receber a requisio para um recurso e devolver o recurso, caso exista. Para saber lidar com recursos dinmicos, como programas PHP, o servidor web precisa de configurao adicional para integrao com o interpretador PHP. Nosso ambiente de desenvolvimento para o curso bsico utiliza o servidor Apache como servidor web.

A necessidade do interpretador de comandos PHP


Sabemos que o servidor web por si s no reconhece PHP. Mas, ele sabe repassar o recurso solicitado para um programa que reconhece instrues em linguagem PHP. O famoso interpretador de comandos PHP. Ele quem executa o texto fonte do programa PHP e devolve, para o servidor web, o resultado. O servidor web quem, por sua vez, devolve o resultado final ao usurio.

Um programa PHP simplista


Considere que voc precisa exibir a date e hora de entrada do usurio na sua pgina.
<html> <head> <title>Primeiro programa</title> </head> <body> <h2> <?php print date("d-m-Y H:i:s"); ?> </h2> </body> </html>

Exceto o contedo entre as marcaes <?php e ?> temos uma simples pgina ?>, HTML. Quando o interpretador encontra o smbolo <?php ele entende que deve <?php, executar os comandos que seguem esta marcao. No exemplo, a chamada a uma

6
funo que devolve a data/hora atual. At encontrar o fim da seo, que termina na marcao ?>. Da em diante, o contedo esttico continua a ser enviado ao ?> navegador do usurio.

Testando o programa
Aps criado o programa, o procedimento para teste bastante simples. O nico detalhe certificar se o programa PHP foi salvo na pasta htdocs do servidor WEB Apache. Alm disso o Apache esteja rodando (em execuo). Feito isso, acesse o programa PHP diretamente pelo navegador web no endereo: http://localhost/programasimples.php O resultado apresentado deve ser semelhante a este.

Variveis
Como sabemos, uma varivel um lugar onde guardamos informao. Voc pode atribuir um valor a ela, e ler um valor a partir dela. Em qualquer contexto que PHP encontrar uma varivel em expresses, o seu valor ser usado. Por exemplo, vamos criar uma pgina que utiliza valores de variveis numricas.
<html> <head> <title>Uso das variveis</title> </head> <body>

<?php //isto um comentrio, o interpretador PHP ir ignorar essa linha. $a = 10; $b = 2;

7
print "a = $a" . "<br>"; print "b = $b" . "<br>"; print "A = $A" . "<br>"; print "B = $B" . "<br>"; ?>

</body> </html>

Percebemos algumas caractersticas sintticas importantes, da PHP, nesta pgina: Comentrios de linha nica iniciam com duas barras As variveis so precedidas pelo caractere cifro Cada comando deve terminar com um ponto-e-vrgula Voc deve usar um ponto para concatenar texto

Uma observao sobre variveis. Na PHP elas so sensveis ao caso. Ou seja, a varivel $a diferente da varivel $A. Assim como a varivel $USUARIO diferente da varivel $usuario $usuario. Visualize o resultado no navegador WEB para melhor entendimento da sada gerada.

Constantes
Constantes so um tipo particular de variveis. Variveis podem ter seus valores alterados a qualquer instante, de acordo com a necessidade. Mas algumas vezes queremos criar uma varivel com a expectativa de que o valor dela no mudar. Esse o conceito duma constante. Por exemplo, podemos definir uma constante que representa o ttulo da pgina.
<?php // A instruo abaixo define a constante TITULO_PAGINA

8
define("TITULO_PAGINA", "Programao PHP"); ?> <html> <head> <title><?= TITULO_PAGINA ?></title> </head> <body> Testando o uso de constants PHP... </body> </html>

Operadores
Os operadores existem, basicamente, para agirem sobre literais (valores constantes) ou variveis, resultando num valor final da expresso. Para facilitar o aprendizado, podemos dividir os operadores em categorias: aritmticos, atribuio, lgicos e relacionais. Vejamos tabela com todos os operadores na linguagem PHP em ordem de precedncia. No se faz necessrio memorizar toda esta tabela. Pois, com a prtica regular da programao em PHP, isso se tornar natural at para os iniciantes.
Tabela com todos os operadores em ordem de precedncia Associao Operador

no associativo direita direita esquerda esquerda esquerda no associativo no associativo esquerda esquerda esquerda esquerda esquerda esquerda

new [ ! ~ ++ -- (int) (object) @ * / % + - . << >> < <= > >= == != === !== & ^ | && || ? : (float) (string) (array)

Associao

Operador

direita direita esquerda esquerda esquerda esquerda

= += -= *= /= .= %= &= |= ^= <<= print and xor or ,

>>=

Tabela com exemplos de operadores Aritmticos Exemplo Nome Resultado

$a + $b $a - $b $a * $b $a / $b $a % $b ++$a $a++ --$a $a--

Adio Subtrao Multiplicao Diviso Mdulo Pr-incremento Ps-incremento Pr-decremento Ps-decremento

Soma de $a e $b Diferena entre $a e $b Produto de $a e $b Quociente de $a por $b Resto de $a dividido por $b Incrementa $a em um, e ento retorna $a Retorna $a, e ento incrementa $a em um Decrementa $a em um, e ento retorna $a Retorna $a, e ento decrementa $a em um

Tabela com exemplos de operadores de atribuio e comparao Exemplo Nome Resultado

$a = 10.25 $a == $b $a != $b $a < $b $a > $b $a <= $b $a >= $b

Atribuio Igual Diferente Menor que Maior que


Menor ou igual Maior ou igual

Armazena o valor 10.25 na varivel $a Verdadeiro (TRUE) se $a igual a $b Verdadeiro se $a no igual a $b Verdadeiro se $a estritamente menor que $b Verdadeiro se $a estritamente menor que $b
Verdadeiro se $a menor ou igual a $b Verdadeiro se $a maior ou igual a $b

Tabela com exemplos de operadores lgicos Exemplo Nome Resultado

$a && $b

Verdadeiro se tanto $a quanto $b so verdadeiros

10
Exemplo Nome OU NOT Resultado Verdadeiro se $a ou $b so verdadeiros Verdadeiro se $a no verdadeiro

$a || $b !$a

Passagem de parmetros usando URLs


Realizaremos a passagem de parmetros GET atravs de URLs, ou Uniform Resource Locators, que provavelmente voc j as conhece bem. Alm da URL identificar de forma nica um recurso ela tambm permite a passagem de informaes, ou parmetros, adicionais. Segue exemplo de formato detalhado de URL com passagem de parmetros.

http://pt.wikipedia.org/w/index.php?title=PHP&printable=yes Protocolo: http:// Domnio: pt.wikipedia.org Caminho do programa PHP: w/index.php Parmetro 1: title Valor do parmetro 1: PHP Parmetro 2: printable Valor do parmetro 2: yes
Parmetros transmitidos pelo mtodo GET so acessveis no programa PHP atravs da varivel array predefinida $_GET seguida do nome do parmetro. A seguir $_GET, criaremos programa PHP que ilustra a manipulao de parmetros GET.
<html> <head> <title>Parametros GET</title> </head> <body>

<?php $nome = $_GET["nome"];

$idade = $_GET["idade"];

print "<font size='5'>"; print "<i>$nome</i> possui <i>$idade</i> anos."; print "</font>"; ?> </body>

11
</html>

Visualize o resultado no navegador WEB para melhor entendimento da sada gerada. Observe atentamente como os parmetros GET esperados pelo programa acima foram passados na URL abaixo.

Resultado da execuo do script

Passagem de parmetros usando Formulrios


Formulrios web so o meio mais utilizado para captao de dados por programas PHP. Os formulrios web so escritos em linguagem HTML. Quando o usurio envia o formulrio, na maioria das vezes atravs de um boto, o navegador web envia um array de valores ao servidor web. Nessa seo, veremos como acessar os valores contidos nesse array. Exemplo de formulrio de login
<html> <head><title>Trabalhando com forms</title></head> <body> <h2>Pgina de Login</h2>

<form action="parametrospost2.php" method="POST"> <table> <tr> <td>Login</td> <td><input type="text" name="txtlogin"/></td> </tr> <tr> <td>Senha</td> <td><input type="password" name="txtsenha"/></td>

12
</tr> <tr> <td>&nbsp;</td> <td><input type="submit" value="OK"/></td> </tr> </form>

</body> </html>

<html> <body> <?php $login = $_POST["txtlogin"]; $senha = $_POST["txtsenha"];

print "Seu login: <b>$login</b><br>"; print "Sua senha: <b>$senha</b><br>"; ?> </body> </html>

Como funciona o envio de parmetros POST


Os atributos action e method do formulrio so importantes para o perfeito funcionamento. O valor do atributo action informa qual o programa PHP receber as informaes do formulrio. J o valor do atributo method, por sua vez, informa qual o mtodo de requisio HTTP utilizado. Neste exemplo, POST. Os valores do formulrio esto presentes na varivel array predefinido $_POST. Seu uso praticamente idntico ao da varivel $_GET estudada anteriormente. Estudaremos mais sobre variveis array em aula futura. Por agora, concentre-se na resposta que aparecer no navegador web. Abaixo temos as telas que detalham ainda mais o funcionamento do programa transcrito acima.

13

Pgina com formulrio para entrada de dados

Pgina de resultado

Exerccio Resolvido
Problema: Converso de Temperatura
Criar um programa que recebe temperatura em graus Fahrenheit e apresenta a converso da mesma para graus Celsius.

Soluo:
<html> <head> <title>Converso de Temperaturas</title> </head> <body> <h3>Conversor de Temperatura</h3> <form action="temperatura2.php" method="POST">

14
<table> <tr> <td>Temperatura em F</td> <td><input type="text" name="tempF" value="" maxlength="5"/></td> </tr> <tr> <td colspan="2" align="right"> <input type="submit" value="Calcular" name="btnAcao"/> </td> </tr> </table> </form> </body> </html>

<html> <body> <?php $tempF = $_POST["tempF"];

$tempC = ($tempF - 32) * (5.0/9.0);

print "<h3>"; print "$tempF Fahrenheit equivale a $tempC Celsius"; print "</h3>"; ?> </body> </html>

15

Exerccios Propostos
Exerccio 1
Escolha a opo equivalente ao resultado da execuo do seguinte programa?
<?php $a = 10; $b = 12; $a = $b = $c = 2; $b = ++$a; $c = $b++; print $a . . $b . . --$c; ?>

10 12 2 3 4 3 3 4 2 3 4 4 Nenhuma das alternativas

Exerccio 2
Ler dois valores reais a partir de um formulrio, calcular e imprimir na tela: a) A soma destes valoresb) O produto delesc) O quociente entre eles.

Exerccio 3
Calcular a quantidade de dinheiro gasta por um fumante. Dados: o nmero de anos que ele fuma, o n de cigarros fumados por dia e o preo de uma carteira.

Exerccio 4
Tendo como dados de entrada a altura de uma pessoa, construa um programa que calcule o peso ideal, tanto para homens quanto para mulheres, utilizando as frmulas seguintes. Para homens: (72.7 * h) - 58 Para mulheres: (62.1 * h) - 44.7 Observao: h = altura

16

A U LA 2 Controle de Fluxo
Uma tarefa essencial da programao a tomada de decises baseado no resultado de testes lgicos. Os comandos de controle de fluxo so essenciais a qualquer linguagem de programao, porque governam o fluxo de execuo do programa. So poderosos e ajudam a explicar a popularidade da linguagem. Em PHP, temos as estruturas de seleo simples, composta e de mltipla escolha. Alm das indispensveis estruturas de repetio.

17

OBJETIVOS
Comandos de Seleo Seleo simples: if Seleo composta: if-else Operador ternrio Seleo mltipla: switch Comandos de Repetio Repetio com while Repetio com do-while Repetio com for Compreender como aplicar e associar os comandos de controle de fluxo

18

Seleo simples: comando IF


Caracteriza o controle de fluxo unidirecional. Se a condio for verdadeira (true) o computador executar o comando ou bloco. Um bloco so as linhas de comandos contidas entre as chaves { }. Sua sintaxe a seguinte: if(condio) { bloco de comandos; } Abaixo temos um exemplo que aplica este comando.
<?php $login = $_POST["txtLogin"]; $senha = $_POST["txtSenha"];

if($login == NULL || $senha == NULL) { print "Login e/ou senha invlida!"; exit(); }

print "Dados de acesso OK!"; ?>

No exemplo acima evitamos que o usurio prossiga, caso no fornea a descrio do login e senha. Utilizando para isso o teste condicional if if.

Seleo composta: comando IF-ELSE


Seu funcionamento equivalente ao if Com a vantagem de permitir o controle if. bidirecional. Ou seja, o programador pode executar um bloco quando a condio for verdadeira e outro bloco quando falsa. Sua sintaxe a seguinte: Sua sintaxe a seguinte: if(condio) { bloco de comandos do if; } else {

19

bloco de comandos do else; } No exemplo abaixo, tomamos a deciso de enviar mensagem ao usurio informando duas situaes possveis; se um nmero fornecido par ou impar.
<?php $numero = (int) $_POST["txtNumero"];

if(($numero % 2) == 0) { print "O nmero inteiro $numero par"; } else { print "O nmero inteiro $numero impar"; } ?>

Operador ternrio
Este operador nada mais do que uma maneira compacta de expressar o comando if-else. Conveniente em situaes onde as expresses de teste so simples e compactas. Sua sintaxe a seguinte: (condio) ? expresso 1 : expresso 2; O exemplo de programa PHP abaixo utiliza o operador ternrio para verificar qual o maior entre dois nmeros.
<?php $x = (int) $_POST["txtx"]; $y = (int) $_POST["txty"];

$maior = ($x > $y) ? $x : $y;

print "maior valor = $maior"; ?>

Seleo mltipla: comando SWITCH

20
O comando switch, por sua vez, muito til para efetuar aes baseadas em vrias condies. Seu funcionamento o seguinte. Uma varivel testada sucessivamente contra uma lista de valores. Depois de encontrar uma igualdade, o comando ou bloco de comandos executado. At que o comando break seja encontrado. Se nenhuma coincidncia for encontrada o comando default ser executado. Vejamos abaixo um exemplo em cdigo que aplica o comando switch:
<?php $voto = (int) $_POST["voto"];

switch ($voto) { case 1: print "Opo 1 = Lula"; break; case 2: print "Opo 2 = Ciro"; break; case 3: print "Opo 3 = Eneias"; break; default: print "Opo invlida!"; } ?>

Comando while
O while utilizado para a execuo de um bloco de comandos repetidamente. At que o teste condicional se torne falso e finalize a execuo do bloco. Sua sintaxe a seguinte: while(condio) { bloco de comandos; } O processo de execuo do while o seguinte: A condio avaliada; Caso a condio seja verdadeira, o bloco de comandos executado; Retorna ao passo 1; Caso a condio seja falsa, o prximo comando aps o while executado.

21

Estes componentes do comando while so importantes para o entendimento dos comandos do-while e for tambm. Portanto, fique atento para notar as dosemelhanas. Temos a seguir um exemplo que utiliza o comando while para imprimir os valores de um contador.
<?php $c = 0; while ($c < 10) print $c . "<br>"; $c++; } ?>

Comando do-while
O comando do-while tambm executado enquanto uma condio for doverdadeira, porm, o teste da condio s feito no final. Conseqentemente, o bloco de comandos executado pelo menos uma vez. Temos a seguir o mesmo exemplo anterior. Entretanto, utilizando o comando dodowhile para imprimir os valores de um contador.
<?php $c = 0; do { print $c . "<br>"; $c++; }while ($c < 10); ?>

Comando for
Por fim, temos o comando for O for um comando extremamente poderoso. Em for. PHP ele tem uma forma elegante e permite construes bem versteis. A sintaxe do comando a seguinte: for(exp1; exp2; exp3) { bloco de comandos; }

22
Conhea os componentes do comando for Tente perceber as semelhanas com o for. comando while while.

exp1 - zero ou mais expresses que sero executadas antes da repetio do bloco de comandos; exp2 - teste lgico que, no caso de ser avaliado como falso, encerra a repetio; exp3 - zero ou mais expresses que sero executadas no momento do trmino de uma repetio. Aqui, geralmente, realizamos operaes de incrementos/decrementos.

Temos a seguir o mesmo exemplo anterior. Entretanto, utilizando o comando for para imprimir os valores de um contador.
<?php

for ($c = 0; $c < 10; $c++) { print $c . "<br>"; } ?>

Exerccio Resolvido
Problema: Converso de temperaturas
Criar um programa em que o usurio fornece dois valores, inicial e final, de temperaturas em graus Fahrenheit. O mesmo dever apresentar, em uma tabela, a converso das temperaturas para graus Celsius. Com incrementos de dez em dez.

Soluo:
<html> <head> <title>Converso de Temperatura : F -> C</title> </head> <body> <h3>Conversor de Temperatura</h3> <form action="" method="POST"> <table> <tr> <td>Temperatura inicial em F</td> <td>

23

<input type="text" name="tempInicial" value="<?= $_POST["tempInicial"] ?>" maxlength="5"/> </td> </tr> <tr> <td>Temperatura final em F</td> <td> <input type="text" name="tempFinal" value="<?= $_POST["tempFinal"] ?>" maxlength="5"/> </td> </tr> <tr> <td colspan="2" align="right"> <input type="submit" value="Calcular" name="btnAcao"/> </td> </tr> <tr> <td colspan="2">&nbsp;</td> </tr> </table> <?php // verifica se acionou o boto para clculo if ($_POST != NULL) {

// leitura das temperaturas $inicial = $_POST["tempInicial"]; $final = $_POST["tempFinal"];

// validao dos parmetros if ($inicial == NULL

24
|| $final == NULL || !is_numeric($inicial) || !is_numeric($final)) { print "<font color='red'>"; print "Parmetros invlidos. Tente novamente!"; print "</font>"; exit(); } ?> <br/> Resultado<br/> <hr align="left" width="40%"/> <table border="1" width="30%"> <tr bgcolor="#7f7fa5" align="center"> <td>Fahrenheit</td> <td>Celsius</td> </tr> <?php // clculo de converso da faixa de temperaturas for ($t = $inicial; $t <= $final; $t += 10) { ?> <tr align="center"> <td><?= $t ?></td> <td><?= number_format(($t - 32) * (5.0/9.0), 4) ?></td> </tr> <?php } //fim do for ?> </table>

25
<?php } //fim do if ?> </form> </body> </html>

Exerccios Propostos
Problema 1
Ler dois nmeros inteiros, a partir de formulrio. Se o segundo for diferente de zero, calcular e imprimir o quociente do primeiro pelo segundo. Caso contrrio, imprimir a mensagem DIVISO POR ZERO".

Problema 2
Ler trs nmeros inteiros, a partir de formulrio, e imprimir na tela qual o maior e menor valor fornecido.

Problema 3
Escolha a opo equivalente ao resultado da execuo do seguinte programa?
<?php $n = 6; $fatorial = 1; $contador = 1; while ($contador <= $n) { $fatorial = $fatorial * $contador; $contador++; } print $fatorial; //Resultado... ?>

a) 1440 b) 760 c) 320 d) Nenhuma das alternativas

Problema 4

26
Implemente uma calculadora primitiva (operaes de soma, subtrao, diviso e multiplicao). Considere que o usurio ir fornecer trs parmetros de entrada: valor numrico A, valor numrico B, operao aritmtica. Como sada, lhe ser apresentada tela com o resultado do clculo.

Problema 5
Imprimir a tabuada de um nmero qualquer fornecido pelo usurio. O resultado deve ser exibido numa tabela HTML seguindo o formato abaixo.
Expresso 4x1 4x2 4x3 ... Resultado 4 8 12 ...

Problema 6
Elabore um programa, que calcule o que deve ser pago por um produto considerando o preo normal de etiqueta e a escolha da condio de pagamento. Utilize os cdigos da tabela a seguir para ler qual a condio de pagamento escolhida e efetuar o clculo adequado.
Cdigo 1 2 3 4 Condio de Pagamento vista em dinheiro ou cheque, recebe 10% de desconto. vista no carto de crdito, recebe 5% de desconto Em 2 vezes, preo normal de etiqueta sem juros. Em 3 vezes, preo normal de etiqueta mais juros de 10%

27

A U LA 3 Arrays
Arrays so estruturaras de dados que permitem armazenar um ou mais valores, mantidos pela mesma referncia (a varivel do tipo array). Os arrays da linguagem PHP so muito poderosos e fceis de usar. Estaremos construindo as primitivas para trabalhar com arrays e, logo em seguida, implementando algoritmos clssicos que necessitam de tal estrutura. Basicamente o estudo ser voltado para os dois tipos de arrays disponveis: lineares e associativos.

28

OBJETIVOS
Arrays Lineares Arrays Associativos Arrays Multidimensionais

29

Arrays Lineares
Vamos entender o conceito do array linear atravs de um exemplo. Considere que voc professor de uma turma de informtica e precisa armazenar os nomes de todos os alunos da turma. No seria conveniente termos uma varivel para cada nome. Na realidade, seria impraticvel em algumas situaes. Considere que a turma inicialmente tenha quinze alunos. Assim seu programa teria quinze variveis do tipo string para armazenar os nomes. Entretanto, foram matriculados mais cinco novos alunos. Fique sabendo que voc ser convocado para alterar o programa! Ao invs disso, vamos utilizar um array linear para armazenar em um nica varivel todos os nomes. E, alm disso, poder aumentar o tamanho da varivel array para comportar novos nomes. Segue fragmento de cdigo PHP para ilustrar:
<?php

$alunos = array();

$alunos[1] = "Joo"; $alunos[2] = "Maria"; $alunos[3] = "Jos"; ... ... $alunos[15] = "Ana";

?>

De posse dos nomes dos alunos, podemos precisar pesquisar o nome do aluno pelo nmero da chamada. Vejamos como realizar esta operao:
<?php

print "O aluno nmero $num da chamada o " . $alunos[$num];

?>

Tambm, podemos precisar imprimir uma listagem da chamada. Isso conseguido com o seguinte fragmento de cdigo:

30
<?php

for($c = 1; $c <= count($alunos); $c++) { print $c . " - " . $alunos[$c] . "<br>"; }

?>

Os arrays so geralmente encontrados em conjuno aos laos de repetio. O que permite o processamento automtico de todos os elementos do array. Como exemplificado acima. importante notar as seguintes caractersticas do arrays em PHP: O primeiro elemento inicia no ndice ou posio 0(zero), caso no seja especificado O valor do ndice ou posio do elemento acessado deve ser especificado entre colchetes, aps o nome da varivel do tipo array

Arrays Associativos
At o momento, exemplificamos array que faz uso de ndices inteiros como chave para acesso aos valores. Estes so mais conhecidos como arrays lineares. Entretanto, voc pode especificar uma chave do tipo string tambm. Arrays com essa caracterstica so conhecidos como arrays associativos. Veja exemplo de como defini-los:
$dadosUsuario = array("nome" => "Fulano de Tal",

"email" => "fulano@email.com", "senha" => "a1b2c3");

Para acessar os valores deste array, utilizamos as chaves (strings) especificadas:


<?php

print $dadosUsuario["nome"]

. "<br>";

print $dadosUsuario["senha"] . "<br>"; print $dadosUsuario["email"] . "<br>";

?>

A vantagem dos arrays associativos que, no s permite o acesso a elementos individualizados, mas tambm no nos obriga a conhecer qual a posio ou ordem dos elementos dentro do array. O array $_POST j estudado, um exemplo de $_POST,

31

array associativo j disponvel ao programador PHP. Que armazena todos os valores de um formulrio, usando os atributos name como chave. Para concluir esta seo. Sero ilustradas construes de repetio para imprimir todos os valores de um array associativo.
<?php // Descrio: imprimindo array associativo com auxlio do lao while

while(list($chave, $valor) = each($dadosUsuario)) { print "dadosUsuario[$chave] = $valor <br>"; }

?>

<?php // Descrio: imprimindo array associativo com auxlio do lao foreach

foreach ($dadosUsuario as $valor) { print "Valor: $valor <br>"; }

?>

<?php // Descrio: imprimindo array linear com auxlio do lao foreach

$a = array(10, 20, 30, 40, 50);

foreach ($a as $v) { print "Valor atual = $v <br>"; }

32

?>

Arrays Multidimensionais
importante conhecermos como criar arrays com mais de uma dimenso. A sintaxe bastante simples e intuitiva. Basta adicionar mais um par de colchetes para cada dimenso adicional. Vejamos um exemplo:
<?php

// Descrio: array linear bidimensional de inteiros

$tabela[0][0] = 10; $tabela[0][1] = 20; $tabela[0][2] = 30; $tabela[1][0] = 40; $tabela[1][1] = 50; $tabela[1][2] = 60;

for($i = 0; $i < 3; $i++) { for($j = 0; $j < 3; $j++) { print $tabela[$i][$j] . " } print "<br>"; } ";

?>

Exerccio Resolvido
Problema
A partir de dois arrays de inteiros A e B, construir um terceiro C que ir armazenar os elementos comuns em A e B. Imprimir os valores do array C. Um valor em cada linha.

33

Soluo
<?php

$A = array(10, 20, 30, 40, 50, 60, 70, 80, 90, 100); $B = array(25, 50, 75, 100); $C = array();

for($i = 0; $i < count($A); $i++) { for($j = 0; $j < count($B); $j++) { if($A[$i] == $B[$j]) { $C[] = $A[$i]; } } }

print "Valores do array C: <br>"; for($i = 0; $i < count($C); $i++) { print $C[$i] . "<br>"; }

?>

Exerccios Propostos
Problema 1
Criar um programa que utiliza o array abaixo e imprime seus elementos na ordem inversa. Um valor em cada linha.
$valores = array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90);

Problema 2
Criar um programa que utiliza o array abaixo e imprime, somente, seus elementos pares. Um valor em cada linha.
$valores = array(0, 10, 3, 1, 7, 55, 15, 21, 99);

34

Problema 3

Teste com imagens presentes no seu computador, as imagens acima so apenas para exemplificar

Criar um programa que utiliza o array abaixo, que contm nomes de arquivos de imagens, para exibir, somente, uma imagem a cada solicitao feita pgina do programa. De forma aleatria. Para isto, utilize a funo rand(0, 3) para gerar o nmero da posio do elemento a ser lido do array.
$imagens = array("paisagem.gif", "foto.jpg", "logo.gif", "animacao.gif");

Problema 4

$_SERVER um dos arrays predefinidos da linguagem, e j possui valores para voc utilizar.

Criar um programa que imprima todo o contedo do array associativo $_SERVER dentro de uma tabela HTML.

35

A U LA 4 Funes
Funes dividem grandes tarefas de computao em tarefas menores, e habilitam as pessoas a construrem sobre uma base que algum j tenha feito ao invs de iniciar a partir de rascunhos. Funes apropriadas escondem detalhes das partes do programa que no precisam conhec-los...

Brian W. Kernighan e Dennis M.Ritchie

36

OBJETIVOS
Em que situao usar Funes Vantagens Criando Funes Utilizando Funes Devolvendo Valor Recurso Criando Biblioteca de Funes

37

Em que situao usar Funes?


Quando estamos envolvidos na construo de aplicaes, de qualquer tamanho ou nvel de complexidade, freqente realizarmos certos clculos, validaes, e outras operaes, em que o cdigo se repete ou se assemelha a algo que j foi feito. Nesse caso, interessante empacotar esse cdigo em um componente de software conhecido como funo.

Vantagens
Reutilizao de cdigos pr-fabricados Modularizao do programa Facilidade de teste e manuteno O trabalho em equipe e em paralelo

Criando Funes
Antes de realizarmos alguma implementao real, faz-se necessrio ilustrar a estrutura bsica de qualquer funo definida pelo programador. function nomeDaFuncao([$parametro1, $parametro2,...]) { //comandos da funo... return $valorDeRetorno; //valor de retorno da funo } A seguir, temos um primeiro exemplo de cdigo que cria uma funo:

//validaSenha: imprime mensagem de senha vlida ou invlida function validaSenha ($senha, $senhaConfirmacao) { if($senha == $senhaConfirmacao) { print "<p>Senha ok. Obrigado.</p>"; } else { print "<p>Senhas no confere. Por favor, tente novamente.</p>";

38
} }

Utilizando Funes
Partindo do ponto em que temos definidos o nome da funo e o que ela faz, podemos utiliz-la em qualquer programa. Para melhor compreenso, segue exemplo de programa completo que utiliza a funo acima definida.
<?php //validarSenha: imprime mensagem de senha vlida ou invlida function validarSenha ($senha, $senhaConfirmacao) { if ($senha == $senhaConfirmacao) { print "<P>Senha ok. Obrigado.</P>"; } else { print "<P>Senhas no confere. Por favor, tente novamente.</P>"; } } ?> <HTML> <BODY> <?php

//parmetros advindos de um formulrio $senha1 = $_POST["senha1"]; $senha2 = $_POST["senha2"];

print "Primeira senha: " . $senha1 . "<BR/>"; print "Segunda senha: " . $senha2 . "<BR/>";

39

validarSenha($senha1, $senha2); validaSenha ?> </BODY> </HTML>

//chamada ou uso da funo

Devolvendo Valor
Voc pode criar uma funo que realiza a sua lgica associada e retorna um valor resultante. Muito mais conveniente, na maioria das situaes, que imprimir o resultado dentro do prprio corpo da funo. Vejamos um programa conhecido que utiliza uma funo com esse comportamento.
<?php

//listarPares: retorna um novo array com os valores pares do array $valores function listarPares ($valores) { $rv = array(); $tam = count($valores); for ($c = 0; $c < $tam; $c++) { if (($valores[$c] % 2) == 0) { $rv[] = $valores[$c]; } } }

$valores = array(1, 2, 3, 4, 5, 6, 7, 8, 9);

$valoresPares = listarPares($valores);

//recebendo o resultado

40
print_r($valoresPares);

?>

Recurso
Recurso um termo da cincia da computao para caracterizar implementaes de funes que chamam a si para solucionar um problema. Seguindo a maioria das referncias, ilustraremos esse conceito com o exemplo do clculo do fatorial de um nmero inteiro.
<?php

//fatorial: retorna valor inteiro correspondente ao fatorial de $n function fatorial ($n) { if ($n == 0 || $n == 1) { return 1; }

return $n * fatorial($n-1); }

print "Fatorial de 6 = " . fatorial(6) . "<br>"; print "Fatorial de 8 = " . fatorial(8);

?>

Criando Biblioteca de Funes


Considere uma aplicao ou mesmo um sistema de informao, que contenham muitas rotinas que so candidatas a tornarem-se funes. Torna-se evidente que precisamos de um local para organizar nossas funes. Fazendo uma metfora das funes de linguagem de programao com as ferramentas de um eletricista, teramos a necessidade duma caixa de ferramentas. A linguagem PHP utiliza os prprios arquivos texto do sistema como sendo essa caixa de ferramentas. Alm das funes include() e require() para utilizarmos nossas ferrramentas

41

(funes). Como resultado, separamos a implementao das funes do cdigo do(s) programa(s) que as utilizam. Vejamos o resultado do explicado acima em cdigo:

<?php

//arquivo: minhasFuncoes.php

function listarPares ($valores) { ... } function fatorial ($n) { ... }

?>

<?php

//arquivo: programa.php

include("minhasFuncoes.php");

print "Fatorial de 6 = " . fatorial(6); ?>

42

Exerccios Propostos
Problema 1
Escreva uma funo que recebe, por parmetro, o nome de um aluno e imprime uma tabela HTML com as informaes abaixo:

ESCOLA TCNICA DE BRASLIA ETB Curso Bsico: PHP Turno: matutino Aluno: <seu nome aqui> Turma: 3124

Problema 2
Escreva uma funo que recebe, por parmetro, o nmero de linhas, colunas e um contedo (texto) qualquer. Que sero utilizados para criar uma tabela HTML com essas caractersticas.

Problema 3
Escreva uma funo que transforme horas, minutos e segundos em segundos. Ex.: 2h40min10seg = 9610 segundos.

Problema 4
Escreva uma funo que recebe um array de nmeros e retorna o maior valor contido no array.

Problema 5
Escreva uma funo que recebe um array de nmeros e retorna um novo array com os elementos em ordem crescente.

Problema 6
Implemente o exemplo da funo fatorial, utilizando uma soluo iterativa (com loops for ou while) ao invs de recursiva. Compare questes como: facilidade de leitura, desempenho, utilizao dos recursos, etc.

Problema 7
Criar uma funo para calcular o imposto de renda dos contribuintes, considerando que os dados de cada contribuinte, nmero de CPF, nmero de dependentes e renda mensal so valores fornecidos pelo usurio. Para cada contribuinte ser feito um desconto de 5% do salrio mnimo por dependente. Os valores para clculo do imposto so:
Renda lquida At 2 salrios mnimos 2 a 3 salrios mnimos 3 a 5 salrios mnimos Alquota Isento 5% 10%

43

Renda lquida 5 a 7 salrios mnimos Acima de 7 salrios mnimos

Alquota 15% 20%

44

A U LA 5 Manipulao de Arquivos
Uma das tarefas bsicas da programao a criao e manipulao de estruturas de dados. Estas podem ser transientes estruturas em memria primria como variveis simples, arrays e objetos, ou persistentes entidades armazenadas em disco como arquivos e tabelas de banco de dados. Os arquivos sero utilizados nesta aula de hoje como meio de armazenamento persistente. E como ferramenta para o desenvolvimento do Projeto 1.

45

OBJETIVOS
Introduo Modos de acesso a arquivos Como utilizar arquivos Leitura de arquivos Escrita em arquivos Exerccio Resolvido Especificao do Projeto prtico 1

46

Introduo
Uma das tarefas bsicas da programao a criao e manipulao de estruturas de dados. Estas podem ser transientes estruturas em memria primria como variveis simples, arrays e objetos, ou persistentes entidades armazenadas em disco como arquivos e tabelas de banco de dados. Arquivos so uma abstrao do SO (Sistema Operacional) para organizar e lidar com dados de diferentes dispositivos de armazenamento persistente atravs duma interface nica. PHP possui recursos poderosos para ler e escrever dados em arquivos do sistema. Alm de funes da API para manipulao de diretrios e permisses.

Modos de acesso a Arquivos


Ao iniciar o trabalho com arquivos, utilizamos um parmetro que determina a operao a ser realizada sobre o arquivo. Havendo um nmero variado de modos disponveis. Para o propsito do nosso curso, importante conhecermos os modos descritos na tabela abaixo:
Modo r w a O que significa Abre um arquivo no modo LEITURA Abre um arquivo no modo ESCRITA Abre um arquivo no modo CONCATENAO; o contedo existente no arquivo preservado.

Como utilizar Arquivos


Seja qual for o programa, para utilizar arquivos deve-se seguir os seguintes passos:

Abrir o arquivo
$f = fopen("acessos.txt", "r");

Escrever no arquivo
fwrite($f, "Ol!");

Ler do arquivo
fgets($f); //ou fread($f, filesize($nomeArquivo)); //ou file($nomeArquivo);

47

Fechar o arquivo
fclose($f);

Leitura de Arquivos
Nosso primeiro exemplo efetuar a tarefa simples, mas muito utilizada, de abrir um arquivo e ler todo o seu contedo. Para esse exemplo, assuma que existe um arquivo cujo nome seja paragrafo.txt. Caso no, o crie ou altere o nome para outro arquivo no seu sistema.
<?php // arquivo a ser lido $nomeArquivo = "paragrafo.txt";

// abre arquivo no modo leitura e retorna manipulador de arquivo $f = fopen($nomeArquivo, "r") or die("No foi possvel abrir arquivo");

// l contedo do arquivo associado ao manipulador $dados = fread($f, filesize($nomeArquivo)) or die("Erro na leitura");

// fecha arquivo fclose($f);

// imprime dados print $dados; ?>

Uma forma alternativa de realizar a mesma ao ler o contedo linha-a-linha atravs da funo fgets() em combinao com a funo de teste de fim de arquivo feof() feof().
<?php $nomeArquivo = "paragrafo.txt";

48
$f = fopen($nomeArquivo, "r") or die("No foi possvel abrir arquivo");

// l e imprime contedo do arquivo while(!feof($f)) { $dados = fgets($f); print $dados; }

fclose($f);

print $dados; ?>

E, por fim, temos a possibilidade de carregar o contedo inteiro do arquivo em um array. Operao realizada pela funo file() que associa cada linha do arquivo file(), a uma posio do array.

<?php A funo file efetua a operao de abrir e fechar o arquivo para voc! $nomeArquivo = "paragrafo.txt";

// l arquivo e retorna contedo em array $dados = file($f) or die("Erro na leitura");

// imprime contedo do array foreach ($dados as $linha) { print $dados; }

print $dados; ?>

49

Escrita em Arquivo
Para concluir, veremos como realizar a operao complementar de escrita em arquivos. Uma vez executado o programa abaixo, ser criado um arquivo chamando mensagem.txt contendo o texto Seja bem vindo! seguida de uma quebra de linha.
<?php $nomeArquivo = "mensagem.txt";

// abre arquivo para escrita $f = fopen($nomeArquivo, "w") or die("Erro ao abrir arquivo");

// escreve contedo no arquivo com fwrite fwrite($f, "Seja bem vindo!\n") or die("Erro ao escrever no arquivo");

fclose($f); ?>

Exerccio Resolvido
Problema
Manter registro de quantas vezes uma pgina foi acessada. Ou seja, implementar um contador de acesso simples a uma pgina.

Soluo
Segue uma soluo para o problema. Julgue a soluo confrontando com a necessidade dessa funcionalidade em sites web. Procure falhas e as corriga, caso existam.
<?php // Descrio: realiza contagem de acessos a esta pgina

$nomeArquivo = "contadorPagina.txt"; $contagem = 0; if(file_exists($nomeArquivo)) { $f = fopen($nomeArquivo, "r"); $contagem = fread($f, filesize($nomeArquivo));

50
fclose($f); }

$contagem++;

$f = fopen($nomeArquivo, "w"); fwrite($f, $contagem); fclose($f); ?> <html> <head> <title>Contador de pgina</title> </head> <body> <h2>Quantidade de acessos a esta pgina: <?= $contagem ?></h2> </body> </html>

51

Projeto 1
Criar uma aplicao com funcionalidades de enquete. Uma enquete nada mais do que uma pesquisa de opinio. Ser constituda de uma nica pergunta e vrias respostas possveis. Pode-se escolher apenas uma das respostas a cada voto. Qualquer usurio pode votar, no havendo a necessidade de cadastro prvio para tal. Alm da interface para votao, disponvel ao usurio, deve-se tambm disponibilizar tela que apresenta o resultado parcial da enquete, em porcentagem.

Telas do programa
Fig.1 - Exemplo de interface de Fig.2 - Exemplo de interface de resultado da votao votao

O que voc precisa saber


Como manipular os valores enviados pelo formulrio. Para identificar qual a opo escolhida na tela de votao Conhecer os arrays associativos e algumas funes de strings e arrays. Para tornar o cdigo mais simples, compacto e eficiente Como ler e escrever informao em arquivo texto. Para manter os votos atuais gravados no Sistema, mesmo que o usurio feche a seo ou que o servidor seja reinicializado, estaro l Complementando o item anterior, decidir como (referente ao leiaute) a quantidade de votos ser armazenada no arquivo texto. Para ter condio de ler os votos atuais do arquivo e associar os valores de voto a cada opo disponvel na enquete lgebra bsica (aritmtica racional) e, conseqentemente, os operadores e expresses da linguagem. Para realizar os clculos das porcentagens de votos atuais para cada opo da enquete.

52

A U LA 6 Programao Orientada a Objetos


As linguagens de programao modernas geralmente suportam ou oferecem uma aproximao para o desenvolvimento de software Orientado a Objetos (OO). O software construdo de forma OO utiliza os conceitos de Classes, Herana e Polimorfismo para compor o programa ou mesmo um sistema de software. Neste captulo, trataremos o assunto de maneira prtica e sistemtica.

53

OBJETIVOS
PHP e Programao Orientao a Objetos Definindo Classes Usando Classes Herana Polimorfismo

54

PHP e Programao Orientao a Objetos

Desde o PHP 3 temos o suporte integrado na linguagem para aplicarmos os conceitos de Programao Orientada a Objetos (POO). Primitivas para definir Utilizaremos a sintaxe da Classes, expressar Herana e Polimorfismo. A verso 5 trouxe aperfeioamentos verso 4 devido a nessa rea, comparado ao que est presente nas linguagens j estabelecidas, C++ e necessidade de simplificar ao mximo Java, as quais a PHP pegou emprestado muitas construes.
o assunto, j que o objetivo fornecer uma introduo sobre POO.

Definindo Classes
A seo de texto fonte seguinte ilustra como definir uma classe em PHP. Nesse momento no se preocupe com uma utilidade para ela, apenas visualize cada componente e a estrutura bsica que todas classe possuir. class MinhaClasse { var $atributo1; var $atributo2; function operacao1() { //implementao... } } Percebe-se que uma classe pode ser caracterizada como a juno de variveis associadas logicamente (os atributos) e um conjunto de operaes (mtodos) que agem sobre estes dados.

Exemplo de Classe simples


Digamos que voc precise armazenar as coordenadas de um retngulo e realizar alguns clculos no seu programa. Primeiramente, suas variveis sero denominadas x1, y1, x2 e y2. x1 e y1 representam o canto superior esquerdo. x2 e y2 representam o canto inferior direito. Estas quatro variveis representam um retngulo. Quais as operaes (mtodos) teis a implementar nesta classe? Depende da necessidade do programa, mas calcular a altura, o comprimento e a rea so bons exemplos. A classe poderia ser implementada como a seguir:
class Retangulo { var $x1, $y1, $x2, $y2;

55
function Retangulo($v1, $v2, $v3, $v4) { $this->x1 = $v1; $this->y1 = $v2; $this->x2 = $v3; $this->y2 = $v4; } function altura() { return abs($this->y2 - $this->y1); } function largura() { return abs($this->x2 - $this->x1); } function area() { return $this->largura() * $this->altura(); } function perimetro() { return 2 * $this->largura() + 2 * $this->altura(); } }

Criando objetos Retangulo


Aps definida a classe Retangulo(ou seja, suas variveis e mtodos) estamos habilitados a criar quantos objetos Retangulo necessitarmos.
// Continuao do cdigo acima

$retang1 = new Retangulo(2, 2, 25, 10); $retang2 = new Retangulo(0, 8, 4, 0);

56
print $retang1->x1 . "," . $retang1->y1 . "<br>"; print $retang1->area() . "<br>";

print $retang2->perimetro() . "<br>";

$retang3 = $retang2; print $retang3->perimetro();

Herana
Vamos examinar um exemplo especfico para percebermos como a herana funciona. Considere a classe CarrinhoCompra j disponvel para voc. Ela representa todos os dados de compra numa varivel(atributo) chamada $listaProdutos os, $listaProdutos do tipo array associativo. A classe CarrinhoCompra j implementa duas operaes: adicionar e retirar item do carrinho. O problema o seguinte: precisamos de uma nova operao para verificar se um item j est presente no carrinho. Entretanto, no podemos alterar a classe original CarrinhoCompra. CarrinhoCompra Utilizaremos a herana para demonstrar como utilizar a implementao existente CarrinhoCompra e estender ou especializar ainda mais nossa classe MeuCarri MeuCarrinhoCompra com as operaes desejadas.

Soluo final proposta


<?php

// Classe Para carrinho de compras que somente salva, remove e devolve os items // armazenados

class CarrinhoCompra { var $listaProdutos;

function salvar($produto, $quantidade) { $this->listaProdutos[$produto] += $quantidade; }

57
function remover($produto, $quantidade) { if($this-> listaProdutos[$produto] > $quantidade) $this-> listaProdutos[$produto] -= $quantidade; else $this-> listaProdutos[$produto] = 0; } function getListaProdutos() { return $this->listaProdutos; } }

// Classe que melhora a classe anterior, implementando operao de pesquisa e impresso do carrinho

class MeuCarrinhoCompra extends CarrinhoCompra { function pesquisar($produto) { $produtos = $this->getListaProdutos(); return $produtos[$produto]; } function imprimeTabelaProdutos() { ?> <TABLE BORDER="1"> <TR> <TH>Produto</TH> <TH>Quantidade</TH>

58
</TR> <? foreach($this->getListaProdutos() as $produto => $quantidade) { ?> <TR> <TD><?= $produto ?></TD> <TD><?= $quantidade ?></TD> </TR> <? } ?> </TABLE> <? } //fim da funo //fim foreach

} //fim da classe

//Fluxo principal do programa $carrinho = new MeuCarrinhoCompra();

$carrinho->salvar("Camiseta", 7); $carrinho->salvar("Bermuda", 2); $carrinho->remover("Camiseta", 1);

print "Quantidade de Camisetas: " . $carrinho>pesquisar("Camiseta"); $carrinho->imprimeTabelaProdutos(); ?>

59

Polimorfismo
interessante utilizar o polimorfismo quando identificamos operaes semelhantes a uma categoria de classe. Entretanto, estas operaes so implementadas de forma particular ou diferente (poli = muitas, morphos = formas) em cada subclasse. No exemplo abaixo, definimos a classes pai Produto, onde todo objeto da classe Produto possui o mtodo getDescricao() Entretanto, cada subclasse de getDescricao(). Produto implementar o mtodo getDescricao(), particularizando com as getDescricao() informaes do respectivos objeto.
<?php class Produto { function getDescricao() { exit(); } }

class Relogio extends Produto { function getDescricao() { return "Relgio com ponteiros e marcadores inspirados em modelos automotores ..."; } }

class Tenis extends Produto { function getDescricao() { return "Tnis esportivo com solado de borracha antiderrapante e sistema de absoro de impactos ..."; } }

//Fluxo principal do programa $produtos = array(new Relogio(), new Tenis()); print "<h3>Descrio de Produtos</h3>"; print "<ul>";

60
foreach($produtos as $objetoProduto) { print "<li>" . $objetoProduto->getDescricao() . "</li>"; } print "</ul>"; ?>

Exerccio Proposto
Problema 1
Criar um programa que possui uma classe chamada ContaBancaria Com os ContaBancaria. atributos nome, agncia, conta e saldo. E as operaes sacar(valor) sacar(valor) r(valor), depo imprimirSaldo(). depositar(valor) e imprimirSaldo()

61

A U LA 7 Conectividade a Banco de Dados SQL I


Manter atualizado o contedo HTML de um site web uma tarefa muito custosa. Podemos criar programas web mais fceis de manter com o uso de um banco de dados. Conseguindo separar a informao do formato utilizado para exib-la. Seu uso no se restringe apenas a este caso de uso. Bancos de dados so utilizados largamente em solues para fruns, comrcio eletrnico, gerncia do fluxo de trabalho corporativo, entre muitas outras aplicaes.

62

OBJETIVOS
Introduo Suporte PHP para Banco de Dados Terminologia de Banco de Dados Comandos DDL da SQL CREATE DROP USE Comandos DML da SQL INSERT DELETE UPDATE SELECT ORDER BY LIMIT

63

Introduo
Pelo que foi citado na contextualizao acima, torna-se, assim, virtualmente impossvel criar uma aplicao WEB, de qualquer tamanho, sem interagir com um banco de dados. Isso pela necessidade freqente de armazenar a informao para uso futuro. Estaremos explorando os recursos necessrios para armazenamento em banco de dados nesta aula. Para aproveitar ao mximo o contedo desta aula, voc deve estar familiarizado com o bsico da PHP. Iniciaremos com uma viso geral sobre banco de dados SQL e prosseguiremos com estudo de caso ilustrativo de uma Agenda de contatos WEB.

Suporte PHP para Banco de Dados


PHP oferece suporte a Banco de Dados Relacionais mais populares disponveis na atualidade. A grande maioria compatvel com o padro SQL. PHP oferece um conjunto separado de funes para cada produto de banco de dados ou SGBD (MySQL, PostgreSQL, Oracle, Sybase, MS SQLServer, so alguns exemplos). O nosso curso utilizar o MySQL como banco de dados para uso nas aplicaes. Por motivos importantes quando se est iniciando o estudo nesta rea. Entre eles, a facilidade de instalao e uso, documentao de qualidade, interfaces de programao para diversas linguagens, perfomance otimizada, uso crescente pelas empresas, entre outros.

Terminologia de Banco de Dados


Um banco de dados uma forma simples e organizada de armazenar items de dados relacionados As informaes so organizadas logicamente em tabelas Cada banco de dados contm uma ou mais tabelas de informao Cada tabela possui um ou mais campos, ou colunas, e podem armazenar qualquer nmero de linhas ou registros Sistemas de bancos de dados sofisticados permitem relacionar estes registros. Por exemplo, relacionando os dados de compra realizadas por um cliente. Esses sistemas so conhecidos como Sistemas de Banco de Dados Relacionais Cada campo, ou coluna, de uma tabela possui um tipo de dado associado. Semelhante ao tipo de dado de uma varivel do PHP. Sendo os maiores grupos os tipos texto, data, numrico Alm do tipo de dados, campos de tabela podem ser chave primria. Forando assim que o valor do campo seja nico para cada registro SQL a linguagem padro para consulta e manipulao dos dados de um banco de dados relacional.

Comandos DDL da SQL


Os comandos classificados deste tipo servem para alimentar os metadados do banco de dados. Eles explicitam como sero os dados, seus tipos e tamanhos, alm das restries de chaves. So os comandos executados antes de comear a real alimentao do banco de dados.

64

Create
O comando CREATE da SQL cria um novo esquema ou uma nova tabela de banco de dados. Seguem dois exemplos de comandos para criarmos um esquema, e uma tabela, respectivamente, no MySQL. Exemplo:

CREATE DATABASE meu_banco; Estse comandos devem ser executados no prompt do MySQL. USE meu_banco;

CREATE TABLE contato_tab ( co_contato INT AUTO_INCREMENT PRIMARY KEY, ds_nome VARCHAR(50) NOT NULL, ds_email VARCHAR(50) UNIQUE, ds_telefone VARCHAR(10), ds_endereco VARCHAR(200), ds_observacao TEXT, dt_aniversario DATE );

Drop
O comando DROP elimina um esquema ou uma a tabela.

Exemplo(s):
DROP TABLE contato_tab;

J este elimina o esquema inteiro:


DROP DATABASE meu_banco;

Use
Troca o esquema atual, ou seja, seta o esquema passado como parmetro como default. Na prtica isso quer dizer que os comandos subseqentes iro ser executados sobre o banco escolhido.

Exemplo:
Comando especfico do MySQL. USE meu_banco;

Comandos DML da SQL


Os comandos classificados deste tipo servem para manipular dados armazenados no SGBD (Sistema Gerenciador de Banco de Dados). Os comandos a

65

seguir atuam sobre os dados do banco de dados, ou seja, sobre as linhas(registros) que esto armazenados sob a estrutura das tabelas. Estes so os comandos normalmente encontrados em aplicaes que interagem com o SGBD.

Insert
Aps criada a tabela, j temos o suficiente para inserir os dados. Esta tarefa realizada atravs do comando INSERT da SQL. Cada comando INSERT da SQL insere um registro apenas na tabela. O seguinte comando insere dados de um contato.

Exemplo:
INSERT INTO contato_tab (ds_nome, ds_email, ds_telefone, ds_endereco, ds_observacao, dt_aniversario) VALUES ('Fulano de Tal', 'fulano@mail.com', '35555555', 'TaguatingaDF', 'Sem comentrios...', '1980-07-25');

Delete
O comando DELETE da SQL exclui um ou mais registros da tabela. Para escolher quais registros devem ou no ser excludos, utilize a clusula WHERE. O seguinte comando exclui todos os contatos cadastrados:

DELETE FROM contato_tab; Caso no seja especificada a clusula E o seguinte comando exclui o contato Fulano de Tal. WHERE, todos os registros sero DELETE FROM contato_tab WHERE ds_nome = 'Fulano de Tal'; excludos.

Update
O comando UPDATE da SQL pode ser utilizado para modificar o contedo de registro(s) da tabela. Assim como o comando DELETE, utiliza-se a clusula Caso no seja especificada a clusula WHERE para especificar quais registros atualizar. Por exemplo, o seguinte comando atualiza o email do contato Fulano de Tal. WHERE, todos os
registros sero atualizados. UPDATE contato_tab SET ds_email = 'fulano.tal@mail.com' WHERE ds_nome = 'Fulano de Tal'

Select
O comando SELECT da SQL o mais utilizado. Com este comando podemos ler qualquer informao cadastrada nas tabelas do banco de dados. Tanto de uma ou mais tabelas num mesmo comando. O comando mais simples, que retorna todos os registros da tabela contato ilustrado seguir.
SELECT * FROM contato_tab;

Para buscar campos especficos da tabela contato_tab, basta especificar a listagem de campos separados por vrgulas.
SELECT ds_nome, ds_email, dt_aniversario FROM contato_tab;

Para selecionar registros especficos utilizamos a clusula WHERE aps o nome da(s) tabela(s).

66
SELECT ds_email, ds_endereco, dt_aniversario FROM contato_tab WHERE ds_nome = 'Fulano de Tal'

Por fim, pode-se tambm pesquisar por um padro de texto. Por exemplo, caso no saibamos o nome completo possvel encontrar com o seguinte comando:
SELECT * FROM contato_tab WHERE ds_nome LIKE '%Fulano%';

Order By
A clusula ORDER BY lhe permite a ordenao da pesquisa realizada pelo comando SELECT SELECT. Por exemplo, o comando seguir pesquisa todos os contatos ordenados por nome:

SELECT * FROM contato_tab ORBER BY ds_nome;

Limit
Outra clusula muito til para consultas a LIMIT. Que permite retornar somente um nmero especificado de registros da tabela. Muito til para efeito de paginao do resultado, quando o mesmo no cabe na janela de exibio. Por exemplo, esta consulta retorna somente os dez primeiros contatos cadastrados:
SELECT * FROM contato_tab LIMIT 1, 10;

67

A U LA 8 Conectividade a Banco de Dados SQL - II


Continuao...

68

OBJETIVOS
API PHP de Conectividade ao MySQL Programas de Cadastro Programas de Consulta Especificao do Projeto prtico 2

69

API PHP para conectividade ao MySQL


Aps familiarizado com os conceitos bsicos de banco de dados, temos que conhecer a biblioteca disponvel na linguagem, para acesso ao MySQL. SGBD que ser utilizado para o curso. Veremos, basicamente, que a biblio-teca constituda de funes simples para abrir conexo, selecionar um ban-co de dados, executar comando SQL, obter resultados, entre outras menos utlizadas. A seguir, temos uma tabela explicativa com as funes mais -teis para o nosso aprendizado:

Funo
resource mysql_connect (string fortemente aconselhvel um estudo maquinaBD, string usuarioBD, no manual da string senhaBD)
linguagem PHP para familiarizar-se com as funes presentes nesta biblioteca.

Descrio Retorna recurso que representa a conexo ao MySQL Fecha ou libera conexo ao MySQL Conecta ao um banco especifico no servidor MySQL representado pela conexo Retorna resultado da execuo de consulta ao servidor MySQL associado a conexo Retorna um registro do resultado em formato de array Retorna quantidade de registros no resultado Retorna cdigo interno de erro de operao anterior Retorna texto de erro de operao anterior Retorna o nmero de linhas afetadas em operaco anterior realizada no MySQL

bool mysql_close (resource conexaoBD) bool mysql_select_db (string nomeBD [, resource conexaoBD]) resource mysql_query (string comandoSQL [, resource conexaoBD]) array mysql_fetch_array (resource resultadoConsulta [, resource conexaoBD]) int mysql_num_rows (resource resultado) int mysql_errno ([resource conexaoBD]) string mysql_error ([resource conexaoBD]) int mysql_affected_rows ([resource conexaoBD])

Conectando ao Servidor MySQL


O primeiro passo estabelecer uma conexo entre o PHP e o servidor de banco de dados MySQL. Isso realizado pela chamada funo mysql_connect(). obrigatrio o fornecimento dos parmetros de conexo caso no se utilize a conexo padro.

Utilize o usurio root em suas aplicaes somente para fins didticos!

$conexaoBD = mysql_connect("localhost", "root", "") or die(mysql_error());

Se o PHP no conseguir estabelecer a conexo, o processamento pra(die). Sendo exibida uma mensagem que explica o que ocorreu. Assumindo que tudo ocorreu bem, a conexo se manter disponvel at que a feche, ou at que a pgina termine o processamento.

70

Conectando ao Banco de Dados


Como um servidor MySQL comporta vrios bancos de dados, voc precisa, alm de abrir conexo ao servidor, selecionar o banco de dados que deseja trabalhar. Tarefa esta realizada pela funo mysql_select_db() mysql_select_db().
mysql_select_db("meu_banco") or die(mysql_error());

Agora, estamos prontos para realizar quaisquer operaes com o banco de dados selecionado. Veremos que, na grande maioria, so apenas cinco: Criao, Incluso, Excluso, Atualizao e Consulta. Importante tambm perceber que estas operaes so realizadas atravs de comandos da linguagem SQL. No s para o MySQL como tambm para qualquer produto compatvel com a SQL.

Criando tabela
Para o nosso exemplo, utilizaremos a tabela de contatos. Segue, novamente, o comando SQL que ser utilizado para criar tal tabela.

CREATE TABLE contato_tab ( Para executar este comando, pode-se fazlo pela prpria PHP ou mesmo por um cliente MySQL. Como o MySQL Query Browser, MySQLFront, PHPMyAdmin, entre muitos outros. co_contato INT AUTO_INCREMENT PRIMARY KEY, ds_nome VARCHAR(50) NOT NULL UNIQUE, ds_email VARCHAR(50), ds_telefone VARCHAR(10), ds_endereco VARCHAR(200), ds_observacao TEXT, dt_aniversario DATE );

Inserindo registros
Agora a hora de inserir dados na tabela acima criada. Para isto utilizaremos o comando INSERT da SQL passando os dados recebidos de um formulrio de cadastro. Para executar o comando SQL pela PHP utilizaremos a funo mysql_query(). A seo de cdigo PHP ter a seguinte aparncia: mys ql_query()
$sql = "INSERT INTO contato_tab (ds_nome, ds_email, ds_telefone, ds_endereco, ds_observacao,dt_aniversario) VALUES ('$nome', '$email', '$telefone', '$endereco', '$obs', '$dataAniv') ";

$resultado = mysql_query($sql);

Fechando conexo
Necessitamos ter cincia da importncia de fechar a conexo ao banco de dados. Para no ter problemas com excesso de conexes ou at mesmo a conseqente

71

queda do servidor de banco de dados. Temos, novamente, uma funo para realizar este trabalho: mysql_close() mysql_close() se().
mysql_close($conexaoBD);

Basta chamar a funo mysql_close() passando a conexo a ser fechada como parmetro.

Juntando tudo em pgina de Cadastro


Observao: Para complementar o cdigo a seguir, voc deve criar, antes, tela com os seguintes campos de entrada submetendo para pgina de processamento do cadastro.

A seguir, temos o cdigo fonte completo do programa para realizar o cadastro de um contato. Esta implementao no
inclui o cdigo fonte <?php para a criao do formulrio HTML. Que deve ser feito em // Descrio: salva dados de um contato no banco de dados pgina parte pelo aluno.

$nome

= $_POST["txtNome"];

$email = $_POST["txtEmail"]; $obs = $_POST["txtObs"];

$telefone = $_POST["txtTelefone"]; $endereco = $_POST["txtEndereco"]; $email = $_POST["txtEmail"];

$dataAniv = explode("/", $_POST["txtDataAniv"]);

72
$dataAniv = array_reverse($dataAniv); $dataAniv = implode("-", $dataAniv);

//abre conexao ao servidor MySQL $conexaoBD = mysql_connect("localhost", "root", "") or die(mysql_error());

//conecta-se ao banco de dados meu_banco mysql_select_db("meu_banco", $conexaoBD) or die("Erro:" . mysql_error());

//comando SQL de cadastro $sql = "INSERT INTO contato_tab (ds_nome, ds_email, ds_telefone, ds_endereco, ds_observacao,dt_aniversario) VALUES ('$nome', '$email', '$telefone', '$endereco', '$obs', '$dataAniv') ";

mysql_query($sql) or die("Erro no comando SQL: ". mysql_error());

if(mysql_affected_rows($conexaoBD) == 1) { print "Contato cadastrado com sucesso!"; } else { print "Cadastro no realizado. Motivo: " . mysql_error(); }

//fecha conexao ao servidor MySQL mysql_close($conexaoBD); ?>

Juntando tudo em pgina de Consulta


importante, tambm, desenvolver uma pgina completa para ilustrar o comando SELECT. SELECT Basicamente, criaremos uma pgina que consulta informaes dos

73

contatos cadastrados no banco de dados. Uma explicao mais detalhada dos recursos novos est disponvel aps o exemplo.
<HTML> <BODY> <?php // Descrio: apresenta listagem dos contatos cadastrados no banco de dados

//abre conexao ao servidor MySQL $conexaoBD = mysql_connect("localhost", "root", "") or die("Erro:" . mysql_error());

//conecta-se ao banco de dados meu_banco mysql_select_db("meu_banco", $conexaoBD) or die("Erro:" . mysql_error());

//cria consulta SQL $sql = "SELECT ds_nome, ds_email, ds_endereco, ds_telefone, dt_aniversario FROM contato_tab ORDER BY ds_nome ";

//executa consulta $resultado = mysql_query($sql, $conexaoBD) or die("Erro:" . mysql_error()); ?> <TABLE BORDER="1"> <TR> <TD><b>Nome</b></TD> <TD><b>Email</b></TD> <TD><b>Endereo</b></TD> <TD><b>Telefone</b></TD> <TD><b>Aniversrio</b></TD> </TR>

74
<? while($registro = mysql_fetch_array($resultado)) { ?> <TR> <TD><?= $registro["ds_nome"] ?></TD> <TD><?= $registro["ds_email"] ?></TD> <TD><?= $registro["ds_endereco"] ?></TD> <TD><?= $registro["ds_telefone"] ?></TD> <TD><?= $registro["dt_aniversario"] ?></TD> </TR> <? } ?> </TABLE> </BODY> </HTML> <? //fecha conexao ao servidor MySQL mysql_close($conexaoBD); ?> //l registro

Bem, o que temos de novo a chamada funo mysql_fetch_array(). Necessria para ler o resultado da execuo do comando SELECT. Seu uso simples, passando o resultado da consulta ela nos retorna um registro da tabela por vez, em forma de array associativo. Ento, utilizamos os valores presentes no array para processamento da informao. Perceba que feita uma cpia do registro da tabela para uma varivel array.

75

Projeto 2
Criar um mdulo de autenticao para aplicaes web. O motivo se deve a esta funcionalidade ser muito til em stios ou mesmo sistemas que precisam de um certo nvel de segurana no acesso informao. O mecanismo de autenticao deve funcionar da seguinte forma. apresentada tela ao usurio com dois campos de edio: login e senha. Alm de um boto, que quando clicado dispara o procedimento de autenticao. O procedimento de autenticao realiza pesquisa no banco de dados verificando se existe usurio cadastrado com o login e senha fornecidos. Caso exista, redirecionar o fluxo para tela inicial de boas vindas. Do contrrio, retornar o fluxo para a tela de autenticao, exibindo mensagem de falha na autenticao.
Fig.1 Tela inicial de autenticao Fig.2 Tela inicial de autenticao com falha

Falha na autenticao!

O que voc precisa saber


Como manipular os valores enviados pelo formulrio. Conceitos bsicos de banco de dados Comandos bsicos da linguagem SQL API padro do PHP para conectividade ao MySQL

76

A U LA 9 Conectividade a Banco de Dados SQL III


Continuao...

77

OBJETIVO
Integrao dos conceitos Estudo de Caso

78

Estudo de Caso
Implementao de pginas de cadastro e pesquisa. A seguir, tem-se a definio da tabela de banco de dados e as pginas que implementam as operaes de cadastro e a pesquisa.

Passo1: Criar tabela de livros no banco de dados


CREATE TABLE livro_tab ( isbn CHAR(10) NOT NULL PRIMARY KEY, titulo VARCHAR(100), autor VARCHAR(50), editora VARCHAR(50) );

Passo 2: Criar pgina de cadastro de livros


<?php

if($_POST) { $isbn = $_POST["txtISBN"]; $titulo = $_POST["txtTitulo"]; $autor = $_POST["txtAutor"]; $editora = $_POST["txtEditora"];

$conexao = mysql_connect("localhost", "root", "") or die(mysql_error());

mysql_select_db("banco_aluno") or die(mysql_error());

if ($isbn != NULL && $titulo != NULL) {

$sql = "INSERT INTO livro_tab (isbn, titulo, autor, editora) VALUES ('$isbn', '$titulo', '$autor', '$editora') ";

79
mysql_query($sql) or die(mysql_error());

mysql_close($conexao);

$mensagem = "Livro cadastrado com sucesso!"; } } ?> <HTML> <HEAD><TITLE>Tela Cadastro</TITLE></HEAD> <BODY> <FORM ACTION="" METHOD="post"> <CENTER>Cadastro de Livros</CENTER> <TABLE ALIGN="center"> <TR> <TD>ISBN:</TD> <TD><INPUT TYPE="text" NAME="txtISBN"/></TD> </TR> <TR> <TD>Ttulo:</TD> <TD><INPUT TYPE="text" NAME="txtTitulo"></TD> </TR> <TR> <TD>Autor:</TD> <TD><INPUT TYPE="text" NAME="txtAutor"></TD> </TR> <TR> <TD>Editora:</TD> <TD><INPUT TYPE="text" NAME="txtEditora"></TD>

80
</TR> <TR> <TD COLSPAN="2" ALIGN="right"> <INPUT TYPE="submit" NAME="btnCadastrar" VALUE="Cadastrar"/>&nbsp; <INPUT TYPE="reset" VALUE="Limpar"/> </TD> </TR> <BR/><CENTER><?= $mensagem ?></CENTER> </TABLE> </BODY> </HTML>

Passo 3: Criar pgina de consulta de livros


<?php

$isbn = $_POST["txtISBN"]; $titulo = $_POST["txtTitulo"]; $autor = $_POST["txtAutor"]; $editora = $_POST["txtEditora"];

$conexao = mysql_connect("localhost", "root", "") or die(mysql_error());

mysql_select_db("meu_banco") or die(mysql_error());

if ($_POST) {

$sql = "SELECT isbn, titulo, autor, editora FROM livro_tab WHERE 1 = 1 "; if ($isbn != NULL) $sql = $sql . " AND isbn = '$isbn' ";

81
if ($titulo != NULL) $sql = $sql . " AND titulo LIKE '%$titulo%' "; if ($autor != NULL) $sql = $sql . " AND autor LIKE '%$autor%' "; if ($editora != NULL) $sql = $sql . " AND editora LIKE '%$editora%' "; $sql = $sql . " ORDER BY titulo ";

$resultado = mysql_query($sql) or die(mysql_error()); } ?> <HTML> <HEAD><TITLE>Tela Cadastro</TITLE></HEAD> <BODY> <FORM ACTION="" METHOD="post"> <CENTER>Consulta Livros</CENTER> <TABLE ALIGN="center"> <TR> <TD>ISBN:</TD> <TD><INPUT TYPE="text" NAME="txtISBN"/></TD> </TR> <TR> <TD>Ttulo:</TD> <TD><INPUT TYPE="text" NAME="txtTitulo"></TD> </TR> <TR> <TD>Autor:</TD> <TD><INPUT TYPE="text" NAME="txtAutor"></TD> </TR>

82
<TR> <TD>Editora:</TD> <TD><INPUT TYPE="text" NAME="txtEditora"></TD> </TR> <TR> <TD COLSPAN="2" ALIGN="right"> <INPUT TYPE="submit" NAME="btnConsultar" VALUE="Consultar"/>&nbsp; </TD> </TR> </TABLE> <?php if ($resultado != NULL) { ?> <TABLE ALIGN="center"> <TR> <TD><B>ISBN</B></TD> <TD><B>Ttulo</B></TD> <TD><B>Autor</B></TD> <TD><B>Editora</B></TD> <TD><B>&nbsp;</B></TD> <TD><B>&nbsp;</B></TD> </TR> <? while ($registro = mysql_fetch_array($resultado)) { ?> <TR> <TD><?= $registro["isbn"] ?></TD> <TD><?= $registro["titulo"] ?></TD> <TD><?= $registro["autor"] ?></TD> <TD><?= $registro["editora"] ?></TD> <TD>

83

<a href="excluirLivro.php?isbn=<?=$registro["isbn"]?>&acao=excluir"> Excluir </a> </TD> <TD> <a href="atualizarLivro.php?isbn=<?=$registro["isbn"]?>&acao=atualizar" "> Atualizar </a> </TD> </TR> <? } //while } //if ?> </TABLE> </BODY> </HTML> <?php mysql_close($conexao); ?>

84

Exerccio Proposto
Implemente os programas para realizar as operaes de Excluso e Atualizao dos livros cadastrados.

You might also like