Você está na página 1de 117

Apostila Web

Curso Básico de Web


DHTML (HTML – CSS – JavaScript),
Apache, MySQL®, PHP

Prof. Rudinei Pereira Dias


2

INTRODUÇÃO....................................................................................................................................................... 5

HTML.......................................................................................................................................................................6

INTERNET - CONCEITOS...............................................................................................................................................6
ESTRUTURA DE UM DOCUMENTO HTML.......................................................................................................................7
REFERÊNCIA DA LINGUAGEM....................................................................................................................................... 8
Cabeçalhos (Headings).....................................................................................................................................8
Parágrafo e Quebras de Linha......................................................................................................................... 9
Estilos de Texto................................................................................................................................................. 9
Fontes de Texto................................................................................................................................................. 9
Listas................................................................................................................................................................. 9
Tabelas............................................................................................................................................................10
Introduzindo Imagens..................................................................................................................................... 11
Inserindo Hyperlink........................................................................................................................................ 11
Índice de Comandos HTML............................................................................................................................ 11
Formulários HTML.........................................................................................................................................15

CSS - CASCADING STYLE SHEETS.............................................................................................................. 18

GUIA DE REFERÊNCIA DOS COMANDOS CSS............................................................................................................... 20


Propriedades das fontes..................................................................................................................................20
Propriedades das cores e background............................................................................................................20
Propriedades do texto..................................................................................................................................... 20
Propriedades dos containers.......................................................................................................................... 21
Propriedades de ordenação............................................................................................................................21
EXEMPLO DE CÓDIGO CSS.......................................................................................................................................22
Exemplo 1:...................................................................................................................................................... 22
Exemplo 2:...................................................................................................................................................... 22
Exemplo 3:...................................................................................................................................................... 23

JAVASCRIPT........................................................................................................................................................24

OPERADORES LÓGICOS.............................................................................................................................................. 24
OPERADORES MATEMÁTICOS...................................................................................................................................... 24
CONTROLES ESPECIAIS.............................................................................................................................................. 25
COMANDOS CONDICIONAIS.........................................................................................................................................25
Comando IF.................................................................................................................................................... 25
Comando FOR................................................................................................................................................ 25
Comando WHILE............................................................................................................................................26
Comando SWITCH..........................................................................................................................................26
Comando BREAK............................................................................................................................................26
CONSTANTES E VARIÁVEIS........................................................................................................................................ 26
CONVERSÕES DE TIPOS DE DADOS............................................................................................................................... 27
ARRAYS – LISTA DE DADOS...................................................................................................................................... 28
Criando um Array........................................................................................................................................... 28
3

Preenchendo e Acessando os Elementos de um Array................................................................................... 28


EVENTOS NO JAVASCRIPT......................................................................................................................................... 29
FUNÇÕES DEFINIDAS PELO USUÁRIO.............................................................................................................................30
Chamando funções a partir de um objeto de formulário................................................................................30
Chamando funções a partir de um botão de formulário.................................................................................30
Chamando funções a partir de um hiperlink.................................................................................................. 31
Injetando conteúdo num documento HTML via Javascript............................................................................31
OBJETOS E FUNÇÕES INTRÍNSECAS DO JAVASCRIPT.......................................................................................................31
Funções de Conversão....................................................................................................................................31
Funções de Caixas de Mensagem, de Confirmação e Prompt....................................................................... 32
Objeto Math - Funções Matemáticas..............................................................................................................32
Objeto String - Funções de manipulação de Strings...................................................................................... 33
DOM – DOCUMENT OBJECT MODEL........................................................................................................................ 34
OUTROS CÓDIGOS DE EXEMPLO.................................................................................................................................36
Exemplo 1:...................................................................................................................................................... 36
Exemplo 2........................................................................................................................................................36
Exemplo 3........................................................................................................................................................37
Exemplo 4........................................................................................................................................................37

MYSQL.................................................................................................................................................................. 38

INSTALAÇÃO DO BANCO DE DADOS MYSQL.............................................................................................................. 38


Tipos de Dados............................................................................................................................................... 44
Tipos de Tabelas............................................................................................................................................. 45
Notação e Revisão SQL – Structred Query Language....................................................................................45
Usando a cláusula JOIN expressa na consulta SQL...................................................................................... 48
Funções Especiais de MySQL........................................................................................................................51
FERRAMENTAS.........................................................................................................................................................58
MySQL Query Browser...................................................................................................................................58
MySQL Administrator.....................................................................................................................................62
MySQL Workbench......................................................................................................................................... 62
fabForce DBDesigner.....................................................................................................................................62

PHP.........................................................................................................................................................................68

O QUE É PHP?.......................................................................................................................................................68
O QUE O PHP PODE FAZER?..................................................................................................................................... 69
ARQUITETURA ........................................................................................................................................................ 71
REFERÊNCIA DA LINGUAGEM..................................................................................................................................... 73
Alternado/Escaping do HTML........................................................................................................................73
Separador de instruções................................................................................................................................. 74
Comentários....................................................................................................................................................74
Tipos................................................................................................................................................................74
Variáveis......................................................................................................................................................... 75
Atribuição de referência à variáveis...............................................................................................................75
Constantes.......................................................................................................................................................76
4

Operadores..................................................................................................................................................... 77
Estruturas de Controle....................................................................................................................................81
Funções definidas pelo usuário ..................................................................................................................... 88
PHP COM HTML.................................................................................................................................................. 90
Formulários HTML.........................................................................................................................................90
Interação entre formulários e PHP................................................................................................................ 92
FUNÇÕES DO PHP................................................................................................................................................... 94
Funções de texto............................................................................................................................................. 94
Funções de verificação................................................................................................................................... 98
Funções numéricas....................................................................................................................................... 100
Funções de data............................................................................................................................................ 101
Funções de manipulação de arrays.............................................................................................................. 103
Funções de conexão com o MySQL.............................................................................................................. 105

APÊNDICES........................................................................................................................................................109

APÊNDICE A - ESTRUTURA DE TESTE DO BANCO DE DADOS E MODELO ER....................................................................109


Modelo ER.................................................................................................................................................... 113
APÊNDICE B – EXERCÍCIOS DE PHP........................................................................................................................ 114

REFERÊNCIAS.................................................................................................................................................. 116

RECURSOS DE SOFTWARE........................................................................................................................................116
CÓDIGOS FONTES...................................................................................................................................................116
LISTAS DE DISCUSSÃO............................................................................................................................................ 117

CONSIDERAÇÕES LEGAIS............................................................................................................................117

COPYRIGHT...........................................................................................................................................................117

BIBLIOGRAFIA.................................................................................................................................................117
5

INTRODUÇÃO

A Internet deve início na década de 60 com a rede ARPANET nos EUA. A rede era composta de quatro computadores
afim de demonstrar as potencialidades do uso das redes de computadores distantes geograficamente. Na década de 70, mais
precisamente em 1972, a ARPANET já conectava 50 universidades e as instituições militares dos EUA.
Hoje, renomeada para INTERNET, é uma arquitetura de software e hardware de comunicação e é mantida por diversas
organizações comerciais e governamentais. Uma das principais características da Internet, é que não possui dono: a Internet é
gerida por organizações que definem os padrões de comunicação, tecnologia e recursos como a W3C, ITU, IETF, que se
dedicam a suportar, ratificar padrões e resolver questões operacionais, visando promover os objetivos da Internet.
Nos últimos 10 anos, a Internet tomou conta dos mercados corporativos, da rotina diária das empresas e pessoas
comuns, a ponto de todas as empresas investirem em formas de negócio via internet.
Existem diversas categorias de sites hoje: e-Shopping, e-Marketing, e-Business, e-News, e-Government,
Entretenimento e Comunicação - Blogs, Fotologs, Chats, IM (instant messenger) - entre outros. Cada qual com sua
complexidade, seu público, suas características.
Tecnologia:
Existem os mais diversos tipos de técnicas e recursos no complexo mundo Internet: DHTML, Ajax, Flash, Linguagens,
Servidores, Bancos de dados, etc...
Este curso visa preparar o aluno nos recursos mais utilizados hoje:
– DHTML: Nome dado a conjunção dos recursos HTML, CSS e JavaScript
– Apache: Servidor que cria um ambiente Web
– MySQL: Servidor de banco de dados
– PHP: linguagem de programação
6

HTML
As páginas WEB1 são definidas por uma linguagem chamada HTML – Hypertext Markup Language –, que é uma
linguagem de formatação, e tem a finalidade de definir a estrutura e dar o formato dos documentos WEB.
Antes de iniciar com o html, precisamos entender alguns conceitos de Internet.

Internet - Conceitos

