Escolar Documentos
Profissional Documentos
Cultura Documentos
Instituto Federal do Esprito Santo Este Caderno foi elaborado em parceria entre o Instituto Federal do Esprito Santo e a Universidade Federal de Santa Catarina para o Sistema Escola Tcnica Aberta do Brasil e-Tec Brasil.
Equipe de Elaborao Instituto Federal do Esprito Santo IFES Coordenao Institucional Guilherme Augusto de Morais Pinto/IFES Joo Henrique Caminhas Ferreira/IFES Coordenao Curso Allan Francisco Forzza Amaral/IFES Professor-autor Jean Eduardo Glazar/IFES Comisso de Acompanhamento e Validao Universidade Federal de Santa Catarina UFSC Coordenao Institucional Araci Hack Catapan/UFSC Coordenao do Projeto Silvia Modesto Nassar/UFSC Coordenao de Design Instrucional Beatriz Helena Dal Molin/UNIOESTE e UFSC Coordenao de Design Grco Andr Rodrigues/UFSC Design Instrucional Juliana Leonardi/UFSC Web Master Rafaela Lunardi Comarella/UFSC Web Design Beatriz Wilges/UFSC Mnica Nassar Machuca/UFSC Diagramao Andr Rodrigues/UFSC Brbara Zardo/UFSC Juliana Tonietto/UFSC Marlia C. Hermoso/UFSC Reviso Jlio Csar Ramos/UFSC Projeto Grco e-Tec/MEC
G553p Glazar, Jean Eduardo Programao para web : Curso tcnico em informtica / Jean Eduardo Glazar. Colatina: IFES, 2011. 102 p. : il.
ISBN: 978-85-62934-37-7 1. PHP (Linguagem de programao de computador). 2. Banco de dados. 3. Sites da Web Desenvolvimento. I. Glazar, Jean Eduardo. II. Instituto Federal do Esprito Santo. III. Ttulo. CDD: 005.133
e-Tec Brasil
Indicao de cones
Os cones so elementos grcos utilizados para ampliar as formas de linguagem e facilitar a organizao e a leitura hipertextual. Ateno: indica pontos de maior relevncia no texto.
Saiba mais: oferece novas informaes que enriquecem o assunto ou curiosidades e notcias recentes relacionadas ao tema estudado. Glossrio: indica a denio de um termo, palavra ou expresso utilizada no texto. Mdias integradas: sempre que se desejar que os estudantes desenvolvam atividades empregando diferentes mdias: vdeos, lmes, jornais, ambiente AVEA e outras. Atividades de aprendizagem: apresenta atividades em diferentes nveis de aprendizagem para que o estudante possa realiz-las e conferir o seu domnio do tema estudado.
e-Tec Brasil
Sumrio
Palavra do professor-autor Apresentao da disciplina Projeto instrucional Aula 1 A linguagem PHP 1.1 O que PHP? 1.2 Instalao 1.3 Sintaxe bsica 1.4 Como testar uma pgina em PHP 1.5 Variveis e tipos 1.6 Operadores 1.7 Estruturas de controle 1.8 Array 1.9 Funes Aula 2 Recebendo dados do formulrio 2.1 Mtodos GET e POST 2.2 Obtendo e validando os dados 2.3 Upload de arquivos 9 11 13 15 15 16 19 21 23 24 25 28 29 31 31 32 36
2.4 Headers 39 Aula 3 Acesso, insero e listagem no banco de dados MySQL 3.1 Criando o banco de dados 3.2 Conectando ao banco de dados 3.3 Inserindo dados 3.4 Listando os dados 3.4.1 Formulrio dinmico Aula 4 Consulta, excluso e alterao no banco de dados MySQL 4.1 Consultando no banco de dados MySQL 4.2 Excluindo no banco de dados MySQL 4.3 Alterando no banco de dados MySQL 43 44 44 47 52 54 57 57 60 62 7
e-Tec Brasil
Aula 5 Gerenciando sesses 5.1 Criando uma sesso 5.2 Manipulando as variveis de uma sesso 5.3 Excluindo a sesso 5.4 Caso de uso: autenticando usurios 5.4.3 Fazer logout Aula 6 Caso de uso: aplicao utilizando o padro MVC 6.1 O que MVC? 6.2 Estrutura do MVC 6.3 Alterando nosso sistema para o MVC Referncias Currculo do professor-autor
73 74 74 75 75 78 79 79 80 81 89 90
e-Tec Brasil
Palavra do professor-autor
Ol! Estudante! um prazer t-lo conosco. Apesar de se tratar de um curso a distncia, voc no est sozinho nesta jornada. importante que voc conhea toda a equipe envolvida neste curso: coordenadores, professores especialistas, tutores a distncia e tutores presenciais, porque quando precisar de algum tipo de ajuda saber a quem recorrer. Alm disso, temos nossa disposio um ambiente virtual cheio de recursos que podem nos auxiliar neste processo. A Educao a Distncia (EaD), pela sua caracterstica de amplitude e pelo uso de tecnologias modernas, representa uma nova forma de aprender, respeitando sempre o ritmo de aprendizado de cada aluno. Na EaD voc o grande responsvel pelo sucesso da aprendizagem. Seu desempenho ser mais proveitoso medida que for resolvendo os exerccios propostos e participando das discusses com os tutores e demais colegas de curso. Aprender programao requer dedicao e tempo; portanto, organize seu plano de estudo reservando um tempo todos os dias para os estudos, para que as atividades no acumulem. Desejo-lhe sucesso e dedicao! Um grande abrao! Prof. MSc. Jean Eduardo Glazar
e-Tec Brasil
Apresentao da disciplina
Nesta disciplina estudaremos programao para web sob o enfoque do servidor, ou seja, depois de enviado algum dado a partir de uma pgina em HTML. Esta disciplina uma continuao de Fundamentos do Desenvolvimento Web (FDW). Vrias so as linguagens para criao de sistemas web. Vamos nos focar na linguagem PHP, por ser uma linguagem de fcil aprendizado, comparada com as demais, e bastante popular. Como uma linguagem de programao, todos os conceitos aprendidos at agora sero bastante utilizados. Tambm trabalharemos com banco de dados, armazenando e manipulando as informaes via pginas web. Nesse momento, ser muito til o conhecimento adquirido da disciplina Banco de Dados (BD). Por m, veremos uma arquitetura para sistemas web como forma de organizarmos melhor as pginas de um sistema, com a nalidade de obtermos produtividade no desenvolvimento e facilitarmos a manuteno posterior. Lembre-se, a melhor forma de aprender programao praticando!
11
e-Tec Brasil
Projeto instrucional
Disciplina: Programao para Web (carga horria: 60 h). Ementa: Linguagem para estilos. Metalinguagem. Construo de pginas dinmicas. Integrao com banco de dados.
OBJETIVOS DE APRENDIZAGEM
CARGA HORRIA (horas)
AULA
MATERIAIS
Caderno impresso.
Comparar as vantagens e desvantagens do PHP em relao a outras linguagens. Instalar e congurar o ambiente de desenvolvimento web. Conhecer a sintaxe da linguagem PHP. Construir pginas web com PHP.
Ambiente Virtual de Ensino-aprendizagem (AVEA). Sites dos programas de instalao: http://www.php.net/downloads http://www.apache.org http://www.wampserver.com http://www.easyphp.org http://netbeans.org
1. A Linguagem PHP
10
Entender como os dados de um formulrio so manipulados em um servidor com PHP. 2. Recebendo dados do formulrio Aprender e exercitar o envio de um arquivo para o servidor a partir de uma pgina web. Conhecer a forma de gerenciar as informaes de uma conexo com o servidor.
Caderno impresso. Ambiente Virtual de Ensino-aprendizagem (AVEA). Ambiente de programao web (NetBeans).
10
Caderno impresso. Conhecer como o PHP interage com o banco de dados. 3. Acesso, insero e listagem no banco de dados MySQL Construir pginas web para inserir dados em um banco de dados. Construir pginas web para recuperar informaes do banco de dados. Ambiente Virtual de Ensino-aprendizagem (AVEA). Ambiente de programao web (NetBeans). Gerenciador de banco de dados (MySQL). 10
13
e-Tec Brasil
AULA
OBJETIVOS DE APRENDIZAGEM
MATERIAIS
Caderno impresso.
Aprender como realizar uma consulta ltrando por determinado campo. Aprender a excluir e a alterar um registro no banco de dados a partir de pginas web em PHP.
Ambiente Virtual de Ensino-aprendizagem (AVEA). Ambiente de programao web (NetBeans). Gerenciador de banco de dados (MySQL). Caderno impresso. 10
Aprender para que serve uma sesso em um sistema web e como program-la. 5. Gerenciando sesses Aprender a como utilizar a sesso para autenticar usurios. Construir pginas web para autenticar os usurios.
Ambiente Virtual de Ensino-aprendizagem (AVEA). Ambiente de programao web (NetBeans). Gerenciador de banco de dados (MySQL). Caderno impresso. Ambiente Virtual de Ensino-aprendizagem (AVEA). Ambiente de programao web (NetBeans). 10
Conhecer o padro de desenvolvimento de sistemas web MVC. Construir um sistema web no padro MVC.
10
e-Tec Brasil
14
15
e-Tec Brasil
Pesquise sobre as outras linguagens de programao web e discuta com os colegas e tutores, no ambiente virtual de ensino-aprendizagem, destacando as vantagens e desvantagens de cada uma.
O PHP foi criado em 1995 por Rasmus Lerdorf com o nome de Personal Home Page Tools (Ferramentas Para Pgina Pessoal), para auxiliar no desenvolvimento de pginas simples. Como teve boa aceitao e muitos programadores utilizando-as, novas verses foram desenvolvidas com cada vez mais recursos. Existem outras linguagens de programao que podemos utilizar para criar as pginas dinmicas, como Java, Perl, ASP, etc.
1.2 Instalao
servidor web um programa de computador responsvel por aceitar pedidos HTTP de clientes, geralmente os navegadores, e servi-los com pginas de respostas (em HTML) incluindo dados, imagens, sons e links. Esse programa disponibiliza um local especco no computador servidor (site) para armazenar e processar as pginas de resposta. Apache o resultado de um esforo coletivo de vrios colaboradores, para o desenvolvimento de um software gratuito, robusto e com qualidade, para a implementao de um servidor HTTP. o servidor web mais usado no mundo. capaz de executar cdigos em PHP, Perl, Shell Script, ASP, dentre outros. Sua utilizao mais conhecida a que combina o Apache com a linguagem PHP e o banco de dados MySQL.
Para testar as pginas PHP, no basta dar um duplo clique nos arquivos. php, como se faz com os .htm ou .html. necessrio ter um servidor web congurado para isso. Um dos servidores web mais utilizados o Apache.
No Ubuntu tambm podemos instalar os programas separados, usando algum instalador, como o apt-get. Na mesma linha de comando possvel instalar todos os pacotes necessrios, basta digitar: sudo apt-get install apache2 php5 libapache2-mod-php5 mysql-server libapache2-mod-auth-mysql php5-mysql Nas verses mais novas do Ubuntu, tambm possvel instalar um pacote com todos os programas. O comando : sudo tasksel install lamp-server
Faa o download do Apache e instale o software em seu computador: http://www.apache.org Aps instalar o Apache, faa o download do PHP e instale-o: http://www.php.net/downloads
e-Tec Brasil
16
Depois da instalao ser necessrio reinicializar o Apache. Para isso digite: sudo /etc/init.d/apache2 restart
17
e-Tec Brasil
Agora vamos criar um arquivo com extenso .php (teste.php, por exemplo) na pasta base www. Abra-o com qualquer editor de texto e digite: <?php phpinfo(); ?> Salve-o e em seguida digite em seu navegador favorito o seguinte endereo: http://localhost/teste.php. teste.php o nome do arquivo PHP que voc criou. localhost signica que o seu navegador ir procurar o arquivo no seu prprio computador, no diretrio www congurado na instalao. Na internet, como o servidor est em outro local, substitui-se localhost pelo endereo web da empresa, como por exemplo: http://www.empresaxyz.com.br/cadastro.php Se a instalao estiver correta, uma tela com informaes sobre a congurao do PHP dever ser exibida, como indicado pela Figura 1.3 a seguir.
e-Tec Brasil
18
HTTP HTML
5
Banco de Dados
Passo 1 O usurio em seu navegador solicita uma pgina em PHP, por exemplo, consulta.php. Essa solicitao enviada pelo protocolo HTTP ao servidor web da empresa (por exemplo, o Apache). Passo 2 O Apache chama a pgina PHP que foi solicitada e a executa. Passo 3 A pgina PHP pode ou no fazer acesso ao banco de dados. Passo 4 Ao nal da execuo do programa PHP, uma pgina de resposta em HTML enviada ao Apache. Passo 5 O Servidor web Apache repassa a pgina de resposta para o navegador que a solicitou, que a exibe. Para diferenciar o cdigo PHP dentro da pgina em HTML, podem ser utilizados os delimitadores descritos na Figura 1.5 a seguir.
1) <?php Comandos; ?> 3) <script language=php> Comandos; </script> 2) <? Comandos; ?> 4) <% Commandos; %>
19
e-Tec Brasil
O primeiro delimitador da Figura 1.5 o padro. O segundo uma simplicao do primeiro. Esses so os mais usados. O terceiro segue o estilo de scripts em HTML. O quarto segue o estilo do ASP. Para utilizar a forma simplicada, bem como o estilo ASP, o arquivo de congurao php.ini deve ser alterado, pelos campos short_open_tags e asp_tags, respectivamente. A Figura 1.6 mostra a estrutura de uma pgina HTML com o cdigo PHP embutido.
Pode haver vrios blocos de PHP misturados com vrios trechos de HTML.
Como o cdigo PHP processado no servidor e apenas o HTML enviado como resposta, utilizaremos o comando echo para gerar esse HTML. Veja o exemplo da Figura 1.7 a seguir.
e-Tec Brasil
20
21
e-Tec Brasil
1. Na aba de Projetos, clique com o boto direito do mouse no nome de nosso projeto. 2. Escolha as opes Novo > Pgina da Web do PHP. 3. Escolha um nome para a pgina com a extenso .php (por exemplo, PrimeiraPagina.php). Clique em Finalizar. PRONTO!!! Voc j pode programar em PHP. A Figura 1.8 apresenta um trecho da tela mostrada aps a realizao dos passos acima.
Voc tambm pode, e deve, criar subdiretrios dentro do seu projeto, para organizar melhor as suas pginas.
Uma arquitetura para desenvolvimento web que organiza a programao das pginas de um sistema, com o objetivo de aumentar a produtividade e facilitar a manuteno, ser vista na Aula 6.
Para criar subdiretrios no NetBeans, siga os passos: 1. Clique com o boto direito do mouse no nome do projeto. 2. Escolha as opes Novo > Diretrio. 3. Escolha um nome para o diretrio. Clique em Finalizar. Quando for criar novas pginas PHP, clique em cima do diretrio no qual deseja colocar as pginas.
e-Tec Brasil
22
Depois de programar e salvar o arquivo, vamos test-lo. Para isso, abra seu navegador favorito e digite: http://localhost/nomedoarquivo.php, em que: localhost corresponde ao seu computador local; e nomedoarquivo.php nome que voc deu no seu arquivo PHP (no nosso exemplo, PrimeiraPagina.php). Se o servidor web estiver em outro computador, ento troque localhost pelo IP (ou hostname) desse servidor. Caso tenha criado subdiretrios, ento acrescente no endereo do navegador os subdiretrios criados. Exemplo: http://localhost/ProgWeb/cadcliente.php Nesse exemplo foi criado o subdiretrio ProgWeb e dentro dele foi colocada a pgina cadcliente.php.
23
e-Tec Brasil
O PHP case sensitive, ou seja, letras maisculas so diferentes de minsculas. Portanto, para facilitar, criem as variveis sempre em minsculo. Os comentrios podem ser de uma linha, utilizando o smbolo //, ou de mais linhas, delimitado pelos smbolos /* e */. Exemplos: $cont = 0; // Exemplo de comentrio de uma linha /* Exemplo de comentrio com mais de uma linha. Preste ateno nos smbolos delimitadores. */
1.6 Operadores
Os principais operadores em PHP esto descritos nos quadros a seguir: os operadores aritmticos podem ser vistos no Quadro 1.4, os operadores lgicos esto descritos no Quadro 1.5, os operadores de comparao so mostrados no Quadro 1.6 e demais operadores importantes esto no Quadro 1.7 a seguir. Quadro 1.4: Operadores aritmticos
+ * / Adio Subtrao Multiplicao Diviso
e-Tec Brasil
24
if...else executa o primeiro bloco de comandos se a expresso for verdadeira e o bloco do else caso a expresso seja falsa. (se...ento...seno). A Figura 1.10 mostra um exemplo.
25
e-Tec Brasil
if...elseif...else o elseif utilizado quando vrias condies precisam ser analisadas. Para cada elseif, uma nova expresso deve ser analisada. Quando todas as expresses forem falsas, ento o ltimo bloco else ser executado. Exemplo na Figura 1.11 a seguir.
switch funciona semelhante a vrios if juntos. Uma expresso ou varivel analisada e, de acordo com o valor, um entre vrios blocos de comandos executado. Diferentemente do if, cuja expresso somente retorna verdadeiro ou falso, no switch o valor retornado pode ser diverso. A expresso comparada com cada uma das clusulas case at que uma coincida. Quando isso acontece, o bloco de comandos correspondente executado at encontrar o comando break, que interrompe a execuo daquele bloco e naliza o switch. Se nenhuma clusula coincidir, ento o bloco delimitado pelo comando default executado. Na Figura 1.12 temos um exemplo do switch.
e-Tec Brasil
26
do...while funciona de maneira semelhante ao while; a diferena que a condio testada depois do bloco de comandos. Isso garante que pelo menos uma vez o bloco de comandos ser executado. Veja um exemplo na Figura 1.14 a seguir.
for utilizado quando se conhece a quantidade total de iteraes ou quando se pretende contar essas iteraes. Sua sintaxe : for (inicializao; condio; incremento) { . . } Em que: Inicializao uma instruo de atribuio executada apenas uma vez, no incio do lao. Geralmente utilizada para inicializar a varivel que ir controlar o nmero de repeties do lao. Condio a expresso que controla a parada das repeties. Se for verdadeira, o bloco de comandos executado novamente; se for falsa, termina.
27
e-Tec Brasil
Incremento dene a maneira como a varivel de controle do lao ser alterada a cada vez que o lao for repetido. Ela executada ao nal da execuo de cada repetio do corpo do lao. Veja exemplo na Figura 1.15 a seguir.
Atividades de aprendizagem 1.1: Crie um cdigo em PHP que exiba uma sequncia de nmeros de 1 a 100. Os nmeros pares devem ser formatados em negrito e os nmeros mpares em itlico.
1.8 Array
Os arrays so estruturas para armazenar valores que precisam ser indexados. Diferentemente do C, em que os ndices so apenas nmeros inteiros e consecutivos, em PHP os ndices podem ser de vrios tipos. Mesmo se forem inteiros no precisam ser consecutivos. Os valores armazenados no precisam ser do mesmo tipo. Veja um exemplo na Figura 1.16, onde print_r mostra todos os elementos do array.
Perceba que podemos trabalhar com ndices diferentes em um mesmo array. Outra forma semelhante para inicializar o array pode ser vista na Figura 1.17, que idntica a da Figura 1.16 a seguir.
e-Tec Brasil
28
Para mais detalhes sobre funes para manipulao de arrays, consulte: SOARES, Walace. PHP 5: conceitos, programao e integrao com banco de dados. 3 ed. So Paulo: rica, 2007.
Crie um array e preencha com alguns estados, indexados pela sigla, como no programa na Figura 1.16. Faa uma funo que receba esse array e uma sigla como parmetro e mostre o nome do estado.
1.9 Funes
As funes em PHP seguem o mesmo princpio das de outras linguagens. A diferena que como no precisamos declarar os tipos, a lista de parmetros possui apenas o nome das variveis. As funes que retornam valor tambm no precisam informar o tipo de retorno. A sintaxe : function nome_funo (lista de parmetros) { ... } Para organizar melhor o cdigo, as declaraes das funes cam dentro do bloco <HEAD>, em uma pgina HTML. As chamadas das funes cam no <BODY>. Veja exemplos de funes na Figura 1.18 a seguir.
29
e-Tec Brasil
Por denio, a passagem de parmetros por valor. Caso se queira passar os parmetros por referncia, para alterar uma varivel dentro da funo, utiliza-se o smbolo & antes do parmetro. Veja a Figura 1.19 a seguir.
Com os conceitos e comandos aprendidos nesta aula possvel criar pginas web bsicas em PHP. O conhecimento desses comandos de extrema importncia para os demais recursos que sero abordados nas prximas aulas. Portanto, somente passe para a prxima aula se todos esses conceitos e comandos foram entendidos e bem praticados.
Resumo
Leituras complementares: SOARES, Walace. PHP 5: conceitos, programao e integrao com banco de dados. 3 ed. So Paulo: rica, 2007. GUTMANS, Andi; BAKKEN, Stig Saether; RETHANS, Derick. PHP 5: programao ponderosa. Rio de Janeiro: Alta Books, 2005. Links interessantes: http://www.php.net http://www.apache.org http://pt.wikipedia.org/wiki/PHP
Nesta primeira aula vimos como instalar e congurar o servidor web Apache e o mdulo PHP. Aprendemos a sintaxe do PHP e com isso criamos nossa primeira pgina web, ainda sem muitos recursos e sem interatividade. Na prxima aula entenderemos como os dados de um formulrio so manipulados em um servidor com PHP, aprenderemos a enviar um arquivo para o servidor a partir de uma pgina web e conheceremos a forma de gerenciar as informaes de uma conexo com o servidor.
Atividade de aprendizagem
1. Pesquise nos livros os comandos para pegar a data do sistema. Faa uma funo de saudao da sua pgina. Essa funo dever pegar a hora corrente e mostrar na tela a mensagem abaixo, com sua respectiva formatao.
0 <= Hora < 12 BOM DIA (em vermelho) 12 <= Hora < 18 BOA TARDE (em verde) 18 <= Hora < 24 BOA NOITE (em azul)
e-Tec Brasil
30
31
e-Tec Brasil
name nome do formulrio. til para referncia em funes javascript. action arquivo no servidor que ser chamado para tratar os dados do formulrio. A pgina em HTML com o formulrio ir passar os dados para o programa PHP especicado por este campo. method mtodo de envio de dados para o servidor. Dois tipos so permitidos GET e POST. Mais detalhes a seguir. enctype dene o formato de como os dados sero enviados para o servidor. Necessrio para o envio de arquivos, que ser tratado mais adiante. Por enquanto, nem precisamos especicar nada. O exemplo acima mostra o valor padro, que pode ser omitido. A diferena entre GET e POST est na forma como os dados so enviados para o servidor. No mtodo POST, os dados so enviados ocultos. o mtodo recomendado quando se utiliza formulrio. J no mtodo GET, os dados so enviados de forma aberta, na URL, na forma do par campo=valor. Para isso, utiliza-se o smbolo ? depois do nome do arquivo. Os pares campo=valor so separados pelo smbolo &. Essa forma de envio utilizada quando temos poucas informaes a serem passadas, e elas podem ser especicadas direto na URL. Utiliza-se principalmente quando queremos passar dados atravs de um link, sem os campos de um formulrio. Exemplo: http://www.xxx.com/cons.php?nome=Joo&cidade=Colatina Nesse exemplo foi utilizado o mtodo GET, que chama o programa cons.php, passando o campo nome igual a Joo e o campo cidade igual a Colatina.
Um exemplo mais real pode ser visto no site do Google. Depois que voc zer uma pesquisa qualquer, verique o endereo que aparece. Perceba que existem vrios pares campo=valor que so passados para o servidor, mas que no tm formulrio para digitar.
e-Tec Brasil
32
33
e-Tec Brasil
Seja passando os dados via POST ou GET, o programa no servidor para capturar e tratar os dados ser o mesmo. Os dados enviados para o programa PHP sero transformados em um array, $_POST, se o mtodo de envio for o POST, e $_GET, se o mtodo de envio foi o GET. Esses vetores so indexados pelos nomes dos campos. Se o mtodo de envio for o POST, os nomes dos campos sero aqueles informados no atributo name dos comandos HTML. Se o envio for por GET, ento o nome dos campos sero aqueles especicados no endereo pelo par campo=valor. Vamos agora criar um arquivo PHP com o mesmo nome dado no action do formulrio (no exemplo cadcliente.php). Nessa pgina, vamos capturar os dados enviados e mostrar uma pgina de resposta com esses dados. Para pegar cada campo, devemos informar qual o array que contm os dados ($_POST ou $_GET) e entre colchetes [ ] o nome do campo, denido no formulrio HTML. Depois de pegar os dados, podemos vericar se foram preenchidos e se esto corretos. Por exemplo: vericar se o campo foi preenchido, vericar datas, validar CPF, vericar se o e-mail vlido, etc. A Figura 2.3 mostra o cdigo que recebe os dados e verica se alguns campos esto preenchidos; caso no estejam, mostra uma mensagem de erro e, por ltimo, exibe na tela os dados informados. Mais adiante aprenderemos a inserir esses dados no banco de dados.
e-Tec Brasil
34
A Figura 2.4 mostra a pgina exibida pelo programa acima, com os valores digitados no formulrio.
Funes para validar datas, CPF, e-mail, etc. so facilmente encontradas na internet. Veja alguns links: http://codigofonte.uol.com.br/ codigos/php/validacao http://www.revistaphp.com.br http://www.criarweb.com/php http://phpbrasil.com http://www.codigofonte.net/ scripts/php.
35
e-Tec Brasil
Note que os valores dos campos do tipo ComboBoxe ListBox so os valores denidos no atributo value da opo escolhida (<option>) e no o nome que aparece no formulrio. No exemplo acima, o estado ES. O valor do campo do tipo RadioButton tambm o valor do atributo value. No exemplo acima, o sexo M ou F. Campos do tipo CheckBox retornam true(verdadeiro) se foram marcados e false (falso), caso contrrio. Pesquise na internet as funes para validar data e CPF. Acrescente essas funes ao programa da Figura 2.3 para validar nosso campo CPF e data de nascimento. Informe as mensagens de erro em vermelho.
e-Tec Brasil
36
Quando o arquivo enviado para o servidor, vrias informaes so armazenadas em um vetor chamado $_FILES, como o nome, o tipo, o tamanho, etc. Para obter esses dados, devemos informar o nome do campo entre colchetes, assim: $arquivo = $_FILES[nome_do_campo]; A varivel $arquivo foi utilizada para receber o arquivo. A partir desse comando, sempre que pretendermos trabalhar com o arquivo, utilizaremos a varivel $arquivo. Diversas informaes podem ser obtidas a partir dessa varivel, como: cdigos de erros, se ocorrerem, tamanho, tipo e o nome temporrio do arquivo. Se ocorrer algum erro no upload, o cdigo de erro ca armazenado no atributo error. O cdigo zero signica que no ocorreu nenhum erro. Para obter esse cdigo, utilize o seguinte comando: $arquivo[error] As vericaes que podemos fazer so em relao ao tamanho, ao tipo do arquivo, etc. No nosso exemplo, vamos vericar se o arquivo uma imagem (gif, jpg, png, bmp) e se o tamanho menor que 100.000 bytes. Os comandos para pegar o tipo e o tamanho do arquivo, respectivamente, so: $arquivo[type] e $arquivo[size]
O arquivo, propriamente dito, quando chega ao servidor, colocado em um diretrio temporrio, congurado no arquivo php.ini. Para mover para o diretrio denitivo, usa-se o seguinte comando: move_uploaded_le($arquivo[tmp_name], destino) em que: $arquivo[tmp_name] pega o nome do arquivo temporrio; e destino diretrio de destino do arquivo. O diretrio de destino deve existir e com permisso para escrita. Se a cpia for realizada com sucesso, esse comando retorna true. Caso ocorra algum erro, como por exemplo, o diretrio de destino no existe ou no tem permisso de gravao, essa funo retornar false.
37
e-Tec Brasil
A ltima etapa mostrar a foto que foi enviada. Para isso basta colocar a tag <IMG> com o diretrio destino para onde o arquivo foi copiado. A Figura 2.6 mostra o trecho de cdigo para lidar com o upload do arquivo. Esse cdigo deve ser colocado no programa da Figura 2.3, antes da parte que mostra os dados na tela. A Figura 2.7 mostra o resultado do envio dos dados com a imagem.
e-Tec Brasil
38
2.4 Headers
Os headers servem para o gerenciamento da conexo entre o PHP e o navegador do usurio, podendo trocar informaes contidas no cabealho HTTP de uma pgina. Os headers so informaes trocadas entre o navegador e o servidor de maneira transparente ao usurio, e podem conter dados sobre o tipo e a verso do navegador, a pgina de onde partiu a requisio (link), os tipos de arquivos aceitos como resposta, e uma srie de outras informaes.
39
e-Tec Brasil
A sintaxe da funo header: header(cabealho) Em que: cabealho um comando j denido para indicar o tipo de cabealho HTTP a ser usado. Por exemplo, o cabealho HTTP/ indica que um cdigo de retorno enviado para o navegador do cliente. O exemplo na Figura 2.8 mostra o envio de uma mensagem de Pgina no encontrada:
Uma segunda forma de usar o header para redirecionar para outra pgina. Esse comando muito til para, ao nal de uma pgina puramente em PHP, redirecionar para outra pgina padronizada de resposta ou de erro. Usa-se o comando Location e logo em seguida o nome da pgina que se pretende redirecionar. Veja um exemplo na Figura 2.9:
O comando header deve ser usado antes de qualquer comando de exibio (echo, tags HTML, include). Usaremos o header mais adiante como forma de redirecionamento de pgina. Com os conhecimentos desta aula voc tem a capacidade de criar pginas web dinmicas, nas quais, a partir de um formulrio em HTML em um navegador, o usurio possa enviar dados para um programa no servidor e receber uma mensagem. Esse uxo de informao a base de todas as pginas web dinmicas.
e-Tec Brasil
40
Resumo
Nesta aula programamos nossa primeira pgina dinmica com recebimento e validao de dados. Tambm aprendemos a enviar um arquivo junto com os dados. Porm, nossas pginas ainda no esto completas. Falta salvar os dados para que eles no se percam. Para isso preciso acessar banco de dados a partir no PHP, que ser nossa prxima Aula.
Leituras complementares: SOARES, Walace. PHP 5: conceitos, programao e integrao com banco de dados. 3 ed. So Paulo: rica, 2007. GUTMANS, Andi; BAKKEN, Stig Saether; RETHANS, Derick. HP 5: programao ponderosa. Rio de Janeiro: Alta Books, 2005. MELO, Alexandre Altair de; NASCIMENTO, Maurcio G. F. PHP prossional. 2 ed. So Paulo: Novatec, 2007.
Atividade de aprendizagem
Acrescente no formulrio da Figura 2.2 mais um campo para fazer o upload de um arquivo do tipo PDF, como se fosse o envio do currculo da pessoa. Altere o programa da Figura 2.3 para receber esse arquivo, fazer as suas validaes (tipo e tamanho) e coloque um link para esse arquivo, com o nome da pessoa, para quando clicar no link, abrir o arquivo PDF.
41
e-Tec Brasil
43
e-Tec Brasil
Rel_01
Estados
sigla: CHAR(2) nome: VARCHAR(50)
O campo idClientes do tipo autoincremento. Os campos cinema, musica e info armazenam 1 se aquela opo foi marcada, e 0 caso contrrio.
e-Tec Brasil
44
mysql_connect abre a conexo de uma pgina em PHP com o banco de dados. Sua sintaxe : mysql_connect(servidor, usurio, senha) onde: servidor IP (ou hostname) a porta do servidor onde est o banco de dados, no formato servidor: porta. Se o banco de dados estiver no mesmo computador, pode usar localhost. Se a porta no for informada, ser utilizada a porta padro, que no MySQL a 3306. Usurio e senha cadastrados no banco de dados. Podem ocorrer alguns erros ao se tentar abrir a conexo. Os casos mais comuns so: no encontrar o servidor ou o usurio e a senha no terem permisso de acesso ao banco. Caso ocorra algum erro, o ideal seria mostrar uma mensagem de erro e interromper a execuo da pgina, j que sem a conexo no poderemos acessar o banco de dados. Para isso usaremos a funo die. die funo que exibe uma mensagem e interrompe a execuo da pgina. Sua sintaxe : die(mensagem) A mensagem pode ser concatenada com a funo mysql_error, que informa a mensagem original do erro. Exemplo: die(Erro ao conectar. . mysql_error() ); O ponto . serve para juntar as duas mensagens, ou seja, ele o operador que concatena strings. O die pode ser usado junto com outra funo. Se der erro nessa funo, o die chamado automaticamente. Utiliza-se o operador or para associar o die a alguma funo. O exemplo abaixo chama a funo mysql_connect; se der erro, automaticamente o die executado para mostrar a mensagem e interromper a execuo da pgina. mysql_connect(localhost,root,root) or die(Erro ao conectar. . mysql_error() );
45
e-Tec Brasil
Caso a abertura da conexo ocorra normalmente, o segundo passo escolher o nome do banco de dados que ser utilizado. Em um servidor de banco de dados podem existir vrios bancos. Usaremos para isso a funo mysql_select_db. mysql_select_db seleciona o banco a ser utilizado no servidor conectado anteriormente. Sua sintaxe : mysql_select_db(nome_banco) Exemplo: Selecionar o banco de dados criado anteriormente para os exemplos. mysql_select_db(ProgWebBD); O programa da Figura 3.2 mostra o exemplo de conexo com o nosso banco de dados de exemplo. O servidor de banco de dados MySQL est no servidor com IP 172.16.43.10, usurio root, senha root e o nome do banco criado foi ProgWebBD.
Cada pgina que necessitar acessar o banco de dados dever ter esses dois comandos no incio. Como um sistema web geralmente possui vrias pginas, replicar esses comandos no ser uma boa soluo. Caso tenha que mudar algum parmetro, como por exemplo o IP do servidor, todas as pgina sofrero modicaes. Um trabalho e tanto! Para evitar esse trabalho de manuteno, colocam-se os comandos de conexo com o banco em um nico arquivo e todas as pginas fazem acesso a esse arquivo utilizando o comando:
e-Tec Brasil
46
include ou include_once include insere pedaos de cdigos PHP de um determinado arquivo na pgina atual. include_once a diferena que este comando verica se o arquivo j foi inserido anteriormente, ou seja, insere somente uma nica vez. Sua sintaxe : include(nome_arquivo.php) ou include_once(nome_arquivo.php) Ento, o cdigo da Figura 3.2 car em um arquivo, por exemplo, conexaobd.php, e todas as outras pginas incluiro esse cdigo da seguinte forma: include_once(conexaobd.php) PRONTO!!! Uma vez conectado com o banco de dados, podemos realizar todas as operaes para manipulao dos dados: inserir, pesquisar, alterar e excluir. O que precisaremos saber para realizar essas operaes sobre a linguagem SQL. Uma conexo estabelecida com o comando mysql_connect encerrada, automaticamente, ao nal da execuo da pgina. Caso queira encerr-la antes disso, deve ser utilizado o comando mysql_close. mysql_close fecha a conexo com o banco de dados. Sua sintaxe : mysql_close(identicador) em que: identicador a varivel que indica a conexo criada. Se o identicador no for fornecido, a ltima conexo estabelecida ser encerrada.
47
e-Tec Brasil
mysql_query funo que executa um comando SQL no banco de dados MySQL. Retorna verdadeiro (true) em caso de sucesso e falso (false) caso contrrio. Sua sintaxe : mysql_query(comando, conexao) em que: comando o comando na linguagem SQL, como: INSERT, SELECT, UPDATE, DELETE, etc. conexo parmetro opcional que indica a conexo com o banco de dados. Se no for informada, utiliza a ltima conexo aberta. Portanto, para inserir os dados no banco, o comando em SQL que utilizado o INSERT. Para testarmos, vamos criar duas pginas: uma em HTML com o formulrio para digitar os dados e a outra em PHP, que ir receber os dados, vericar se esto corretos e depois inserir no banco. O formulrio conter os mesmos campos que a tabela Clientes do nosso banco de dados de teste da Figura 3.1. Esse formulrio ser o mesmo utilizado na Figura 2.2, da Aula 2, com a incluso de mais um campo para o login, chamado txtLogin. Esse formulrio enviar os dados para a pgina em PHP no servidor chamada cadclientebd.php (atributo action da tag <FORM>). O programa em PHP no servidor ser semelhante ao programa da Figura 2.3, da Aula 2. A diferena car por conta da incluso dos dados no banco, ao invs de mostrar os dados na pgina. Para isso, vamos criar uma varivel ($sql) que receber o comando INSERT com os dados do formulrio. Logo aps, essa varivel ser passada para o mysql_query. Na sintaxe do INSERT, a parte do VALUES em que passamos os valores para o banco de dados. nesse ponto que usaremos as variveis com os valores obtidos dos formulrios. A Figura 3.3 apresenta este comando:
e-Tec Brasil
48
Lembre-se que na linguagem SQL, os campos do tipo string e data devem estar entre aspas simples ( ). No exemplo acima, os campos $cinema, $musica e $info no esto entre aspas porque so do tipo inteiro. Logo em seguida chamaremos o comando em PHP para executar esse SQL no banco de dados. Esse comando o mysql_query e pode ser visto na Figura 3.4.
Figura 3.4: Exemplo de chamada para executar o comando SQL no MySQL
Fonte: Elaborada pelo autor
Os campos no banco de dados do tipo autonumerao (ou autoincremento) no devem ser passados para o comando INSERT. Verique que em nossa tabela de exemplo, o campo idClientes um campo autoincremento e ele no foi passado para o INSERT. Caso queira obter o ltimo nmero inserido de um campo autoincremento, utiliza-se a funo mysql_insert_id. mysql_insert_id retorna o ltimo nmero inserido de um campo do tipo autoincremento. Sua sintaxe : mysql_insert_id(conexao) em que: conexo um parmetro opcional que indica a conexo com o banco de dados. Se no for informada, utiliza a ltima conexo aberta. Em nosso exemplo, poderamos criar a varivel $cod para receber o cdigo do cliente inserido, conforme exemplo na Figura 3.5 a seguir.
Figura 3.5: Obtendo o ltimo cdigo autoincremento inserido
Fonte: Elaborada pelo autor
Os campos do formulrio do tipo checkbox enviam para a pgina PHP o valor true se estiverem marcados e (vazio) se no estiverem marcados. Portanto, antes de passar essa varivel para o comando INSERT, devemos substituir o (vazio) por zero, j que em nosso banco esses campos armazenam 0 ou 1. O valor true corresponde ao 1; portanto, no teria problema ao passar para o SQL.
49
e-Tec Brasil
Os comandos para substituir o (vazio) por zero pode ser visto na Figura 3.6:
Em seguida, concatenam-se os campos no formato desejado, no nosso caso ano-ms-dia, como mostrada na Figura 3.8 a seguir.
Figura 3.8: Concatenando a data no padro do MySQL: ano-ms-dia
Fonte: Elaborada pelo autor
e-Tec Brasil
50
Podemos tambm vericar se essa uma data vlida. Para isso, usa-se o comando checkdate. checkdate retorna verdadeiro (true) se a data vlida e falso (false) caso contrrio. Sua sintaxe : checkdate(mes, dia, ano) Para testar nossa data, o exemplo caria conforme Figura 3.9 a seguir.
O programa da Figura 3.10 mostra todo o cdigo da pgina cadclientebd.php, que recebe os dados do formulrio, verica se os campos esto corretos, converte e verica a data e depois insere no banco de dados.
51
e-Tec Brasil
Crie a tabela Produtos no banco de dados MySQL com os seguintes campos: idProduto inteiro autoincremento (chave primria) descrio varchar(100) preo oat qtdeEstoque inteiro dataValidade date Crie o formulrio para entrar com esses dados e a pgina em PHP para receber, validar e inserir os dados no banco de dados.
e-Tec Brasil
52
mysql_fetch_assoc retorna um registro de uma consulta e aponta para o prximo registro. Retorna false quando no existir mais registros, ou seja, quando chegar ao ltimo. Retorna o registro em forma de array, em que os ndices so os nomes das colunas da tabela no banco de dados. Sua sintaxe : mysql_fetch_assoc(identicador) em que: identicador o resultado do SELECT, ou seja, o conjunto de registros. Como o mysql_fetch_assoc retorna um registro por vez, e para quando chegar ao ltimo (false), podemos coloc-lo como condio de parada em um comando while, para percorrer todos os registros. O registro retornado a cada lao do while guardado em uma varivel do tipo array. Cada posio do array um campo da tabela. Para pegar o valor, usa-se como ndice do array o nome do campo denido na tabela do banco, desta forma: $variavel_registro[nome_campo] O nome do campo deve ser o mesmo usado no banco de dados. Letras maisculas so diferentes de minsculas. Para saber o total de registros retornados por uma consulta ao banco, usamos o comando mysql_num_rows. mysql_num_rows retorna a quantidade de registros da ltima consulta ao banco. Sua sintaxe : mysql_num_rows(identicador); em que: identicador o resultado do SELECT, ou seja, o conjunto de registros.
53
e-Tec Brasil
O programa da Figura 3.11 mostra o exemplo de uma pgina que consulta todos os dados da tabela Clientes, do nosso banco de dados de teste. Para cada registro obtido, uma linha de uma tabela em HTML criada para mostrar os resultados. Perceba que dentro do while cam apenas os comandos para criar uma linha da tabela (<TR>). Os comandos para abrir e fechar a tabela cam antes e depois do while, respectivamente (<TABLE> e </TABLE>). A primeira linha da tabela, com os nomes dos campos, tambm ca fora do while, porque no pode ser repetida.
e-Tec Brasil
54
Como exemplo, vamos mostrar como preencher o combobox do campo listEstado do nosso formulrio da Figura 2.2, da Aula 2. Naquele formulrio, as opes foram denidas no prprio cdigo HTML. Vamos agora ler os estados a partir do nosso banco de dados. Utilizaremos o programa da Figura 3.11 dentro do formulrio da Figura 2.2, da Aula 2, na regio onde montado o combobox listEstados. Nosso SELECT ser na tabela Estados (veja Figura 3.1). Dentro do while vamos colocar os comandos para criar as opes do combobox, que o <OPTION>. Para cada registro da tabela ser criado um comando <OPTION>, mostrando o nome do estado. Para o atributo value, ser usada a sigla do estado. Quando o usurio escolhe uma opo de um combobox, apenas o atributo value enviado para o servidor; em nosso caso, somente a sigla do estado ser enviada. A Figura 3.12 mostra o trecho de programa alterado do formulrio para cadastro.
Toda pgina que contiver cdigos em PHP deve ter a extenso .PHP. Portanto, o formulrio de cadastro de clientes que antes era apenas HTML, deve ser renomeado para a extenso PHP. Antes de testar, voc deve preencher a tabela Estados com algumas informaes. Com o conhecimento adquirido at agora, voc capaz de criar sites que armazenam dados em um banco de dados. Voc tambm tem a capacidade de recuperar as informaes do banco de dados e mostr-las para o usurio. A grande maioria dos sites utiliza algum banco de dados para manipular as informaes. Vimos um exemplo com o banco de dados MySQL, mas voc pode trabalhar com qualquer banco de dados.
55
e-Tec Brasil
Essa a base de toda a interao de pginas web com o banco de dados. Portanto, pratique! Teste os exemplos apresentados e faa os exerccios propostos. A prxima aula depender muito destes conceitos. Somente passe para a prxima aula quando no existir mais nenhuma dvida.
Resumo
Leituras complementares DAVIS, Michele E.; PHILLIPS, Jon A. Aprendendo PHP e MySQL. Rio de Janeiro: Alta Books, 2008. MILANI, Andr. Construindo aplicaes web com PHP e MySQL. So Paulo: Novatec, 2010. NIEDERAUER, Juliano. Desenvolvendo websites com PHP. 2 ed. So Paulo: Novatec, 2004. WELLING, Luke; THOMSON, Laura. PHP e MySQL: desenvolvimento web. 3 ed. Rio de Janeiro: Elsevier, 2005.
Nesta aula aprendemos a conectar com o banco de dados e a realizar as operaes para inserir e listar dados. Para realizar essas operaes, vimos exemplos de pginas web dinmicas com os comandos PHP. Na prxima aula continuaremos trabalhando com bancos de dados. Aprenderemos a alterar e excluir dados do banco.
Atividades de aprendizagem
1. Crie uma pgina em PHP para listar todos os produtos da tabela criada na terceira Atividade de aprendizagem ( Atividade 3.1) desta aula. 2. Crie a tabela Vendas no banco de dados MySQL com os seguintes campos: idVenda inteiro autoincremento (chave primria) idCliente chave estrangeira da tabela Clientes idProduto chave estrangeira da tabela Produtos qtdeVendida inteiro preoTotal oat dataVenda date formaPagto inteiro (pode ser chave estrangeira de outra tabela com as formas de pagamento) Crie o formulrio para entrar com os dados de uma venda. Preencha um combobox com todos os clientes cadastrados e outro com os produtos. Lembre-se de colocar no atributo value o id do cliente e do produto. Os demais campos sero do tipo texto. Se a forma de pagamento estiver em uma tabela separada, coloque um combobox para ela tambm. Depois crie uma pgina em PHP para receber os dados do formulrio e inserir na tabela Vendas
e-Tec Brasil
56
57
e-Tec Brasil
Como exemplo, nosso formulrio ter um combobox para escolher o tipo de consulta, chamado comboTipo. As opes sero por nome ou por ms de aniversrio. Ter tambm um campo para digitarmos o valor que queremos pesquisar, chamado txtPesquisa. Ao enviar os dados, esse formulrio chamar a mesma pgina, para que o PHP possa exibir os dados da pesquisa. Portanto o atributo action do <FORM> apontar para o mesmo arquivo. O programa da Figura 4.1 mostra essa pgina, que chamaremos de pesqclientes.php.
Quando o usurio clicar no boto Enviar, os dados para pesquisar sero enviados para a mesma pgina, que agora executar o PHP na parte de baixo e mostrar o mesmo formulrio, mais a tabela de resposta. Porm, na primeira vez que chamarmos essa pgina, o PHP no pode ser executado. Ele somente ser executado da segunda vez em diante, ou seja, quando ele receber os dados para a pesquisa. Para distinguir quando uma pgina est recebendo uma informao ou no, usaremos o comando isset. isset retorna verdadeiro (true) se uma certa varivel j foi declarada, e falso (false), em caso contrrio. Sua sintaxe : isset(variavel) Na primeira vez que a pgina chamada, no temos nenhuma varivel. Na segunda vez em diante, a pgina recebe as variveis comboTipo e txtPesquisa do formulrio (via mtodo POST ou GET). Podemos utilizar qualquer uma dessas duas variveis para testar quando o PHP ser executado. Dentro do PHP, obtm-se o tipo de pesquisa que ser feita, por nome ou por ms (comboTipo), e monta-se o SQL correspondente com o valor digitado em txtPesquisa. O resultado mostrado em forma de tabela. O programa da Figura 4.2 mostra o cdigo completo da pgina de pesquisa pesqclientes.php.
e-Tec Brasil
58
Quando a pesquisa com um campo do tipo string, como o nome do exemplo anterior, usa-se a palavra LIKE no lugar da igualdade, dentro da clusula WHERE do SELECT. O smbolo % dentro do valor a ser pesquisado serve como curinga. Signica que pode vir qualquer caracter naquela posio. O exemplo anterior busca no banco de dados qualquer cliente que comea com o valor digitado pelo usurio. O que muda de uma pesquisa para outra so os campos e as tabelas do banco de dados, como, por exemplo, pesquisar produtos, vendas, locaes, reservas, etc. Portanto, as modicaes no cdigo para realizar outro tipo de pesquisa seriam alterar o SELECT e a forma de exibir os dados. Crie uma pgina em PHP para pesquisar os produtos da tabela criada na Atividade de aprendizagem da aula 3. Voc deve permitir pesquisar pela descrio, cdigo e data de validade.
59
e-Tec Brasil
60
Altere e execute a pgina pesqclientes.php, para colocar o link para o excluir cliente, como mostrado acima. Ao passar o mouse em cima da imagem do excluir, mas sem clicar, olhe na barra de status, na parte de baixo do navegador, o link de cada imagem. Perceba que o que muda de um para o outro o cdigo do cliente. A pgina excluircliente.php ser a responsvel por executar o comando SQL no banco de dados. Essa pgina recebe o cdigo passado via GET, pelo link da imagem excluir, e executa o comando DELETE no banco, com a clusula WHERE informando o id do cliente que ser excludo. Ao nal, a pgina redirecionada novamente para a pgina de pesquisa (voc poderia redirecionar para qualquer outra pgina do seu sistema). O programa da Figura 4.5 mostra o cdigo PHP completo dessa pgina.
61
e-Tec Brasil
e-Tec Brasil
62
Formulrio
POST GET (cdigo)
UPDATE
Pesquisar
GET (mensagem)
Banco de Dados
Figura 4.7: Comando com o link no campo nome para chamar o alterar
Fonte: Elaborada pelo autor
63
e-Tec Brasil
strtotime converte uma data no formato string para o formato timestamp (usado pelo PHP). Sua sintaxe : strtotime(string_data) date converte uma data no formato timestamp para algum formato em string. Sua sintaxe : date(formato, timestamp) Portanto, para converter de Y-m-d para d/m/Y usaremos os seguintes comandos: $varData = date(d/m/Y, strtotime($varData)); Em que: $varData a data no formato Y-m-d. Em cada campo do formulrio colocaremos a varivel PHP, correspondente ao dado obtido do banco. Como temos campos de tipos diferentes, cada um ter uma forma diferente de preencher os dados. Em todas elas, alternaremos entre cdigos HTML e PHP. a) Campos do tipo text Coloca o atributo value e, entre aspas duplas, abre o PHP e pega a varivel correspondente com o echo. Veja a Figura 4.8 desta forma:
A expresso <?php echo $nome; ?> abre o cdigo em PHP, pega a varivel $nome com o dado obtido do banco e coloca no atributo value do campo do formulrio. Todo o cdigo PHP deve car dentro das aspas duplas do atributo value. b) Campos do tipo textarea O contedo desse campo ca entre as tags <TEXTAREA> e </TEXTAREA>. Ento, colocaremos o cdigo PHP com o valor a ser preenchido entre essas tags. Segue o exemplo na Figura 4.9 para o campo endereo.
e-Tec Brasil
64
c) Campos do tipo radio e checkbox Coloca-se a palavra checked na opo que car marcada. Portanto, necessrio testar com o comando if qual ser essa opo. O exemplo na Figura 4.10 com o campo sexo caria assim:
d) Campos do tipo combobox (<SELECT>) Nesses campos, a opo marcada recebe o atributo selected. Ento, uma das solues seria semelhante a dos campos do tipo radio. Testa com o if e coloca o atributo selected na opo correspondente. Porm, muitas vezes, as opes de uma caixa de seleo so obtidas do banco de dados. Nesse caso, no PHP que obtm as opes do banco, coloca-se o if para testar qual opo ser a selecionada. Se for a que queremos que que marcada, ento o comando <OPTION> ca com o atributo selected, como o exemplo na Figura 4.11, com o campo que lista os estados.
A varivel $estado obtida da tabela de Clientes, ou seja, o estado que dever car marcado. A varivel $sigla obtida de cada registro da tabela com todos os estados. A partir do formulrio preenchido, o usurio poder alterar os dados que lhe convm. Ao clicar no boto para enviar os dados, o formulrio enviar as novas informaes para a pgina alterarclibd.php, que realizar o UPDATE
65
e-Tec Brasil
no banco. Portanto, a declarao do formulrio (<FORM>) car como no exemplo na Figura 4.12 a seguir.
O valor da chave primria de uma tabela no pode ser alterado, porque pode causar inconsistncia nos dados. Porm, ela fundamental para o processo de alterar, porque ser por meio dela que o sistema identicar o registro a ser alterado. Em nosso exemplo, a chave primria o cdigo do cliente. Ento colocaremos um campo no formulrio para esse cdigo. Para que o usurio no possa alterar esse valor, esse campo car oculto. Para criar um campo oculto, basta usar o atributo type com o valor hidden, como no exemplo na Figura 4.13 a seguir.
e) Mensagem de erro Os dados sero enviados para a pgina PHP que atualizar o banco de dados. Para saber se ocorreu erro ou no, redirecionaremos para a pgina com o formulrio novamente, informando a mensagem de erro ou sucesso. Essa mensagem ser enviada via o mtodo GET, com o nome mensagem. Ento, em nossa pgina com o formulrio, colocaremos o cdigo PHP abaixo para pegar a mensagem, caso tenha, e exibir junto com os dados. A Figura 4.14 mostra esta programao.
e-Tec Brasil
66
67
e-Tec Brasil
e-Tec Brasil
68
Aps realizar uma alterao no banco de dados, como por exemplo, com o comando UPDATE, possvel obter quantos registros foram alterados. Para isso basta utilizar a funo mysql_affected_rows. mysql_affected_rows retorna a quantidade de registros que foram afetados por um comando SQL, como por exemplo o UPDATE. Sua sintaxe : mysql_affected_rows(conexao) em que: conexo um parmetro opcional que indica a conexo com o banco de dados. Se no for informado, utiliza a ltima conexo aberta. Com isso, conclumos o assunto sobre banco de dados. Vimos que o processo de acesso e manipulao de dados independe da operao a ser feita. O que dene a operao que faremos com o banco de dados o comando em SQL, como o INSERT, SELECT, UPDATE, DELETE e outros mais. Pronto! Agora voc capaz de criar um site completo, armazenando e recuperando dados do banco de dados.
69
e-Tec Brasil
Resumo
Nesta aula aprendemos a realizar uma consulta ltrando por determinado campo, a excluir e a alterar um registro no banco de dados a partir de pginas web em PHP. Na prxima aula aprenderemos a trabalhar com sesses, o que nos permitir, por exemplo, implementar a validao de usurio no sistema, bem como trocar dados entre as pginas de uma sesso. Encontra-se a seguir a Tabela 4.1 com o resumo dos comandos aprendidos at agora para manipulao do PHP com o banco de dados MySQL.
Tabela 4.1: Resumo dos principais comandos
FUNO DESCRIO PARMETROS
Abre a conexo com o banco de dados. Seleciona o banco a ser utilizado. Fecha a conexo com o banco de dados. Funo que executa um comando SQL no banco de dados MySQL. Retorna verdadeiro (true) em caso de sucesso e falso (false) caso contrrio. Retorna o ltimo nmero inserido de um campo do tipo autoincremento Retorna um registro de uma consulta, em forma de array, e aponta para o prximo registro. Retorna false quando chegar ao ltimo. Retorna a quantidade de registros da ltima consulta ao banco. Retorna a quantidade de registros que foram afetados por um comando SQL. Retorna uma mensagem caso ocorra algum erro no acesso ao banco de dados Retorna verdadeiro (true) se uma certa varivel j foi declarada, e falso (false), em caso contrrio Insere pedaos de cdigos PHP de um determinado arquivo na pgina atual Funo que exibe uma mensagem e interrompe a execuo da pgina. Retorna uma parte de uma string
IP do servidor onde est o banco de dados. Usurio e senha com permisso de acesso ao banco de dados. Nome do banco. Conexo criada anteriormente.
mysql_query
mysql_insert_id
Parmetro opcional que indica a conexo com o banco de dados. Conjunto de registros resultante de uma consulta. Conjunto de registros resultante de uma consulta. Parmetro opcional que indica a conexo.
mysql_fetch_assoc
mysql_num_rows mysql_affected_rows
mysql_error
isset
include e include_once
Nome do arquivo PHP. Mensagem a ser exibida. String original. Posio inicial. Tamanho da substring. continua
die
substr
e-Tec Brasil
70
checkdate strtotime
Retorna verdadeiro (true) se a data vlida, e falso (false), em caso contrrio Converte uma data no formato string para o formato timestamp. Converte uma data no formato timestamp para algum formato em string.
Ms, dia e ano. Data no formato string (padro americano: Y-m-d). Formato nal da data. Data original do tipo timestamp. concluso
date
Atividades de aprendizagem
1. Crie uma pgina em PHP para pesquisar as vendas da tabela criada na segunda atividade dentre as Atividades de aprendizagem propostas ao nal da Aula 3. Voc deve permitir pesquisar todas as vendas de um determinado cliente e todas as vendas de um determinado produto. Obs.:Como na tabela Vendas tem apenas o cdigo do cliente e do produto, ser necessrio pesquisar pelo nome usando as tabelas Clientes e Produtos, ou seja, no SELECT ser preciso juntar (JOIN) a tabela Vendas com as tabelas Clientes e Produtos, de acordo com o tipo da pesquisa. Veja a apostila da disciplina de Bancos de Dados sobre como realizar a pesquisa unindo mais de uma tabela. 2. Implemente uma pgina para excluir os produtos da tabela criada na terceira Atividade de aprendizagem da Aula 3. Altere a pgina do pesquisar produtos, criada na primeira Atividade de aprendizagem desta Aula, e implemente o PHP para excluir o produto do banco. 3. Implemente as pginas para alterar os dados do cliente, como mostrada acima e teste. 4. Faa o mesmo procedimento para alterar os dados dos produtos. Altere a pgina do pesquisar produtos, criada na primeira Atividade de aprendizagem desta Aula, para colocar o link para a pgina de formulrio com os dados do produto preenchidos. Implemente o PHP para atualizar o banco.
Leituras complementares: DAVIS, Michele E.; PHILLIPS, Jon A. Aprendendo PHP e MySQL. Rio de Janeiro: Alta Books, 2008. MILANI, Andr. Construindo aplicaes web com PHP e MySQL. So Paulo: Novatec, 2010. NIEDERAUER, Juliano. Desenvolvendo websites com PHP. 2 ed. So Paulo: Novatec, 2004. WELLING, Luke; THOMSON, Laura.PHP e MySQL: desenvolvimento web. 3 ed. Rio de Janeiro: Elsevier, 2005.
71
e-Tec Brasil
Esta Aula voltada para o gerenciamento de sesses em sistemas web. O uso de sesses permitir que informaes sejam trocadas entre pginas web de uma mesma sesso. Com isso, ser possvel fazer a validao do usurio em uma pgina e vericar em todas as outras se o usurio foi autenticado ou no. E ainda mais, de posse do tipo do usurio (administrador, gerente, caixa, operador, etc.), possvel fazer controle de acesso, programando em cada pgina os tipos de usurios que podem acess-las. A cada pgina visitada por um usurio, uma nova conexo criada pelo HTTP do navegador ao servidor. As informaes da conexo anterior no so mantidas. Entretanto, em diversas situaes desejvel que certas informaes sejam armazenadas temporariamente, entre uma pgina e outra. Como exemplo, pode-se citar a autenticao de login, que feita em uma pgina e em todas as outras necessrio vericar se o usurio est logado, alm de permitir obter os dados desse usurio em todas as pginas. Para testar o uso de sesses, vamos utilizar o login e senha cadastrados na tabela de Clientes, como o modelo de dados da Figura 3.1, da Aula 3. Outro exemplo o carrinho de compras. Enquanto o usurio visita vrias pginas, o carrinho de compras armazena os produtos comprados.
Sesso Uma sesso basicamente um meio de mantermos dados durante a navegao por vrias pginas de um site. Quando uma sesso aberta, ela recebe um identicador nico, o que permite ao PHP recuperar os dados vinculados quela sesso.
73
e-Tec Brasil
O procedimento para acessar uma varivel j presente no <IT>array<IT> $_ SESSION o mesmo. Em nosso exemplo acima, poderamos obter o nome e o login do usurio em qualquer pgina. Para eliminar uma varivel de uma sesso, utiliza-se o comando: unset($_SESSION[nome_da_varivel])
e-Tec Brasil
74
75
e-Tec Brasil
Formulrio Login
POST
Pesquisa Principal
Banco de Dados
No formulrio de login, vamos colocar o cdigo PHP para exibir a mensagem de erro, caso ocorra. A mensagem car acima dos campos. Voc pode colocar a mensagem em outro local, caso deseje. O programa da Figura 5.4 mostra o cdigo do formulrio formlogin.php e o programa da Figura 5.5 mostra o PHP login.php.
e-Tec Brasil
76
A pgina principal o ponto de entrada do seu sistema. Crie essa pgina com links para todas as operaes que implementamos, como cadastrar e pesquisar cliente, cadastrar e pesquisar produtos, cadastrar e pesquisar vendas, e assim por diante.
77
e-Tec Brasil
Em todas as pginas do seu sistema, basta incluir o validar.php no incio, antes de qualquer coisa, e da seguinte forma, conforme Figura 5.7.
Resumo
Nesta aula, voc viu tudo o que precisava para criar sistemas web com acesso a banco de dados e autenticao de usurios. Porm a programao que zemos misturou vrias linguagens em um nico arquivo. Na prxima aula, veremos uma metodologia para organizar melhor os arquivos, separando a programao da parte visual (HTML e CSS), regras do negcio (PHP) e manipulao do banco de dados (SQL). A seguir, voc encontra na Tabela 5.1 os principais comandos para trabalhar com sesses.
Tabela 5.1: Principais comandos para trabalhar com sesses
FUNO session_start session_destroy $_SESSION unset session_unset Destri a sesso. Array com os dados compartilhados pela sesso. Elimina UMA varivel da sesso. Eliminam TODAS as variveis da sesso. Nome da varivel entre colchetes. Nome da varivel da sesso. DESCRIO Cria uma nova sesso ou acessa uma j criada. PARMETROS
Atividades de aprendizagem
Implemente o processo de autenticao do usurio para todas as pginas do seu sistema, como mostrado acima. Crie a pgina principal com os links para todas as suas operaes e para a operao sair (logout). Tente acessar diretamente uma pgina, sem se logar, para ver o que acontece.
e-Tec Brasil
78
Chegamos nossa ltima aula de nossa disciplina. Esta Aula voltada, principalmente, para aqueles que iro trabalhar com desenvolvimento de sistemas, seja web ou no. Vamos aprender a organizar melhor o cdigo para que o processo de desenvolvimento seja produtivo, com melhor qualidade e com menos erros. E caso tenha erros, que sejam de fcil correo. Para isso, vamos aprender uma metodologia que separa o sistema em camadas, o MVC.
Controller O controller (controlador) responsvel por transformar eventos gerados pela interface em ao de negcios.
6.1.1 Vantagens
Como o modelo MVC gerencia mltiplos visualizadores usando o mesmo modelo, fcil manter, testar e atualizar sistemas mltiplos. Como a parte visual separada do modelo de negcio, possvel alterar a parte visual sem alterar o sistema todo. muito simples adicionar novas funcionalidades apenas incluindo seus visualizadores e controles sem alterar o que j foi feito, tornando a aplicao
79
e-Tec Brasil
escalvel. possvel ter desenvolvimento em paralelo para o modelo, visualizador e controle, pois so independentes, ganhando em produtividade. Dentre as principais vantagens podemos destacar: reaproveitamento de cdigo; facilidade de manuteno; integrao de equipes e/ou diviso de tarefas; camada de persistncia independente; implementao de segurana; facilidade na alterao da interface da aplicao; aplicao escalvel.
6.1.2 Desvantagens
As vantagens superam em muito as desvantagens, mas mesmo assim podemos citar alguns pontos desfavorveis: requer uma quantidade maior de tempo para analisar e modelar o sistema; requer pessoal especializado; no aconselhvel para pequenas aplicaes.
e-Tec Brasil
80
o controlador seleciona uma visualizao a ser exibida como parte da resposta solicitao do usurio. H, normalmente, um controlador para cada conjunto de funcionalidades relacionadas.
VISO (Navegador)
Figura 6.1: Estrutura do MVC
Fonte: Equipe produo CEAD/IFES (2011)
CONTROLADOR
81
e-Tec Brasil
Se for usar outro banco de dados, basta implementar outra camada, alterando o cdigo dentro de cada funo. Por exemplo, se o banco fosse o PostgreSQL, as funes seriam: pq_connect, pg_select_bd, pg_query, etc.
e-Tec Brasil
82
A camada do modelo de negcio no gera nenhum comando em HTML. O retorno, sucesso ou fracasso retornado para o controlador que ser responsvel por montar a pgina de resposta. O programa da Figura 6.3 mostra como caro as operaes com os clientes. o mesmo cdigo j visto, porm em nova arquitetura. Perceba que quando for necessrio acessar o banco de dados, as funes chamadas sero as da camada de persistncia do programa da Figura 6.2.
83
e-Tec Brasil
A funo validarCampos foi separada porque repetida no incluir e alterar, que caram mais simples e muito parecidas. Todas as funes seguem o mesmo padro: validar os campos, criar a conexo com o banco de dados e chamar a funo da camada de persistncia.
6.3.3 Controlador
O controlador ser apenas um arquivo PHP. Ele receber da interface visual o cdigo da operao e os dados, e chamar a funo correspondente da camada do modelo, retornando a mensagem de erro ou sucesso para a pgina que originou a requisio. Todas as pginas de interface visual devero ter um campo que informa qual operao o controlador chamar. Em nossos exemplos, esse campo ser chamado de operao. As possveis operaes sero todas aquelas da camada do modelo, por exemplo, as funes do arquivo clientes.php do programa da Figura 6.3: incluirCliente, alterarCliente, excluirCliente, etc. O inserir e alterar enviam os dados para o servidor com o mtodo POST e o excluir envia com o mtodo GET. Para padronizar o controlador, vamos adotar o mtodo GET. Portanto, os formulrios devero ser alterados. O programa da Figura 6.4 mostra um exemplo da estrutura do controlador.
e-Tec Brasil
84
85
e-Tec Brasil
A segunda mudana, conforme j mencionado, colocar um campo escondido para indicar ao controlador qual a operao ele far. Como exemplo, chamaremos esse campo de operao. O valor a ser passado (atributo value) dever ser o mesmo valor com o qual o controlador far a comparao. Cada operao dever ter um valor diferente. Por exemplo: incluirCliente, alterarCliente, excluirCliente, etc., conforme a Figura 6.6.
A terceira mudana, conforme j mencionado, colocar em algum lugar da sua pgina a mensagem de resposta, caso tenha, de sucesso ou falha da operao. Essa mensagem ser enviada do controlador para a pgina, usando o mtodo GET. Em nosso exemplo, veja o controlador, o nome do campo foi chamado de mensagem. O cdigo em PHP a ser inserido ser como o apresentado na Figura 6.7 a seguir.
e-Tec Brasil
86
Pginas SEM formulrio para as pginas que no possuem formulrio, apenas links para outras pginas, enviando os campos via mtodo GET, as mudanas sero apenas alterar o link para o controlador e adicionar o campo que corresponde operao. Em nosso exemplo, a nica mudana ser no link do excluir da pgina de pesquisa pesqclientes.php (veja a Figura 6.8).
As operaes de consulta ao banco tambm podem ser colocadas no controlador, porm o processo mais complicado, requer um estudo mais aprofundado do MVC. Por enquanto deixe da forma que se encontra, dentro de pginas da camada da viso. Para quem for trabalhar com desenvolvimento de sistemas web, ser muito importante apronfudar-se mais nessa metodologia. Perceba que antes, a cada pgina de formulrio, tnhamos uma pgina em PHP para realizar aquela operao. Em um sistema maior, a quantidade de arquivos para organizar seria muito grande. Com o MVC, continuamos com as pginas da interface grca, porm as pginas em PHP no servidor caram bastante reduzidas. Temos o controlador, o arquivo de persitncia e arquivos nos quais podemos agrupar as funes de cada elemento do sistema. Por exemplo, todas as operaes referentes a produto cariam em um arquivo, as operaes referentes a vendas em outro arquivo, e assim por diante.
Resumo
Nesta Aula, conhecemos o padro de desenvolvimento de sistemas web MVC. Vimos como organizar melhor o cdigo para que o processo de desenvolvimento seja mais produtivo, com melhor qualidade e com menos erros. Aprendemos a separar a programao da parte visual (HTML e CSS), regras do negcio (PHP) e manipulao do banco de dados (SQL). No m, alteramos uma parte do nosso sistema web de exemplo para o padro MVC. Caro estudante, chegamos ao nal desta disciplina. Espero que voc tenha gostado e que seja capaz de desenvolver sistemas web. Diverti-me criando
Aprender mais sobre MVC muito importante caso voc pretenda trabalhar com programao web. Seguem alguns links: http://www.dsc.ufcg.edu. br/~jacques/cursos/map/html/ arqu/mvc/mvc.htm http://codeigniterbrasil.com/ passos-iniciais/mvc-modelview-controller/ http://www.tiagolemos.com. br/2009/07/10/o-que-e-o-mvcmodel-view-controller/ http://msdn.microsoft.com/enus/library/ms978748.aspx.
87
e-Tec Brasil
essas pginas e tambm aprendi um pouquinho mais sobre PHP. Mas isso no tudo! Temos muito mais recursos em PHP que no daria tempo de estudar nesta disciplina. Caso voc se interesse, veja as referncias no nal de cada aula e na seo Referncias.
Atividades de aprendizagem
1. Faa as alteraes do seu sistema para o MVC. Comece com as operaes sobre os clientes, como descrito acima. 2. Acrescente no MVC as operaes com os produtos. Comece criando o arquivo com as funes referentes a produtos. Depois altere o controlador para fazer a ligao das pginas visuais com essas funes. 3. Acrescente no MVC as operaes de login. No controlador teremos mais um else if para a validao do login e senha e criao da sesso. Nas demais pginas, coloque o PHP para vericar se a sesso foi criada, como na Aula 5.
e-Tec Brasil
88
Referncias
DAVIS, Michele E.; PHILLIPS, Jon A. Aprendendo PHP e MySQL. Rio de Janeiro: Alta Books, 2008. SOARES, Walace. PHP 5: conceitos, programao e integrao com banco de dados. 3 ed. So Paulo: rica, 2007. GUTMANS, Andi; BAKKEN, Stig Saether; RETHANS, Derick. PHP 5: programao ponderosa. Rio de Janeiro: Alta Books, 2005. MELO, Alexandre Altair de; NASCIMENTO, Maurcio G. F. PHP prossional. 2 ed. So Paulo: Novatec, 2007. MILANI, Andr. Construindo aplicaes web com PHP e MySQL. So Paulo: Novatec, 2010. NIEDERAUER, Juliano. Desenvolvendo websites com PHP. 2 ed. So Paulo: Novatec, 2004. WELLING, Luke; THOMSON, Laura. PHP e MySQL: desenvolvimento web. 3. ed. Rio de Janeiro: Elsevier, 2005.
Referncias
89
e-Tec Brasil
Currculo do professor-autor
Graduado em Cincia da Computao pela Universidade Federal de Viosa-MG (1997) e mestre em Engenharia de Produo/Pesquisa Operacional pela UFRJ/ COPPE (2000). Trabalhou trs anos como Analista de Sistemas e lder de projeto pela DBA Engenharia de Sistemas prestando servios de desenvolvimento de sistemas para a Caixa Econmica Federal, no Rio de Janeiro. Foi professor do Curso de Cincia da Computao da Faculdade de Aracruz (FACHA, hoje FAACZ) de 2002 a 2007. professor efetivo do Instituto Federal do Esprito Santo (IFES) desde 2006, lecionando disciplinas para os cursos: Tcnico em Informtica, Superior de Tecnologia em Redes de Computadores e Sistemas de Informao, onde atua como coordenador. Na EaD, trabalha desde 2008 como professor-autor-formador e tutor a distncia nos cursos do IFES: Tecnlogo em Anlise e Desenvolvimento de Sistemas e Tcnico em Informtica. Para mais informaes, veja o currculo completo na Plataforma Lattes:
http://lattes.cnpq.br/4033155608776526
e-Tec Brasil
90