Home | @busar | FAQ | Notícias | Processos | Imprimir | CADASTRO | ATUALIZAÇÃO | PAGAMENTO | IP .235
ABUSAR e INTERNET 
Apresentação
Como se inscrever
Benefícios
Atualizar Cadastro
Teste de LOG OFF
Perguntas freqüentes
Links recomendados
Contatos
Custos

Biblioteca
Dados Internet Brasil 
Material de imprensa
Notícias: News Fórum
Notícias publicadas
Termos/Cond. de Uso
Circulares
Linha do Tempo

LEGISLAÇÃO
Justiça
Processos
Regulamentação Anatel
Documentos
Consulta Pública 417

TECNOLOGIA
Manuais
Modems - Configuração
Conexão/Traceroute
Autenticação
Tutoriais
Tecnologias
VoIP
Portas
Provedores
Antivirus
Hardware Cabos
Linux: dicas de uso
Redes privadas VPN
Softwares (download)

FTP Abusar Pitanga

SEÇÕES
AcesseRapido
ADSL
AJato
BRTelecom
Cabo
Humor
Neovia
Rádio
Sercomtel
StarOne
TV Digital
Velox
Vesper Giro
Virtua

Serviços ModemClub

SpeedStat - Teste sua conexão
Mostra IP
- Descubra seu IP e Host Name
Suporte ModemClub

Fórum Banda Larga

Clube das Redes
Clube do Hardware
Guia do Hardware
Fórum GDH
Fórum PCs
InfoHELP - Fórum
Portal ADSL - Fórum
PCFórum
- Fórum
Tele 171

Fale com a ABUSAR Material de imprensa
Copyleft © 2002 ABUSAR.org
Termos e Condições de Uso

Speakeasy Speed Test

OneStat



Manipulando Banco de Dados via Internet
com ferramentas gratuitas

Artigo Original formato RTF compactado bdweb.zip 118k

UNIVERSIDADE REGIONAL INTEGRADA DO ALTO URUGUAI E DAS MISSÕES
URI – CAMPUS DE ERECHIM

DEPARTAMENTO DE ENGENHARIAS E CIÊNCIA DA COMPUTAÇÃO
CURSO DE GRADUAÇÃO EM INFORMÁTICA

Lucas Lopes dos Santos
Ronaldo do Amaral

Prof. Jacques Duílio Brancher
ORIENTADOR

ERECHIM/RS, JULHO DE 2000


MANIPULANDO BANCO DE DADOS VIA INTERNET COM FERRAMENTAS GRATUITAS

Trabalho apresentado como requisito à obtenção do grau de Bacharel em Informática pela Universidade Regional Integrada do Alto Uruguai e das Missões – URI, Campus de Erechim sob orientação do Professor Jacques Duílio Brancher
ERECHIM/RS, JULHO DE 2000

SUMÁRIO
SUMÁRIO III
RESUMO VI
ABSTRACT VII
LISTA DE ABREVIATURAS VIII
ÍNDICE DE FIGURAS IX
ÍNDICE DE TABELAS X
INTRODUÇÃO 11
1. LINUX 13
1.1. UM BREVE HISTÓRICO DO LINUX 13
1.2. DISTRIBUIÇÕES DO LINUX 14
1.3. INSTALAÇÃO DO LINUX 15
2. MYSQL 17
2.1. O QUE É MYSQL? 17
2.2. BREVE HISTÓRICO 17
2.3. POR QUE MYSQL? 18
2.4. PRINCIPAIS CARACTERÍSTICAS 18
2.5. POLÍTICA DE USO NA WEB 19
U$ 40 19
U$ 25 19
2.6. INFORMAÇÕES BÁSICAS SOBRE INSTALAÇÃO. 20
2.7. COMPATIBILIDADE DO BANCO MYSQL COM A LINGUAGEM SQL 21
2.8. TRANSAÇÕES 22
2.9. STORE PROCEDURES E TRIGGERS 23
2.10. SEGURANÇA E PRIVILÉGIOS DE ACESSO 23
2.10.1. User names e password 23
2.11. COMO FUNCIONA A CONEXÃO AO MYSQL 25
2.12. PRINCIPAIS FERRAMENTAS PARA UTILIZAÇÃO DO MYSQL 26
2.12.1. MySQL 26
2.12.2. Mysqladmin 26
3. PERSONAL HOME PAGE(PHP) 29
3.1. O QUE É PHP ? 29
3.2. HISTÓRICO 30
3.3. BANCOS DE DADOS 31
3.4. INSTALAÇÃO EM SISTEMAS UNIX 32
3.5. CONFIGURAÇÃO 34
3.6. SINTAXE BÁSICA 35
3.6.1. Delimitadores 35
3.6.2. Separador de Instruções 36
3.6.3. Definição de Variáveis 36
3.6.4. Comentários 36
3.7. EXEMPLOS 37
3.7.1. Um exemplo simples 37
3.7.2. Exemplo de PHP com formulários HTML 38
3.7.3. Exemplo do PHP acessando uma base de dados 39
4. APACHE WEB SERVER 41
4.1. O QUE É UM SERVIDOR WEB 41
4.2. O SERVIDOR APACHE 41
4.3. BREVE HISTÓRICO 42
4.4. INSTALAÇÃO 42
4.4.1. Os módulos do Apache 43
4.4.1.1. O módulo PHP 43
4.5. CONFIGURAÇÃO 44
4.5.1. Arquivos de configuração 44
4.5.1.1. Httpd.conf 44
4.5.1.2. Srm.conf 44
4.5.1.3. Access.conf 45
4.6. PROTOCOLO SSL (SECURE SOCKET LAYER) 45
5. IMPLEMENTAÇÃO 47
5.1. FLUXOGRAMA 48
5.1.1. Descrição detalhada dos módulos 49
5.1.1.1. Módulo 1 – Fazer Prova Virtual 49
5.1.1.2. Módulo 2 – Busca Rápida 50
5.1.1.3. Módulo 3 – Consultar Questões 50
5.1.2. Descrição do Fluxograma 51
5.2. MODELAGEM DOS DADOS 52
5.2.1. Descrição das Tabelas 52
5.2.2. Modelo E-R (Entidade - Relacionamento) 53
5.2.3. Dicionário de Dados 54
5.3. SINTAXE SQL PARA CRIAÇÃO DAS TABELAS 54
5.4. DESCRIÇÃO DAS FUNÇÕES PHP UTILIZADAS 55
5.5. IMPLEMENTAÇÃO PHP E HTML 57
5.5.1. Index.html – Home Page 57
5.5.2. Prova.html 58
5.5.3. Consulta.html 59
5.5.4. Prova.php3 60
5.5.4.1. Concatenação das variáveis 63
5.5.5. Consulta.php3 64
5.5.6. Corrige.php3 67
5.5.7. Buscarap.php3 68
CONCLUSÕES 70
REFERÊNCIAS BIBLIOGRÁFICAS 72

Resumo

O presente trabalho tem como objetivo primordial definir um conjunto de ferramentas gratuitas para plataforma Linux que possam cobrir todas as etapas do desenvolvimento de um Web Site com manipulação de uma base de dados. Partiu-se inicialmente para o estudo de quais seriam as ferramentas necessárias e disponíveis para a instalação de um servidor Web. A partir disto foi implementado um Site para simulação de prova de vestibular. Este site tem como característica a possibilidade de um usuário consultar questões, gerar provas virtuais, fazer busca por palavra-chave, em um banco de dados armazenado no servidor.

Sendo o desenvolvimento prático de um site o objetivo final do trabalho bem como a simulação de um servidor Web, iniciou-se o processo de definição dos tipos de ferramentas e a escolha entre as opções disponíveis. Seguiu-se então o estudo das ferramentas escolhidas: sistema operacional Linux, banco de dados MySQL, servidor Apache Web Server e a linguagem de programação PHP. Após concluído o estudo, começou a criação do servidor Web com a instalação e configuração em forma padrão das ferramentas acima citadas em um computador pessoal. Com o servidor Web devidamente configurado, vieram os testes do funcionamento da linguagem de programação PHP para acesso à base de dados MySQL. O próximo passo foi a implementação do site baseada na construção da base de dados, definição da estrutura do site, implementação dos scripts PHP que geram as páginas HTML através das consultas ao banco de 
dados, e também as páginas HTML simples.

Com esse estudo teórico e prático, observou-se a grande utilidade de bancos de dados em um Web Site. Pois permite a implementação de várias soluções que dinamizam o conteúdo de um site, facilitam sua administração, possibilita a criação de aplicações cliente-servidor completas, comércio eletrônico e todas as facilidades que uma base de dados pode oferecer. Mesmo sendo uma solução gratuita, mostrou-se bastante eficiente e capaz de ser solução para quase todos os tipos de Web Site.

Palavras-chaves: Internet, PHP, MySQL, Linux, Apache, Site.

Abstract

The present work has as its primordial objective to define a set free tools for the Linux platform  that can cover all the stages of development of a Web Site with the manipulation of a database. It was initially started the study of which tools were necerrary and available for the installation of a Web Server. From that, a Site to simulate college entrance exams was implemented. This site has as its characteristics the possibility of a user to consult tasks, generate virtual tests and search for keywords in a database loaded in the server.

Being the practical development of a site the final objective of the work, as well as the simulation of a Web Server, the process to define the kind of tools and the choice among the available options was started. Following that, the study of the chosen tools: Linux operational system, MySQL database, Apache Web Server and PHP programming language. After the conclusion of the study, the creation of the Web Server with the installation and configuration in pattern form of the tools aforementioned in a personal computer. With the Web Server appropriately configured, the tests for the functioning of PHP programming language were made for the access to MySQL database. The next step was the implementation of the site based in the construction of the database, definition of the site structure, implementation of PHP scripts that generate HTML pages, through consultation of the database and simple HTML pages as well.

It was observed the great utility of database in a Web Site with this theoretical and pratical study, as they allow the implementation of several solutions that make the content of a site dynamic, make its management easier, make possible the creation of complete client-server applications, e-commerce  and all the facilities that a database can ofter. Even being a free solution, it has shown to be quite efficient and capable to be the solution for almost all kinds of Web Sites.

Keywords: Internet, PHP, MySQL, Linux Apache, Site.

Lista de Abreviaturas

API – Interface de programação de aplicativos
ASP – Active Server Page
CGI – Common Gateway Interface
FTP – File Transfer Protocol
HTML – Hyper Text Markup Language
HTTP – Hyper Text Transfer Protocol
HTTPs – Hyper Text Transfer Protocol Secure
NCSA – Centro Nacional de Aplicações para Supercomputação
PHP – Personal Home Page
PHP/FI – Personal Home Page/Form Interpret
RPM – RedHat Package Manager
SQL – Structured Query Language
SSL – Secure Socket Layer
URL – Uniform Resource Locator
WWW – World Wide Web

Índice de Figuras

FIGURA 3.1 - EXEMPLO DE CÓDIGO PHP EMBUTIDO EM UM CÓDIGO HTML. 29
FIGURA 3.2 - EXEMPLO DE ALTERNÂNCIA ENTRE OS MODOS PHP E HTML 30
FIGURA 3.3 - PASSOS PARA INSTALAÇÃO DO PHP EM SISTEMAS UNIX 32
FIGURA 3.4 - EXEMPLO DE COMENTÁRIO DE UMA LINHA EM PHP 37
FIGURA 3.5 - EXEMPLO DE COMENTÁRIO DE MAIS DE UMA LINHA EM PHP 37
FIGURA 4.1 - GRÁFICO COMPARATIVO DA UTILIZAÇÃO DO APACHE NO MUNDO 42
FIGURA 4.2 - COMPARAÇÃO ENTRE PHP COMO UM CGI E UM MÓDULO APACHE 43
FIGURA 5.1 - FLUXOGRAMA DA SEQÜÊNCIA DE AÇÕES EXECUTADAS DURANTE O PROCESSO DE 
VISITA DE UM USUÁRIO À HOME PAGE IMPLEMENTADA 48
FIGURA 5.2 - MODELO E-R. 53

Índice de Tabelas

TABELA 2.1 - POLÍTICA DE USO DO MYSQL NA WEB 19
TABELA 2.2 - TIPOS DE VARIÁVEIS SUPORTADAS PELO MYSQL 22
TABELA 2.3 - TABELA USER DO MYSQL 24
TABELA 2.4 - TAREFAS SENDO EXECUTADAS NO SERVIDOR 27
TABELA 3.1 - HABILITAÇÃO DO BANCO DE DADOS DURANTE A INSTALAÇÃO DO PHP. 33
TABELA 3.2 - EXEMPLOS DE CONFIGURAÇÃO DO PHP. 35
TABELA 5.1 - DESCRIÇÃO DOS CAMPOS DA TABELA QUESTÕES. 53
TABELA 5.2 - DESCRIÇÃO DOS CAMPOS DA TABELA RESPOSTA. 53
TABELA 5.3 - DICIONÁRIO DE DADOS DA TABELA QUESTÕES. 54
TABELA 5.4 - DICIONÁRIO DE DADOS DA TABELA RESPOSTA. 54

Introdução

A Internet, a grande rede mundial de computadores, é hoje a maior força propulsora em quase todos os segmentos da informática, uma revolução nos meios de informação sem limites e em plena expansão.

Nos dias de hoje é possível compartilhar informações de todos os tipos , desde simples textos a imagens tridimensionais, de sons a vídeos de última geração com um simples clique, seja do mais remoto lugar aos grandes centros, tudo isso graças a Internet.

Atualmente esse processo de compartilhamento de informações vem criando novas formas de negociação, remodelando completamente o sistema de logística das empresas, estreitando ligações comerciais e pessoais. Todas essas informações e interação entre as partes envolvidas pode-se dar através de bancos de dados, independente de plataforma de hardware, sistema operacional, topologia de rede, aplicativo ou localização geográfica. Pode-se por exemplo estreitar a ligação de um representante de uma industria, fazendo um pedido via internet, inserindo os dados do pedido automaticamente no banco de dados da empresa, disponibilizando informações para a área de produção e esta para a expedição, transferindo parte da cadeia de produção para a internet.