A Internet é formada por uma vasta rede de computadores interligadas por meio de agentes físicos de comunicação
(cabos de rede, fibra ótica, equipamentos wireless) e servidores que realizam a interconexão dos meios de comunicação e
provêm os serviços web.
Em específico estamos interessados nos servidores que provêm o serviço Web, ou seja, que permite a navegação de
documentos de hipertexto. Estes servidores são gerenciados por softwares chamados Servidores Web, dos quais o mais
conhecido e utilizado é o Servidor Web Apache (http://httpd.apache.org/).
Como os computadores desta vasta rede estão conectados por meios físicos em uma arquitetura de endereçamento IP,
faz-se necessário um meio mais simplificado de acesso aos servidores do que a utilização de endereços IPs. Então definiu-se os
endereços de domínio. Um endereço de domínio é formado pela conjunção tipo_de_serviço (www, ftp, ...) + nome_próprio
(ipuc, terra, uol, ...) + tipo_de_domínio (com, org, mil, edu, ...) + localização_geográfica (br, pt, au, ch, uk, ...), unidos por
um ponto. A entidade que gerencia e determina as normas de domínio no Brasil é o registro.br, e é responsável por definir
todos os endereços com a extensão .br. Endereços ser extensão regional só podem ser difinidos pelo registro americano
(EUA).
Exemplos de domínio:
www.ipuc.com.br – tipo de serviço www, nome IPUC, domínio comercial, localizado no Brasil
www.terra.com.br – tipo de serviço www, nome TERRA, domínio comercial, localizado no Brasil
www.google.com – tipo de serviço www, nome GOOGLE, domínio comercial, localizado nos EUA
www.bbc.co.uk – tipo de serviço www, nome BBC, domínio comercial, localizado na Inglaterra
www.ufrgs.br – tipo de serviço www, nome UFRGS, domínio especial, localizado no Brasil
Definido o endereço, para acessar um servidor deve-se especificar o tipo de acesso, ou protocolo de serviço, e o
caminho para acessar o recurso dentro do servidor. O tipo de protocolo define como um arquivo será acessado e qual o
software (cliente e servidor) é responsável pelo envio / abertura do arquivo. Os protocolos mais comuns são http (hypertext
transport protocol) e ftp (file transport protocol) entre outros.
O nome dado ao endereçamento de um recurso na web é URL – Uniform Resource Locator – e define uma forma
padrão de acesso: protocolo :// domínio / localização_do_recurso.
Exemplos de URL:
http://www.ipuc.com.br/notas/lista.html
ftp://www.ipuc.com.br/files/abcde.exe

1 WEB – É uma forma reduzida de WWW (World Wide Web ou Teia de Alcance Mundial).
7

Figura 1 - Interação Navegador - Servidor

O acesso a um recurso web parte de um software Cliente (Navegador, Browser) para um software Servidor (Serv. Web)
através de uma URL. É pela url que um computador localiza o caminho de um servidor pela Internet. O Servidor, por sua vez,
devolve o recurso solicitado ao computador / software Cliente (Veja figura 1).

Características da Hypertext Markup Language


• Documentos (Páginas Web) compostos de textos e comandos especiais (tags) de HTML;
• Possibilita a referência à outros documentos através de links de hipertexto;
• Permite a inclusão de imagens, sons, vídeos, objetos;
• Permite a interação do usuário com sistemas através da utilização de formulários, botões e links.
• Protocolo de comunicação: HTTP - Hypertext Trasport Protocol.
• Associa-se a outras tecnologias como:
• CSS - Cascading Style Sheet - que agrega diversas melhorias do visual e interatividade.
• JavaScript - que agrega programação no cliente (browser) provendo grande interatividade.

Estrutura de um documento HTML

Os documentos HTML devem respeitar uma estrutura básica definida pelos tags identificadas na lista abaixo.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Título da Página</TITLE>
</HEAD>
<BODY>
Área da página propriamente dita<BR>
Aqui poderão ser incluídos textos, imagems, sons, vídeos, formulários e qualquer interação
com o usuário que se faça necessário.
</BODY>
</HTML>

As tags em negrito correspondem a elementos indispensáveis na construção de um documento HTML correto e


possuem as seguintes funções:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">


– Define o tipo e versão do Documento (Derivada da SGML).
<HTML></HTML>
– Estrutura Principal do documento: identifica uma formatação Hypertext Markup Language
<HEAD></HEAD>
– Cabeçalho da página
8

<BODY></BODY>
– Corpo da página
<TITLE></TITLE>
– Hierárquica de <HEAD></HEAD> corresponde ao Título da Página

A listagem abaixo demonstra um documento com conteúdo sendo formatado por outras tags html.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Página da Disciplina</TITLE>
</HEAD>
<BODY>
<H1>Página da Disciplina de HTML e PHP</H1>
<H2>O programa da disciplina compreende:</H2>
<H3>HTML, <BR>MySQL e<BR> PHP</H3>
</BODY>
</HTML>

A alteração da aparência dos documentos html dá-se em função das modificações das propriedades das tags,
identificando a nova formatação que uma tag deve assumir. Essas mudanças de formatação podem ser uma cor de texto
diferente, uma cor de fundo, o tipo de fonte, a definição da borda entre outras tantas. Modifica-se a formatação atribuindo um
novo valor a uma propriedade, como por exemplo: align="CENTER" .
A listagem abaixo demonstra um documento com conteúdo sendo formatado com a alteração de algumas propriedades
de formatação.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>Página da Disciplina de PHP</TITLE></HEAD>
<BODY bgColor="#aeddee">
<H1><P align="CENTER" forecolor="#FF2128">Página da Disciplina de PHP </P></H1>
<H2> <P align="LEFT"><B>O programa da disciplina compreende:</B></P></H2>
<H3> <P align="RIGHT"><I>HTML, </I><BR>
<TT>MySQL e</TT><BR>
<B>PHP</B></P> </H3>
</BODY>
</HTML>

Referência da Linguagem

Cabeçalhos (Headings)

Os cabeçalhos são linhas que aparecem com o tamanho de letra diferenciado do restante do texto, com a finalidade de
identificar títulos, seções ou tópicos. São definidos pelo comando <Hn>.
<H1>1 Capítulo</H1>
<H2>1.1 Título</H2>
<H3>1.1.1 Subtítulo</H3>
<H4>1.1.1.1 Seção</H4>

O código acima obterá a seguinte visualização

1 Capítulo
1.1 Título
1.1.1 Subtítulo
1.1.1.1 Seção
9

Parágrafo e Quebras de Linha

Os parágrafos tem a finalidade de agrupar uma parte de um texto atribuindo uma identificação lógica à estrutura do
documento. São definidos pelo comando <P>.
Conteúdo da Disciplina
<P>A disciplina tem o objetivo de introduzir os conceitos de programação para a web, com a
utilização de tecnologias e ferramentas atuais e largamente utilizadas, como o PHP.</P>
<P>O HTML é a codificação padrão para a utilização na web, atualmente na versão 4.1, e deve ser
entendido por qualquer navegador. Diferentemente, a linguagem JavaScript não é suportada por todos os
navegadores.</P>
Quebra de Linha
Após este pequeno trecho de texto,<BR>
há um comando de Quebra de Linha.

Estilos de Texto

Determinam uma série de efeitos no texto, como um editor comum.


Texto Normal
<B>Texto em Negrito</B>,
<I>Texto em Itálico</I>,
<U>Texto Sublinhado</U>,
<STRONG>Texto em Forte</STRONG>
<TT>Texto em TypeWriter</TT>,
<BIG>Texto Largo</BIG>

Fontes de Texto

Determinam o tipo de fonte que uma determinada parte de um documento deverá utilizar.
<FONT SIZE="3" FACE="Verdana,Arial,Tahoma" COLOR="#EADC54">
Este Texto tem esta especificação
</FONT>

Listas

Listas são utilizadas para a criação de sumários em páginas. Uma lista pode ser numerada ou formatada com um
símbolo.
A tag <UL> cria uma lista não ordenada e a tag <OL> cria uma lista ordenada. Cada elemento da lista é definido pela
tag <LI>.
<UL>
<LI>
<H2>Lista de Chamada</H2>
<UL>
<LI>Antônio</LI>
<LI>Carlos</LI>
<LI>Maria</LI>
</UL>
</LI>
</UL>

<OL>
<LI>
<H2>Chamada Numerada (ordenada)</H2>
<OL>
<LI>Antônio</LI>
<LI>Carlos</LI>
<LI>Maria</LI>
</OL>
</LI>
</OL>
10

Figura 2: Visualização de Lista Não Ordenada e Lista Ordenada

Tabelas

Tabelas são elementos do HTML que definem mais do que simples estruturas de linha-coluna. Tabelas são utilizadas
para estruturar todo o documento de forma a colocar cada conteúdo em seu devido lugar.
As tags envolvidas com as tabelas são:
<TABLE></TABLE> Inicializa e encerra a tabela.
<TR></TR> Cria uma linha de células (uma ou mais células alinhadas horizontalmente).
<TH></TH> Cria uma célula de cabeçalho, que centraliza e negrita seu conteúdo.
<TD></TD> Cria uma célula normal.

Exemplo:
<TABLE BORDER=1>
<TR>
<TH>1ª Chamada</TH><TH>2ª Chamada</TH>
</TR>
<TR>
<TD>Antônio</TD><TD>Carlos</TD>
</TR>
<TR>
<TD>João</TD><TD>Maria</TD>
</TR>
<TR>
<TD>Neusa</TD><TD>Otávio</TD>
</TR>
</TABLE>

O código fonte acima cria uma estrutura de tabela como apresentado abaixo:

1ª Chamada 2ª Chamada
Antônio Carlos
João Maria
Neusa Otávio
11

Para entender melhor as tabelas analise o gráfico abaixo:

Introduzindo Imagens

Para introduzir imagens em um documento html, a tag utilizada é a <IMG>.


A propriedade src determina o endereço de onde a imagem está localizada e pode utilizar um endereço de domínio
ou um endereço relativo para a localização da imagem.
<IMG SRC="http://www.terra.com.br/imagens/et.gif">
<IMG SRC="logo-php.gif">

Inserindo Hyperlink

Os hiperlinks são os elementos responsáveis por vincular um documento ao outro, característica esta que é a
fundamental do HTML pois permite a navegação de uma página à outra.
A tag utilizada para este fim é a tag <A>, acrônimo de ANCHOR que significa âncora, em conjunto com a proprietade
HREF que determina o destino do hiperlink. O texto da âncora ou hiperlink deverá estar contido entr o par de tags
<A>..</A>. O endereçamento de página utilizado poderá ser o de domínio ou relativo.
<A HREF="http://www.ipuc.com.br"> http://www.ipuc.com.br</A>
<A HREF="http://www.ipuc.com.br/index.html"> Clique para Acessar o IPUC</A>
<A HREF="disciplina.php"> Clique para Acessar a Página da disciplina</A>

Índice de Comandos HTML

<!-- ... --> - Tag que cria um comentário de código

<A> ... </A> - Tag que cria um Hiperlink <A HREF='endereco'> título do link </A>
– Prop: HREF – localização do endereço.
– Prop: TARGET – nome do alvo (janela) em que o link deverá ser aberto

<B> ... </B> - Tag que transforma uma fonte em negrito

<BLOCKQUOTE> ... </BLOCKQUOTE> - Tag que cria um deslocamento de texto – tabulação

<BODY> ... </BODY> - Tag que inicia o corpo do documento web


– Prop: BACKGROUND - endereço da imagem de fundo
– Prop: BGCOLOR - Cor do fundo do documento
– Prop: TEXT - Cor do texto
– Prop: LINK - Cor de link
– Prop: VLINK - Coor do link visitado
– Prop: ALINK - Cor do link ativo
12

<BR> - Tag que cria uma quebra de linha

<BUTTON> ... </BUTTON> - Tag que cria um botão


– Prop: NAME – nome do elemento no formulário
– Prop: VALUE – valor do elemento
– Prop: TYPE – tipo do elemento [ submit | reset | button ]
– Prop: DISABLED – propriedade que desabilita o botão

<!DOCTYPE> - Tag que define a versão do html que está sendo usado no documento

<FIELDSET> ... </FIELDSET> - Tag que cria uma área de agrupamento ou grupo de controle

<FONT> ... </FONT> - Tag que modifica o formato de texto


– Prop: SIZE – ajuste do tamanho da fonte [ 1 a 7 ]
– Prop: COLOR – cor do texto
– Prop: FACE – tipo da fonte

<FORM> ... </FORM> - Tag que cria um formulário


– Prop: ACTION - endereço de submissão do formulário (destino)
– Prop: METHOD - método HTTP para a submissão do formuário [ get | post ]
– Prop: ENCTYPE - tipo do conteúdo (default TEXT)
– Prop: TARGET - alvo para abertura em outra janela

<FRAMESET COLS=' ' ROWS=' ' > ... </FRAMESET> - Tag que cria um índice de frames
– Prop: ROWS – número de divisões de frames e tamanhos dos frames na vertical
– Prop: COLS – número de divisões de frames e tamanhos dos frames na horizontal

<FRAME> - Tag que define um frame


– Prop: NAME – nome do frame
– Prop: SRC – endereço do conteúdo do frame
– Prop: FRAMEBORDER- borda do frame [ 1 | 0 ]
– Prop: MARGINWIDTH – largura da margem (em Pixels)
– Prop: MARGINHEIGHT – altura da margem (em Pixels)
– Prop: NORESIZE – desabilita o redimensionamento do frame
– Prop: SCROLLING – habilita o scroll [ yes | no | auto ]

<H1> ... </H1> - Tag que cria um cabeçalho de nível 1


<H2> ... </H2> - Tag que cria um cabeçalho de nível 2
<H3> ... </H3> - Tag que cria um cabeçalho de nível 3
<H4> ... </H4> - Tag que cria um cabeçalho de nível 4
<H5> ... </H5> - Tag que cria um cabeçalho de nível 5
<H6> ... </H6> - Tag que cria um cabeçalho de nível 6

<HEAD> ... </HEAD> - Tag que define o cabeçalho de um documento html

<HR> - Tag que cria uma linha horizontal no documento

<HTML LANG=pt> ... </HTML> - Tag que define o escopo de um documento html
– Prop: LANG – define o atributo de internacionalização de linguagem (pt – português)

<I> ... </I> - Tag que formata para itálico um texto

<IFRAME> ... </IFRAME> - Tag que cria um Frame Interno ( Internal Frame )
– Prop: SRC - endereço do documento que será aberto na janela
– Prop: NAME - nome do frame
– Prop: WIDTH - largura do frame (em Pixels)
– Prop: HEIGHT - altura do frame (em Pixels)
– Prop: ALIGN - alinhamento do frame [ top | middle | bottom | left | right ]
– Prop: FRAMEBORDER - borda [ 1 | 0 ]
– Prop: MARGINWIDTH - largura da margem
– Prop: MARGINHEIGHT - altura da margem
13

– Prop: SCROLLING - habilita scroll [ yes | no | auto ]

<IMG SRC=' '> - Tag que efetua a inserção de uma imagem num documento html
– Prop: SRC - endereço da imagem
– Prop: BORDER – borda da imagem (default 1)
– Prop: ALIGN - alinhamento da imagem [ top | middle | bottom | left | right ]

<INPUT TYPE=' '> - Tag que cria um campo de entrada / interação com o usuário pelo uso de formulários
– Prop: TYPE - tipo do campo de entrada [ text | password | checkbox | radio | submit | reset | file | hidden |
image | button ]
– Prop: NAME - nome do elemento
– Prop: VALUE - valor da entrada
– Prop: CHECKED - marca um elemento (radio button ou checkbox)
– Prop: SIZE - tamanho da visualização de caracteres (para entradas de texto)
– Prop: MAXLENGTH - número máximo de caracteres (para entradas de texto)
– Prop: SRC - endereço para uma imagem (no caso da substituição de um botão
– Prop: ALT - texto alternativo da imagem (caso esta não seja exibida)
– Prop: ALIGN – alinhamento [ top | middle | bottom | left | right ]
– Prop: DISABLED – disabilita o elemento
– Prop: READONLY – disabilita a edição
– Prop: ACCEPT – tipo de mídia pata upload de alquivos [ContentTypes]
– Prop: ACCESSKEY – tecla-chave (shortcut ) [Character]
– Prop: TABINDEX – posição do elemento na posição do tab order

<LINK> - Tag que asssocia arquivos externos (css/javascript) a um documento html


– Prop: REL – tipo de mídia relacionada pelo link
– Prop: HREF - arquivo relacionado pelo link (URI)
– Prop: TYPE - tipo do arquivo relacionado pelo link [ContentType]

<MAP NAME=> ... </MAP> - Tag que cria um mapa de imagens. É utilizado em conjunto com a tag AREA.
– PROP: NAME – nome do mapa de imagens

<AREA> ... </AREA> - Tag que cria uma área num mapa de imagens. É utilizado em conjunto com a tag MAP.
– PROP: SHAPE – formato da região de clique [ rect | circle | poly | default ]
– PROP: COORDS – coordenadas da região (quatro pontos cartesianos)
– PROP: HREF – endereço do link (URI)
– PROP: TARGET – nome do frame alvo
– PROP: NOHREF – indica uma região inativo (sem link)
– PROP: ALT – texto alternativo
– PROP: TABINDEX - posição do elemento na posição do tab order

Exemplo – Mapa de imagem:


<MAP NAME=disciplina>
<AREA HREF="/infox/" ALT="Informática X" COORDS="5,5,120,50">
<AREA HREF="/infoxiii/" ALT="Informática XIII" COORDS="5,85,120,150">
<AREA HREF="/home/" ALT="Home" COORDS="150,5,180,150"></MAP>
<IMG SRC="mapa.png" ALT="Mapa de Imagem" USEMAP="#disciplina">

<OPTGROUP> ... </OPTGROUP> - Tag que cria um grupo de botões de opção (botões de rádio)
– PROP: LABEL – Texto de Label do grupo
– PROP: DISABLED – desabilita o grupo de opções

<P>Qual a cidade que você reside?<BR>


<SELECT NAME=cidade>
<OPTGROUP LABEL="Rio Grande do Sul">
<OPTION LABEL="18">Canoas</OPTION>
<OPTION LABEL="33">Esteio</OPTION>
<OPTION LABEL="19">Porto Alegre</OPTION>
</OPTGROUP>
<OPTGROUP LABEL="Santa Catarina">
<OPTION LABEL="77">Camboriú</OPTION>
<OPTION LABEL="72">Florianópolis</OPTION>
</OPTGROUP>
<OPTGROUP LABEL="Paraná">
<OPTION LABEL="13">Curitiba</OPTION>
14

<OPTION LABEL="48">Pinhal</OPTION>
</OPTGROUP>
<OPTION>Outra Cidade</OPTION>
</SELECT>
</P>

<OPTION VALUE=' '> - Tag que cria uma entrada de lista de uma caixa de seleção <SELECT>
– Prop: VALUE - valor da entrada

<P> ... </P> - Tag que cria um parágrafo

<PRE> ... </PRE> - Tag que cria um espaço pré-formatado

<SCRIPT LANGUAGE=> ... </SCRIPT> - Tag que cria uma área de programação de scripts no documento
– PROP: TYPE – tipo de linguagem [ContentType]
– PROP: LANGUAGE – nome da linguagem
– PROP: SRC – localização de arquivo externo de script [URI]
– PROP: CHARSET - character encoding

<SELECT> ... </SELECT> - Tag que cria uma caixa de seleção (para formulários)
– PROP: NAME – nome do elemento
– PROP: MULTIPLE – permite seleção múltipla
– PROP: SIZE – número de elementos visíveis
– PROP: DISABLED – desabilita o elemento
– PROP: TABINDEX - posição do elemento na posição do tab order

<STYLE TYPE= 'text/css'> ... </STYLE> - Tag que cria uma área de definição de estilos CSS
– PROP: TYPE – ContentType
– PROP: TITLE – título do estilo
– PROP: MEDIA - tipo de mídia sobre qual o estilo deve ser aplicado []
• screen (default) - para telas não paginadas de computadores
• tty - para telas fixed-pitch character grid displays (como usado pelo Lynx)
• tv - para dispositivos de televisão, com baixa resolução e scroll limitado
• projection - para projetores
• handheld - para handleds
• print - para impressoras
• braille - para dispositivos braile
• aural - para sintetizadores de voz
• all - para todos os dispositivos

<TABLE> ... </TABLE> - Tag que cria uma tabela


– PROP: SUMMARY - propósito - estrutura da tabela
– PROP: WIDTH - largura (pixels)
– PROP: BORDER - largura da borda (pixels)
– PROP: CELLSPACING - espaçamento entre as células
– PROP: CELLPADDING - espaçamento dentro das células
– PROP: ALIGN - alinhamento [ left | center | right ]
– PROP: BGCOLOR - cor de fundo

<TBODY> ... </TBODY> - Tag que define o corpo de uma tabela

<TR> ... </TR> - Tag que cria uma linha de uma tabela
– PROP: ALIGN - alinhamento horizontal [ left | center | right | justify | char ]
– PROP: VALIGN - alinhamento vertical [ top | middle | bottom | baseline ]

<TH> ... </TH> - Tag que cria uma célula de cabeçalho de uma tabela
– PROP: ALIGN - alinhamento horizontal [ left | center | right | justify | char ]
– PROP: VALIGN - alinhamento vertical [ top | middle | bottom | baseline ]
– PROP: ROWSPAN - número de linhas unificadas
– PROP: COLSPAN - número de colunas unificadas

<TD> ... </TD> - Tag que cria uma célula de uma tabela
– PROP: ALIGN - alinhamento horizontal [ left | center | right | justify | char ]
15

– PROP: VALIGN - alinhamento vertical [ top | middle | bottom | baseline ]


– PROP: ROWSPAN - número de linhas unificadas
– PROP: COLSPAN - número de colunas unificadas

<TEXTAREA> ... </TEXTAREA> - Tag que cria uma área de entrada de texto (para formulários)
– PROP: NAME - nome do elemento
– PROP: ROWS - número de linhas
– PROP: COLS - número de colunas
– PROP: DISABLED - disabilita o elemento
– PROP: READONLY - disabilita edição
– PROP: ACCESSKEY - caracter de shortcut
– PROP: TABINDEX - posição do elemento na posição do tab order

<TITLE> ... </TITLE> - Tag que cria uma seção do documento que determina o título da janela do navegador

<TT> ... </TT> - Tag que define o tipo de fonte Type Writer

<U> ... </U> - Tag que define o sublinhado de um texto

<OL> ... </OL> - Tag que cria um lista ordenada no documento

<UL> ... </UL> - Tag que cria uma lista não ordenada no documento

<LI> ... </LI> - Tag que cria uma entrada (ítem) de lista

Formulários HTML

O formulário em HTML é o meio mais comum de interação entre o usuário (browser) e a aplicação de manipulação ou
armazenamento de dados. Os formulários são criados a partir de elementos de captura de dados como <INPUT>
<TEXTAREA> e <SELECT> comandados por botões e agrupados dentro de um <FORM>.

Figura 3 – Exemplo visual de formulário em HTML

Estes formulários, como o exibido pela Figura 22, são expressos por meio de TAGs do HTML como a construção
abaixo:

<HTML>
<HEAD><title>Exemplo de Formulário</title></HEAD>
<body bgcolor=#F0f0f0>

<FORM name="cad_pessoa" action="cadinteresse.php" method="get">


<FIELDSET>
16

<LEGEND>Cadastro de Interesse</LEGEND>
<TABLE width=100%>
<TR>
<TD>Informe seu nome:</TD>
<TD><INPUT type="TEXT" name="nome" value="seu" size=50 maxlength=50></TD>
</TR>
<TR>
<TD>Informe seu e-mail:</TD>
<TD><INPUT type="TEXT" name="email" value="seu email" size=50 maxlength=100></TD>
</TR>
<TR>
<TD>Informe sua Idade:</TD>
<TD><INPUT type="TEXT" name="idade" value="18" size=3 maxlength=2></TD>
</TR>
<TR>
<TD></TD>
<TD><INPUT TYPE="CHECKBOX" name="recebe_mail" CHECKED> Sim, desejo receber os emails<BR>de
notícias do site </TD>
</TR>
<TR>
<TD colspan=2 align=center><INPUT TYPE=SUBMIT VALUE="Enviar Formulário"></TD>
</TR>
</TABLE>
</fieldset>
</FORM>
</body>
</HTML>

A construção acima mostra um exemplo simples de formulário com três tipos básicos de objetos: campo TEXT, campo
CHECKBOX e botão SUBMIT.
Já a construção abaixo mostra um formulário mais complexo com a maioria dos objetos disponíveis no HTML 4.0 para
a interação com formulários.

<HTML>
<HEAD><title>Exemplo de Formulário</title></HEAD>
<BODY bgcolor=#F0f0f0>
<FORM
NAME="cadastro1"
ACTION="http://www.servidor.com.br/cadastro/recebe_cadastro.php"
METHOD="POST">

<B>Text: </B>
<INPUT TYPE="TEXT" NAME="nomeUsuario" VALUE=""><BR>
<B>CheckBox: </B>
<INPUT TYPE="checkbox" NAME="check1" VALUE="1">Opção 1
<INPUT TYPE="checkbox" NAME="check1" VALUE="2">Opção 2
<INPUT TYPE="checkbox" NAME="check1" VALUE="3" checked>Opção 3<BR>
<B>Select: </B>
<SELECT NAME="select1">
<OPTION>1ª Opção
<OPTION>2ª Opção
<OPTION SELECTED>3ª Opção
<OPTION>4ª Opção
</SELECT><BR>
<B>Radio: </B>
<INPUT TYPE="radio" NAME="radio1" VALUE="1">Opção 1
<INPUT TYPE="radio" NAME="radio1" VALUE="2" checked>Opção 2
<INPUT TYPE="radio" NAME="radio1" VALUE="3">Opção 3<BR>
<B>TextArea: </B>
<TEXTAREA NAME="areatexto" ROWS=5 COLS=50>
Deixe aqui sua mensagem
</TEXTAREA><BR>

<B>Submit: </B> (Envia o Formulário):


<INPUT TYPE="SUBMIT" VALUE="Enviar"><BR>
<B>Reset: </B> (Limpa o Formulário):
<INPUT TYPE="RESET" VALUE="Limpar">
</FORM>
</BODY>
</HTML>
17

Figura 4 – Um formulário mais complexo


18

CSS - CASCADING STYLE SHEETS


O CSS – Cascading Style Sheets ou Folhas de Estilo é uma tecnologia que vem a complementar as carências de
apresentação gráfica e visual do HTML, bem como padronizar a apresentação nos diversos navegadores de internet.
Antes do CSS, um documento HTML era exibido de formas diferentes nos navegadores (netscape, mozilla, internet
explorer), obrigando aos designers a fazer versões do documento para cada navegador, ou pior ainda, colocar aquelas
famigeradas mensagens “melhor visualizado com o Internet Explorer a 800x600”!
O CSS além de melhorar o layout de documentos html, padronizou os tamanhos utilizando medidas de visualização
com pt (pontos) e px (pixels) e outras unidades de medida.
O CSS também faz parte de um padrão de utilização que se convencionou a chamar de DHTML, que nada mais é que a
utilização em conjunto do HTML + CSS + JavaScript.
Este documento é baseado na documentação do CSS nível 1, já suportada em quase sua totalidade pelos principais
navegadores e disponível em http://www.w3c.org ou na página da disciplina – http://www.ipuc.com.br/~rudinei/.
Este guia não tem a pretensão de ter uma abordagem completa e detalhada, servindo como fonte de consulta básica e
material de ensino em sala de aula. A totalidade da documentação deve ser visualizado no site oficial.
Uma folha de estilo pode ser definida das seguintes formas:

Dentro de um documento html:


<HTML>
<HEADER>
<STYLE TYPE='text/css'>
BODY { font-family: Arial; font-size: 12pt; }
</STYLE>
</HEADER>
<BODY>
<!-- Corpo do Documento -->
</BODY>
</HTML>

O estilo definido acima, descrito entre as tags <STYLE> </STYLE> e interno às tags <HEADER> </HEADER> é
chamado de INCORPORADO.
Uma outra forma de escrever estilos dentro de um documento html, chamado IN LINE, é descrito à seguir:
<HTML>
<BODY STYLE='font-family: Arial; font-size: 12pt;'>
<!-- Corpo do Documento -->
</BODY>
</HTML>

Estilo externo ao documento html:


Arquivo meuestilo.css
H { color: blue; }
P { color: red; font-family: Courier;}

Documento HTML
<HTML>
<HEAD>
<TITLE>Título</TITLE>
<LINK REL=STYLESHEET TYPE='text/css' HREF='meuestilo.css'>
</HEAD>
<BODY>
<H1>Cabeçalho é azul</H1>
<P> O parágrafo e vermelho. </P>
</BODY>
</HTML>
19

Unidades de Medida

Existem dois tipos de unidades de comprimento: as relativas e as absolutas. As relativas especificam um número em
relação a algum outro. O uso de unidades relativas facilitam o redimensionamento da exibição do elemento quando ocorre
mudança de mídia de exibição (por exemplo, de um monitor para uma impressora). O emprego de unidades percentuais (vistas
a seguir) e palavras-chave (por exemplo, 'x-large') oferecem vantagens similares.
Unidades Relativas
Estas unidades relativas são suportadas:
– H1 { margin: 0.5em } /* ems, a altura do elemento fonte */
– H1 { margin: 1ex } /* x-height, a altura da letra 'x' */
– P { font-size: 12px } /* pixels */
A unidade 'px', pixel, usada no exemplo acima, é função da resolução da área de exibição, normalmente um monitor.

Unidades Absolutas
O emprego de valores absolutos é conveniente apenas quando as dimensões físicas da mídia de saída são bem
conhecidas. As seguintes unidades são aceitas:
– H1 { margin: 0.5in } /* polegadas, 1in = 2.54cm */
– H2 { line-height: 3cm } /* centímetros */
– H3 { word-spacing: 4mm } /* milímetros */
– H4 { font-size: 12pt } /* pontos, 1pt = 1/72 in */
– H4 { font-size: 1pc } /* picas, 1pc = 12pt */

Unidades Percentuais
Os valores percentuais sempre são relativos a algum outro valor, por exemplo, uma unidade de medida. Cada
propriedade que permita o uso de unidades percentuais também define a qual valor esta unidade se refere. Muito
freqüentemente é o tamanho da fonte do próprio elemento:
– P { line-height: 120% } /* 120% do tamanho da fonte do elemento */

Unidades para Cores


Uma cor é indicada ou por uma palavra-chave ou por um código RGB.
As palavras chaves sugeridas para indicar cores são: 'aqua' , 'black' , 'fuchsia' , 'gray', 'green', 'lime', 'maroon', 'navy',
'olive', 'purple', 'red', 'silver', 'teal', 'white' e 'yellow'. Estas 16 cores foram tiradas da paleta de cores VGA do Windows, e seus
valores RGB são estão definidos nesta especificação.
– BODY {color: black; background: white }
– H1 { color: maroon }
– H2 { color: olive }
A codificação RGB é usada para a indicação de cores no formato numérico. Todas as atribuições a seguir indicam a
mesma cor (vermelho):
– EM { color: #F00 } /* #rgb */
– EM { color: #FF0000 } /* #rrggbb */
– EM { color: rgb(255,0,0) } /* inteiro entre 0 - 255 */
– EM { color: rgb(100%, 0%, 0%) } /* percentual entre 0.0% - 100.0% */
20

O formato hexadecimal consiste do símbolo '#' seguido imediatamente por 3 ou 6 caracteres hexadecimais. A notação
de 3 dígitos (#rgb) é convertida pelo browser para o formato de 6 dígitos (#rrggbb) pela duplicação de cada caracter, não pela
inserção de zeros. Por exemplo, #FB0 torna-se #FFBB00. Isso garante que a cor branca (#FFFFFF) possa ser indicada com a
notação simplificada (#FFF), além de remover qualquer dependência da profundidade de cores adotada pelo monitor em uso.
O formato de um valor RGB é 'rgb(' seguido três números separados por vírgulas. Quaisquer destes três números podem
estar na faixa de 0-255, ou serem três valores percentuais entre 0% e 100%. Finalmente a notação é terminada por um ')'. São
permitidos espaços em branco ao redor dos números.
– EM { color: rgb(255,0,0) } /* valor inteiro entre 0 - 255 */
– EM { color: rgb(300,0,0) } /* truncado para (255,0,0) */
– EM { color: rgb(110%, 0%, 0%) } /* truncado para (100%, 0%, 0%) */

URL
Uma URL é identificado pela notação:
– BODY { background: url(http://www.bg.com/pinkish.gif) }

O formato de um valor URL é 'url( )' contendo o endereço relativo ou absoluto do recurso alvo. Um URL parcial é
interpretado como relativo à localização da folha de estilos, não à localização do documento:
– BODY { background: url(yellow) }

Guia de Referência dos Comandos CSS

Propriedades das fontes

– font-family: família da fonte de texto, como tahoma, helvetica, sans-serif


– font-style: estilo da fonte, podendo ser italic, oblique ou normal
– font-variant: variação do formato da fonte, podendo ser normal ou small-caps
– font-weight: espessura da fonte – normal, bolder, lighter, 100 - 900
– font-size: tamanho da fonte em pt. Ex: 10pt, 44pt;

Propriedades das cores e background

– color: cor da face de texto, utilizado-se o nome da cor, o código RGB ou hexadecimal. Ex: red, rgb(255,0,0) ou
#0A44B3;
NOTA: todos os elementos de cor poderão utilizar o padrão expresso acima!
– background-color: cor de fundo do elemento
– background-image: imagem de fundo, associada por uma URL
– background-repeat: tipo de repetição da imagem de fundo [ repeat | repeat-x | repeat-y | no-repeat ]
– background-attachment: posicionamento do plano de fundo [ scroll | fixed ]
– background-position: posição do plano de fundo [<percentage> | <length>]{1,2} | [top | center | bottom] || [left |
center | right]
Propriedades do texto

– word-spacing: espaçamento adicional entre palavras de um texto, podendo ser um valor negativo
– letter-spacing: espaçamento adicional entre caracteres de um texto, podendo ser um valor negativo
21

– text-decoration: decoração de texto, podendo ser [none | underline | overline | line-through | blink ]
– vertical-align: alinhamento vertical do texto [ baseline | sub | super | top | text-top | middle | bottom | text-bottom |
<percentage> ]
– text-transform: transforma o texto conforme a propriedade [ capitalize | uppercase | lowercase | none ]
– text-align: alinhamento horizontal do texto [ left | right | center | justify ]
– text-indent: identação de texto, medida em “em”.
– line-height: altura da linha de texto, medida em “em”.

Propriedades dos containers

– margin-top: altura da margem superior de um container, medida em “em”.


– margin-right: altura da margem direita de um container, medida em “em”.
– margin-bottom: altura da margem inferior de um container, medida em “em”.
– margin-left: altura da margem esquerda de um container, medida em “em”.
– padding-top: altura do espaçamento interno superior de um container, medida em “em”.
– padding-right: altura do espaçamento interno direito de um container, medida em “em”.
– padding-bottom: altura do espaçamento interno inferior de um container, medida em “em”.
– padding-left: altura do espaçamento interno esqerdo de um container, medida em “em”.
– border-top-width: espessura da borda superior de um container, medida em “px”.
– border-right-width: espessura da borda direita de um container, medida em “px”.
– border-bottom-width: espessura da borda inferior de um container, medida em “px”.
– border-left-width: espessura da borda esquerda de um container, medida em “px”.
– border-width: espessura da borda de um container, medida em “px”.
– border-color: cor da borda de um container.
– border-style: estilo da borda de um container, podendo ser [ none | dotted | dashed | solid | double | groove | ridge |
inset | outset ].
– border-top: define atributos diversos para border-top, como cor, espessura e estilo da borda numa só atribuição.
Ex: border-top: 1px inset red;
– border-right: define atributos diversos para border-right
– border-bottom: define atributos diversos para border-bottom
– border-left: define atributos diversos para border-left
– width: define a largura de um container / elemento, em px
– height:define a altura de um container / elemento, em px
– float: define a flutuação do container dentro do contexto de um conjunto de dados, podendo ser alinhado em [ left |
right | none]
Propriedades de ordenação

– display: define se o elemento será ou não exibido e como será visualizado no ambiente de exibição (que pode ser
uma impressora, um monitor, etc). [ block | inline | list-item | none ]
– white-space: determina como os espaços em branco são tratados dentro num elemento [ normal | pre | nowrap ]
– list-style-type: define a aparência do marcador de lista [ disc | circle | square | decimal | lower-roman | upper-
roman | lower-alpha | upper-alpha | none ]
– list-style-image: define a imagem que será usada como um marcador de lista.
22

UL { list-style-image: url(disco.png); }

Exemplo de Código CSS

Exemplo 1:

A formatação CSS a seguir um menu com a aplicação de HOVER (movimento do mouse


sobre os links) e demonstra a utilização de um arquivo de CSS vinculado ao documento.

Arquivo vinculado estilo.css .


a:visited{
color: red; background-color: #F0F0F0; border-color: blue;
border-width: 1px; border-style: solid; width: 150px;
text-align: center; text-decoration: none;
}
a:link{
color:blue; background-color: #F0F0F0; border-color: blue;
border-width: 1px; border-style: solid; width: 150px;
text-align: center; text-decoration: none;
}
a:active{
color: green; background-color: #F0F0F0; border-color: blue;
border-width: 1px; border-style: solid; width: 150px;
text-align: center; text-decoration: none;
}
a:hover{
color: blue; background-color: yellow; border-color: red;
border-width: 1px; border-style: dotted; width: 150px;
text-align: center; text-decoration: none;
}
Arquivo html que utiliza o estilo:
<html>
<header><title>Exemplo de Pseudo-Classes</title>
<link rel='stylesheet' type='text/css' href='estilo.css'>
</header>
<body>
<a href='' target='Content'>link 1</a><br>
<a href='' target='Content'>link 2</a><br>
<a href='' target='Content'>link 3</a><br>
<a href='' target='Content'>link 4</a><br>
<a href='' target='Content'>link 5</a><br>
</body>
</html>

Exemplo 2:

Aplicação de text-transform e o seudo-elemento first-letter. A primeira letra se encaixa ao texto devido à


ação da formatação float: left.

<HTML>
<HEAD>
<STYLE TYPE='text/css'>
P:first-letter{
font-size: 24pt; float: left; text-indent: 1em; color: blue;
text-transform: uppercase; font-family: arial;
}
P {
border-width: 1px; border-style: solid; border-color: red;
font-size: 8pt; text-align: justify; width: 170px;
font-family: tahoma, arial; padding: 0.5em 0.5em 0.5em 0.5em;
23

}
</STYLE>
</HEAD><BODY>
<P>Este texto está formatado com css de forma especial, como num capítulo de livro!</P>
<P>Toda a primeira letra de um parágrafo será formatada conforme definido em P:first-
letter!</P>
</BODY></HTML>

Exemplo 3:

A formatação CSS a seguir gera a apresentação desta tabela:

<HTML>
<HEAD>
<STYLE TYPE='TEXT/CSS'>
.table {
width: 400px; background-color: #cfdbf9; border-color: red;
border-width: 2px; border-style: solid; font-family: tahoma;
font-size: 8pt;
}
.titulo {
border-color: red; background-color: #sd72a7; border-width: 1px;
border-style: outset; font-family: tahoma; font-size: 12pt;
text-align: center; font-weight: 700;
}
.titulocel {
border-color: red; background-color: #5d72a7; border-width: 1px;
border-style: outset; font-family: tahoma; text-align: center;
font-weight: 700;
}
.celleft {
border-color: blue; background-color: #cfdbf9; border-width: 1px;
border-style: inset; font-family: tahoma; text-align: left;
}
.celright {
border-color: blue; background-color: #cfdbf9; border-width: 1px;
border-style: inset; font-family: tahoma; text-align: right;
}
</STYLE>
<TITLE>Exemplo de Aplicação de CSS em Tabelas</TITLE>
</HEAD>
<BODY>
<table class='table'>
<tr>
<td colspan='3' class='titulo'>Relatório de Preços</td>
</tr>
<tr>
<td class='titulocel'>Produto</td>
<td class='titulocel'>Varejo</td>
<td class='titulocel'>Atacado</td>
</tr>
<tr>
<td class='celleft'>TV 29"</td>
<td class='celright'>1.540,00</td>
<td class='celright'>1.380,00</td>
</tr>

<tr>
<td class='celleft'>PC 3000 17" FLAT</td>
<td class='celright'>2.590,00</td>
<td class='celright'>2.180,00</td>
</tr>
</TABLE>
</BODY>
</HTML>
24

JAVASCRIPT
JavaScript é uma linguagem de programação que permite efetuar programação em documentos HTML.
O JavaScript foi criado pela Netscape® e não deve ser confundida com a linguagem Java (criada pela SUN).
A codificação lógica do JavaScript pode ser independente do HTML ou estar associada a eventos gerados pela DOM,
podendo assim obter maior dinamismo e interação com o usuário da página de internet.
Como o JS é uma linguagem de script client-side, isto é, o código fonte é tratado e executado pelo navegador que abriu
a página, então podemos verificar as seguintes vantagens / desvantagens:
– poupa tempo de processamento do servidor, pois é executado no cliente
– reduz a quantidade de requisições ao servidor, tornando mais rápido para o cliente
– permite efetuar checagens de formulários antes de serem enviados
– dá mais interatividade ao documento web
– pode não ser totalmente executado pelo navegador, se este não suportar a versão ou comandos
– pode não ser executado pelo navegador, se este estiver bloqueado a execução de códigos JS
– pode incutir a necessidade de programar versões diferentes do código para cada navegador web.
O código fonte é executado seqüencialmente (na seqüencia em que foram escritos) e devem estar contidos entre as tags
<SCRIPT> .. </SCRIPT> do documento web, como apresentado abaixo:
<SCRIPT LANGUAGE='JavaScript'>
alert ('Este é um código JavaScript');
</SCRIPT>

A tag <SCRIPT> pode ser inserida em qualquer local dentro do cocumento HTM, porém é recomendado que seja
incluída antes do início do documento (entre a tag <HEADER></HEADER>) se houver somente funções de interação com a
DOM.
Os comandos JavaScript são case-sensitive, isto é, sensíveis à caixa de letra (maiúsculas ou minúsculas), sendo
necessário que sejam escritos corretamente os comandos e variáveis para não haver erros na programação. Cometido algum
erro na escrita de um comando, o JS interpretará como se fosse uma variável.
Todo a linha de comando do JavaScript deve ser concluída com o terminador ; (ponto e vírgula).
Abaixo iniciamos com a lista de referência da sintaxe e comandos do JavaScript.

Operadores lógicos

Operadores utilizados em comandos condicionais, tais como: IF , FOR e WHILE.


== Igual
!= Diferente
> Maior
>= Maior ou Igual
< Menor
<= Menor ou Igual
&& E
|| Ou

Operadores matemáticos

Operadores utilizados em cálculos, referências de indexadores e manuseio de strings.


+ adição e concatenação de strings
- subtração
25

* multiplicação
/ divisão
% resto de uma divisão
Ex: 10 % 8 = 2
+= Soma ou concatenação de strings com atribuição
Ex: x = 10; x += 5; // o valor de x será 15
OU SEJA x += y é o mesmo que x = x + y
-= subtração com atribuição
*= multiplicação com atribuição
/= divisão com atribuição
%= resto com atribuição
++ incremento simples
Ex: x=10; x++; x++; // o valor de x será 12
OU SEJA x++ é o mesmo que x = x + 1

Controles especiais

Os comandos especiais servem para gerar saídas de texto formatadas, isto é, com quebra de linha, tabulações, etc... e
comentários de programação.
// - Linha de comentário
/*....*/ - Delimitadores para inserir um texto com mais de uma linha como comentário.
\n - new line caracter
\r - carriage return
\t - tab character
\b – backspace
\f - form feed

Comandos condicionais

Comando IF

Efetua um desvio para um bloco de instruções dada uma condição específica.


if (condição)
{ ação para condição verdadeira }
[ else
{ ação para condição falsa } ]
Ex.
if (Titulo == ""){
Mensagem = "Título não preenchido \n";
}

if (Valor < 100){


Mensagem = "Entrada insuficiente \n";
} else {
Mensagem = "A Entrada será de " + Valor + "\n";
}

Comando FOR

Executa a repetição de um bloco de instruções até que a condição de parada seja alcançada.
for ( inicialização; condição de parada, incremento ) {
// ações;
}
Ex.
for ( x=0 ; x <= 10 ; x++)
{
alert ("O valor de X é " + x);
}
26

Comando WHILE

Executa a repetição de um bloco de instruções enquanto uma condição for verdadeira.


while (condição){
// ações;
}
Ex.
var execucoes = 0;

while (execucoes < 5){


execucoes++;
alert ("Execução número " + execucoes);
}

Comando SWITCH

O comando switch funciona como IFs múltiplos efetuando a avaliação de um dado e tendo múltiplas condições de
escolha.
switch( valor ){
case valor1 : // ações;
break;
case valor2 : // ações;
break;
case valorN : // ações;
break;
default : // ação default, caso nenhuma das outras acima tenham sido atendidas
}
Ex:
var x = 5;
switch(x){
case 1: alert("1"); break;
case 2: alert("2"); break;
case 3: alert("3"); break;
case 4: alert("4"); break;
case 5: alert("5"); break;
case 6: alert("6"); break;

Comando BREAK

O comando break pode ser utilizado com as instruções FOR, WHILE e SWITCH e tem a função de interromper a
execução do comando, saindo do loop em que se encontra.
Ex:
var execucoes = 0;

while (execucoes < 5){


execucoes++;
alert ("Execução número " + execucoes);
if (terminar == TRUE) break;
}

Constantes e Variáveis

As variáveis são criadas automaticamente quando da definição do seu identificados, podendo ocorrer a atribuição no
mesmo procedimento. As variáveis podem ser locais (disponível somente para o código local) ou globais (disponível para
todas as funções do Script).
Contantes
27

Constantes são áreas de memória como as variáveis, porém ser conteúdo (valor) não pode ser alterado após definido.
Ex.
const PI = 3.141592654;
const EMPRESA = "Loja XYZ Ltda.";
alert( EMPRESA );

Variáveis Globais
São áreas de memória acessíveis a partir de um identificador (o nome da variável), onde seu conteúdo (valor) pode ser
utilizado e alterado. Uma variável global definida dentro de uma função de usuário será acessível pelo código que a chamou e
pelas outras funções de usuário.
Ex.
function setaDadosEmpresa(){
EMPRESA = "Loja XYZ Ltda.";
ENDERECO = "RUA X, 1234.";
}

setaDadosEmpresa();
alert("Empresa " + EMPRESA + "\nENDEREÇO " + ENDERECO);

Variáveis Locais
São áreas de memória acessíveis a partir de um identificador (o nome da variável), onde seu conteúdo (valor) pode ser
utilizado e alterado. Uma variável local definida dentro de uma função de usuário será acessível somente pelo código própria
função, não sendo acessível pelo código que a chamou ou pelas outras funções de usuário.
A variável local deve usar o comando var antes de sua definição.
Ex.
function mostraDadosEmpresa(){
var EMPRESA = "Loja XYZ Ltda.";
var ENDERECO = "RUA X, 1234.";
alert("Empresa " + EMPRESA + "\nENDEREÇO " + ENDERECO);
}

Conversões de tipos de dados

Como JavaScript é uma linguagem de tipos dinâmicos, você não define o tipo de dado da variável quando a declara.
Então o JavaScript acaba convertendo automaticamente os tipos durante a execução do código-fonte do script.
Desta forma você pode definir uma variável
var PI = 3.141592654; //tornando-a um tipo de ponto flutuante

e a seguir modificar seu conteúdo e tipo


PI = "Loja XYZ Ltda."; //tornando-a um tipo string

Isto só não causará um erro porque há a conversão automática de tipos da variável.


Se a expressão envolve strings e um outro tipo numérico, o uso do operador + efetuará a concatenação dos valores sobre
o tipo STRING automaticamente.
Exemplo:
var PI = 3.141592654; //ponto flutuante
var X = "TEXTO "; //String
var RESULTADO = X + PI; //o resultado da expressão será a string TEXTO 3.141592654

Se a expressão envolve somente tipos numéricos, o uso do operador + efetuará a operação matemática equivalente e o
tipo resultante será igual ao tipo de maior tamanho binário da espressão.
Exemplo:
var PI = 3.141592654; //ponto flutuante
var X = 10; //Inteiro
28

var RESULTADO = ( X + PI );
//o resultado da expressão será o ponto flutuante 13.141592654

NOTA: é recomendado o uso de parênteses quando se tratar de expressões matemáticas.


NOTA: todo o dado que trafega de um computador ao outro por uma requisição HTTP (por exemplo um submit de um
formulário) é uma STRING, mesmo que a intenção deste dado seja ser um número.

Quando os dados envolvidos em uma expressão matemática tiverem origem de uma requisição HTTP ou tiverem sido
declarados como STRING, deverão ser convertidos previamente para um tipo numérico antes de sua utilização na expressão
matemática.
Exemplos:
var numero1 = "10.4";
var numero2 = 3;
var resultado = parseFloat(numero1) + numero2;
alert ( resultado );

var numero1 = "10.4";


var numero2 = 3;
var resultado = parseInt(numero1) + numero2;
alert ( resultado );

var numero1 = prompt ("Digite um numero:", "1");


var numero2 = 3;
var resultado = parseFloat(numero1) + numero2;
alert ( resultado );

NOTA: Caso o resultado da expressão seja inválido em função de uma entrada de dados inválida (o usuário digitou um
texto ao invés de um número) as expressões parseFloat e parseInt retornarão a constante predefinida NaN.

Arrays – Lista de dados

Também conhecidos como vetores os arrays são elementos importantes no processamento de informações em qualquer
linguagem de programação. Veremos a seguir como criá-los e como manipulá-los.
Criando um Array

Como o Array é um objeto, sua criação parte da seguinte sintaxe: nome_variavel = new Array();
var carros = new Array();

Preenchendo e Acessando os Elementos de um Array

O objeto array possui uma estrutura dinâmica na alocação dos espaços da lista, que são automaticamente alocados.
var carros = new Array();
carros[0] = "Porshe";
carros[1] = "Ferrari";
carros[2] = "BMW";
carros[3] = "Usado";

Este array pode ser visualizado como uma estrutura de tabela, com a seguinte composição

índice dado
0 Porshe
1 Ferrari
2 BMW
3 Usado
29

onde o acesso à informação (dado) dá-se através do índice ao qual este está associado.
window.alert("Você acaba de ganhar um veículo " + carros[3] + "!");

Verificando o tamanho de um Array


var tamanho = carros.length; // verifica o tamanho
window.alert("O array carros possui " + tamanho + " dados!");

Percorrendo Automaticamente um Array


var carros = new Array();
carros[0] = "Porshe";
carros[1] = "Ferrari";
carros[2] = "BMW";
carros[3] = "Usado";

for (i=0; i<carros.length; i++){


window.alert("Você acaba de ganhar um veículo " + carros[i] + "!");
}

Exercícios:
1 - Crie um Array com o nome de cinco amigos seus e, usando document.write, execute os seguintes processos:
a) imprima o nome do terceiro amigo
b) imprima o nome de todos os amigos, cada um em uma linha
c) informe o tamanho do Array
2 - Crie um Array a = ( 3, 54, 35, 22, 6) e um Array b = ( 6, -17, 44, 3, 33), e execute os seguintes processos:
d) imprima a soma dos valores dos array
e) imprima a soma dos valores de cada um dos elementos de um array com o elemento de mesmo índice
do outro array.
f) imprima a multiplicação dos valores de cada um dos elementos de um array com o elemento de mesmo
índice do outro array.

Eventos no JavaScript

Alguns elementos do HTML suportam uma quantidade eventos comuns inicializados a partir de uma ação ou interação
do usuário e que podem ser utilizados pelo JavaScript.
O exemplo de código JavaScript a seguir ilustra a utilização destes eventos. Quando o usuário massar o mouse pelo
botão de submit, será exebida uma messagem ao usuário.

<INPUT TYPE=SUBMIT ONMOUSEOVER='alert("Você já preencheu todos os campos requeridos?");'>

O eventos do HTML são os seguintes:


ONLOAD - ocorre quando um documento é carregado. Deve ser identificado na tag BODY.
ONUNLOAD - ocorre quando um documento fechado. Deve ser identificado na tag BODY.
ONCHANGE - quando o objeto perde o foco e houve alteração no conteúdo. Para objetos de entrada de texto.
ONBLUR - quando o objeto perde o foco.
ONFOCUS - quando o objeto recebe o foco.
ONSELECT – quando acontece a seleção (de texto) dentro de um objeto. Para objetos de entrada de texto.
ONSUBMIT – quando ocorre o envio dos dados do formulário, ou seja, o botão SUBMIT é pressionado.
30

ONCLICK - quando o botão do mouse é clicado sobre um elemento HTML.


ONDBLCLICK - quando o botão do mouse clica duas vezes (double-clicked) sobre um elemento HTML.
ONMOUSEDOWN - quando o botão do mouse pressionado sobre um elemento HTML.
ONMOUSEUP - quando o botão do mouse é liberado de um elemento HTML.
ONMOUSEOVER - quando o mouse é movido para dentro da área de um elemento HTML.
ONMOUSEMOVE - quando o mouse é movido dentro da área de um elemento HTML.
ONMOUSEOUT - quando o mouse é movido para fora da área de um elemento HTML.
ONKEYPRESS - quando uma tecla é pressionada e liberada sobre um elemento HTML.
ONKEYDOWN - quando uma tecla é pressionada sobre um elemento HTML.
ONKEYUP - quando uma tecla é liberada (depois de pressionada) sobre um elemento HTML.

O uso desses eventos será demonstrado em exemplos e processos mais adiante.

Funções definidas pelo usuário

Uma função é um conjunto de instruções que só serão executadas no momento em que o usuário chamá-la
explicitamente através de seu identificador
A sintaxe uma função é a seguinte:

function identificador (parâmetro1, parâmetro2, ..., parâmetroN )


{
// instruções
return valor; // pode ou não retornar valor
}

Suponha uma função que tenha como objetivo informar se uma pessoa é maior ou menor de idade, recebendo como
parâmetro a sua idade.
<SCRIPT LANGUAGE="JavaScript">
function idade(anos)
{
anos = parseInt(anos);
if (anos < 18)
{
alert("Você é menor de Idade");
return;
}
}
</SCRIPT>

Chamando funções a partir de um objeto de formulário

Para associar esta função a um formulário, afim de efetuar uma verificação de idade num campo de texto precisaremos
utilizar um evento do HTML.
<H1>Cadastro</H1>
<form>
Informe seu nome: <input type=text size=30 maxlength=100 name="txtNome"><BR>
Informe sua idade: <input type=text size=2 maxlength=2
name="txtIdade" ONBLUR="javascript:idade(txtIdade.value)">
</form>

Chamando funções a partir de um botão de formulário

Para associar uma função a um botão de formulário, utilizamos os eventos associados aos botões (ex. ONCLICK,
ONDBLCLICK).
31

<SCRIPT LANGUAGE='JavaScript'>
function informacao(){
alert('Seus dados foram enviados. Obrigado!');
}
</SCRIPT>
<H1>Cadastro</H1>
<form>
Informe sua idade: <input type=text size=2 maxlength=2 name="txtIdade"><BR>
Informe seu nome: <input type=text size=30 maxlength=100 name="txtNome"><BR>
<input type="submit" value="Enviar" ONCLICK="javascript:informacao()">
</form>

Chamando funções a partir de um hiperlink

A associação de um hiperlink a uma função ocorre através do parâmetro HREF.


<SCRIPT LANGUAGE='JavaScript'>
function informacao(){
alert('Seus dados foram enviados. Obrigado!');
}
</SCRIPT>

<A HREF="javascript:informacao()">Informação</A>

Injetando conteúdo num documento HTML via Javascript

Para adicionar conteúdo em um documento existe o método innerHTML. Este método permite que seja adicionado ou
modificado conteúdos completos de tags previamente identificadas. Para tanto precisamos identificar o local da inserção com a
propriedade ID da tag.
Qualquer tag pode ser usada para a inserção de conteúdo, entretanto o conteúdo existente (interno ao par de tags) será
completamente substituído.
<SCRIPT LANGUAGE='JavaScript'>
function injetaConteudo(){
obj = document.getElementById('par1');
obj.innerHTML = "Seus dados foram enviados. Obrigado!<BR>Conteúdo alterado pelo JavaScript";
}
</SCRIPT>
<P ID='par1' STYLE='text-align:center; background-color:yellow;
border-style:solid;border-color:black; border-width:1px;'>
Conteúdo prévio
</P>
<input type='button' value='preencher' onclick='JavaScript:injetaConteudo()'>

Exercícios para fixação:


1. Crie uma tabela de duas linhas por uma coluna. Na primeira linha coloque uma caixa de texto de 100 posições.
Na segunda linha deverá ser exibido o texto digitado na caixa da linha superior. Utilize o evento onkeypress da caixa
para efetuar este processo.
2. Crie um pequeno formulário para a digitação de dois números, possuindo também um botão (somar). Ao
pressionar do botão, informe o resultado da soma dos dois valores em um parágrafo colocado acima do botão.

Objetos e Funções Intrínsecas do JavaScript

O JavaScript possui uma série de funções predefinidas para a manipulação e processamento de informações, descritas
parcialmente a seguir.
Funções de Conversão

São as funções da linguagem, utilizadas de modo geral.


– eval - Calcula o conteúdo da string

eval(" x = 10+15; ");


32

alert("X = "+x);

– parseInt - Transforma string em inteiro


– parseFloat - Transforma string em número com ponto flutuante

x = parseInt("10");
x = parseFloat("10.4");

Funções de Caixas de Mensagem, de Confirmação e Prompt

– alert – Exibe uma Caixa de Mensagem

window.alert(“Texto da Mensagem”);

// com variáveis
var str = “JavaScript”;
window.alert(“O mundo ” + str);

– prompt – Exibe uma caixa de entrada de dados

var idade = window.prompt(“Digite sua idade:”,”informe aqui!”);


window.alert(idade);

// com números

var num = eval(window.prompt(“Informe um Número:”,”0”));


window.alert(“O dobro de ” + num + “ é ” + (num * 2));

– confirm – Exibe uma caixa que solicita uma confirmação do usuário

var idade = window.prompt(“Digite sua idade:”,”informe aqui!”);


if (window.confirm(“Sua idade é “ + idade + “?”)){
window.alert(“Idade: ” + idade);
}else{
window.alert(“você deve informar sua idade novamente!”);
}

Objeto Math - Funções Matemáticas

Math.abs(valor) - retorna o valor absoluto do valor (ponto flutuante)


Math.ceil(valor) - retorna o próximo valor inteiro maior que o valor
Math.floor(valor) - retorna o próximo valor inteiro menor que o valor
Math.round(valor) - retorna o valor inteiro, arredondado, do valor
Math.pow(base, expoente) - retorna o cálculo do exponencial
Math.max(valor1, valor2) - retorna o maior valor dos dois fornecidos
Math.min(valor1, valor2) - retorna o menor valor dos dois fornecidos
Math.sqrt(valor) - retorna a raiz quadrada do valor
Math.SQRT2 - retorna a raiz quadrada de 2 (aproximadamente 1.414)
Math.SQRT_2 - retorna a raiz quadrada de 1/2 (aproximadamente 0.707)
Math.sin(valor) - retorna o seno de um valor (anglo em radianos)
Math.asin(valor) - retorna o arco seno de um valor (em radianos)
Math.cos(valor) - retorna o cosseno de um valor (anglo em radianos)
33

Math.acos(valor) - retorna o arco cosseno de um valor (em radianos)


Math.tan(valor) - retorna a tangente de um valor (anglo em radianos)
Math.atan(valor) - retorna o arco tangente de um valor (em radianos)
Math.pi retorna o valor de PI (aproximadamente 3.14159)
Math.log(valor) - retorna o logarítmo de um valor
Math.E - retorna a base dos logarítmos naturais
Math.LN2 - retorna o valor do logarítmo de 2
Math.LOG2E - retorna a base do logarítmo de 2
Math.LN10 retorna o valor do logarítmo de 10
Math.LOG10E - retorna a base do logarítmo de 10

NOTA: Nas funções acima o termo valor pode representar um número, uma variável ou o conteúdo de um objeto
(propriedade value).

Objeto String - Funções de manipulação de Strings

Toda a variável do tipo String criada no JavaScript é um objeto. Como objeto possui diversas propriedades e métodos
que permitem manipular o seu conteúdo. Vejamos a seguir:
Instanciando um objeto String:
var texto = “Funções de String”; // Objeto instanciado (criado)
var tamanhoTexto = texto.length; // propriedade length – armazena o tamanho do conteúdo do String
window.alert(“O texto ” + texto + “ possui ” + tamanhoTexto + “ caracteres.”);

Obtendo o tamanho do String: a propriedade length.


var tamanhoTexto = texto.length; // Atribui a tamanhoTexto o número de caracteres de texto. \
// retorna “17”

Obtendo um caracter de uma posição específica: o método charAt().


var caracter = texto.charAt(3); // Atribui a caracter o caracter contido na posição 3
// (não esqueça que a primeira posição é a ZERO).
// retorna “ç”

Buscando a posição de uma substring em outra: o método indexOf().


var posicao = texto.indexOf(“ções”); // Atribui a posição (3) da substring “ções”.
// caso a substring não exista, o valor retornado é -1.

Concatenando duas ou mais Strings: o método concat(s1, s2, s3, ...).


var texto = “Interatividade ”;
var texto2 = “ JavaScript”;
texto.concat(“é ”, “com”, texto2);
// O conteúdo da variável texto terá como anexo todos os valores lançados
// em concat, independentemente da quantidade de variáveis lançadas.
// o resultado dessa expressão: “Interatividade é com JavaScript”

Extraindo uma parte da Strings: o método slice( inicio , fim ).


var texto = “Interatividade”;
var inicioCorte = 5; // define a posição inicial do corte
var fimCorte = texto.length – 1; // define a posição final do corte
var parte = texto.slice( inicioCorte, fimCorte); // efetua o corte atribuindo o resultado a parte.
window.alert(parte + “ é um pedaço de ” + texto);
34

Substituindo partes de um String: o método replace( de , para ).


var texto = “carrocinha de cachorro”;
var novotexto = texto.replace("rr","r"); // novotexto será carocinha de cachoro

Convertendo para Maiúsculo ou Minúsculo: os métodos toUpperCase() e toLowerCase().


var texto = “carROcinHa de caCHorRo”;
texto.toUpperCase(); // converte para maiúsculo
texto.toLowerCase(); // converte para minúsculo

Exemplos:
1) Validando um endereço de email com indexOf
Como é um endereço de email? nome + @ + domínio + . + tipo_domínio. O mínimo de um endereço de
email seria a@b.c, devendo então conter @ no mínimo na segunda posição (1), seguido de no mínimo um caracter e um
ponto, seguido do tipo de domínio.
function validaEmail( email ){
var posArroba = email.indexOf("@");
if ( posArroba <= 0 ){
window.alert("Email inválido");
}else{
//var fim = email.length – 1;
var fim = email.length;
fim--;
var segundaParte = email.slice( posArroba , fim );
var posPonto = segundaParte.indexOf(".");
if ( posPonto <= 0 ){
window.alert("Email inválido");
}else{
var fim = segundaParte.length;
fim--;
if (posPonto < fim ){
window.alert("Email válido");
}else{
window.alert("Email inválido");
}
}
}
}

... e no formulário ...

<input type='text' name='email' size='50' onblur="JavaScript:validaEmail(this.value)">

2) Convertendo para maiúsculo enquanto ocorrer a digitação


function maiusculo(obj){
var mstring = obj.value.toUpperCase();
obj.value = mstring;
}
... e no formulário ...
<input type='text' name='nome' ONKEYPRESS="JavaScript:maiusculo(this)">

DOM – Document Object Model

A DOM (Document Object Model) ou Modelo de Objetos do Documento, definida pela W3C 2, descreve uma forma
padrão de acesso aos objetos (elementos) de um documento HTML.

2 W3C – World Wide Web Consortium


35

Embora seja um padrão e seja respeitado pela maioria dos navegadores modernos, não é totalmente implementado pelo
navegador Internet Explorer®, que implementa diferenças entre o padrão da W3C e o “seu próprio padrão”. A novidade é que
a Microsoft®3 prometeu a implementação correta dos padrões (não só da DOM) para o Internet Explorer 7.
O potencial da DOM é a forma como os objetos estão agrupados, em forma de árvore, onde podemos navegar
acessando todos os objetos. Podemos então acessar e modificar quase todas as propriedades de um elemento associado á esta
árvore.
Um esquema da DOM pode ser visualizado abaixo:

Figura 5: DOM - Document Object Model

A utilização das instruções embutidas na DOM nos possibilita a correlação entre os objetos do html e o código
javascript. Uma das mais importantes instruções para manipulação dos elementos é a getElementById, que serve para
obter o handler4 de um objeto html identificado por um ID, como veremos a seguir:
<HTML>
<BODY>
<SCRIPT LANGUAGE='JavaScript'>
function alteratexto(){
var elemento = document.getElementById("txt1");
elemento.value = "Alterado !!!!!!!!!";
elemento.style.backgroundColor = "yellow";
var form = document.getElementById("frm1");
form.style.borderColor = "red";
form.style.borderWidth = "1px";
form.style.borderStyle = "solid";
form.style.width = "200px";
}
</SCRIPT>
<FORM NAME='formX' ACTION='' METHOD='' ID='frm1'>
Texto: <INPUT TYPE='text' VALUE='Texto a alterar' ID='txt1'><BR>
<INPUT TYPE='button' VALUE='Alterar' ONCLICK='JavaScript=alteratexto();'>
</FORM>
</BODY>
</HTML>

3 Microsoft e Internet Explorer são marcas registradas de Microsoft Corporation


4 handler: do inglês manusear – traduzido na informática como caminho de vínculo entre um código e um elemento
qualquer (objeto, arquivo, dispositivo) que se deseja manipular.
36

Figura 6: Demostração do functionamento do script JavaScript

O script anterior pode ser traduzido da seguinte forma: Ao pressionamento do botão Alterar com um clique do mouse
é ativada a função JavaScript alteratexto() . A função obtém o handler para o objeto html identificado pelo ID txt1,
modificando seu conteúdo (value) de "Texto a alterar" para "Alterado !!!!!!!!!" e sua formatação CSS de cor de fundo para
Yellow. Em seguida, obtém o handler do objeto html identificado pelo ID frm1, modificando diversas propriedades CSS.
Esta é uma pequena demonstração do poder JavaScript em um documento html, tanto para a interação com o usuário
quanto para manobras que enriquecem a visualização e conteúdo de um documento.

Outros Códigos de Exemplo

Exemplo 1:

Identificando a versão de um Navegador


<SCRIPT LANGUAGE="JavaScript">
var isNav;
var isIE;
var browser = navigator.appName;

if (parseInt(navigator.appVersion) >= 4)
{
if (navigator.appName == "Netscape")
{
isNav = true;
} else {
isIE = true;
}
}
else
{
document.write ("Desculpe, mas seu browser é muito antigo!" + "<BR>faça download de uma
versão atualizada");
}
if (isNav) document.write("Netscape ou Mozilla");
if (isIE) document.write("Internet Explorer");
</SCRIPT>

Exemplo 2

Montagem de uma tabela HTML com o uso de document.write.


<HTML>
<HEAD>
<SCRIPT LANGUAGE='JavaScript'>
document.write('<TABLE BORDER=1>');
for(i=0; i<10; i++){
document.write('<TR><TD>' + i + '</TD></TR>');
}
document.write('</TABLE>');
</SCRIPT>
</BODY>
</HTML>
37

Exemplo 3

Exemplo de onMouseOver e alteração de propriedades.


<HTML>
<HEAD>
<SCRIPT LANGUAGE='JavaScript'>
function modifica(){
var but = document.getElementById('obj2');
if (but.value == 'Alterado'){
but.value = 'Alterar Elemento';
}else{
but.value = 'Alterado';
}
}
</SCRIPT>
</HEAD>
<BODY>
<INPUT ID='obj2' TYPE='button' VALUE='Alterar Elemento' onMouseOver='modifica();'>
</BODY>
</HTML>

Exemplo 4

Este script demonstra um texto animado com a utilização de intervalos de tempo.


<HTML>
<HEAD>
<STYLE TYPE="text/css">
.animado {color: blue; font-family: tahoma; font-size: 10pt; }
</STYLE>
</HEAD>
<BODY>
<P CLASS="animado" ID='anim'>Texto Animado</P>
<SCRIPT LANGUAGE='JavaScript'>
var tam = 1;
var sinal = "+";
function anima(){
var x = document.getElementById("anim");
if (sinal=="+") tam++;
else tam--;
if (tam>20) sinal="-";
if (tam<=1) sinal="+";
x.style.fontSize = tam+"pt";
}
window.setInterval("anima()", 40);
</SCRIPT>
</BODY>
</HTML>
38

MYSQL

MySQL é um SGBD (Sistema Gerenciador de Banco de Dados) relacional padrão SQL (Structured Query Language -
Linguagem Estruturada para Consultas) robusto, rápido, multiusuário e multi-tarefa [1].
O MySQL é marca registrada da MySQL AB e seu servidor de banco de dados vem sendo distribuído sobre uma
Licença Dupla, uma Open Source/GNU GPL e também por uma licença comercial.
O site oficial do MySQL é http://www.mysql.com/.
Esta apostila discorre sobre a versão 4 do servidor MySQL e sobre as ferramentas disponíveis no site da MySQL, não
tendo a pretenção de ser completo, tampouco cobrir toda a api de comandos do MySQL, servindo apenas como introdução a
este SGBD. Uma documentação completa está disponível no site da companhia.
O MySQL usa a linguagem SQL padrão ANSI (Entry-level SQL-92. ODBC levels 0-3.51.), porém possui extensões
específicas do próprio banco de dados, como comentários de SQL, tabelas temporárias, nomes de tabelas case-sensitive em
sistemas unix e diversos comandos da DDL / DML.
Atualmente o BD MySQL está na versão 5 e é distribuído em 3 categorias: MySQL SAP DB (para uso com SAP),
MySQL GA (para uso geral) e o MySQL Community (uso livre), porém podendo ser obtidas as versões anteriores.
Utilizaremos a versão 4.1d.

Instalação do Banco de Dados MySQL

Instalação do MySQL no Windows


Requisitos: Windows 9x, Me, NT, 2000 ou XP. Windows da família NT (Windows NT, 2000 e XP) permite que o BD
MySQL seja executado como serviço (service).
Para suporte a constraints (chave estrangeira) é necessário MySQL versão 4 ou superior, rodando em plataforma NT,
2000 ou XP.
1. Baixe a versão escolhida do site http://www.mysql.com/downloads/, escolhendo uma versão binária para
windows.
2. Instale a distribuição - click, next, next, next, etc... ;-)

Figura 7: Iniciando a instalação


39

Figura 8: Escolha a opção “Custom”

Figura 9: Selecione todas as opções completas


40

Figura 10: Altere a localização da base para C:\MYSQL4_1 pressionado


CHANGE... para ter domínio do caminho da instalação

Figura 11: Dê Skip Sign-Up para não precisar se registrar no MySQL.com


41

Figura 12: Marque a opção de configuração e pressiona “Finish”

Figura 13: Selecione a configuração padrão (Standard) para uso geral


42

Figura 14: Defina a instalação como “as Windows Service” e troque o “Service Name”
para MySQL41

Figura 15: Defina o usuário e a senha do MySQL. Coloque “root” em minúsculo.


43

Figura 10: Final da instalação.

Figura 16: Final da instalação.

Para verificando se o MySQL foi instalado corretamente e se será inicializado como Serviço do Windows, verifique o
painel de serviços (Iniciar -> Configurações -> Painel de Controle -> Ferramentas Administrativas -> Serviços.

Figura 17: Figura 11: Verificando o Serviço do Windows


44

Para o uso em nossa disciplina e como cada computador terá seu próprio servidor de banco de dados, configuraremos o
usuário como ROOT e a senha como ROOT.

Instalação em Linux / FreeBSD

Requisitos: Kernel 2.2.19 ou superior.


Veja a documentação da distribuição Linux que você utiliza e consulte a documentação no site http://www.mysql.com/.

Tipos de Dados

O MySQL suporta tipos numéricos, data e hora e tipos string. Visto a extensão dos tipos de dados suportados pelo
MySQL, esta apostila abordará somente os principais tipos.
Os campos são definidos no MySQL sendo necessário identificar sua precisão e regras de apresentação. Abaixo são
demonstradas essas características, que serão usadas para a identificação dos tipos.
– M: Tamanho do campo, sendo que o máximo é 255.
– D: Número de casas decimais para tipos de ponto flutuante.
– ZEROFILL: Preenche automaticamente o campo numérico com zeros a esquerda até alcançar o tamanho máximo
(M).
– UNSIGNED: Não permite a inserção de valores numéricos negativos.

Principais tipos Numéricos


• TINYINT[(M)] [UNSIGNED] [ZEROFILL] - Inteiro muito pequeno entre -128 e 127 (com sinal) ou 0 a 255
(sem sinal). BIT | BOOL | BOOLEAN são sinônimos para TINYINT(1). Um tipo boolean verdadeiro será
introduzido de acordo com o SQL-99.
• SMALLINT[(M)] [UNSIGNED] [ZEROFILL] - Inteiro pequeno entre -32768 e 32767 ou 0 a 65535.
• MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] - Inteiro médio entre -8388608 a 8388607 ou 0 a 16777215.
• INT[(M)] [UNSIGNED] [ZEROFILL] - Inteiro de tamanho normal entre -2147483648 a 2147483647 ou 0 a
4294967295. O tipo INTEGER é um sinônimo para INT.
• BIGINT[(M)] [UNSIGNED] [ZEROFILL] - Inteiro grande entre -9223372036854775808 a
9223372036854775807 ou 0 a 18446744073709551615.
• FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] - Número de ponto flutuante pequeno (precisão simples) entre
-3.402823466E+38 a -1.175494351E-38, 0 ou 1.175494351E-38 a 3.402823466E+38.
• DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] - Número de ponto flutuante de tamanho normal (dupla-
precisão) entre -1.7976931348623157E+308 a -2.2250738585072014E-308, 0 ou 2.2250738585072014E-308 a
1.7976931348623157E+308.
NOTA: Se você precisa armazenar um valor monetário, não use nenhum dos tipos acima pois o armazenamento ocorre
com perda de precisão e arredondamentos para números muito grandes. Utilize o tipo DECIMAL ou NUMERIC que armazena
em uma string sem perda de precisão.

