Você está na página 1de 71

UNIVERSIDADE REGIONAL INTEGRADA DO

ALTO URUGUAI E DAS MISSES


URI CAMPUS DE ERECHIM

DEPARTAMENTO DE ENGENHARIAS E CINCIA DA COMPUTAO


CURSO DE GRADUAO EM INFORMTICA

MANIPULANDO BANCO DE DADOS VIA INTERNET COM


FERRAMENTAS GRATUITAS

Lucas Lopes dos Santos


Ronaldo do Amaral

Prof. Jacques Dulio Brancher


ORIENTADOR

ERECHIM/RS, JULHO DE 2000

ii

MANIPULANDO BANCO DE DADOS VIA INTERNET COM


FERRAMENTAS GRATUITAS

Trabalho apresentado como requisito obteno do grau de


Bacharel em Informtica pela Universidade Regional Integrada do
Alto Uruguai e das Misses URI, Campus de Erechim sob
orientao do Professor Jacques Dulio Brancher

ERECHIM/RS, JULHO DE 2000


iii

SUMRIO
SUMRIO...................................................................................................................................................................IV
RESUMO.....................................................................................................................................................................VI
ABSTRACT...............................................................................................................................................................VII
LISTA DE ABREVIATURAS...............................................................................................................................VIII
NDICE DE FIGURAS..............................................................................................................................................IX
NDICE DE TABELAS...............................................................................................................................................X
INTRODUO...........................................................................................................................................................11
1.LINUX.......................................................................................................................................................................13
1.1.UM BREVE HISTRICO DO LINUX ........................................................................................................................13
1.2.DISTRIBUIES DO LINUX...................................................................................................................................14
1.3.INSTALAO DO LINUX.......................................................................................................................................15
2.MYSQL.....................................................................................................................................................................17
2.1.O QUE MYSQL?...............................................................................................................................................17
2.2.BREVE HISTRICO...............................................................................................................................................17
2.3.POR QUE MYSQL?..............................................................................................................................................18
2.4.PRINCIPAIS CARACTERSTICAS.............................................................................................................................18
2.5.POLTICA DE USO NA WEB..................................................................................................................................19
U$ 40...........................................................................................................................................19
U$ 25...........................................................................................................................................19

2.6.INFORMAES BSICAS SOBRE INSTALAO......................................................................................................20


2.7.COMPATIBILIDADE DO BANCO MYSQL COM A LINGUAGEM SQL.....................................................................21
2.8.TRANSAES.......................................................................................................................................................22
2.9.STORE PROCEDURES E TRIGGERS........................................................................................................................23
2.10.SEGURANA E PRIVILGIOS DE ACESSO ...........................................................................................................23
2.10.1.User names e password.............................................................................................................................23
2.11.COMO FUNCIONA A CONEXO AO MYSQL.......................................................................................................25
2.12.PRINCIPAIS FERRAMENTAS PARA UTILIZAO DO MYSQL..............................................................................25
2.12.1.MySQL.......................................................................................................................................................25
2.12.2.Mysqladmin...............................................................................................................................................26
3.PERSONAL HOME PAGE(PHP).........................................................................................................................29
3.1.O QUE PHP ?....................................................................................................................................................29
3.2.HISTRICO...........................................................................................................................................................30
3.3.BANCOS DE DADOS.............................................................................................................................................31
3.4.INSTALAO EM SISTEMAS UNIX......................................................................................................................32
3.5.CONFIGURAO ..................................................................................................................................................34
3.6.SINTAXE BSICA.................................................................................................................................................35
3.6.1.Delimitadores..............................................................................................................................................35
3.6.2.Separador de Instrues..............................................................................................................................36
3.6.3.Definio de Variveis................................................................................................................................36
3.6.4.Comentrios.................................................................................................................................................36
3.7.EXEMPLOS...........................................................................................................................................................37
3.7.1.Um exemplo simples....................................................................................................................................37
3.7.2.Exemplo de PHP com formulrios 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
iv

4.2.O SERVIDOR APACHE..........................................................................................................................................41


4.3.BREVE HISTRICO...............................................................................................................................................42
4.4.INSTALAO........................................................................................................................................................42
4.4.1.Os mdulos do Apache................................................................................................................................43
4.4.1.1.O mdulo PHP......................................................................................................................................................43

4.5.CONFIGURAO...................................................................................................................................................44
4.5.1.Arquivos de configurao............................................................................................................................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.IMPLEMENTAO...............................................................................................................................................47
5.1.FLUXOGRAMA......................................................................................................................................................48
5.1.1.Descrio detalhada dos mdulos...............................................................................................................49
5.1.1.1.Mdulo 1 Fazer Prova Virtual............................................................................................................................49
5.1.1.2.Mdulo 2 Busca Rpida.....................................................................................................................................50
5.1.1.3.Mdulo 3 Consultar Questes............................................................................................................................50

5.1.2.Descrio do Fluxograma...........................................................................................................................51
5.2.MODELAGEM DOS DADOS...................................................................................................................................52
5.2.1.Descrio das Tabelas.................................................................................................................................52
5.2.2.Modelo E-R (Entidade - Relacionamento)..................................................................................................53
5.2.3.Dicionrio de Dados...................................................................................................................................53
5.3.SINTAXE SQL PARA CRIAO DAS TABELAS......................................................................................................54
5.4.DESCRIO DAS FUNES PHP UTILIZADAS.......................................................................................................55
5.5.IMPLEMENTAO 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.Concatenao das variveis...................................................................................................................................63

5.5.5.Consulta.php3..............................................................................................................................................64
5.5.6.Corrige.php3................................................................................................................................................66
5.5.7.Buscarap.php3.............................................................................................................................................67
CONCLUSES...........................................................................................................................................................69
SUGESTES PARA TRABALHOS FUTUROS...................................................................................................................69
REFERNCIAS BIBLIOGRFICAS......................................................................................................................71

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 manipulao de uma base de dados. Partiu-se inicialmente para o estudo de quais seriam as
ferramentas necessrias e disponveis para a instalao de um servidor Web. A partir disto foi
implementado um Site para simulao de prova de vestibular. Este site tem como caracterstica a
possibilidade de um usurio consultar questes, gerar provas virtuais, fazer busca por palavrachave, em um banco de dados armazenado no servidor.
Sendo o desenvolvimento prtico de um site o objetivo final do trabalho bem como a simulao
de um servidor Web, iniciou-se o processo de definio dos tipos de ferramentas e a escolha
entre as opes disponveis. Seguiu-se ento o estudo das ferramentas escolhidas: sistema
operacional Linux, banco de dados MySQL, servidor Apache Web Server e a linguagem de
programao PHP. Aps concludo o estudo, comeou a criao do servidor Web com a
instalao e configurao em forma padro das ferramentas acima citadas em um computador
pessoal. Com o servidor Web devidamente configurado, vieram os testes do funcionamento da
linguagem de programao PHP para acesso base de dados MySQL. O prximo passo foi a
implementao do site baseada na construo da base de dados, definio da estrutura do site,
implementao dos scripts PHP que geram as pginas HTML atravs das consultas ao banco de
dados, e tambm as pginas HTML simples.
Com esse estudo terico e prtico, observou-se a grande utilidade de bancos de dados em um
Web Site. Pois permite a implementao de vrias solues que dinamizam o contedo de um
site, facilitam sua administrao, possibilita a criao de aplicaes cliente-servidor completas,
comrcio eletrnico e todas as facilidades que uma base de dados pode oferecer. Mesmo sendo
uma soluo gratuita, mostrou-se bastante eficiente e capaz de ser soluo para quase todos os
tipos de Web Site.
Palavras-chaves: Internet, PHP, MySQL, Linux, Apache, Site.

vi

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.

vii

Lista de Abreviaturas
API Interface de programao 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 Aplicaes para Supercomputao
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

viii

ndice de Figuras

FIGURA 3.1 - EXEMPLO DE CDIGO PHP EMBUTIDO EM UM CDIGO HTML...................................29


FIGURA 3.2 - EXEMPLO DE ALTERNNCIA ENTRE OS MODOS PHP E HTML.....................................30
FIGURA 4.3 - GRFICO COMPARATIVO DA UTILIZAO DO APACHE NO MUNDO........................42
FIGURA 5.4 - FLUXOGRAMA DA SEQNCIA DE AES EXECUTADAS DURANTE O PROCESSO
DE VISITA DE UM USURIO HOME PAGE...................................................................................................48

ix

ndice de Tabelas

TABELA 2.1 - POLTICA DE USO DO MYSQL NA WEB................................................................................19


TABELA 3.2 - HABILITAO DO BANCO DE DADOS DURANTE A INSTALAO DO PHP................33
TABELA 5.3 - DESCRIO DOS CAMPOS DA TABELA QUESTES..........................................................53

Introduo
A Internet, a grande rede mundial de computadores, hoje a maior fora propulsora em quase
todos os segmentos da informtica, uma revoluo nos meios de informao sem limites e em
plena expanso.
Nos dias de hoje possvel compartilhar informaes de todos os tipos , desde simples textos a
imagens tridimensionais, de sons a vdeos de ltima gerao com um simples clique, seja do
mais remoto lugar aos grandes centros, tudo isso graas a Internet.
Atualmente esse processo de compartilhamento de informaes vem criando novas formas de
negociao, remodelando completamente o sistema de logstica das empresas, estreitando
ligaes comerciais e pessoais. Todas essas informaes e interao entre as partes envolvidas
pode-se dar atravs de bancos de dados, independente de plataforma de hardware, sistema
operacional, topologia de rede, aplicativo ou localizao geogrfica. Pode-se por exemplo
estreitar a ligao de um representante de uma industria, fazendo um pedido via internet,
inserindo os dados do pedido automaticamente no banco de dados da empresa, disponibilizando
informaes para a rea de produo e esta para a expedio, transferindo parte da cadeia de
produo para a internet.
Esse processo de utilizao dos conceitos cliente-servidor, s era possvel dentro de um espao
fsico pequeno, ou com recursos tecnolgicos avanados e caros. Hoje desenvolvem-se
aplicativos inteiros que utilizam a Web como interface para acesso a banco de dados. Dentre os
inmeros sistemas pode-se citar o PHP, o ASP e o Cold Fusion.
Tendo em vista a crescente evoluo destas ferramentas e sobretudo a sua especializao, optouse 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 so:
a) Sistema Operacional - Linux
b) Servidor - Apache Web Server
c) Banco de Dados - MySQL
d) Linguagem de Programao - PHP

12

A motivao inicial para a escolha das ferramentas acima citadas foi o custo, que nulo.
Percebeu-se com o desenvolvimento uma srie de outras facilidades que vieram a corroborar a
idia inicial que se tinha.
Com o objetivo de exemplificar a utilizao das ferramentas, desenvolveu-se um ambiente de
servidor de pginas Web. Nesse ambiente, implementou-se um site que permite ao usurio
realizar provas virtuais de concurso vestibular, bem como consultas s questes cadastradas em
um banco de dados.
Assim, o presente trabalho busca apresentar uma soluo 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 captulo apresentado o sistema operacional utilizado, o Linux. Incluindo um breve
histrico, as distribuies existentes e algumas dicas de instalao.
O servidor de banco de dados MySQL est no segundo captulo do trabalho, que contm suas
principais caractersticas, as bases da instalao, sua utilizao na Web, suas ferramentas clientes
e alguns conceitos da linguagem SQL.
O terceiro captulo do trabalho trata da linguagem de programao PHP, conceituando-o,
apresentando os processos de instalao e configurao, descrevendo uma idia bsica da sintaxe
da linguagem e citando alguns exemplos.
No quarto captulo discorre o servidor Apache Web Server, mostrando o funcionamento bsico
de um servidor Web, os processos de instalao e configurao bsica e descrevendo tambm
sobre o protocolo SSL.
No quinto e ltimo captulo est documentada a implementao realizada neste trabalho.
Abordando todo o seu processo de desenvolvimento desde a sua esquematizao, passando pela
modelagem dos dados, e chegando at a codificao em PHP e HTML.

13

1. Linux
Neste captulo ser abordado o sistema operacional Linux, iniciando com um breve histrico,
passando pela descrio e comentrios de algumas das principais distribuies e finalizando com
algumas dicas e caractersticas do processo de instalao do mesmo.
1.1.

Um breve histrico do Linux