Esse processo de utilização dos conceitos cliente-servidor, só era possível dentro de um espaço físico pequeno, ou com recursos tecnológicos avançados e caros. Hoje desenvolvem-se aplicativos inteiros que utilizam a Web como interface para acesso a banco de dados. Dentre os inúmeros sistemas pode-se citar o PHP, o ASP e o Cold Fusion.

Tendo em vista a crescente evolução destas ferramentas e sobretudo a sua especialização, optou-se neste trabalho por um segmento que ainda possui muito a ser desenvolvido que é o software gratuito. Assim, buscou-se identificar as partes componentes do sistema, que são:

a) Sistema Operacional - Linux
b) Servidor - Apache Web Server
c) Banco de Dados - MySQL
d) Linguagem de Programação - PHP

A motivação inicial para a escolha das ferramentas acima citadas foi o custo, que é nulo. 
Percebeu-se com o desenvolvimento uma série de outras facilidades que vieram a corroborar a idéia inicial que se tinha.

Com o objetivo de exemplificar a utilização das ferramentas, desenvolveu-se um ambiente de servidor de páginas Web. Nesse ambiente, implementou-se um site que permite ao usuário realizar provas virtuais de concurso vestibular, bem como consultas às questões cadastradas em um banco de dados.

Assim, o presente trabalho busca apresentar uma solução eficiente, completa e barata para um servidor Web que interprete scripts PHP que acessam o servidor MySQL. Para este fim, foi dividido da seguinte maneira:

No primeiro capítulo é apresentado o sistema operacional utilizado, o Linux, incluindo um breve histórico, as distribuições existentes e algumas dicas de instalação.

O servidor  de banco de dados MySQL está no segundo capítulo do trabalho, que contém suas principais características, as bases da instalação, sua utilização na Web, suas ferramentas clientes e alguns conceitos da linguagem SQL.

O terceiro capítulo do trabalho trata da linguagem de programação PHP, conceituando-o, apresentando os processos de instalação e configuração, descrevendo uma idéia básica da sintaxe da linguagem e citando alguns exemplos.

No quarto capítulo discorre o servidor Apache Web Server, mostrando o funcionamento básico de um servidor Web, os processos de instalação e configuração básica e descrevendo também sobre o protocolo SSL.

No quinto e último capítulo está documentada a implementação realizada neste trabalho. 
Abordando todo o seu processo de desenvolvimento desde a sua esquematização, passando pela modelagem dos dados, e chegando até a codificação em PHP e HTML.

1. Linux

Neste capítulo será abordado o sistema operacional Linux, iniciando com um breve histórico, passando pela descrição e comentários de algumas das principais distribuições e finalizando com algumas dicas e características do processo de instalação do mesmo.

1.1. Um breve histórico do Linux

"O sistema operacional Linux é uma versão gratuita distribuida do primeiro UNIX desenvolvido por Linus Torvalds na Universidade de Helsinque na Finlândia. O UNIX é um dos sistemas operacionais mais populares do mundo por causa de sua grande base de suporte e distribuição" [JAM 99]. O desenvolvimento do Linux contou com a participação de vários programadores UNIX e especialistas em Internet, dando a qualquer um que possuísse algum conhecimento e experiência necessários a possibilidade de desenvolver e até mesmo alterar o sistema.

Foi inicialmente desenvolvido como um passatempo para Linus. Foi inspirado no Minix, um pequeno sistema UNIX desenvolvido por Andy Tannenbaum.

Em agosto de 1991 a versão 0.01 ficou pronta, mas nenhuma publicação foi feita para esta versão, suas fontes não foram nem sequer executadas. 

Dois meses depois, em 5 de outubro de 1991, Linus lançou a primeira versão oficial do Linux, a versão 0.02, porém pouco acrescentava em relação à versão anterior. Depois da versão 0.03, Linus desenvolveu o sistema até a versão 0.10, quando mais pessoas começaram a trabalhar no desenvolvimento. Dando seguimento ao sistema, Linus elevou o número da versão para 0.95, e segundo ele, logo estaria pronto para o lançamento de uma versão oficial.

Duas importantes fontes de software para o desenvolvimento do Linux foram o projeto GNU da Free Software Fundation (Fundação de Software Livre), uma organização de porte internacional que suporta a apóia projetos diversos ligados ao código livre, e os trabalhos em curso na Universidade de Berkeley. Destas duas fontes saíram diversos dos atuais utilitários e aplicativos do Linux, como o compilador C e os servidores de rede, entre outros.

Após passar por várias versões, o Linux é hoje um clone do UNIX completo. Possuindo compatibilidade com praticamente todos os grandes pacotes gratuitos de software. As versões disponíveis estão em vários idiomas, possuindo as variadas aplicações, processadores de texto, suportando redes e gerenciadores de banco de dados, e outras.

1.2. Distribuições do Linux

Sendo o Linux um software gratuito, a sua distribuição não é controlada por nenhuma organização ou entidade. Por isso, qualquer cidadão está apto à distribui-lo. Mas existem algumas empresas que cobram pela mídia.

Isso ocorre porque uma empresa pode obter gratuitamente o núcleo do Linux, trabalhar em cima desse núcleo, adicionar interfaces gráficas, aplicações, documentar e vender este pacote. Assim foi o surgimento das versões comerciais.

A característica de ser um software gratuito onde qualquer pessoa pode manipulá-lo, torna o Linux um sistema operacional de muitas distribuições. As distribuições disponíveis podem variar das mais completas, que vêm com todo o software que você precisa e mais alguns aplicativos, até as mais "enxutas", que são indicadas para usuários que não dispõem de muito espaço em disco. Essas versões "enxutas" possuem apenas o básico necessário para o seu funcionamento.

A seguir serão apresentadas e comentadas algumas distribuições do Linux disponíveis atualmente:
a) Red Hat:  Esta distribuição tem anexada ao núcleo do sistema recursos de programas de configuração de recursos de sistema, interfaces gráficas, especializações para cliente e servidor, entre outras. A característica forte dessa distribuição é a facilidade de instalação. "O processo de instalação é feito através do pacote RPM (Red Hat Package Manager), com ele toda a estrutura de funcionamento do software é transferida para o disco, nos locais apropriados, facilitando a atualização do sistema. Junto com a distribuição Red Hat são fornecidas as interfaces gráficas X-Windows e KDE" [JAM 99].
b) Slackware: É uma versão que apesar de não suportar os pacotes da Red Hat, traz consigo um conversor que permite trabalhar com eles. O Slackware possui opções de segurança, como por exemplo, o de avisar que uma função de inicialização do sistema (script) foi alterada e que isto poderá trazer problemas. Possui a interface gráfica X-Windows e o gerenciador de janelas fvwm95.
c) Caldera: É uma versão voltada para uso empresarial. Possui uma série de drivers, ferramentas e recursos para interligação do Linux em rede, como servidor. Esta versão vem com uma licença de um módulo de  desenvolvimento do banco de dados Sybase e o ambiente gráfico KDE, incorpora também compatibilidade com o mecanismo RPM da Red Hat.
d) Debian: É a versão indicada para programadores mais experientes. Possui a sua própria estrutura de pacotes, o formato DEB, que é utilizado para instalação do sistema e dos aplicativos. Os especialistas o consideram a ferramenta de instalação mais versátil do mercado.
e) Conectiva: A distribuição Conectiva é um trabalho feito em cima da versão Red Hat, incluindo traduções de mensagens e textos de apoio para o português e definições de hardware que normalmente são usados no Brasil, como placas de controle, monitores, impressoras, mouses, etc.

1.3. Instalação do Linux

O objetivo de se instalar um sistema operacional é a de possibilitar dar inicio ao uso do computador. Instalar um sistema é transferir para uma unidade de disco uma parte deste sistema.

A instalação do Linux, por ele ser um sistema complexo, abrangente e escrito por diversas pessoas, não é 
considerada umas das tarefas mais simples. Ele difere-se do sistema operacional Windows, por exemplo, por possuir diversas formas de instalação, isso ocorre devido à duas peculiaridades do Linux:
a) Possui variadas fontes de instalação, podendo ser instalado a partir de um ou dois CDs, utilizando-se ou não um disquete de inicialização. Uma outra forma é via Internet ou via FTP (File Transfer Protocol). Ou ainda poderá ter seu conteúdo de instalação copiado para uma unidade de disco de um computador e a partir dali ser instalado.
b) Possui diferentes distribuições. Como cada distribuição tem suas características e finalidades, o processo de instalação de cada uma delas poderá ter seqüência, duração e procedimentos diversos.

A seguir serão descritos alguns recursos mínimos de máquina necessários para a instalação do Linux, e algumas características de dispositivos que seria importante o usuário ter conhecimento antes de iniciar o processo de instalação:
a) Processador: Processadores da Intel igual ou superior aos 386, processadores não-Intel como: Alpha, SPARC, Power PC, são suportados pelo Linux.
b) Memória: O Linux requer no mínimo 2 MegaBytes de memória, no caso de servidores de rede recomenda-se no mínimo 16 MegaBytes.
c) Discos e Controladoras:  O Linux requer uma configuração especial para computadores que possuam 
controladoras SCSI, caso contrário, com discos normais será necessário criar uma partição para a instalação. 
Isso significa que o Linux poderá ser instalado no mesmo disco do DOS ou Windows, só que em partição 
diferente. O espaço da partição recomendável dependerá da quantidade de pacotes que serão instalados, a versão mínima do Linux requer pelo menos 20 MegaBytes, mas instalando-se aplicativos, editores de texto, ambientes gráficos esse valor poderá chegar a 200 MegaBytes.
d) Monitor de Vídeo: A configuração do monitor de vídeo requer o conhecimento de que placa de vídeo e monitor estão instalados no computador. Além de modelo e fabricante, deve-se também passar como parâmetro no momento da instalação a quantidade de memória de vídeo que se possui, freqüências usadas pelo monitor, tipos de recursos, etc.

2. MySQL

2.1. O que é MySQL?

MySQL é um banco de dados relacional,  desenvolvido para plataformas Linux – like, OS/2, Windows [YAR 99]. Sendo um software de livre distribuição para plataformas não-Windows que o utilizam em um servidor Web.

MySQL é um servidor multiusuário, multitarefa, compatível com o padrão SQL (Structured Query language – Linguagem de Consulta estruturada), linguagem essa amplamente utilizada para manipulação de dados em RDBMS (Banco de dados Relacionais), sendo considerada um ferramenta de  manipulação de base de dados de tamanho moderado.

As principais características que destacam MySQL são: sua velocidade proporcionada pela sua implementação leve que não inclui na totalidade o suporte as instruções SQL; sua natureza de distribuição gratuita; facilidade de integração com servidor Web e linguagens de programação de desenvolvimento de sites dinâmicos, especialmente a linguagem PHP.

2.2. Breve Histórico

"O MySQL foi criado por Michael Widenius na companhia suíça TcX. Por volta de 1979 Michael desenvolveu um banco de dados chamado UNIREG, sendo rescritos em várias linguagens desde então" [YAR 99]. Em 1994, a empresa TcX começou o desenvolvimento de aplicações baseadas na Web, tendo como base o banco UNIREG, porém esse banco possuía muito "overhead" para obter sucesso em uma aplicação para geração de páginas dinâmicas na Web. Então a empresa TcX começou a procurar por outro banco o mSQL, uma ferramenta baseada em SQL mas com características pobres não possuindo por exemplo suporte a índices, e com desempenho inferior ao UNIREG.

Foi então que o desenvolvedor do banco UNIREG contatou o David Hughes criador do mSQL, para saber do interesse dele em unir os dois bancos. Sendo positivo o interesse de David , a empresa TcX resolveu desenvolver um novo banco, mas mantendo ao máximo a compatibilidade com mSQL. TcX foi esperta o suficiente para não reinventar o que já estava bem feito, ela construiu seu servidor baseado na estrutura que já estava montada do UNIREG e utilizou grande número de utilitários escritas para mSQL e fez API's para o novo servidor praticamente iguais ao mSQL. Como resultado usuários do mSQL que decidissem mudar para o novo servidor da TcX, teriam apenas que fazer pequenas e simples mudanças nos códigos existentes.

Então foi me maio de 1995 que, definitivamente, a primeira versão do MySQL foi lançada. Um dos parceiros da TcX sugeriu a distribuição do servidor na Internet, o objetivo disso era a utilização de um modelo pioneiro desenvolvido por Aladdin Peter Deutsch. O resultado foi um maior flexibilidade em sem "copyright", que fez do MySQL mais difundido gratuitamente do que mSQL.

2.3. Por que MySQL?

Sendo a concepção inicial do trabalho a utilização de ferramentas de livre distribuição para plataforma Linux-GNU, e o desenvolvimento de uma aplicação de banco de dados utilizando a Web como interface, fez-se necessário a escolha de um banco de dados que permitisse explorar as características básicas para implementação de uma aplicação cliente-servidor.

Entre as possibilidades encontradas surgiram três bancos de dados: MySQL, PostgreSQL e Interbase. O servidor PostgreSQL destacou-se por suas características de banco de dados objeto-relacional, permitindo explorar todas as possibilidades dos bancos relacionais, porém estendendo funções como classes, herança. 

No processos de instalação foram encontradas dificuldades no que diz respeito a integração com o servidor Web, não sendo possível o acesso pela linguagem PHP.

O MySQL foi o banco de dados escolhido por apresentar extensa documentação, atualmente mais de 10 livros, milhares de sites na internet, mas principalmente pela sua fácil instalação e integração com o servidor Web. 

Sua instalação através de RPM (RedHat Package Manager – Gerenciados de pacotes RedHat), é um processo simplificado, sendo criado toda a estrutura interna de arquivos no sistema operacional, bem como execução de scripts de inicialização e ajustes em arquivos de inicialização no servidor Web e módulo PHP.

2.4. Principais características

a) MySQL é um banco de dados multiprocessado, significando que pode utilizar vários processadores ao mesmo tempo.
b) Possui API's para C, C++, Java,  Perl, PHP, Phyton e TCL.
c) Foi desenvolvido para várias plataformas incluindo ambientes Unix, OS/2 e Windows.
d) Permite operações e funções nas cláusulas select e where,  bem como suporte as funções SQL(group by , order by ), além de funções de grupo como:  Count(), avg(), sum(), std(), max(), min().
e) Permite a seleção de diferentes tabelas de diferentes bases de dados em uma mesma query.
f) Suas características de privilégio de password são bastante flexíveis, permitindo inclusive a 
validação por "host".
g) Possui algoritmos de criptografia de password, fornecendo assim segurança aos dados gravados nas tabelas.
h) Permite a utilização de até 16 índices por tabela.
i) Capacidade para manipular bancos com até 50 milhões de registros.
j) MySQL foi escrito em C e C++
k) Permite conexões via TCP/IP
l) Permite acesso via ODBC.
m) Possui instruções para extração de informações relativas a tabelas, bancos, índices.