Principais tipos de Data / Hora


• DATE - Data entre '1000-01-01' e '9999-12-31' no formato 'AAAA-MM-DD'.
45

• DATETIME - Data e hora e data entre '1000-01-01 00:00:00' e '9999-12-31 23:59:59'


• TIMESTAMP[(M)] – Um campo data-hora utilizando o formato Timestamp(unix) entre '1970-01-01 00:00:00' e o
ano 2037, sendo exibidos nos formatos YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, ou
YYMMDD, dependendo se M é 14, 12, 8 ou 6.
• TIME – Hora entre '-838:59:59' e '838:59:59'.
• YEAR[(2|4)] - Ano no formato de 2 ou 4 digitos.

Principais tipos String


• CHAR[(M)] – Caracter de tamanho M, atingindo o máximo de 255.
• VARCHAR[(M)] – Char de tamanho variável (simplificação para CHARACTER VARYING), de tamanho M,
atingindo o máximo de 255.
• BLOB | TEXT - BLOB (Binary Large Object) ou TEXT com tamanho máximo de 65535 caracteres.
• MEDIUMBLOB | MEDIUMTEXT - BLOB (Binary Large Object) ou TEXT com tamanho máximo de 16777215
caracteres.
• LONGBLOB | LONGTEXT - BLOB (Binary Large Object) ou TEXT com tamanho máximo de 65535 caracteres.
• MEDIUMBLOB | MEDIUMTEXT - BLOB (Binary Large Object) ou TEXT com tamanho máximo de
4294967295 caracteres.
• ENUM('valor1','valor2',...) - Tipo enumerado, ou seja, só aceita os valores definidos na lista pode ter
até 65535 valores diferentes.
• SET('valor1','valor2',...) - Semelhante ao tipo enumerado podendo ter até 64 valores diferentes.
• DECIMAL[(M,D)] | NUMERIC[(M,D)] – Representa um número de M digitos sendo D decimais. M é
limitado a 255 e D a 30. D não pose ser superior a M-2. Ex.: salario DECIMAL(5,2)