O sistema operacional Linux uma verso gratuita distribuida do primeiro UNIX desenvolvido
por Linus Torvalds na Universidade de Helsinque na Finlndia. O UNIX um dos sistemas
operacionais mais populares do mundo por causa de sua grande base de suporte e distribuio
[JAM 99]. O desenvolvimento do Linux contou com a participao de vrios programadores
UNIX e especialistas em Internet, dando a qualquer um que possusse algum conhecimento e
experincia necessrios 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 verso 0.01 ficou pronta, mas nenhuma publicao foi feita para esta
verso, suas fontes no foram nem sequer executadas.
Dois meses depois, em 5 de outubro de 1991, Linus lanou a primeira verso oficial do Linux, a
verso 0.02, porm pouco acrescentava em relao verso anterior. Depois da verso 0.03,
Linus desenvolveu o sistema at a verso 0.10, quando mais pessoas comearam a trabalhar no
desenvolvimento. Dando seguimento ao sistema, Linus elevou o nmero da verso para 0.95, e
segundo ele, logo estaria pronto para o lanamento de uma verso oficial.
Duas importantes fontes de software para o desenvolvimento do Linux foram o projeto GNU da
Free Software Fundation (Fundao de Software Livre), uma organizao de porte internacional
que suporta a apia projetos diversos ligados ao cdigo livre, e os trabalhos em curso na
Universidade de Berkeley. Destas duas fontes saram diversos dos atuais utilitrios e aplicativos
do Linux, como o compilador C e os servidores de rede, entre outros.
Aps passar por vrias verses, o Linux hoje um clone do UNIX completo. Possuindo
compatibilidade com praticamente todos os grandes pacotes gratuitos de software. As verses
disponveis esto em vrios idiomas, possuindo as variadas aplicaes, processadores de texto,
suportando redes e gerenciadores de banco de dados, e outras.

14

1.2.

Distribuies do Linux

Sendo o Linux um software gratuito, a sua distribuio no controlada por nenhuma


organizao ou entidade. Por isso, qualquer cidado est apto distribui-lo. Mas existem
algumas empresas que cobram pela mdia.
Isso ocorre porque uma empresa pode obter gratuitamente o ncleo do Linux, trabalhar em cima
desse ncleo, adicionar interfaces grficas, aplicaes, documentar e vender este pacote. Assim
foi o surgimento das verses comerciais.
A caracterstica de ser um software gratuito onde qualquer pessoa pode manipul-lo, torna o
Linux um sistema operacional de muitas distribuies. As distribuies disponveis podem variar
das mais completas, que vm com todo o software que voc precisa e mais alguns aplicativos,
at as mais enxutas, que so indicadas para usurios que no dispem de muito espao em
disco. Essas verses enxutas possuem apenas o bsico necessrio para o seu funcionamento.
A seguir sero apresentadas e comentadas algumas distribuies do Linux disponveis
atualmente:
a) Red Hat: Esta distribuio tem anexada ao ncleo do sistema recursos de programas de
configurao de recursos de sistema, interfaces grficas, especializaes para cliente e
servidor, entre outras. A caracterstica forte dessa distribuio a facilidade de instalao. O
processo de instalao feito atravs 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 atualizao do sistema. Junto com a distribuio Red Hat so
fornecidas as interfaces grficas X-Windows e KDE [JAM 99].
b) Slackware: uma verso que apesar de no suportar os pacotes da Red Hat, traz consigo um
conversor que permite trabalhar com eles. O Slackware possui opes de segurana, como
por exemplo, o de avisar que uma funo de inicializao do sistema (script) foi alterada e
que isto poder trazer problemas. Possui a interface grfica X-Windows e o gerenciador de
janelas fvwm95.
c) Caldera: uma verso voltada para uso empresarial. Possui uma srie de drivers, ferramentas
e recursos para interligao do Linux em rede, como servidor. Esta verso vem com uma
licena de um mdulo de desenvolvimento do banco de dados Sybase e o ambiente grfico
KDE, incorpora tambm compatibilidade com o mecanismo RPM da Red Hat.
d) Debian: a verso indicada para programadores mais experientes. Possui a sua prpria
estrutura de pacotes, o formato DEB, que utilizado para instalao do sistema e dos

15

aplicativos. Os especialistas o consideram a ferramenta de instalao mais verstil do


mercado.
e) Conectiva: A distribuio Conectiva um trabalho feito em cima da verso Red Hat,
incluindo tradues de mensagens e textos de apoio para o portugus e definies de
hardware que normalmente so usados no Brasil, como placas de controle, monitores,
impressoras, mouses, etc.
1.3.

Instalao 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 instalao do Linux, por ele ser um sistema complexo, abrangente e escrito por diversas
pessoas, no considerada umas das tarefas mais simples. Ele difere-se do sistema operacional
Windows, por exemplo, por possuir diversas formas de instalao, isso ocorre devido duas
peculiaridades do Linux:
a) Possui variadas fontes de instalao, podendo ser instalado a partir de um ou dois CDs,
utilizando-se ou no um disquete de inicializao. Uma outra forma via Internet ou via FTP
(File Transfer Protocol). Ou ainda poder ter seu contedo de instalao copiado para uma
unidade de disco de um computador e a partir dali ser instalado.
b) Possui diferentes distribuies. Como cada distribuio tem suas caractersticas e finalidades,
o processo de instalao de cada uma delas poder ter seqncia, durao e procedimentos
diversos.
A seguir sero descritos alguns recursos mnimos de mquina necessrios para a instalao do
Linux, e algumas caractersticas de dispositivos que seria importante o usurio ter conhecimento
antes de iniciar o processo de instalao:
a) Processador: Processadores da Intel igual ou superior aos 386, processadores no-Intel como:
Alpha, SPARC, Power PC, so suportados pelo Linux.
b) Memria: O Linux requer no mnimo 2 MegaBytes de memria, no caso de servidores de
rede recomenda-se no mnimo 16 MegaBytes.
c) Discos e Controladoras: O Linux requer uma configurao especial para computadores que
possuam controladoras SCSI, caso contrrio, com discos normais ser necessrio criar uma
partio para a instalao. Isso significa que o Linux poder ser instalado no mesmo disco do
DOS ou Windows, s que em partio diferente. O espao da partio recomendvel
depender da quantidade de pacotes que sero instalados, a verso mnima do Linux requer

16

pelo menos 20 MegaBytes, mas instalando-se aplicativos, editores de texto, ambientes


grficos esse valor poder chegar a 200 MegaBytes.
d) Monitor de Vdeo: A configurao do monitor de vdeo requer o conhecimento de que placa
de vdeo e monitor esto instalados no computador. Alm de modelo e fabricante, deve-se
tambm passar como parmetro no momento da instalao a quantidade de memria de vdeo
que se possui, freqncias usadas pelo monitor, tipos de recursos, etc.

17

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 distribuio para plataformas no-Windows
que o utilizam em um servidor Web.
MySQL um servidor multiusurio, multitarefa, compatvel com o padro SQL (Structured
Query language Linguagem de Consulta estruturada), linguagem essa amplamente utilizada
para manipulao de dados em RDBMS (Banco de dados Relacionais), sendo considerada um
ferramenta de manipulao de base de dados de tamanho moderado.
As principais caractersticas que destacam MySQL so: sua velocidade proporcionada pela sua
implementao leve que no inclui na totalidade o suporte as instrues SQL; sua natureza de
distribuio gratuita; facilidade de integrao com servidor Web e linguagens de programao de
desenvolvimento de sites dinmicos, especialmente a linguagem PHP.
2.2.

Breve Histrico

O MySQL foi criado por Michael Widenius na companhia sua TcX. Por volta de 1979
Michael desenvolveu um banco de dados chamado UNIREG, sendo rescritos em vrias
linguagens desde ento [YAR 99]. Em 1994, a empresa TcX comeou o desenvolvimento de
aplicaes baseadas na Web, tendo como base o banco UNIREG, porm esse banco possua
muito overhead para obter sucesso em uma aplicao para gerao de pginas dinmicas na
Web. Ento a empresa TcX comeou a procurar por outro banco o mSQL, uma ferramenta
baseada em SQL mas com caractersticas pobres no possuindo por exemplo suporte a ndices, e
com desempenho inferior ao UNIREG.
Foi ento 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 mximo a compatibilidade
com mSQL. TcX foi esperta o suficiente para no reinventar o que j estava bem feito, ela
construiu seu servidor baseado na estrutura que j estava montada do UNIREG e utilizou grande
nmero de utilitrios escritas para mSQL e fez APIs para o novo servidor praticamente iguais ao
mSQL. Como resultado usurios do mSQL que decidissem mudar para o novo servidor da TcX,
teriam apenas que fazer pequenas e simples mudanas nos cdigos existentes.

18

Ento foi me maio de 1995 que, definitivamente, a primeira verso do MySQL foi lanada. Um
dos parceiros da TcX sugeriu a distribuio do servidor na Internet, o objetivo disso era a
utilizao 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 concepo inicial do trabalho a utilizao de ferramentas de livre distribuio para


plataforma Linux-GNU, e o desenvolvimento de uma aplicao de banco de dados utilizando a
Web como interface, fez-se necessrio a escolha de um banco de dados que permitisse explorar
as caractersticas bsicas para implementao de uma aplicao cliente-servidor.
Entre as possibilidades encontradas surgiram trs bancos de dados: MySQL, PostgreSQL e
Interbase. O servidor PostgreSQL destacou-se por suas caractersticas de banco de dados objetorelacional, permitindo explorar todas as possibilidades dos bancos relacionais, porm estendendo
funes como classes, herana.
No processos de instalao foram encontradas dificuldades no que diz respeito a integrao com
o servidor Web, no sendo possvel o acesso pela linguagem PHP.
O MySQL foi o banco de dados escolhido por apresentar extensa documentao, atualmente
mais de 10 livros, milhares de sites na internet, mas principalmente pela sua fcil instalao e
integrao com o servidor Web.
Sua instalao atravs 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 execuo de scripts de inicializao e ajustes em arquivos de
inicializao no servidor Web e mdulo PHP.
2.4. Principais caractersticas
a) MySQL um banco de dados multiprocessado, significando que pode utilizar vrios
processadores ao mesmo tempo.
b) Possui APIs para C, C++, Java, Perl, PHP, Phyton e TCL.
c) Foi desenvolvido para vrias plataformas incluindo ambientes Unix, OS/2 e Windows.

19

d) Permite operaes e funes nas clusulas select e where, bem como suporte as funes
SQL(group by , order by ), alm de funes de grupo como: Count(), avg(), sum(), std(),
max(), min().
e) Permite a seleo de diferentes tabelas de diferentes bases de dados em uma mesma query.
f) Suas caractersticas de privilgio de password so bastante flexveis, permitindo inclusive a
validao por host.
g) Possui algoritmos de criptografia de password, fornecendo assim segurana aos dados
gravados nas tabelas.
h) Permite a utilizao de at 16 ndices por tabela.
i) Capacidade para manipular bancos com at 50 milhes de registros.
j) MySQL foi escrito em C e C++
k) Permite conexes via TCP/IP
l) Permite acesso via ODBC.
m) Possui instrues para extrao de informaes relativas a tabelas, bancos, ndices.
2.5.

Poltica de uso na Web

A utilizao de MySQL em sistemas operacionais no-Windows gratuita se utilizada com um


servidor WEB, no necessitando assim

de licena para uso. Isso vlido mesmo que as

aplicaes Web que utilizem o banco sejam para fins comerciais, excluindo-se a comercializao
do MySQL.
O suporte para MySQL pode ser contratado, no entanto para isso existem contratos de
manuteno, sendo esses restritos as reas de cobertura da equipe.
Apesar de ser distribudo livremente para uso na Web e em outras vrias situaes, que no
cabem aqui serem mencionadas, existem vrios tipos de utilizao no qual se faz necessrio a
aquisio de licenas de uso, para citar alguns exemplos de valores, segue tabela 2.1 .
Nr. de licenas
1

Valor por cpia


U$ 200

10

U$ 150

50

U$ 120

100-999

U$ 40

1000-2499

U$ 25

Tabela 2.1 - Poltica de uso do MySQL na Web

Valores extrados da documentao oficial Fev/2000

20

2.6. Informaes bsicas sobre instalao.


