Desenvolvimento de sistema web para gerenciamento de vendas do setor de bebidas - (Monografia - Ciência da Computação)
Upcoming SlideShare
Loading in...5
×
 

Desenvolvimento de sistema web para gerenciamento de vendas do setor de bebidas - (Monografia - Ciência da Computação)

on

  • 11,135 views

Monografia de gradução em Ciência da Computação - UNOESC, 2011.

Monografia de gradução em Ciência da Computação - UNOESC, 2011.

Statistics

Views

Total Views
11,135
Views on SlideShare
11,096
Embed Views
39

Actions

Likes
2
Downloads
415
Comments
0

2 Embeds 39

http://www.f2suporte.com 38
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Desenvolvimento de sistema web para gerenciamento de vendas do setor de bebidas - (Monografia - Ciência da Computação) Desenvolvimento de sistema web para gerenciamento de vendas do setor de bebidas - (Monografia - Ciência da Computação) Document Transcript

    • UNIVERSIDADE DO OESTE DE SANTA CATARINA – UNOESC CAMPUS DE VIDEIRA ÁREA DE CIÊNCIAS EXATAS E DA TERRA CURSO DE CIÊNCA DA COMPUTAÇÃODESENVOLVIMENTO DE SISTEMA WEB PARA GERENCIAMENTO DE VENDAS DO SETOR DE BEBIDAS DIEGO DE COSTA Orientador: HERCULANO HAYMUSSI DE BIASI VIDEIRA – SC 2011
    • 1 DIEGO DE COSTADESENVOLVIMENTO DE SISTEMA WEB PARA GERENCIAMENTO DE VENDAS DO SETOR DE BEBIDAS Trabalho de conclusão de curso apresentado ao Curso de Ciência da Computação da Universidade do Oeste de Santa Catarina como requisito parcial para a disciplina de TCC III para obtenção do titulo de Bacharel em Ciência da Computação Orientador: Herculano Haymussi De Biasi VIDEIRA – SC 2011
    • 2 DIEGO DE COSTADESENVOLVIMENTO DE SISTEMA WEB PARA GERENCIAMENTO DE VENDAS DO SETOR DE BEBIDAS Trabalho de Conclusão de Curso apresentado ao Curso de Ciência da Computação da Universidade do Oeste de Santa Catarina – UNOESC, Campus de Videira (SC), como parte dos requisitos para obtenção do título de Bacharel em Ciência da Computação.Aprovado em ___________________ BANCA EXAMINADORA______________________________________________________Prof. Herculano Haymussi De BiasiProfessor OrientadorUniversidade do Oeste de Santa Catarina______________________________________________________Prof.Professor Membro da Banca ExaminadoraUniversidade do Oeste de Santa Catarina______________________________________________________Prof.Professor Membro da Banca ExaminadoraUniversidade do Oeste de Santa Catarina
    • 3Dedico este trabalho aos meus pais, pelocontinuo apoio e dedicação aosconhecimentos e estudos.
    • 4 AGRADECIMENTOSA Deus por me proporcionar aptidão para concluir este trabalho.A minha família, fonte de minha ideologia.Ao professor Herculano, pela sua orientação.À professora Lilian, por compartilhar seus conhecimentos.Ao meu amigo Alessandro Panaccione, por seu apoio e ajuda.A todos que, de uma forma ou outra, colaboraram para que este trabalho fosserealizado.
    • 5 RESUMOUma aplicação desenvolvida para a arquitetura web (World Wide Web) através desolicitações entre cliente e servidor, representa um novo conceito baseado emacessibilidade e portabilidade, permitindo acessos simultâneos de usuáriosgeograficamente distantes. A análise dos processos de vendas da empresa debebidas foi realizada através de diagramas, determinando e orientando a criação dosistema. O aplicativo automatiza os processos de emissão de pedidos porrepresentantes, e a administração da informação gerada na indústria como emissãode ordens e relatórios de vendas, permitindo o acesso do usuário de qualquer local eregião. Apresentar problemas de comunicação entre processos e setores, para criare definir o modelo de caso de uso, a usabilidade e seus módulos. O projeto cria umsistema robusto e seguro, que consegue aceitar uma grande quantidade de usuáriosconectados com uma taxa significativa de transferência entre cliente e servidor. Asinformações são comutadas entre o navegador do dispositivo do usuário e o servidorque deve interpretar os dados, incluindo e selecionando a informação disponível nobanco de dados. Utilizando tecnologias como a linguagem PHP e banco de dadosMySQL é possível garantir todos os requisitos técnicos exigidos para a suaconstrução e desenvolvimento. O desempenho da comunicação entre cliente eservidor pode ser complementado utilizando o método Ajax, esta metodologiapermite que a resposta seja mostrada no navegador sem a necessidade que apágina seja reprocessada. Os módulos da aplicação são capazes de realizarfunções de envio de e-mails, geração de documentos, tratamento de sessões, entreoutras. A validação dos formulários pode ser realizada no próprio navegador docliente, otimizando o desempenho, não necessitando aguardar uma resposta doservidor. Buscou-se analisar as características ideais para o banco de dados eservidor web, garantindo que a aplicação seja confiável e ativa.Palavras chave: Web. PHP. MySQL. Automatização.
    • 6 ABSTRACTAn application developed for the architecture web (World Wide Web) throughrequirements between client and provider, represents a new concept based onaccessibility and portability, allowing accesses from users at the same time. Theanalysis of the processes of sales of the company of drink was realized throughdiagrams, determining and giving orientation to the creation of the system. Theapplicative automatizes the processes of demand emission by representatives, andthe administration of the information created in the company such as the demandemission and sales reports, allowing the user’s access of any place and region. Topresent problems of communication between processes and departments, to createand to define the usage case model, defining its usage and its modules. The projectmust create a robust system, safe that can accept a great quantity of connectedusers, a meaningful rate of transference between client and provider is essential. Thepieces of information are commutated between the browser of the user and theprovider that has to interpret the data. Using technologies as the PHP language andMySQL data bank is possible to guarantee all the technical requirements demandedfor its constructions and development. The performance of the communicationbetween client and provider can be complemented using the Ajax Method; thismethodology allows the answer to be showed in the browser without the need of thepage being reprocessed. The modules of the application are able to fulfill functions ofsending of e-mails, documentation creation, sections treatment, and the like. Thevalidation of the forms can be realized from the browser itself, optimizing theperformance, not being necessary to wait for an answer from the provider. The idealcharacteristics were searched for the data bank and web provider, guaranteeing theapplication to be reliable and active.Key words: Web. PHP. MySQL. Automatization
    • 7 SUMÁRIO1 INTRODUCÃO ....................................................................................................... 101.1 OBJETIVO GERAL .......................................................................................... ...111.2 OBJETIVOS ESPECÍFICOS ............................................................................... 111.3 JUSTIFICATIVA ................................................................................................... 112 DESENVOLVIMENTO ............................................................................................ 132.1 BUSINESS TO BUSINESS (B2B) ....................................................................... 132.2 APLICAÇÃO WEB ............................................................................................... 142.3 PROTOCOLO HTTP ........................................................................................... 152.3.1 Common Gateway Interface (CGI)................................................................. 162.3.2 Métodos GET e POST..................................................................................... 172.4 LINGUAGEM DE MARCAÇÃO DE HIPERTEXTO (HTML) ................................ 182.5 CASCADING STYLE SHEETS (CSS) ................................................................. 192.6 LINGUAGEM PHP .............................................................................................. 192.6.1 História ............................................................................................................ 202.6.2 Características ................................................................................................ 212.6.3 Envio de e-mails ............................................................................................. 222.6.4 Biblioteca FPDF .............................................................................................. 232.6.5 Sessões ........................................................................................................... 242.6.5.1 Sessão .......................................................................................................... 242.6.5.2 Cookies ......................................................................................................... 252.6.6 Segurança ....................................................................................................... 262.6.6.1 Message Digest Cinco (MD5)........................................................................ 262.6.6.2 Injeção de SQL .............................................................................................. 272.7 BANCO DE DADOS MYSQL .............................................................................. 272.7.1 Tipos de tabela ............................................................................................... 28
    • 82.7.2 Integridade referencial ................................................................................... 302.7.3 Suporte a transações ..................................................................................... 312.7.4 phpMyAdmin ................................................................................................... 312.8 AJAX.................................................................................................................... 322.8.1 XML .................................................................................................................. 342.8.2 JavaScript ....................................................................................................... 342.8.3 Modelo de Objetos de Documentos (DOM) .................................................. 352.8.4 Requisição XMLHttp....................................................................................... 352.9 SERVIDOR WEB................................................................................................. 362.9.1 Servidor Apache ............................................................................................. 362.9.2 XAMPP............................................................................................................. 372.9.3 Microsoft Internet Information Services (IIS) ............................................... 382.10 ADOBE DREAMWEAVER ................................................................................. 382.10.1 Desenvolvimento de Formulários ............................................................... 392.10.2 Spry ............................................................................................................... 392.11 METODOLOGIA ................................................................................................ 402.11.1 Análise de Requisitos .................................................................................. 402.11.2 Caso de uso e diagrama de seqüência ....................................................... 412.11.3 Diagrama de classes .................................................................................... 422.11.4 Arquitetura geral ........................................................................................... 432.11.5 Arquivo de configuração.............................................................................. 442.11.6 Conexão com o banco de dados ................................................................. 452.11.7 Autenticação de usuário .............................................................................. 462.11.8 Cadastros ...................................................................................................... 472.11.9 Inclusão de pedidos ..................................................................................... 482.11.10 Inclusão e baixa de ordens de carregamento .......................................... 492.11.11 Relatórios .................................................................................................... 49
    • 92.11.12 Logoff .......................................................................................................... 502.11.13 Tratamento e conversão de dados ............................................................ 512.11.14 Confirmações e avisos em JavaScript ..................................................... 532.11.15 Envio automático de e-mails ..................................................................... 542.11.16 Menus e departamentos............................................................................. 553 CONCLUSÃO ........................................................................................................ 57REFERÊNCIAS ......................................................................................................... 59APÊNDICES ............................................................................................................. 63APÊNDICE A – Diagrama de sequência ................................................................... 64APÊNDICE B – Diagrama de classes ....................................................................... 65APÊNDICE C – Código HTML do formulário para a autenticação do usuário........... 66APÊNDICE D – Código PHP utilizado para cadastro ................................................ 67APÊNDICE E – Código de inclusão de pedidos ........................................................ 69APÊNDICE F – Código de inclusão e baixas de ordens ........................................... 71APÊNDICE G – Verificação de departamento e usuário logado ............................... 73APÊNDICE H – Sintaxe SQL para criação das tabelas do banco de dados ............. 75ANEXOS ................................................................................................................... 77ANEXO A – Código JavaScript para validação de CNPJ e CPF ............................... 78
    • 101 INTRODUCÃO A automatização dos processos de vendas é importante para a determinaçãode resultados e qualidade das informações. Analisar os problemas de gerenciamentode vendas e logística de carregamento em uma empresa no setor de bebidas é aetapa inicial para determinação das características funcionais para odesenvolvimento do sistema que deve auxiliar o gerenciamento comercial. Utilizardiagramas facilita a visualização dos requisitos que o aplicativo deve possuir,ajudando o desenvolvimento, a documentação e a concepção de novas versões. Através dos diagramas é possível determinar as tabelas a serem criadas noMySQL, este banco de dados é utilizado por grandes portais pelo mundo inteiro,demonstra uma grande estabilidade e desempenho para web, não necessitando demuitos recursos de hardware no servidor onde se encontra. Para atender todas as condições necessárias, proposta pelos objetivosfuncionais é utilizado um browser como uma ferramenta para execução de software,criando diversos benefícios na facilidade de utilização e na disponibilidade dosistema. Para maximizar o desenvolvimento e o desempenho proposto, é utilizada alinguagem PHP (PHP: Hypertext Preprocessor) que possui uma grande quantidadede extensões e bibliotecas disponíveis para criar um portal seguro e funcional,permitindo uma vasta diversidade de mecanismos para gerenciar os dadosarmazenados, inclusões e tratamentos. Cada página de código PHP é responsável por realizar uma função, em umatela em especifico, dentro de um modulo responsável por determinada entidade,como por exemplo, cliente e pedido. Os acessos a esses módulos e funções sãogerenciados conforme o departamento cadastrado no usuário. Desta maneira écriado níveis de acessos aos dados, onde são disponibilizados conforme anecessidade do processo em um determinado setor. A informação fica protegida devazamentos, totalmente direcionada e simplificada ao utilizador. A compatibilidade entre as definições técnicas de linguagem e banco dedados deve ser garantida na utilização de um servidor web que suporte gerenciar aexecução do PHP, sua comunicação com o banco de dados e o processamento deentrada e saída de informações gerada com a comunicação aos navegadores dos
    • 11usuários. Um período de testes e homologação do sistema garante uma qualidadesuperior na sua operacionalidade, superando dificuldades primárias de consertos deerros com a verificação na compatibilidade da estrutura disponível. É indispensávelpropostas de testes locais no computador do programador e homologação noservidor da empresa.1.1 OBJETIVO GERAL Desenvolver um sistema web para gerenciamento de vendas do setor debebidas.1.2 OBJETIVOS ESPECÍFICOS • Analisar possível automatização entre os processos de venda de bebidas; • Pesquisar definições de sistema web; • Desenvolver a aplicação com linguagem PHP; • Melhorar os processos utilizando validações em JavaScript; • Crias as tabelas e conexão com banco de dados MySQL; • Determinar os benefícios de um sistema automatizado;1.3 JUSTIFICATIVA Uma aplicação web é interpretada por navegadores de varias plataformas,garantindo uma grande compatibilidade com todos os usuários do sistema que estãolocalizados por todo país, independente se estes usam um computador com sistemaoperacional específico ou algum laptop e celular. Só haverá a necessidade de
    • 12conexão com a internet, a qual hoje existe a disponibilidade em diversas formas eem quase qualquer lugar. Um procedimento padrão de envio de pedidos será criado, eliminandoproblemas de formatos de arquivos incompatíveis com o da empresa, e o envioinformal de pedidos por meio de telefone e fax. A soma de resultados totais deimpostos e mercadoria é de forma automatizada, criando um conjunto de dadoscomercias consistente. O sistema exige do usuário a inserção de todas as informações necessáriaspara garantir a qualidade dos processos, e não ocasionar problemas na entrega damercadoria, cobrança, nota fiscal incorreta ou qualquer outro. Facilitando a criaçãode ordens a partir dos pedidos lançados, evitando desperdício de tempo emdigitação duplicada das informações, deixando os processos de venda,carregamento e entrega mais ágil. Opções de relatórios gerenciais com dados precisos para a diretoria, relatóriode venda por estado, representante, produto e muitos outros que podem serincluídos no aplicativo conforme a necessidade da empresa. O desenvolvimento desse aplicativo irá fornecer uma melhor condição detrabalho a todos os usuários, que poderão se concentrar em atender a demanda depedidos, sendo que os dados processados serão preservados e utilizados de formaeficiente, sem conferencias manuais adicionais, diferente do que se faz em envio erecebimento de planilhas ou conversas por telefone. A emissão on-line e a visualização de pedidos e ordens internas da empresavão garantir uma grande economia em papel, visto que não é preciso imprimir asfolhas para serem encaminhadas entre os departamentos, com isso contribuindocom o meio ambiente na redução do desmatamento para fabricação de papel. Fica claro que a centralização das informações da empresa em umaarquitetura web facilita a integração entre diversos setores, criando um padrãoacessível.
    • 132 DESENVOLVIMENTO As informações trocadas e armazenadas entre a empresa e seus clientes eparceiros é de grande valor para o gerenciamento e a sobrevivência no mercado.Segundo Stallings (2003, p. 5): Uma empresa sobrevive e prospera com informações: as informações dentro da organização e as informações trocadas com fornecedores, cliente e agências reguladoras. Além do mais, a informação precisa ser consistente, acessível e estar no local certo. A utilização de um software para gerenciamento de informação éconstantemente utilizada por conseguir uma ótima organização e acessibilidade. Aconstrução de sistemas on-line ou portais amplia as possibilidades de gestão. Umportal sendo o centro de integração entre informações e sistemas, aumenta aacessibilidade aos dados que estão arquivados, ao alcance em qualquer ponto deinternet, agilizando as tomadas de decisões e o tempo. É essencial construir umsistema robusto, seguro, que consiga aceitar uma grande quantidade de usuáriosconectados, com uma taxa significativa de transferência entre cliente e servidor. Em qualquer conteúdo web, o código fonte é dividido em dois conceitos, apágina do servidor que possui scripts interagindo entre si, somente no servidor etotalmente invisível para o browser (navegador) do cliente, que só recebe conteúdoatravés de um protocolo específico. As paginas do cliente escritas por umalinguagem que o navegador interpreta, possibilitando a interação do usuário. Essesconceitos trabalham sempre junto em uma aplicação web.2.1 BUSINESS TO BUSINESS (B2B) O B2B é o processo eletrônico de negócios entre as empresas para comprase vendas. As transações comerciais são realizadas totalmente através de softwaressubstituindo processos físicos. Conforme McLean, Turban, Wetherbe (2002, p. 175)descreve:
    • 14 Nas aplicações B2B os compradores e os vendedores são empresas. O B2B representa a maior parte do volume do comercio eletrônico, cobrindo um largo espectro de aplicações quer permitem a uma empresa ou a um setor econômico estabelecer relacionamentos eletrônicos com seus distribuidores, revendedores, fornecedores, clientes e outros parceiros. Através da internet é possível a troca do grande volume de informaçõescriada pelas transações, garantindo dados em tempo real para a organização eeficiência interna da empresa. Com a acessibilidade criada pela internet é possívelaumentar a quantidade de entidades envolvidas no aplicativo garantindointerconexões entre diversos servidores, descentralizando ou centralizando ainformação, garantindo compatibilidades entre filiais ou empresas. A compatibilidadeentre entidades de negócios assegura a automatização de qualquer operação,possibilitando uma quantidade expressiva de transações. Como o controle eletrônicocomercial é padronizado gera resultados de conhecimento com base de informaçãoprecisa. Os aplicativos de B2B permitem que a empresa possa atender uma grandedemanda de clientes e parceiros, disponibilizando diversos dados sobre suascompras a qualquer hora. O limite operacional se concentra somente eminvestimentos físicos e virtuais na área de tecnologia da informação.2.2 APLICAÇÃO WEB Aplicação web é qualquer sistema executado através de um navegador, sejana internet ou em redes privadas, localizado em um servidor web, as quaistransferem dados da maneira cliente e servidor (TURBAN; MCLEAN; WETHERBE,2002). O navegador solicita ou envia informações a ser processada no servidor, estedevolve ao cliente onde o navegador imprime o resultado, se difere de um site, poisexiste um nível significativo de regras e interações das informações entre os ladosde servidor e cliente. O usuário do sistema web pode utilizar o sistema de qualquerlocal que possua conexão com a internet, não existe a necessidade que ele possuao conhecimento de onde a aplicação e o banco de dados estão armazenados, pois
    • 15esta pode estar em qualquer servidor ou data center, em qualquer local do planeta.A simplicidade da atualização e manutenção nas aplicações web representa uma desuas principias características, visto que é necessário aplicar as mudanças somentenos servidores onde o código fonte está localizado, no próximo acesso que o usuáriorealizará, já estará acessando a versão atualizada do sistema. Existem diversaslinguagens para web, onde pode ser construídos sistemas de diversos interesses,em quase qualquer plataforma.2.3 PROTOCOLO HTTP Gourley e Totty (2002) definem o Hypertext Transfer Protocol (HTTP) comouma metodologia de comunicação utilizada para troca de dados entre o navegador eo servidor web. Este protocolo é utilizado quando algo é digitado na barra deendereços do navegador, seja ela uma aplicação ou um site, a transferência dapágina até a plataforma do cliente e suas respostas ao servidor web são realizadascom este protocolo. A comunicação HTTP entre o cliente e servidor é feita através demensagens. O cliente envia mensagens de requisição e o servidor envia umamensagem de resposta para o cliente. As mensagens enviadas e recebidas são compostas por cabeçalho e corpo.O cabeçalho contém informações especificas de configuração de servidor ou decliente, e o corpo da mensagem contém os dados que serão tratados pelo HypertextMarkup Language (HTML) como texto, imagem ou até mesmo um arquivo paradownload. O protocolo utiliza alguns métodos para transferências de informações entrecliente e servidor, esses métodos são utilizados como padrões por diversaslinguagens e por códigos HTML para envio de formulários ao servidor.
    • 162.3.1 Common Gateway Interface (CGI) Common Gateway Interface (CGI) é uma tecnologia utilizada nos servidoresweb para tornar a aplicação interativa. Essa tecnologia permite que o browser docliente passe parâmetros para serem processados no servidor. Os scripts CGI geramas paginas com base das variáveis enviadas pelo cliente. São ativados pelo HTML,que informa o método utilizado para envio dos parâmetros. Um servidor web pode ser configurado para aumentar o nível de interatividadecom o cliente como afirma Della Valle e Ulbrich (2005, p. 201): Os servidores HTTP podem ser amplamente estendidos com a adoção de mecanismos que permitam o chamado conteúdo dinâmico, uma tecnologia que possibilita a montagem de paginas personalizadas e de conteúdo variável para cada visitante e acesso. A personalização do conteúdo e da informação é a principal característica deum script CGI, isso permite que a aplicação web aumente sua habilidade decompreensão do usuário. A interface criada é responsável por um ciclo de solicitações feitas pelocliente, com o acesso ao conteúdo HTML, que se encontra no servidor e o envio dedados com um retorno, garantindo a interatividade com o usuário. O fluxogramaabaixo retrata os principais procedimentos que o CGI é incumbido de interagir paragarantir o processamento e comunicação.
    • 17Fluxograma 1: Common Gateway InterfaceFonte: Otsuka L. (1999) Através de uma Uniform Resource Locator (URL), é solicitado ao servidor webe ao CGI para que disponibilizem o conteúdo para ser tratado e formatado pelobrowser do cliente. Com esse conteúdo, o navegador poderá enviar e receber dadosprevistos no código HTML. Enquanto que o CGI ficará responsável para encaminharou receber as informações do aplicativo correto, contido no servidor.2.3.2 Métodos GET e POST O método GET é uma forma de transmitir dados através do protocolo HTTP.Com a utilização deste procedimento, os parâmetros e variáveis são introduzidas emforma de string na URL de destino. A URL é formada pela página de destino, umponto de interrogação (“?”), que delimita o começo dos dados, o nome da variável, oconteúdo da variável e demais dados, normalmente separadas por caracteresespeciais como símbolos comercial ("&"). Todo o endereço e os dados podem serobservados na barra de endereços do navegador apos o envio a página de destino(MUTO, 2006).
    • 18 Diferente do método GET, a metodologia POST não informa o nome e o valordas variáveis pela URL. Os dados são enviados diretamente por uma mensagem doprotocolo HTTP, utilizando este método o nome das variáveis que serão tratadas noservidor ficam invisíveis para o usuário, impossibilitando um possível ataqueinformando variáveis ou valores manualmente. O POST é uma solução muitoutilizada para envio de formulários HTML com diversas informações. Para recepção dos dados no script do servidor algumas linguagens criam umarray diferente para cada método, que pode ser consultado por outras funções.2.4 LINGUAGEM DE MARCAÇÃO DE HIPERTEXTO (HTML) A linguagem HTML é utilizada para produzir paginas web. São interpretadospor navegadores para gerar paginas estáticas. Foi criada em 1990 por Tim Berns-Lee com a finalidade de tornar possível o acesso e a troca de informações entreseus colegas. Com a disseminação do padrão HTML em toda internet, em 1994 foicriado a World Wide Web Consortium (W3C), o consórcio internacional da internet,que tinha como objetivo a padronização e manutenção do HTML, entre outraslinguagens criadas posteriormente (LOGMAN, 1998). O arquivo com extensão “.html”.ou “.htm” fica armazenado no servidor web, onavegador do cliente solicita o conteúdo, realizando o download do arquivo HTML.Com o arquivo na plataforma do cliente, o navegador interpreta e mostra seuconteúdo formatado. Um código HTML é formado por tags, as quais possuem comandos dentrodos símbolos menor que “<” e maior que “>”. Essas tags dividem o conteúdopermitindo uma formatação específica. Alguns elementos como imagens, animaçõese a linguagem JavaScript podem ser adicionadas entre os códigos HTML.
    • 192.5 CASCADING STYLE SHEETS (CSS) CSS é uma linguagem para construção de aparência em documentos escritosem linguagem de marcação. Foi desenvolvido pela W3C com o objetivo depadronizar a customização de conteúdo web. Remoaldo (2008) afirma que o estilo ecaracterísticas visuais de uma página devem ser completamente descritos nalinguagem CSS. A linguagem deve ser incorporado ao HTML, diretamente ouatravés de um link para um arquivo “.css”. A utilização de formatação através de códigos CSS facilita o desenvolvimento,reduzindo a quantidade instruções. Conforme Somera (2006 p. 10): A linguagem HTML também pode ser usada para definir o layout de web sites. Contudo, a CSS proporciona mais opções, é mais precisa e sofisticada, alem de ser suportada pela maioria dos navegadores atuais. A principal diferença entre HTML e CSS é que o primeiro é usado para formatar conteúdos e o segundo para conteúdos já estruturados. O CSS permite um controle de layout de vários documentos HTML, com umsimples arquivo, facilitando sua manutenção. No caso de portais e aplicativos degrande porte, é muito difícil garantir a mesma formatação configurada em todas aspaginas. Com a utilização de um arquivo CSS é possível definir blocos, com umaconfiguração padrão para ser utilizado em todas as paginas. Com qualquermodificação do layout no arquivo CSS, as paginas serão modificadasautomaticamente.2.6 LINGUAGEM PHP O PHP (PHP Hypertext Preprocessor) é uma linguagem para criação descripts executados no servidor, foi projetada especificamente para web. Pode serembutido em um código HTML, quando este código executar em um cliente, ésolicitado algo ao servidor web, o PHP irá executar e retornar as informações para onavegador. Por ser interpretado no servidor, o usuário só conseguirá ler as tags emHTML e não o código em PHP. Essa solução apresenta ser veloz e multiplataforma.
    • 20A sua capacidade é muitas vezes colocada a prova em sites e portais com milhõesde acessos. Por ser de código-fonte aberto, pode ser usado, modificado eredistribuído com novos módulos sem nenhuma restrição (MELO; NASCIMENTO,2007). As variáveis são verificadas dinamicamente pela linguagem, ou seja, épossível armazenar diversos tipos de dados durante a existência da variável, sem anecessidade de declarar seu tipo na criação. Quando o PHP for interpretado, éidentificado o conteúdo, verificando em tempo de execução2.6.1 História Foi criada em 1994 por Rasmus Lerdof, como um pacote CGI para suapágina pessoal, que até aquele momento era utilizado um conjunto de scripts Perl. Oautor Muto (2006), afirma que a primeira versão do PHP, ainda com nome dePHP/FI, já possuía um interpretador conhecido como FI (Form Interpreter) e váriascaracterísticas encontradas até nas versões dos dias atuais, como interpretaçãoautomática de variáveis vindas de formulário, sintaxe embutida no HTML e suporteao banco de dados MySQL. Após a construção e a disponibilização das primeiras versões da linguagem, oPHP recebeu apoio da comunidade livre, de acordo com Melo e Nascimento (2007p. 21): “Assim como ocorreu com o sistema operacional Linux, diversos entusiastasdo software livre tomaram conhecimento do pacote PHP/FI, os quais passaram acontribuir e acrescentar suas idéias ao mesmo”. A acessibilidade ao código-fonte,concedido pelo autor ajudou para popularização global do PHP. Entre os anos de 1996 e 1997 a linguagem já era utilizada em cerca dequinze mil sites espalhados em vários servidores (MORAZ, 2005). De acordo com o PHP Group (2010), a versão três desenvolvida por AndiGutmans e Zeev Suraski, já existia a possibilidade de criar códigos orientados aobjetos e herança, adaptação da linguagem para novos protocolos da internet esuporte para a maioria dos bancos de dados. O PHP três foi à primeira versão apossibilitar a utilização de extensões, que por sua vez atraiu diversos programadorespara o desenvolvimento de módulos. Renomeada para PHP: Hypertext
    • 21Preprocessor, conforme a atribuição de nomes recursiva do GNU (GNU = GNU’s NotUnix), foi lançada em 1998, e no final do mesmo ano já contava com instalação em10% dos servidores web. Na sua quarta versão foi aprimorado para cobrir diversas necessidades esolucionar alguns inconvenientes que apresentavam em sua versão anterior. Acaracterística mais significativa para a versão quatro é sua rapidez que foi concebidoatravés da mudança de seu motor, no PHP quatro o código é compilado e depoisexecutado, enquanto que antes era compilado e executado ao mesmo tempo. Comuma independência maior do servidor web, a linguagem se tornou mais portável edinamicamente mais interpretada por outros sistemas operacionais diversos. Aversão cinco lançada em 2004 contava com diversas funcionalidades novas, comoum melhor gerenciamento da memória e a utilização de ponteiros no código,eliminando a necessidade de copia de objetos que era necessária na versão númeroquatro. Introduzindo o conceito de handlers, ou seja, apontadores, foi possível aimplementação de somente um objeto, e a necessidade de copiar somente oponteiro, sendo assim quando o objeto sofrer alguma mudança, está se aplicará emtodo lugar onde contenha a instância do ponteiro. O novo suporte ao banco dedados MySQL foi melhorado. Souza (2007) descreve que com a versão cinco doPHP houve a inclusão da interpretação de comandos SQL (Structured QueryLanguage) via extensão MySQLi que permitiu ao PHP, a compatibilidade com novasfuncionalidades disponibilizadas pela versão 4.1 do banco de dados.2.6.2 Características A linguagem PHP tem como escopo principal, o desenvolvimento web, aindaque exista projeto para a utilização em programação fixa, ou seja, desktop. Suasintaxe e funções muito parecidas com C e C++ permitem que programadoresconsigam adaptarem-se com essa linguagem mais rapidamente, graças a suasimplicidade. Seu objetivo é a criação de sistemas que possibilitam a geração deconteúdo dinâmico para paginas da internet, onde o usuário possa interagir de uma
    • 22forma onde suas ações façam surgir efeitos na aplicação, ou seja, a inserção deinformações possa trazer um feedback para o cliente. A identificação feita pelo servidor para detectar o inicio do código PHP queestá embutido no HTML é procurando pelo conjunto de caracteres “<?php” e “?>”,qualquer comando que estiver entre essas tags será interpretada pelo servidor e seucódigo não será enviado para o cliente. Os arquivos que contenham instruções PHP,devem possuir em sua extensão a sigla “.php” (WELLING; THOMSON, 2003). De acordo Ferreira (2010), o PHP é totalmente modularizado, a sua alteraçãoé possível com a instalação de novos módulos, tendo a finalidade de aumentar assuas funções. Possui extensões para acesso a banco de dados MySQL,PostgreSQL e Oracle. Extensão para criação de PDF (Portable Document Format),entre muitas outras, que contribuem na construção de um sistema com estalinguagem. A manipulação de arquivos com a linguagem possibilita a criação desistemas dinâmicos de discos virtuais on-line para que os usuários possam alterar,excluir, realizar upload ou download de qualquer arquivo através da aplicação.Possui suporte nativo para diversos protocolos, podendo expandir ainda mais aquantidade utilizando bibliotecas de terceiros.2.6.3 Envio de e-mails A linguagem PHP permite o envio de e-mails através da função mail. Estafunção pode operar automaticamente se for configurada para tal, enviandoinformações definidas em variáveis que podem ser preenchidas com valores dobanco de dados ou de formulários. Conforme Muto A. (2006 p. 184): Uma das grandes vantagens da linguagem PHP é a possibilidade de mandarmos e-mails pela própria pagina do navegador. É um recurso muito útil quando desejamos enviar dados de confirmação de um pedido a um cliente, notificação de inclusão em algumas lista de discussão, construção de Web Mails, etc. O envio de e-mails através do script PHP, permite um nível de interação maiorcom o usuário do sistema, que pode ser avisado por e-mail caso haja alguma novainclusão de dados no aplicativo. Esta função permite que o cliente não precise entrar
    • 23no portal para conferir se existe alguma mudança em informações que sejamrelevantes para ele. Muto (2006) afirma que com a função mail, é possível enviar e-mails apenasinformando textos em suas variáveis ou incluindo códigos HTML, que serãointerpretados no browser ou no gerenciador de e-mail. São definidos quatro variáveispara enviar um e-mail, são elas: a) Destinatário, que deve conter o e-mail para quem a mensagem é enviada. b) Título, contendo o assunto. c) Mensagem, o conteúdo do e-mail. d) Header, cabeçalho contendo informações adicionais como especificações para HTML. Utilizando conteúdo HTML é possível a inclusão de imagens, criando umareferencia no código para onde a imagem está localizada, ou seja, em seu local dehospedagem.2.6.4 Biblioteca FPDF A biblioteca FPDF, é uma classe da linguagem PHP, que permite gerararquivos PDF. De acordo com Antunes Lamim (2010), o FPDF é uma bibliotecaflexível, sendo possível modificar unidades de medida, formato da pagina, margens,cabeçalhos, cores, quebra de linhas entre outras opções que permitem amodificação do conteúdo gerado. Compatível com a versão cinco e quatro da linguagem PHP, o FPDF nãoutiliza a biblioteca padrão da linguagem, PDFlib, que já vem embutida no servidorweb, isso compromete um pouco na performance em gerar o documento. Mas onível de personalização que o FPDF permite, e sua facilidade de documentação nosite do criador e em toda comunidade livre, contribui por sua utilização emaplicativos que precisam gerar arquivos com informações provenientes de consultasa banco de dados ou preenchimento de formulários (PLATHEY, 2008).
    • 242.6.5 Sessões O PHP Group (2010), mantedor oficial do projeto da linguagem PHP, define assessões como uma maneira de preservar dados subseqüentes, permitindo aconstrução de aplicações personalizadas. Os dados criados são exclusivos para umúnico acesso, são considerados como parâmetros validos para conceder acessos emodificações especiais.2.6.5.1 Sessão O método sessão na linguagem PHP existe para preservar dados específicosaté o usuário fechar seu navegador ou a sessão expirar, seja por inatividade ou porcomando do aplicativo. Segundo Muto A. (2006 p. 158): [...] a nível de programação, uma sessão é uma pequena porção em que pode se guardar todos os tipos de variáveis e valores. Esta pequena porção conhecida como objeto sessão, possui uma identificação [...] que é automaticamente enviada ao usuário quando a sessão é iniciada [...] Para cada sessão criada por cliente, um arquivo é criado no servidor com omesmo nome da identificação enviada ao navegador. Este arquivo só existeenquanto a sessão não expirar ou for destruída. A administração de sessões noservidor permite uma flexibilidade para o aplicativo ser mutável pelas determinaçõesdas variáveis, em um sistema com usuário e senha, as informações referentes aocliente pode determinar seu interesse, ou quais informações o usuário poderáacessar. A sessão é um recurso limitado do servidor, pois geralmente está ligadodiretamente à memória, sendo assim não é recomendado que se utilize para guardarinformações que não são necessárias para um usuário em especifico.
    • 25 Conforme Muto (2006) descreve, as principais funções para tratamento devariáveis de sessão são capazes de realizar operações para serem inicializadas,registradas, editadas, destruídas e consultadas, retornando seus valores.2.6.5.2 Cookies Os cookies são fragmentos de textos enviados ao browser do cliente, duranteum período de tempo definido, armazenando variáveis distintas. (MUTO, 2006). Com os cookies é possível criar personalização customizada para osusuários, cestas de compras em um e-commerce, autenticação em sistemas, entreoutras possibilidades, resgatando informações e dados do cliente, conforme Muto(2006 p. 152) afirma: Através de cookies podemos deixar informações (variáveis) armazenadas na maquina do usuário e resgatá-las, quando o usuário acessar o navegador, a qualquer momento, desde que o tempo de expiração não tenho sido ultrapassado. Armazenar certas variáveis no navegador do cliente permite que aexclusividade de uma modificação no aplicativo web não seja perdida quando apágina for fechada. Quando o usuário acessar novamente o aplicativo irá verificarem seu cookie quais são seus parâmetros de configuração. O PHP Group (2010) define seis variáveis em um cookie, são elas: a) name, define o nome do cookie; b) value, o valor da variável passado no parâmetro name; c) expiration, determina um tempo que estará acessível; d) domain, armazena qual o domínio ou host valido; e) path, determina para quais os diretórios o cookie é valido; f) security, se o valor desta variável for “1”, o cookie será transmitido peloHypertext Transfer Protocol secure (HTTPS).
    • 26 Se porventura alguns valores, de algumas variáveis não forem preenchidas,assumem valores padrões, no caso da expiration, o cookie encarrega-se de expirarquando o usuário fechar o browser.2.6.6 Segurança A segurança lógica em uma aplicação web é indispensável, mesmoconectado em uma rede mundial, os dados devem estar íntegros garantindo suaconfidencialidade, conforme descreve Figueiredo (1999 p. 1): Com o rápido crescimento da web e com a diversificação de sua utilização, a segurança se tornou um ponto de importância crucial, principalmente para quem tem a web como um dos principais apêlos comerciais. Utilizando métodos de criptografia de senhas, tratamentos de dados deformulários e verificações de existência de sessão, contribuem para que o aplicativose torne confiável.2.6.6.1 Message Digest Cinco (MD5) O método Message Digest (MD) utiliza um algoritmo hash para criar umasíntese de tamanho fixo, com base em um valor de tamanho máximo de duzentos ecinqüenta e cinco caracteres. A função denominada MD5, produz um valor de 120bits de tamanho, contendo uma string alfanumérica. (FOROUZAN, 2004) Este algoritmo é unidirecional, ou seja, não é possível que o valor convertidoseja transformado novamente no texto de origem. A função MD5 pode ser utilizadapara gravar o resultado da operação com base em um valor de uma senha, ou seja,codificá-la. Deste modo a informação será preservada, pois não será armazenadoseu valor oficial. Usuários que possuem acesso ao banco de dados não conseguemvisualizar a senha real. A sintaxe utilizada para a criptografia MD5 no PHP é muitosimples, só é necessário realizar a função “md5()”, e informar a variável a ser
    • 27calculada. Para certificar se a senha esta correta no momento do acesso é feitonovamente a codificação e o resultado é comparado com o existente no banco dedados.2.6.6.2 Injeção de SQL A injeção de SQL é um dos métodos utilizados para invasão em aplicativosweb, onde o acesso é limitado por inserção de senhas. A maioria das aplicaçõesutiliza banco de dados, onde são enviados sintaxes pelo script do servidor, a qualrecebe seus parâmetros da linguagem HTML. Segundo Santos (2008 p.133): Falhas de injeção acontecem quando os dados que o usuário dá de entrada são enviados como parte de um comando ou consulta. Os atacantes confundem o interpretador para o mesmo executar comandos manipulados enviado dados modificados. As falhas de injeção habilitam o atacante a criar, ler, atualizar ou apagar arbitrariamente qualquer dado disponível para a aplicação. As variáveis enviadas pelo formulário do HTML ao servidor, para tratamentoem uma consulta ao banco de dados, representam um risco em manipulação de umcomando, para que a resposta seja afirmativa de qualquer maneira, concedendoacessos indevidos, visualização de informações ou exclusão de dados. O tratamento em funções específicas no script PHP, para detectar conteúdoem dados recebidos pelo cliente soluciona grande parte dos problemas de injeçãode SQL. É importante a validação de dados recebidos, antes que sejam enviadospara uma sintaxe do banco de dados.2.7 BANCO DE DADOS MYSQL MySQL é um sistema gerenciador de banco de dados (SGBD) relacional,existindo uma versão com licença comercial e outra de código aberto com licençaGeneral Public License (GPL). Foi desenvolvido por vários anos, pelos
    • 28programadores Davi Axmark, Allan Larsson e Michael Widenius. MySQL foipublicado em 1996, posteriormente adquirido pela Sun Microsystems, e em abril de2009 pela Oracle, hoje já possui 10 milhões de instalações pelo mundo, incluindoempresas do setor privado, entidades do governo e laboratórios de pesquisasespaciais (STROPARO, 2010). Este banco de dados tem como principal característica sua velocidade. Umbanco de dados permite armazenar e consultar os dados armazenados. O serviçoMySQL controla o acesso a estes dados, permitindo que vários usuários, consigamincluir ou consultar grandes quantidades de informações ao mesmo tempo. OMySQL é multiusuário e multitarefa, utiliza linguagem padrão Structured QueryLanguage (SQL). Com a imensa facilidade de integração do MySQL com várias linguagens, asua utilização para web em portais imensos com missão critica, ou simples sites compoucos acessos tornam-se uma solução viável e muito confiável. Para Videiro (2008) o desempenho deste banco colabora na sua grande fama,sendo considerado por grandes empresas o banco de dados mais popular existente. Sua imensa compatibilidade e fácil integração com a linguagem PHP, tornamo banco de dados MySQL um dos mais utilizados. Dentre as principaiscaracterísticas deste SGBD são a sua portabilidade, suportando qualquer plataformaatual, compatibilidade com diversas linguagens, estabilidade e desempenho nastransações de dados, exigindo muito pouco do hardware onde está hospedado.2.7.1 Tipos de tabela O MySQL possui diversos tipos de tabelas, divididos em dois grupos, tabelastransacionais e não transacionais. A diferença entre elas consiste que no primeirogrupo as tabelas possuem maior confiabilidade e segurança, ou seja, se o hardwaredo servidor que hospeda o banco de dados falhar, provocando uma parada bruta, épossível recuperar as informações através de um backup e o log de transição. Comuma tabela transacional é possível combinar diversas instruções e processá-lastodas com um só comando (MUTO, 2006).
    • 29 As tabelas não transacionais são muito mais rápidas, não tendo nenhumasobrecarga de transação, ocupam menos espaço em disco e usam menos memóriapara atualizações de dados. Para Muto A. (2006 p.198): Um banco de dados pode conter tabelas de diferentes tipos, ou seja, pode- se desenvolver uma aplicação tranquilamente utilizando os vários tipos de tabelas disponíveis, aproveitando dessa forma o melhor de dois mundos. As opções e vantagens garantidas pelo MySQL, conseguem atender diversasexigências das aplicações, que podem precisar de desempenho extremo ou garantiae confiabilidade. Mesmo trabalhando com tabelas transacionais a performanceobtida é superior a de qualquer outro banco de dados. Muto (2006) descreve que as tabelas do tipo MyISAM, é o padrão utilizado,tem seus índices em um arquivo com extensão ‘.MYI’ (MYIndex), e os dados em umarquivo ‘.MYD’ (MYData). MyISAM suporta diversos itens como: a) suporte a campos VARCHAR de tamanho fixo ou dinâmico; b) campos VARCHAR e CHAR podem ser maiores que 64 Kbytes (KB); c) valores NULL são permitidos em colunas indexadas; d) colunas BLOB e TEXT podem ser indexadas; e) as tabelas MyISAM podem ser estáticas, dinâmicas e compactadas, os dois primeiros são escolhidos automaticamente, e o terceiro pode ser criado com uma ferramenta. HEAP são tipos de tabelas que fazem parte do grupo das não transacionas talcomo o MyISAM, mas seus índices são armazenados na memória, isso as tornamuito mais rápidas e vulneráveis, pois se o MySQL falhar os dados armazenadosnesse tipo de tabela serão perdidos. O tipo transacional InnoDB foi desenvolvido para obter o máximo deperformance ao processar um grande volume de dados, é usado largamente emsites que possuem banco de dados superiores a um Terra byte (TB). As tabelaspodem ser de qualquer tamanho, mesmo em sistemas operacionais onde o tamanhodo arquivo é limitado, pois um espaço da tabela pode consistir em diversos arquivos.Mesmo sendo transacional, e possuir um mecanismo de armazenamento seguro, foi
    • 30desenvolvido para eficiência em nível de central processing unit (CPU). Possui suaprópria área de buffer para armazenar dados e índices na memória principal (MUTO,2006). BerkeleyDB (BDB) é mais um tipo de tabelas existente no MySQL, possuemdiversos recursos de um ambiente transacional. Possuem uma maior chance desobrevivência a falhas e são capazes de realizar operações COMMIT e ROLLBACK.2.7.2 Integridade referencial Integridade referencial é um método utilizado nos banco de dados paragarantir que os dados não possam ser excluídos quando houver relacionamentos deníveis hierárquicos nas tabelas, evitando assim que a informação seja corrompida.Através das chaves estrangeiras é possível identificar se a informação é dependentede outra tabela. Segundo Duarte (2006): Existem determinados recursos do SGBD (Sistema Gerenciador de Banco de Dados) que estão diretamente relacionados ao tipo de tabela escolhido, tais como, controle de transação, níveis de lock e integridade referencial. Para utilizar a integridade referencial no MySQL é necessário criar tabelas dotipo InnoDB. Este tipo de tabela é possível criar restrições de integridades incluindoa diretriva constraint na chave estrangeira de uma tabela. O MySQL permite incluir restrições de integridade dos tipos cascade, restrict,set null e set default. No primeiro caso, ao se remover um registro da tabelareferenciada pela chave estrangeira, os registros relacionados com aquele removidoserão eliminados em todas as tabelas relacionadas. O restrict não permite nenhumaremoção de registros que possuam relacionamentos em outras tabelas. Os doisúltimos atribuem os valores default ou null para as chaves estrangeiras cujosregistros relacionados foram excluídos (DUARTE, 2006).
    • 312.7.3 Suporte a transações As transações simples em qualquer banco de dados são interpretadasimediatamente, ou seja, após executado a sintaxe os dados são inseridos, editados,consultados ou excluídos. O suporte de transações são delimitadores que indicam oinício e o fim de uma sintaxe, onde a execução do comando no MySQL é realizadaou abortada somente quando o delimitador final é interpretado. (MADEIRA, 2004). O comando que indica o início da diretiva SQL é start transaction. O conteúdoda sintaxe só é aplicado no banco de dados se for finalizado com o comandocommit, caso não seja incluído nenhuma instrução de delimitador no final, aoperação ficará pendente. A sintaxe pode ser cancelada com algum maucomportamento do software, que utilizará meios de tratamento de erros incluindo ocomando rollback como delimitador final, dessa forma todo o SQL da transação nãoserá interpretado pelo banco de dados.2.7.4 phpMyAdmin O software phpMyAdmin foi desenvolvido em linguagem PHP com umainterface web para navegador, com este aplicativo é possível criar e remover bancode dados, tabelas e campos, enfim, qualquer operação necessária para manipulaçãoe configuração do banco de dados MySQL. O software em si, é um conjunto deficheiros em PHP, isso permite que seja multiplataforma, necessitando apenas de umservidor web que seja compatível com a versão do PHP a qual o phpMyAdmin foiconstruído. Suas atualizações e desenvolvimento são criados por toda acomunidade de software livre mundial, garantindo que esteja disponível em setentae duas linguagens (PHPMYADMIN DEVEL TEAM, 2003) Atualmente o phpMyAdmin é amplamente utilizado em diversos servidorespelo mundo, por ser de fácil integração e compatibilidade, concedendo acesso paraque administradores de banco de dados possam realizar qualquer operaçãoremotamente em qualquer plataforma que possua um browser e conexão a internet.
    • 322.8 AJAX Ajax é o uso das tecnologias XML (eXtensible Markup Language) eJavaScript, através de processos assíncronos e síncronos. O objetivo do Ajax éevitar que a cada solicitação enviada pelo cliente ao servidor, não seja necessáriocarregar toda a pagina (MORONI, 2007). A metodologia proposta pelo Ajax, cria paginas web mais interativas erápidas, pois o trafego de dados é menor, visto que não existe a necessidade desolicitar novamente uma página ao servidor e carregá-la no browser. De acordo com Majer (2010, p. 2): Um dos grandes problemas do HTML (e seus derivados PHP, ASP, ASP.NET, etc.) é o fato de que ao precisar acessar alguma informação (muitas vezes em função de uma interação com o usuário), numa determinada página, esta informação só pode ser recuperada através de uma chamada à outra página. Isto faz com que o processo seja lento e tedioso. A criação de um objeto Ajax, tem como proposta solucionar uma grande partedos problemas atuais das linguagens web, permitindo que ele acesse asinformações de outra paginas, ou de um banco de dados, sem sair da página ondese encontra. Garantindo não só um desempenho melhor durante a transição dasinformações, como uma melhor experiência para o usuário. Todas as requisições ao servidor são feitas através do objeto criado emJavaScript com Ajax. O objeto faz a comunicação entre a interface HTML e oservidor, no modo clássico a solicitação e a resposta são enviadas direto peloHTML. O esquema abaixo visualiza as duas arquiteturas comparando as camadasonde os dados transitam.
    • 33 Esquema 1: Comparativo entre a arquitetura clássica e a AJAX Fonte: Paiva (2005 p. 4) As requisições HTTP da metodologia Ajax, podem ser assíncronas esíncronas, em uma seqüência assíncrona, não existe a necessidade da respostaimediata do servidor para que possa continuar uma determinada ação, como opreenchimento de outro formulário, ou a página acabar de carregar. O usuário nto páginapoderá continuar interagindo com a página, e quando as informações de uma açãochegar, um método irá tratar estas informações, imprimir algo na pagina se houver a o rnecessidade. No modo síncrono, a aplicação só tomará outra ação quando obtiver aresposta da anterior, deste modo as respostas e requisições se tornam seqüenciais , requisições(PAIVA, 2005).
    • 342.8.1 XML O XML significa linguagem de marcação extensível, foi criada pela WorldWide Web Consortium (W3C), tendo como principal objetivo da concepção anecessidade de criar um padrão que poderia ser lido por diversos linguagens,inclusive HTML. Sua estrutura é dividida entre tags de modo hierárquico, por serbaseado em arquivo de texto, permite consultas e gravação em diversos banco dedados, independente de qualquer plataforma (World Wide Web Consortium, 2006). O arquivo XML possui um alto nível de legibilidade, permitindo quecomputadores e humanos interpretem seu conteúdo facilmente, pode ser validadoutilizando arquivos de definição de tipo de documento. O XML armazena somente oconteúdo, informações sobre estilos e formatações são utilizados em arquivosseparados, podendo ser HTML ou CSS.2.8.2 JavaScript A linguagem de programação JavaScript foi criada em 1995 por Brendan Eich,enquanto era funcionário da Netscape. No começo chamava-se LiveScript, atravésde um acordo entre a Netscape e a Sun, a linguagem passou a se chamarJavaScript (AURELIO, 2004). É interpretada por navegadores, sendo utilizada amplamente para validaçãode formulários, animações e demais interações, é possível criar funções dentro deuma estrutura HTML, possui um desempenho de resposta muito rápido, devido queo JavaScript é carregado juntamente com o HTML, não dependendo de umaresposta do servidor para uma determinada entrada de dados. Conforme Triacca (2007), no começo a linguagem possuía diversosproblemas de compatibilidade entre navegadores. A Microsoft foi obrigada a criaroutra linguagem compatível, pois a Netscape não licenciou o JavaScript para obrowser Internet Explorer. Com duas linguagens diferentes, desenvolvedores depaginas web tiveram que criar scripts diferentes para cada navegador, necessitandoem uma detecção de browser na hora de executar a pagina no cliente.
    • 352.8.3 Modelo de Objetos de Documentos (DOM) O Modelo de Objetos de Documentos (DOM) é uma especificação da W3C deforma totalmente neutra, sem nenhuma especificação de linguagem ou plataforma,criada juntamente com o HTML quatro. Esse conceito mostra uma estruturahierárquica onde é possível alterar dinamicamente o estilo e o conteúdo de um siteou uma pagina, através de uma entrada de dados pelo usuário ou de formaautomática (FLANAGAN, 2002). A principal função do DOM em um browser é a representação de métodos,onde uma linguagem possa exibir documentos em HTML, XML ou qualquerlinguagem de marcação. Quando o documento estiver carregado, é possívelmanipulá-los através de uma estrutura de árvore.2.8.4 Requisição XMLHttp Conforme Moroni (2007), o XMLHttpRequest é um objeto na linguagemJavaScript, utilizado para criar uma conexão entre a página e o servidor da aplicaçãoweb. Com esse objeto, é possível detectar o browser do cliente, antes de qualqueroperação do Ajax. A detecção é necessária devido que alguns navegadores utilizam o objetoJavaScript nativamente, como Mozilla, Opera e Safari, já o Internet Explorer atravésdo objeto Active X. É necessária a construção de funções para tratamento antes dacriação do objeto, já que a W3C não especifica o padrão para a utilização doXMLHttpRequest, sendo assim, cada navegador pode implementar de diversasmaneiras diferentes. Utilizando métodos especificados no DOM, é possível enviar e receber dadosentre a página e o script do servidor.
    • 362.9 SERVIDOR WEB Servidor web é o software instalado em um computador conectado a internetou em uma intranet, este computador possui hardware superior aos computadorespessoais. O software é responsável em aceitar pedidos através do protocolo HTTP,ele gerencia e armazena conteúdos de sites ou aplicativos web. Um servidor webpode armazenar somente um site, ou milhares deles, o conteúdo de um site éacessado através dos domínios que estão associados ao Internet Protocol (IP) doservidor (STEVENS; FENNER; RUDOFF, 2004). Os pedidos para visualização e download dos códigos HTML, imagens, sonsou qualquer outro são feitos através dos navegadores instalados nas plataformasdos clientes. Com a utilização de linguagens especificas para serem processadas eexecutadas nos servidores, é possível uma interação com os clientes, como enviode formulário, gravação e leitura de banco de dados. Estes tipos de servidores devem estar ligados dia e noite para garantir adisponibilidade do conteúdo armazenado, ou seja, que em qualquer momento possaatender as solicitações dos usuários. Alguns servidores são configurados paragarantir milhares de acessos simultâneos que podem ocorrer em um site ouaplicativo de grande porte, utilizando técnicas de redundância de link da internet,energia elétrica, entre outras que visam a integrabilidade destes servidores.2.9.1 Servidor Apache O software Apache é um servidor web livre, e a sua utilização está presenteem mais de 50% de todos os servidores do mundo. Foi criado em 1995, por Rob McCool, funcionário da National Center for Super Computing Applications (NCSA). Comsaída de Rob da NCSA, várias pessoas começaram a adaptar o software as suasnecessidades. Brian Behlendorf e Cliff Skolnick foram os responsáveis pelacontinuação do projeto, criaram a Fundação Apache com mais oito pessoas. Afundação passou a controlar e disponibilizar patches com adição de recursos(ALECRIM, 2006).
    • 37 A origem do nome Apache é baseado em uma tribo de índios americanos quedetinham de grandes estratégias e resistências em combate. O servidor é compatível com o protocolo HTTP, existindo versões paradiversas plataformas. Composto por módulos que realizam as mais variadas funçõese recursos, como compatibilidade com PHP, Python, módulo de criptografia atravésde camada SSL entre outros. Conforme Coar e Bowen (2008, XI): O pacote básico distribuído pela Apache Software Foundation é razoavelmente abrangente e bastante poderoso, e foi feito um grande esforço por parte dos programadores para evitar que o software sofresse do problema de ter muitos recursos que ninguém usa. Um aspecto do pacote o torna especialmente interessante: ele inclui estensibilidade por padrão. A estensibilidade por padrão, garante uma grande compatibilidade com novosmódulos, permitindo ao servidor Apache tornar-se mais competitivo com relação adiversos recursos implementados por programadores de todo o mundo. Por ser umsoftware livre, continua sendo melhorado por diversas pessoas voluntárias,garantindo sua inovação em manter novas versões com desempenho para osservidores. O Apache é capaz de executar códigos em diversas linguagens como PHP,Perl, Shell Script e Active Server Pages (ASP). Pode ser configurado como servidorHTTP ou FTP. Sua compatibilidade com o banco de dados MySQL, garante autilização do conjunto PHP e MySQL, utilizado por milhares de sites e aplicações.2.9.2 XAMPP A fundação Apache Friends é um projeto sem fins lucrativos que visapromover o servidor Apache, fundada em 2002 por Kai Oswald Seidler e KayVogelgesang. Sua principal contribuição é a criação do XAMPP, um conjunto desoftwares para servidor web, incluindo MySQL, Apache, PHP, FileZilla entre outros.Seu nome é um acrônimo que significa os principais softwares embutidos, a letra “x”significa o sistema operacional, é multiplataforma, a letra “a” de Apache, “m” deMySQL, e duas vezes a letra “p”, que significam PHP e PERL (APACHE FRIENDS,2009).
    • 38 A principal característica do software, é sua facilidade de instalação econfiguração, por esse principio é muito utilizada em computadores locais paratestes de sites e aplicativos, sem a necessidade de upload em um servidor nainternet.2.9.3 Microsoft Internet Information Services (IIS) O Microsoft IIS (Internet Information Services) é um servidor de internet ouintranet, utilizado essencialmente nos sistemas operacionais Windows, sendo osegundo servidor web mais utilizado no mundo. A primeira versão do ISS foidisponibilizada em 1996. Em sua versão atual, está mais integrado ao sistemaoperacional, garantindo estabilidade e segurança (RODRIGUES DE FREITAS,2006). É utilizada a tecnologia proprietária ASP para ser interpretada no IIS, estalinguagem igualmente ao PHP é capaz de gerar paginas HTML dinamicamente.Através da inclusão de módulos de terceiros é possível adicionar funcionalidadespara executar outras linguagens. Suporta quase todos os principais protocolosexistentes, incluindo HTTP, FTP e SMTP. As primeiras versões deste servidor careciam de segurança. A Microsoftincorporou diversas características adicionais nas versões mais novas de seuservidor web, diminuindo consideravelmente as vulnerabilidades. Ainda é possíveladicionar ferramentas de segurança de terceiros, criando uma camada adicional deproteção.2.10 ADOBE DREAMWEAVER Segundo Remoaldo (2008), o Adobe Dreamweaver é um software paradesenvolvimentos de sites e aplicativos para web, possui um editor HTML e suportepara tecnologias PHP, Ajax, ASP, JSP entre outras.
    • 39 Conta com uma interface que auxilia o desenvolvimento de código,reconhecendo padrões de comandos. No seu método de design é possível criarcampos e botões de uma maneira simples e intuitiva. Com a opção preview, épossível executar o código digitado chamando o navegador padrão ou outro, para lero arquivo salvo, este botão se torna acessível e prático para que se possa verificar acompatibilidade.2.10.1 Desenvolvimento de Formulários O Dreamweaver possui um menu exclusivo para criação de formulários,permitindo a inclusão de campos, checkbox, botões e menus variados. A criaçãoautomática de formulários facilita o desenvolvimento do layout da aplicação,permitindo que o desenvolvedor da aplicação concentre seus maiores esforços nocódigo da linguagem do servidor. Gerar formulários automaticamente garante uma compatibilidade do códigocom diversos navegadores, visto que o Dreamweaver utiliza os padrões definidospela W3C.2.10.2 Spry Spry é um framework integrado ao Adobe Dreamweaver, a partir da versãoCS3. São bibliotecas no formato JavaScript e CSS, permitindo a criação deconteúdo dinâmico e rico visualmente, criando elementos interativas, comunicação eleitura de arquivos XML. Utilizando a tecnologia Ajax é possível criar diversasvalidações para campos de formulário, menus customizáveis, painéis entre outros. Ogerenciamento é realizado totalmente no Dreamweaver, na aba propriedades,otimizamdo o desenvolvimento. O arquivo gerado em JavaScript é responsável porqualquer ação, comportamento e interatividade, e o CSS se encarrega dos estilos decor, fontes e tamanhos (VIEIRA, 2007).
    • 40 A validação dos campos é realizada totalmente por código JavaScript,permitindo uma reposta rápida, antes mesmo de o formulário ser enviado, pois asinstruções são baixadas na plataforma do usuário, ou seja, o processamento devalidação é feito localmente, assim não existe a necessidade de esperar umaresposta do servidor. O Spry pode ser utilizado com qualquer tecnologia de script para servidor,pois ele está no front-end de uma aplicação integrado ao HTML.2.11 METODOLOGIA O projeto do aplicativo utiliza-se da fundamentação teórica para definição deseus funcionamentos e requisitos técnicos. O código fonte é dividido em arquivosPHP, onde cada um é responsável por um módulo.2.11.1 Análise de Requisitos A definição das características do aplicativo deve ser analisada conforme aestrutura da empresa. Satisfazendo as necessidades dos usuários, automatizandoas atividades. Para determinar como o software deve acatar os processos, érealizado a análise de requisitos da aplicação. Seguem em tópicos os requisitos doaplicativo em questão: • O aplicativo deve permitir a inclusão de pedidos com informações de clientes e produtos pré-cadastrados; • A soma de totais de impostos e produtos em um pedido deverá ser automática; • Deverá haver uma validação de CPF e CNPJ no cadastro de clientes; • Cadastro de usuário em quatro departamentos: representante, faturamento,
    • 41 produção, administrador; • Emissão de relatórios de vendas em PDF; • Criação de ordens de carregamento com a seleção de um ou vários pedidos; • O aplicativo deverá ser acessível de qualquer local com internet.2.11.2 Caso de uso e diagrama de seqüência Utilizando um diagrama de caso de uso, é possível visualizar as funçõesexercidas por cada ator. Os atores são representados por usuários de cadadepartamento, onde cada departamento realiza diversas atividades previstas ealgumas vezes exclusivas. O esquema demonstra as operações padrões realizadas,instruindo no desenvolvimento do aplicativo, a fim de atender as especificações. Esta representação visual ajuda o entendimento das possibilidades que ousuário possui em relação ao software, compreendendo de um modo geral, as suasações, comportamento e interações. O diagrama de seqüência, conforme presente no Apêndice A, descreve ospassos necessários para a utilização das funções presentes no aplicativo. Diversasinformações devem ser cadastradas anteriormente, liberando a utilização de outrosmódulos.
    • 42 Esquema 2: Caso de uso Fonte: o autor2.11.3 Diagrama de classes O diagrama de classes permite visualizar as dependências entre os diversosmódulos e objetos, possibilitando um conhecimento antecipado das interações sobre ,as variáveis e funções b básicas tratadas no aplicativo. Fowler (2005) descreve ascaracterísticas que o diagrama deve representar:
    • 43 Um diagrama de classes descreve o tipo de objetos presentes no sistema e os vários tipos de relacionamento estáticos existentes entre eles. Os diagramas de classes também mostram as propriedades e as operações de uma classe, e as restrições que se aplicam à maneira como os objetos estão conectados. Diagramas de classes devem ser claros e objetivos, facilitando a suacompreensão. O Anexo B contém o diagrama de classes dos principais objetospropostos pelo aplicativo, seus atributos e operações. São diversos tipos derelacionamentos utilizados para determinar as relações entre os objetos, que podemser múltiplas ou únicas.2.11.4 Arquitetura geral O aplicativo deve ser executado simultaneamente entre o cliente e o servidorweb. Através do browser, é solicitado todo código HTML e JavaScript para serprocessado, o navegador se comunica com o servidor, enviando e recebendodiversos valores. O código PHP é interpretado, realizando operações de inserçõesou consultas no banco de dados. O esquema abaixo demonstra as relações entre asarquiteturas:
    • 44Esquema 3: Arquitetura GeralFonte: o autor2.11.5 Arquivo de configuração O arquivo “config.php” possui os valores essências que devem ser preenchidospara o funcionamento global do aplicação. Este repositório deve ser configuradodurante o processo de instalação. Seu conteúdo deve ser protegido pelo servidorweb, evitando acessos indevidos. É formado inteiramente por variáveis declaradas que são utilizadas pordiversas paginas, para realizar funções de conexão ao banco de dados, envio de e-mails e parâmetros de emissão de relatórios. <?php $local_database = "localhost"; $database = "projeto"; $usuario_database = "root"; $senha_database = ""; $e_mailremetente = "contato@machsolucoes.com"; $e_maildestinatario = "contato@machsolucoes.com";
    • 45 //Configuração de relatórios $fonte = Arial; $tamanho = 10; ?>2.11.6 Conexão com o banco de dados Qualquer página PHP que utilize uma sintaxe de SQL para fazer qualqueroperação com o MySQL, deve possuir as funções nativas da linguagem para criar aconexão com o banco de dados. O código descrito possui a função para conexãocom o MySQL e outra para selecionar a base de dados. É incluído tratamento emcaso de erro através do try e catch, que realiza a tentativa de conexão, e em caso defalha exibe a mensagem de erro.<?phpinclude ("config.php");try{ if(!$db = mysql_connect("$local_database","$usuario_database","$senha_database")){ throw new Exception("Erro ao estabelecer conexão! ".mysql_errno()." - ".mysql_error()); }else{ try{ if(!mysql_select_db("$database",$db)){ throw new Exception("Erro ao selecionar o banco de dados! ".mysql_errno()." -".mysql_error()); } }catch(Exception $e){ echo $e->getMessage(); } } }catch(Exception $e){ echo $e->getMessage(); }?> As variáveis $local_database, $usuario_database, $senha_database e$database, possuem a localização do banco de dados através de Internet Protocol(IP) ou endereço HTTP, login, senha e nome da base respectivamente.
    • 462.11.7 Autenticação de usuário Para acessar o aplicativo, o usuário deverá ser autenticado digitando login,senha e escolhendo o departamento que pertence. Os departamentos padrões dosistema são divididos em representante, faturamento, produção e administrador. Ousuário só poderá acessar o conteúdo determinado para a sua repartição, contendoas suas funções utilizadas. O código HTML presente no apêndice C, contém oformulário com os campos que devem ser preenchidos pelo usuário na suaautenticação. Após a validação, os dados de login e departamento são incluídos emvariáveis de sessão, ficando disponíveis para uso em rotinas de inclusão de pedidose geração de relatórios. O código para verificação de autenticidade é feito em PHPconforme detalhado abaixo: <? $login = $_POST[login]; $senha = $_POST[senha]; $departamento = $_POST[dpto]; include "conexao.php"; $sql = mysql_query("SELECT * FROM usuario WHERE login = $login"); $cont = mysql_num_rows($sql); while($linha = mysql_fetch_array($sql)){ $senha_db = $linha[senha]; $departamento_db = $linha[departamento]; } if($cont == 0){ echo " <META HTTP-EQUIV=REFRESH CONTENT=0; URL=../login.php> <script type="text/javascript"> alert("O nome de usuario nao corresponde."); </script>"; }else{ if($senha_db != md5($senha)){//confere senha echo " <META HTTP-EQUIV=REFRESH CONTENT=0; URL=../login.php> <script type="text/javascript"> alert("A senha nao corresponde."); </script>"; }else{ if($departamento_db != $departamento){//departamento echo " <META HTTP-EQUIV=REFRESH CONTENT=0; URL=../login.php> <script type="text/javascript"> alert("Departamento incorreto.");
    • 47 </script>"; } else{ session_start(); $_SESSION[login_usuario] = $login; $_SESSION[senha_usuario] = $senha; $_SESSION[departamento_usuario] = $departamento; header(Location: ../index.php); } }mysql_close($db);?> A função include importa dados para a conexão realizada entre a linguagem eo MySQL.Torna-se essencial a utilização de variáveis referente a conexão, em todapágina que existe a necessidades de transição de informação com o banco dedados. O código de validação de usuário possui uma sintaxe de consulta, paraverificar a autenticidade das informações inseridas. É utilizada a função md5() para converter o valor da senha digitada pelousuário, utilizando um algoritmo hash nativo da linguagem PHP. Com o valorconvertido é possível a comparação com a informação presente no banco de dados,que já fora convertido no ato de cadastramento do usuário com sua senha. Através de alertas em JavaScript, o usuário é informado caso os dadosinseridos estejam incorretos. Se a informação estiver correta, as variáveis de sessãosão criadas, e o usuário é redirecionado para a página contendo o menu com asopções especificas para seu departamento.2.11.8 Cadastros O cadastro de informações sobre mercadorias e clientes é essencial para autilização de todas as funcionalidades de rotinas previstas no aplicativo. Odepartamento de faturamento e administração é responsável sobre o cadastro deprodutos, bem como seus dados técnicos, como por exemplo, o campo peso que éutilizado para emissão de uma ordem de carregamento e impostos freqüentementedevem influenciar o valor total de um pedido. Somente após o cadastro, o produtoserá liberado para ser utilizado com um item de venda ou para composição de umresultado de relatório.
    • 48 O representante cadastrará os dados do cliente no ato de sua primeiracompra. Para evitar a inclusão de Cadastro Nacional de Pessoa Jurídica (CNPJ) eCadastro de Pessoa Física (CPF) incorretos, é utilizado uma função em JavaScriptcapaz de verificar a autenticidade do código, realizando diversas operações ecomparando o resultado com os últimos algarismos inseridos. Caso a informaçãocadastrada não seja válida, o usuário será alertado antes de continuar preenchendoos demais campos. A tela para cadastro de cliente exige a inserção de todos osparâmetros necessários para a emissão de pedido e emissão de nota fiscal porsoftware de terceiro. Após os dados serem digitados no formulário da página, são enviados aoservidor através do método POST, onde um arquivo PHP será o responsável dereceber as variáveis e fazer o tratamento da conversão do padrão de datas enúmeros decimais, conforme o modelo requisitado do banco de dados. Com asinformações armazenadas em objetos locais é realizado a inserção no MySQL.Através do apêndice D, é possível visualizar o código utilizado para os cadastros.2.11.9 Inclusão de pedidos Na inclusão de pedidos o usuário irá selecionar um cliente cadastrado atravésde uma busca por sua razão social. Com o cliente selecionada é habilitado a opçãode busca e escolha de produtos, onde devem ser informados a quantidade e opreço. As informações referentes à cliente e totais do pedido serão armazenadasem variáveis de session juntamente com um array de sessão para os itens. Apósclicar em confirmar pedido, os dados da sessão serão armazenados no banco dedados e as variáveis são limpas. O código do apêndice E, recebe todas as variáveis de pedido e itens,realizando o tratamento e incluindo na sessão durante o processo. No final éenviado por parâmetro a função “confirmar” que é responsável em armazenar osdados.
    • 492.11.10 Inclusão e baixa de ordens de carregamento Com um ou mais pedidos cadastrados é possível a inclusão de ordens decarregamentos internas. O departamento de faturamento poderá compor a ordeminformando a transportadora, nome do motorista e previsão de carregamento. A ordem será visualizada pela plataforma de carregamento, que contará comos resultados das quantidades e o peso para do montante da mercadoria. Nafinalização da carga deverá ser feita sua baixa, registrando no banco de dados queos pedidos já foram carregados. O código fonte presente do apêndice F, é divido em duas funções, uma quedeve compor a ordem e outra responsável pela baixa:2.11.11 Relatórios É enorme a quantidade de opções de relatórios pré-definidos possíveis nodesenvolvimento, informações de diversas tabelas são juntadas e confrontadas. Osusuários somente deverão informar as variáveis de uma consulta como data, clienteou produto. Os relatórios são gerados em Portable Document Format (PDF). O sistemautiliza a biblioteca FPDF para converter os resultados do banco de dados em umarquivo PDF, é possível a configuração de fontes, tamanho, colunas e até inclusãode imagens. O código abaixo gera um relatório com o cadastro de todos os clientesinclusos no aplicativo.<?phpIncludedefine(FPDF_FONTPATH, fpdf/font/);require(fpdf/fpdf.php);include("conexao.php");$busca = mysql_query("SELECT id_cliente, nome, endereco, uf FROM cliente");$pdf = new FPDF();$pdf->Open();$pdf->AddPage();$pdf->SetFont(Arial, B, 10);$pdf->Cell(40, 5, CNPJ / CPF);$pdf->SetX(35);
    • 50$pdf->Cell(135, 5, Nome);$pdf->SetX(90);$pdf->Cell(135, 5, Endereco);$pdf->SetX(150);$pdf->Cell(40, 5, UF);while ($resultado = mysql_fetch_array($busca)) {$pdf->ln();$pdf->Cell(40, 5, $resultado[id_cliente]);$pdf->SetX(35);$pdf->Cell(135, 5, $resultado[nome]);$pdf->SetX(90);$pdf->Cell(135, 5, $resultado[endereco]);$pdf->SetX(150);$pdf->Cell(40, 5, $resultado[uf]);}$pdf->Output(); ?>2.11.12 Logoff Para garantir a segurança na utilização do aplicativo é necessário dispor demecanismos para realizar o logoff do usuário, destruindo as informações de sessãopertinentes. Em toda página se encontra a opção de logout ao lado do menu,quando clicado nesta opção o usuário será redirecionado na pagina inicial, para umanova autenticação. O código utilizado abaixo recebe o parâmetro “sair”, destruindo as variáveisde sessão login e senha. É utilizada uma função para imprimir o nome do usuário aolado da opção de logout.<?phpinclude "conexao.php";$sair = $_GET[sair];session_start();if (isset($_SESSION[ultima_acao]) && (time() - $_SESSION[ultima_acao] > 300)) { session_destroy(); session_unset();}$_SESSION[ultima_acao] = time();$sql_nome = mysql_query("SELECT nome FROM usuario WHERE login = $login_usuario");while($linha = mysql_fetch_array($sql_nome)){$nome_dousuario = $linha[nome];}if ($_GET[sair]== "sair"){ unset($_SESSION["login_usuario"]); unset($_SESSION["senha_usuario"]); header("Location: ../login.php");}
    • 51?> A função “time()” recupera a hora atual, comparando-a com o horário daultima ação do usuário no sistema, se for menor que trezentos segundos, ou cincominutos, as sessões são destruídas, exigindo um novo login. Esta estrutura detempo limite sem ação permite uma garantia para quando o usuário esquecer osistema autenticado não possa ser utilizado por outra pessoa não autorizada,enquanto sua ausência no computador.2.11.13 Tratamento e conversão de dados Algumas informações digitadas pelos usuários necessitam ser tratadas,convertendo alguns detalhes em sua orientação e organização. Dados como códigoscadastrais, datas e números decimais precisam ser convertidos entre o padrãoapresentando ao usuário com o que é gravado no banco de dados. Durante vários anos, a comunidade de código aberto criou vários scripts emdiversas linguagens para a conversão entre dados com padrões diferentes. Oalgoritmo abaixo é capaz de detectar o padrão de data contido na variável, econverter o dado para gravar no banco de dados MySQL ou apresentar na tela parao usuário. O código foi escrito em linguagem PHP e criado por Marcelo Bento daRocha (2010 p. 1)<?php /** * @param $data * @return $data */ Marcelo Bento da Rocha function converterData($data) { if(substr($data,2,1) == "/") { $dd = substr($data, 0,2); $mm = substr($data, 3,2); $aa = substr($data, 6,4); $time = substr($data, 11,8); if($time != "") $data = $aa."-".$mm."-".$dd." ".$time; else $data = $aa."-".$mm."-".$dd; }
    • 52 else { $dd = substr($data, 8,2); $mm = substr($data, 5,2); $aa = substr($data, 0,4); $time = substr($data, 11,8); if($time != "") $data = $dd."/".$mm."/".$aa." ".$time; else $data = $dd."/".$mm."/".$aa; } if($data==//) { $data = ; } return $data; } Os valores decimais conforme o padrão português brasileiro é utilizado vírgulaentre os algarismos de unidades e décimas, mas o padrão exigido por muito bancode dados, como é o caso do MySQL, é o americano onde é utilizado ponto no lugarda virgula. O PHP possui uma função nativa chamada “str_replace”, ela é capaz depercorrer todo o conteúdo da variável, buscando o algarismo a ser alterado. Paraisso é necessário informar o valor a ser procurado, e para qual deve ser convertido.A função pode ser demonstrada abaixo, com o valor de uma variável digitada pelousuário que deve ser convertida antes da gravação no banco de dados.<?php$ipi = str_replace(",", ".", $ipi);?> O valor da chave primária no cadastro de clientes é o CNPJ ou CPF,conforme padronizado, este código possui pontos e barras que dividem parte dosalgarismos. Para isso é utilizado uma máscara no campo em que o usuário digita ainformação, completando automaticamente as divisões necessárias, tornando-olegível para conferência. É possível validar os números digitados comparandoresultados dos algarismos com o código verificador, se o valor informado não estivercorreto é executada uma caixa de dialogo informando o erro. Para essas funções é utilizada um script livre e aberto em linguagemJavaScript, presente no anexo A, o código foi escrito por Leandro Alexandre (2009 p.2).
    • 532.11.14 Confirmações e avisos em JavaScript A linguagem JavaScript permite criar caixas de diálogos geradas no meio datela, requisitando que o usuário leia a mensagem interagindo com os botõesapresentados. A função “alert()” recebe uma mensagem que será exibida na telarequisitando a confirmação do usuário para que ela seja fechada. O código abaixo éutilizado após a inserção de um pedido no aplicativo, ele deve informar o número dopedido gerado.<script LANGUAGE="Javascript">alert("Pedido cadastrado - Numero: $numero_pedido");</script> A função “alert” no caso citado acima fica encapsulada dentro do código PHPpara que seja possível preencher a variável “$numero_pedido” com o código doúltimo pedido cadastrado. É utilizada uma caixa de diálogo que requisita uma confirmação do usuárioantes de realizar uma determinada ação. A função “confirm()” gera uma mensagemcom dois botões: um “OK” e outro “CANCELAR”. Dependendo da escolha do usuárioo script retorna “true” ou “false”, estes valores são utilizados para confirmar umaexecução do código PHP ou cancelá-la. O script abaixo é utilizado para aconfirmação na exclusão de qualquer registro nos módulos de cadastros. function show_confirm(pagina,funcao,id,retorno) { var id var retorno var r=confirm("Aperte OK para deletar"); if (r==true) { window.location=pagina+"?funcao="+funcao+"&id="+id+"&retorno="+retorno; } else { window.location=retorno; } }
    • 54 A função “show_confirm(“) recebe diversas variáveis que armazenam o localde onde foi chamada, permitindo que ela seja utilizada por varias paginas,retornando para seu local correto após a interação com o usuário.2.11.15 Envio automático de e-mails Com a inclusão de um pedido no sistema é possível enviar informações comonúmero do pedido e razão social do cliente para outro arquivo PHP, que seráresponsável por enviar um aviso para o e-mail do departamento de faturamento.Segue abaixo um exemplo de código utilizado, a qual detecta o sistema operacionalutilizado no servidor para determinar configurações de cabeçalho, antes do envio doe-mail.<?phpinclude "../config.php";$emailsender = "$e_mailremetente";/* Verifica qual é o sistema operacional do servidor para ajustar o cabeçalho de forma correta. */if(PATH_SEPARATOR == ";") $quebra_linha = "rn"; //Se for Windowselse $quebra_linha = "n"; //Se "não for Windows"// Passando os dados obtidos pelo formulário para as variáveis abaixo$nomeremetente = "Sistema gerenciador de vendas de Bebidas";$emailremetente = "$e_mailremetente";$emaildestinatario = "$e_maildestinatario";$comcopia = "";$assunto = "Novo pedido adicionado";$n_pedido = $numero_pedido= $_POST[n_pedido];$mensagemHTML = <P></P><P>Um novo pedido foi adicionado número</P><p><b><i>.$n_pedido.</i></b></p><hr>;$headers = "MIME-Version: 1.1" .$quebra_linha;$headers .= "Content-type: text/html; charset=iso-8859-1" .$quebra_linha;$headers .= "From: " . $emailsender.$quebra_linha;$headers .= "Cc: " . $comcopia . $quebra_linha;$headers .= "Bcc: " . $comcopiaoculta . $quebra_linha;$headers .= "Reply-To: " . $emailremetente . $quebra_linha;if(!mail($emaildestinatario, $assunto, $mensagemHTML, $headers ,"-r".$emailsender)){ $headers .= "Return-Path: " . $emailsender . $quebra_linha; mail($emaildestinatario, $assunto, $mensagemHTML, $headers );} ?>
    • 552.11.16 Menus e departamentos O aplicativo possui um menu personalizado para cada departamento,habilitando funções específicas a cada repartição. É realizado um rastreamento dasessão criada a partir do login, para determinar qual departamento o usuáriopertence. A função “switch()” do código abaixo, identifica que valor possui a variável,encaminhando um “include” para cada tipo de usuário.<script src="menu/js/menu.js" type="text/javascript"></script><link href="menu/css/menu.css" rel="stylesheet" type="text/css" /><link href="menu/css/pagina.css" rel="stylesheet" type="text/css" /><?phpsession_start();$departamento_usuario = $_SESSION["departamento_usuario"];switch ($departamento_usuario) { case 1: include "representante.php"; break; case 2: include "faturamento.php"; break; case 3: include "producao.php"; break; case 4: include "admin.php"; break; }?> Para evitar que um usuário consiga acessar uma página responsável por ummodulo não pertencente ao departamento a qual é registrado, é utilizadas funçõesde verificação de setor, sendo assim o usuário será alertado por um diálogoavisando que o acesso não está autorizado, caso esteja tentando acessarmanualmente um local não permitido. A figura abaixo representa o aplicativo sendo executado através de umnavegador, com o menu do usuário administrador e a página de cadastro declientes.
    • 56Figura 1: Tela do aplicativo com cadastro de clientesFonte: o autor Em toda página se encontra uma ou mais chamadas de funções parabloquear acesso a um departamento especifico. Esta função verifica a sessão dousuário, identificando em qual repartição pertence. O arquivo de verificação tambémpossui um script global para ser executada sempre quando for abrangido, essecódigo verifica se o usuário realmente realizou o login antes de obter qualquerconteúdo do aplicativo. O código do apêndice G é executado sempre que incluídoem outra página, e suas funções quando são chamadas especificamente.
    • 573 CONCLUSÃO A qualidade das informações inseridas no sistema são essências para atomada de decisões e organização gerencial da empresa. É importante que osoftware exija aos usuários operacionais, a inserção de todas as informaçõesnecessárias para poder automatizar um determinado processo de lançamentos depedidos, ordens de vendas ou especificação de carregamento. O gerenciamento deconhecimento é gerado através da utilização de emissões de relatórios com dadosconcisos. Este sistema deve estar disponível para acesso em qualquer lugar, visto anecessidade de usuários remotos pelo país inteiro, sendo assim é interessante, nãocriar mecanismos que possam proibir o acesso de uma determinada faixa delocalização. Para garantir a eficácia do conjunto do software é necessária autilização de treinamento ao usuário remoto e local. A criação dos diagramas para determinar processos e rotinas em que osistema deverá cumprir, moldam um padrão, que ajudam na sua construção eexpansão de seus módulos. A cada atualização, com a implementação de novasfunções, deverá ser realizada uma nova análise para que o contexto proposto nãoseja afetado em sua estrutura principal, garantindo que o aplicativo somente deveser melhorado quando adicionado mecanismos úteis ao objetivo. A criação de um sistema a partir de uma linguagem confiável e robusta foi degrande importância para atingir o objetivo planejado. O PHP é mundialmenteconhecido por ser uma linguagem legível, que ao mesmo tempo consegue construirprojetos complexos, com ambiente de missão critica. Validações locais garantem umgrande nível de interação com o usuário, permitindo que o desempenho do aplicativoseja melhorado, dividindo serviços de carga de dados entre o servidor e a plataformado cliente. O banco de dados MySQL que é totalmente compatível com a linguagemPHP, tem como principal característica sua velocidade, é utilizado quaseessencialmente para web, já que conta um desempenho superior para este nicho. Pode-se dizer que utilizar a internet como um meio para disponibilizar oacesso a um sistema portátil, representa uma grande facilidade de concentração edisponibilização das informações, onde usuários de vários departamentos podem
    • 58usufruir de sistema útil, tanto para vendedores quanto gerenciadores, organizandoos dados conforme as necessidades que os departamentos especificam. Para ampliação do projeto no futuro é necessário utilizar a informação geradapelo aplicativo de uma forma mais integrada com toda a empresa, é possível queseja implementado mecanismos de integração com outros aplicativos locais ouremotos, a fim de aproveitar os dados para serem utilizado em operações fiscais eadministrativas. Essa integração pode ser gerada, permitindo acessos simultâneosde outros aplicativos ao banco de dados, onde poderão resgatar dados paraemissão de uma nota fiscal ou lançamentos na contabilidade. Para garantir uma totalautomatização de todos os procedimentos decorrentes da vendas de bebidas énecessária uma grande integração com mais de um aplicativo.
    • 59 REFERÊNCIASALECRIM, Emerson. Conhecendo o Servidor Apache.2006. Disponível em:<http://www.infowester.com/servapach.php>. Acesso em: 21 ago. 2010.ALEXANDRE, Leandro. Validação de CPF e CNPJ no mesmo campo emJavaScript. 2009. Disponível em:<http://www.vivaolinux.com.br/script/Validacao-de-CPF-e-CNPJ-no-mesmo-campo-em-javascript>. Acesso em: 01 abr. 2011.ANTUNES LAMIM, Jonatham. Gerando PDFs com PHP e a classe FPD. 2010.Disponível em:<http://www.oficinadanet.com.br/artigo/php/gerando_pdfs_com_php_e_a_classe_fpdf_instalacao_e_primeiras_linhas_de_codigo>. Acesso em: 23 out. 2010.APACHE FRIENDS. XAMPP.2009. Disponível em:<http://www.apachefriends.org/pt_br/xampp.html>. Acesso em: 10 out. 2010.AURELIO, Dorival Eloy. JavaScript. 2004. Disponível em:<http://orbita.starmedia.com/~edaurelio/javascript.htm>. Acesso em: 23 out. 2010.BENTO, Marcelo; Convertendo data com PHP. 2009. Disponível em:<http://www.marcelobento.com.br/tag/converter-data/>. Acesso em: 25 abr. 2011COAR, Ken; BOWEN, Rich. Apache Guia Prático. Rio de Janeiro: Alta Books,2008. 272 p.DELLA VALLE, James; ULBRICH, Henrique Cesar. Universidade Hacker. 5. ed.São Paulo: Digerati Books, 2006. 352 p.DUARTE, Eber; Implementando Integridade Referencial no MySQL 2006.Disponível em: <http://www.devmedia.com.br/post-1996-Implementando-Integridade-Referencial-no-MySQL.html>. Acesso em: 12 abr. 2011.FERREIRA, Felipe. Linguagem PHP – Vantagens e Aplicações. 2010. Disponívelem: <http://www.artigonal.com/internet-artigos/linguagem-php-vantagens-e-aplicacoes-1788643.html>. Acesso em: 23 out. 2010.
    • 60FIGUEIREDO, Antonio. Administração de sistemas e segurança. 1999. Disponívelem: <http://www.ccuec.unicamp.br/revista/infotec/admsis/admsis6-1.html>. Acessoem: 25 out. 2010.FLANAGAN, David. JavaScript: O Guia Definitivo. 4 ed. São Paulo: Artmed, 2002.816 p.FOROUZAN, A. Behrouz. Comunicação de dados e redes de computadores.3.ed.São Paulo: Artmed, 2004. 840 p.GOURLEY, David; TOTTY, Brian. HTTP: TheDefinitiveGuide. Sebastopol, Ucrânia:O’Reilly Media, 2002. 635 p.FOWLER, Martin. UML essencial: um breve guia para a linguagem padrão demodelagem de objetos. 3. ed. Porto Alegre: Bookman, 2005. 165 p.LOGMAN, Wesley Addison. A history of HTML.1998. Disponível em:<http://www.w3.org/People/Raggett/book4/ch02.html>. Acesso em: 23 out. 2010.MADEIRA, Frederico; Suporte a transações. 2004. Disponível em:<http://imasters.com.br/artigo/2787/mysql/suporte_a_transacoes/>. Acesso em:14/04/2011.MAJER, Carlos. Desenvolvimento Web: Introdução ao AJAX. [São Paulo], 07maio. 2010. Disponível em: <http://www.ebah.com.br/desenvolvimento-web-introducao-ao-ajax-pdf-a48787.html>. Acesso em: 23 ago. 2010.MCLEAN, Epharaim; TURBAN, Efraim; WETHERBE, James. Tecnologia dainformação para gestão. 3. ed. São Paulo: Artmed, 2002. 645 p.MELO, Alexandro Altair; G.F. NASCIMENTO, Mauricio. PHP Profissional. SãoPaulo: Novatec, 2007. 464 p.MORONI, Herbert. Criação de sites em Ajax. São Paulo: Digeratti Books, 2007.128 p.MUTO, Claudio Adonai. PHP e MySQL – Guia Introdutório. 3. ed. Rio de Janeiro:Brasport, 2006. 412 p.
    • 61OTSUKA, Joice Lee. SAACI - Sistema de Apoio à Aprendizagem Colaborativa naInternet. Fluxograma. 1999. 127 f. Dissertação (Mestrado em Ciência daComputação) - Universidade Federal do Rio Grande do Sul, Porto Alegre, 1999.PAIVA, Raphael. Desmitificando o Ajax. Esquema. 2005. Disponível em:<http://www.jack.eti.br/www/arquivos/apostilas/web/apostila_ajax.pdf>. Acesso em:23 ago. 2010.PHP GROUP. PHP. 2010. Disponível em: <http://php.net/>. Acesso em: 23 out. 2010.PHPMYADMIN DEVEL TEAM. phpMyAdmin: About.2003. Disponível em:<http://www.phpmyadmin.net/home_page/index.php>. Acesso em: 19 out. 2010.PLATHEY, Oliver. FPDFLibrary. 2008. Disponível em: <http://www.fpdf.org>.Acesso em: 15 ago. 2010.REMOALDO, Pedro. Guia Pratico do Dreamweaver CS3 com PHP, JavaScript eAjax. Lisboa, Portugal:Centro Atlântico, 2008. 676 p.RODRIGUES DE FREITAS; Andrey. Pericia forense aplicada a informática:ambiente Microsoft. Rio de Janeiro: Brasport, 2006. 215 p.SANTOS, Alfredo. Quem mexeu no meu sistema?: Segurança em sistemas deinformação. Rio de Janeiro: Brasport, 2008. 212 p.SOMERA, Guilherme. Treinamento prático em CSS. São Paulo: Digeratti Books,2006. 160 p.SOUZA, Sandro J. A extensão MySQLi. 2007. Disponível em:<http://www.htmlstaff.org/ver.php?id=10071>.Acesso em: 22 ago. 2010.STALLINGS, William. Redes e Sistemas de Comunicação de Dados. Rio deJaneiro: Elsevier, 2005. 460 p.STEVENS, W. Richard; FENNER, Bill; RUDOFF, M. Andrew. Programação de RedeUnix. São Paulo: Artmed, 2004. 906 p.
    • 62STROPARO, Elder. Historia do MySQL. 2010. Disponível em:<http://elderstroparo.blogspot.com/2010/01/historia-do-mysql.html>. Acesso em: 23out. 2010.TRIACCA, Anderson. História do Javascript. Disponível em:<http://www.andersontriacca.com/index.php?Hist%F3ria-do-Javascript&id_postagem=2>. Acesso em: 15 out. 2010.TURBAN, Efraim; MCLEAN, Ephraim; WETHERBE, James. Tecnologia daInformação para Gestão. São Paulo: Artmed, 2002. 660 p.VIDEIRO, Rafael. Criação de bases de dados em linguagem SQL. Disponível em:<http://mysql.softonic.com.br/>. Acesso em: 20 out. 2010.VIEIRA, Leandro. As novas funcionalidade do Dreamweaver CS3. Disponível em:<http://www.imasters.com.br/artigo/5858/dreamweaver/as_novas_funcionalidades_do_dreamweaver_cs3/>. Acesso em: 22 out. 2010.WELLING, Luke; THOMSON, Laura. PHP e MySQL Desenvolvimento Web. Rio deJaneiro: Elsevier, 2003. 675 p.WORLD WIDE WEB CONSORTIUM. Extensible Markup Language (XML).Disponível em: <http://www.w3.org/XML/>. Acesso em: 15 out. 2010.
    • 63APÊNDICES
    • 64APÊNDICE A – Diagrama de sequência
    • 65APÊNDICE B – Diagrama de classes
    • 66 APÊNDICE C – Código HTML do formulário para a autenticação do usuário<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link href="menu/css/menu.css" rel="stylesheet" type="text/css" /><link href="menu/css/pagina.css" rel="stylesheet" type="text/css" /></style><br /><table width="400" border="0" align="center"><table width="400" height="144" border="0"align="center"> <form id="form1" name="form1" method="post" action="admin/logar.php"> <tr> <td width="94">&nbsp;</td> <td width="296"><h3><strong>Efetue o login</strong></h3></td> </tr> <tr> <td><div align="right">Usu&aacute;rio:</div></td> <td> <label> <input type="text" name="login" id="login" /> </label> </td> </tr> <tr> <td><div align="right">Senha:</div></td> <td> <label> <input type="password" name="senha" id="senha" /> </label> </td> </tr> <tr> <td><div align="right">Departamento:</div></td> <td><select name="dpto" id="dpto"> <option value="1">Representante</option> <option value="2">Faturamento</option> <option value="3">Producão</option> <option value="4">Admin</option> </select></td> </tr> <tr> <td height="37"></td> <td><input type=submit value=Logar class=botao /></td> </tr> </form></table></html>
    • 67 APÊNDICE D – Código PHP utilizado para cadastro<?phpinclude "../conexao.php";include "dataconverter.php";$id = $_POST[id];$nome = $_POST[nome];$endereco = $_POST[endereco];$uf = $_POST[uf];$cidade = $_POST[cidade];$enderecoentrega = $_POST[enderecoentrega];$data = $_POST[data];$observacoes = $_POST[observacoes];$usuario = $_POST[usuario];$id = preg_replace("/D+/", "", $id); // remove qualquer caracter não numérico$data = converterData($data); if($_POST[id]== and $_GET[funcao] != "excluir_cliente" and $_GET[funcao] != "editar_cliente" ) { echo "<script type=text/javascript>alert(Inclua o CNPJ do CLIENTE!);</script>"; echo "<script>window.location=../cliente.php;</script>"; } if($_POST[nome]== and $_GET[funcao] != "excluir_cliente") { echo "<script type=text/javascript>alert(Inclua o NOME!);</script>"; echo "<script>window.location=../cliente.php;</script>"; } if($_POST[endereco]== and $_GET[funcao] != "excluir_cliente") { echo "<script type=text/javascript>alert(Inclua o ENDERECO!);</script>"; echo "<script>window.location=../cliente.php;</script>"; } if($_POST[data]== and $_GET[funcao] != "excluir_cliente") { echo "<script type=text/javascript>alert(Inclua a data do cadastro!);</script>"; echo "<script>window.location=../cliente.php;</script>"; } if($_POST[uf]== and $_GET[funcao] != "excluir_cliente") { echo "<script type=text/javascript>alert(Selecione o Estado!);</script>"; echo "<script>window.location=../cliente.php;</script>"; } if($_POST[cidade]== and $_GET[funcao] != "excluir_cliente") { echo "<script type=text/javascript>alert(Inclua a cidade!);</script>"; echo "<script>window.location=../cliente.php;</script>"; } else if($_GET[funcao] == "gravar_cliente" and $_POST[id]!= and $_POST[nome]!= and$_POST[endereco]!= and $_POST[data]!= ) { $sql_gravar = mysql_query("INSERT INTO cliente (id_cliente, nome , endereco, uf,cidade,enderecoentrega, data, observacoes, usuario) value ($id,$nome,$endereco,$uf,$cidade,$enderecoentrega,$data,$observacoes,$usuario)"); echo "<script type=text/javascript>alert(Cliente Cadastrado!);</script>"; echo "<script>window.location=../cliente.php;</script>"; } else if($_GET[funcao] == "editar_cliente" and $_POST[nome]!= and $_POST[endereco]!=and $_POST[data]!=) { $id = $_GET[id];
    • 68 $retorno = $_GET[retorno]; $sql_alterar = mysql_query("UPDATE cliente SET nome=$nome,endereco=$endereco, uf=$uf, cidade=$cidade, enderecoentrega=$enderecoentrega,data=$data,observacoes=$observacoes WHERE id_cliente = $id"); header("Location: $retorno?nome_busca=$nome"); } if($_GET[funcao] == "excluir_cliente"){ $id = $_GET[id]; $retorno = $_GET[retorno]; $sql_del = mysql_query("DELETE FROM cliente WHERE id_cliente = $id"); header("Location: $retorno"); } ?>
    • 69 APÊNDICE E – Código de inclusão de pedidos<?phpinclude "../conexao.php";include "dataconverter.php";$condicao = $_POST[condicao];if($_GET[funcao]=="inclui_pedido") { $id_cliente = $_GET[id_cliente]; session_start(); $_SESSION[pedido_dados][id_cliente] = $id_cliente; header("location: ../pedido_inclui.php?funcao=editar_cliente");//&id_cliente=$id_cliente }if($_GET[funcao]=="incluir_iten") { $id_produto = $_GET[id_produto]; $quantidade = $_POST[quantidade]; $preco = $_POST[preco]; session_start(); $_SESSION[indice] = $_SESSION[indice]+1; $indice = $_SESSION[indice]; $_SESSION[pedido][$indice][id_produto] = $id_produto; $_SESSION[pedido][$indice][quantidade] = $quantidade; $_SESSION[pedido][$indice][preco] = $preco; $sql_ipi = mysql_query("SELECT ipi FROM produto WHERE id_produto = $id_produto"); if (isset($sql_ipi)){ while($linha_produto = mysql_fetch_array($sql_ipi)){ $tabela_ipi = $linha_produto[ipi]; } } $_SESSION[pedido][$indice][ipi] = $tabela_ipi; $_SESSION[pedido][$indice][total] = (($preco+$tabela_ipi)*$quantidade); //--- DESCOBRIR TOTAL DO PEDIDO $indice = $_SESSION[indice]; $_SESSION[pedido_dados][total] = $_SESSION[pedido_dados][total] +$_SESSION[pedido][$indice][total]; header("location: ../pedido_inclui.php?funcao=editar_cliente"); }if($_GET[funcao]=="adicionais") { $sql_adicionais = mysql_query("UPDATE pedido SET condpgto = ($condicao) whereid_pedido = ($id_pedido)"); $sql_adicionais = mysql_query("UPDATE pedido SET confirmado = (1) where id_pedido =($id_pedido)"); }//**CONFIRMAÇÃO DO PEDIDOif($_GET[funcao] == "confirmar"){ //--- PEDIDO session_start(); $id_cliente = $_SESSION[pedido_dados][id_cliente]; $vltotal = $_SESSION[pedido_dados][total];
    • 70 //---INSERINDO PEDIDO $login_usuario = $_SESSION["login_usuario"]; $sql_confirma_pedido = mysql_query("INSERT INTO pedido (id_cliente, valor, condpgto,login, carregamento) value ($id_cliente,$vltotal,$condpgto,$login_usuario,0)"); $tabela_pedido = mysql_query("SELECT max(id_pedido) FROM pedido"); if (isset($tabela_pedido)){ while($linha_pedido = mysql_fetch_array($tabela_pedido)){ $numero_pedido = $linha_pedido[max(id_pedido)]; } } $_SESSION[pedido_dados][id_pedido] = $numero_pedido; //---------ITENS $indice = $_SESSION[indice]; $contador_itens = 1; while ($contador_itens<=$indice) { $id_produto = $_SESSION[pedido][$contador_itens][id_produto]; $quantidade = $_SESSION[pedido][$contador_itens][quantidade]; $preco = $_SESSION[pedido][$contador_itens][preco]; $total_itens = $_SESSION[pedido][$contador_itens][total]; $sql_confirma_itens = mysql_query("INSERT INTO itens (id_produto, id_pedido, quantidade,vlunitario, vltotal) value ($id_produto,$numero_pedido,$quantidade,$preco,$total_itens)"); $contador_itens = $contador_itens+1; } $_SESSION[pedido_dados] = NULL; $_SESSION[pedido] = NULL; echo"<script LANGUAGE="Javascript">alert("Pedido cadastrado - Numero:$numero_pedido");</SCRIPT>"; echo "<script>window.location=../pedido_inclui.php;</script>";}//**INSERE ITEM NA EDIÇÃO DO PEDIDOif($_GET[funcao] == incluir_iten_edita){$id = $_POST[id_pedido];} ?>
    • 71 APÊNDICE F – Código de inclusão e baixas de ordens<?phpinclude "../conexao.php";include "dataconverter.php";if ($_POST[funcao] == "adicionar"){ $transportadora = $_POST[transportadora]; $motorista = $_POST[motorista]; $datacarreg = $_POST[datacarreg]; if ($transportadora == "" or $motorista == "" or $datacarreg == "") { echo "<script type=text/javascript>alert(Preencha todos os campos!);</script>"; echo "<script>window.location=../ordem.php;</script>"; } if ($_POST[id_pedido] != "") { $ordem_id1 = mysql_query("insert into ordem (quantidade, peso) values (0,0)"); $ordem_id2 = mysql_query("SELECT max(id_ordem) FROM ordem"); $ordem_id3 = mysql_fetch_array($ordem_id2); $ordem_id = $ordem_id3[max(id_ordem)]; $entregas = 0; foreach ($_POST[id_pedido] as $pedido_id) { $entregas = $entregas + 1; $sql = " update pedido set id_ordem = $ordem_id where id_pedido = $pedido_id"; if ($sql) { $sql = mysql_query($sql); } } $outras1 = mysql_query("select sum(peso), sum(quantidade) from pedido, produto, itens where pedido.id_ordem = $ordem_id and pedido.id_pedido = $pedido_id and itens.id_pedido = pedido.id_pedido and itens.id_produto = produto.id_produto"); if (isset($outras1)) { while ($linha_ordem = mysql_fetch_array($outras1)) { $peso = $linha_ordem[sum(peso)]; $quantidade = $linha_ordem[sum(quantidade)]; } }//--TRATAMENTO FINAL $peso = $peso * $quantidade; $datacarreg = converterData($datacarreg);//--INSERÇÃO FINAL $final = mysql_query("update ordem set quantidade = $quantidade, peso = $peso, entregas=$entregas, transportadora = $transportadora, motorista = $motorista, datacarreg = $datacarregwhere id_ordem = $ordem_id"); echo "<script type=text/javascript>alert(Ordem criada - Número: $ordem_id);</script>"; echo "<script>window.location=../ordem.php;</script>"; } else { echo "<script type=text/javascript>alert(Selecione algum pedido!);</script>"; echo "<script>window.location=../ordem.php;</script>"; }}//-- BAIXA DE ORDEMif ($_POST[funcao] == "baixar"){ if ($_POST[id_ordem] == "") { echo "<script type=text/javascript>alert(Selecione alguma ordem!);</script>"; echo "<script>window.location=../ordem_baixa.php;</script>";
    • 72 } if ($_POST[datacarreg] == "") { echo "<script type=text/javascript>alert(Cadastre a data de carregamento!);</script>"; echo "<script>window.location=../ordem_baixa.php;</script>"; } if ($_POST[id_pedido] != "" or $_POST[datacarreg] != "") { $datacarreg = converterData($_POST[datacarreg]); foreach ($_POST[id_ordem] as $ordem_id) { $sql = "update pedido, ordem set carregamento = 1, datacarreg = $datacarreg wherepedido.id_ordem = $ordem_id and ordem.id_ordem = $ordem_id"; $sql = mysql_query($sql); } echo "<script type=text/javascript>alert(Orden(s) baixadas);</script>"; echo "<script>window.location=../ordem_baixa.php;</script>"; }}?>
    • 73 APÊNDICE G – Verificação de departamento e usuário logado<?phpinclude "conexao.php";session_start();if (isset($_SESSION["login_usuario"]) AND isset($_SESSION[senha_usuario])) { $login_usuario = $_SESSION["login_usuario"]; $senha_usuario = $_SESSION["senha_usuario"]; $departamento_usuario = $_SESSION["departamento_usuario"]; $sql = mysql_query("SELECT * FROM usuario WHERE login = $login_usuario"); $cont = mysql_num_rows($sql); while ($linha = mysql_fetch_array($sql)) { $senha_db = $linha[senha]; $departamento_db = $linha[departamento]; } if ($cont == 0) { unset($_SESSION["login_usuario"]); unset($_SESSION["senha_usuario"]); unset($_SESSION["departamento_usuario"]); echo " <META HTTP-EQUIV=REFRESH CONTENT=0; URL=login.php> <script type="text/javascript"> alert("O nome de usuario nao corresponde."); </script>"; } if ($senha_db != md5($senha_usuario)) {//confere senha unset($_SESSION["login_usuario"]); unset($_SESSION["senha_usuario"]); unset($_SESSION["departamento_usuario"]); echo " <script type="text/javascript"> alert("Senha incorreta."); window.location=login.php;</script>"; }}else { echo " <script type="text/javascript"> alert("Autentique-se para entrar no sistema."); window.location=login.php;</script>"; }function dep_representante(){ if ($_SESSION["departamento_usuario"] == 1) { echo " <script type="text/javascript"> alert("Pagina nao autorizada."); window.location=login.php;</script>"; }}function dep_faturamento(){ if ($_SESSION["departamento_usuario"] == 2) { echo " <script type="text/javascript"> alert("Pagina nao autorizada."); window.location=login.php;</script>"; }}function dep_producao(){
    • 74 if ($_SESSION["departamento_usuario"] == 3) { echo " <script type="text/javascript"> alert("Pagina nao autorizada."); window.location=login.php;</script>"; }}function dep_admin(){ if ($_SESSION["departamento_usuario"] == 4) { echo " <script type="text/javascript"> alert("Pagina nao autorizada."); window.location=login.php;</script>"; }}?>
    • 75 APÊNDICE H – Sintaxe SQL para criação das tabelas do banco de dadosCREATE TABLE `itens` ( `id_itens` int(11) NOT NULL AUTO_INCREMENT, `id_produto` int(11) NOT NULL, `id_pedido` int(11) NOT NULL, `quantidade` int(11) DEFAULT NULL, `vlunitario` float DEFAULT NULL, `vlst` float DEFAULT NULL, `vltotal` float DEFAULT NULL, PRIMARY KEY (`id_itens`), KEY `id_pedido` (`id_pedido`), KEY `id_produto` (`id_produto`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;CREATE TABLE `cliente` ( `id_cliente` varchar(20) NOT NULL, `nome` varchar(255) NOT NULL, `endereco` varchar(255) NOT NULL, `uf` varchar(2) NOT NULL, `cidade` varchar(100) NOT NULL, `enderecoentrega` varchar(255) DEFAULT NULL, `data` date NOT NULL, `observacoes` varchar(255) DEFAULT NULL, `usuario` varchar(50) NOT NULL, PRIMARY KEY (`id_cliente`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;CREATE TABLE `ordem` ( `id_ordem` int(10) unsigned NOT NULL AUTO_INCREMENT, `quantidade` int(11) NOT NULL, `peso` float NOT NULL, `entregas` varchar(255) DEFAULT NULL, `transportadora` varchar(30) DEFAULT NULL, `motorista` varchar(30) DEFAULT NULL, `datacarreg` date DEFAULT NULL, PRIMARY KEY (`id_ordem`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;CREATE TABLE `pedido` ( `id_pedido` int(11) NOT NULL AUTO_INCREMENT, `id_ordem` int(11) DEFAULT NULL, `id_cliente` varchar(20) NOT NULL, `valor` float DEFAULT NULL, `desconto` int(11) DEFAULT NULL, `condpgto` varchar(60) DEFAULT NULL, `login` varchar(50) DEFAULT NULL, `carregamento` binary(1) NOT NULL, PRIMARY KEY (`id_pedido`), KEY `id_ordem` (`id_ordem`), KEY `id_cliente` (`id_cliente`), FULLTEXT KEY `id_cliente_2` (`id_cliente`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;CREATE TABLE `produto` ( `id_produto` int(11) NOT NULL AUTO_INCREMENT, `produto` varchar(60) NOT NULL, `peso` float NOT NULL,
    • 76 `data` date NOT NULL, `observacoes` varchar(255) DEFAULT NULL, `ipi` double DEFAULT NULL, PRIMARY KEY (`id_produto`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;CREATE TABLE `usuario` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(80) NOT NULL, `login` varchar(80) NOT NULL, `senha` varchar(80) NOT NULL, `email` varchar(255) NOT NULL, `departamento` int(1) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    • 77ANEXOS
    • 78 ANEXO A – Código JavaScript para validação de CNPJ e CPFfunction campo_numerico (){ if (event.keyCode < 45 || event.keyCode > 57) event.returnValue = false; } /*function cnpj_cpf verifica qual das funcoes tem que chamar cpf ou cnpj*/ function cnpj_cpf(campo,documento,f,formi){ form = formi; for (Count = 0; Count < 2; Count++){ if (form.rad[Count].checked) break; } if (Count == 0){ mascara_cpf (campo,documento,f); } else{ mascara_cnpj (campo,documento,f); } } function mascara_cnpj (campo,documento,f){ var mydata = ; mydata = mydata + documento; if (mydata.length == 2){ mydata = mydata + .; ct_campo = eval("document."+f+"."+campo+".value = mydata"); ct_campo; } if (mydata.length == 6){ mydata = mydata + .; ct_campo = eval("document."+f+"."+campo+".value = mydata"); ct_campo; } if (mydata.length == 10){ mydata = mydata + /; ct_campo1 = eval("document."+f+"."+campo+".value = mydata"); ct_campo1; } if (mydata.length == 15){ mydata = mydata + -; ct_campo1 = eval("document."+f+"."+campo+".value = mydata"); ct_campo1; } if (mydata.length == 18){ valida_cnpj(f,campo); } } function mascara_cpf (campo,documento,f){ var mydata = ; mydata = mydata + documento; if (mydata.length == 3){ mydata = mydata + .; ct_campo = eval("document."+f+"."+campo+".value = mydata"); ct_campo; } if (mydata.length == 7){ mydata = mydata + .;
    • 79 ct_campo = eval("document."+f+"."+campo+".value = mydata"); ct_campo; } if (mydata.length == 11){ mydata = mydata + -; ct_campo1 = eval("document."+f+"."+campo+".value = mydata"); ct_campo1; } if (mydata.length == 14){ valida_cpf(f,campo); }}function valida_cnpj(f,campo){ pri = eval("document."+f+"."+campo+".value.substring(0,2)"); seg = eval("document."+f+"."+campo+".value.substring(3,6)"); ter = eval("document."+f+"."+campo+".value.substring(7,10)"); qua = eval("document."+f+"."+campo+".value.substring(11,15)"); qui = eval("document."+f+"."+campo+".value.substring(16,18)"); var i; var numero; var situacao = ; numero = (pri+seg+ter+qua+qui); s = numero; c = s.substr(0,12); var dv = s.substr(12,2); var d1 = 0; for (i = 0; i < 12; i++){ d1 += c.charAt(11-i)*(2+(i % 8)); } if (d1 == 0){ var result = "falso"; } d1 = 11 - (d1 % 11); if (d1 > 9) d1 = 0; if (dv.charAt(0) != d1){ var result = "falso"; } d1 *= 2; for (i = 0; i < 12; i++){ d1 += c.charAt(11-i)*(2+((i+1) % 8)); } d1 = 11 - (d1 % 11); if (d1 > 9) d1 = 0; if (dv.charAt(1) != d1){ var result = "falso"; } if (result == "falso") { alert("CNPJ inválido!"); aux1 = eval("document."+f+"."+campo+".focus"); aux2 = eval("document."+f+"."+campo+".value = "); }}function valida_cpf(f,campo){ pri = eval("document."+f+"."+campo+".value.substring(0,3)"); seg = eval("document."+f+"."+campo+".value.substring(4,7)"); ter = eval("document."+f+"."+campo+".value.substring(8,11)"); qua = eval("document."+f+"."+campo+".value.substring(12,14)"); var i; var numero;
    • 80 numero = (pri+seg+ter+qua); s = numero; c = s.substr(0,9); var dv = s.substr(9,2); var d1 = 0; for (i = 0; i < 9; i++){ d1 += c.charAt(i)*(10-i); } if (d1 == 0){ var result = "falso"; } d1 = 11 - (d1 % 11); if (d1 > 9) d1 = 0; if (dv.charAt(0) != d1){ var result = "falso"; } d1 *= 2; for (i = 0; i < 9; i++){ d1 += c.charAt(i)*(11-i); } d1 = 11 - (d1 % 11); if (d1 > 9) d1 = 0; if (dv.charAt(1) != d1){ var result = "falso"; } if (result == "falso") { alert("CPF inválido!"); aux1 = eval("document."+f+"."+campo+".focus"); aux2 = eval("document."+f+"."+campo+".value = "); }}