Tipos de Tabelas

Em breve....

Notação e Revisão SQL – Structred Query Language

O Objetivo deste capítulo é promover uma revisão básica da SQL e identificar algumas das particularidades do SQL do
banco de dados MySQL.
O MySQL, versão 4, provê suporte completo ao padrão SQL ANSI-92 e parcial do padrão SQL ANSI-99, além de
extensões ao SQL padrão (funções não definidas pela ANSI).
A “Structred Query Language” ou Linguagem Estruturada de Consultas é uma linguagem padrão para utilização de
banco de dados relacionais, subdividida em DDL – “data definition language” (linguagem de definição de dados) e DML –
“data manipulation language” (linguagem de manipulação de dados), e é definida pela ANSI, tendo sua última definição em
2003 pelo padrão SQL-ANSI-2003.

Guia Rápido de SQL


Criando bases de dados
CREATE DATABASE nome_da_base_de_dados;
Exemplo: CREATE DATABASE loja;
46

Ativando o uso de uma base de dados


USE nome_da_base_de_dados;
Exemplo: USE loja;

Criando tabelas – DDL para MySQL 4


Create table BANCO.NOME DA TABELA (
nome do campo – tipo do campo – constraints,
nome do campo – tipo do campo – constraints,
nome do campo – tipo do campo – constraints,
PRIMARY KEY (nome dos campos)
) ENGINE= tipo da tabela
DEFAULT CHARSET= charset da língua
COMMENT = 'comentário da tabela';