O MySQL possui diversas verses, possuindo dois mtodos de instalao: um atravs da
compilao da distribuio dos fontes, a outra atravs da instalao dos binrios.
No desenvolvimento deste trabalho foi utilizada a verso 3.22.25 de distribuio binria.
Normalmente o MySQL possui um verso beta, a ltima a estar disponvel, porm nem sempre
a verso mais estvel, sendo assim, a melhor escolha deve ser sempre a da ltima verso
estvel.
Para obter um cpia do servidor MySQL possvel utilizar vrios sites ao redor do mundo, que
possuem as verses disponveis para download, ou a utilizao dos pacotes que acompanham a
maioria das distribuies Linux.
Neste trabalho foi explorada apenas o processo de instalao sobre distribuio binria com a
utilizao de pacotes RPM(RedHat Package Manager). O processo de instalao para
plataformas Linux, baseadas na distribuio RedHat, incluindo a distribuio brasileira
Conectiva, um processo bastante simplificado, pois todo o trabalho de criao de diretrios,
execuo de scripts de instalao, configurao de arquivos, reinicializao de processos, criao
de links simblicos, entre outros ficam invisveis durante a instalao.
A utilizao de pacotes possui como principal vantagem essa simplificao na instalao, por
outro lado, por utilizar processos bastante automatizados, no permite que a instalao seja
customizadas por usurios mais experientes e que necessitem adequar a instalao em seu
sistema.
Os pacotes que devem ser utilizados na instalao so os que seguem abaixo:
a) Principal: MySQL-verso.i386.rpm . Este pacote possui o prprio servidor de Banco de
Dados MySQL, deve ser instalado.
b) Programas Cliente Standart: MySQL-Cliente-verso.i386.rpm. Este pacote possui as
ferramentas bsicas para gerenciamento, criao e manuteno dos bancos criados.
c) Teste e Benchmark: MySQL-bench-verso.i386.rpm. Esse pacote permite que se faam
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 <enter>

21

Esse processo instalar o servidor e as ferramentas clientes bsicas, permitindo assim seu
funcionamento e criao dos bancos de dados. Durante esse processo o banco de dados ser
copiado com as permisses padres. Ocorrer a criao de entradas em sbin/rc.d para que se
possa iniciar o servidor automaticamente, bem como os arquivos de executveis e extenses dos
aplicativos para os diretrios padro.
Caso o processo ocorra sem erros j possvel testar instalao executando em uma shell o
comando mysql, o qual iniciar a principal ferramenta cliente para interpretao de comandos
SQL.
OBS: A Instalao atravs dos fontes do MySQL, requer algumas ferramentas no seu ambiente
operacional: um compilador C++ compatvel com ANSI, um programa make, um
descompactador, entre outros. De forma simplificada ser necessrio compilar os fontes, e passar
alguns parmetros de instalao. Esse processo exige um conhecimento mais aprofundado das
caratersticas as ferramentas envolvidas.
2.7. Compatibilidade do Banco MySQL com a linguagem SQL
O banco de dados MySQL compatvel com boa parte dos comandos da padronizao SQL 92,
possuindo um conjunto no muito extenso de instrues porm com as funes mais utilizadas
[YAR 99]. Alm disso, possui extenses com funes bastante teis, entre elas o auto_increment
que permite a gerao de nmeros seqncias para registros em cada nova insero executada
em uma tabela. Alguns comandos prprios do MySQL no funcionaro com outros bancos, mas
podem ser comentados de forma que durante um processo de importao sejam ignorados,
mantendo assim a portabilidade de suas instrues.
Tambm no suporta a utilizao de subselects, ficando assim deficiente em algumas situaes
de consulta. No tem suporte tambm a commit e rollback conforme ser discutido no prximo
captulo.
O MySQL suporta uma grande extenso de tipos numricos, caracteres, caracteres de tamanho
varivel, tipos enumerados, sendo os mais comuns e mais compatveis os que seguem a seguir:

Tipo
Int

Descrio
Valor inteiro

22

Real
Char(tamanho)
Date
Time
Text(tamanho)

Valor de ponto flutuante


Caracter de tamanho fixo
Campo de data padro
Campo de tempo padro
Caracter de tamanho varivel

Tabela 2.2 - Tipos de variveis suportadas pelo MySQL

2.8.

Transaes

Transaes no so suportadas, at sua ltima verso. O objetivo segundo a equipe


desenvolvedora a implementao de suporte a transaes atmicas, o que seria equivalente a
transaes sem a utilizao de rollback(recurso para desfazer alteraes). O finalidade de
operaes atmicas permitir que se execute um grupo de instrues SQL, por exemplo vrios
comandos de atualizao (UPDATE) e que haja garantia que nenhum outro processo interfira
nos valores, tornado os dados inconsistentes.
A utilizao de transaes em bancos de dados permite garantir a integridade e a consistncia das
informaes, e tem como caracterstica a utilizao de Commit e RollBack, ou seja, pode-se
executar um conjunto de instrues e ter a garantia que todas elas sero executadas (Commit), ou
no caso de alguma falha de Hardware ou de Software as alteraes so desfeitas e retornam ao
seu estado inicial antes das alteraes(RollBack).
Por no utilizar esse conceito de transao em sua estrutura, o banco MySQL consegue uma
grande melhoria no seu desempenho, por manter um conjunto de instrues menos complexas,
sendo atualmente um dos bancos de dados mais rpidos para consultas.
Sendo assim, a sua utilizao deve ser muito criteriosa, pois ao envolver processos de
manipulao de informaes que no podem ficar inconsistentes de forma alguma, o banco no
oferece os recursos de segurana 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 consistncia da informao
lida, porm o travamento deve ser invocado explicitamente na programao exigindo um
controle rigoroso na programao. A seguir segue um exemplo do processo de travamento de
tabela:
Instrues:
a) lock tables trans read, clientes write
b) select sum(value) from trans where cliente_id=10

23

c) update cliente set saldo = soma anterior where cliente_id = 10


d) unlock tables
Caso a tabelas no fossem travadas, existiria a possibilidade de outro processo inserir um novo
registro na tabela trans, entre a execuo do select e do update tornando assim a informao
incorreta.
2.9.

Store procedures e Triggers

O banco de dados MySQL suporta a utilizao de procedures e triggers. A utilizao de


procedures possibilita que vrios processos de programao sejam efetuados no prprio banco
de dados, permitindo assim a diminuio do trfego cliente-servidor bem como benefcios no
que diz respeito a independncia de aplicativos, pois os processos implementados no banco
ficam transparentes para a aplicao que acessa os dados.
Pode-se definir trigger como sendo um ou vrios procedimentos armazenados que so
executados quando determinado evento ocorre, por exemplo, a cada vez que um registro
atualizado dispara-se a execuo de certos procedimentos.
2.10. Segurana e privilgios de acesso
A funo primria do sistema de privilgios do MySQL, validar a conexo de um usurio de
uma determinada estao e definir quais os privilgios o usurio tem com as instrues Select,
insert, update, delete em um determinado banco de dados.
Alm dessas instrues, so definidos quais os privilgios administrativos como criao de
usurios, definio de permisses, possibilidade de iniciar e parar o servidor entre outras.
2.10.1. User names e password
O processo de acesso ao MySQL se faz atravs de nome de usurio e senha, sendo a senha
opcional. Os nomes e senhas utilizados na autenticao no possuem qualquer ligao com os
nomes utilizados e senhas utilizados no ambiente operacional (Linux).
Para que possa haver segurana no acesso aos dados do banco, deve-se utilizar a poltica de
senhas para todos os usurios, caso contrrio um usurio poder acessar informaes facilmente,
alm de facilitar a invaso ao banco por pessoas no autorizadas.
Algumas caractersticas importantes a serem citadas sobre a utilizao de nomes e senhas:
a) Nomes de usurios podem conter at 16 caracteres alfanumricos

24

b) No existe ligao entre nomes do ambiente operacional e do banco.


c) MySQL criptografa o password usando um algoritmo diferente do que o usado em uma
seo Linux.
d) Possui as funes Password(suasenha) e Encrypt(suasenha), sendo que a primeira utiliza
um algoritmo do prprio MySQL e a segunda faz uma chamada ao sistema de criptografia do
sistema Linux.
Todas as informaes referentes controle de acessos e privilgios ficam armazenas e um banco
de dados dentro do MySQL chamado mysql , com as informaes sobre usurios especificadas
dentro de uma tabela com o nome de user. Esta tabela possui a seguinte estrutura de dados assim
explicada:
Campo
Host
User
Password
Select_priv
Insert_priv
Update_priv
Delete_priv
Create_priv
Drop_priv
Reload_priv
Shutdown_priv
Process_priv
File_priv
Grant_priv
Index_priv
Alter_priv

Tipo
Char(60)
Char(16)
Char(16)
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )

Funao
Host a qual se dar o acesso ao banco
Nome do usurio
Senha do usurio (Campo pode ser criptografado)
Possibilidade de executar o comando select
Possibilidade de executar o comando insert
Possibilidade de executar o comando update
Possibilidade de executar o comando delet
Possibilidade criar banco de dados
Possibilidade de apagar banco de dados
Possibilidade de atualizar os privilgios definidos
Possibilidade de finalizar o servidor
Possibilidade de gerenciar tarefas em execuo
Possibilidade de usar comandos que executam sobre arquivos
Possibilidade de definir privilgios para outros usurios
Possibilidade de criar e apagar ndices
Possibilidade de executar o comando ALTER TABLE

Tabela 2.3 - Tabela user do MySQL

Outras tabelas completam o controle total de permisses e privilgios:


DB esta tabela possui as informaes de qual usurio pode executar quais comandos, de
determinada mquina, exatamente sobre um banco de dados especfico. Esta tabela se faz
necessria, pois a tabela user no possui qualquer referncia sobre quais bancos de dados eram
definidos os privilgios, assim com a tabela db pode ter um controle mais especfico.
Host esta tabela tem por objetivo controlar o acesso a banco levando em considerao em qual
mquina esta sendo efetuada a conexo, assim se a tabela db no identificar o host para um
banco de dados e usurio, a tabela host define se o banco de dados em questo pode ser
acessado de determinado host.

25

2.11. Como funciona a conexo ao MySQL


O processo de conexo com o banco requer que alguns parmetros sejam passados ao servidor
MySQL:
a) Hostname Qual computador deseja efetuar a conexo.
b) usurio O nome do usurio que deseja conectar
c) A senha Senha do usurio que requisitou a conexo.
Esses dados so passados para o servidor atravs da aplicao cliente, por exemplo um pgina
desenvolvida em PHP ou um mdulo de administrao.
No caso de omisso de algum parmetro, a requisio de conexo assume os seguintes valores
como padro:
a) Hostname : LocalHost
b) Nome do usurio : Nome do usurio conectado no ambiente operacional
c) Password: No passa nenhuma informao se omitido
Abaixo o exemplo de uma conexo atravs da linguagem PHP embutida em uma pgina HTML:
a) $conexo = mysql_conect(localhost,joao,xxxyyy);
b) mysql_select_db(conexo,teste);
Com a funo n 1 nativa da linguagem PHP, solicita-se uma conexo ao servidor MySQL,
sendo o lugar da conexo o prprio computador(localhost), o usurio (joao) e a sua
senha(xxxyyy). Caso executado com sucesso a funo, a varivel $conexo recebe a validao
da conexo.
A segunda funo seleciona qual o banco de dados que a conexo acima realizada deseja
conectar, nesse caso foi conectado ao banco de dados teste.
2.12.
2.12.1.

Principais ferramentas para utilizao do MySQL


MySQL

Talvez uma das mais importantes ferramentas para criao de banco de dados em MySQL seja a
mysql, pois atravs dela cria-se uma conexo direta com o servidor MySQL, permitindo executar
todos os comandos SQL disponveis desde a criao de bancos at a definio de privilgios para
o servidor. Com a execuo do comando inicia-se a utilizao do MySQL:

26

Shell> mysql u joao p teste


Com esse comando cria-se um conexo com o servidor MySQL para o usurio joao ao banco de
dados teste, sendo solicitada sua senha.
Assim

inicia-se a conexo comum prompt como esse: (mysql>) que permite a execuo dos

comandos SQL.
2.12.2.

Mysqladmin

Mysqladmin a ferramenta principal para administrao 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 opo p fala ao MySQL para solicitar ao usurio 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 nmero de comandos que permitem monitorar o
servidor MySQL. Um dos mais importantes comando:
Shell > mysqladmin status
Atravs dele, pode-se analisar um grande variedade de informaes sobre o Servidor, conforme
abaixo:
a) Uptime o tempo em que o servidor esta rodando
b) Threads o nmero de tarefas que esto atualmente interagindo com o servidor. Pelo menos
uma tarefa sempre estar sendo executada, a tarefa que conta quantas outras tarefas esto
sendo executadas
c) Questions o nmero de queries que foram enviadas desde que o banco foi iniciado
d) Slow queries o nmero de queries que levaram mais tempo do que o tempo padro
configurado.