2.5. Política de uso na Web

A utilização de MySQL em sistemas operacionais não-Windows é gratuita se utilizada com um servidor WEB, não necessitando assim  de licença para uso. Isso é válido mesmo que as aplicações Web que utilizem o banco sejam para fins comerciais, excluindo-se a comercialização do MySQL.

O suporte para MySQL pode ser contratado, no entanto para isso existem contratos de manutenção,  sendo esses restritos as áreas de cobertura da equipe.

Apesar de ser distribuído livremente para uso na Web e em outras várias situações, que não cabem aqui serem mencionadas, existem vários tipos de utilização no qual se faz necessário a aquisição de licenças de uso, para citar alguns exemplos de valores, segue tabela 2.1 .

Número de licenças   

Valor por cópia

1   

U$ 200

10   

U$ 150

50   

U$ 120

100-999   

U$ 40

   

U$ 25

Tabela 2.1  - Política de uso do MySQL na Web
Valores extraídos da documentação oficial – Fev/2000

2.6. Informações básicas sobre instalação.

O MySQL possui diversas versões, possuindo dois métodos de instalação: um através da compilação da distribuição dos fontes, a outra através da instalação dos binários.

No desenvolvimento deste trabalho foi utilizada a versão 3.22.25 de distribuição binária. 
Normalmente o MySQL possui um versão beta, a última a estar disponível, porém nem sempre é a versão mais estável, sendo assim, a melhor escolha deve ser sempre  a da última versão estável.

Para obter um cópia do servidor MySQL é possível utilizar vários sites ao redor do mundo, que possuem as versões disponíveis para download, ou a utilização dos pacotes que acompanham a maioria das distribuições Linux.

Neste trabalho foi explorada apenas o processo de instalação sobre distribuição binária com a utilização de pacotes RPM(RedHat Package Manager). O processo de instalação para plataformas Linux, baseadas na distribuição RedHat, incluindo a distribuição brasileira Conectiva, é um processo bastante simplificado, pois todo o trabalho de criação de diretórios, execução de scripts de instalação, configuração de arquivos, reinicialização de processos, criação de links simbólicos, entre outros ficam invisíveis durante a instalação.

A utilização de pacotes possui como principal  vantagem essa simplificação na instalação, por outro lado, por utilizar processos bastante automatizados, não permite que a instalação seja customizadas por usuários mais experientes e que necessitem adequar a instalação em seu sistema.

Os pacotes que devem ser utilizados na instalação são os que seguem abaixo:
a) Principal: MySQL-versão.i386.rpm . Este pacote  possui o  próprio servidor de Banco de Dados MySQL, deve ser instalado.
b) Programas Cliente Standart: MySQL-Cliente-versão.i386.rpm. Este pacote possui as ferramentas básicas para gerenciamento, criação e manutenção dos bancos criados.
c) Teste e Benchmark: MySQL-bench-versão.i386.rpm. Esse pacote permite que se façam testes de performance das estruturas criadas no Banco.

Em uma shell de um Linux baseado em RedHat, com RPM instalado e os pacotes já copiados, executa-se os comandos abaixo:

shell> rpm –i MySQL-versao.i386.rpm MySQL-Client-i386.rpm

Esse processo instalará  o servidor e as ferramentas clientes básicas, permitindo assim seu funcionamento e criação dos bancos de dados. Durante esse processo  o banco de dados será copiado com as permissões padrões. Ocorrerá a criação de entradas em sbin/rc.d para que se possa iniciar o servidor automaticamente, bem como os arquivos de executáveis e extensões dos aplicativos para os diretórios padrão.

Caso o processo ocorra sem erros já é possível testar instalação executando em uma shell o comando mysql, o qual iniciará a principal ferramenta cliente para interpretação de comandos SQL.

OBS: A Instalação através dos fontes do MySQL, requer algumas ferramentas no seu ambiente operacional: um compilador C++ compatível com ANSI, um programa make, um descompactador, entre outros. De forma simplificada será necessário compilar os fontes, e passar alguns parâmetros de instalação. Esse processo exige um conhecimento mais aprofundado das caraterísticas as ferramentas envolvidas.

2.7. Compatibilidade do Banco MySQL com a linguagem SQL

O banco de dados MySQL é compatível com boa parte dos comandos da padronização SQL 92, possuindo um conjunto não muito extenso de instruções porém com as funções mais utilizadas [YAR 99]. Além disso, possui extensões com funções bastante úteis, entre elas o auto_increment que permite a geração de números seqüências para registros em cada nova inserção executada em uma tabela. Alguns comandos próprios do MySQL não funcionarão com outros bancos, mas podem ser comentados de forma que durante um processo de importação sejam ignorados, mantendo assim a portabilidade de suas instruções.

Também não suporta a utilização de subselects, ficando assim deficiente em algumas situações de consulta. Não tem suporte também a commit e rollback conforme será discutido no próximo capítulo. 

O MySQL suporta uma grande extensão de tipos numéricos, caracteres, caracteres de tamanho variável, tipos enumerados, sendo os mais comuns e mais compatíveis os que seguem a seguir:

Tipo

Descrição

Int

Valor inteiro

Real

Valor de ponto flutuante

Char(tamanho)

Caracter de tamanho fixo

Date

Campo de data padrão

Time

Campo de tempo padrão

Text(tamanho)

Caracter de tamanho variável

Tabela 2.2 - Tipos de variáveis suportadas pelo MySQL
  

2.8. Transações

Transações não são suportadas, até sua última versão. O objetivo segundo a equipe desenvolvedora é a 
implementação de suporte a transações atômicas, o que seria equivalente a transações sem a utilização de rollback(recurso para desfazer alterações). O finalidade de operações atômicas é permitir que se execute um grupo de instruções SQL, por exemplo vários comandos de atualização (UPDATE) e que haja garantia que nenhum outro processo interfira nos valores, tornado os dados inconsistentes.

A utilização de transações em bancos de dados permite garantir a integridade e a consistência das informações, e tem como característica a utilização de Commit e RollBack, ou seja, pode-se executar um conjunto de instruções e ter a garantia que todas elas serão executadas (Commit), ou no caso de alguma falha de Hardware ou de Software as alterações são desfeitas e retornam ao seu estado inicial antes das alterações(RollBack).

Por não utilizar esse conceito de transação em sua estrutura, o banco MySQL consegue uma grande melhoria no seu desempenho, por manter um conjunto de instruções menos complexas, sendo atualmente um dos bancos de dados mais rápidos para consultas.

Sendo assim, a sua utilização deve ser muito criteriosa, pois ao envolver processos de manipulação de informações que não podem ficar inconsistentes de forma alguma, o banco não oferece os recursos de segurança commit e rollback. Para contornar esse problema, utiliza-se o conceito de travamento e destravamento de tabelas.

O processo de travamento e destravamento de tabelas visa garantir a consistência da informação lida, porém o travamento deve ser invocado explicitamente na programação exigindo um controle rigoroso na programação. A seguir segue um exemplo do processo de travamento de tabela:

Instruções:

a) lock tables trans read, clientes write
b) select sum(value) from trans where cliente_id=10
c) update cliente set saldo = soma anterior where cliente_id = 10
d) unlock tables

Caso a tabelas não fossem travadas, existiria a possibilidade de outro processo inserir um novo registro na tabela trans, entre a execução do select e do update tornando assim a informação incorreta.

2.9. Store procedures e Triggers

O banco de dados MySQL suporta a utilização de procedures e triggers.  A utilização de procedures possibilita que vários processos de programação sejam efetuados no próprio banco de dados, permitindo assim a diminuição do tráfego cliente-servidor bem como benefícios no que diz respeito a independência de aplicativos, pois os processos implementados no banco ficam transparentes para a aplicação que acessa os dados.

Pode-se definir trigger como sendo um ou vários procedimentos armazenados que são executados quando determinado evento ocorre, por exemplo, a cada vez que um  registro é atualizado dispara-se a execução de certos procedimentos.

2.10. Segurança e privilégios de acesso 

A função primária do sistema de privilégios do MySQL, é validar a conexão de um usuário de uma determinada estação e definir quais os privilégios o usuário tem com as instruções Select, insert, update, delete em um determinado banco de dados.

Além dessas instruções, são definidos quais os privilégios administrativos como criação de usuários, definição de permissões, possibilidade de iniciar e parar o servidor entre outras.

2.10.1. User names e password

O processo de acesso ao MySQL se faz através de nome de usuário e senha, sendo a senha opcional. Os nomes e senhas utilizados na autenticação não possuem qualquer ligação com os nomes utilizados e senhas utilizados no ambiente operacional (Linux).

Para que possa haver segurança no acesso aos dados do banco, deve-se utilizar a política de senhas para todos os usuários, caso contrário um usuário poderá acessar informações facilmente, além de facilitar a invasão ao banco por pessoas não autorizadas.

Algumas características importantes a serem citadas sobre a utilização de nomes e senhas:
a) Nomes de usuários podem conter até 16 caracteres alfanuméricos
b) Não existe ligação entre nomes do ambiente operacional e do banco.
c) MySQL criptografa o password usando um algoritmo diferente do que o usado em uma seção Linux.
d) Possui as funções Password('suasenha') e Encrypt('suasenha'), sendo que a primeira utiliza um algoritmo do próprio MySQL e a segunda faz uma chamada ao sistema de criptografia do sistema Linux.

Todas as informações referentes à controle de acessos e privilégios ficam armazenas e um banco de dados dentro do MySQL chamado mysql , com as informações sobre usuários especificadas dentro de uma tabela com o nome de user. Esta tabela possui a seguinte estrutura de dados assim explicada:

Campo

Tipo

Funçao

Host

Char(60)

Host a qual se dará o acesso ao banco

User

Char(16)

Nome do usuário

Password

Char(16)

Senha do usuário (Campo pode ser criptografado)

Select_priv

Enum(‘n’,’y ‘)

Possibilidade de executar o comando select

Insert_priv

Enum(‘n’,’y ‘)

Possibilidade de executar o comando insert

Update_priv

Enum(‘n’,’y ‘)

Possibilidade de executar o comando update

Delete_priv

Enum(‘n’,’y ‘)

Possibilidade de executar o comando delet

Create_priv

Enum(‘n’,’y ‘)

Possibilidade criar banco de dados

Drop_priv

Enum(‘n’,’y ‘)

Possibilidade de apagar banco de dados

Reload_priv

Enum(‘n’,’y ‘)

Possibilidade de atualizar os privilégios definidos

Shutdown_priv

Enum(‘n’,’y ‘)

Possibilidade de finalizar o servidor

Process_priv

Enum(‘n’,’y ‘)

Possibilidade de gerenciar tarefas em execução

File_priv

Enum(‘n’,’y ‘)

Possibilidade de usar comandos que executam sobre arquivos

Grant_priv

Enum(‘n’,’y ‘)

Possibilidade de definir privilégios para outros usuários

Index_priv

Enum(‘n’,’y ‘)

Possibilidade de criar e apagar índices

Alter_priv

Enum(‘n’,’y ‘)

Possibilidade de executar o comando ALTER TABLE

Tabela 2.3 - Tabela user do MySQL

Outras tabelas completam o controle total de permissões e privilégios:
DB – esta tabela possui as informações de qual usuário pode executar quais comandos, de determinada máquina, exatamente sobre um banco de dados específico. Esta tabela se faz necessária, pois a tabela user não possui qualquer referência sobre quais bancos de dados eram definidos os privilégios, assim com a tabela db pode ter um controle mais específico.

Host – esta tabela tem por objetivo controlar o acesso a banco levando em consideração em qual máquina esta sendo efetuada a conexão, assim se a tabela db não identificar o host para um banco de dados e usuário, a tabela host  define se o banco de dados em questão pode ser acessado de determinado host.

2.11. Como funciona a conexão ao MySQL

O processo de conexão com o banco requer que alguns parâmetros sejam passados ao servidor MySQL: 

a) Hostname – Qual computador deseja efetuar a conexão.
b) usuário – O nome do usuário que deseja conectar
c) A senha – Senha do usuário que requisitou a conexão.

Esses dados são passados para o servidor através da aplicação cliente, por exemplo um página desenvolvida em PHP ou um módulo de administração.

No caso de omissão de algum parâmetro, a requisição de conexão assume os seguintes valores como padrão:
a) Hostname :  LocalHost
b) Nome do usuário : Nome do usuário conectado no ambiente operacional
c) Password: Não passa nenhuma informação se omitido

Abaixo o exemplo de uma conexão através da linguagem PHP embutida em uma página HTML:
a) $conexão = mysql_conect('localhost','joao','xxxyyy');
b) mysql_select_db('conexão','teste');

Com a função nº 1 nativa da linguagem PHP, solicita-se uma conexão ao servidor MySQL, sendo o lugar da conexão o próprio computador(localhost), o usuário (joao) e a sua senha(xxxyyy). Caso executado com sucesso a função, a variável $conexão recebe a validação da conexão.

A segunda função seleciona qual o banco de dados que a conexão acima realizada deseja conectar, nesse caso foi conectado ao banco de dados teste.

2.12. Principais ferramentas para utilização do MySQL

2.12.1. MySQL

Talvez uma das mais importantes ferramentas para criação de banco de dados em MySQL seja a mysql, pois através dela cria-se uma conexão direta com o servidor MySQL, permitindo executar todos os comandos SQL disponíveis desde a criação de bancos até a definição de privilégios para o servidor. Com a execução do comando inicia-se a utilização do MySQL:

Shell> mysql –u joao –p teste

Com esse comando cria-se um conexão com o servidor MySQL para o usuário joao ao banco de dados teste, sendo solicitada sua senha.

Assim   inicia-se a conexão comum prompt como esse: (mysql>)  que permite a execução dos comandos SQL.

2.12.2. Mysqladmin