Exemplo:
CREATE TABLE `item_pedidos` (
`ped_id` bigint(8) unsigned NOT NULL default '0',
`pro_id` int(5) unsigned NOT NULL default '0',
`itn_quantidade` double(5,2) NOT NULL default '0.00',
`itn_valor_indiv` double(8,2) NOT NULL default '0.00',
`itn_valor_total` double(8,2) NOT NULL default '0.00',
PRIMARY KEY (`ped_id`,`pro_id`),
CONSTRAINT `FK_pedidos` FOREIGN KEY (`ped_id`)
REFERENCES `pedidos` (`ped_id`),
CONSTRAINT `FK_produtos` FOREIGN KEY (`pro_id`)
REFERENCES `produtos` (`pro_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=latin1
COMMENT='Armazena os produtos adicionados num pedido';

Alterando Tabelas:

– Criando novos campos


ALTER TABLE `item_pedidos` ADD itn_entregue CHAR(1) DEFAULT 'N';

– Criando Chaves Estrangeiras:


ALTER TABLE `item_pedidos`
ADD CONSTRAINT `FK_pedidos` FOREIGN KEY (`ped_id`)
REFERENCES `pedidos` (`ped_id`)

Excluindo tabelas
DROP TABLE nome_da_tabela;
Exemplo: DROP TABLE item_pedidos;

Inserindo dados em uma base de dados


INSERT INTO nome_tabela (coluna1, coluna2,..., colunaN)
VALUES (valor1, valor1, ..., valorN);

Exemplo:
INSERT INTO clientes (cli_id, cli_nome, cli_endereco)
VALUES (1, 'Fulano de Tal', 'Rua X, 111');

Atualizando dados em uma base de dados


UPDATE nome_tabela
SET coluna1 = valor1,
coluna2 = valor2,
47

colunaN = valorN
WHERE restrição(ões);

Exemplo:
UPDATE clientes
SET cli_nome='Beltrano de Tal'
WHERE cli_id=1;

Excluindo dados de uma base de dados


DELETE FROM tabela WHERE restrição(ões);
Exemplo:
DELETE FROM item_pedidos WHERE ped_id = 35;
DELETE FROM item_pedidos WHERE ped_id <> 35;
DELETE FROM item_pedidos WHERE ped_id IN (35,42,69);
DELETE FROM item_pedidos WHERE ped_id NOT IN (35,42,69);

Selecionando dados de uma base de dados


SELECT coluna(s) FROM tabela(s) WHERE restrição(ões);
Exemplo:
SELECT * FROM item_pedidos;
SELECT pro_id, itn_quantidade FROM item_pedidos WHERE ped_id = 35;
SELECT *
FROM pedidos p JOIN item_pedidos i
ON p.ped_id = i.ped_id
WHERE ped_id = 35;
SELECT p.ped_id, i.pro_id, i.itn_quantidade
FROM pedidos p JOIN item_pedidos i
ON p.ped_id = i.ped_id
WHERE ped_id = 35;

Realizando Consultas - DML

Selecionando todos os dados de uma tabela:


– Select * from livros;

Selecionando todos os dados de uma tabela limitando o número de registros de retorno (LIMIT e OFFSET):
– Select * from livros LIMIT 10 OFFSET 0 ;

Selecionando Colunas específicas:


– Select id, titulo from livros;

Restringindo o resultado:
– Select id, titulo from livros where id=10;

Efetuando junções (JOIN):


– select * from livros l, emprestimos e where l.id=e.id;

Efetuando junções (JOIN sintaxe ANSI)


– select * from livros l JOIN emprestimos e ON l.id=e.id;

Inserindo registros na tabela


48

– INSERT INTO livros (titulo, autor_principal) values ('O código DaVince','Dan Brown');

Atualizando registros na tabela


– UPDATE livros SET titulo='O Código Da Vince' where id=3;

Removendo registros da tabela (de preferência sempre pela chave primária)


– DELETE FROM livros where id=3;

OBSERVAÇÕES:
– Chaves Primárias: Crie sempre uma chave primária numa tabela.
– Datas: O padrão de inserção de datas no mysql AAAA-MM-DD, então a data 15/11/2005 deverá ser inserida no
formato '2005-11-15' (com aspas).
– Campos NULL: caso o valor do campo deva ser NULO é necessário inserir o valor null (sem aspas)

Usando a cláusula JOIN expressa na consulta SQL

A sintaxe expressa JOIN cria uma expressão SQL mais clara ao separar todas as uniões (joins) entre as tabelas, que
serão descritas junto à cláusula FROM do SQL, das restrições de linha e coluna que continuam sendo descritas junto à
cláusula WHERE do SQL.
Veja o seguinte exemplo:

O diagrama ER (Entidade-Relacionamento ou Entity-Relationship) descrito acima demostra as ligações de chave


estrangeira entre as tabelas livros e empréstimo. Para a composição de um JOIN, usamos estes índices de chave estrangeira
(Foreign Key) para criar o relacionamento já na cláusula FROM do SQL.
Examinemos a porção de SQL escrito de forma tradicional relacionando ambas as tabelas:
01 ...FROM livros l, emprestimos e
02 WHERE l.id = e.id <== ligação entre livros e emprestimos
03 AND l.titulo like 'O código%' <== restrição real de linha
Agora, examinemos sob a ótica da instrução JOIN:
01 ...FROM livros l
02 JOIN emprestimos e
03 ON l.id = e.id <== ligação entre livros e emprestimos
04 WHERE
05 l.titulo like 'O código%' <== restrição real de linha
Na linha 01, entre cada par de tabelas deverá existir a cláusula JOIN, que une uma tabela a outra ou a um conjunto já
relacionado previamente. A condição de ligação entre as tabelas deverá ser expressa com a instrução ON (linha 03) retirando
as ligações da cláusula WHERE (como exibido no SQL tradicional, linha 2).
A idéia principal é ISOLAR o que é vinculo de relacionamento (ligações de chave estrangeira) na cláusula FROM das
restrições de linha e coluna (condições de pesquisa) na cláusula WHERE.

Relacionando mais de duas tabelas no JOIN


Cada JOIN executado na consulta cria um conjunto de dados relacionável com o próximo JOIN a ser estruturado.
49

Veja a seguinte figura:

A união (JOIN) das tabelas autores e livros pela chave estrangeira (aut_id) cria o Conjunto 1.
FORM autores a
JOIN livros l
ON a.aut_id = l.aut_id
Para efetuar a ligação conjunto 1 com a tabela editoras
(conjunto 1)
JOIN editoras e
ON l.edi_id = e.edi_id
completando assim as ligações entre as três tabelas. Veja a instrução completa.
SELECT *
FORM autores a
JOIN livros l
ON a.aut_id = l.aut_id
JOIN editoras e
ON l.edi_id = e.edi_id <== todas as ligações de tabelas na cláusula FORM
WHERE
l.liv_id = 1; <== restrição separada
Para acrescentar mais tabelas ao relacionamento, basta adicionar JOIN tabela ON relação.

Quanto maior o número de tabelas relacionadas através de JOIN, maior o benefício deste tipo de escrita pois
proporciona uma rápida visualização da estrutura da base de dados e uma melhor compreensão dos objetivos da instrução SQL
escrita, facilitando assim a manutenção de programas.

EXERCÍCIOS – Crie as instruções SQL:


Para os exercícios abaixo, utilize o seguinte esquema:

1. Crie as tabelas livro e emprestimos descritas em Criando Estruturas de Dados – DDL para MySQL 4,
incluindo a chave estrangeira.
50

2. Crie uma tabela chamada alunos com os campos alu_id (BIGINT – NN – PK – AUTOINC), e alu_nome
(VARCHAR(100) – NN).

3. Altere a tabela emprestimos adicionando o campo alu_id.

4. Altere a tabela emprestimos adicionando uma chave estrangeira para a tabela alunos campo alu_id.

5. Insira os seguintes alunos na tabela alunos.


1. Mariana Silva;
2. Joana Andrades Neto;
3. Carla Azevedo;
4. Antônio Machado;
5. Luiz de Camões;
6. Márcio Azevedo;

6. Insira a seguinte relação de livros na tabela livros:


1. O Código Da Vince – de Dan Brown;
2. DHTML – de Osmar J. Silva;
3. Criando um Site B2C PHP e MySQL – Walace Soares
4. Fortaleza Digital – de Dan Brown;

7. Selecione todos os livros.

8. Selecione todos os livros cujo autor seja DAN BROWN.

9. Selecione todos os livros cujo autor possua a palavra BROWN.

10. Seleciona todos os alunos cujo nome possua a palavra ANA.

11. Selecione 3 registros da tabela livros, a partir do primeiro registro.

12. Selecione 2 registros da tabela livros, a partir do quarto registro.

13. Insira na tabela emprestimos um empréstimo do livro O Código Da Vince para o aluno Luiz de Camões, com
a data de empréstimo em 10/04/2006 e devolução em 17/04/2006.

14. Insira na tabela emprestimos um empréstimo do livro DHTML para a aluna Carla Azevedo, com a data de
empréstimo em 08/04/2006 e devolução em 15/04/2006.

15. Selecione o nome de Todos os alunos que já tiveram empréstimos.

16. Selecione o título do livro e a data do empréstimo de todos os livros que já formam emprestados.

Administração de Usuários no Banco de Dados MySQL


A administração de usuários tem por objetivo manipular as permissões de um usuário no banco de dados MySQL. As
cláusulas de administração padrão permiter: Dar permissão de SELECT, INSERT, UPDATE ou DELETE sobre as tabelas,
bem como alterar passwords.
Adicionando usuários:
GRANT ...
ON *.*
TO myusername@'%.mydomain.com'
IDENTIFIED BY 'mypassword';

Ex.:
GRANT select
ON biblioteca.*
TO rudinei@'%'
IDENTIFIED BY '123456';

Permissão de administrador:
51

WITH GRANT OPTION – Ao usuário que for concedida a permissão de administrador, este terá poderes de conceder
ou revogar permissões de outros usuários.

GRANT ALL PRIVILEGES


ON biblioteca.*
TO rudinei@'localhost'
WITH GRANT OPTION;

Permissões:
As permissões sobre as tabelas no Mysql são gerenciadas por GRANT e REVOKE.
GRANT – do inglês conceder – dá a permissão de acesso a tabela
REVOKE – do inglês revogar – retira a permissão de acesso a tabela

Os tipos de permissão são: SELECT, INSERT, UPDATE ou DELETE


SELECT – permite que sejam feitas seleções de registros da tabela.
INSERT - permite que sejam feitas inserções de registros da tabela.
UPDATE - permite que sejam feitas atualizações de registros da tabela.
DELETE - permite que sejam feitas exclusões de registros da tabela.

Ex.:
GRANT insert ON biblioteca.livros TO rudinei@'%';
GRANT select, insert, update ON biblioteca.livros TO rudinei;
GRANT delete ON biblioteca.livros TO rudinei;
REVOKE insert ON biblioteca.livros FROM rudinei;

EXERCÍCIOS – Crie as instruções SQL:

1. Crie o usuário systemuser com permissões de SELECT, INSERT, UPDATE sobre todo o banco de dados
biblioteca e a senha adminuser.
2. Crie o usuário guestuser com permissões de SELECT sobre todo o banco de dados biblioteca e a senha guest.
3. Dê permissão de INSERT sobre a tabela LIVROS para o usuário guestuser a partir do domínio local.
4. Remova a permissão de INSERT sobre a tabela LIVROS do usuário guestuser.
5. Conecte no banco de dados biblioteca com o usuário guestuser e tente inserir um registro na tabela livros.
Qual o resultado que o banco de dados retorna?.

Funções Especiais de MySQL

Nesta seção são apresentadas apenas algumas funções da API do MySQL. Para uma lista completa das funções
verifique a documentação do site www.mysql.com.

LENGTH(string)
Retorna o tamanho de uma string
SELECT LENGTH('abcdefg');
-> 7
.. WHERE LENGTH(campo_sql)>10
52

CONCAT(str1, str2, str3,...)


Concatena duas ou mais strings
SELECT CONCAT('My', 'S', 'QL');
-> MySQL

CONCAT_WS(separator, str1, str2,...)


Concatena duas ou mais strings adicionando um separador
SELECT CONCAT_WS(' - ', 'STRUCTURED', 'QUERY', 'LANGUAGE');
-> STRUCTURED - QUERY - LANGUAGE

CONV(N,from_base,to_base)
Converte um valor de uma base numérica para outra
SELECT CONV(50,10,2); // converte o valor decimal 50 da base decimal para a
base binária
-> 110010
SELECT CONV(110010,2,10); // converte o valor binário 1010 da base binária
para a base decimal
-> 50

INSTR(str,substr);
Verifica a ocorrência de uma string dentro de outra, retornando 0 caso não encontre e a posição da substring caso
localizada
SELECT INSTR('casa de carnes', 'car');
-> 9
SELECT INSTR('casa de carnes', 'boi');
-> 0
.. WHERE INSTR(campo_sql,'a')>0

LOWER(str)
Converte uma string para caixa baixa
SELECT LOWER('JavaScript');
-> javascript

UPPER(str)
Converte uma string para caixa alta
SELECT UPPER('JavaScript');
-> JAVASCRIPT

REPEAT(str,count)
Repete uma string
SELECT REPEAT('MySQL', 3);
-> MySQLMySQLMySQL
53

REPLACE(str,from_str,to_str)
Substitui uma substring por outra
SELECT REPLACE('x.mysql.com', 'x.', 'www.');
-> www.mysql.com

REVERSE(str)
Inverte uma string
SELECT REVERSE('MySQL');
-> LQSyM

TRIM, RTRIM, LTRIM


Revome os espaços em branco de uma string
SELECT TRIM(' MySQL ');
-> 'MySQL'
SELECT RTRIM(' MySQL ');
-> ' MySQL'
SELECT LTRIM(' MySQL ');
-> 'MySQL '

DATE_ADD, ADDDATE
Soma períodos em datas
SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'
SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'
SELECT DATE_ADD('2007-01-31', INTERVAL 1 MONTH);
-> '2007-02-28'
SELECT DATE_ADD('2007-01-31', INTERVAL 2 MONTH);
-> '2007-03-31'
SELECT DATE_ADD('2007-01-31', INTERVAL 3 MONTH);
-> '2007-04-30'

DATE_SUB, SUBDATE
Subtrai períodos de datas
SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
-> '1997-12-02'
SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY);
-> '1997-12-02'

ADDTIME()
Adiciona horas a uma hora
54

SELECT ADDTIME("2006-10-18 23:59:59", "0:15:11");


-> 2006-10-19 00:15:10
SELECT ADDTIME("14:00:00", "1:15:11");
-> 15:15:11

SUBTIME()
Adiciona horas a uma hora
SELECT SUBTIME("2006-10-18 23:59:59", "0:15:11");
-> 2006-10-19 23:44:48
SELECT SUBTIME("14:00:00", "1:15:11");
-> 12:44:49

CURRENT_DATE(), CURDATE()
Obtém a data corrente.
SELECT CURRENT_DATE();
SELECT CURDATE();
-> 2006-10-19

CURRENT_TIME(), CURTIME()
Obtém a hora corrente.
SELECT CURRENT_TIME();
SELECT CURTIME();
-> 12:54:57

CURRENT_TIMESTAMP()
Obtém a data/hora corrente.
SELECT CURRENT_TIMESTAMP();
-> 2006-10-19 12:54:57

DATE_FORMAT(date, format)
Formata uma data ou hora.
SELECT DATE_FORMAT('2006-10-19', '%d/%m/%Y');
-> 19/10/2006

WEEKDAY(date)
Retorna o número do dia da semana (0 = Segunda, 1 = Terça, ... 6 = Domingo):
SELECT WEEKDAY('2006-10-18');
-> 2
SELECT WEEKDAY(CURDATE());

YEAR(date)
Retorna o ano de uma data
55

SELECT YEAR('2006-10-18');
-> 2006
SELECT YEAR(CURRENT_DATE());

ENCODE(str,pass_str), DECODE(crypt_str,pass_str)
Codifica ou Descodifica uma string dada uma chave
update pessoas set pes_senha=ENCODE('SuperPHP','chave1') where pes_id=1;
select DECODE(pes_senha,'chave1') from pessoas where pes_id=1;
-> SuperPHP

LAST_INSERT_ID()
Retorna o último id de uma inserção em um campo autonumerado
SELECT LAST_INSERT_ID()

EXERCÍCIOS:
Considerando o seguinte diagrama ER:

1) Crie as seguintes objetos no mysql:


SCHEMA (BANCO DE DADOS): empresa

TABELA: pessoas
CAMPOS: pes_id inteiro grande NN-PK,
pes_nome string de 255 NN,
pes_endereco string de 255
TABELA: atividades
56

CAMPOS: ati_id inteiro NN-PK,


ati_descricao string de 255 NN,
ati_salario numero com 15 digitos e 2 decimais NN
TABELA: funcionarios
CAMPOS: fun_id inteiro grande NN-PK,
pes_id inteiro grande NN-FK,
ati_id NN-FK,
fun_data_admissao data NN,
fun_data_rescisao
TABELA: pontos
CAMPOS: fun_id inteiro grande NN-PK-FK,
pon_data data NN-PK,
pon_hora_entrada HORA NN-PK,
pon_hora_saida HORA

OBS: As chaves primárias e estrangeiras deverão ser criadas.


Legenda: NN - Não Nulo (Not Null);
PK Chave Primária (Primary Key);
FK Chave Estrangeira (Foreign Key)

2) Altere as tabelas: - pessoas, adicionando o seguinte campo: pes_data_nascimento data NN; - pessoas, adicionando o
seguinte campo: pes_senha varchar de 20; - funcionarios, adicionando o seguinte campo: fun_salario numerico 15,2;

3) Insira, com instruções SQL, os seguintes registros:


PESSOAS:
ORDEM: pes_id, pes_nome, pes_endereco, pes_data_nascimento, pes_senha

1, Antonio Lopes, Rua Maratá 200, 03/09/1970, null


2, Maria Aparecida, Rua das Araras 22, 05/10/1980, null
3, Carlos Aguiar, Av Vitor Barreto 54, 18/11/1964, null
4, Júlio Lopes Vargas, Rua Sepé 36 Apto 402A, 23/10/1988, null
5, Carlos Cavalheiro, Rua Júlio de Castilhos 35, 13/02/1977, null
6, Janice Capelli, Rua Congonhas 315, 13/02/1975, null
ATIVIDADES:
ORDEM: ati_id, ati_descricao, ati_salario

1, Mecânico, 1618.32
2, Técnico em Informática, 965.14
3, Assistente de Pessoal, 838.44
FUNCIONARIOS:
ORDEM: fun_id, pes_id, ati_id, fun_data_admissao, fun_data_rescisao, fun_salario

1, 1, 1, 10/10/2005, NULL, 1618.32


2, 2, 3, 05/03/2004, NULL, 838.44
3, 3, 2, 01/08/2002, NULL, 965.14
4, 4, 2, 03/08/2006, NULL, 1100.43
5, 5, 1, 04/02/1990, 30/10/2000, 980.33
57

PONTOS:
ORDEM: fun_id, pon_data, pon_hora_entrada, pon_hora_saida

1, 2006-10-01, 08:05:00, 12:02:33


2, 2006-10-01, 08:05:10, 12:02:48
3, 2006-10-01, 08:05:02, 11:59:17
3, 2006-10-01, 13:30:02, 18:00:45
4, 2006-10-01, 08:05:05, NULL
4, 2006-10-01, 13:29:55, 17:59:32
5, 2006-10-01, 08:05:20, 12:02:33
1, 2006-10-02, 08:05:45, 11:30:03
2, 2006-10-02, 08:05:00, NULL
3, 2006-10-02, 08:05:55, 12:03:05
4, 2006-10-02, 08:05:14, 12:02:05
5, 2006-10-02, 08:05:00, 12:03:05
1,'2006-10-03', 08:05:03, 12:02:05
2,'2006-10-03', 08:05:00, NULL
3,'2006-10-03', 08:05:17, 12:03:05
4,'2006-10-03', 08:05:00, 12:03:05
5,'2006-10-03', 08:05:00, 12:03:05

4) Selecione todos os dados da tabela pessoas, todos os dados da tabela atividades e todos os dados da tabela
funcionarios.

5) Selecione todas as pessoas cujo nome começa com a letra j. e todas as pessoas cujo nome possui a letra R.

6) Selecione o nome invertido de todas pessoas, em maiúsculo.

7) Selecione o código do funcionário, a data e a diferença de horas (saida-entrada) de todos os pontos do dia
02/10/2006.

NOTA: Todos os exercícios a seguir devem utilizar a sintaxe JOIN do SQL.


8) Selecione o código, o nome e a data de admissão de todos os funcionarios, utilizando a sintaxe JOIN do SQL,
trazendo ordenado por data de admissão.

9) Selecione o código, o nome e a data de admissão de todos os funcionarios demitidos, utilizando a sintaxe JOIN do
SQL, trazendo ordenado por data de admissão.

10) Selecione o código, o nome e a data de admissão de todos os funcionarios ainda ativos, trazendo ordenado
decrescente por data de admissão.

11) Selecione o código, o nome e função (descrição da atividade) de todos os funcionários da empresa, ordenando pela
atividade e depois pelo nome.
58

12) Selecione o código, o nome e função (descrição da atividade) de todos os funcionários que são Técnicos em
Informática na empresa, ordenando pelo nome.

13) Selecione todos os nomes maiores que 15 caracteres da tabela pessoas

14) Selecione o nome, o código e a data de nascimento de todos os registros da tabela pessoas, retornando em um só
campo contatenado po ' - '

15) Selecione todos os códigos de funcionário que não tem registro de ponto depois das 12:30 do dia 01/10/2006.

16) Selecione todos os códigos de funcionário que tem registro de ponto depois das 12:30 do dia 01/10/2006.

Ferramentas

Esta seção apresenta algumas das ferramentas disponíveis para o uso e gerenciamento do MySQL.

MySQL Query Browser

A ferramenta padrão disponibilizada pelo MySQL group é o Mysql Query Browser, ferramenta na qual poderão ser
criadas e manipuladas as tabelas do banco de dados.
Para conectar a ferramenta ao servidor você precisará:
– Server Host: nome ou IP da máquina onde está o BD.
– Username e Password: usuário e senha de administração do BD.
Para conexão local utlizaremos o ip 127.0.0.1, o usuário root, a senha root e o Default Schema como Test.

Após a conexão com o MySQL Query Browser (MQB) é exibida a seguinte janela:
59

O MQB é dividido em várias áreas.


– A área de Esquema (Schemata) onde pode-se criar e remover bancos de dados, criar alterar e remover Tabelas
– A área de ajuda com lista de comandos e funções
– A área de SQL para o uso da linguagem de consultas SQL
– A área de Resultados dos comandos SQL executados
60

Criando um banco de dados

Para criar uma banco de dados, clica-se sobre a área de “schema” com
o botão direito do mouse, selecionando “Create New Schema”.
Informe o nome do “schema” banco de dados (exemplo: biblioteca) e
pressione OK.

Criando uma Tabela banco de dados

Para criar uma tabela, clique com o botão direito sobre o nome do
banco de dados selecionando “Create New Table”.
Será exibita uma janela para a definição dos campos e índices da tabela
(prócima figura).
61

O “Table Editor” (editor de tabelas) permite a fácil criação e alteração de tabelas mediante a definição do nome da
tabela e a escolha do nome e tipo dos campos da tabela, sendo bem intuitivo.
– Column Name – Nome do campo (use letras minúsculas, sem espaços, sem acentuação ou caratceres especiais.
– Datatype – Tipo de dados do campo (integer, bigint, varchar, float, etc...)
– NOT NULL – Se marcado a tabela não aceitará a inserção de um registro sem ser definido uma valor para o
campo, pu seja, não poderá ser nulo.
– AUTO INC – Auto Incremento: Só poderá ser utilizado se o campo for chave primária, neste caso o mysql se
encarregará de dar automaticamente um código para o registro.
– Flags – Exibe as opções adicionais de tipo de dado: UNSIGNED – caso marcado um campo numérico não aceitará
valores negativos. ZEROFILL – preenche um campo numérico com zeros à esquerda até o tamanho do campo.
– Default Value – Valor default (padrão) para o campo que por padrão é nulo.
– Comment – Comentários a nível de campo: Você pode utilizar para comentar a definição da tabela – importante
para desenvolvimento e projeto.

Efetuando Consultas SQL


Para efetuar uma consulta SQL, escreva a consulta na área de SQL e pressiona o botão execute.

O resultado da consulta será exibido no “resultset” onde poderão ser editados os dados da tabela pressionando o
comando “Edit” para editar e “Apply Changes” para efetuar a alteração da edição.
Este é o básico da ferramenta. Utilize-a para aprimorar seu skill na utilização de bases de dados MySQL.
62

MySQL Administrator

MySQL Workbench

Em breve....

fabForce DBDesigner

O DBDesigner 4 é uma ferramenta OpenSource para modelar bases de dados MySQL aceitando também conexões
ODBC e utilizando o padrão ER.
Esta ferramenta (figura abaixo) permite modelar novas bases de dados bem como efetuar a engenharia reversa de bases
de dados existentes. É possível também efetuar consultas SQL na base de dados.
O DBDesigner 4 está disponível tanto para windows como para linux, a partir do site do fabricante www.fabforce.net.

À esquerda vimos a área de design com os componentes de diagramação (tabelas e relacionamentos) e à direita vimos a
área chamada de navigator, onde podemos redimensionar o tamanho do diagrama.
63

Configurando o ambiente:

Para utilizarmos a notação tradicional para design ER – Crow's Foot – precisamos configurar o ambiente.
– Marque a opção: Display -> Notation -> Crow's Foot

Barra de Componentes do DBDesigner 4:

Da esquerda para direita:


– Mão: arrasta elementos na aba de design
– Lupa: amplia a visualização do diagrama
– Nota: permite a inserção de texto no diagrama
– Nota: permite a inserção de imagem no diagrama
– Sync: efetua a sincronização do diagrama com o banco de dados para criar / alterar as tabelas e
relecionamentos
– Crc: cria SQL de exportação do diagrama

Componentes de modelo:

Cria uma nova tabela no diagrama

Cria um relacionamento 1 para Muitos entre tabelas

Cria um relacionamento 1 para 1 entre tabelas

Cria um relacionamento Muitos para Muitos enre tabelas

Criando um diagrama ER:

Acesse o menu File -> New para iniciar um novo diagrama. O menu Display -> Design Mode deve estar ativo.
– Clique no componente tabela e clique numa posição do diagrama.
– Clique com o botão direito sobre a tabela e selecione Edit Object. A figura abaixo ilustra a edição de uma
nova tabela.
64

– Table Name: coloque o nome da tabela. Não use nomes compostos nem acentuação. Coloque o nome no
plural.
– Table Prefix: selecione no Prefix.
– Table Type: selecione InnoDB (MySQL 4 ou superior, para permitir chaves estrangeiras)
– Column Name: coloque o nome das colunas
– Data Type: selecione o tipo de dados da coluna e especifique sua precisão (caso o tipo de dado o exija)
– NN: Marque quando o campo não deve aceitar nulos
– AI: Marque quando o campo deva ser auto-incremento. Somente campos chave (Primary Key) poderão ser
auto incremento.
– Flags: Marque as características do tipo de campo que se aplicam (unsigned , zerofill, etc).
– Default Value: Coloque o valor padrão para o campo caso este não seja fornecido em um insert.
– Comments: Adiciona comentários sobre o campo.

A chave amarela demostra a criação de uma primary key. Para alterar ou adicionar novos campos à chave primária
basta clicar nesta coluna, fazendo exibir ou ocultar este ícone.

Para criar relacionamentos entre as tabelas, basta utilizar o componente adequado ( , ), selecionando as
tabelas de origem -> destino.
Para que possamos criar o esquema da base de dados no banco de dados a partir da sincronização do DBDesigner4 com
o MySQL, é necessário fazer a atualização do password do usuário que irá criar a tabela, se o servidor de MySQL for versão
4.0 ou superior.
Abra o mysql Query Browser e execute o seguinte comando para atualizar o password do usuário: set password for
'root'@'localhost'=old_password('pass');

Sincronizando o Modelo com o MySQL


65

A sincrinização é acionada pelo menu Database -> Database Synchronisation.

A configuração da conexão é definida no botão ...

Dê Ok e clique em Connect.
66

Clique em Execute para efetuar a sincronização.


Abaixo visualizamos um diagrama de dados modelado no DBDesigner 4.

Figura 18: ER Modelado no fabForce DBDesigner


67
68

PHP

PHP, um acrônimo de "PHP: Personal Home Page Tools", é uma linguagem de programação de ampla utilização,
interpretada, que é especialmente interessante para desenvolvimento para a Web e pode ser mesclada dentro do código HTML.
A sintaxe da linguagem lembra C, Java e Perl, e é fácil de aprender. O objetivo principal da linguagem não é somente permitir
a desenvolvedores escrever páginas que serão geradas dinamicamente e com rapidez, mas permitir a você fazer muito mais do
que isso com PHP.

O que é PHP?

PHP (um acrônimo recursivo para "PHP: Hypertext Preprocessor") é uma linguagem de script Open Source de uso
geral, muito utilizada e especialmente guarnecida para o desenvolvimento de aplicações Web embútivel dentro do HTML.

Uma resposta direta, mas o que isso significa?


Exemplo 1-1. Um exemplo introdutório

<html>
<head>
<title>Exemplo</title>
</head>
<body>
<?php
echo "Olá, Eu sou um script PHP!";
?>
</body>
</html>

Note como isso é diferente de scripts CGI escritos em outras linguagens como Perl ou C --- ao invés de escrever um
programa com um monte de comandos para imprimir HTML, você escreve um arquivo HTML com algum código inserido
para fazer alguma coisa (nesse caso, imprimir um pouco de texto). O código PHP é delimitado por tags iniciais e finais que lhe
permitem pular pra dentro e pra fora do "modo PHP".

O que distingui o PHP de algo como Javascript no lado do cliente é que o código é executado no servidor. Se você
tivesse um script similar ao acima em seu servidor, o cliente receberia os resultados da execução desse script, sem nenhum
modo de determinar como é o código fonte. Você pode inclusive configurar seu servidor para processar todos os seus arquivos
HTML como PHP, e então não haverá nenhum modo dos usuários descobrirem que se você usa essa linguagem ou não.

A melhor coisa em usar PHP está no fato de ele ser extremamente simples para um iniciante, mas oferece muitos
recursos para o programador profissional. Não se preocupe em ler as longas listas de funções do PHP. Você pode pular essa
parte (por enquanto) e começar a escrever scripts em poucas horas.

Apesar do desenvolvimento do PHP ser focado nos scripts do lado do servidor, você pode fazer muito mais com ele.
Veja isso e leia mais na seção O que o PHP pode fazer?.
69

O que o PHP pode fazer?

Qualquer coisa. O PHP é focado para ser uma linguagem de script do lado do servidor, portanto, você pode fazer
qualquer coisa que outro programa CGI pode fazer, como: coletar dados de formulários, gerar páginas com conteúdo dinâmico
ou enviar e receber cookies. Mas o PHP pode fazer muito mais.

Esses são os maiores campos onde os scripts PHP podem se utilizados:


• Script no lado do servidor (server-side). Este é o mais tradicional e principal campo de atuação do PHP. Você
precisa de três coisas para seu trabalho. O interpretador do PHP (como CGI ou módulo), um servidor web e um
browser. Basta rodar o servidor web conectado a um PHP instalado. Você pode acessar os resultados de seu
programa PHP com um browser, visualizando a página PHP através do servidor web.
• Script de linha de comando. Você pode fazer um script PHP funcionar sem um servidor web ou browser. A única
coisa necessária é o interpretador. Esse tipo de uso é ideal para script executados usando o cron ou o Agendador de
Tarefas (no Windows). Esses scripts podem ser usados também para rotinas de processamento de texto.
• Escrevendo aplicações GUI no lado do cliente (client-side). O PHP não é (provavelmente) a melhor linguagem para
produção de aplicações com interfaces em janelas, mas o PHP faz isso muito bem, e se você deseja usar alguns
recursos avançados do PHP em aplicações no lado do cliente poderá utilizar o PHP-GTK para escrever esses
programas. E programas escritos desta forma ainda serão independentes de plataforma. O PHP-GTK é uma
extensão do PHP, não disponível na distribuição oficial.

O PHP pode ser utilizado na maioria dos sistemas operacionais, incluindo Linux, várias variantes Unix (incluindo HP-
UX, Solaris e OpenBSD), Microsoft Windows, Mac OS X, RISC OS, e provavelmente outros.
O PHP também é suportado pela maioria dos servidores web atuais, incluindo Apache, Microsoft Internet Information
Server, Personal Web Server, Netscape and iPlanet Servers, Oreilly Website Pro Server, Caudium, Xitami, OmniHTTPd, e
muitos outros. O PHP pode ser configurado como módulo para a maioria dos servidores, e para os outros como um CGI
comum.
Com o PHP, portanto, você tem a liberdade para escolher o sistema operacional e o servidor web. Do mesmo modo,
você pode escolher entre utilizar programação estrutural ou programação orientada a objeto, ou ainda uma mistura deles.
Mesmo não desenvolvendo nenhum recurso padrão de OOP (Object Oriented Programming, Programação Orientada a
Objetos) na versão atual do PHP, muitas bibliotecas de código e grandes aplicações (incluindo a biblioteca PEAR) foram
escritos somente utilizando OOP.
Com PHP você não está limitado a gerar somente HTML. As habilidades do PHP incluem geração de imagens,
arquivos PDF e animações Flash (utilizando libswf ou Ming) criados dinamicamente, on the fly. Você pode facilmente criar
qualquer padrão texto, como XHTML e outros arquivos XML. O PHP pode gerar esses padrões e os salvar no sistema de
arquivos, em vez de imprimi-los, formando um cache dinâmico de suas informações no lado do servidor.
Talvez a mais forte e mais significativa característica do PHP é seu suporte a uma ampla variedade de banco de dados.
Escrever uma página que consulte um banco de dados é incrivelmente simples. Os seguintes bancos de dados são atualmente
suportados:

Adabas D Ingres Oracle (OCI7 and OCI8)


dBase InterBase Ovrimos
Empress FrontBase PostgreSQL
FilePro (read-only) mSQL Solid
Hyperwave Direct MS-SQL Sybase
IBM DB2 MySQL Velocis
70

Informix ODBC Unix dbm

Também foi providenciado uma abstração de banco de dados DBX permitindo a você utilizar qualquer banco de dados
transparentemente com sua extensão. Adicionalmente, o PHP suporta ODBC (Open Database Connection, ou Padrão Aberto
de Conexão com Bancos de Dados), permitindo que você utilize qualquer outro banco de dados que suporte esse padrão
mundial.
O PHP também tem suporte para comunicação com outros serviços utilizando protocolos como LDAP, IMAP, SNMP,
NNTP, POP3, HTTP, COM (em Windows) e incontáveis outros. Você pode abrir sockets de rede e interagir diretamente com
qualquer protocolo. O PHP também suporta o intercâmbio de dados complexos WDDX, utilizado em virtualmente todas as
linguagens de programação para web. Falando de comunicação, o PHP implementa a instanciação de objetos Java e os utiliza
transparentemente como objetos PHP. Você ainda pode usar sua extensão CORBA para acessar objetos remotos.
O PHP é extremamente útil em recursos de processamento de texto, do POSIX Estendido ou expressões regulares Perl
até como interpretador para documentos XML. Para acessar e processar documentos XML, são suportados os padrões SAX e
DOM. Você ainda pode usar nossa extensão XSLT para transformar documentos XML.
Utilizando o PHP no campo do e-commerce, você poderá usar as funções específicas para Cybescash, CyberMUT,
Verysign Payflow Pro e CCVS, práticos sistemas de pagamento online.
Por último mas longe de terminar, temos também outras extensões interessantes: funções para o search engine
mnoGoSearch, funções para Gateway IRC, vários utilitários de compressão (gzip, bz2), calendário e conversões de datas,
tradução...
Como você pode ver, esta página não é suficiente para descrever todos os recursos e benefícios que o PHP pode
oferecer.
71

Arquitetura

A arquitetura utilizada na internet é, basicamente, cliente-servidor.

Figura 19 – Interação Cliente - Servidor

Isto significa que, para acessos a documentos web, uma máquina remota chamada cliente, utilizando um software
específico, denominado “navegador”, acessa ou conecta em outra máquina remota chamada servidor, que utiliza um software
específico chamado “servidor web” e que presta um serviço de entrega localização e entrega do documento.

Figura 20 - Interação Navegador - Servidor

Esta é arquitetura estática usada pelo protocolo http com o auxílio da linguagem HTML para a formatação dos
documentos. O PHP entra em cena para fazer a parte dinâmica do serviço cujo servidor web não tem condições de realizar.
Este serviço é designado de server-side pois executa somente do lado servidor, interpretando os códigos em PHP, realizando os
serviços necessários (acesso e manipulação de BDs, mail, arquivos, rotinas de sistema, etc..) e devolvendo o resultado.
72

Figura 21 – Modelo de requisições Nagevador – Servidor - PHP


73

Referência da Linguagem

Este capítulo apresenta praticamente toda a referência de linguagem do PHP, ignorando apenas os tópicos mais
avançados que fogem ao escopo deste manual.

Alternado/Escaping do HTML

Quando o PHP interpreta um arquivo, ele simplesmente repassa o texto do arquivo até encontrar uma das tags especiais
que lhe diz para começar a interpretar o texto como código PHP. O interpretador então executa todo o código que encontra, até
chegar em uma tag de fechamento PHP, que novamente o coloca simplesmente repassando texto novamente. Este é o
mecanismo que permite a inclusão de código PHP dentro do HTML: qualquer coisa fora das tags PHP é deixado como
encontrado, enquanto tudo dentro é interpretado e executado.
Há quatro conjuntos de tags que podem ser usadas para marcar blocos de código PHP. Delas, somente duas (<?php.
. .?> e <script language="php">. . .</script>) são sempre disponíveis. As outras podem ser ativadas ou
desativadas a partir do arquivo de configuração php.ini. Enquanto as formas reduzidas das tags ou no seu estilo ASP serem
convenientes, elas não são portáveis em todas as versões. Além disso, se você pretende incluir código PHP em XML ou
XHTML, você precisará usar a forma <?php ... ?> para compatibilidade com o padrão XML.
As tags suportadas pelo PHP são:

1. <?php echo("se você precisa dispor documentos XHTML ou XML, use assim\n"); ?>

2. <? echo ("este é o mais simples, como uma instrução de processamento SGML\n"); ?>
<?= espressao ?> Uma redução de "<? echo expressao ?>"

3. <script language="php">
echo ("alguns editores (como o FrontPage) não
gostam de processas instruções");
</script>

4. <% echo ("Você também pode usar tags ASP opcionalmente"); %>
<%= $variavel; # Uma redução para "<% echo ..." %>

O primeiro método, <?php...?>, é o preferencial, já que ele permite o uso do PHP em códigos padrão XML como o
XHTML.
Nota: A utilização das tags curtas deve ser evitada quando do desenvolvimento de aplicações ou bibliotecas com
intenção de redistribuição ou no desenvolvimento de serviços em PHP que não ficarão sob seu controle, uma vez que as tags
curtas podem não estar disponíveis no servidor de instalação. Para portabilidade de código para distribuição, tenha certeza de
não usar tags curtas.

A tag de fechamento incluirá uma linha nova linha em branco automaticamente se uma não estiver presente. Além, a tag
de fechamento automaticamente implica num ponto e vírgula: você não precisa ter um ponto e vírgula no fim da última linha
de código PHP.

O PHP também suporta a utilização de estruturas como essa:

<?php
74

if ($expression) {
?>

<strong>Isso é verdadeiro.</strong>

<?php
} else {
?>

<strong>Isto é falso.</strong>

<?php
}
?>

Isso funciona como esperado porque quando o PHP encontra a tag de fechamento ?>, ele simplesmente começa a
imprimir tudo até encontrar outra tag de abertura. Obviamente, o exemplo acima se aplica a exibição de grandes blocos de
texto, uma vez que sair do modo de interpretação do PHP é geralmente mais eficiente que imprimir todo o texto através de
funções como echo(), print() e outras.

Separador de instruções

Instruções são separadas da mesma forma que o C ou o Perl - cada instrução termina com um ponto e vírgula. A tag de
fechamento (?>) também implica no fim de uma instrução, então os exemplos seguintes são equivalentes:
<?php
echo "Isto é um teste";
?>

<?php echo "Isto é um outro teste" ?>

Comentários

O PHP suporta comentários do 'C', 'C++' e Unix shell. Por exemplo

<?php
echo "Isto é um teste"; //Comentário de uma linha no C++

/* Isto é um comentário de mais de uma linha


e aqui temos outra linha */
/*
echo "Isto é um teste"; /* Este comentário causará um erro */
*/

echo "Isto é um outro teste";

echo "O último teste"; #Comentário no estilo Unix shell


?>

Tipos

O PHP suporta os oitos tipos primitivos.

São quatros tipos básicos:


• booleano
• inteiro
75

• número com ponto flutuante (float)


• string
Dois tipos compostos:
• array
• objeto
E finalmente dois tipos especiais:
• resource
• NULL
Este manual também introduz alguns pseudo-tipos por razões de legibilidade:
• mixed
• number
• callback

O tipo da variável geralmente não é configurado pelo programador: isto é decidido em tempo de execução pelo PHP,
dependendo do contexto no qual a variável é usada.
Nota: Se você quiser checar o tipo e valor de uma certa expressão, utilize var_dump().
Se você simplesmente quiser uma representação legível de seu tipo para debugagem, use gettype(). Para verificar por
certos tipos, não use gettype(), mas sim as funções is_type.
Se você quiser forçar a conversão de uma variável para um certo tipo, você pode moldar (casting) a variável ou usar a
função settype() nela.
Note que uma variável pode se comportar de maneiras diferentes em certas situações, dependendo de qual tipo ela é no
momento. Para mais informações, veja a seção Manipulação de tipos.

Variáveis

As variáveis no PHP são representadas por um cifrão ($) seguido pelo nome da variável. Os nomes de variável no PHP
fazem distinção entre maiúsculas e minúsculas.
Os nomes de variável seguem as mesmas regras como outros rótulos no PHP. Um nome de variável válido se inicia com
uma letra ou sublinhado, seguido de qualquer número de letras, algarismos ou sublinhados. Em uma expressão regular isto
poderia ser representado desta forma: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
Nota: Para nossos propósitos, as letras a-z, A-Z e os caracteres ASCII de 127 a 255 (0x7f-0xff).
<?php
$var = "Bob";
$Var = "Joe";
echo "$var, $Var"; // exibe "Bob, Joe"
$4site = 'not yet'; // inválido; começa com um número
$_4site = 'not yet'; // válido; começa com um sublinhado
$täyte = 'mansikka'; // válido; 'ä' é um caracter ASCII 228.
?>

Atribuição de referência à variáveis

O PHP 4 oferece um outro meio de atribuir valores a variáveis: a atribuição por referência. Isto significa que a nova
variável simplesmente referencia (em outras palavras, "torna-se um apelido para" ou "aponta para") a variável original.
Alterações na nova variável afetam a original e vice versa.
76

Para atribuir por referência, simplesmente adicione um e-comercial (&) na frente do nome da variável que estiver sendo
atribuída.
<?php
$foo = 'Bob'; // Atribui o valor 'Bob' a variável $foo
$bar = &$foo; // Referecia $foo através de $bar.
$bar = "My name is $bar"; // Altera $bar...
echo $bar;
echo $foo; // $foo é alterada também.
?>

Uma observação importante a se fazer: somente variáveis nomeadas podem ser atribuídas por referência.
<?php
$foo = 25;
$bar = &$foo; // Esta atribuição é válida.
$bar = &(24 * 7); // Inválido; referencia uma expressão sem nome.

function test()
{
return 25;
}
$bar = &test(); // Inválido.
?>

Constantes

Uma constante é um identificador (nome) para um único valor. Como o nome sugere, esse valor não pode mudar
durante a execução do script (exceção às constantes mágicas, que não são constantes de verdade). As constantes são sensíveis
ao caso por padrão. Por convenção, o nomes de constantes são sempre em maiúsculas.
O nome de uma constante tem as mesmas regras de qualquer identificador no PHP.
Como as superglobals, o escopo de uma constante é global. Você pode acessar constantes de qualquer lugar em seu
script sem se preocupar com o escopo.

Sintaxe
Você pode definir uma constante utilizando-se da função define(). Quando uma constante é definida, ela não pode ser
mais modificada ou anulada.
Somente dados escalares (boolean, integer, float e string) pode ser colocados em constantes.
Nota: As constantes e variáveis (globais) estão em espaços de nomes diferentes. Isto implica, por exemplo, que TRUE e
$TRUE são geralmente diferentes.
Se você usar uma constante indefinida, o PHP assume o nome da constante como seu próprio valor. Uma notice será
informada quando isso acontecer. Use a função defined() se você precisar saber se uma constante está definida ou não.
Estas são as diferenças entre constantes e variáveis:
• Constantes não podem ter um sinal de cifrão ($) antes delas;
• Constantes só podem ser definidas utilizando a função define(), e não por simples assimilação;
• Constantes podem ser definidas e acessadas de qualquer lugar sem que a regras de escopo de variáveis seja
aplicadas;
• Constantes não podem ser redefinidas ou eliminadas depois que elas são criadas; e
• Constantes só podem conter valores escalares.

<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // imprime "Hello world."
echo Constant; // imprime "Constant" e gera um alerta notice.
?>
77

Operadores

A precedência de um operador especifica quem tem mais prioridade quando há duas delas juntas. Por exemplo, na
expressão, 1 + 5 * 3, a resposta é 16 e não 18 porque o operador de multiplicação ("*") tem prioridade de precedência que o
operador de adição ("+"). Parênteses podem ser utilizados para forçar a precedência, se necessário. Assim, (1 + 5) * 3 é
avaliado como 18.
A tabela seguinte mostra a precedência dos operadores, da menor precedência para a maior.

Precedência dos operadores

Associação Operador
esquerda ,
esquerda or
esquerda xor
esquerda and
direita print
esquerda = += -= *= /= .= %= &= |= ^= <<= >>=
esquerda ? :
esquerda ||
esquerda &&
esquerda |
esquerda ^
esquerda &
não associativo == != === !==
não associativo < <= > >=
esquerda << >>
esquerda + - .
esquerda * / %
! ~ ++ -- (int) (float) (string) (array)
direita
(object) @
direita [
não associativo New

Operadores Aritméticos

Exemplo Nome Resultado


$a + $b Adição Soma de $a e $b.
$a - $b Subtração Diferença entre $a e $b.
$a * $b Multiplicação Produto de $a e $b.
$a / $b Divisão Quociente de $a por $b.
$a % $b Módulo Resto de $a dividido por $b.

Operadores de Atribuição

O operador básico de atribuição é "=". A sua primeira inclinação deve ser a de pensar nisto como "é igual". Não. Isto
quer dizer, na verdade, que o operando da esquerda recebe o valor da expressão da direita (ou seja, "é configurado para").

O valor de uma expressão de atribuição é o valor atribuído. Ou seja, o valor de "$a = 3" é 3. Isto permite que você faça
alguns truques:
78

$a = ($b = 4) + 5; // $a é igual a 9 agora e $b foi configurado como 4.

Além do operador básico de atribuição, há "operadores combinados" para todos os operadores binários, aritméticos e de
string, que permitem a você pegar um valor de uma expressão e então usar seu próprio valor para o resultado daquela
expressão. Por exemplo:

$a = 3;
$a += 5; // configura $a para 8, como se disséssemos: $a = $a + 5;
$b = "Bom ";
$b .= "Dia!"; // configura $b para "Bom Dia!", como em $b = $b . "Dia!";

Operador Bit-a-bit

Operadores bit-a-bit permitem que você acione ou desligue bits específicos dentro de um inteiro. Se ambos os
parâmetros da esquerda e da direita forem strings, esses operadores irão trabalhar nos caracteres dessa string.
<?php
echo 12 ^ 9; // Imprime '5'
echo "12" ^ "9"; // Imprime o caracter de volta (backspace - ASCII 8)
// ('1' (ASCII 49)) ^ ('9' (ASCII 57)) = 8
echo "hallo" ^ "hello"; // Imprime os valores ASCII 0 4 0 0 0
// 'a' ^ 'e' = 4
?>

Exemplo Nome Resultado


$a & $b E Os bits que estão ativos tanto em $a quanto em $b são ativados.
$a | $b OU Os bits que estão ativos em $a ou em $b são ativados.
$a ^ $b XOR Os bits que estão ativos em $a ou em $b, mas não em ambos, são ativados.
~ $a NÃO Os bits que estão ativos em $a não são ativados, e vice-versa.
Deslocamento à Desloca os bits de $a $b passos para a esquerda (cada passo significa
$a << $b
esquerda "multiplica por dois")
Deslocamento à Desloca os bits de $a $b passos para a direita (cada passo significa "divide
$a >> $b
direita por dois")

Operadores de Comparação

Operadores de comparação, como os seus nomes implicam, permitem que você compare dois valores.

Exemplo Nome Resultado


$a == $b Igual Verdadeiro (TRUE) se $a é igual a $b.
Verdadeiro (TRUE) se $a é igual a $b, e eles são do mesmo tipo
$a === $b Idêntico
(somente para PHP4).
$a != $b Diferente Verdadeiro se $a não é igual a $b.
$a <> $b Diferente Verdadeiro se $a não é igual a $b.
Não Verdadeiro de $a não é igual a $b, ou eles não são do mesmo tipo
$a !== $b
idêntico (somente para o PHP4).
$a < $b Menor que Verdadeiro se $a é estritamente menor que $b.
$a > $b Maior que Verdadeiro se $a é estritamente maior que $b.
Menor ou
$a <= $b Verdadeiro se $a é menor ou igual a $b.
igual
Maior ou
$a >= $b Verdadeiro se $a é maior ou igual a $b.
igual

Outro operador condicional é o operador "?:" (ou trinário), que opera como no C e em muitas outras linguagens.
<?php
// Exemplo de uso do operador trinário
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];

// A instrucao assima eh identica a seguinte instrucao if/else


79

if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>

Operadores de controle de erro

O PHP suporta um operador de controle de erro: o sinal 'arroba' (@). Quando ele precede uma expressão em PHP,
qualquer mensagem de erro que possa ser gerada por aquela expressão será ignorada.
Se o recurso track_errors estiver habilitado, qualquer mensagem de erro gerada pela expressão será gravada na variável
global $php_errormsg. Esta variável será sobrescrita em cada erro, assim verifique-a constantemente se você quiser usá-la.

<?php
/* Erro de arquivo intencional */
$my_file = @file ('arquivo_nao_existente') ou
die ("Falha abrindo arquivo: '$php_errormsg'");

// Isto funciona para qualquer expressão, não apenas para funções:


$value = @$cache[$key];
// você não receberá nenhum aviso se a chave $key não existir.

?>

Operadores de Execução

O PHP suporta um operador de execução: acentos graves (``). Note que não são apóstrofes! O PHP tentará executar o
conteúdo dos acentos graves como um comando do shell; a saída será retornada (isto é, ela não será simplesmente
descarregada para a saída; ela pode ser atribuída a uma variável). A utilização do operador contra-apóstrofo é idêntica a função
shell_exec().

$output = `ls -al`;


echo "<pre>$output</pre>";

Nota: O operador de execução fica desabilitado quando safe mode está ativo ou shell_exec() está desabilitado.

Operadores de Incremento/Decremento

O PHP suporta operadores de pré e pós-incremento e decremento no estilo C.

Exemplo Nome Efeito


++$a Pré-incremento Incrementa $a em um, e então retorna $a.
$a++ Pós-incremento Retorna $a, e então incrementa $a em um.
--$a Pré-decremento Decrementa $a em um, e então retorna $a.
$a-- Pós-decremento Retorna $a, e então decrementa $a em um.

Exemplo:

<?php
echo "<h3>Pós-incremento</h3>";
$a = 5;
echo "Deve ser 5: " . $a++ . "<br />\n";
echo "Deve ser 6: " . $a . "<br />\n";
80

echo "<h3>Pré-incremento</h3>";
$a = 5;
echo "Deve ser 6: " . ++$a . "<br />\n";
echo "Deve ser 6: " . $a . "<br />\n";

echo "<h3>Pós-decremento</h3>";
$a = 5;
echo "Deve ser 5: " . $a-- . "<br />\n";
echo "Deve ser 4: " . $a . "<br />\n";

echo "<h3>Pré-decremento</h3>";
$a = 5;
echo "Deve ser 4: " . --$a . "<br />\n";
echo "Deve ser 4: " . $a . "<br />\n";
?>

Operadores Lógicos

Exemplo Nome Resultado


$a and $b E Verdadeiro (TRUE) se tanto $a quanto $b são verdadeiros.
$a or $b OU Verdadeiro se $a ou $b são verdadeiros.
$a xor $b XOR Verdadeiro se $a ou $b são verdadeiros, mas não ambos.
! $a NÃO Verdadeiro se $a não é verdadeiro.
$a && $b E Verdadeiro se tanto $a quanto $b são verdadeiros.
$a || $b OU Verdadeiro se $a ou $b são verdadeiros.
A razão para as duas variantes dos operandos "and" e "or" é que eles operam com precedências diferentes.

Operadores de String

Há dois operadores de string. O primeiro é o operador de concatenação ('.'), que retorna a concatenação dos seus
argumentos direito e esquerdo. O segundo é o operador de atribuição de concatenação ('.='), que acrescenta o argumento do
lado direito no argumento do lado esquerdo. Veja em Operadores de Atribuição para mais informações.

$a = "Olá ";
$b = $a . "mundo!"; // agora $b contém "Olá mundo!"
echo $b;

$a = "Olá ";
$a .= "mundo
echo $a;

Operadores de Arrays

O único operador de arrays no PHP é o +. Ele acrescenta o array informado à direita no array informado à esquerda,
onde chaves duplicadas NÃO são sobrescritos.

$a = array("a" => "maçã", "b" => "banana");


$b = array("a" =>"pêra", "b" => "framboesa", "c" => "morango");
$c = $a + $b;
var_dump($c);

array(3) {
["a"]=>
string(5) "maçã"
["b"]=>
string(6) "banana"
["c"]=>
string(6) "morango"
}

Nota: O PHP fornece uma implementação completa e poderosa de expressões, e a completa documentação dela vai
além do escopo deste manual.
81

Estruturas de Controle

Qualquer script PHP é construído por uma série de instruções. Uma instrução pode ser uma atribuição, uma chamada de
função, um 'loop', uma instrução condicional, ou mesmo uma instrução que não faz nada (um comando vazio). Instruções
geralmente terminam com um ponto e vírgula. Além disso, as instruções podem ser agrupados em um grupo de comandos
através do encapsulamento de um grupo de comandos com chaves. Um grupo de comandos é uma instrução também. Os vários
tipos de instruções são descritos neste capítulo.

if
A construção if é uma das mais importantes implementações de muitas linguagens, incluindo o PHP. Ela permite a
execução condicional de fragmentos de código. O PHP implementa uma estrutura if que é similar àquela do C:
if (expressao) instrucoes

if ($a > $b) print "a é maior que b";

if ($a > $b) {


print "a é maior que b";
$b = $a;
}

else

Freqüentemente você vai querer executar uma instrução se uma certa condição for encontrada, e uma instrução diferente
se a condição não for encontrada. Isto é o que o else faz.

if ($a > $b) {


print "a é maior que b";
} else {
print "a NÃO é maior que b";
}

O comando else só é executado se a expressão if for avaliada como FALSE, e se havendo qualquer expressão elseif,
somente se todas elas forem avaliadas como FALSE também (veja elseif).

elseif

elseif, como seu nome sugere, é uma combinação de if e else. Da mesma forma que o else, ele estende um comando if
para executar uma instrução diferente no caso de a expressão if original ser avaliada como FALSE.

if ($a > $b) {


print "a é maior que b";
} elseif ($a == $b) {
print "a é igual a b";
} else {
print "a é menor que b b";
}

while
82

Loops while são o tipo mais simples de criar um 'loop' em PHP. Eles se comportam como seus compatíveis em C. O
formato básico de um comando while é:

while (expressao) instrucoes

O significado de um comando while é simples. Ele pede que o PHP execute os comandos aninhados repetidamente,
enquanto a expressão do while é avaliada como TRUE. O valor da expressão é verificada cada vez que se passa no começo do
'loop', desta forma, mesmo que este valor mude durante a execução do(s) comando(s) aninhado(s), a execução não parará até
que o fim da iteração (cada vez que o PHP executa os comandos dentro do 'loop' é uma iteração).

while (expressao): instrucoes ... endwhile;

<?php
$i = 1;
while ($i <= 10) {
print $i++; /* o valor impresso será
$i depois do acréscimo
(post-increment) */
}
?>

do..while

Similar ao loop while, exceto pelo fato de que a condição é verificada no fim de cada iteração em vez de no começo.
<?
$i = 0;
do {
print $i;
} while ($i>0);
?>

O loop acima rodaria exatamente uma vez, desde que depois da primeira iteração, quando a condição é verificada, ela é
avaliada como FALSE ($i não é maior que zero 0) e a execução do loop termina.
Usuários avançados de C podem estar familiarizados com o uso diferenciado do loop do..while, para permitir o fim da
execução no meio dos blocos de código, englobando-os com do..while(0), e usando a instrução break . O fragmento de
código a seguir demonstra isso:

<?
$i=3;
$minimum_limit=5;
do {
if ($i < 5) {
print "i não é grande o suficiente";
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
break;
}
print "i está Ok";

// ...process i...

} while(0);
?>

for
83

Loops for são os laços mais complexos em PHP. Eles se comportam como os seus compatíveis em C. A sintaxe de um
loop for é:

for (expr1; expr2; expr3) instrucoes

/* exemplo 1 */
for ($i = 1; $i <= 10; $i++) {
print $i;
}

/* exemplo 2 */
for ($i = 1;;$i++) {
if ($i > 10) {
break;
}
print $i;
}

/* exemplo 3 */
$i = 1;
for (;;) {
if ($i > 10) {
break;
}
print $i;
$i++;
}

/* exemplo 4 */
for ($i = 1; $i <= 10; print $i, $i++);

foreach

O PHP4 inclui um construtor foreach, muito parecido com o PERL e outras linguagens. Isto oferece uma maneira fácil
de iterar sobre matrizes. foreach funciona somente com arrays, e lançará um erro se tentar utilizá-lo em uma variável de
qualquer tipo diferente ou em variáveis não inicializadas.

foreach(expressao_array as $valor) instrucoes


foreach(expressao_array as $chave => $valor) instrucoes

A primeira forma varre uma dada matriz dada por expressao_array. Em cada 'loop', o valor do elemento corrente é
atribuído a $valor e o ponteiro interno da matriz é avançado em uma posição (assim, no próxima iteração você estará olhando
para o próximo elemento).
A segunda forma faz a mesma coisa, exceto pelo fato de que a chave do elemento atual será atribuído à variável $chave
em cada iteração.
Nota: Quando o foreach inicia sua primeira execução, o ponteiro interno da matriz é zerado automaticamente para o
primeiro elemento do array. Isto significa que você não precisa chamar reset() antes de um loop foreach .
Nota: foreach tem a habilidade de evitar mensagens de erro com '@'.

$arr = array("one", "two", "three");


reset ($arr);

foreach ($arr as $value) {


echo "Valor: $value<br>\n";
}

foreach ($arr as $key => $value) {


echo "Chave: $key; Valor: $value<br>\n";
}

/* exemplo */
84

$a = array (1, 2, 3, 17);

foreach ($a as $v) {


print "Valor atual de \$a: $v.\n";
}

/* exemplo */

$a = array (
"um" => 1,
"dois" => 2,
"três" => 3,
"dezessete" => 17
);

foreach($a as $k => $v) {


print "\$a[$k] => $v.\n";
}

/* exemplo com arrays multidimensionais */


$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach($a as $v1) {
foreach ($v1 as $v2) {
print "<br> $v2 \n";
}
}

break

break cancela a execução do comando for, foreach while, do..while ou switch.


break aceita um argumento numérico opcional que diz a ele quantas estruturas aninhadas englobadas devem ser
quebradas.

$arr = array ('um', 'dois', 'três', 'quatro', 'PARE', 'cinco');


while (list (, $val) = each ($arr)) {
if ($val == 'PARE') {
break; /* Você poderia colocar 'break 1;' aqui. */
}
echo "$val<br>\n";
}

/* Utilizando o argumento opcional. */

$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo "No 5<br>\n";
break 1; /* Sai somente do switch. */
case 10:
echo "No 10; saindo<br>\n";
break 2; /* Sai do switch e while. */
default:
break;
}
}

continue

continue é usado dentro de estruturas de loops para saltar o resto da iteração do loop atual e continuar a execução no
início da próxima iteração.
continue aceita um argumento numérico opcional que diz a ele de quantos níveis de loops aninhados ele deve saltar até
o fim.
85

while (list ($key, $value) = each ($arr)) {


if (!($key % 2)) { // pula itens pares
continue;
}
do_something_odd ($value);
}

$i = 0;
while ($i++ < 5) {
echo "Fora<br>\n";
while (1) {
echo "&nbsp;&nbsp;Meio<br>\n";
while (1) {
echo "&nbsp;&nbsp;Dentro<br>\n";
continue 3;
}
echo "Isto nunca será exibido.<br>\n";
}
echo "Nem isso.<br>\n";
}

switch

A instrução switch é similar a uma série de instruções IFs seguidas. Em muitas ocasiões, você poderá ter que comparar
a mesma variável (ou expressão) com muitos valores diferentes, executando códigos diferentes dependendo com qual valor ele
se encaixar. É exatamente para isso que a instrução switch faz.
Os exemplos seguintes mostram duas maneiras diferentes de escrever a mesma coisa, uma utilizando uma série de IFs e
a outra utlizando a instrução switch:
if ($i == 0) {
print "i igual a 0";
} elseif ($i == 1) {
print "i igual a 1";
} elseif ($i == 2) {
print "i igual a 2";
}

switch ($i) {
case 0:
print "i igual a 0";
break;
case 1:
print "i igual a 1";
break;
case 2:
print "i igual a 2";
}

Nota: É importante entender como a instrução switch funciona para evitar enganos. A instrução switch executa linha a
linha. No início, nenhum código é executado. Somente quando uma instrução case é encontrada com um valor que combina
com a expressão do switch faz com que o PHP execute as instruções a partir daí. O PHP continua executando as instruções até
o fim do bloco switch ou na primeira vez que encontrar uma instrução break. Se você não escrever uma instrução break no fim
das instruções case, o PHP continuará executando os cases seguintes.

declare

O construtor declare é utilizado para configurar diretivas de execução para blocos de código. A sintaxe do declare é
similar a sintaxe de outros construtores de controle.
declare (diretiva) instrucao

return
86

Quando a instrução return() é executada dentro de uma função, esta função é encerrada e o processamento retorna
ao código que chamou esta função.
A instrução return() pode retornar um valor para o código que a chama, através de uma ariável ou do próprio valor.
Exemplos
<?php
function processa(){
$dado = “processando algo”;
return; //o processo fonte é interrompido aqui
echo “isto não será processado”;
}
/*
o código
return;
pode ser ser substituído por
return $dado;
fazendo que o valor de $dado seja enviado para o processo que chamou a função processa().
*/
?>

Se chamada no escopo global, a execução do script atual será terminada. Se o arquivo do script atual foi incluído com
include() ou require(), então a execução é devolvida para o arquivo chamador. Especificamente para arquivos de
script incluídos com include(), o valor fornecido para return() será devolvido como o valor da chamada include().
Se return() for chamado do arquivo de script principal, então o programa pára. Se o arquivo de script atual é o configurado
em auto_prepend_file ou auto_append_file do php.ini, então a execução desses scripts é finalizada.
Nota: Note que return() é um construtor de linguagem e não uma função, e parênteses em volta do seus argumentos não
são necessários -- de fato, é mais comum não colocá-los que usá-los, sem, entretanto, haver diferença de um jeito ou de outro.

require()

A instrução require() inclui e avalia um arquivo específico.


Informações detalhadas de como essa inclusão funciona está descrita na documentação do include().
require() e include() são idênticos em todas as formas exceto pela manipulação de erros. include() produz um Warning
enquanto require() produzirá um Fatal Error. Em outras palavras, não hesite em utilizar require() se na falta de um arquivo
quiser parar o processamento da página. include() não se comporta da mesma maneira, e o script poderá continuar nessa
situação. Em todo caso, vale a pena confirmar a configuração da diretiva include_path.

Exemplo de require() simples

<?php
require 'prepend.php';
require $somefile;
require ('somefile.txt');
?>

Nota: Até o PHP 4.0.2, havia o seguinte comportamento: require() mesmo que a linha onde ele está nunca seja
executada. É por isso que instruções condicionais não afetam require(). Entretanto, se a linha onde ocorre o require() não for
executada, nada do código incluído do arquivo também será. Similarmente, estruturas de loop não afetam o funcionamento do
require(). Mas o código incluído pela função será submetida ao loop. A instrução require() apenas ocorre uma vez.

include()
A instrução include() inclui e avalia o arquivo informado.
87

A documentação a seguir se aplica também a require(). Esses dois construtores são idênticos a exceção de como eles
manipulam erros. include() produz um Warning enquanto require() produzirá um Fatal Error. Em outras palavras, utilize
require() se você deseja que um arquivo faltando interrompa o processamento da página. include() não se comporta da mesma
maneira, permitindo que o script continue nessas situações. Em todo caso, vale a pena confirmar a configuração da diretiva
include_path.
Quando um arquivo é incluído, seu código entra no escopo de variável da linha onde a inclusão ocorre. Qualquer
variável disponível da linha onde a chamada da inclusão ocorre estará disponível para o arquivo incluído, daquele ponto em
diante.

Exemplo de include() simples


variaveis.php
<?php
$cor = 'verde';
$fruta = 'maçã';
?>

teste.php
<?php
echo "Uma $fruta $cor"; // Uma
include 'vars.php';
echo "Uma $fruta $cor"; // Uma maçã verde
?>

Se o include ocorre dentro de uma função do arquivo principal, então todo o código incluído será executado como se ele
tivesse sido definido dentro daquela função. Da mesma forma, ele seguirá o escopo de variáveis da função.

Incluindo dentro de funções


<?php
function foo() {
global $cor;
include 'variaveis.php';
echo "Uma $fruta $cor";
}

/* variaveis.php está no escopo de foo(), *


.* então $fruta NÃO está disponível fora de *
.* seu escopo. $cor estará porque ela foi *
.* declarada como global */

foo(); // Uma maçã verde


echo "A $fruta $cor"; // Uma maçã
?>

Se "URL fopen wrappers" estão ativas no PHP (normalmente na configuração default), você pode especificar um
arquivo utilizando uma URL (via HTTP ou qualquer outro wrapper suportado --- veja Apêndice I para uma lista dos
protocolos) em vez de um caminho local. Se o servidor apontado interpreta o arquivo informado como código PHP, variáveis
podem ser passadas ao arquivo incluído na URL de requisição como num HTTP GET. Isto não é necessariamente a mesma
coisa que incluir o arquivo e compartilhar o escopo de variável do arquivo principal: o script será executado no servidor
remoto e apenas seu resultado será incluído no script local.
Nota: A versões Windows do PHP anteriores ao PHP 4.3.0 não suportam acesso a arquivos remotos através desta
função, mesmo se allow_url_fopen estiver ativado.

require_once()
88

A instrução require_once() incluí e avalia o arquivo especificado durante a execução do script. Seu comportamento é
similar ao da instrução require(), a não ser que o arquivo informado já tenha sido incluído, não refazendo a operação
novamente. Veja a documentação de require() para maiores informações sobre como essa instrução funciona.
require_once() pode ser utilizado nos casos em que o mesmo arquivo pode acabar sendo incluído mais de uma vez
durante a execução de um script em particular, quando na verdade ele só pode ser incluído apenas uma, para evitar problemas
com redefinições de funções, alterações nos valores de variáveis, etc.
Para exemplos de utilização de require_once() e include_once(), veja o código do PEAR incluído nas últimas
distribuições do código fonte do PHP.
Nota: O comportamento de require_once() e include_once() pode não ser o que você espera em um sistema operacional
insensitivo ao caso (como o Windows). Exemplo 12-8. require_once() é sensitivo ao caso.

require_once("a.php"); // isto irá incluir a.php


require_once("A.php"); // isto irá incluir a.php de novo no Windows!

include_once()

A instrução include_once() inclui e avalia o arquivo especificado durante a execução de um script. Seu comportamento
é similar a instrução include(), a não ser que o arquivo informado já tenha sido incluído, não refazendo a operação novamente.
Como o nome sugere, ele será incluído apenas uma vez.
include_once() pode ser utilizado nos casos em que o mesmo arquivo pode acabar sendo incluído mais de uma vez
durante a execução de um script em particular, quando na verdade ele só pode ser incluído apenas uma para evitar problemas
com redefinições de funções, alterações nos valores de variáveis, etc.
Nota: As mesmas notas referentes a require_once se aplicam a include_once.

Funções definidas pelo usuário

Uma função pode ser definida usando-se a sintaxe como a seguinte:

function foo ($argumento_1, $argumento_2, ..., $argumento_n)


{
echo "Exemplo de função.\n";
return $valor_retornado;
}

Qualquer código PHP válido pode aparecer dentro de uma função, mesmo outras funções e definições de classes.

<?php

//função sem parâmetro e sem retorno


function breakline()
{
echo "<BR>";
}

//função com parâmetro e retorno


function square($b)
{
return ($b*$b);
}

$x = 5;
$sqrt = square($x);
89

echo "O quadrado de $x";


breakline();
echo "é $sqrt";

?>
<?php

//função sem parâmetro e sem retorno


function breakline()
{
echo "<BR>";
}

//função com parâmetro e retorno


function square($b)
{
return ($b*$b);
}

$x = 5;
$sqrt = square($x);
echo "O quadrado de $x";
breakline();
echo "é $sqrt";

breakline();
breakline();

//função com passagem de parâmetro por referência


function add_some_extra( &$string )
{
$string .= ' e alguma coisa mais.';
}

$str = 'Isto é uma string,';


add_some_extra($str);
echo $str; // imprime 'Isto é uma string, e alguma coisa mais.
?>
90

PHP com HTML

Há uma estreita relação entre o PHP e o HTML pelo simples fato deste ser usado para a criação da parte dinâmica das
páginas em HTML. Esta relação foi apresentada em parte no capítulo Referência da Linguagem (Alternado/Escaping do
HTML). Neste capítulo é demostrado como ocorre a formação, transferência e comunicação dos dados entre o HTML e o PHP.

Formulários HTML

O formulário em HTML é o meio mais comum de interação entre o usuário (browser) e a aplicação de manipulação ou
armazenamento de dados.

Figura 22 – Exemplo visual de formulário em HTML

Estes formulários, como o exibido pela Figura 22, são expressos por meio de TAGs do HTML como a construção
abaixo:

<HTML>
<HEAD><title>Exemplo de Formulário</title></HEAD>
<body bgcolor=#F0f0f0>

<FORM name="cad_pessoa" action="cadinteresse.php" method="get">


<FIELDSET>
<LEGEND>Cadastro de Interesse</LEGEND>
<TABLE width=100%>
<TR>
<TD>Informe seu nome:</TD>
<TD><INPUT type="TEXT" name="nome" value="seu" size=50 maxlength=50></TD>
</TR>
<TR>
<TD>Informe seu e-mail:</TD>
<TD><INPUT type="TEXT" name="email" value="seu email" size=50 maxlength=100></TD>
</TR>
<TR>
<TD>Informe sua Idade:</TD>
<TD><INPUT type="TEXT" name="idade" value="18" size=3 maxlength=2></TD>
91

</TR>
<TR>
<TD></TD>
<TD><INPUT TYPE="CHECKBOX" name="recebe_mail" CHECKED> Sim, desejo receber os emails<BR>de
notícias do site </TD>
</TR>
<TR>
<TD colspan=2 align=center><INPUT TYPE=SUBMIT VALUE="Enviar Formulário"></TD>
</TR>
</TABLE>
</fieldset>
</FORM>
</body>
</HTML>

A construção acima mostra um exemplo simples de formulário com três tipos básicos de objetos: campo TEXT, campo
CHECKBOX e botão SUBMIT.
Já a construção abaixo mostra um formulário mais complexo com a maioria dos objetos disponíveis no HTML 4.0 para
a interação com formulários.

<HTML>
<HEAD><title>Exemplo de Formulário</title></HEAD>
<BODY bgcolor=#F0f0f0>
<FORM
NAME="cadastro1"
ACTION="http://www.servidor.com.br/cadastro/recebe_cadastro.php"
METHOD="POST">

<B>Text: </B>
<INPUT TYPE="TEXT" NAME="nomeUsuario" VALUE=""><BR>
<B>CheckBox: </B>
<INPUT TYPE="checkbox" NAME="check1" VALUE="1">Opção 1
<INPUT TYPE="checkbox" NAME="check1" VALUE="2">Opção 2
<INPUT TYPE="checkbox" NAME="check1" VALUE="3" checked>Opção 3<BR>
<B>Select: </B>
<SELECT NAME="select1">
<OPTION>1ª Opção
<OPTION>2ª Opção
<OPTION SELECTED>3ª Opção
<OPTION>4ª Opção
</SELECT><BR>
<B>Radio: </B>
<INPUT TYPE="radio" NAME="radio1" VALUE="1">Opção 1
<INPUT TYPE="radio" NAME="radio1" VALUE="2" checked>Opção 2
<INPUT TYPE="radio" NAME="radio1" VALUE="3">Opção 3<BR>
<B>TextArea: </B>
<TEXTAREA NAME="areatexto" ROWS=5 COLS=50>
Deixe aqui sua mensagem
</TEXTAREA><BR>

<B>Submit: </B> (Envia o Formulário):


<INPUT TYPE="SUBMIT" VALUE="Enviar"><BR>
<B>Reset: </B> (Limpa o Formulário):
<INPUT TYPE="RESET" VALUE="Limpar">
</FORM>
</BODY>
</HTML>
92

Figura 23 – Um formulário mais complexo

Interação entre formulários e PHP

Os objetos do HTML, identificados pela TAG INPUT, possuem uma propriedade chamada NAME. O valor desta
propriedade será o link entre o HTML e o PHP. Quando os dados enviados pelo formulário forem recebidos pela página
encarregada de processá-los (página esta definida no parâmetro ACTION da TAG FORM do formulário), o valor do parâmetro
NAME do objeto INPUT será transformado em uma variável do PHP com o valor que lhe foi atribuído pelo parâmetro
VALUE.
Obrigatoriamente, todas as TAGs INPUT devem conter a propriedade NAME devidamente valorada para que possamos
obter ser valor através de uma variável de mesmo nome no PHP. É o que exibe o trecho de código abaixo, que demonstra a
recepção do formulário exibido na Figura 22 – Exemplo visual de formulário em HTMLFigura 22.

Arquivo cadinteresse.php:
<?PHP
echo "<HTML>
<HEAD><title> Exemplo de Recebimento de Formuário</title></HEAD>
<body bgcolor=#F0f0f0>";

echo "<FIELDSET>";
echo "<LEGEND>Resultado do Cadastro de Interesse</LEGEND>";
echo "<TABLE width=\"100%\">";
echo "<TR>";
echo "<TD>Nome Recebido:</TD>";
echo "<TD><B> $nome </B></TD>";
echo "</TR>";
echo "<TR>";
echo "<TD>Email:</TD>";
echo "<TD><B> $email </B></TD>";
echo "</TR>";
echo "<TR>";
echo "<TD>Idade:</TD>";
echo "<TD><B> $idade </B></TD>";
echo "</TR>";
echo "<TR>";
93

echo "<TD>Deseja receber o email?</TD>";


echo "<TD><B>";
if (isset($recebe_mail)) {
if (strtoupper($recebe_mail)=="ON") {
$recebe="Sim";
}else{
$recebe="Não";
}
}else{
$recebe="Não";
}
echo $recebe;
echo "</B></TD>";
echo "</TR>";
echo "</TABLE>";
echo "</fieldset>";
echo "</body></HTML>";
?>

Ao ser enviado o formulário exibido pela Figura 22, o resultado recebido pelo arquivo cadinteresse.php é processado
gerando a saída vista pela Figura 24.

Figura 24 – Resultado do processamento de um formulário


94

Funções do PHP

O objetivo deste capítulo é introduzir algumas das centenas de funções disponíveis na linguagem PHP.

Funções de texto

addslashes
addslashes -- String entre aspas com barras
Descrição: string addslashes ( string str)

Retorna uma string com barras invertidas antes dos caracteres que precisam estar entre aspas numa pesquisa ao banco
de dados e etc. Estes caracteres estão com aspas simples ('), dupla ("), barra invertida (\) e NUL (o NULL byte).

chr
chr -- Retorna um caracter específico
Descrição: string chr ( int ascii)

Retorna uma string de um único caractere contendo o caracter especificado pelo ascii.

echo
echo -- Exibe uma ou mais strings
Descrição: echo (string arg1 [, string argn...] )

Exibe todos os parâmetros.


echo() não é uma função atualmente (construtor da linguagem) então não é obrigatório usar parênteses. De fato, se você
quer passar mais do que um parâmetro para echo, você não deve fechar os parênteses dentro de parênteses. Não é possível usar
echo() num contexto de variable function, mas você pode usar print() no lugar dela. Exemplo 1. echo() exemplos

<?php
echo "Hello World";

echo "Isto escreve em


linhas múltiplas. As novas linhas serão
geradas assim";

echo "Isto escreve em\nlinhas múltiplas. As novas linhas serão\ngeradas assim";


echo "Isto gera caracteres especiais \"como estas aspas duplas\".";

//Você pode usar variáveis diretamente na instrução echo


$foo = "foobar";
$bar = "barbaz";
echo "foo é $foo"; // foo é foobar

//Já, usando aspas simples, você irá imprimir o nome da variável, e não seu conteúdo
echo 'foo é $foo'; // foo é $foo
?>
95

explode
explode -- Divide uma string em strings
Descrição: array explode ( string separator, string string [, int limit])

Retorna uma matriz de strings, cada uma como substring de string formada pela divisão dela a partir de fronteiras
presentes nela separator. Se limit está definido, a matriz retornada conterá o máximo de limit elementos com o último elemento
contendo o resto da string.
Se separator está como uma string vazia (""), explode() retornará FALSE. Se separator contém um valor que não está
contido em string, então explode() retornará uma matriz contendo a string.

<?php
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);

$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user,$pass,$uid,$gid,$gecos,$home,$shell) = explode(":",$data);
?>

number_format
number_format -- Formata um número com os milhares agrupados
Descrição: string number_format ( float number [, int decimals [, string dec_point
[, string thousands_sep]]])

number_format() retorna uma versão formatada de number. Esta função aceita um, dois ou quatro parâmetros (não três):
Se apenas um parâmetro é dado, number será formatado sem decimais, mas com uma virgula (",") entre cada grupo de milhar.
Se dois parâmetros são dados, number será formatado com o número de casas decimais especificadas em decimals com um
ponto (".") na frente, e uma vírgula (",") entre cada grupo de milhar. Se todos os quatro parâmetros forem dados, number será
formatado com o número de casas decimais em decimals, dec_point ao invés do ponto (".") antes das casas decimais e
thousands_sep ao invés de uma vírgula (",") entre os grupos de milhares.
Nota: Somente o primeiro caractere de thousands_sep é usado. Por exemplo, se você usar foo como o parâmetro
thousands_sep no número 1000, number_format() irá retornar 1f000.

Por exemplo, a notação Francesa usa duas casas decimais, vírgula (',') como separador decimal, e espaço (' ') como
separador de milhar. Isto é feito com a linha :
<?php
$number = 1234.56;

// Notação Inglesa (padrão)


$english_format_number = number_format($number);
// 1,234

// Notação Francesa
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56

$number = 1234.5678;

// Notação Inglesa com separador de milhar


$english_format_number = number_format($number, 2, '.', '');
// 1234.57
?>

ord
ord -- Retorna o valor ASCII do caractere
96

Descrição: int ord ( string string)

Retorna o valor ASCII do primeiro caractere de string. Esta função complementa chr().
<?php
if (ord($str) == 10) {
echo "O primeiro caractere de \$str é uma nova linha.\n";
}
?>

parse_str
parse_str -- Converte a string em variáveis
Descrição: void parse_str ( string str [, array arr])

Converte str como se ela tivesse sido passada via URL e define o valor das variáveis. Se o segundo parâmetro arr
estiver presente, as variáveis são colocadas nesta variável como uma matriz de elementos.
<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first; // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz

parse_str($str, $output);
echo $output['first']; // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz
?>

print
print -- Mostra uma string
Descrição: print ( string arg)

Mostra arg. Retorna TRUE em caso de sucesso ou FALSE em falhas.


print() não é atualmente uma função real (é uma construção da linguagem) então você não precisa usar parêntesis com
ela.
<?php
print("Alô Mundo");
print "print() também funciona sem parênteses.";
print "Isto divide
em múltiplas linhas. As quebras de linha serão
mostradas também";
print "Isto divide\nem múltiplas linhas. As quebras de linha serão\nmostradas também";
print "escapar caracteres é feito \"como isto\".";

// Você pode usar variáveis dentro do


$foo = "foobar";
$bar = "barbaz";

print "foo is $foo"; // foo is foobar

// Usando apóstrofos irá exibir o nome da variável, não o valor


print 'foo is $foo'; // foo is $foo

// Se você não estiver usando outros caracteres, somente mostre a variável


print $foo; // foobar
?>
97

ltrim, rtrim e trim


ltrim -- Retira espaços em branco do início da string
rtrim -- Retira espaços em branco do final da string
trim -- Retira espaços em branco do início e do final da string

Descrição:
string ltrim ( string str [, string charlist])
string rtrim ( string str [, string charlist])
string trim ( string str [, string charlist])

Esta função retorna a string como os espaços em branco retirados do final de str. Sem o segundo parâmetro, rtrim() irá
retirar os seguintes caracteres:
" " (ASCII 32 (0x20)), um espaço comum.
"\t" (ASCII 9 (0x09)), uma tabulação.
"\n" (ASCII 10 (0x0A)), uma nova linha.
"\r" (ASCII 13 (0x0D)), um retorno de carro(ENTER).
"\0" (ASCII 0 (0x00)), o byte NULL.
"\x0B" (ASCII 11 (0x0B)), uma tabulação vertical.

str_repeat
str_repeat -- Repete uma string
Descrição: string str_repeat ( string input, int multiplier)

Retorna input_str repetida multiplier vezes.


<?php
echo str_repeat("-=", 10);
?>

str_replace
str_replace -- Substitui todas as ocorrências de uma string contida em outra.
Descrição: mixed str_replace ( mixed search, mixed replace, mixed subject [, int &count])

<?php
$bodytag = str_replace("%body%", "black", "<body text=%body%>");

$a = "Segunda é dia de descanso";


$b = str_replace("Segunda", "Domingo", $a);
echo $b;
?>

strlen
strlen -- Retorna o tamanho de uma string
Descrição: int strlen ( string str)

strpos
strpos -- Encontra a posição da primeira ocorrência de uma string
Descrição
int strpos ( string haystack, string needle [, int offset])
98

Retorna a posição numérica da primeira ocorrência de needle dentro de haystack.


Se needle não for encontrado, retorna FALSE.
Nota: É fácil confundir os valores de retorno para "caractere encontrado na posição 0" e "caractere não encontrado",
pois 0 e false são equivalentes na avaliação de uma expressão. Para detectar a diferença, a utilização do operador idêntico
(===) resolve este problema, pois além de verificar se o valor da variável é falso, também irá verificar se o tipo da variável é
boolean, diferenciando assim 0 (integer) de FALSE (boolean).
$mystring = "Cabeça";

$pos = strpos($mystring, "b");


if ($pos === false) { // nota: três sinais de igual
// não encontrado...
}else{
echo "$mystring possui um caracter b na posição $pos";
}

strtolower, strtoupper
strtolower -- Converte uma string para minúsculas
strtoupper -- Converte uma string para maiúsculas
Descrição:
string strtolower ( string str)

Descrição: string strtoupper ( string string)

ucfirst, ucwords
ucfirst -- Transforma o primeiro caracter de um string em maiúsculo.
ucwords -- Transforma o primeiro caracter de cada string de uma sentença em maiúsculo.
Descrição:
string ucfirst ( string str)
string ucwords ( string str)

$foo = 'hello world!';


$out = ucfirst($foo); // Hello world!
$out = ucwords($foo); // Hello World!

$bar = 'HELLO WORLD!';


$out = ucfirst($bar); // HELLO WORLD!
$out = ucwords($bar); // HELLO WORLD!
$out = ucfirst(strtolower($bar)); // Hello world!
$out = ucwords(strtolower($bar)); // Hello World!

Funções de verificação

is_array
is_array -- Verifica se a variável é um array.

Descrição: bool is_array (mixed var)

Retorna TRUE ser var é um array, FALSE caso contrário.

is_float()
is_float() -- Verifica se a variável é um número de ponto flutuante.
99

Descrição: bool is_float (mixed var)

Retorna TRUE ser var é um inteiro, FALSE caso contrário.

is_int(), is_integer(), is_long


is_int(), is_integer(), is_long() -- Verifica se a variável é um inteiro.

Descrição:
bool is_int (mixed var)
bool is_integer (mixed var)
bool is_long (mixed var) – alias para is_int()

Retorna TRUE ser var é um boleano, FALSE caso contrário.

is_string()
is_string() -- Verifica se a variável é uma string.

Descrição: bool is_string (mixed var)

Retorna TRUE ser var é um string, FALSE caso contrário.

is_object()
is_object() -- Verifica se a variável é um objeto.

Descrição: bool is_object (mixed var)

Retorna TRUE ser var é um objeto, FALSE caso contrário.

is_file()
is_file() -- Verifica se a variável é um arquivo regular.

Descrição: bool is_file (string filename)

Retorna TRUE ser filename existe e é uma arquivo regular.

isset()
isset() -- Verifica se já foi atribuído um valor a uma variável.

Descrição: boolean isset (mixed var)

Retorna TRUE ser var possui valor, FALSE caso contrário.

<?php
$a = "test";
echo isset ($a); // TRUE
unset ($a);
echo isset ($a); // FALSE
$foo = NULL;
print isset ($foo); // FALSE
?>
100

Funções numéricas

abs, ceil, floor


abs -- Valor absoluto
ceil -- Arredonda frações para cima
floor -- Arredonda frações para baixo
Descrição:
mixed abs ( mixed número)
float floor ( float valor)
float ceil ( float valor)

$abs = abs(-4.2); // $abs = 4.2; (double/float)


$abs2 = abs(5); // $abs2 = 5; (inteiro)
$abs3 = abs(-5); // $abs3 = 5; (inteiro)
echo ceil(4.3); // 5
echo ceil(9.999); // 10
echo floor(4.3); // 4
echo floor(9.999); // 9

pi
pi -- Obtêm o valor de pi
Descrição: float pi ( void)

Retorna o valor aproximado de Pi.

pow
pow -- Potência
Descrição: number pow ( number base, number exp)

Retorna a base elevada ao expoente exp. Se possível, esta função retornará um integer.
Se a potência não puder ser calculada, um alerta será lançado, e pow() retornará FALSE.

<?php
var_dump( pow(2,8) ); // int(256)
echo pow(-1,20); // 1
echo pow(0, 0); // 1
echo pow(-1, 5.5); // erro
?>

rand
rand -- Gera um número aleatório
Descrição: int rand ( [int min, int max])

Se chamado sem os parâmetros opcionais min e max, rand() retornará um pseudo valor randômico entre 0 e
RAND_MAX. Se você precisa de um número aleatório entre 5 e 15 (inclusive), por exemplo, utilize rand (5, 15).

round
round -- Arredonda um número
Descrição: float round ( float val [, int precision])

Retornar um valor arredondado de val em precision casas decimais. precision pode ser negativo ou zero (default).
Cuidado: O PHP não manipula strings como "12,300.2" corretamente por padrão. Veja convertendo de strings.
101

echo round(3.4); // 3
echo round(3.5); // 4
echo round(3.6); // 4
echo round(3.6, 0); // 4
echo round(1.95583, 2); // 1.96
echo round(1241757, -3); // 1242000

sqrt
sqrt -- Raiz quadrada
Descrição: float sqrt ( float arg)

Funções de data

checkdate
checkdate -- Validar uma data Gregoriana
Descrição: bool checkdate ( int month, int day, int year)

Retorna TRUE se a data dada é válida; caso contrário retorna FALSE. Checa a validade da data formada pelos
argumentos. Uma data é considerada válida se:
- year estiver entre 1 e 32767
- month estiver entre 1 e 12
- day estiver dentro do número de dias permitidos para o dado month. years são levados em consideração.

<?php
//Verificando validade de uma data
function valida_data($data){
$dat_parts = explode("/",$data);
if (checkdate($dat_parts[1],$dat_parts[0],$dat_parts[2]))
{
echo "Data $data válida!";
}else{
echo "Data $data inválida!";
}
echo "<BR>";
}
valida_data("10/03/2001");
valida_data("32/03/2001");
?>

date
date -- Formata a data e a hora local
Descrição: string date ( string format [, int timestamp])

Retorna uma string de acordo com o formato da string usando o inteiro dado timestamp ou a a hora corrente local se
nenhum timestamp é dado.
Nota: A linha válida de um timestamp é tipicamente de Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07
GMT. (Estas são as datas que correspodem aos mínimos e máximos valores para um inteiro de 32-bit definido). No windows
esta linha é limitada de 01-01-1970 para 19-01-2038.
Os seguintes caracteres são reconhecidos na estrutura da string:
a - "am" ou "pm"
A - "AM" ou "PM"
B - Swatch Internet time
102

d - dia do mês, 2 digitos com zeros zeros à esquerda; i.e. "01" até "31"
D - dia da semana, texto, 3 letras; e.g. "Fri"
F - mês, texto, longo; e.g. "January"
g - hora, Forma com 12-horas sem zeros à esquerda; i.e. "1" até "12"
G - hora, Forma com 24-horas sem zeros à esquerda; i.e. "0" até "23"
h - hora, Forma com 12-horas; i.e. "01" até "12"
H - hora, Forma com 24-horas; i.e. "00" até "23"
i - minutos; i.e. "00" até "59"
I (capital i) - "1" Se no horário de verão, senão "0".
j - Dia do mês sem zeros à esquerda; i.e. "1" até "31"
l (minúscula 'L') - dia da semana, texo, longo; e.g. "Friday"
L - booleano se é um ano bissexto; i.e. "0" ou "1"
m - mês; i.e. "01" até "12"
M - mês, texto, 3 letras; e.g. "Jan"
n - mês sem zeros à esquerda; i.e. "1" até "12"
O - Diferença entre o horário de Greenwich em horas; e.g. "+0200"
r - RFC 822 formatted date; e.g. "Thu, 21 Dec 2000 16:01:07 +0200"
s - segundos; i.e. "00" até "59"
S - Sufixo ordinal para o dia do mês, 2 characteres; i.e. "st", "nd", "rd" or "th"
t - número de dias do dado mês; i.e. "28" até "31"
T - Timezone setting desta máquina; e.g. "EST" or "MDT"
U - segundos desde a época Unix (January 1 1970 00:00:00 GMT)
w - dia da semana, numérico, i.e. "0" (domingo) até "6" (Sábado)
W - ISO-8601 números de semanas do ano, semana começa na segunda-feira
Y - ano, 4 dígitos; e.g. "1999"
y - ano, 2 dígitos; e.g. "99"
z - dia do ano; i.e. "0" até "365"
Z - timezone offset em segundos (i.e. "-43200" to "43200"). O offset para as timezones oeste de UTC é sempre
negativa, e para as leste de UTC é sempre positiva.

$today = date("d/m/Y"); // 10/03/2001


$today = date("m.d.y"); // 03.10.01
$today = date("j, n, Y"); // 10, 3, 2001
$today = date("Ymd"); // 20010310
$today = date('h-i-s, j-m-y, it is w Day z '); // 05-16-17, 10-03-01, 1631 1618 6 Fripm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // It is the 10th day.
$today = date("D M j G:i:s T Y"); // Sat Mar 10 15:16:08 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:17 m is month
$today = date("H:i:s"); // 17:16:17

É possível usar date() e mktime() juntos para encontrar datas no futuro ou no passado.

$tomorrow = mktime (0,0,0,date("m") ,date("d")+1,date("Y"));


$lastmonth = mktime (0,0,0,date("m")-1,date("d"), date("Y"));
$nextyear = mktime (0,0,0,date("m"), date("d"), date("Y")+1);

getdate
getdate -- Obtém informações data/hora
Descrição array getdate ( [int timestamp])
103

Retorna uma matriz contendo a data do timestamp, ou a hora corrente local se se nenhum timestamp é dado, como a
seguintes elementos da matriz:
"seconds" - segundos
"minutes" - minutos
"hours" - horas
"mday" - dia do ano
"wday" - dia da semana, numérico : de 0 como Domingo até 6 como Sábado
"mon" - mês, numérico
"year" - ano, numérico
"yday" - dia do ano, numérico; i.e. "299"
"weekday" - dia da semana, texo, completo; i.e. "Friday"
"month" - mês, texto, completo; i.e. "January"

<?php
$today = getdate();
$month = $today['month'];
$mday = $today['mday'];
$year = $today['year'];
echo "$month $mday, $year";
?>

Funções de manipulação de arrays

Arrays são matrizes simples e multidimensionais, e podem ser criados pelo usuário ou por outras funções. Existem
diversas funções específicas para bancos de dados para preencher arrays com os dados retornados em consultas, e vários outros
tipos de funções também retornam arrays.

array
array -- Cria um array
Descrição: array array ( [mixed ...])

Retorna um array a partir dos valores fornecidos. Índices podem ser atribuidos aos valores através do operador =>.
Nota: array() é uma estrutura utilizada para representar literais de arrays, e não uma função.

$frutas = array (
"frutas" => array ("a"=>"laranja", "b"=>"banana", "c"=>"melancia"),
"numeros" => array (1, 2, 3, 4, 5, 6),
"buracos" => array ("primeiro", 5 => "segundo", "terceiro")
);

Indexação automática com array()

$array = array( 1, 1, 1, 1, 1, 8 => 1, 4 => 1, 19, 3 => 13);


print_r($array);
//vai mostrar : Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => 13
[4] => 1
[8] => 1
[9] => 19
)
$trimestre = array(1 => 'Janeiro', 'Fevereiro', 'Marco');
print_r($trimestre);
//vai mostrar : Array
104

(
[1] => 'Janeiro'
[2] => 'Fevereiro'
[3] => 'Marco'
)

array_keys
array_keys -- Retorna todas as chaves de um array
Descrição: array array_keys ( array input [, mixed search_value])

array_keys() retorna as chaves, numéricas e string, do array input.


Se o parâmetro opcional search_value for especificado, então apenas as chaves para esse valor serão retornadas. Do
contrário, todas as chaves de input serão retornadas.

$array = array (0 => 100, "cor" => "vermelho");


print_r(array_keys ($array));

$array = array ("azul", "vermelho", "verde", "azul", "azul");


print_r(array_keys ($array, "azul"));

$array = array ("cor" => array("azul", "vermelho", "verde"), "tamanho" => array("pequeno", "medio",
"grande"));
print_r(array_keys ($array));

array_merge
array_merge -- Funde dois ou mais arrays
Descrição: array array_merge ( array array1, array array2 [, array ...])

$array1 = array ("cor" => "vermelho", 2, 4);


$array2 = array ("a", "b", "cor" => "verde", "forma" => "trapezoide", 4);
$result = array_merge ($array1, $array2);
//Neste caso $result será: Array
(
[cor] => verde
[0] => 2
[1] => 4
[2] => a
[3] => b
[forma] => trapezoide
[4] => 4
)

array_push
array_push -- Adiciona um ou mais elementos no final de um array
Descrição: int array_push ( array array, mixed var [, mixed ...])

array_push() trata array como uma pilha, e adiciona as variáveis passadas como argumentos no final de array. O
comprimento de array aumenta de acordo com o número de variáveis adicionadas.

$cesta = array ("laranja", "morango");


array_push ($cesta, "melancia", "batata");

//Neste caso $stack teria os seguintes elementos: Array


(
[0] => laranja
[1] => morango
[2] => melancia
[3] => batata
)

array_pop
array_pop -- Retira um elemento do final do array
Descrição: mixed array_pop ( array array)
105

array_pop() retira e retorna o último elemento de array, diminuindo array em um elemento. Se array estiver vazio (ou se
não for um array), o valor NULL é retornado.

$cesta = array ("laranja", "banana", "melancia", "morango");


$fruta = array_pop ($cesta);
//Depois disso, $cesta terá 3 elementos: Array
(
[0] => laranja
[1] => banana
[2] => melancia
)

reset
reset -- Faz o ponteiro interno de um array apontar para o seu primeiro elemento
Descrição: mixed reset ( array array)

reset() retrocede o ponteiro interno de array para o primeiro elemento.


reset() retorna o valor do primeiro elemento do array.

list
list -- Cria variáveis como se fossem arrays
Descrição
void list ( mixed ...)

Assim como array(), não é exatamente uma função, e sim uma construção da própria linguagem. list() é usada para criar
uma lista de variáveis em apenas um operação.
Nota: list() só funciona em arrays com índices numéricos e assume que esses índices começam de 0 (zero).

<?php
$info = array('Café', 'marrom', 'cafeína');

// Listando todas as variáveis


list($bebida, $cor, $substancia) = $info;
print "$bebida is $cor e $substancia a faz especial.\n";
?>

Funções de conexão com o MySQL

Para acessar o banco de dados MySQL deve-se concluir os seguintes passos:


1. conectar com o MySQL;
2. escolher a base de dados;
3. executar uma consulta;
4. obter as linhas de registro;
5. encerrar a consulta (para liberar a memória);
6. encerrar a conexão com o MySQL.

Os comandos necessários para a execução de uma consulta são:


mysql_connect - efetua a conexão retornando um ID.
mysql_select_db - indica para o MySQL em qual BD efetuar as consultas.
mysql_query - executa uma consulta obtendo os resultados, retornando um set de registros.
mysql_fetch_array - retorna uma linha de registro do set de registros retornados pelo comando mysql_query.
mysql_free_result - libera os recursos de memória.
106

mysql_close - encerra uma conexão.

<?PHP
echo "<HTML>
<body>
<h1><p align=CENTER>Lista de Clientes</P></h1>
<p align=CENTER>";

//Inicia a conexão
$con = mysql_connect('localhost','root','root');

//Identifica o banco de dados


mysql_select_db('aula8',$con);

//Escreve a query
$sql = "Select * from clientes order by cli_nome";

//executa a query
$result = mysql_query($sql,$con);

$color="#FFCC55";
$color2="#FFFF5E";
$color3="#FFFFAA";

echo "<TABLE border=0 BGCOLOR=$color2><TR>


<TD BGCOLOR=$color><B>Código</B></TD>
<TD BGCOLOR=$color><B>Nome</B></TD>
<TD BGCOLOR=$color><B>CPF</B></TD></TR>";

//obtém uma linha de registro atribuindo como um array

while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {


echo "<TR>";
echo "<TD ALIGN=RIGHT BGCOLOR=$color3>";
echo $row["cli_id"];
echo "</TD>";
echo "<TD ALIGN=LEFT BGCOLOR=$color3><B>";
echo $row["cli_nome"];
echo "</B></TD>";
echo "<TD ALIGN=RIGHT BGCOLOR=$color3>";
echo $row["cli_cpf"];
echo "</TD>";
echo "</TR>";
}

//libera o recurso de memória utilizado pela consulta


mysql_free_result($result);

//encerra a conexão com o banco de dados


mysql_close($con);

echo "</TABLE>
</p>
</body>
</HTML>";
?>

mysql_connect
mysql_connect -- Abre uma conexão com o servidor MySQL
Descrição: resource mysql_connect ( [string server [, string username [, string password [, bool
new_link [, int client_flags]]]]])

Retorna um identificador de link (link_identifier) com o MySQL se der certo, ou FALSE se falhar.

<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
or die("Não pude conectar: " . mysql_error());
print ("Conectado");
mysql_close($link);
?>

mysql_select_db
mysql_select_db -- Seleciona um banco de dados MySQL
107

Descrição:
bool mysql_select_db ( string database_name [, resource link_identifier])

mysql_query
mysql_query -- Realiza uma query MySQL
Descrição:
resource mysql_query ( string query [, resource link_identifier])

mysql_query() envia uma query para o banco de dados ativo no servidor da conexão informada em link_identifier. Se o
parâmetro link_identifier não é especificado, a ultima conexão aberta é usada. Se nenhuma conexão esta aberta, a função tenta
estabelecer uma conexão como mysql_connect() seja chamada sem argumentos e usa-a. O resultado é guardado em buffer.
Nota: A string da query não deve terminar com ponto e virgula(;).

<php
$result = mysql_query("SELECT * from clientes")
or die("Query invalida: " . mysql_error());
?>

mysql_fetch_array
mysql_fetch_array -- Busca o resultado de uma linha e o coloca como uma matriz associativa, matriz numérica ou
ambas.
Descrição:
array mysql_fetch_array ( resource result [, int result_type])

Retorna uma matriz que corresponde a linha buscada, ou FALSE se não houverem mais linhas.
<?php
mysql_connect("localhost", "mysql_user", "mysql_password") or
die("Não pude conectar: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");


while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
printf ("ID: %s Name: %s", $row[0], $row["name"]);
}
mysql_free_result($result);
?>

mysql_free_result
mysql_free_result -- Libera a memória do resultado de uma query
Descrição:
bool mysql_free_result ( resource result)

mysql_free_result() irá liberar toda a memória usada com o identificador de resultado result.

mysql_close
mysql_close -- Fecha a conexão com o MySQL
Descrição:
bool mysql_close ( [resource link_identifier])

Retorna TRUE em caso de sucesso ou FALSE em falhas.

<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
or die("Não pude conectar: " . mysql_error());
108

print ("Conectado!");
mysql_close($link);
?>

mysql_affected_rows
mysql_affected_rows -- Devolve o número de linhas afetadas na operação anterior com o MySQL
Descrição:
int mysql_affected_rows ( [resource link_identifier])

mysql_affected_rows() retorna o número de linhas afetadas pela ultima query INSERT, UPDATE ou DELETE
associada a link_identifier. Se o identificador de link não é especificado, o ultimo link aberto por mysql_connect() é utilizado.
Nota: Se você esta usando transações, você deve chamar mysql_affected_rows() após sua query INSERT, UPDATE,
ou DELETE, não depois de commit.

<?php
/* Conecta com o banco de dados */
mysql_pconnect("localhost", "mysql_user", "mysql_password") or
die ("Não pude conectar: " . mysql_error());

/* Este deve retornar o número coreto de registros excluídos */


mysql_query("DELETE FROM mytable WHERE id < 10");
printf ("Registros excluídos: %d\n", mysql_affected_rows());

/* Sem a clausula where no comando delete, deve retornar 0 */


mysql_query("DELETE FROM mytable");
printf ("Registros excluídos: %d\n", mysql_affected_rows());
?>

mysql_num_rows
mysql_num_rows -- Retorna o número de linhas em um resultado
Descrição: int mysql_num_rows ( resource result)

mysql_num_rows() retorna o número de linhas em um resultado. Este comando é valido apenas para o SELECT. Para
obter o número de linhas afetadas por INSERT, UPDATE ou DELETE, use mysql_affected_rows().

<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("database", $link);
$result = mysql_query("SELECT * FROM table1", $link);
$num_rows = mysql_num_rows($result);
echo "$num_rows Rows\n";
?>
109

APÊNDICES

Apêndice A - Estrutura de teste do banco de dados e Modelo ER

Estrutura de dados utilizada nos exemplos deste manual.

-- MySQL Administrator dump 1.4


-- Server version 4.1.10-nt
-- Create schema loja

CREATE DATABASE loja;


USE loja;

-- Table structure for table `loja`.`clientes`


CREATE TABLE `clientes` (
`cli_id` int(5) unsigned NOT NULL default '0',
`cli_nome` varchar(50) NOT NULL default '',
`cli_cpf` varchar(15) default NULL,
`cli_endereco` varchar(255) default NULL,
`cli_telefone` varchar(50) default NULL,
PRIMARY KEY (`cli_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=latin1
COMMENT='Armazena os dados dos clientes';

INSERT INTO `clientes` (`cli_id`,`cli_nome`,`cli_cpf`,`cli_endereco`,`cli_telefone`) VALUES


(1,'Alessandro','1111111111',NULL,NULL),
(2,'Anderson','1111111111',NULL,NULL),
(3,'Andriano','1111111111',NULL,NULL),
(4,'Soares','1111111111',NULL,NULL),
(5,'Deisi','1111111111',NULL,NULL),
(6,'Teresinha','1111111111',NULL,NULL),
(7,'Estela','1111111111',NULL,NULL),
(8,'Fernanda','1111111111',NULL,NULL),
(9,'Flavio','1111111111',NULL,NULL),
(10,'Gabriel','1111111111',NULL,NULL),
(11,'Giovani','1111111111',NULL,NULL),
(12,'Idalina','1111111111',NULL,NULL),
(13,'Janine','1111111111',NULL,NULL);

-- Table structure for table `loja`.`item_pedidos`


CREATE TABLE `item_pedidos` (
`ped_id` bigint(8) unsigned NOT NULL default '0',
`pro_id` int(5) unsigned NOT NULL default '0',
`itn_quantidade` double(5,2) NOT NULL default '0.00',
`itn_valor_indiv` double(8,2) NOT NULL default '0.00',
`itn_valor_total` double(8,2) NOT NULL default '0.00',
PRIMARY KEY (`ped_id`,`pro_id`),
110

KEY `FK_produtos` (`pro_id`),


CONSTRAINT `FK_pedidos` FOREIGN KEY (`ped_id`) REFERENCES `pedidos` (`ped_id`),
CONSTRAINT `FK_produtos` FOREIGN KEY (`pro_id`) REFERENCES `produtos` (`pro_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=latin1
COMMENT='Armazena os produtos adicionados num pedido';

INSERT INTO `item_pedidos` (`ped_id`,`pro_id`,`itn_quantidade`,`itn_valor_indiv`,`itn_valor_total`)


VALUES
(1,5,1.00,320.00,320.00),
(1,17,3.00,75.00,225.00),
(2,4,1.00,295.00,295.00),
(2,16,1.00,540.00,540.00);

-- Table structure for table `loja`.`pedidos`


CREATE TABLE `pedidos` (
`ped_id` bigint(8) unsigned NOT NULL auto_increment,
`ped_data` date NOT NULL default '0000-00-00',
`ped_valor_total` double(8,2) NOT NULL default '0.00',
`cli_id` int(5) unsigned NOT NULL default '0',
`ped_entregue` char(1) default NULL COMMENT 'se o pedido ja foi entregue = S, senao N',
PRIMARY KEY (`ped_id`),
KEY `FK_cliente` (`cli_id`),
CONSTRAINT `FK_cliente` FOREIGN KEY (`cli_id`) REFERENCES `clientes` (`cli_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=latin1
COMMENT='Armazena um pedido de produtos que um cliente efetuou';

INSERT INTO `pedidos` (`ped_id`,`ped_data`,`ped_valor_total`,`cli_id`,`ped_entregue`) VALUES


(1,'2002-09-27',545.00,12,'N'),
(2,'2002-09-27',835.00,7,'N');

-- Table structure for table `loja`.`produtos`


CREATE TABLE `produtos` (
`pro_id` int(5) unsigned NOT NULL auto_increment,
`pro_nome` varchar(50) NOT NULL default '',
`pro_unidade` varchar(5) NOT NULL default '',
`pro_preco` double(8,2) NOT NULL default '0.00',
`pro_estoque` double(10,5) NOT NULL default '0.00000' COMMENT 'Quantidade do produto em estoque.',
PRIMARY KEY (`pro_id`),
KEY `pro_nome` (`pro_nome`)
) ENGINE=InnoDB
DEFAULT CHARSET=latin1
COMMENT='Armazena os produtos à venda';

INSERT INTO `produtos` (`pro_id`,`pro_nome`,`pro_unidade`,`pro_preco`,`pro_estoque`) VALUES


(1,'HD 20 GB','PC',240.00,10.00000),
(2,'HD 30 GB','PC',250.00,10.00000),
(3,'HD 40 GB','PC',270.00,10.00000),
(4,'HD 40 GB 7200 RPM','PC',295.00,10.00000),
(5,'HD 60 GB','PC',320.00,10.00000),
(6,'HD 60 GB 7200 RPM','PC',375.00,10.00000),
(7,'HD 80 GB','PC',390.00,10.00000),
(8,'HD 80 GB 7200 RPM','PC',410.00,10.00000),
(9,'PROCESSADOR AMD DURON 1.1 GHZ','PC',155.00,10.00000),
111

(10,'PROCESSADOR AMD DURON 1.2 GHZ','PC',170.00,10.00000),


(11,'PROCESSADOR ATHLON 1.33 GHZ','PC',240.00,10.00000),
(12,'PROCESSADOR ATHLON 1.6 GHZ XP','PC',270.00,10.00000),
(13,'PROCESSADOR ATHLON 1.8 GHZ XP','PC',310.00,10.00000),
(14,'PROCESSADOR ATHLON 2.0GHZ XP','PC',470.00,10.00000),
(15,'PROCESSADOR PENTIUM IV 1.6 GHZ','PC',510.00,10.00000),
(16,'PROCESSADOR PENTIUM IV 1.7 GHZ','PC',540.00,10.00000),
(17,'MEMORIA 128 MB DIMM','PC',75.00,10.00000),
(18,'MEMORIA 256 MB DDR','PC',220.00,10.00000),
(19,'MEMORIA 256 MB DIMM','PC',135.00,10.00000);
INSERT INTO `produtos` (`pro_id`,`pro_nome`,`pro_unidade`,`pro_preco`,`pro_estoque`) VALUES
(20,'GRAVADOR BTC 40X24X10','PC',175.00,10.00000),
(21,'GRAVADOR LG 40X32X10','PC',220.00,10.00000),
(22,'GRAVADOR 40X32X10 / DVD 16X','PC',330.00,10.00000),
(23,'DRIVE CD-ROM 52X LG','PC',95.00,10.00000),
(24,'DRIVE ZIP INTERNO 100 MB NEC','PC',160.00,10.00000),
(25,'DRIVE ZIP EXTERNO 100 MB IOMEGA','PC',295.00,10.00000),
(26,'MONITOR PROVIEW 15 0.28','PC',370.00,10.00000),
(27,'MONITOR LG 15 0.28','PC',410.00,10.00000),
(28,'MONITOR LG 17 0.28','PC',530.00,10.00000),
(29,'MOTHERBOARD M598/M586(Á/V/F/R)','PC',215.00,10.00000),
(30,'MOTHERBOARD M755(Á/V/F/R)','PC',170.00,10.00000),
(31,'MOTHERBOARD SHUTTLE AV40 (P4)','PC',280.00,10.00000),
(32,'MOTHERBOARD SOYO 6VBA','PC',260.00,10.00000),
(33,'MOTHERBOARD SOYO 7VBA','PC',260.00,10.00000),
(34,'MOTHERBOARD SOYO K7VTA-PRO','PC',310.00,10.00000),
(35,'MOTHERBOARD M810 PC-CHIPS','PC',220.00,10.00000),
(36,'MOTHERBOARD M812 PC-CHIPS','PC',220.00,10.00000),
(37,'MOTHERBOARD ASUS A7S 333','PC',310.00,10.00000);
INSERT INTO `produtos` (`pro_id`,`pro_nome`,`pro_unidade`,`pro_preco`,`pro_estoque`) VALUES
(38,'MOTHERBOARD NETGATE P/ ATHLON (A/V)','PC',280.00,10.00000),
(39,'MOTHERBOARD P4 925 PCCHIPS LMR','PC',295.00,10.00000),
(40,'MODEM LUCENT 56K V.90','PC',45.00,10.00000),
(41,'MODEM US ROBOTICS 56K ISA','PC',175.00,10.00000),
(42,'MODEM US ROB. 56K ISA JUMP.','PC',190.00,10.00000),
(43,'MODEM US ROBOTICS 56K PCI','PC',85.00,10.00000),
(44,'PLACA VÍDEO TNT2 32MB AGP','PC',145.00,10.00000),
(45,'PLACA VÍDEO GFORCE4 MX420 64MB TV','PC',280.00,10.00000),
(46,'PLACA VÍDEO GFORCE2 MX 400 64MB TV','PC',195.00,10.00000),
(47,'PLACA CAPT. VÍDEO PROLINK TV/FM','PC',195.00,10.00000),
(48,'PLACA CREATIVE LIVE VALUE','PC',160.00,10.00000),
(49,'PLACA SOM CREATIVE 16 BITS','PC',75.00,10.00000),
(50,'PLACA SOM 3D 16 BITS','PC',35.00,10.00000),
(51,'PLACA REDE ENCORE 10/100','PC',35.00,10.00000),
(52,'HUB 8 PORTAS ENCORE 10/10','PC',75.00,10.00000),
(53,'HUB 16 PORTAS ENCORE 10/10','PC',165.00,10.00000),
(54,'IMPRESSORA LEXMARK Z12','PC',160.00,10.00000);
INSERT INTO `produtos` (`pro_id`,`pro_nome`,`pro_unidade`,`pro_preco`,`pro_estoque`) VALUES
(55,'IMPRESSORA HP860','PC',580.00,10.00000),
(56,'HD 20 GB','PC',240.00,10.00000),
(57,'HD 30 GB','PC',250.00,10.00000),
(58,'HD 40 GB','PC',270.00,10.00000),
(59,'HD 40 GB 7200 RPM','PC',295.00,10.00000),
(60,'HD 60 GB','PC',320.00,10.00000),
(61,'HD 60 GB 7200 RPM','PC',375.00,10.00000),
112

(62,'HD 80 GB','PC',390.00,10.00000),
(63,'HD 80 GB 7200 RPM','PC',410.00,10.00000),
(64,'PROCESSADOR AMD DURON 1.1 GHZ','PC',155.00,10.00000),
(65,'PROCESSADOR AMD DURON 1.2 GHZ','PC',170.00,10.00000),
(66,'PROCESSADOR ATHLON 1.33 GHZ','PC',240.00,10.00000),
(67,'PROCESSADOR ATHLON 1.6 GHZ XP','PC',270.00,10.00000),
(68,'PROCESSADOR ATHLON 1.8 GHZ XP','PC',310.00,10.00000),
(69,'PROCESSADOR ATHLON 2.0GHZ XP','PC',470.00,10.00000),
(70,'PROCESSADOR PENTIUM IV 1.6 GHZ','PC',510.00,10.00000),
(71,'PROCESSADOR PENTIUM IV 1.7 GHZ','PC',540.00,10.00000),
(72,'MEMORIA 128 MB DIMM','PC',75.00,10.00000),
(73,'MEMORIA 256 MB DDR','PC',220.00,10.00000);
INSERT INTO `produtos` (`pro_id`,`pro_nome`,`pro_unidade`,`pro_preco`,`pro_estoque`) VALUES
(74,'MEMORIA 256 MB DIMM','PC',135.00,10.00000),
(75,'GRAVADOR BTC 40X24X10','PC',175.00,10.00000),
(76,'GRAVADOR LG 40X32X10','PC',220.00,10.00000),
(77,'GRAVADOR 40X32X10 / DVD 16X','PC',330.00,10.00000),
(78,'DRIVE CD-ROM 52X LG','PC',95.00,10.00000),
(79,'DRIVE ZIP INTERNO 100 MB NEC','PC',160.00,10.00000),
(80,'DRIVE ZIP EXTERNO 100 MB IOMEGA','PC',295.00,10.00000),
(81,'MONITOR PROVIEW 15 0.28','PC',370.00,10.00000),
(82,'MONITOR LG 15 0.28','PC',410.00,10.00000),
(83,'MONITOR LG 17 0.28','PC',530.00,10.00000),
(84,'MOTHERBOARD M598/M586(Á/V/F/R)','PC',215.00,10.00000),
(85,'MOTHERBOARD M755(Á/V/F/R)','PC',170.00,10.00000),
(86,'MOTHERBOARD SHUTTLE AV40 (P4)','PC',280.00,10.00000),
(87,'MOTHERBOARD SOYO 6VBA','PC',260.00,10.00000),
(88,'MOTHERBOARD SOYO 7VBA','PC',260.00,10.00000),
(89,'MOTHERBOARD SOYO K7VTA-PRO','PC',310.00,10.00000),
(90,'MOTHERBOARD M810 PC-CHIPS','PC',220.00,10.00000),
(91,'MOTHERBOARD M812 PC-CHIPS','PC',220.00,10.00000);
INSERT INTO `produtos` (`pro_id`,`pro_nome`,`pro_unidade`,`pro_preco`,`pro_estoque`) VALUES
(92,'MOTHERBOARD ASUS A7S 333','PC',310.00,10.00000),
(93,'MOTHERBOARD NETGATE P/ATHLON (A/V)','PC',280.00,10.00000),
(94,'MOTHERBOARD P4 925 PCCHIPS LMR','PC',295.00,10.00000),
(95,'MODEM LUCENT 56K V.90','PC',45.00,10.00000),
(96,'MODEM US ROBOTICS 56K ISA','PC',175.00,10.00000),
(97,'MODEM US ROB. 56K ISA JUMP.','PC',190.00,10.00000),
(98,'MODEM US ROBOTICS 56K PCI','PC',85.00,10.00000),
(99,'PLACA VÍDEO TNT2 32MB AGP','PC',145.00,10.00000),
(100,'PLACA VÍDEO GFORCE4 MX420 64MB TV','PC',280.00,10.00000),
(101,'PLACA VÍDEO GFORCE2 MX 400 64MB TV','PC',195.00,10.00000),
(102,'PLACA CAPT. VÍDEO PROLINK TV/FM','PC',195.00,10.00000),
(103,'PLACA CREATIVE LIVE VALUE','PC',160.00,10.00000),
(104,'PLACA SOM CREATIVE 16 BITS','PC',75.00,10.00000),
(105,'PLACA SOM 3D 16 BITS','PC',35.00,10.00000),
(106,'PLACA REDE ENCORE 10/100','PC',35.00,10.00000),
(107,'HUB 8 PORTAS ENCORE 10/10','PC',75.00,10.00000),
(108,'HUB 16 PORTAS ENCORE 10/10','PC',165.00,10.00000);
INSERT INTO `produtos` (`pro_id`,`pro_nome`,`pro_unidade`,`pro_preco`,`pro_estoque`) VALUES
(109,'IMPRESSORA LEXMARK Z12','PC',160.00,10.00000),
(110,'IMPRESSORA HP860','PC',580.00,10.00000);
113

Modelo ER
114

Apêndice B – Exercícios de PHP

1) Identifique Correto ou Incorreto para todas as variáveis acerca de sua nomenclatura, identificando também o
tipo de dados de cada uma que estiver correta. Para as variáveis incorretas, descreva o porquê de estar errado.
$a = “10”; ____________________________________________________
$_a = 10; ____________________________________________________
$1 = '10'; ____________________________________________________
$1a = 2.58; ____________________________________________________
$a = file(“arquivo”); __________________________________________
$arq$ = 02; ____________________________________________________
$arq* = 2.58; __________________________________________________
&$_a = 10; ___________________________________________________

2) Crie um programa que gere randomicamente 50 números entre 1 e 100. Imprima, um abaixo do outro, os
valores que forem divisíveis por três;

3) Crie um programa que gere randomicamente 50 números entre 300 e 1000. Imprima, um abaixo do outro,
todos os valores. Efetue automaticamente a contagem dos valores pares e dos valores ímpares imprimindo, ao final do
programa, a seguintes saídas: Total de números pares: (valor), Total de números Ímpares: (valor).

4) Um aluno realizou três provas de uma disciplina. Considerando a regra “média = (prova1 + prova2 + prova3) /
3”, imprima o valor da média e a situação “Aprovado” se a média for maior ou igual a 7 e “Em recuperação” caso
contrário. Implemente um formulário para entrada das notas.