27

e) Opens - o nmero de tabelas que foram abertas desde que o banco foi iniciado
f) Open tables o nmero de tabelas atualmente abertas. Por ser multitarefa uma tabela pode
estar aberta por mais de um processo, assim o nmero de tabelas abertas pode ser maior que
o nmero de tabelas existentes no servidor.
Outro comando que contm informaes sobre o servidor, mas de uma forma mais geral o
mysqladmin version, atravs dele pode-se saber: qual a verso do servidor, a verso do protocolo,
o mtodo 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 sada 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 sada desse comando:
ID
562
985

User
Joao
Root

Host
Cliente.com
Localhost

Db
Teste

Command
Time
Sleep
0
Processes 0

State

Info

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, no possui relao com o nmero de
processos do sistema operacional. possvel utilizar este nmero para finalizar a tarefa
executando o comando mysqladmin kill.
User: O usurio que est executando essa tarefa.
Host: O computador do qual o usurio est conectado.
Db : Qual o banco de dados o usurio 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 conexo.

28

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 informaes de acesso ao banco.
h) Shutdown Tarefa finalizando todos as outras tarefas e parando o servidor
i) Statistics Tarefa gerando estatsticas.
j) Processes Tarefa examinado outras tarefas.
k) Connect - Negociando um conexo.
l) Kill Tarefa finalizando outra tarefa
Como pode-se observar, o comando mysqladmin processlist permite fazer uma anlise detalhada
de todas as tarefas que esto sendo executadas, dando a possibilidade do administrador avaliar a
necessidade de encerramento de tarefas em casos de falhas.
O processo de finalizao do banco de dados se da atravs do comando:
Sheel> mysqldamin p shutdown

29

3. Personal Home Page(PHP)


Neste captulo sero apresentadas noes bsicas da Linguagem PHP, incluindo uma breve
definio, um histrico, algumas dicas de instalao e configurao em plataforma UNIX, alm
de noes sobre a sintaxe do mesmo e finalizando com exemplos.
3.1.

O que PHP ?

PHP uma linguagem que permite criar Web sites dinmicos, possibilitando uma interao
com o usurio atravs de formulrios, parmetros da URL e links. A diferena de PHP com
relao a linguagens semelhantes a Javascript que o cdigo PHP executado no servidor,
sendo enviado para o cliente apenas HTML(Hyper Text Markup Language) puro. Desta maneira
possvel interagir com bancos de dados e aplicaes existentes no servidor, com a vantagem de
no expor o cdigo fonte para o cliente. Isso pode ser til quando o programa est lidando com
senhas ou qualquer tipo de informao confidencial [BAR 99].
Para interagir com o Banco de Dados, possvel se inserir dentro do cdigo HTML, alm da
linguagem de programao C, a linguagem para manipulao de Banco de Dados SQL
(Structured Query Language).
Uma caracterstica desta linguagem a possibilidade de inserir o cdigo PHP dentro do cdigo
HTML, o que no 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 cdigo PHP
simplesmente impressa na tela:
<html>
<body>
<?php
print Exemplo de cdigo PHP;
?>
</body>
</html>
Figura 3.1 - Exemplo de cdigo PHP embutido em um cdigo HTML.

O cdigo PHP permite ainda que durante a execuo haja uma alternncia entre o seu modo e o
modo HTML.

30

<html>
<body>
<?php
print Modo PHP;
?>
<hr>
<center><b>Modo HTML</b></center>
</hr>
<?php
print Modo PHP de novo;
?>
</body>
</html>
Figura 3.2 - Exemplo de alternncia entre os modos PHP e HTML

O que o distingue de outros CGI cliente-servidor que o cdigo executado no servidor. Se o


servidor tem um script rodando, o cliente ter que receber o resultado da execuo 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 combinao das Linguagens Perl, Java, C e C++. Sendo que a sintaxe
originada do C, tornado o seu aprendizado muito fcil at mesmo para programadores novatos.
Possui ainda a capacidade de realizar sofisticados clculos matemticos, fornecer informaes
em rede, e muito mais. Atualmente est disponvel para as plataformas Unix (FreeBSD, Linux,
etc) e Windows (9x e NT).
3.2.

Histrico

O desenvolvimento do PHP comeou em meados de 1994 por Rasmus Lerdorf que lanou uma
verso apenas para teste e demonstrao, e utilizado pelo seu criador para o desenvolvimento de
uma Home Page visando divulgar e aplicar testes prticos nova ferramenta.
A primeira verso ser usada por outros programadores s foi disponibilizada em 1995 e foi
chamada de Personal Home Page Tools. Essa verso foi considerada apenas como uma

31

reviso da anterior, tanto que no foi muito utilizada. No foram feitos muitos trabalhos com ela,
apenas alguns utilitrios j bastante comuns para as Home Pages da poca, um guestbook, um
contador de visitas e algumas outras aplicaes pequenas. Esta verso foi revisada e refeita em
meados de 1995 e nomeada de PHP/FI 2.0. O FI era a indicao de um outro pacote que Rasmus
havia criado para permitir a interpretao 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 comearam a contribuir em seu cdigo fonte.
difcil apontar estatsticas 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 nmero subiu para algo em torno de
50.000. Em 1997 houve outra grande mudana no PHP, o seu criador Rasmus Lerdorf anunciou
que devido ao grande nmero de projetos que havia recebido de outras pessoas iria a partir dali
montar um grande time para tratar do desenvolvimento e administrao do PHP. Ento iniciou-se
o desenvolvimento de uma nova verso, o PHP 3.0. Nesta verso uma parte do cdigo do PHP/FI
foi portada no PHP 3.0 e a outra foi completamente rescrita [BAK 99].
Em 1999 estimava-se que o nmero de sites que utilizam o PHP tanto a verso 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 caracterstica do PHP em se tratando de acesso a Banco de Dados
via Internet, o vasto nmero de Banco de Dados que ele d suporte.[FIS 99] Os Bancos de
Dados a seguir so 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

32

k) Oracle
l) Unix dbm
m) Informix
n) PostgreSQL
3.4.

Instalao em Sistemas UNIX

Para instalar o PHP existem alguns pr-requisitos. A configurao inicial :


a) Habilidade bsica em Sistemas UNIX ser capaz de operar o comando make
b) Um Compilador da Linguagem de Programao 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, ento
primeiramente deve-se instalar o Servidor Web e logo em seguida o PHP como sendo seu
mdulo.
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 instalao do PHP em sistemas UNIX

33

Feita a instalao do Apache Web Server e do PHP respectivamente o prximo passo tratar da
configurao, mas isso ser visto mais adiante. Agora mostra-se como se faz, para no momento
da instalao dar suporte aos Bancos de Dados suportados pelo PHP.
No momento da instalao, 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 execuo. Mas como foi
feito com o MySQL pode-se configurar outros Bancos de Dados tambm, e no apenas um mas
quantos forem necessrios, desde que, claro, seja um Banco de Dados suportado. A maneira
como isso ser feito a seguinte:
Bancos de
Dados
Adabas D

Diretivas
-with-adabas=DIR

Descrio
Sendo que o parmetro a ser passado o diretrio
onde o Banco de Dados Adabas D ser instalado,

Dbase
FilePro
MSQL

-with-dbase
-with-filepro
-with-msql=DIR

tendo como default o diretrio /usr/local/adabasd.


Suporte para Dbase, o qual habilitado por default.
Suporte para Filepro, o qual habilitado por default.
Adiciona suporte ao mSQL. DIR corresponde ao
diretrio para instalao, sendo default o diretrio

MySQL

-with-mysql=DIR

/usr/local/Hughes.
Adiciona o MySQL com DIR sendo o diretrio para

Oracle
PostgreSQL

-with-oracle=DIR
-with-pgsql=DIR

instalao, tendo como default o diretrio /usr/local.


Suporte para Oracle 7.0 at 7.3
O parmetro o diretrio de instalao do
PostgreSQL,

tendo

como

default

diretrio

-with-solid=DIR

/usr/local/pgsql.
O diretrio default

-with-sybase=DIR

/usr/local/solid.
O parmetro o diretrio de instalao do Sybase,

Sybase-CT

-with-sybase-ct=DIR

tendo como default o diretrio /home/sybase.


Adiciona suporte ao Sybase-CT. O diretrio default

Velocis

-with-velocis=DIR

para instalao o /home/sybase.


O diretrio default o /usr/local/velocis.

Solid
Sybase

para

instalao

Tabela 3.2 - Habilitao do Banco de Dados durante a instalao do PHP.

Existe uma outra forma de instalar o PHP, atravs dos pacotes RPMs (RedHat Package
Manager). Os pacotes RPMs so um recurso que contm todos os arquivos que so necessrios
para instalao em um nico pacote, permitindo que tudo seja feito automaticamente. Isso evita a

34

necessidade de descompactar e compilar arquivos como foi feito na instalao anterior [JAM
99]. No caso do PHP, a instalao utilizando pacotes RPMs pode no ser muito recomendvel,
tendo em vista que o PHP possui algumas configuraes que so especficas no cdigo.
Instalando o PHP dessa forma o Apache Web Server inicialmente no processar as pginas em
formato PHP, sendo necessrio alguns ajustes nos arquivos de configurao do Apache Web
Server.
3.5.

Configurao

A configurao do PHP toda ela baseada em um arquivo, o php3.ini, que o arquivo que ser
lido sempre que as pginas em PHP forem executadas no servidor. Ele possibilita a configurao
de todos os diretrios e seus respectivos caminhos envolvidos na execuo do PHP, bem como
de todos os Bancos de Dados suportados, alm da segurana e do limite de memria que ser
disponibilizada para a execuo dos arquivos PHP. A seguir tem-se alguns exemplos de
configurao:
Configurao
doc_root string

Descrio
o diretrio de root no servidor, em modo de
segurana nenhum arquivo que estiver fora
deste diretrio ficar disponvel para usurios
comuns.
Especifica onde devem ser armazenados os

Include_path string

arquivos em PHP para serem processados e


user_dir string

exibidos.
Diretrio destinado para uso dos usurios de

mysql.allow_persistent boolean

arquivos PHP.
Define se permitido insistncia conexo ao

mysql.max_persistent integer

Banco de Dados.
Se for permitido, informar o mximo de

mysql.max_links integer

insistncias permitidas por processo.


O nmero mximo de conexes ao Banco de
Dados permitidas por processo, incluindo as
insistncias.

Tabela 3.2 - Exemplos de configurao do PHP.

35

Mas, dependendo da forma como o PHP foi instalado ser necessrio mais algumas
configuraes. Se a instalao foi utilizando pacotes RPM ento devemos tambm configurar o
arquivo do Apache Web Server httpd.conf.
Assumindo que a instalao foi toda ela com RPM, algumas linhas do arquivo httpd.conf
devero 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 Bsica

A seguir ser dada uma idia geral a respeito da sintaxe do PHP.


3.6.1.

Delimitadores

Existem quatro formas de se delimitar um conjunto de cdigo PHP dentro de um cdigo HTML.
O interpretador reconhece um cdigo PHP pelas seguintes tags:
<?
[cdigo]
?>
Esta a forma mais utilizada.
<?php
[cdigo]
?>

36

Forma tambm bastante comum e utilizada pelos programadores.


<script language=php>
[cdigo]
</script>
Este caso utilizado em editores HTML que no reconhecem o PHP como uma tag. Se as outras
formas forem utilizadas o editor poder acusar erro no HTML.
<%
[cdigo]
%>
uma forma que est sendo eliminada para futuras verses do PHP.
3.6.2.

Separador de Instrues

Assim como nas linguagens de programao mais conhecidas, como o C e o Perl por exemplo,
no PHP necessrio separar cada instruo do conjunto de cdigo por ponto-e-vrgula.
3.6.3.

Definio de Variveis

Todas as variveis so definidas atravs de um $ seguido de uma string que deve iniciar por
uma letra ou o caracter _.
O PHP case sensitive, ou seja, diferencia maiscula de minscula, a varivel $nome diferente
da varivel $NOME. Como o PHP j possui algumas variveis pr-definidas cujos nomes so
formados por letras maisculas, aconselhvel evitar-se usar variveis com letras maisculas.
3.6.4.

Comentrios

A forma de comentrio do PHP semelhante ao das linguagens C e C++ e com os comentrios