Mysqladmin é a ferramenta principal para administração de bancos de dados rodando em MySQL Server. Usando esta ferramenta pode-se criar, destruir e monitorar servidores de bancos de dados.

Para criar um banco dados pode-se utilizar esta ferramenta como segue exemplo:
Shell> mysqladmin – p create nomedobanco

A opção –p fala ao MySQL para solicitar  ao usuário a senha de root que deve estar definida previamente. Caso o comando seja executado com sucesso, o servidor criará um novo banco, vazio e com o nome definido.

Para excluir um banco de dados utiliza-se o seguinte comando:
Shell > mysqladmin – p drop nomedobanco

Com esse comando apaga-se todos os arquivos referentes a banco de dados com o nome nomedobanco.

A ferramenta mysqladmin fornece um grande número de comandos que permitem monitorar o servidor MySQL. Um dos mais importantes é comando:
  Shell > mysqladmin status

Através dele, pode-se analisar um grande variedade de informações sobre o Servidor, conforme abaixo:
a) Uptime – o tempo em que o servidor esta rodando
b) Threads – o número de tarefas que estão atualmente interagindo com o servidor. Pelo menos uma tarefa sempre estará sendo executada, é a tarefa que conta quantas outras tarefas estão sendo executadas
c) Questions – o número de queries que foram enviadas desde que o banco foi iniciado
d) Slow queries – o número de queries que levaram mais tempo do que o tempo padrão configurado.
e) Opens  - o número de tabelas que foram abertas desde que o banco foi iniciado
f) Open tables – o número de tabelas atualmente abertas. Por ser multitarefa uma tabela pode estar aberta por mais de um processo, assim o número de tabelas abertas pode ser maior que o número de tabelas existentes no servidor.

Outro comando que contém informações sobre o servidor, mas de uma forma mais geral é o mysqladmin version, através dele pode-se saber: qual a versão do servidor, a versão do protocolo, o método pelo qual você está conectado ao servidor, por exemplo via socket unix, o nome do arquivo que está sendo usado para se comunicar com o servidor. Um exemplo de saída para este comando:

Server version 3.22.25
Protocol version 10
Connecton estacao1 via Unix socket
Unix Socket /tmp/mysql.sock
Uptime 50 min  10 sec

O comando mysqladmin processlist permite o monitoramento dos processos sendo executados.

Abaixo um exemplo de uma saída desse comando:

ID

User

Host

Db

Command

Time

State

Info

562

Joao

Teste

Sleep

0

985

Root

Localhost

0

 

Tabela 2.4 - Tarefas sendo executadas no servidor

Esta tabela demonstra exatamente o que cada tarefa executada no servidor está fazendo.

ID : Possui o valor interno que identifica a tarefa executada, não possui relação com o número de processos do sistema operacional. É possível utilizar este número para finalizar a tarefa executando o comando mysqladmin kill. 
User: O usuário que está executando essa tarefa.
Host:  O computador do qual o usuário está conectado.
Db : Qual o banco de dados o usuário está conectado.
Command: O tipo de comando que está sendo executado pela tarefa, podem ser  :

a) Sleep – Tarefa esperando por entrada.
b) Quit – Tarefa sendo finalizada.
c) Init DB – Preparando-se para selecionar banco para conexão.
d) Query – Executando uma query, por serem comandos executados muito rapidamente, 
raramente aparecem na lista de processos.
e) CreateDB – Criando um novo banco de dados.
f) Drop – Apagando um banco de dados
g) Reload – Recarregando as tabelas com informações de acesso ao banco.
h) Shutdown – Tarefa finalizando todos as outras tarefas e parando o servidor
i) Statistics – Tarefa gerando estatísticas.
j) Processes – Tarefa examinado outras tarefas.
k) Connect - Negociando um conexão. 
l) Kill – Tarefa finalizando outra tarefa

Como pode-se observar, o comando mysqladmin processlist permite fazer uma análise detalhada de todas as tarefas que estão sendo executadas, dando a possibilidade do administrador avaliar a necessidade de encerramento de tarefas em casos de falhas.

O processo de finalização do banco de dados se da através do comando:
Sheel> mysqldamin –p shutdown

3. Personal Home Page(PHP)

Neste capítulo serão apresentadas noções básicas da Linguagem PHP, incluindo uma breve definição, um histórico, algumas dicas de instalação e configuração em plataforma UNIX, além de noções sobre a sintaxe do mesmo e finalizando com  exemplos.

3.1. O que é PHP ?

"PHP é uma linguagem que permite criar Web sites dinâmicos, possibilitando uma interação com o usuário através de formulários, parâmetros da URL e links. A diferença de PHP com relação a linguagens semelhantes a Javascript é que o código PHP é executado no servidor, sendo enviado para o cliente apenas HTML(Hyper Text Markup Language) puro. Desta maneira é possível interagir com bancos de dados e aplicações existentes no servidor, com  a vantagem de não expor o código fonte para o cliente. Isso pode ser útil quando o programa está lidando com senhas ou qualquer tipo de informação confidencial" [BAR 99].

Para interagir com o Banco de Dados, é possível se inserir dentro do código HTML, além da linguagem de 
programação C, a linguagem para manipulação de Banco de Dados SQL (Structured Query Language).

Uma característica desta linguagem é a possibilidade de inserir o código PHP dentro do código HTML, o que não acontece em outros scripts CGI como o Perl ou o C, por exemplo.

Para simplificar tem-se o exemplo a seguir, onde a frase "Exemplo de código PHP" é simplesmente impressa na tela:

print “Exemplo de código PHP”;

?>

Figura 3.1 - Exemplo de código PHP embutido em um código HTML.

O código PHP permite ainda que durante a execução haja uma alternância entre o seu modo e o modo HTML.

print “Modo PHP”;

?>


Modo HTML

print “Modo PHP de novo”;

?>


Figura 3.2 - Exemplo de alternância entre os modos PHP e HTML

O que o distingue de outros CGI cliente-servidor é que o código é executado no servidor. Se o servidor tem um script rodando, o cliente terá que  receber o resultado da execução daquele script. Para isso o servidor deve estar configurado para processar todos os seus arquivos HTML com o PHP embutido nele.

Muito do PHP é uma combinação das Linguagens Perl, Java, C e C++. Sendo que a sintaxe é originada do C, tornado o seu aprendizado muito fácil até mesmo para programadores novatos. Possui ainda a capacidade de realizar sofisticados cálculos matemáticos, fornecer informações em rede,  e muito mais. Atualmente está disponível para as plataformas Unix (FreeBSD, Linux, etc) e Windows (9x e NT).

3.2. Histórico

O desenvolvimento do PHP começou em meados de 1994 por Rasmus Lerdorf  que lançou uma versão apenas para teste e demonstração, e utilizado pelo seu criador para o desenvolvimento de uma Home Page visando divulgar e aplicar testes práticos à nova ferramenta.

A primeira versão à ser usada por outros programadores só foi  disponibilizada em 1995 e foi chamada de "Personal  Home Page Tools". Essa versão foi considerada apenas como uma revisão da anterior, tanto que não foi muito utilizada. Não foram feitos muitos trabalhos com ela, apenas alguns utilitários já bastante comuns para as  Home Pages da época, um guestbook, um contador de visitas e algumas outras aplicações pequenas. Esta versão foi revisada e refeita em meados de 1995 e nomeada de PHP/FI 2.0. O FI era a indicação de um outro pacote que Rasmus havia criado para permitir a interpretação de comandos HTML, o Form Interpret. Ele combinou os scripts da Personal Home Page Tools com o Form Interpret e adicionou suporte ao mSQL, estava criado o PHP/FI. A partir daí o PHP/FI deu um grande passo em seu desenvolvimento, e pessoas alheias ao seu projeto começaram a contribuir em seu código fonte.

É difícil apontar estatísticas precisas, mas estimasse que em 1996 cerca de 15.000 sites em todo o mundo utilizavam o PHP/FI, já em meados de 1997 este número subiu para algo em torno de 50.000. Em 1997 houve outra grande mudança no PHP, o seu criador Rasmus Lerdorf anunciou que devido ao grande número de projetos que havia recebido de outras pessoas iria a partir dali montar um grande time para tratar do desenvolvimento e administração do PHP. Então iniciou-se o desenvolvimento de uma nova versão, o PHP 3.0. Nesta versão uma parte do código do PHP/FI foi portada no PHP 3.0 e a outra foi completamente rescrita [BAK 99].

Em 1999 estimava-se que o número de sites que utilizam o PHP tanto a versão PHP/FI 2.0 como a PHP 3.0, gira em torno de 1.000.000 em todo o mundo [BAK 99].

3.3. Bancos de Dados

"Conectar um Banco de Dados via Internet nunca foi uma das tarefas mais simples. Talvez a mais forte e mais significante característica do PHP em se tratando de acesso a Banco de  Dados via Internet, é o vasto número de Banco de Dados à que ele dá suporte".[FIS 99] Os Bancos de Dados a seguir são os suportados pelo PHP:

a) Adabas D
b) Interbase
c) Solid
d) DBase
e) MSQL
f) Sybase
g) Empress
h) MySQL
i) Velocis
j) FilePro
k) Oracle
l) Unix dbm
m) Informix
n) PostgreSQL

3.4. Instalação em Sistemas UNIX

Para instalar o PHP existem alguns pré-requisitos. A configuração inicial é:

a) Habilidade básica em Sistemas UNIX – ser capaz de operar o comando "make"
b) Um Compilador da Linguagem de Programação C
c) Um Servidor Web

Tendo essas ferramentas instaladas e possuindo o devido conhecimento para operá-las, o PHP já pode ser instalado.
Por se tratar de  uma Linguagem nativa do Apache Web Server, então primeiramente deve-se instalar o Servidor Web e logo em seguida o PHP como sendo seu módulo.

1. gunzip apache_1.3.x.tar.gz
2. tar xvf apache_1.3.x.tar
3. gunzip php-3.0.x.tar.gz
4. tar xvf php-3.0.x.tar
5. cd apache_1.3.x
6. ./configure –prefix=/www
7. cd ../php-3.0.x
8. ./configure –with-mysql –with-apache=../apache_1.3.x –enable-track-vars
9. make
10. make install
11. cd ../apache_1.3.x
12. ./configure –prefix=/www –activate-module=scr/modules/php3/libphp3.a
13. make
14. make install

Figura 3.3 - Passos para instalação do PHP em sistemas UNIX

Feita a instalação do Apache Web Server e do PHP respectivamente o próximo passo é tratar da configuração, mas isso será visto mais adiante. Agora mostra-se como se faz, para no momento da instalação dar suporte aos Bancos de Dados suportados pelo PHP.

No momento da instalação, na linha 8 da figura 3.3, o Banco de Dados MySQL foi configurado como o Banco de Dados que será suportado pelo PHP durante a sua execução. Mas como foi feito com o MySQL pode-se configurar outros Bancos de Dados também, e não apenas um mas quantos forem necessários, desde que, é claro, seja um Banco de Dados suportado. A maneira como isso será feito é a seguinte:

Bancos de Dados

Diretivas

Descrição

Adabas D

-with-adabas=DIR

Sendo que o parâmetro a ser passado é o diretório onde o Banco de Dados Adabas D será instalado, tendo como default é o diretório /usr/local/adabasd.

Dbase

-with-dbase

Suporte para Dbase, o qual é habilitado por default.

FilePro

-with-filepro

Suporte para Filepro, o qual é habilitado por default.

MSQL

-with-msql=DIR

Adiciona suporte ao mSQL. DIR corresponde ao diretório para instalação, sendo default o diretório /usr/local/Hughes.

MySQL

-with-mysql=DIR

Adiciona o MySQL com DIR sendo o diretório para instalação, tendo como default o diretório /usr/local.

Oracle

-with-oracle=DIR

Suporte para Oracle 7.0 até 7.3

PostgreSQL

-with-pgsql=DIR

O parâmetro é o diretório de instalação do PostgreSQL, tendo como default o diretório /usr/local/pgsql.

Solid

-with-solid=DIR

O diretório default para instalação é o , /usr/local/solid.

Sybase

-with-sybase=DIR

O parâmetro é o diretório de instalação do Sybase, tendo como default o diretório /home/sybase.

Sybase-CT

-with-sybase-ct=DIR

Adiciona suporte ao Sybase-CT. O diretório default para instalação é o /home/sybase.

Velocis

-with-velocis=DIR

O diretório default é o /usr/local/velocis.


Tabela 3.1 - Habilitação do Banco de Dados durante a instalação do PHP.

Existe uma outra forma de instalar o PHP, através dos pacotes RPMs (RedHat Package Manager). "Os pacotes RPMs são um recurso que contém todos os arquivos que são necessários para instalação em um único pacote, permitindo que tudo seja feito automaticamente. Isso evita a necessidade de descompactar e compilar arquivos como foi feito na instalação anterior" [JAM 99]. No caso do PHP, a instalação utilizando pacotes RPMs pode não ser muito recomendável, tendo em vista que o PHP possui algumas configurações que são específicas no código.
Instalando o PHP dessa forma o Apache Web Server inicialmente não processará as páginas em formato PHP, sendo necessário alguns ajustes nos arquivos de configuração do Apache Web Server.

3.5. Configuração

A configuração do PHP é toda ela baseada em um arquivo, o php3.ini, que é o arquivo que será lido sempre que as páginas em PHP forem executadas no servidor. Ele possibilita a configuração de todos os diretórios e seus respectivos caminhos envolvidos na execução do PHP, bem como de todos os Bancos de Dados suportados, além da segurança e do limite de memória que será disponibilizada para a execução dos arquivos PHP. A seguir tem-se alguns exemplos de configuração:

Configuração
Descrição

doc_root string
É o diretório de root no servidor, em modo de segurança nenhum arquivo que estiver fora deste diretório ficará disponível para usuários comuns.

include_path string
Especifica onde devem ser armazenados os arquivos em PHP para serem processados e exibidos.

user_dir string
Diretório destinado para uso dos usuários de arquivos PHP.

mysql.allow_persistent boolean
Define se é permitido insistência à conexão ao Banco de Dados.

mysql.max_persistent integer
Se for permitido, informar o máximo de insistências permitidas por processo.

mysql.max_links integer
O número máximo de conexões ao Banco de Dados permitidas por processo, incluindo as insistências.

