Desenvolvimento de Aplicaes PHP

  • Published on
    25-Jul-2016

  • View
    221

  • Download
    1

DESCRIPTION

A linguagem PHP uma tecnologia open source que permite criar contedos dinmicos para a Web. Esta obra no pretende ser um guia exaustivo sobre funes, operaes e bibliotecas disponveis em PHP, mas antes uma obra com um cariz eminentemente prtico, que aborda a linguagem PHP sobre esse ponto de vista. O seu principal objetivo transmitir ao leitor as tcnicas e os mtodos essenciais para que facilmente compreenda esta linguagem. Este livro constitui-se como uma ferramenta til para aprender ou consolidar conhecimentos no desenvolvimento de aplicaes, recorrendo a diversos exemplos prticos, tais como: Registo, Autenticao e Gesto de Utilizadores; Calendrio Online; Grficos Dinmicos; Loja Virtual; lbum de Fotos, etc. No final apresentado um captulo que engloba todos os conhecimentos adquiridos ao longo da obra e que tem por base o desenvolvimento de um site de uma livraria online.

Transcript

  • 3

    Iniciando o PHP e o MySQL

    FCAEditoradeInformtica 45

    Tomesecomoexemploabasededadosdeumalivraria,quecontminformaessobreoslivrosdisponveis,autoresevendas,emqueoelementocentraldestabasededadosseroosprprioslivros.Nestecaso,podiamserutilizadastrstabelas,comaestruturaqueaFigura3.3mostra.

    TabelasdabasededadoslivrariaFIGURA3.3

    Quando secriam tabelasembasesdedados, fundamentalquehajaumcampoqueidentifique inequivocamente cada um dos registos. Por exemplo, no caso de umalivraria,poderiautilizarseoISBN1comonmeroidentificativodecadalivromas,paraocaso dos autores, teria de se utilizar um outro cdigo, que pode ser atribudo peloprpriosistemainformtico,aquandodoregistodeumnovoautor.Istofeitoinserindoumnovocampode identificao,queaumentade1em1,decadavezquefeitoumnovoregisto,sejalivro,autorouvenda.Aestenovocampodseonomedechaveprimria,umavezqueestachavequeidentificaoregistodatabela.Osoutroscamposdatabelapodemfuncionarcomochavesestrangeiras,umavezquepodemassumirsecomochaveprimrianoutratabeladiferente.Nalgunsprogramas,assumidoautomaticamenteoprimeirocampodatabelacomosendoachaveprimria;noutros, aparece identificado o campo com o smbolo de uma chave. Entre a chaveprimriaeachaveestrangeirapodeserestabelecidaumarelao.Arelaoentreachaveprimriaeachaveestrangeiramuito importanteparaquemtrabalhaembasesdedados,poispermiteobterosvaloresdeumadeterminadatabeladeformaquaseautomtica,atravsdarelaoestabelecidaentreambas. 1 ISBNasigladeInternationalStandardBookNumbernmeroqueidentificacadalivrodeformanica,sendoutilizadoemlivrosepublicaesnoperidicas.

  • 5

    Desenvolvimento de Aplicaes em PHP

    FCAEditoradeInformtica112

    5.3.3. Funes de data e hora

    Em linguagem PHP, existem funes que permitem trabalhar com datas, sendo degrandeutilidadequandosepretendeconstruirumcalendrio.Asfunesquepermitemtrabalharcomdatasehorassovrias,entreasquaissedestacam: date()Permiteformatarumadataouhora; getdate()Retornaainformaosobreumadataouhora; checkdate()Permiteobterinformaosobreadataouhora; time()Devolveotimestampemutilizao; mktime()Permiteobterumtimestampparaumadataouhoraespecfica.Afunodate()podeincluirdiferentesargumentosquemostraroadataouhoranumdeterminadoformato.Osargumentosdestafunonoquedizrespeitoadataspodemcorresponderainformaosobredias,meses,anosoudatascompletas,mastodoselessodevolvidosemingls,peloquenecessrioconverterparaportugus.Afunodate()utilizadaquandosepretendetrabalharcomdatas(Tabela5.2).

    Argumento ResultadoD Devolveomsdoano,emformatodetextod Devolveodiadoms,comdoisdgitos(porexemplo,02ou

    31)N Devolvecadadiaemformatonumrico (ISO8601),sendo

    onmero1asegundafeiran Devolve cadams em formatonumrico, sem zeros (por

    exemplo,janeiro=1;dezembro=12)y Devolveoanocomapenasdoisdgitos(porexemplo,98ou

    12)Y Devolve oanocomquatrodgitos (porexemplo,1998ou

    2012)F Devolve o ms por extenso (por exemplo, January,

    February)TABELA5.2Argumentosdafunodate()paradatas

    Nocasoemquesepretendeobteronomedosmesesoudiasporextenso,ecomooresultado devolvido em ingls, necessrio criar uma instruo que os faacorresponderaosrespetivosnomesdosmeses/diasemportugus,oqueconseguidoatravs de um switch/case. Esta situao ser objeto de tratamento ao longo dacriaodocalendrioeseraplicadasemprequeserevelenecessrio.

  • 5

    Desenvolvimento de Aplicaes em PHP

    FCAEditoradeInformtica134

    5.5. Utilizao de Javascript no calendrio online

    A linguagem Javascript de grande aplicabilidade em pginas Web pois permiteexecutaroperaesdoladodocliente.Porexemplo,quandosepretendeverificarseumformulriofoitotalmentepreenchido,nonecessrioexecutarumaoperaodoladodo servidor,uma vez que o formulrio est do lado do cliente e pode ser verificadoantes do processamento. Outro exemplo ocorre quando se pretende inserir umahiperligaoquevoltepginaquefoivisualizadaanteriormente,oquepodeserfeitorecorrendoinstruojavascript:history.back();.

    5.5.1. Janela de aviso

    Um exemplo de utilizao de Javascript em pginas Web poderia ser dado com autilizao de uma janela de aviso para o utilizador. As janelas de aviso podem serincludassemprequesepretendaavisaroutilizadordealgoqueocorrenaaplicaoe,nocasodocalendrio,estasiroaparecerquandooutilizador,porengano,colocarumahoradeinciodoeventoquesejasuperiorhoradefimdoevento.Paraque surjauma janeladeaviso, recorrese instruoalert(),onde se incluioalertaquesepretendadaraoutilizador: alert('A hora de fim no pode ser inferior hora de incio! Clique para continuar...'); window.location.href='calendario.php'; Destaforma,outilizadoravisadosobreoproblemaemcausa(Figura5.9).

    JaneladeavisocomJavascriptFIGURA5.9

  • 6

    Frum para a comunidade

    FCAEditoradeInformtica 165

    Ocdigoquesesegue funcionaporpequenosblocosquetmobjetivosespecficos.Parasermaisfcilasuacompreenso,resumemsedeseguidaasdiferentestarefasqueestesterodedesempenhar: Tarefa1:procurartpicosassociadosao frumeordenlospordataOcdigo

    referente a esta tarefa tem como objetivo aceder base de dados, procurar ostpicosassociadosaofrumidentificadoemid_forumeordenartodososregistosobtidos. Caso no sejam encontrados tpicos, o utilizador informado destasituao;

    Tarefa2:calcularonmerodemensagensjcolocadaseassociadasacadatpicoNestatarefairoserpesquisadasasmensagensassociadasacadatpico,atravsdachaveid_topico,cujovalorserutilizadonocruzamentodastabelastopicosemensagens;

    Tarefa 3: elaborar a tabela que apresenta os tpicos com ttulo, nmero demensagens,autoredatadacriaodotpicoOcdigoreferenteaestatarefairapresentar uma tabela na qual o utilizador pode visualizar ttulo, nmero demensagens,autordo tpicoedatada criaodo tpico, sendoadata convertidaparaoformatoportugus;

    Tarefa4:seoutilizadoradministrador,colocarhiperligaoquepermiteeliminaro tpico Esta hiperligao solicita o ficheiro apagar_topico.php, que seencontranapastaadministrador,passandoporURLa indicaodo tpicoquedevesereliminado(id_topico).

    Aprimeiratarefarealizadapeloseguintescript:// procurar tpicos associados ao frum selecionado $sql_topicos = "SELECT MAX(data_topico) AS ultima_data, topicos.*, utilizadores.* FROM topicos, utilizadores WHERE topicos.id_utilizador = utilizadores.id_utilizador AND topicos.id_forum = " . $id_forum . " GROUP BY topicos.id_topico ORDER BY ultima_data DESC;"; // realizar consulta $consulta_topicos = mysql_query($sql_topicos); $resultado_topicos = mysql_num_rows($consulta_topicos); A instruoMAX(data_topico)permitequesejaobtidaadatamaisrecentedototaldos tpicos registados, qual se atribui a designao ultima_data, o que permitefazer a ordenao da datamais recente para a datamais antiga, utilizando depois ainstruoORDER BY ultima_data DESC.

  • 6

    Frum para a comunidade

    FCAEditoradeInformtica 181

    6.5. Administrao do frum

    Nocasodeum frum,existem funesespecficasqueapenasestodisponveisparaadministradores.Entreestasfunes,incluemse:iniciaroueliminarcategorias,fruns,tpicosoumensagens,bemcomogerirosutilizadores.

    6.5.1. Menu de administrao

    O acesso ao menu de administrao feito com base na hiperligao presente nocabealho,disponvelapenasparaadministradores,talcomofoiexplicado.Aoclicarsenessa hiperligao, solicitado o ficheiro menu_admin.php que apresenta umatabelacomumconjuntodeopesqueiropermitirexecutardiferentestarefas: Criaroueliminarcategorias; Criarfruns; Validarutilizadoresoutornlosinativos; Verlistadeutilizadores.OaspetodestemenuoquevemosrepresentadonaFigura6.12.

    MenudeadministraoFIGURA6.12

    O script do ficheiro menu_admin.php aquele que permite construir estapgina,sendo realizado sobretudo em linguagem HTML e constitudo por uma tabela queapresentadiferenteshiperligaes,quesolicitamosrespetivosficheiros.Osnicoscasosemqueutilizadaa linguagemPHP soa solicitaoda ligaobasededadoseainclusodocabealho:

  • 7

    Mailing list

    FCAEditoradeInformtica 205

    7.3.3. CAPTCHA

    Paraevitaroregistodeutilizadoresemmassa,podeutilizarseumsistemaqueobrigueoutilizadora inserirumcdigoquegeradoaleatoriamentequandoumdeterminadoutilizador pretende realizar um registo. Este sistema pode ser aplicado em inmerassituaes,comoaquelasqueforamvistasnocaptuloanterior(porexemplo,noregistodeutilizadoresouenviodemensagensparaofrum),designandoseporCAPTCHA.A sigla CAPTCHA o acrnimo para Completely Automated Public Turing test to tellComputers and Humans Apart, referindose a um teste que pode ser realizado paradeterminar se um dado utilizador humano ou no, baseado no Teste de Turing,propostoporAlanTuringnadcadade1950.Apesardepoderparecerumpoucoestranho,existeapossibilidadedehaver registosfeitos continuamente por outros computadores, de forma automtica, pelo que oobjetivodoCAPTCHAprecisamentepreveniroregistoautomticoeposteriorenviodespam,apartirdecontascriadassemintervenohumana.Nocasodeumamailinglist,esta situao tornase especialmente relevante, pois poderia haver a tentativa deregisto de utilizadores de forma automtica, com vista a produzir um ataqueinformtico.Numa explicao muito simplista, podia afirmarse que este sistema se baseia nacomparaoentreumainformaoquemostradaaoutilizadorearespetivareplicaodessainformao,porpartedoutilizador.Ainformao,quegeradaaleatoriamentequandooscriptexecutado,podeserumapergunta comum, a soma de dois nmeros (em que o utilizador tem de colocar oresultado), a cor da imagem mostrada ou ainda um texto que o utilizador tem dereplicar. De seguida, ambos os cdigos so comparados e, caso coincidam, o scriptcontinuaaserexecutado;casocontrrio,geradoumnovoexemploeoutilizadortemdeefetuarnovatentativadeacesso.Atualmente,possvelgerarcdigosqueapareamonduladosoudistorcidos,comvistaadificultaraindamaisoacesso indevido,umavezquealgunsprogramasjconseguiamdecifrararespostaqueeranecessrioinserir.

    NotaAquandodacodificaodachavegerada,podeserutilizadooalgoritmodotipoSHA1 em vez do algoritmo MD5. Tal como explicado no Captulo 4, a chavegeradatambmdiferente.

    Attulodeexemplo,criaseoficheirocaptcha.php,quevaiconteroscriptquedarorigemaoprocedimentodeverificaodoregistofeitoporumutilizadorhumano.Esteir gerar um cdigo aleatrio, baseado na funo RAND(), o qual ser codificadoutilizandooalgoritmoSHA1.

  • 7

    Desenvolvimento de Aplicaes em PHP

    FCAEditoradeInformtica216

    7.5.1. Funcionamento da paginao de resultados

    Se verdadequeo crescentenmerode registos traduzum crescente interessenasnovidadesquepodemserrecebidasatravsdeumanewsletter,tambmverdadequeserquaseinevitvelqueabasededadosaumenteexponencialmentedetamanho.Uma vez que h um nmero cada vez maior de registos de endereos de correioeletrnico que poderia ser apresentado, tornase necessrio limitar o nmero deregistos que cada pgina apresenta, para que a gesto e mesmo a visualizao setornemconfortveisparaoadministrador.Quandosepretendepaginarumelevadonmeroderegistosdeumabasededados,necessriocalcularonmerototalderegistosnabasededados,fixarototalderegistosque vo sermostradosporpginaedepois dividironmerode registospor vriaspginas,mantendoas sempre com omesmo aspeto grfico, alm de ser necessriopercorrer os registos por blocos que vo sendo exibidos em funo do nmero depginaselecionado.Asoperaesreferidassorealizadasporetapas,umavezqueoclculodonmerototalde registos est ligado a operaes relacionadas com a base de dados, enquanto avisualizaodosresultadosporpginaestrelacionadacomatabelaqueosapresenta.Essasetapasso realizadasemsequnciae,comvistaasermais fcilcompreenderosistemadepaginaoquevaiserdesenvolvido,apresentasedeseguidaumresumodasmesmas:1) Verificaronmerodepginainicial(porpredefinio,deveserapgina1).2) Percorrerabasededados,obtendoumnmerodefinidoderegistosdecadavez3) Apresentarosregistosobtido.4) Adicionarumapginaaovalordapginainicialerepetirnovamenteospassos2e3.5) Mostrarhiperligaesparaaspginas seguinteseanteriores,medidaqueestas

    vosendoapresentadas.Paraverificaronmerodepginaatual,podeutilizarseavarivel$_GET['pagina'],quevaiconfirmarsejexisteumnmerodepgina(casonosejaapginainicial).Nocasode seraprimeirapginaqueesta serexibidapor solicitaodeoutro ficheiro,estavarivelestvazia,peloquelheatribudoovalor1;nasseguintes,estevaloralteradoemfunodapginaqueseestavisualizar.Quanto ao segundo passo, definese o total de registos a serem obtidos atravs daaplicao da instruo LIMIT() na consulta SQL, o que permite informar a base dedadossobreonmeroderegistosquequeremosqueestadevolva.EstainstruotemasintaxeLIMIT (A, B),emquealetraAdizrespeitoaoprimeiroregistoondedeveseriniciadaacontagemealetraBserefereaototalderegistosmostradosdecadavez.

  • 8

    Grficos e relatrios

    FCAEditoradeInformtica 247

    8.3. Desenhos com PHP

    A linguagemPHPpermiteaobtenode figurassimples (porexemplo,quadrados)oumesmo a construo de grficos do mesmo gnero dos que so apresentados nascomunsfolhasdeclculo.Contudo,otermogrficonoselimitaapenasagrficos,massimatodoumconjuntode figuras (desenhos) que se podem produzir, uma vez que asmesmas bibliotecas eclasses podem at ser utilizadas para produzirem cdigos de barras. No entanto, eapenasporumaquestodecoerncia,designarsepordesenhostodososcomunsdesenhos, como quadrados, crculos, circunferncias ou retngulos, enquanto adesignao grficos ser atribuda a todos os grficos idnticos aos obtidos numprogramadefolhadeclculo.

    NotaConformeobrowser utilizado,a localizaodosdesenhos/grficosconstrudoscom a biblioteca Graphics Draw pode variar, tendose detetado quepodiam aparecer localizados esquerda sobre um fundo branco (InternetExplorer)ounocentrodapginasobreumfundonegro(MozillaFirefox).

    8.3.1. Biblioteca Graphics Draw instalao

    Para sepoderem construirdesenhosou grficosem linguagemPHP,necessrio terinstalada uma biblioteca de funes que d pelo nome de Graphics Draw, cujaconfirmaode instalaonecessriaantesde se iniciarodesenvolvimentodeumaaplicaoquedelanecessite.Se esta biblioteca estiver presente e a funcionar corretamente, poder experimentarexecutaroseguintescript,quepermitirvisualizarnomonitorumpequeno retnguloverde:

  • 8

    Desenvolvimento de Aplicaes em PHP

    FCAEditoradeInformtica274

    AFigura8.14mostraoresultadodestecdigodebarrasquegeradodinamicamente,emfunodotextoinseridonapenltimainstruo:$Barcode->draw($myPicture,"Cdigo de barras a funcionar!",50,50,$Settings);

    CdigodebarrasproduzidocomaclassepChartFIGURA8.14

    Casosepretenda,emvezdeseinserirumtextoesttico,podefazersealigaobasededadoseobtervaloresquepodemgerarcdigosdebarras,porexemplo,emfunodonmerode sriedeum artigooudo tipodeproduto, tal como acontece comoscdigosdebarrasqueseencontramemprodutosalimentares.Uma vez que a classe utiliza a normalizao EAN128 ou EAN39, os cdigos geradospodem ser lidos por qualquer leitor comum de cdigos de barras. A classe pChart apenas disponibiliza este tipo de normalizao, pese embora tambm pudessem sergeradosgrficosdotipoQRCode.

    8.5. Criao de grficos dinmicos com bases de dados

    Paracriarumgrficodinmico,podeutilizarsequalquerumadasclassesreferidasataqui,masofactodesepoderutilizaraclassepCharttornamuitomaissimpleseeficazacriaodosgrficos,peloqueseirdesenvolvertodootrabalhoutilizandoestaclasse.Os scriptsque foramdesenvolvidospara a criaode grficosestticospoderiam seradaptadoseutilizadosparaacriaodosgrficosdinmicoscombasesdedados,umavez que a principal diferena entre este tipo de grficos e os apresentados antes(estticos)estrelacionadacomaformacomocriadooarrayparaseremexibidososvaloresnogrfico.

  • 10

    Desenvolvimento de Aplicaes em PHP

    FCAEditoradeInformtica384

    10.6. Upload de ficheiros

    As operaes de envio de ficheiros de imagem para o lbum apenas podem serrealizadasporutilizadoresregistados,emboratodososqueacedamaplicaopossamverasimagensquejseencontramdisponveis.Oenviodeficheirosdeimagemobrigacriaodevriosscripts,talcomofoiexemplificadonoCaptulo9.

    10.6.1. Selecionar ficheiros para upload

    Oenviodeficheirosdeimagem(ououtrotipo)assentanumformulrioquedisponibilizaum campodeprocuradesses ficheirose,de seguida, solicitaum scriptqueverificaoestadodoficheiroeocopiaparaumapastadoservidor,registando,simultaneamente,diversositensnabasededados,comoaidentificaodoutilizadorouacategoriaaquepertence.PoderiadesenvolverseoformulrioqueseapresentanaFigura10.10.

    FormulrioparaenviodeimagensFIGURA10.10

    No caso do lbum de fotos, criase o ficheiro envio_imagem.php, no qual seencontraumscriptqueelaboraoformulrioapresentadonafiguraequepermiteinserirdados;esteformulriotemdecontera indicaodequevaisersubmetidoumtipodedados diferente do tipo texto, utilizandose para o efeito a expressoenctype=multipart/form-data.Esta informaopermitequeosdados sejam reconhecidoscomo formatodedadosenocomotexto,mastambmnecessrioespecificar(nocampodesubmisso)queahiperligaoqueaparecedizrespeitoaumficheiro,oquefeitoatravsdaexpresso.

    Pgina 45Pgina 112Pgina 134Pgina 165Pgina 181Pgina 205Pgina 216Pgina 247Pgina 274Pgina 384