do UNIX shell.
Pode-se fazer comentrios de duas formas:
a) Comentando uma linha:
feito utilizando-se o caracter # ou duas barras (//).
<?php

Print Correto; #esta uma forma

?>

<?php

Print Correto; //esta outra forma ?>

37
Figura 3.4 - Exemplo de comentrio de uma linha em PHP

b) Comentando mais de uma linha:


aplicado utilizando-se os caracteres /* para o incio do comentrio e */ para finalizar o
mesmo.
<?php Print Correta; /* Comentando mais de
uma linha em PHP.
*/
Figura 3.5 - Exemplo de comentrio de mais de uma linha em PHP

3.7.

Exemplos

3.7.1.

Um exemplo simples

Aps a realizao dos processos de instalao e configurao, 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 sada.
<html>
<head><title>Testando o PHP</title></head>
<body>
<?php
print "Meu primeiro script em PHP";
?>
</body>
</html>
Exemplo de um script simples em PHP.
Feito isso deve-se salvar o arquivo, como exemplo.php3 por exemplo, dentro do diretrio dos
documentos do Apache Web Server (html). Em seguida na janela do navegador digite o
endereo: http://localhost/exemplo.php3. Se a pgina exibida no navegador contiver apenas a
sada especificada no cdigo PHP sinal que tudo est funcionado corretamente. Exibindo-se o
cdigo fonte da pgina, teremos o seguinte:

38

<html>
<head><title>Testando o PHP</title></head>
<body>
Meu primeiro script em PHP
</body>
</html>
Exemplo Cdigo fonte do que ser exibido no navegador.
Este cdigo permite mostrar como o PHP funciona, o script foi executado no servidor deixando
disponvel ao usurio apenas o resultado em forma de cdigo HTML.
3.7.2.

Exemplo de PHP com formulrios HTML

O prximo exemplo mostra como o PHP trabalha com formulrios HTML. Sempre que se
pressiona o Submit em um HTML alguma informao enviada ao servidor para que se
produza uma resposta que satisfaa a solicitao feita no formulrio, para isso o PHP trata essas
informaes como variveis.
<html>
<head><title>Testando o PHP</title></head>
<body>
<?php
if ($texto != "")
print "Voc digitou $texto<br><br>;
?>
<form method=post action="<? print $PATH_INFO; ?>">
<input type="text" name="texto" value="" size=10>
<br>
<input type="submit" name="sub" value="Enviar!">
</form>

39

</body>
</html>
Exemplo de um PHP com formulrio HTML.
Salvando esse arquivo e carregando-o no navegador ele inicialmente ser apenas um formulrio
para digitar um texto. Digitando o texto pela primeira vez, a varivel $texto deixar de ser vazia
e conter o texto digitado, ento a partir da o PHP exibir antes do formulrio o contedo da
varivel $texto.
3.7.3.

Exemplo do PHP acessando uma base de dados

Para interagir com uma base de dados SQL existem trs comandos bsicos que devem ser
utilizados: um que faz a conexo 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 endereo 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[usurio], string[senha]);
Abre uma conexo a um servidor MySQL, retorna id_link se tiver sucesso, caso contrrio,
retorna False.[FIS 99]
Os parmetros exigidos neste comando so o endereo do servidor (hostname), o nome do
usurio (usurio) e a senha para conectar-se ao servidor.
$conectou = mysql_connect(localhost, root, pwdphp);
Exemplo de conexo ao servidor de banco de dados.
b) Selecionado o Banco de Dados
Aps feita a conexo 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]);

40

Os parmetros so o nome do banco de dados a ser selecionado e um identificador de conexo.


$conecbd = mysql_select_db (vestiba, $conexao);
Exemplo de conexo 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 contrrio, retorna
False.[FIS 99].
O exemplo a seguir demonstra a criao de uma tabela com SQL:
$Criatable

AUTO_INCREMENT

mysql_query(CREATE
PRIMARY

KEY,

nome

TABLE

nomes

CHAR(40),

email

(codigo

INT

CHAR(50)),

$conexao);
Exemplo de escrita SQL em um cdigo PHP.
Assim como no exemplo acima foi executado o comando SQL create table, qualquer comando
de escrita SQL poderia ter sido executado.

41

4. Apache Web Server


4.1.

O que um servidor Web

Um servidor Web o responsvel pelo controle de distribuio de pginas na Internet. Sua


funo aguardar por requisies de pginas de um cliente (browser), e ao receber uma
requisio ele retorna dados ao cliente, normalmente paginas HTML com imagens. Ao receber
os dados enviados pelo servidor, o browser apresenta os dados para o usurio. Os servidores so
em conceito muito simples, fazendo basicamente esse processos de resposta requisies.
O processos de comunicao entre o cliente e o servidor so feitos atravs 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 caracterstica principal a sua
independncia total quanto a plataforma, podendo por exemplo, estabelecer comunicao entre
um servidor Linux, e um cliente Macintosh sem qualquer problema.
As informaes que trafegam pela Internet so na sua grande maioria feitos com a Linguagem
de marcao de Hyper Texto (HTML - Hypertext Markup Language). Essa linguagem a base
principal de um ambiente Web, permitindo que exista essa grande gama de dados disponveis
para toda a Internet [KAB 98].
Atualmente existem no mercado cerca de 500 servidores Web, disponveis nas mais diversas
plataformas, de distribuio gratuita at valores que chegam a milhares de dlares, dependendo
dos recursos envolvidos na ferramenta [KAB 98]. Algumas das caractersticas principais a serem
observados em um servidor Web so as seguintes: tipo de distribuio (gratuita ou paga),
processo de instalao, facilidades de customizao, performance e consumo de recursos,
suporte tcnico e mdulos disponveis so as principais informaes a se levar em considerao.
4.2.

O servidor Apache

O servidor Apache uma das mais de 500 ferramentas disponveis nesse segmento. Ele est
disponvel para as plataformas ,Unix Like, Solaris, Sun , Windows entre outras. Sendo um
software de livre distribuio. Atualmente Apache o servidor mais utilizado na Internet tendo
aproximadamente

35%

de

todo

mercado,

segundo

pesquisa

do

Site

http://www.netcraft.com/survey/, vide grfico comparativo (figura 4.1). Algumas das


caractersticas que o destacam o fcil processo de instalao que possui e uma configurao de
arquivos bem funcional, permitindo que sejam feitos ajustes nas configuraes, sem que seja

42

necessrio reiniciar o servidor. O suporte utilizao de protocolos de transferncia de arquivos


com segurana, tambm tem outra caracterstica importante implementada atravs de mdulos
no servidor.
O Apache implementado como um conjunto de mdulos, sendo grande partes desse mdulos
desenvolvidos por terceiros. Com a utilizao desse mdulos consegue-se uma grande
flexibilidade na sua utilizao, trazendo incontveis funcionalidades para o servidor.

Figura 4.3 - Grfico comparativo da utilizao do Apache no mundo

4.3.

Breve Histrico

Apache foi criado em 1995 quando um grupo de desenvolvedores chamados The Apache Team Equipe Apache, consolidaram uma srie de patches - remendos- que eles havia feito para o
HTTP daemon do Centro Nacional de Aplicaes para Supercomputao (NCSA). Um ano
depois, Apache j era o mais popular servidor na Web.
4.4.

Instalao

O processo de instalao do servidor Apache, no trabalho desenvolvido, visaza apenas criar um


ambiente com configuraes padres, sendo apenas utilizadas configuraes especficas para o
uso do mdulo PHP. Sendo assim, foi instalado um pacote RPM da distribuio brasileira da
conectiva. Esse processo bastante simplificado, no permitindo configuraes especficas,
porm sua instalao bastante eficiente permitindo j ao seu trmino a insero de arquivos
HTML para serem processados.
Em um ambiente Linux, no diretrio que contm o pacote Apache digita-se:
Shell>rpm i apache-verso.i386.rpm
Com esse processo os mdulos padres, bem como as configuraes, os scripts, os diretrios

43

default e os diretrios padres sero configurados sem interveno do usurio.


4.4.1.

Os mdulos do Apache

Mdulo um componente de software que adiciona funcionalidade para o servidor Apache.


Atravs deles, define-se quais as caractersticas estendidas sero usadas no servidor. Um
exemplo de definio de um mdulo ser usado, seria algo como:
Add module mod_php3.c
Esta linha no arquivo de configurao do apache, httpd.conf, permite a utilizao do
interpretador PHP caso este tenha sido instalado. Existe uma srie de mdulos que so instalados
na configurao padro, sendo que cada um dos mdulos necessita mais memria e espao do
arquivo executcel apache. Assim, com a configurao dos arquivos pode-se escolher quais
mdulos sero usados permitindo assim melhor a rapidez do servidor e criar configuraes de
acordo com a necessidade do usurio.

4.4.1.1. O mdulo PHP


O interpretador PHP pode ser compilado tanto como um interpretado CGI isolado do Apache ou
como um mdulo do Apache.
Se configurado como interpretador CGI, toda vez que um script PHP precisa ser interpretado o
servidor Web lana uma instncia do PHP, isso obviamente causar diminuio de performance,
pois sero dois processos sendo executados, vide figura abaixo:
PHP como CGI

Webserver
Apache

PHP como Mdulo Apache

Mdulo
PHP

Webserver
Apache

Mdulo
PHP

Processo 2
Processo 1

Processo 1

Figura 4.2 - Comparao entre PHP como um CGI e um Mdulo Apache

Quando compilado como mdulo do Apache o PHP roda no mesmo espao de memria do
processo do servidor Apache, causando aumento da performance. Alm disto, caractersticas

44

como conexes persistentes ao banco de dados e permisso de uma segurana adicional somente
esto disponveis no PHP como mdulo [CAS 00].
4.5.

Configurao

4.5.1.

Arquivos de configurao

Os trs principais arquivos de configurao do servidor apache so:


a) Httpd.conf
b) Access.conf
c) Srm.conf
Estes trs arquivos so textos puro, que so usados na inicializao do servidor para dizer como
o servidor deve rodar. Neles existem dois tipos de informao: diretivas do servidor e
comentrios 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 vrias caractersticas de inicializao. Como por
exemplo:
a) A porta Linux na qual o servidor receber as requisies
b) Arquivos de log
c) Com que usurio o servidor estar rodando
d) E-mail do administrador
e) Diretrios de configurao
f) Erros e log
g) Nome do servidor
h) Tempo limite entre recebimento e envio de informao
i) Nmero mximo de requisies de pginas
Estas e outras diretivas definem a espinha dorsal do servidor.

4.5.1.2. Srm.conf
Este arquivo o que define a configurao dos recursos disponveis. Ele diz quais recursos sero
oferecidos pelo Web Site, e quando e onde eles sero oferecidos. Algumas diretivas ficam

45

incluidas neste arquivo:


a) Diretrio onde ficaro os documentos
b) Arquivo padro de inicializao do diretrio
c) Quais cones devem ser mostrados para os diferentes tipos de arquivos
d) A linguagem que um documento pode usar, por exemplo o portugus
e) Os lias utilizados para os diretrios
f) Os diretrios dos scripts para utilizao de CGIs
g) Mensagens customizadas de erros
A explicao destas e de outras diretivas contidas neste arquivo poderiam tomar vrias pginas,
porm de forma global observa-se que este arquivo define caractersticas de estrutura interna de
diretrios, links simblicos, definio de diretrios para usurios, imagens e mensagens de erros
exibidas no browser, entre outros.
4.5.1.3. Access.conf
Este usado para definir as permisses de acesso e tens como: arquivos, diretrios e scripts do
Web Site. Algumas diretivas importantes:
a) Cada diretrio que o apache faz acesso pode ser configurado com respeito quais
caractersticas esto habilitadas ou desabilitadas
b) O nome dos diretrios e sub-diretrios que podem ter links simblicos
c) Opes para arquivos padres e diretrio, por exemplo, se um dirtrio no possue uma
pgina ndice pode-se definir neste arquivo qual pgina ser exibida
4.6.

Protocolo SSL (Secure Socket Layer)

Usar um servidor com suporte SSL uma boa maneira de providenciar segurana para um Web
Site sem a necessidade de nenhuma mudana nos cdigos das pginas. O que o SSL faz usar
criptografia para proteger o fluxo de informao entre o servidor e o browser. Este protocolo no
somente encriptografa a informao que trafega na Internet mas, tambm garante autencidade
tanto do servidor quanto do cliente, ou seja, um usurio de um Site com o protocolo SSL tem
certeza da origem dos dados.
O SSL usa uma tcnica de encriptao chamada criptografia de chave-pblica, onde o servidor
envia uma chave-pblica para o cliente criptografando informaes na qual somente o servidor
poder descriptografar com uma chave-privada. O cliente usa a chave-pblica para
encriptografar e enviar ao servidor sua prpria chave identificando ela somente para o servidor e