Tabela 3.2 - Exemplos de configuração do PHP.

Mas, dependendo da forma como o PHP foi instalado será necessário mais algumas configurações. Se a instalação foi utilizando pacotes RPM então devemos também configurar o arquivo do Apache Web Server httpd.conf.

Assumindo que a instalação foi toda ela com RPM, algumas linhas do arquivo httpd.conf deverão ser descomentadas ou até mesmo adicionadas:

#Extra Modules
AddModule mod_php.c
AddModule mod_php3.c
AddModule mod_perl.c

#Extra Modules
LoadModule php_module modules/mod_php.so
LoadModule php3_module modules/libphp3.so
LoadModule perl_module modules/libperl.so

E deve-se adicionar a linha:
AddType applications/x-httpd-php3.php3

Feito isso o Apache Web Server está apto para executar arquivos em formato PHP.

3.6. Sintaxe Básica

A seguir será dada uma idéia geral a respeito da sintaxe do PHP.

3.6.1. Delimitadores

Existem quatro formas de se delimitar um conjunto de código PHP dentro de um código HTML.

O interpretador reconhece um código PHP pelas seguintes tags:

[código]
?>
Esta é a forma mais utilizada.

[código]
?>
Forma também bastante comum e utilizada pelos programadores.


Este caso é utilizado em editores HTML que não reconhecem o PHP como uma tag. Se as outras formas forem utilizadas o editor poderá acusar erro no HTML.

<%
[código]
%>
É uma forma que está sendo eliminada para futuras versões do PHP.

3.6.2. Separador de Instruções

Assim como nas linguagens de programação mais conhecidas, como o C e o Perl por exemplo, no PHP é necessário separar cada instrução do conjunto de código por ponto-e-vírgula.

3.6.3. Definição de Variáveis

Todas as variáveis são definidas através de um "$"  seguido de uma string que deve iniciar por uma letra ou o caracter "_".

O PHP é case sensitive, ou seja, diferencia maiúscula de minúscula, a variável $nome é diferente da variável $NOME. Como o PHP já possui algumas variáveis pré-definidas cujos nomes são formados por letras maiúsculas, é aconselhável evitar-se usar variáveis com letras maiúsculas.

3.6.4. Comentários

A forma de comentário do PHP é semelhante ao das linguagens C e C++ e com os comentários do UNIX shell.

Pode-se fazer comentários de duas formas:

a) Comentando uma linha:
É feito utilizando-se o caracter "#" ou duas barras (//).

  Print “Correto”; #esta é uma forma  ?>

  Print “Correto”; //esta é outra forma ?>

Figura 3.4 - Exemplo de comentário de uma linha em PHP

b) Comentando mais de uma linha:
É aplicado utilizando-se os caracteres "/*" para o início do comentário e "*/" para finalizar o mesmo.

*/

?>

Figura 3.5 - Exemplo de comentário de mais de uma linha em PHP

3.7. Exemplos

3.7.1. Um exemplo simples

Após a realização dos processos de instalação e configuração, é importante se fazer um exemplo para certificar-se de que tudo está correto. O script a seguir trata-se de um exemplo simples onde será produzida apenas uma saída.


Testando o PHP

print "Meu primeiro script em PHP";
?>


Exemplo de um script simples em PHP.

Feito isso deve-se salvar o arquivo, como "exemplo.php3" por exemplo, dentro do diretório dos documentos doApache Web Server (html). Em seguida na janela do navegador digite o endereço: "http://localhost/exemplo.php3".
Se a página exibida no navegador contiver apenas a saída especificada no código PHP é sinal que tudo estáfuncionado corretamente. Exibindo-se o código fonte da página, teremos o seguinte:


Testando o PHP

Meu primeiro script em PHP


Exemplo – Código fonte do que será exibido no navegador.

Este código permite mostrar como o PHP funciona, o script foi executado no servidor deixando disponível ao usuário apenas o resultado em forma de código HTML.

3.7.2. Exemplo de PHP com formulários HTML

O próximo exemplo mostra como o PHP trabalha com formulários HTML. Sempre que se pressiona o "Submit" em um HTML alguma informação é enviada ao servidor para que se produza uma resposta que satisfaça a solicitação feita no formulário, para isso o PHP trata essas informações como variáveis.


Testando o PHP

if ($texto != "")
  print "Você digitou "$texto"

";
?>








Exemplo de um PHP com formulário HTML.

Salvando esse arquivo e carregando-o no navegador ele inicialmente será apenas um formulário para digitar um texto. Digitando o texto pela primeira vez, a variável $texto deixará de ser vazia e conterá o texto digitado, então a partir daí o PHP exibirá antes do formulário o conteúdo da variável $texto.

3.7.3. Exemplo do PHP acessando uma base de dados

Para interagir com uma base de dados SQL existem três comandos básicos que devem ser utilizados: um que faz a conexão com o servidor de banco de dados, um que seleciona a base de dados a ser utilizada e um terceiro que executa uma query SQL.[BAR 99]

O banco de dados utilizado neste exemplo será o Banco de Dados MySQL, que pode ser copiado gratuitamente no endereço http://www.mysql.org

a) Conectando ao servidor de banco de dados:
Para conectar-se ao servidor de banco de dados o comando é mysql_connect, a sua sintaxe é a seguinte:
Int mysql_connect(string [hostname[:port][:/path/to/socket]], string[usuário], string[senha]);

Abre uma conexão a um servidor MySQL, retorna id_link se tiver sucesso, caso contrário, retorna False.[FIS 99]

Os parâmetros exigidos neste comando são o endereço do servidor (hostname), o nome do usuário (usuário) e a senha para conectar-se ao servidor.

$conectou = mysql_connect("localhost", "root", "pwdphp");
Exemplo de conexão ao servidor de banco de dados.

b) Selecionado o Banco de Dados
Após feita a conexão deve-se selecionar qual banco de dados será utilizado, para isso usa-se o comando
mysql_select_db, que possui a sintaxe:
Int mysql_select_db(string nome_bd, int [id_link]);

Os parâmetros são o nome do banco de dados a ser selecionado e um identificador de conexão.

$conecbd = mysql_select_db ("vestiba", $conexao);
Exemplo de conexão a um banco de dados.

c) Executando queries em SQL no banco de dados
Tendo conectado ao servidor e selecionado o banco de dados, pode-se manipular praticamente todo o banco de dados utilizando-se SQL. Para se escrever comandos SQL no PHP utiliza-se o comando mysql_query, que possui a seguinte sintaxe:
Int mysql_query (string consulta, int [id_link]);

Envia uma consulta ao servidor MySQL, retorna True se tiver sucesso, caso contrário, retorna False.[FIS 99].

O exemplo a seguir demonstra a criação de uma tabela com SQL:

$Criatable = mysql_query("CREATE TABLE nomes (codigo INT AUTO_INCREMENT
PRIMARY KEY, nome CHAR(40), email CHAR(50))", $conexao);
Exemplo de escrita SQL em um código PHP.

Assim como no exemplo acima foi executado o comando SQL create table, qualquer comando de escrita SQL poderia ter sido executado.

4. Apache Web Server

4.1. O que é um servidor Web

Um servidor Web é o responsável pelo controle de distribuição de páginas na Internet. Sua função é aguardar por requisições de páginas de um cliente (browser), e ao receber uma requisição ele retorna dados ao cliente, normalmente paginas HTML com imagens. Ao receber os dados enviados pelo servidor, o browser apresenta os dados para o  usuário. Os servidores são em conceito muito simples, fazendo basicamente esse processos de resposta à requisições.

O processos de comunicação entre o cliente e o servidor são feitos através do protocolo de transferencia de Hyper Texto (HTTP - HyperText Transfer Protocol ), protocolo esse que padroniza o modo de envio e recebimento de dados, tendo como característica principal  a sua independência total quanto a plataforma, podendo por exemplo, estabelecer comunicação entre um servidor Linux, e um cliente Macintosh sem qualquer problema.

"As informações que  trafegam pela Internet são na sua grande maioria feitos com a Linguagem de marcação de Hyper Texto (HTML -  Hypertext Markup Language). Essa linguagem é a base principal de um ambiente Web, permitindo que exista essa grande  gama de dados disponíveis para toda a Internet" [KAB 98].

Atualmente existem no mercado cerca de 500 servidores Web, disponíveis nas mais diversas plataformas, de distribuição gratuita até valores que chegam a milhares de dólares, dependendo dos recursos envolvidos na ferramenta [KAB 98]. Algumas das características principais a serem observados em um servidor Web são as seguintes: tipo de distribuição (gratuita ou paga), processo de instalação, facilidades de customização, performance e consumo de recursos, suporte técnico e módulos disponíveis são as principais informações a se levar em consideração.

4.2. O servidor Apache

O servidor Apache é uma das mais de 500 ferramentas disponíveis nesse segmento. Ele está disponível para as plataformas ,Unix Like, Solaris, Sun , Windows entre outras. Sendo um software de livre distribuição. Atualmente Apache é o servidor mais utilizado na Internet tendo aproximadamente 35% de todo o mercado, segundo a pesquisa do Site http://www.netcraft.com/survey/ . vide gráfico comparativo (figura 4.1). Algumas das características que o destacam é o fácil processo de instalação que possui e  uma configuração de arquivos bem funcional, permitindo que sejam feitos ajustes nas configurações, sem que seja necessário reiniciar o servidor. O suporte à utilização de protocolos de transferência de arquivos
com segurança, também tem outra característica importante implementada através de módulos no servidor.

O Apache é implementado como um conjunto de módulos, sendo grande partes desse módulos desenvolvidos por terceiros. Com a utilização desse módulos consegue-se uma grande flexibilidade na sua utilização, trazendo incontáveis funcionalidades para o servidor.

 

Figura 4.1 - Gráfico comparativo da utilização do Apache no mundo

4.3. Breve Histórico

Apache foi criado em 1995 quando um grupo de desenvolvedores chamados The Apache Team - Equipe Apache, consolidaram uma série de patches - remendos- que eles havia feito para o HTTP daemon do Centro Nacional de Aplicações para Supercomputação (NCSA). Um ano depois, Apache já era o mais popular servidor na Web.

4.4. Instalação

O processo de instalação do servidor Apache, no trabalho desenvolvido, visaza apenas criar um ambiente com configurações padrões, sendo apenas utilizadas configurações específicas para o uso do módulo PHP. Sendo assim, foi instalado um pacote RPM da distribuição brasileira da conectiva. Esse processo é bastante simplificado, não permitindo configurações específicas, porém sua instalação é bastante eficiente permitindo já ao seu término a inserção de arquivos HTML para serem processados.

Em um ambiente Linux, no diretório que contém o pacote Apache digita-se:
Shell>rpm –i apache-versão.i386.rpm
Com esse processo os módulos padrões, bem como as configurações, os scripts, os diretórios default e os diretórios padrões serão configurados sem intervenção do usuário.

4.4.1. Os módulos do Apache

Módulo é um componente de software que adiciona funcionalidade para o servidor Apache. Através deles, define-se quais as características estendidas serão usadas no servidor. Um exemplo de definição de um módulo à ser usado, seria algo como:
Add module mod_php3.c

Esta linha no arquivo de configuração do apache, httpd.conf, permite a utilização do interpretador PHP caso este tenha sido instalado. Existe uma série de módulos que são instalados na configuração padrão, sendo que cada um dos módulos necessita mais memória e espaço do arquivo executácel apache. Assim, com a configuração dos arquivos pode-se escolher quais módulos serão usados permitindo assim melhor a rapidez do servidor e criar configurações de acordo com a necessidade do usuário.

4.4.1.1. O módulo PHP

O interpretador PHP pode ser compilado tanto como um interpretado CGI isolado do Apache ou como um módulo do Apache.

Se configurado como interpretador CGI, toda vez que um script PHP precisa ser interpretado o servidor Web lança uma instância do PHP, isso obviamente causará diminuição de performance, pois serão dois processos sendo executados, vide figura abaixo:



Figura 4.2 - Comparação entre PHP como um CGI e um Módulo Apache

"Quando compilado como módulo do Apache o PHP roda no mesmo espaço de memória do processo do servidor Apache, causando aumento da performance. Além disto, características como conexões persistentes ao banco de dados e permissão de uma segurança adicional somente estão disponíveis no PHP como módulo" [CAS 00].

4.5. Configuração

4.5.1. Arquivos de configuração

Os três principais arquivos de configuração do servidor apache são:

a) Httpd.conf
b) Access.conf
c) Srm.conf

Estes três arquivos são textos puro, que são usados na inicialização do servidor para dizer como  o servidor deve
rodar. Neles existem dois tipos de informação: diretivas do servidor e comentários opcionais.

Uma diretiva é como um comando para o servidor, dizendo à ele qual tarefa deve executar.

4.5.1.1. Httpd.conf

Este tem dezenas de diretivas, que definem várias características de inicialização. Como por exemplo:

a) A porta Linux na qual o servidor receberá as requisições
b) Arquivos de log
c) Com que usuário o servidor estará rodando
d) E-mail do administrador
e) Diretórios de configuração
f) Erros e log
g) Nome do servidor
h) Tempo limite entre recebimento e envio de informação
i) Número máximo de requisições de páginas

Estas e outras diretivas definem a "espinha dorsal" do servidor.

4.5.1.2. Srm.conf

Este arquivo é o que define a configuração dos recursos disponíveis. Ele diz quais recursos serão oferecidos pelo Web Site, e quando e onde eles serão oferecidos. Algumas diretivas ficam incluidas neste arquivo:

a) Diretório onde ficarão os documentos
b) Arquivo padrão de inicialização do diretório
c) Quais ícones devem ser mostrados para os diferentes tipos de arquivos
d) A linguagem que um documento pode usar, por exemplo o português
e) Os álias utilizados para os diretórios
f) Os diretórios dos scripts para utilização de CGI's
g) Mensagens customizadas de erros

A explicação destas e de outras diretivas contidas neste arquivo poderiam tomar várias páginas, porém de forma global observa-se que este arquivo define características de estrutura interna de diretórios, links simbólicos, definição de diretórios para usuários, imagens e mensagens de erros exibidas no browser, entre outros.

4.5.1.3. Access.conf

Este é usado para definir as permissões de acesso e ítens como: arquivos, diretórios e scripts do Web Site. Algumas diretivas importantes:

