Professional Documents
Culture Documents
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
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>
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
>>=
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
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
$a && $b
10
Exemplo Nome OU NOT Resultado Verdadeiro se $a ou $b so verdadeiros Verdadeiro se $a no verdadeiro
$a || $b !$a
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>
$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.
<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> </td> <td><input type="submit" value="OK"/></td> </tr> </form>
</body> </html>
print "Seu login: <b>$login</b><br>"; print "Sua senha: <b>$senha</b><br>"; ?> </body> </html>
13
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>
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; ?>
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
if($login == NULL || $senha == NULL) { print "Login e/ou senha invlida!"; exit(); }
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.
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"];
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
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"> </td> </tr> </table> <?php // verifica se acionou o boto para clculo if ($_POST != 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... ?>
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
?>
Tambm, podemos precisar imprimir uma listagem da chamada. Isso conseguido com o seguinte fragmento de cdigo:
30
<?php
?>
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",
print $dadosUsuario["nome"]
. "<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
?>
?>
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
$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...
36
OBJETIVOS
Em que situao usar Funes Vantagens Criando Funes Utilizando Funes Devolvendo Valor Recurso Criando Biblioteca de Funes
37
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
print "Primeira senha: " . $senha1 . "<BR/>"; print "Segunda senha: " . $senha2 . "<BR/>";
39
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]; } } }
$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); }
?>
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
?>
<?php
//arquivo: programa.php
include("minhasFuncoes.php");
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
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.
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");
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");
fclose($f);
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";
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";
// 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
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
52
53
OBJETIVOS
PHP e Programao Orientao a Objetos Definindo Classes Usando Classes Herana Polimorfismo
54
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.
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(); } }
56
print $retang1->x1 . "," . $retang1->y1 . "<br>"; print $retang1->area() . "<br>";
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.
// Classe Para carrinho de compras que somente salva, remove e devolve os items // armazenados
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
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
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.
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;
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;
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:
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
68
OBJETIVOS
API PHP de Conectividade ao MySQL Programas de Cadastro Programas de Consulta Especificao do Projeto prtico 2
69
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])
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
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.
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"];
72
$dataAniv = array_reverse($dataAniv); $dataAniv = implode("-", $dataAniv);
//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') ";
if(mysql_affected_rows($conexaoBD) == 1) { print "Contato cadastrado com sucesso!"; } else { print "Cadastro no realizado. Motivo: " . mysql_error(); }
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());
//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!
76
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.
mysql_select_db("banco_aluno") or die(mysql_error());
$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"/> <INPUT TYPE="reset" VALUE="Limpar"/> </TD> </TR> <BR/><CENTER><?= $mensagem ?></CENTER> </TABLE> </BODY> </HTML>
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"/> </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> </B></TD> <TD><B> </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.