46

prevenindo um ataque no meio da comunicao dos dados.


HTTP seguro (HTTPs) se distingue de conexes regulares servindo informaes numa porta
diferente da 80, normalmente na porta 443. Clientes que solicitam uma URL com HTTPs
automaticamente so direcionados para a porta 443, tornando fcil para o servidor responder as
requisies para os diferentes protocolos.
Existem muitas solues para implementar SSL com Apache, incluindo Apache-SSL e as
implementaes comerciais StrongHold e Raven SSL.

47

5. Implementao
O presente captulo tem por objetivo apresentar e descrever o sistema implementado neste
trabalho. A parte referente modelagem dos dados para a construo da base de dados tambm
est descrita neste captulo incluindo descrio das tabelas, modelo e-r, dicionrio de dados e a
sintaxe SQL utilizada para a criao das tabelas no banco de dados.
As ferramentas utilizadas foram:
a) Sistema Operacional Linux (Captulo 1) verso Conectiva 4.2
b) Banco de Dados MySQL (Captulo 2) verso 3.22.25
c) Linguagem de Programao PHP (Captulo 3) verso 3.0
d) Servidor Web Apache Web Server (Captulo 4) verso 1.3.9
De posse e tendo o conhecimento necessrio das ferramentas mencionadas acima, foi
desenvolvida uma Home Page onde usurios podem realizar provas virtuais de concursos
vestibulares onde, alm disto, pode-se consultar as questes cadastradas no banco de dados.
A prova virtual possibilita que o usurio teste seus conhecimentos nas diversas matrias que
compem um concurso vestibular durante o processo de preparao do candidato. Essas matrias
so: Matemtica, Portugus, Fsica, Histria, Qumica, Geografia e Biologia. Para a realizao
da prova o usurio tem a possibilidade de escolher alguns critrios das questes que sero
aplicadas na prova virtual. Por exemplo, alm da matria que se deseja, pode-se tambm
classificar as questes pelo ano em que elas foram aplicadas e o local de onde elas fizeram parte,
ou seja, em qual universidade ela foi aplicada. Outros critrios possveis so o nmero de
questes que se quer na prova e o nvel de dificuldade da mesma, que pode ser fcil,
intermedirio, difcil ou aleatrio. Com todos esses parmetros passados j possvel realizar a
prova virtual. Aps a elaborao e realizao da mesma, ou seja, depois que o usurio j tiver
respondido todas as questes, possvel se fazer a correo retornando as respostas corretas
confrontadas com as respostas dadas pelo usurio.
Para a realizao da consulta ao banco de dados, igualmente prova, deve-se passar parmetros,
que so matria, local e ano. Um diferencial a possibilidade de se consultar por texto, isso
significa que atravs de uma palavra-chave digitada num campo disponvel, tem-se retornado um
resultado de consulta com questes referentes quela palavra-chave. Isto possvel passando-se
ou no os outros parmetros, ou seja, pode-se realizar somente a consulta por palavra-chave.

48

Com a apresentao de uma breve descrio da implementao, onde deu-se uma idia do
funcionamento e do objetivo da mesma, o captulo segue com uma descrio detalhada do
processo de construo da Home Page para explicao da implementao de todos os itens que
aqui foram citados. Primeiramente ser apresentado um fluxograma com a descrio dos seus
mdulos para compreenso mais aprofundada, em seguida todo o processo de modelagem dos
dados passando para as funes PHP que foram utilizadas e finalizando com a implementao de
todos os arquivos PHP e HTML que compem a Home Page.
5.1.

Fluxograma

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


Home
Page
1.0

Fazer Prova Virtual

3.0 Consultar Questes


2.0

1.1

Selecionar Matria

1.2

Selecionar Local

2.1

1.3

Acessar
BD/Realizar
Consultas

2.3

Retornar arquivo
HTML do Servidor

Selecionar Ano

No

Mostrar Resul tado


da Consulta

Nvel dificuldade

Form ular
Prova ?
Sim
1.6

Acessar
BD/Realizar
Consultas

1.7

Retornar arquivo
HTML do Servidor

3.1

Selecionar Matria

3.2

Selecionar Ano

3.3

Selecionar Local

Digitar Palavra

2.2

1.4 Quant. de Questes

1.5

Busca Rpida

Buscar por
texto ?

No

Sim
2.4
3.4

Digitar Palavra

3.5

Quant. Questes

No
Consultar ?

Sim

Responder
Prova ?

3.6

Acessar
BD/Realizar
Comsultas

3.7

Retornar arquivo
HTML do Servidor

3.8

Mostrar Resultado
da Consulta

No

Sim
1.8

Corrigir Prova no
Servidor

Retornar
Resultados

1.9

Figura 5.4 - Fluxograma da seqncia de aes executadas durante o processo de visita de um usurio
Home Page

49

5.1.1.

Descrio detalhada dos mdulos

A seguir tem-se uma descrio detalhada de cada mdulo do fluxograma representado na figura
5.1.

5.1.1.1. Mdulo 1 Fazer Prova Virtual


Aqui est representado o principal ponto da implementao, onde se d a partida para que o
usurio realize a prova. Tem os seguintes passos:
a) 1.1 Selecionar Matria: uma matria 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 ocasio.
c) 1.3 Selecionar Ano: onde escolhe-se o ano na qual as questes que formularo a prova
foram aplicadas.
d) 1.4 Quant. de Questes: representa a quantidade de questes que se deseja na prova.
e) 1.5 Nvel de dificuldade: o nvel de dificuldade da prova que ser formulada, ele pode
ser: fcil, intermedirio, difcil ou aleatrio. Este ltimo formula a prova com um misto dos
outros trs nveis.
f) 1.6 Acessar BD/Realizar Consultas: aps todos os parmetros acima terem sido
selecionados, o usurio requisita a formulao da prova e o arquivo prova.php3 se
encarregar de acessar o banco de dados e de posse dos parmetros realizar as consultas SQL
de modo a satisfazer as necessidades do usurio.
g) 1.7 Retornar arquivo HTML do Servidor: realizando as consultas todos os resultados da
mesma so retornados do servidor na forma de um arquivo HTML, que ser exibido ao
usurio.
h) 1.8 Corrigir Prova no Servidor: com a prova sua disposio e aps responde-la, o
prximo passo tratar da correo da mesma. Isso feito atravs do arquivo corrige.php3,
que enviar ao servidor de banco de dados as respostas dadas pelo usurio e comparar as
suas respostas com as corretas.

50

i) 1.9 Retornar Resultados: feita a correo no servidor, os resultados retornaro at o


usurio em forma de um arquivo HTML.

5.1.1.2.

Mdulo 2 Busca Rpida

A busca rpida d a opo de pesquisa no banco de dados por palavras chave, ou seja, basta
digitar uma palavra para se buscar questes 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: aps digitar a palavra e fazer a requisio da consulta,
o arquivo buscarap.php3 acessa o banco de dados e realiza consulta SQL em busca das
questes que satisfaam a condio.
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
usurio com o resultado da consulta por ele solicitada.

5.1.1.3.

Mdulo 3 Consultar Questes

Neste mdulo est representada a possibilidade de se fazer uma consulta mais aprofundada s
questes que esto cadastradas no banco de dados.
a) 3.1 Selecionar Matria: seleciona-se a matria que se deseja passar como parmetro para
realizar a consulta.
b) 3.2 Selecionar Ano: consultar questes referentes determinado ano.
c) 3.3 Selecionar Local: consultar questes referentes determinado local onde a questo foi
aplicada.
d) 3.4 Digitar Palavra: caso deseja-se consultar as questes tambm por uma palavra chave,
basta digita-la no campo disponvel.
e) 3.5 Quant. Questes: aqui deve-se selecionar a quantidade de questes que se deseja ser
exibida por pgina no resultado da consulta.

51

f) 3.6 Acessar BD/Realizar Consultas: com todos os parmetros selecionados, o arquivo


consulta.php3 acessar o banco de dados e processar a consulta conforme os dados passados
pelo usurio.
g) 3.7 Retornar arquivo HTML do Servidor: aps realizar as consultas um arquivo HTML
enviado do servidor contendo as informaes resultantes da consulta.
h) 3.8 Mostrar Resultados da Consulta: o arquivo HTML que retorna do servidor
mostrado ao usurio com o resultado da consulta.
5.1.2.

Descrio do Fluxograma

Inicialmente, tem-se as opes de realizar a prova virtual, consultar questes por palavras e
consultar questes por outros campos.
Para a realizao da prova virtual, o processo se seguir com a escolha dos campos a serem
requisitados no Banco de Dados para a formulao da prova, so eles: matria, local, ano,
quantidade de questes da prova e nvel de dificuldade. Feita a escolha dos campos, pode-se
ainda recusar a formulao da prova retornando para a pgina inicial do Web Site. Por outro lado
se houver prosseguimento ao processo realizando a formulao da prova, todos os parmetros
selecionados so 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 questo, MySQL, todos o processos de
consulta e seleo requisitados anteriormente retornando um arquivo em formato HTML que
ser exibido na tela com o resultado da sua consulta. Tendo-se a prova formulada disposio,
pode-se ainda reformular uma outra prova no respondendo-a e retornando pgina onde se tem
todos os campos serem preenchidos. Se a prova for respondida, aps isso ocorrer o processo
de correo da mesma no servidor e finalmente retornando um arquivo HTML com os
resultados.
Na opo de consultar questes por palavras, deve-se simplesmente digitar no campo a palavra
que se deseja consultar nas questes armazenadas no Banco de Dados. Com isso o arquivo .php3
ir buscar no Banco de Dados todas as questes que contm a palavra especificada, retornando
um arquivo HTML do servidor com o resultado encontrado e exibindo na tela as questes
selecionadas atravs deste critrio.
Optando-se por fazer uma consulta um pouco mais criteriosa, deve-se realizar a busca por outros
campos alm da palavra. A maneira como isso funciona a seguinte: aps escolher esta opo,
deve-se selecionar os campos matria, ano e local de acordo com as necessidades. Em seguida,

52

existe a alternativa de, alm de se buscar por esses critrios j selecionados, consultar tambm
por uma palavra que deseja-se estar presente entre as questes 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 no for utilizada, o processo
de consulta segue normalmente com a seleo da quantidade de questes que se deseja por
pgina na exibio da consulta. Com os campos necessrios para a realizao da consulta
devidamente preenchidos ou selecionados, o processo pode ser interrompido recusando-se a
consulta e retornando pgina 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
implementao desenvolvida neste trabalho. Comeando com uma descrio das tabelas,
passando aps para um Modelo E-R, seguindo com um dicionrio dos dados e finalizando com a
sintaxe SQL utilizada para a criao das tabelas no Banco de Dados utilizado, o MySQL.
5.2.1.

Descrio das Tabelas

No banco de dados vestiba da implementao tem-se as seguintes tabelas:


a) Questes
b) Resposta
A tabela questes contm as informaes sobre a questo que ser aplicada na prova virtual, ou
simplesmente exibida como resultado de uma consulta. Seus campos so:

Campo
numquest
questao
imagem

Descrio
Indica o nmero da questo no banco de dados. (cdigo)
Contm a descrio da questo que est armazenada, qual a pergunta.
Campo reservado para eventual necessidade da questo conter alguma imagem.

materia
ano
local
certas
erradas

S utilizado se necessrio.
Armazena qual matria a questo se refere.
Indica em que ano a questo foi aplicada no vestibular.
o local onde a questo foi aplicada.
Determina a quantidade de usurios que acertaram a questo.
Determina a quantidade de usurios que erraram a questo.

53
Tabela 5.3 - Descrio dos campos da tabela Questes.

A tabela resposta contm os dados das respostas das questes. Seus campos so:
Campo
numresp
numquest
descricao
imagem

Descrio
o nmero da reposta da questo.
Se refere qual questo da tabela questes a resposta corresponde.
Contm a descrio da resposta.
um campo utilizado quando a resposta contm alguma imagem, s

certa

quando necessrio.
Indica se a resposta descrita a verdadeira ou no.
Tabela 5.2 - Descrio dos campos da tabela resposta.

5.2.2.