5) Uma livraria está fazendo uma promoção. Na compra de um livro, 2 ou + cópias do livro o desconto é de 5%,
para 5 ou + é 10%, para 10 ou + é 15% e para 20 ou + é 20%. Cada livro custa R$ 35,00. Implemente um programa
em que o usuário informe o número de cópias que deseja comprar e lhe seja exibido o valor total, o percentual de
desconto e o valor final (total-desconto).

6) Dado um array coma as temperaturas diárias de uma semana “ seg=25, ter=23, qua=28, qui=32, sex=30,
sab=29, dom=31 ”, calcule a média dos valores e imprima os dias da semana e a temperatura cujo valor ultrapassou a
média. Tabule os dados dentro de uma tabela html.

7) Crie um array onde armazene as letras do alfabeto (da A a Z) atribuindo a cada uma o valor de 1 a 25, de forma
aleatória, não repetindo o valor. Dado um nome informado em um formulário, imprima a seqüência de valores
correspondentes a cada letra.

8) Dados os arrays A=(5,44,23,1,0,18,17) e B=(32,115,48,55,51,0,-48) efetue:


1. Imprima os valores dos arrays A e B, cada array em uma única linha, cada valor separado por vírgula;
115

2. Imprima a multiplicação de valores do mesmo índice do array A pelo array B, cada valor separado por
vírgula;
3. Imprima a adição de valores do mesmo índice do array A pelo array B, cada valor separado por vírgula;
4. Imprima a subtração de valores do mesmo índice do array A pelo array B, cada valor separado por vírgula;
5. Imprima a média aritmética dos valores doarray A e do array B;