a) Cada diretório que o apache faz acesso pode ser configurado com respeito à quais características estão
habilitadas ou desabilitadas
b) O nome dos diretórios e sub-diretórios que podem ter links simbólicos
c) Opções para arquivos padrões e diretório, por exemplo, se um dirtório não possue uma página índice pode-se definir neste arquivo qual página será exibida

4.6. Protocolo SSL (Secure Socket Layer)

Usar um servidor com suporte SSL é uma boa maneira de providenciar segurança para um Web Site sem a
necessidade de nenhuma mudança nos códigos das páginas. O que o SSL faz é usar criptografia para proteger o fluxo de informação entre o servidor e o browser. Este protocolo não somente encriptografa a informação que trafega na Internet mas, também garante autencidade tanto do servidor quanto do cliente, ou seja, um usuário de um Site com o protocolo SSL tem certeza da origem dos dados.

O SSL usa uma técnica de encriptação chamada criptografia de chave-pública, onde o servidor envia uma chave-pública para o cliente criptografando informações na qual somente o servidor poderá descriptografar com uma chave-privada. O cliente usa a chave-pública para encriptografar e enviar ao servidor sua própria chave identificando ela somente para o servidor e prevenindo um ataque no meio da comunicação dos dados.

HTTP seguro (HTTPs) se distingue de conexões regulares servindo informações numa porta diferente da 80, normalmente na porta 443. Clientes que solicitam uma URL com HTTPs automaticamente são direcionados para a porta 443, tornando fácil para o servidor responder as requisições para os diferentes protocolos.

Existem muitas soluções para implementar SSL com Apache, incluindo Apache-SSL e as implementações
comerciais StrongHold e Raven SSL.

5. Implementação

O presente capítulo tem por objetivo apresentar e descrever o sistema implementado neste trabalho. A parte referente à modelagem dos dados para a construção da base de dados também está descrita neste capítulo incluindo descrição das tabelas, modelo e-r, dicionário de dados e a sintaxe SQL utilizada para a criação das tabelas no banco de dados.

As ferramentas utilizadas foram:
a) Sistema Operacional – Linux (Capítulo 1) – versão Conectiva 4.2
b) Banco de Dados – MySQL (Capítulo 2) – versão 3.22.25
c) Linguagem de Programação – PHP (Capítulo 3) – versão 3.0
d) Servidor Web – Apache Web Server (Capítulo 4) – versão 1.3.9

De posse e tendo o conhecimento necessário das ferramentas mencionadas acima, foi desenvolvida uma Home Page onde usuários podem realizar provas virtuais de concursos vestibulares onde, além disto, pode-se consultar as questões cadastradas no banco de dados.

A prova virtual possibilita que o usuário teste seus conhecimentos nas diversas matérias que compõem um concurso vestibular durante o processo de preparação do candidato. Essas matérias são: Matemática, Português, Física, História, Química, Geografia e Biologia. Para a realização da prova o usuário tem a possibilidade de escolher alguns critérios das questões que serão aplicadas na prova virtual. Por exemplo, além da matéria que se deseja, pode-se também classificar as questões pelo ano em que elas foram aplicadas e o local de onde elas fizeram parte, ou seja, em qual universidade ela foi aplicada. Outros critérios possíveis são o número de questões que se quer na prova e o nível de dificuldade da mesma, que pode ser fácil, intermediário, difícil ou aleatório. Com todos esses parâmetros passados já é possível realizar a prova virtual. Após a elaboração e realização da mesma, ou seja, depois que o usuário já tiver
respondido todas as questões, é possível se fazer a correção retornando as respostas corretas confrontadas com as respostas dadas pelo usuário.

Para a realização da consulta ao banco de dados, igualmente à prova, deve-se passar parâmetros, que são matéria, local e ano. Um diferencial é a possibilidade de se consultar por texto, isso significa que através de uma palavra-chave digitada num campo disponível, tem-se retornado um resultado de consulta com questões referentes àquela palavra-chave. Isto é possível passando-se ou não os outros parâmetros, ou seja, pode-se realizar somente a consulta por palavra-chave. 

Com a apresentação de uma breve descrição da implementação, onde deu-se uma idéia do funcionamento e do objetivo da mesma, o capítulo segue com uma descrição detalhada do processo de construção da Home Page para explicação da implementação de todos os itens que aqui foram citados. Primeiramente será apresentado um fluxograma com a descrição dos seus módulos para compreensão mais aprofundada, em seguida todo o processo de modelagem dos dados passando para as funções PHP que foram utilizadas e finalizando com a implementação de todos os arquivos PHP e HTML que compõem a Home Page.

5.1. Fluxograma

A figura 5.1 representa o fluxograma do sistema implementado neste trabalho.





Figura 5.1 - Fluxograma da seqüência de ações executadas durante o processo de visita de um usuário à
Home Page

5.1.1. Descrição detalhada dos módulos

A seguir tem-se uma descrição detalhada de cada módulo do fluxograma representado na figura 5.1.

5.1.1.1. Módulo 1 – Fazer Prova Virtual

Aqui está representado o principal ponto da implementação, é onde se dá a partida para que o usuário realize a prova. Tem os seguintes passos:

a) 1.1 – Selecionar Matéria: uma matéria entre as cadastradas no banco de dados deve ser selecionada.

b) 1.2 – Selecionar Local: seleciona-se um local de onde a prova é originada, ou seja, onde ela foi aplicada em determinada ocasião.

c) 1.3 – Selecionar Ano: é onde escolhe-se o ano na qual as questões que formularão a prova foram aplicadas.

d) 1.4 – Quant. de Questões: representa a quantidade de questões que se deseja na prova.

e) 1.5 – Nível de dificuldade: é o nível de dificuldade da prova que será formulada, ele pode ser: fácil, intermediário, difícil ou aleatório. Este último formula a prova com um misto dos outros três níveis.

f) 1.6 – Acessar BD/Realizar Consultas: após todos os parâmetros acima terem sido selecionados, o usuário requisita a formulação da prova e o arquivo prova.php3 se encarregará de acessar o banco de dados e de posse dos parâmetros realizar as consultas SQL de modo a satisfazer as necessidades do usuário.

g) 1.7 – Retornar arquivo HTML do Servidor: realizando as consultas todos os resultados da mesma são retornados do servidor na forma de um arquivo HTML, que será exibido ao usuário.

h) 1.8 – Corrigir Prova no Servidor: com a prova à sua disposição e após responde-la, o próximo passo é tratar da correção da mesma. Isso é feito através do arquivo corrige.php3, que enviará ao servidor de banco de dados as respostas dadas pelo usuário e comparará as suas respostas com as corretas.

i) 1.9 – Retornar Resultados: feita a correção no servidor, os resultados retornarão até o usuário em forma de um arquivo HTML.

5.1.1.2. Módulo 2 – Busca Rápida

A busca rápida dá a opção de pesquisa no banco de dados por palavras chave, ou seja, basta digitar uma palavra para se buscar questões no banco que contenham de alguma forma esta palavra.

a) 2.1 – Digitar Palavra: é o campo onde a palavra que se deseja será digitada.

b) 2.2 – Acessar BD/Realizar Consulta: após digitar a palavra e fazer a requisição da consulta, o arquivo buscarap.php3 acessa o banco de dados e realiza consulta SQL em busca das questões que satisfaçam a condição.

c) 2.3 – Retornar arquivo HTML do Servidor: ao realizar-se as consultas no servidor um arquivo HTML com os resultados é retornado do servidor.

d) 2.4 – Mostrar Resultado da Consulta: o arquivo HTML retornado do servidor é exibido ao usuário com o resultado da consulta por ele solicitada.

5.1.1.3. Módulo 3 – Consultar Questões

Neste módulo está representada a possibilidade de se fazer uma consulta mais aprofundada às questões que estão cadastradas no banco de dados.

a) 3.1 – Selecionar Matéria: seleciona-se a matéria que se deseja passar como parâmetro para realizar a consulta.

b) 3.2 – Selecionar Ano: consultar questões referentes à determinado ano.

c) 3.3 – Selecionar Local: consultar questões referentes à determinado local onde a questão foi aplicada.

d) 3.4 – Digitar Palavra: caso deseja-se consultar as questões também por uma palavra chave, basta digita-la no campo disponível.

e) 3.5 – Quant. Questões: aqui deve-se selecionar a quantidade de questões que se deseja ser exibida por página no resultado da consulta.

f) 3.6 – Acessar BD/Realizar Consultas: com todos os parâmetros selecionados, o arquivo consulta.php3 acessará o banco de dados e processará a consulta conforme os dados passados pelo usuário.

g) 3.7 – Retornar arquivo HTML do Servidor: após realizar as consultas um arquivo HTML é enviado do servidor contendo as informações resultantes da consulta.

h) 3.8 – Mostrar Resultados da Consulta: o arquivo HTML que retorna do servidor é mostrado ao usuário com o resultado da consulta.

5.1.2. Descrição do Fluxograma

Inicialmente, tem-se as opções de realizar a prova virtual, consultar questões por palavras e consultar questões por outros campos.

Para a realização da prova virtual, o processo se seguirá com a escolha dos campos a serem requisitados no Banco de Dados para a formulação da prova, são eles: matéria, local, ano, quantidade de questões da prova e nível de dificuldade. Feita a escolha dos campos, pode-se ainda recusar a formulação da prova retornando para a página inicial do Web Site. Por outro lado se houver prosseguimento ao processo realizando a formulação da prova, todos os parâmetros selecionados são enviados ao Banco de Dados em forma de consulta SQL por um arquivo .php3.
Este arquivo, por sua vez, realiza no Banco de Dados em questão, MySQL, todos o processos de consulta e seleção requisitados anteriormente retornando um arquivo em formato HTML que será exibido na tela com o resultado da sua consulta. Tendo-se a prova formulada à disposição, pode-se ainda reformular uma outra prova não respondendo-a e retornando à página onde se tem todos os campos à serem preenchidos. Se a prova for respondida, após isso ocorrerá o processo de correção da mesma no servidor e finalmente retornando um arquivo HTML com os resultados.

Na opção de consultar questões por palavras, deve-se simplesmente digitar no campo a palavra que se deseja consultar nas questões armazenadas no Banco de Dados. Com isso o arquivo .php3 irá buscar no Banco de Dados todas as questões que contém a palavra especificada, retornando um arquivo HTML do servidor com o resultado encontrado e exibindo na tela as questões selecionadas através deste critério.

Optando-se por fazer uma consulta um pouco mais criteriosa, deve-se realizar a busca por outros campos além da palavra. A maneira como isso funciona é a seguinte: após escolher esta opção, deve-se selecionar os campos matéria, ano e local de acordo com as necessidades. Em seguida, existe a alternativa de, além de se buscar por esses critérios já selecionados, consultar também por uma palavra que deseja-se estar presente entre as questões cadastradas no Banco de Dados.
Se for decidido fazer a busca desta forma, simplesmente deve-se digitar a palavra no campo e prosseguir com a consulta. Se, por outro lado, a busca por palavras não for utilizada, o processo de consulta segue normalmente com a seleção da quantidade de questões que se deseja por página na exibição da consulta. Com os campos necessários para a realização da consulta devidamente preenchidos ou selecionados, o processo pode ser interrompido recusando-se a consulta e retornando à página inicial do Web Site. Entretanto, se for dado seguimento, a consulta é estruturada em forma de SQL e enviada ao Banco de Dados para ser processada e retornar do servidor um arquivo em HTML que será exibido na tela com o resultado final da consulta.

5.2. Modelagem dos Dados

Agora será relatado como realizou-se todo o processo da modelagem dos dados envolvidos na implementação desenvolvida neste trabalho. Começando com uma descrição das tabelas, passando após para um Modelo E-R, seguindo com um dicionário dos dados e finalizando com a sintaxe SQL utilizada para a criação das tabelas no Banco de Dados utilizado, o MySQL.

5.2.1. Descrição das Tabelas

No banco de dados vestiba da implementação tem-se as seguintes tabelas:

a) Questões
b) Resposta

A tabela questões contém as informações sobre a questão que será aplicada na prova virtual, ou simplesmente exibida como resultado de uma consulta. Seus campos são:

Campo Descrição
numquest Indica o número da questão no banco de dados. (código)
questao  Contém a descrição da questão que está armazenada, qual é a pergunta.
imagem  Campo reservado para eventual necessidade da questão conter alguma imagem. 
Só é utilizado se necessário.
materia  Armazena à qual matéria a questão se refere.
ano  Indica em que ano a questão foi aplicada no vestibular.
local  É o local onde a questão foi aplicada.
certas  Determina a quantidade de usuários que acertaram a questão.
erradas  Determina a quantidade de usuários que erraram a questão.

Tabela 5.1 - Descrição dos campos da tabela Questões.

A tabela resposta contém os dados das respostas das questões. Seus campos são:

Campo

Descrição

numresp

É o número da reposta da questão.

numquest

Se refere à qual questão da tabela questões a resposta corresponde.

descricao

Contém a descrição da resposta.

imagem

É um campo utilizado quando a resposta contém alguma imagem, só quando necessário.

certa

Indica se a resposta descrita é a verdadeira ou não.

Tabela 5.2 - Descrição dos campos da tabela resposta.

5.2.2. Modelo E-R (Entidade - Relacionamento)

As tabelas envolvidas no trabalho tem uma relação entre si, que é representada por um modelo e-r. Enquanto a tabela questões contém apenas as suas informações, a tabela resposta, por sua vez, necessita da informação de qual questão determinada resposta faz parte, essa informação é buscada na tabela questões através do campo numquest que corresponde ao número da questão.



Figura 5.2 - Modelo E-R.

5.2.3. Dicionário de Dados

As tabelas 5.3 e 5.4 representam o dicionário de dados das tabelas questões e resposta
respectivamente. Serão apresentados juntamente com todos seus campos as propriedades de cada
um, como tipo, tamanho, etc.

Campo

Tipo

Tamanho

Not Null

Extra

Ch. Primária

numquest

Mediumint

 

X

Auto_increment

*

questao

Text

 

X

 

 

imagem

Varchar

80

 

 

 

materia

Varchar

25

X

 

 

ano

Varchar

4

X

 

 

local

Varchar