Modelo E-R (Entidade - Relacionamento)

As tabelas envolvidas no trabalho tem uma relao entre si, que representada por um modelo er. Enquanto a tabela questes contm apenas as suas informaes, a tabela resposta, por sua vez,
necessita da informao de qual questo determinada resposta faz parte, essa informao
buscada na tabela questes atravs do campo numquest que corresponde ao nmero da questo.

numqu est

numqu est
questao
imagem
materia
ano
lo cal
ce rtas

numr esp
de scri cao
imagem
certa

erradas

Resposta

Questes

Figura 5.2 - Modelo E-R.

5.2.3.

Dicionrio de Dados

As tabelas 5.3 e 5.4 representam o dicionrio de dados das tabelas questes e resposta
respectivamente. Sero apresentados juntamente com todos seus campos as propriedades de cada
um, como tipo, tamanho, etc.

54

Campo
numquest
questao
imagem
materia
ano
local
certas
erradas

Tipo

Tamanho

Mediumint
Text
Varchar
Varchar
Varchar
Varchar
Float
Float

Not Null

Extra

Ch. Primria

X
X

Auto_increment

80
25
4
20
10,2
10,2

X
X

Tabela 5.3 - Dicionrio de Dados da tabela questes.

Campo
numquest
numresp
descricao
imagem
certa

Tipo
Int
Char
Blob
Varchar
Char

Tamanho
11
1
80
1

Not Null
X
X
X

Ch. Primria
*
*

Tabela 5.4 - Dicionrio de Dados da tabela resposta.

5.3.

Sintaxe SQL para criao das tabelas

Todas as tabelas da implementao foram criadas utilizando-se comandos SQL. A seguir ser
mostrado a sintaxe desses comandos durante a criao das tabelas questes e resposta.
a) Tabela questes
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

55

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.

Descrio das funes PHP utilizadas

No decorrer deste trabalho, houveram vrias situaes onde funes nativas do PHP tiveram que
ser utilizadas. Dentre as quais pode-se citar a necessidade de se gerar nmeros aleatrios para
formular a prova aleatria, e para o tratamento das strings na implementao da busca rpida e
na busca por texto.
Entre as funes que foram utilizadas deve-se dar destaque tambm 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 sero aqui apresentadas e comentadas uma a uma.
As outras funes tambm recebero um comentrio individual, apresentando inclusive a sua
sintaxe.
a) Funo: trim
Sintaxe: trim(string str);
Comentrio: apaga os espaos em branco do incio e fim de uma string.
b) Funo: explode
Sintaxe: explode(string separador, string str);
Comentrio: retorna um array contendo as partes da string com valores separaos por um
separador.
c) Funo: count
Sintaxe: count(mixed matriz);
Comentrio: retorna o nmero de elementos de um array. Retorna 1 se a varivel no for um
array e 0 se a varivel no estiver definida.
d) Funo: strlen

56

Sintaxe: strlen(string str);


Comentrio: retorna o comprimento de uma string.
e) Funo: ceil
Sintaxe: ceil(float nmero);
Comentrio: retorna o prximo nmero inteiro maior ou igual ao nmero especificado.
f) Funo: range
Sintaxe: range(int lim_inferior, int lim_superior);
Comentrio: retorna um array contendo um seqncia de nmeros inteiros no intervalo
especificado.
g) Funo: srand
Sintaxe: srand(int semente);
Comentrio: altera a semente do gerador de nmeros aleatrios para a funo rand();
h) Funo: rand
Sintaxe: rand([int limite_inf], [lim_sup]);
Comentrio: retorna um nmero aleatrio dentro do intervalo especificado.
i) Funo: shuffle
Sintaxe: shuffle(array matriz);
Comentrio: embaralha os elementos de um array.
j) Funo: mysql_connect
Sintaxe: mysql_connect(string[hostname],[usurio], [senha]);
Comentrio: abre uma conexo a um servidor MySQL, retorna id_link se tiver sucesso,
caso contrrio retorna false.
k) Funo: mysql_select_db
Sintaxe: mysql_select_db(string nome_banco_dados);
Comentrio: depois de estabelecer conexo ao servidor de banco de dados, esta funo faz
conexo com o banco de dados requerido na funo.
l) Funo: mysql_query
Sintaxe: mysql_query(string consulta);
Comentrio: trabalha enviando consultas em SQL ao servidor MySQL. Retorna true se
tiver sucesso, caso contrrio retorna false.

57

m) Funo: mysql_fetch_array
Sintaxe: mysql_fetch_array(int resultado);
Comentrio: retorna um array que indica o prximo registro do resultado da consulta ou
false se no houver mais registros no array.
n) Funo: mysql_data_seek
Sintaxe: mysql_data_seek(int id_resultado, int num_linha);
Comentrio: durante a verificao dos registros resultantes da consulta SQL esta funo
move o ponteiro interno dos resultados. Retorna true se tiver sucesso, caso contrrio retorna
false.
o) Funo: mysql_num_rows
Sintaxe: mysql_num_rows(int resultado);
Comentrio: retorna o nmero de registros contidos em um resultado de consulta SQL
enviada ao servidor.
5.5.

Implementao PHP e HTML

O presente item tem por objetivo apresentar a implementao de todos os arquivos .php3
inclusos no estudo de caso, bem como uma breve descrio dos arquivos HTML. Os arquivos
sero explicados um a um em suas principais caractersticas de implementao.
5.5.1.

Index.html Home Page

O objetivo desse arquivo ser ponto de partida para as pginas que permitem fazer prova virtual
e consulta a questo do banco de dados. Tambm possvel efetuar uma consulta rpida, atravs
de palavras chaves digitadas pelo usurio.
A chamada ao arquivo que executa a consulta rpida assim codificada no arquivo index.html:
<form action=buscarap.php3 method=get>
<input type=text name=buscar>
<input type=submit value=busca>
</form>
Ao ser solicitada a consulta pelo usurio, requerida a execuo do arquivo buscarap.php3 no
servidor, sendo enviada as palavras do formulrio como parmetro para o arquivo PHP. Aps
execuo retornada a pgina HTML com as questes que satisfazem as palavras chaves.

58

Os outros dois links existentes na pgina servem respectivamente para solicitar a pgina de prova
virtual e consulta de questes. Sua codificao fica assim:
<a href="consulta.html">Consulta</a>
<a href="prova.html">Prova virtual</a>
Sendo assim essas duas pginas no utilizam nenhuma implementao PHP, sendo arquivos de
HTML puro.
5.5.2.

Prova.html

Este arquivo o ponto principal da Home Page, pois ser atravs dele que todos os parmetros
para execuo da prova virtual sero enviados ao arquivo prova.php3 que criar a prova virtual.
Nesta pgina o usurio poder optar pelos seguintes parmetros para formulao da prova:
a) Matria atravs de um menu cascata ser possvel escolher entre as matrias disponveis,
somente uma ser selecionada, sendo sua escolha obrigatria.
b) Local - atravs de um menu cascata o usurio poder selecionar, um dos locais das quais se
originam as questes, ou seja qual universidade a questo foi aplicada. Sua escolha
opcional, caso no seja escolhido nenhum local , a criao da prova se basear em todas as
provas dos locais cadastrados .
c) Ano atravs de um menu

cascata pode-se selecionar o ano que as questes foram

aplicadas. Sua seleo tambm opcional.


d) Quantidade de questes nesse menu cascata escolhe-se o nmero de questes da prova,
ou seja dentro das questes encontradas com os parmetros selecionados, ser apresentada
para o usurio uma prova com cinco, dez, quinze , ou vinte questes. A

seleo da

quantidade de questes o obrigatria sendo a padro cinco.


e) Nvel Dificuldade - nesse menu cascata deve-se escolher qual o nvel de dificuldade da
prova a ser criada. As opes so: fcil, intermedirio, difcil e aleatrio. O processo de
formulao da prova baseia-se nos critrio acima mencionados, assim quando o total de
questes encontradas com os parmetros fornecidos pelo usurio retornada, o sistema
avalia dentro de todas as questes, quais as se encaixam no nvel de dificuldade solicitado.
Esse critrio de dificuldade baseado em dois campos do banco de dados, que contem a
informao da quantidade

de vezes em que a questo foi acertada ou errada. Essas

informaes de acerto e erro so alimentadas para o banco a cada vez em que uma prova
virtual corrigida, assim as questes aumentam o numero de erro ou acerto em uma unidade.

59

Para elucidar melhor o processo de criao da prova, segue o exemplo: Suponha que o
usurio tenha escolhido o nvel fcil. Quando forem encontradas as questes com os
parmetros enviados, o sistema avaliara a porcentagem de acertos de cada questo, assim
dentro das questes sero escolhidas as N questes com maior percentual de acertos, sendo
essas enviadas para o usurio.
A chamada ao arquivo .php3 que executa o processo de criao da prova, assim codificado no
arquivo prova.html:
<form action=prova.php3 method=get>
... menus de seleo dos parmetros...
</form>
5.5.3.

Consulta.html

Este arquivo o responsvel pelas consultas que so realizadas ao banco de dados, nele que se
passa todos os parmetros necessrios para a realizao da mesma, ele os envia para o arquivo
consulta.php3 que se encarrega de processar as consultas em forma de SQL.
Os parmetros requisitados neste arquivo so:
a) Matria um menu cascata existe disposio do usurio para que se escolha entre as
matrias disponveis qual a desejada, a opo por uma matria opcional. Caso nenhuma
matria seja selecionada, o resultado da consulta abordar todas as matrias cadastradas no
banco de dados.
b) Ano a escolha do ano que se refere a questo tambm opcional e feita atravs de um
menu cascata. Se nenhum ano for selecionado, todos os cadastrados estaro includos na
pesquisa.
c) Local refere-se ao local onde a questo foi aplicada, tambm 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 usurio pode, alm de todos os parmetros mencionados acima,
optar por fazer uma busca por uma palavra-chave. Para isto basta digita-la no campo
disponvel, com isso a consulta ser processada considerando a palavra-chave, e somente
sero retornadas questes que de alguma maneira contenham a palavra digitada.
e) Nmero de Questes em um menu cascata deve-se selecionar a quantidade de questes
que se deseja por pgina para o resultado da consulta. Pode-se optar por cinco ou dez
questes por pgina.

60

Com todos estes parmetros devidamente selecionados, de acordo com a necessidade do usurio,
pode-se dar prosseguimento consulta com a chamada do arquivo consulta.php3 que est assim
codificado:
<form action=consulta.php3 method=get>
... menus de seleo dos parmetros...
</form>

5.5.4.

Prova.php3

O objetivo deste arquivo gerar uma pgina html que contenha uma prova virtual com questes
que atendam aos parmetros escolhidos pelo usurio. Esse script receber cinco variveis
oriundas da pgina prova.html, essas variveis so geradas automaticamente quando o script
chamado, assim ficam disponveis para utilizao na formulao da prova virtual.
As variveis so:
a) matria
b) local de origem da questo
c) ano que a questo foi aplicada
d) nmero de questes da prova
e) nvel de dificuldade
Das variveis acima, a matria, o nmero de questes e o nvel de dificuldade so de seleo
obrigatria, sendo o ano e o local opcionais. Caso o ano e o local no sejam escolhidos, a
consulta se basear em todos os anos e locais cadastrados.
Com toda as variveis passadas, o script segue-se o processo de gerao do cdigo SQL para
consulta das questes. A cada varivel 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 cdigo
para ser executado no banco de dados. Somente o nmero de questes no influenciar na
gerao do cdigo SQL, servindo apenas para controle das questes que sero exibidas.
Tratamento da varivel matria:
$par1 ="materia ='$materia'";
A varivel $par1 recebe por exemplo a string materia = historia, caso seja esta a seleo feita
pelo usurio na pgina prova.html.

61

Tratamento da varivel local:


if ($local <> 'np')
{
$par2 ="AND local = '$local'";
}
Caso o parmetro local tenha sido selecionado pelo usurio, ou seja, diferente de np, a varivel
$par2 receber a string and local = URI, por exemplo.
Tratamento da varivel ano:
if ($ano <> 'np')
{
$par3="AND ano = '$ano'";
}
Caso o parmetro ano tenha sido selecionado pelo usurio, ou seja, diferente de np, a varivel
$par3 receber a string and ano = 2000, por exemplo.
Tratamento da varivel nvel de dificuldade:
Fcil (1)
if (($nivel == 1) || ($nivel == 2))
{
$par4=" order by porcen desc";
$cont=0;
}
Das questes selecionadas, ser agregada ao cdigo SQL a clusula order, que ordenar de
forma decrescente as questes pelo campo porcen. Campo este que contm o clculo dos campos
certas e erradas, resultando na porcentagem de pessoas que acertaram a questo.
Intermedirio(2)
if (($nivel == 2) and ($numreg>$numques))
{
$cont=Ceil(($numreg - $numques)/2);
}
Como visto no trecho anterior, caso o nvel seja o 2 tambm ser incluida a clusula order
descrita acima. Porm, dentre as questes selecionadas, e se estas superarem o nmero de