9) Escreva uma função que receba três números por parâmetro e retorne um array contendo os valores ordenados
do maior para o menor.

10) Implemente um formulário que possa ser informado três números e os coloque em ordem decrescente. Deve
ser utilizada a função da questão 9.

11) Elabore um algoritmo que imprima um valor por extenso, de 1 até 20, fornecido pelo usuário.

12) Construa uma função que receba por parâmetro uma string qualquer e o nome de uma cor (por exemplo RED)
e retorne o texto dentro das tags html <FONT color=RED>texto</FONT>, com a cor de acordo com o que foi
recebido por parâmetro.

13) Construa uma função que receba por parâmetro uma string qualquer e um tamanho (por exemplo 200) e
retorne o texto dentro de uma tabela no tamanho especificado, com borda=1.

14) Construa uma função que receba por parâmetro um array contendo uma quantidade variável de dados (string) e
retorne o array em ordem alfabética.

15) Construa uma função que receba por parâmetro uma string qualquer, um tamanho (por exemplo 200) , uma cor
(tendo como valor default #F0F0F0), e retorne o texto dentro de uma tabela , com borda=1, no tamanho e cor
especificado.
116

REFERÊNCIAS

Para melhor aproveitamento deste manual, as referências estão subdivididas em três categorias de assuntos específicos:
links para recursos de software, links para código fonte e listas de discussão.

Recursos de Software

Os recursos listados abaixo são todos Open Source, devendo-se porém consultar suas respectivas licenças antes do uso.
http://www.php.net - Site oficial da linguagem com download e documentação. Neste site está disponível o
interpretador PHP para todas as plataformas de sistemas operacionais. Em inglês / português.
http://httpd.apache.org - Site oficial da Apache Software Fundation linguagem para o servidor web Apache, com
download e documentação. Neste site está disponível o servidor web Apache para todas as plataformas de sistemas
operacionais. Em inglês.
http://www.phpedit.net - Site oficial do PHPEdit Network. Neste site está disponível o PHPEdit, uma ferramenta IDE
para edição de código fonte, para sistemas operacionais Microsoft Windows. Em inglês.
http://quanta.sourceforge.net - Site oficial do Quanta Plus web development tool. Neste site está disponível o Quanta
Plus, uma ferramenta IDE para edição de código fonte, para sistemas operacionais linux, freebsd em ambiente K Desktop. Em
inglês.
http://www.mysql.com - Site oficial do MySQL, com download e documentação. Neste site está disponível o banco de
dados MySQL para todas as plataformas de sistemas operacionais. Em inglês.
http://www.postgresql.org - Site oficial do PostgreSQL, com download e documentação. Neste site está disponível o
banco de dados Postgres, para todas as plataformas de sistemas operacionais em que se encontra portado. Em inglês.
http://twtelecom.dl.sourceforge.net/sourceforge/phptriad/phptriad2-2-1.exe – PHPTriad: ferramenta de instalação
automatizada do trio Apache + PHP + MySql para a plataforma Microsoft Windows.
http://www.xitami.com/ - Servidor web para Microsoft Windows.

Códigos Fontes

http://www.superphp.com.br - Site com dezenas de artigos, tutoriais, apostilas e exemplos, dedicado à comunidade
brasileira. Em português.
http://www.phpclasses.org - Site de recursos POO (programação orientada a objetos) com milhares de classes para
serem usadas livremente.
http://phpbrasil.com - Site bem estruturado sobre PHP destinado à comunidade brasileira.
http://www.onlamp.com/php - Site com diversos artigos da famosa O’Reilly Network. Em inglês.
http://www.phpbuilder.com – Site com artigos, downloads e muitos códigos. Em inglês.
http://php.resourceindex.com - Site com artigos, downloads e muitos códigos. Em inglês.
http://www.hotscripts.com/PHP/ - Site com artigos, downloads e muitos códigos. Em inglês.
http://www.codewalkers.com - Site com artigos, downloads e muitos códigos. Em inglês.
http://www.xoops.org/modules/news/ - Xoops: Portal orientado a objetos, Open Source desenvolvido em PHP.
117

Listas de Discussão

http://br.groups.yahoo.com/group/php-pt/ - Lista de discussão sobre PHP em português, com 2257 membros


(Maio/2003), para todos os assuntos ligados à tecnologia com excelente retorno, aberto também aos iniciantes.
http://www.php.net/mailing-lists.php – Listas do site oficial do PHP. Diversos tipos de lista estão direcionados neste
site. Em inglês.

CONSIDERAÇÕES LEGAIS

Este manual foi desenvolvido a partir da versão oficial da documentação do PHP, disponível em www.php.net, cujos
termos de distribuição encontram-se na nota Copyright descrita adiante.
Este manual contém textos, exercícios, soluções e exemplos adicionais desenvolvidos por Rudinei Pereira Dias, que
também podem ser redistribuídos sob os termos da Licença Pública Geral (GNU) conforme publicada pela Free Software
Foundation; a versão 2 da Licença ou qualquer versão posterior, sendo obrigatório manter a referência ao autor.

Copyright

Este manual pode ser redistribuído sob os termos da Licença Pública Geral (GNU) conforme publicada pela Free
Software Foundation; a versão 2 da Licença ou (a seu critério) qualquer versão posterior.
A seção PHP deste manual tem © Copyright (1997 - 2003) para o PHP Documentation Group. Os membros deste grupo
estão listados em http://www.php.net/manual/pt_BR/printwn/index.php.

BIBLIOGRAFIA

[1] MySQL Reference Manual, Copyright 1997-2003 MySQL AB. Disponível no site oficial da MySQL
http://www.mysql.com/
[2] Documentação do PHP disponível em www.php.net
[3] Dynamic HTML – Estilos e Conteúdo Dinâmico. Silva, Osmar J. - Ed. Érica
[4] JavaScript – Guia de Consulta Rápida. Damiani, Edgard B. - Ed. Novatec.