20

 

 

 

certas

Float

10,2

 

 

 

erradas

Float

10,2

 

 

 

Tabela 5.3 - Dicionário de Dados da tabela questões.

Campo

Tipo

Tamanho

Not Null

Ch. Primária

numquest

Int

11

X

*

numresp

Char

1

X

*

descricao

Blob

 

X

 

imagem

Varchar

80

 

 

certa

Char

1

X

 

Tabela 5.4 - Dicionário de Dados da tabela resposta.

5.3. Sintaxe SQL para criação das tabelas

Todas as tabelas da implementação foram criadas utilizando-se comandos SQL. A seguir será mostrado a sintaxe desses comandos durante a criação das tabelas questões e resposta.

a) Tabela questões
CREATE TABLE questoes (
numquest mediumint NOT NULL auto_increment,
questao text NOT NULL,
imagem varchar(80),
materia varchar(25) NOT NULL,
ano varchar(4) NOT NULL,
local varchar(30),
certas float(10,2),
erradas float(10,2)
PRIMARY KEY (numquest));

b) Tabela resposta
CREATE TABLE resposta (
numquest int(11) NOT NULL,
numresp char(1) NOT NULL,
descricao blob NOT NULL,
imagem varchar (80),
certa char(1) NOT NULL,
PRIMARY KEY(numquest,numresp),
FOREIGN KEY(numquest));

5.4. Descrição das funções PHP utilizadas

No decorrer deste trabalho, houveram várias situações onde funções nativas do PHP tiveram que ser utilizadas, dentre as quais pode-se citar a necessidade de se gerar números aleatórios para formular a prova aleatória, e para o tratamento das strings na implementação da busca rápida e na busca por texto.

Entre as funções que foram utilizadas deve-se dar destaque também às que se relacionam a banco de dados, mais especificamente ao MySQL, que permitem que se conecte à ele, realize consultas SQL no servidor, entre outras finalidades. Elas serão aqui apresentadas e comentadas uma a uma. As outras funções também receberão um comentário individual, apresentando inclusive a sua sintaxe.

a) Função: trim
Sintaxe: trim(string str);
Comentário: apaga os espaços em branco do início e fim de uma string.

b) Função: explode
Sintaxe: explode(string separador, string str);
Comentário: retorna um array contendo as partes da string com valores separaos por um separador.

c) Função: count
Sintaxe: count(mixed matriz);
Comentário: retorna o número de elementos de um array. Retorna 1 se a variável não for um array e 0 se a variável não estiver definida.

d) Função: strlen
Sintaxe: strlen(string str);
Comentário: retorna o comprimento de uma string.

e) Função: ceil
Sintaxe: ceil(float número);
Comentário: retorna o próximo número inteiro maior ou igual ao número especificado.

f) Função: range
Sintaxe: range(int lim_inferior, int lim_superior);
Comentário: retorna um array contendo um seqüência de números inteiros no intervalo especificado.

g) Função: srand
Sintaxe: srand(int semente);
Comentário: altera a semente do gerador de números aleatórios para a função rand();

h) Função: rand
Sintaxe: rand([int limite_inf], [lim_sup]);
Comentário: retorna um número aleatório dentro do intervalo especificado.

i) Função: shuffle
Sintaxe: shuffle(array matriz);
Comentário: embaralha os elementos de um array.

j) Função: mysql_connect
Sintaxe: mysql_connect(string[hostname],[usuário], [senha]);
Comentário: abre uma conexão a um servidor MySQL, retorna id_link se tiver sucesso, caso contrário retorna false.

k) Função: mysql_select_db
Sintaxe: mysql_select_db(string nome_banco_dados);
Comentário: depois de estabelecer conexão ao servidor de banco de dados, esta função faz conexão com o banco de dados requerido na função.

l) Função: mysql_query
Sintaxe: mysql_query(string consulta);
Comentário: trabalha enviando consultas em SQL ao servidor MySQL. Retorna true se tiver sucesso, caso contrário retorna false.

m) Função: mysql_fetch_array
Sintaxe: mysql_fetch_array(int resultado);
Comentário: retorna um array que indica o próximo registro do resultado da consulta ou false se não houver mais registros no array.

n) Função: mysql_data_seek
Sintaxe: mysql_data_seek(int id_resultado, int num_linha);
Comentário: durante a verificação dos registros resultantes da consulta SQL esta função move o ponteiro interno dos resultados. Retorna true se tiver sucesso, caso contrário retorna false.

o) Função: mysql_num_rows
Sintaxe: mysql_num_rows(int resultado);
Comentário: retorna o número de registros contidos em um resultado de consulta SQL enviada ao servidor.

5.5. Implementação PHP e HTML

O presente item tem por objetivo apresentar a implementação de todos os arquivos .php3 inclusos no estudo de caso, bem como uma breve descrição dos arquivos HTML. Os arquivos serão explicados um a um em suas principais características de implementação.

5.5.1. Index.html – Home Page

O objetivo desse arquivo é ser ponto de partida para as páginas que permitem fazer prova virtual e consulta a questão do banco de dados. Também é possível efetuar uma consulta rápida, através de palavras chaves digitadas pelo usuário.

A chamada ao arquivo que executa a consulta rápida é assim codificada no arquivo index.html:




Ao ser solicitada a consulta pelo usuário, é  requerida a execução do arquivo buscarap.php3 no servidor, sendo enviada as palavras do formulário como parâmetro para o arquivo PHP. Após execução é retornada a página HTML com as questões que satisfazem as palavras chaves.

Os outros dois links existentes na página servem respectivamente para solicitar a página de prova virtual e consulta de questões. Sua codificação fica assim:

Consulta
Prova virtual

Sendo assim essas duas páginas não utilizam nenhuma implementação PHP, sendo arquivos de HTML puro.

5.5.2. Prova.html

Este arquivo é o ponto principal da Home Page, pois será através dele que todos os parâmetros para execução da prova virtual serão enviados ao arquivo prova.php3 que criará a prova virtual.

Nesta página o usuário poderá optar pelos seguintes parâmetros para formulação da prova:
a) Matéria – através de um menu cascata será possível escolher entre as matérias disponíveis, somente uma será selecionada, sendo sua escolha obrigatória.

b) Local  - através de um menu cascata o usuário poderá selecionar, um dos locais das quais se originam as questões, ou seja qual universidade  a questão foi aplicada. Sua escolha é opcional, caso não seja escolhido nenhum local , a criação da prova se baseará em todas as provas dos locais cadastrados .

c) Ano – através de um menu  cascata pode-se selecionar o ano que as questões foram aplicadas. Sua seleção também é opcional.

d) Quantidade de questões – nesse menu cascata escolhe-se o número de questões da prova, ou seja dentro das questões encontradas com os parâmetros selecionados, será apresentada para o usuário uma prova com cinco, dez, quinze , ou vinte questões. A  seleção da quantidade de questões é o obrigatória sendo a padrão cinco.

e) Nível Dificuldade  - nesse menu cascata deve-se escolher qual o nível de dificuldade da prova a ser criada. As opções são: fácil, intermediário, difícil e aleatório. O processo de formulação da prova baseia-se nos critério acima mencionados, assim quando o total de questões encontradas com os parâmetros fornecidos pelo usuário é retornada, o sistema avalia dentro de todas as questões, quais as se encaixam no nível de dificuldade solicitado.
Esse critério de dificuldade é baseado em dois campos do banco de dados, que contem a informação da quantidade  de vezes em que a questão foi acertada ou errada. Essas informações de  acerto e erro são alimentadas para o banco a cada vez em que uma prova virtual é corrigida, assim as questões aumentam o numero de erro ou acerto em uma unidade.
Para elucidar melhor o processo de criação da prova, segue o exemplo: Suponha que o usuário tenha escolhido o nível fácil. Quando forem encontradas as questões com os parâmetros enviados, o sistema avaliara a porcentagem de acertos de cada questão, assim dentro das questões serão escolhidas as  N questões com maior percentual de acertos, sendo essas enviadas para o usuário.

A chamada ao arquivo .php3 que executa o processo de criação da prova, é assim codificado no arquivo prova.html:


... menus de seleção dos parâmetros...

5.5.3. Consulta.html

Este arquivo é o responsável pelas consultas que são realizadas ao banco de dados, é nele que se passa todos os parâmetros necessários para a realização da mesma, ele os envia para o arquivo consulta.php3 que se encarrega de processar as consultas em forma de SQL. 

Os parâmetros requisitados neste arquivo são:
a) Matéria – um menu cascata existe à disposição do usuário para que se escolha entre as matérias disponíveis qual é a desejada, a opção por uma matéria é opcional. Caso nenhuma matéria seja selecionada, o resultado da consulta abordará todas as matérias cadastradas no banco de dados.
b) Ano – a escolha do ano à que se refere a questão também é opcional e é feita através de um menu cascata. Se nenhum ano for selecionado, todos os cadastrados estarão incluídos na pesquisa.
c) Local – refere-se ao local onde a questão foi aplicada, também é opcional e em forma de menu cascata. Se nenhum local for selecionado, a consulta se baseará em todos os locais cadastrados.
d) Busca por texto – aqui o usuário pode, além de todos os parâmetros mencionados acima, optar por fazer uma busca por uma palavra-chave. Para isto basta digita-la no campo disponível, com isso a consulta será processada considerando a palavra-chave, e somente serão retornadas questões que de alguma maneira contenham a palavra digitada. 
e) Número de Questões – em um menu cascata deve-se selecionar a quantidade de questões que se deseja por página para o resultado da consulta. Pode-se optar por cinco ou dez questões por página.

Com todos estes parâmetros devidamente selecionados, de acordo com a necessidade do usuário, pode-se dar prosseguimento à consulta com a chamada do arquivo consulta.php3 que está assim codificado:


... menus de seleção dos parâmetros...

5.5.4. Prova.php3

O objetivo deste arquivo é gerar uma página html que contenha uma prova virtual com questões que atendam aos parâmetros escolhidos pelo usuário. Esse script receberá cinco variáveis oriundas da página prova.html, essas variáveis são geradas automaticamente quando o script é chamado, assim ficam disponíveis para utilização na formulação da prova virtual.
As variáveis são:
a) matéria
b) local de origem da questão
c) ano que a questão foi aplicada
d) número de questões da prova
e) nível de dificuldade

Das variáveis acima, a matéria, o número de questões e o nível de dificuldade são de seleção obrigatória, sendo o ano e o local opcionais. Caso o ano e o local não sejam escolhidos, a consulta se baseará em todos os anos e locais cadastrados.

Com toda as variáveis passadas, o script segue-se o processo de geração do código SQL para consulta das questões. A cada variável existe um processo que determina o trecho SQL que deve ser criado, assim ao final de todos os processos tem-se uma string completa com todo o código para ser executado no banco de dados. Somente o número de questões não influenciará na geração do código SQL, servindo apenas para controle das questões que serão exibidas.

Tratamento da variável matéria:

$par1 ="materia ='$materia'";
A variável $par1 recebe por exemplo a string materia = historia, caso seja esta a seleção feita pelo usuário na página prova.html.

Tratamento da variável local:

if ($local <> 'np')
     {
       $par2 ="AND local = '$local'";
     }
Caso o parâmetro local tenha sido selecionado pelo usuário, ou seja, diferente de np, a variável $par2 receberá a string and local = URI, por exemplo.

Tratamento da variável ano:

if ($ano <> 'np')
     {
       $par3="AND ano = '$ano'";
     }
Caso o parâmetro ano tenha sido selecionado pelo usuário, ou seja, diferente de np, a variável $par3 receberá a string and ano = 2000, por exemplo.

Tratamento da variável nível de dificuldade:

Fácil (1)
if (($nivel == 1) || ($nivel == 2))
  {
       $par4=" order by porcen desc";
       $cont=0;
       }

Das questões selecionadas, será agregada ao código SQL a cláusula order, que ordenará de forma decrescente as questões pelo campo porcen. Campo este que contém o cálculo dos campos certas e erradas, resultando na porcentagem de pessoas que acertaram a questão.

Intermediário(2)
if (($nivel == 2) and ($numreg>$numques))
  {
      $cont=Ceil(($numreg - $numques)/2);
       } 

Como visto no trecho anterior, caso o nível seja o 2 também será incluida a cláusula order descrita acima. Porém, dentre as questões selecionadas, e se estas superarem o número de questões escolhidas pelo usuário, a variável $cont receberá a posição onde começa a leitura sequencial dos registros.

Difícil(3)
if ($nivel == 3)
    {
      $par4=" order by porcen asc";
       }

Das questões selecionadas, será agregada ao código SQL a cláusula order, que ordenará de forma crescente as questões pelo campo porcen. Assim, serão selecionados por primeiro as questões mais difíceis, ou seja, com menor porcentagem de acerto.

Aleatório(4)
if ($nivel == 4)
{
$numbers = range(1,$numreg-1); //gera uma sequencia de //numeros inteiros do intervalo especificado
srand(time()); // incia semente aleatoria atraves do tempo shuffle($numbers); //embaralha os  numeros contidos no array
$cont = $numbers[0]; //primeira posicao do vetor aleatorio   
}

// trecho do código que implementa a seleção e impressão das questões em código HTML.

if ($nivel == 4)
{
       mysql_data_seek($sqlresult,$numbers[$x]);
       $x++;
}

No primeiro trecho de código, é gerado um vetor com números aleatórios de 1 até a quantidade de registros encontrados utilizando as funções srand(), shuffle() e range(). Ao final do trecho que gera uma questão HTML, é testado o segundo trecho de código descrito acima, que escolhe a próxima questão à  ser impressa através da posição seguinte do vetor aleatório. Por exemplo, suponha-se que tenham sido encontrados 30 registros sendo esses numerados de 1 à 30. A posição 1 do vetor tem o valor 10, então com a função mysql_data_seek posiciona-se um ponteiro para o registro 10, e no próximo laço outro registro será selecionado pelo valor aleatório do vetor seguinte..

5.5.4.1. Concatenação das variáveis

Com todas os parâmetros devidamente passados pelo usuário e tratados pelo programa, é formulada a sintaxe da consulta SQL. Isto acontece com a concatenação de todas as variáveis $parx.
$partodos = $par0.$par1.$par2.$par3.$par4;