62

questes escolhidas pelo usurio, a varivel $cont receber a posio onde comea a leitura
sequencial dos registros.
Difcil(3)
if ($nivel == 3)
{
$par4=" order by porcen asc";
}
Das questes selecionadas, ser agregada ao cdigo SQL a clusula order, que ordenar de
forma crescente as questes pelo campo porcen. Assim, sero selecionados por primeiro as
questes mais difceis, ou seja, com menor porcentagem de acerto.
Aleatrio(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 cdigo que implementa a seleo e impresso das questes em cdigo HTML.
if ($nivel == 4)
{
mysql_data_seek($sqlresult,$numbers[$x]);
$x++;
}
No primeiro trecho de cdigo, gerado um vetor com nmeros aleatrios de 1 at a quantidade
de registros encontrados utilizando as funes srand(), shuffle() e range(). Ao final do trecho que
gera uma questo HTML, testado o segundo trecho de cdigo descrito acima, que escolhe a
prxima questo ser impressa atravs da posio seguinte do vetor aleatrio. Por exemplo,
suponha-se que tenham sido encontrados 30 registros sendo esses numerados de 1 30. A
posio 1 do vetor tem o valor 10, ento com a funo mysql_data_seek posiciona-se um
ponteiro para o registro 10, e no prximo lao outro registro ser selecionado pelo valor aleatrio
do vetor seguinte..

63

5.5.4.1. Concatenao das variveis


Com todas os parmetros devidamente passados pelo usurio e tratados pelo programa,
formulada a sintaxe da consulta SQL. Isto acontece com a concatenao de todas as variveis
$parx.
$partodos = $par0.$par1.$par2.$par3.$par4;
O valor de cada varivel $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)
Aps estar formado o cdigo SQL, segue-se os passos:
a) conexo com o servidor MySQL
Atravs da funo: mysql_connect (localhost,usurio,senha) o script faz a
conexo com o servidor MySQl.
b) conexo com a base de dados vestiba
Atravs da funo: mysql_select_db (vestiba) feita a seleo do banco de dados a
ser usado, nesse caso o banco vestiba
c) execuo da query da varivel $partodos
Atravs da funo: $sqlresult = mysql_query ("$partodos"), executada a
instruo SQL contida na varivel $partodos no banco vestiba, retornando um conjunto de
registros, que ficam armazenados em forma de vetor na varivel $sqlresult.
d) posicionamento do ponteiro para o registro inicial
O objetivo da funo: mysql_data_seek($sqlresult,$cont); posicinar o ponteiro
para a posio $cont(variavel essa definida pela escolha do nvel de dificuldade),dentro do
conjunto de registros na varivel $sqlresult.
e) impresso das questes e respostas
Atravs de um lao executada as funes que imprimem o nmero de questes selecionadas
pelo usurio ou as que forem encontradas caso esse nmero seja inferior ao das questes
solicitadas. Seguem-se os passos:

64

a) Imprime cabealho da questo


b) Calcula as porcentagens de erro e acerto da questo atravs dos campos certas e
erradas desse registro.
c) Identifica atravs de cdigo HTML a questo para futura correo.
d) Imprime os grficos em forma de tabelas HTML.
e) Executa outra query para seleo das respostas da questo:
select

numquest,

numresp,descricao,certa

from

resposta

where

numquest=$numreg
f) Gera um formulrio em forma de radio buttons com as respostas da questo,
usando um lao para as nmero de respostas.
g) Caso o nvel de dificuldade seja aleatrio, ser posicionado o ponteiro para a novo
registro a ser impresso, caso contrrio selecionado o registro seguinte.
h) Caso os critrios do lao de impresso de questes na seja validado, encerrada o
lao e finalizado o cdigo HTML.
Assim com esses passos gera-se o cdigo HTML com a prova virtual, sendo agora possvel sua
correo atravs dos script de correo de prova.
5.5.5.

Consulta.php3

o arquivo responsvel por processar as consultas solicitadas pelo usurio. Aps todos os
parmetros terem sido selecionados no arquivo consulta.html, o consulta.php3 trabalhar da
seguinte forma:
a) Uma sintaxe SQL com as requisies feitas montada, para isto todos os parmetros so
concatenados, ou seja, eles so lidos um a um e depois so unidos para formar a sintaxe.
...
if ($materia <> 'np')
{
$par2 =" materia = '$materia'";
$par=1;
}
//nesta

primeira

condio

em //$par2.
if ($ano <> 'np')
{

matria

selecionada

armazenada

65

$par4 =" ano = '$ano'";


if ($par==1)
{
$par3=' AND ';
}
$par=1;
}
//na segunda condio 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
funes trim(), explode() e count(). Aps a palavra ser digitada no campo o seguinte cdigo
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 questes armazenada em
$parbusca:
$parbusca[$x]="(questao like '% $recexplode[$i] %' or questao
like

'$recexplode[$i]

$recexplode[$i]_')" ;

%'

or

questao

like

'%

66

Com isto todas as condies passadas pelo usurio esto consideradas, o prximo passo unir
todas essas condies em uma sintaxe SQL nica:
$partodos=Select * from questoes. $par1. $par2. $par3. $par4.
$par5. $par6. $parbusca[$i];
b) prximo passo tratar da conexo com o banco de dados, primeiramente conecta-se ao banco
de dados e aps base de dados especifica.
if ($conectou = mysql_connect (localhost,root,php3000))

//testa

//conexo ao banco de dados


if ($conecbd = mysql_select_db (vestiba))

//testa conexo

//base de dados
c) Com a conexo base de dados estabilizada e com a sintaxe SQL para realizao da consulta
montada, basta agora executar esta consulta SQL no banco de dados para ter os resultados.
$sqlresult

mysql_query

("$partodos");//executa

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

varivel

$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 cdigo HTML gerado pelo script prova.php3,
assim quando o usurio tiver respondido as questes e solicitar sua correo, ser chamado o
script corrige.php3 que formar outra pgina HTML contendo um tabela confrontando as
respostas do usurio com as respostas corretas, bem como resultado final de total de acertos e
erros. Pelo fato de no haver necessidade de segurana das respostas, foi implementa um soluo
que mantm dentro da prpria pgina que contem a prova, as suas respostas corretas. Isso feito
incluindo tags HTML que ficam ocultadas para visualizao do usurio no browser, assim ao
executar o script de correo no necessrio o acesso a banco de dados para consulta e sim

67

apenas o confrontamento da questo respondida com a correta, includa no prprio cdigo da


prova. Porm uma outra rotina executada, a que permite incrementar o valor dos campos, que
definem o nvel de dificuldade da prova, assim ao acertar uma questo somada um valor ao
campo certas, e o mesmo ocorre para o caso de erro. Essas informaes de acerto e erro,
serviro de base para formulao das prximas provas virtuais, conforme nvel de dificuldade
escolhido.
Esse processo se executa da seguinte maneira:
Ao gerar a prova virtual so criados dois vetores com nmeros seqncias equivalente ao
nmero de questes da prova, so eles resposta[] e correta[]. No vetor resposta existem um
ndice que contem a letra da resposta escolhida pelo usurio. No vetor correta[] o ndice de
mesmo nmero da resposta contem uma string com a letra correta da questo seguido de sua
identificao na banco de dados. Essa facilidade de utilizar vetores uma combinao da cdigo
HTML e da linguagem PHP que permite passagem de vetores como variveis. Alm disso existe
outra varivel que possui o valor da quantidade de questes da prova, com ela ser executado o
lao que cruzara a informao dos dois vetores, caso sejam iguais gerada a rotina do script que
imprime o trecho da tabela com a informao do resultado e alm disso executada uma query
com a funo UPDATE que atualiza o valor do campo certa do registro identificado no vetor
correta , no caso de erradas ocorre o mesmo processo de impresso porm o campo a ser
atualizado o erradas. A seqncia do cdigo :
a) Processo de conexo ao servidor e ao banco vestiba para atualizao dos dados na rotina de
correo.
b) Lao inicial contando o nmero de questes
c) Extrai-se o valor do vetor correta[], dividindo a string em duas novas variveis, a com o valor
da letra correta ($certa) e outra com o identificador(chave primria) da questo($id)
d) Compara-se a varivel $certa com o valor do vetor resposta de mesmo ndice.
e) Executa-se o processo de impresso do cdigo HTML com a tabela de resultado
f) Atualiza-se o valor dos campos certas ou erradas atravs da execuo da instruo SQL,
baseada no nmero da questo.
g) Finaliza o cdigo assim que sair do lao.
5.5.7.

Buscarap.php3

68

Aqui onde ocorrer todo o processamento da consulta por palavra-chave. A implementao


deste arquivo gira em torno de 3 funes: 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 funes as palavras digitadas no campo foram preparadas para a realizao 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 conexo deve ser testada em seguida:
if ($conectou = mysql_connect (localhost,root,php3000))

//testa

//conexo ao banco de dados


if ($conecbd = mysql_select_db (vestiba))

//testa conexo

//base de dados
Tendo os resultados da consulta em $sqlresult o ltimo passo tratar da listagem das questes
encontradas:
$row

mysql_fetch_array($sqlresult)//a

varivel

$row

recebe

o //controle de se ainda h registros para serem mostrados


print

$row

//tela.

["questao"];//o

registro

retornado

impresso

na

69

Concluses
O objetivo do trabalho foi alcanado, tendo em vista que se buscava verificar a possibilidade de
se montar um servidor Web utilizando ferramentas disponveis na Internet, bem como utilizar as
mesmas para a construo de um Site que possibilite acesso uma base de dados.
Com relao ao banco de dados, inicialmente optou-se pelo PostgreSQL, mas houveram
dificuldades de implementao no que diz respeito conexo entre o servidor de banco de dados
e o browser, outro fator que determinou a eliminao do PostgreSQL do trabalho foi a sua
escassa documentao. Ento passou-se para o MySQL, que mostrou-se uma ferramenta de
grande velocidade, porm sem uma grande nfase no quesito segurana, sendo que seu uso para
tal fim no recomendado pelos maiores especialistas. Alm disto, deve-se destacar a facilidade
de uso referente manipulao dos dados, como criao de tabelas, insero de registros,
alterao de dados, etc. Outro ponto importante que fez do MySQL o banco de dados escolhido
foi a documentao um pouco mais abrangente, alm dos documentos oficiais possui no mercado
alguns livros que facilitam o seu aprendizado.
A linguagem PHP facilitou bastante a manipulao com o banco de dados, isto por possuir
funes nativas que so especficas para cada banco, no caso do MySQL so mais de 30 funes
que do a possibilidade de se realizar todos os tipos de operaes com a base dados atravs de
um browser. Mas, no possui somente funes para bancos de dados, elas abrangem itens como
segurana, vetores, strings, etc.
Estas duas ferramentas integradas com o sistema operacional Linux e o servidor Apache Web
Server, possibilitaram a implementao do Site descrito no captulo 5. Esta implementao veio
a por em prtica todo o conhecimento adquirido no decorrer do presente trabalho, onde pde-se
observar que todas as ferramentas utilizadas tiveram uma integrao e um desempenho
satisfatrios dentro das caractersticas da implementao em questo. Ou seja, o banco de dados
MySQL portou-se muito bem por a implementao no necessitar de tratamentos de segurana,
mas somente de uma conexo rpida e eficaz, e a linguagem PHP mostrou uma grande
familiaridade com o MySQL atravs das suas funes nativas especficas para este banco.
Sugestes para trabalhos futuros

70

Como sugesto para trabalhos futuros, fica a implementao de um Site com a utilizao do
mdulo de segurana SSL do Apache, e o espelhamento do banco de dados de uma empresa para
a Web.

71

Referncias Bibliogrficas
[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 Informtica. 1999. Conectiva Guia do Usurio, Curitiba.

[FIS 99]

Fisher, Herbert G. 1999. PHP Guia de Consulta Rpida, Novatec, So 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, OReilly, 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ê também pode gostar