Beruflich Dokumente
Kultur Dokumente
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
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
MYSQL.................................................................................................................................................................. 38
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
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
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).
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>
<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>
1 Capítulo
1.1 Título
1.1.1 Subtítulo
1.1.1.1 Seção
9
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
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
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
Introduzindo Imagens
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>
<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
<!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
<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
<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)
<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
<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
<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
<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
<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
<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
<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
<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
<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>.
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>
<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>
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>
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 */
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) }
– 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”.
– 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 1:
Exemplo 2:
<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:
<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 matemáticos
* 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
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
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;
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);
}
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
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
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 );
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.
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();
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] + "!");
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.
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:
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>
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>
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>
<A HREF="javascript:informacao()">Informação</A>
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()'>
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
alert("X = "+x);
x = parseInt("10");
x = parseFloat("10.4");
window.alert(“Texto da Mensagem”);
// com variáveis
var str = “JavaScript”;
window.alert(“O mundo ” + str);
// com números
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).
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.”);
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");
}
}
}
}
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.
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:
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>
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.
Exemplo 1:
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
Exemplo 3
Exemplo 4
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.
Figura 14: Defina a instalação como “as Windows Service” e troque o “Service Name”
para MySQL41
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.
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.
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.
Tipos de Tabelas
Em breve....
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.
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:
Excluindo tabelas
DROP TABLE nome_da_tabela;
Exemplo: DROP TABLE item_pedidos;
Exemplo:
INSERT INTO clientes (cli_id, cli_nome, cli_endereco)
VALUES (1, 'Fulano de Tal', 'Rua X, 111');
colunaN = valorN
WHERE restrição(ões);
Exemplo:
UPDATE clientes
SET cli_nome='Beltrano de Tal'
WHERE cli_id=1;
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 ;
Restringindo o resultado:
– Select id, titulo from livros where id=10;
– INSERT INTO livros (titulo, autor_principal) values ('O código DaVince','Dan Brown');
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)
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:
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.
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).
4. Altere a tabela emprestimos adicionando uma chave estrangeira para a tabela alunos campo alu_id.
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.
16. Selecione o título do livro e a data do empréstimo de todos os livros que já formam emprestados.
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.
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
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;
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?.
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
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
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
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:
TABELA: pessoas
CAMPOS: pes_id inteiro grande NN-PK,
pes_nome string de 255 NN,
pes_endereco string de 255
TABELA: atividades
56
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;
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
PONTOS:
ORDEM: fun_id, pon_data, pon_hora_entrada, pon_hora_saida
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.
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.
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.
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.
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
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.
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.
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
Componentes de modelo:
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');
Dê Ok e clique em Connect.
66
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.
<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
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.
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:
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
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.
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
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.
<?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";
?>
Comentários
<?php
echo "Isto é um teste"; //Comentário de uma linha no C++
Tipos
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.
?>
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.
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
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
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
?>
Operadores de Comparação
Operadores de comparação, como os seus nomes implicam, permitem que você compare dois valores.
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'];
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>
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'");
?>
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().
Nota: O operador de execução fica desabilitado quando safe mode está ativo ou shell_exec() está desabilitado.
Operadores de Incremento/Decremento
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
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.
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
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.
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.
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 é:
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).
<?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 é:
/* 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.
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 '@'.
/* exemplo */
84
/* exemplo */
$a = array (
"um" => 1,
"dois" => 2,
"três" => 3,
"dezessete" => 17
);
break
$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
$i = 0;
while ($i++ < 5) {
echo "Fora<br>\n";
while (1) {
echo " Meio<br>\n";
while (1) {
echo " 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()
<?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.
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.
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.
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.
Qualquer código PHP válido pode aparecer dentro de uma função, mesmo outras funções e definições de classes.
<?php
$x = 5;
$sqrt = square($x);
89
?>
<?php
$x = 5;
$sqrt = square($x);
echo "O quadrado de $x";
breakline();
echo "é $sqrt";
breakline();
breakline();
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.
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>
</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>
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
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.
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...] )
<?php
echo "Hello World";
//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 Francesa
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56
$number = 1234.5678;
ord
ord -- Retorna o valor ASCII do caractere
96
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)
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)
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%>");
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
strtolower, strtoupper
strtolower -- Converte uma string para minúsculas
strtoupper -- Converte uma string para maiúsculas
Descrição:
string strtolower ( string str)
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)
Funções de verificação
is_array
is_array -- Verifica se a variável é um array.
is_float()
is_float() -- Verifica se a variável é um número de ponto flutuante.
99
Descrição:
bool is_int (mixed var)
bool is_integer (mixed var)
bool is_long (mixed var) – alias para is_int()
is_string()
is_string() -- Verifica se a variável é uma string.
is_object()
is_object() -- Verifica se a variável é um objeto.
is_file()
is_file() -- Verifica se a variável é um arquivo regular.
isset()
isset() -- Verifica se já foi atribuído um valor a uma variável.
<?php
$a = "test";
echo isset ($a); // TRUE
unset ($a);
echo isset ($a); // FALSE
$foo = NULL;
print isset ($foo); // FALSE
?>
100
Funções numéricas
pi
pi -- Obtêm o valor de pi
Descrição: float pi ( void)
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.
É possível usar date() e mktime() juntos para encontrar datas no futuro ou no passado.
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";
?>
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")
);
(
[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 = 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 ...])
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.
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.
reset
reset -- Faz o ponteiro interno de um array apontar para o seu primeiro elemento
Descrição: mixed reset ( array 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');
<?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');
//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>
</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");
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])
<?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());
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
(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
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.
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
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.