O valor de cada variável $parx é o seguinte:
a) $par0 - Select * from questoes where
b) $par1 – materia = $materia
c) $par2 – and local = $local
d) $par3 – and ano = $ano
e) $par4 – order by porcen asc(desc)

Após estar formado o código SQL, segue-se os passos:
a) conexão com o servidor MySQL
Através da função: mysql_connect (localhost,usuário,senha) o script faz a
conexão com o servidor MySQl.

b) conexão com a base de dados vestiba
Através da função: mysql_select_db (vestiba) é feita a seleção do banco de dados a ser usado, nesse caso o banco vestiba

c) execução da query da variável $partodos
Através da função: $sqlresult = mysql_query ("$partodos"), é executada a instrução SQL contida na variável $partodos no banco vestiba, retornando um conjunto de registros, que ficam armazenados em forma de vetor na variável $sqlresult.

d) posicionamento do ponteiro para o registro inicial
O objetivo da função: mysql_data_seek($sqlresult,$cont); é posicinar o ponteiro para a posição $cont(variavel essa definida pela escolha do nível de dificuldade),dentro do conjunto de registros na varivel $sqlresult.

e) impressão das questões e respostas
Através de um laço é executada as funções que imprimem o número de questões selecionadas pelo usuário ou  as que forem encontradas caso esse número seja inferior ao das questões solicitadas. Seguem-se os passos:

a) Imprime cabeçalho da questão
b) Calcula as porcentagens de erro e acerto da questão através dos campos certas e erradas desse registro.
c) Identifica através de código HTML a questão para futura correção.
d) Imprime os gráficos em forma de tabelas HTML.
e) Executa outra query para seleção das respostas da questão:
select numquest, numresp,descricao,certa from resposta where numquest=$numreg
f) Gera um formulário em forma de radio buttons com as respostas da questão, usando um laço para as número de respostas.
g) Caso o nível de dificuldade seja aleatório, será posicionado o ponteiro para a novo registro a ser impresso, caso contrário é selecionado o registro seguinte.
h) Caso os critérios do laço de impressão de questões  na seja validado, é encerrada o laço e finalizado o código HTML.

Assim com esses passos gera-se o código HTML com a prova virtual, sendo agora possível sua correção através dos script de correção de prova.

5.5.5. Consulta.php3

É o arquivo responsável por processar as consultas solicitadas pelo usuário. Após todos os parâmetros terem sido selecionados no arquivo consulta.html, o consulta.php3 trabalhará da seguinte forma:
a) Uma sintaxe SQL com as requisições feitas é montada, para isto todos os parâmetros são concatenados, ou seja, eles são lidos um a um e depois são unidos para formar a sintaxe.
  ...
  if ($materia <> 'np')
  {
  $par2 =" materia = '$materia'";
  $par=1;
  }
//nesta primeira condição a matéria selecionada é armazenada em //$par2.
  if ($ano <> 'np')
  {
  $par4 =" ano = '$ano'";
     if ($par==1)
     {
      $par3=' AND ';
     }
  $par=1;
  }
//na segunda condição o ano selecionado é armazenado em $par4.
  if ($local <> 'np')
  {
  $par6 =" local = '$local'";
     if ($par==1)
     {
     $par5=' AND ';
     }    
  $par=1;
  }
//e na terceira o local selecionado é armazenado em $par6.
  ...

Para o caso de se realizar uma busca por palavra-chave o processo foi implementado usando as funções trim(), explode() e count(). 

Após a palavra ser digitada no campo o seguinte código é executado:

$buscar = trim($buscar);//elimina brancos no inicio e fim da //string
$recexplode = explode(' ',$buscar);// cria vetor com todas //palavras do campo buscar
$contpalavras = count($recexplode);//conta o tamanho do vetor

Em seguida, a sintaxe SQL para a busca da palavra desejada nas questões é armazenada em $parbusca:
$parbusca[$x]="(questao like '% $recexplode[$i] %' or questao
like '$recexplode[$i] %' or questao like '% $recexplode[$i]_')"
;

Com isto todas as condições passadas pelo usuário estão consideradas, o próximo passo é unir todas essas condições em uma sintaxe SQL única:

$partodos='Select * from questoes'. $par1. $par2. $par3. $par4. $par5. $par6.
$parbusca[$i];

b) próximo passo é tratar da conexão com o banco de dados, primeiramente conecta-se ao banco de dados e após à base de dados especifica.
if ($conectou = mysql_connect (localhost,root,php3000))  //testa //conexão ao banco de dados
if ($conecbd = mysql_select_db (vestiba))  //testa conexão à //base de dados

c) Com a conexão à base de dados estabilizada e com a sintaxe SQL para realização da consulta montada, basta agora executar esta consulta SQL no banco de dados para ter os resultados.

$sqlresult = mysql_query ("$partodos");//executa a query //guardando o resultado em $sqlresult

d) Realizada a consulta SQL, já se pode controlar os registros que retornaram do banco de dados mostrando-os na tela.

$row = mysql_fetch_array($sqlresult)//a variável $row recebe o //controle de se ainda há registros para serem mostrados

print $row ["questao"];//o registro retornado é impresso na //tela.

5.5.6. Corrige.php3

A finalidade desse script é fazer o tratamento do código HTML gerado pelo script prova.php3, assim quando o usuário tiver respondido as questões e solicitar sua correção, será chamado o script corrige.php3 que formará outra página HTML contendo um tabela confrontando as respostas do usuário com as respostas corretas, bem como resultado final de total de acertos e erros. Pelo fato de não haver necessidade de segurança das respostas, foi implementa um solução que mantém dentro da própria página que contem a prova, as suas respostas corretas. Isso é feito incluindo tags HTML que ficam ocultadas para visualização do usuário no browser, assim ao executar o script de correção não é necessário o acesso a banco de dados para consulta e  sim apenas o confrontamento da questão respondida com a correta, incluída no próprio código da prova. Porém uma outra rotina é executada, a que permite incrementar o valor dos campos, que definem o nível de dificuldade da prova, assim ao acertar uma questão é somada um  valor ao campo certas, e o mesmo ocorre para o caso de erro.  Essas informações de acerto e erro, servirão de base para formulação das próximas provas virtuais, conforme nível de dificuldade escolhido.

Esse processo se executa da seguinte maneira:

Ao gerar a prova virtual são criados dois vetores com números seqüências equivalente ao número de questões da prova, são eles resposta[] e correta[]. No vetor resposta existem um índice que contem a letra da resposta escolhida pelo usuário. No vetor correta[] o índice de mesmo número da resposta contem uma string com a letra correta da questão seguido de sua identificação na banco de dados. Essa facilidade de utilizar vetores é uma combinação da código HTML e da linguagem PHP que permite passagem de vetores como variáveis. Além disso existe outra variável que possui o valor da quantidade de questões da prova, com ela será executado o laço que cruzara a informação dos dois vetores, caso sejam iguais é gerada a rotina do script que imprime o trecho da tabela com a informação do resultado e além disso é executada uma query com a função UPDATE que atualiza o valor do campo certa do registro identificado no vetor correta , no caso de erradas ocorre o mesmo processo de impressão porém o campo a ser
atualizado é o erradas. A seqüência do código é: 

a) Processo de conexão ao servidor e ao banco vestiba para atualização dos dados na rotina de correção.
b) Laço inicial contando o número de questões
c) Extrai-se o valor do vetor correta[], dividindo a string em duas novas variáveis, a com o valor da letra correta ($certa) e outra com o identificador(chave primária) da questão($id)
d) Compara-se a variável $certa com o valor do vetor resposta de mesmo índice.
e) Executa-se o processo de impressão do código HTML com a tabela de resultado
f) Atualiza-se o valor dos campos certas ou erradas através da execução da instrução SQL, baseada no número da questão.
g) Finaliza o código assim que sair do laço.

5.5.7. Buscarap.php3

Aqui é onde ocorrerá todo o processamento da consulta por palavra-chave. A implementação deste arquivo gira em torno de 3 funções: trim(), expode() e count(). Elas foram utilizadas da
seguinte maneira:

$buscar = trim($buscar);//elimina brancos no inicio e fim da //string
$recexplode = explode(' ',$buscar);// cria vetor com todas //palavras do campo buscar
$contpalavras = count($recexplode);//conta o tamanho do vetor

Com estas funções as palavras digitadas no campo foram preparadas para a realização da consulta SQL:

$sqlresult = mysql_query ("Select * from questoes where questao like '%
$recexplode[$i] %' or questao like '$recexplode[$i] %' or questao like '%
$recexplode[$i]_'");

A conexão deve ser testada em seguida:

if ($conectou = mysql_connect (localhost,root,php3000))  //testa //conexão ao banco de dados
if ($conecbd = mysql_select_db (vestiba))  //testa conexão à //base de dados

Tendo os resultados da consulta em $sqlresult o último passo é tratar da listagem das questões encontradas:

$row = mysql_fetch_array($sqlresult)//a variável $row recebe o //controle de se ainda há registros para serem mostrados

print $row ["questao"];//o registro retornado é impresso na //tela.

Conclusões

O objetivo do trabalho foi alcançado, tendo em vista que se buscava verificar a possibilidade de se montar um servidor Web utilizando ferramentas disponíveis na Internet, bem como utilizar as mesmas para a construção de um Site que possibilite acesso à uma base de dados. 

Com relação ao banco de dados, inicialmente optou-se pelo PostgreSQL, mas houveram dificuldades de implementação no que diz respeito à conexão  entre o servidor de banco de dados e o browser, outro fator que determinou a eliminação do PostgreSQL do trabalho foi a sua escassa documentação. Então passou-se para o MySQL, que mostrou-se uma ferramenta de grande velocidade, porém sem uma grande ênfase no quesito segurança, sendo que seu uso para tal fim não é recomendado pelos maiores especialistas. Além disto, deve-se destacar a facilidade de uso referente à manipulação dos dados, como criação de tabelas, inserção de registros, alteração de dados, etc. Outro ponto importante que fez do MySQL o banco de dados escolhido foi a documentação um pouco mais abrangente, além dos documentos oficiais possui no mercado alguns livros que facilitam o seu aprendizado.

A linguagem PHP facilitou bastante a manipulação com o banco de dados, isto por possuir funções nativas que são específicas para cada banco, no caso do MySQL são mais de 30 funções que dão a possibilidade de se realizar todos os tipos de operações com a base dados através de um browser. Mas, não possui somente funções para bancos de dados, elas abrangem itens como segurança, vetores, strings, etc.

Estas duas ferramentas integradas com o sistema operacional Linux e o servidor Apache Web Server, possibilitaram a implementação do Site descrito no capítulo 5. Esta implementação veio a por em prática todo o conhecimento adquirido no decorrer do presente trabalho, onde pôde-se observar que todas as ferramentas utilizadas tiveram uma integração e um desempenho satisfatórios dentro das características da implementação em questão. Ou seja, o banco de dados MySQL portou-se muito bem por a implementação não necessitar de tratamentos de segurança, mas somente de uma conexão rápida e eficaz, e a linguagem PHP mostrou uma grande familiaridade com o MySQL através das suas funções nativas específicas para este banco.

Sugestões para trabalhos futuros

Como sugestão para trabalhos futuros, fica a implementação de um Site com a utilização do módulo de segurança SSL do Apache, e o espelhamento do banco de dados de uma empresa para a Web.

Referências Bibliográficas

[ARO 00] Aroca, Rafael V., 2000. "Tutorial MySQL", http://www.mysql.com.br , 06/2000.

[ATK 99] Atkinson, Leon. 1999. "Core PHP Programming", Prentice Hall PTR, USA.

[BAK 99] Bakken, Stig S e outros. 1999. "PHP3 Manual", PHP Documentation Group.

[BAR 99] Barreto, Mauricio Vivas de Souza. 1999. "Tutorial de Linguagem PHP", 
http://www.vivas.com.br , 06/2000.

[CAS 00] Castagnetto, Jesus e outros. 2000. "Professional PHP Programming", Wrox, USA.

[CON 99] Conectiva Informática. 1999. "Conectiva Guia do Usuário", Curitiba.

[FIS 99] Fisher, Herbert G. 1999. "PHP Guia de Consulta Rápida", Novatec, São Paulo.

[JAM 99] Jamil, George L. 1999. "Linux para principiantes", Axcel Books, Rio de Janeiro.

[KAB 98] Kabir, Mohammed J. 1998. "Apache Server Bible", IDG Books, USA.

[RAT 98] Ratsschiller, Tobias. 1998. "Building Dynamic Websites with PHP". http://www.phpwizard.net , 04/2000.

[YAR 99] Yager, Randy Y. e outros. 1999. "MySQL & mSQL", O'Reilly, USA.

"Hypertext Preprocessor", http://www.php.net , 03/2000.

"PHP and MySQL examples and resources", http://www.webrdev.com , 04/2000.

"The resource for PHP developers", http://www.phpbuilder.com , 05/2000.

Você pode ser colaborador da ABUSAR
Envie seu artigo, que estudaremos sua publicação, com os devidos créditos !

  

abusarXspeedy.jpg (29296 bytes)

Compartilhe a Internet
usando FreeBSD + Squid
Daniel de Melo Gonçalves
Detalhes

DICAS

Compartilhamento de Conexão

Limite de Download

Mudança de Endereço mantendo o Speedy Antigo

Cancelando o Speedy

Comparação entre Serviços de Banda Larga

Qual a melhor tecnologia da banda larga?

Como saber se seu Speedy é ATM, Megavia, PPPOE ou Capado (NovoSpeedy)  

Guia para reduzir gastos Telefônicos

Economizando Megabytes em sua Banda Larga

"Evolução" dos Pop-ups do Speedy

SEGURANÇA

Uso seguro da Internet

Acesso a bancos
Uma ótima dica, simples mas muito interssante...

Cartilha de Segurança para Internet
Comitê Gestor da Internet

Mantenha o Windows atualizado (e mais seguro) !

Dicas de como comprar
com segurança na internet

Site Internet Segura

Dicas para navegação segura na Web

Proteja seu Micro

Proteja seu PC
Microsoft Security

AÇÃO CIVIL PÚBLICA - MPF
HISTÓRICO
- Processo - Réplica - Quesitos - Decisão

Quer pôr fotos na Web e não sabe como?

Tem coisas que só a telecômica faz por você !

Terra