You are on page 1of 33

PHP

PHP Hypertext Preprocessor


Apontamentos para as disciplinas com Programao Internet

Maio, 2007

Programao Internet

PHP (PHP: Hypertext Preprocessor), uma linguagem de programao OpenSource.


Foi inicialmente desenhada para scripting de nvel profissional para produo de
WebSites dinmicos. O PHP uma linguagem server side, ou seja, o cdigo que o
browser l gerado pelos scripts que esto no servidor no tendo o utilizador acesso ao
source do script php. O PHP uma linguagem poderosa orientada a objectos.
Pode ser embebido em HTML e corre do lado do servidor (server-side scripting) ou seja
"apenas enviado HTML" para o cliente, sendo assim torna-o bastante seguro, pois o
cliente apenas v o desejado.
PHP um mdulo oficial do Apache, como o Apache PHP pode correr em varias
plataformas entre elas por ex: Unix, Mac, Windows ...

1. SEMELHANA COM OUTRAS LINGUAGENS


A linguagem de programao PHP muito semelhante s linguagens de programao C
e C++. igualmente uma linguagem de programao procedimental que segue a lgica
muito semelhante s suas congneres j citadas.

2. INTRODUZIR CDIGO PHP NO HTML


Existem diversas formas de introduzir a linguagem de scripting PHP no cdigo HTML.
Mais especificamente, existem quatro formas diferentes de o fazer, passamos a explicar:
1. Utilizando o conjunto de etiquetas limitadoras <? e ?>. Esta a forma mais
simples de utilizao do PHP.
<html>
<head>
<title>Ol Mundo!</title>
</head>
<body>
<?
echo ("Ol mundo!");
?>
</body>
</html>
exemplo_01.php

2. Utilizando o conjunto de etiquetas limitadoras <?php e ?>. Esta notao


particularmente til, no caso de se pretender utilizar o PHP em conjunto com
XML Extensive Markup Language.
<?php
echo ("Ol mundo!");
?>
exemplo_02.php

Pgina 2 de 33

Programao Internet

3. Outras formas de representao atravs do conjunto de etiquetas limitadoras


<script language="php"> e </script>. Esta a forma de representao mais
indicada que deve ser utilizada em conjunto com editores de HTML que no
conheam nem saibam como processar cdigo embebido.
<script language="php">
echo ("Ol mundo!");
</script>
exemplo_03.php

4. Pode igualmente ser utilizado o conjunto de etiquetas limitadoras <% e %>. Este
formato bastante familiar do desenvolvimento de programas em ASP (Active
Server Pages).
<%
echo ("Ol mundo!");
%>
exemplo_04.php

3. SEPARAES DE INSTRUES
As instrues em PHP so separadas umas das outras, a semelhana do que ocorre com
outras linguagens de programao semelhantes, utilizando o ponto e vrgula (;).
A etiqueta de fim de cdigo (?>) equivalente ao ; se de seguida no existirem mais
comandos PHP. Assim, o seguinte cdigo:
<?php
echo ("Isto apenas um teste");
?>
exemplo_05.php

equivalente ao seguinte:
<?php echo ("Isto apenas um teste") ?>
exemplo_06.php

4. UTILIZAO DE COMENTRIOS
Na linguagem PHP existem 3 tipos distintos de comentrios. Podem ser do mesmo
estilo usado na linguagem C (/* */), do mesmo estilo da linguagem de programao
C++ (//) e finalmente do mesmo estilo utilizado pela linguagem de programao shell
do Unix (#).
No caso de comentar grandes blocos de cdigo, devem ser utilizados os mesmos
comentrios do que os da linguagem de programao C, usando o /* e */.
<?
/* Este cdigo vai ser utilizado para produzir uma frase no ecr
em que se mostra que o programa apenas funciona como um teste */
echo ("Isto apenas um teste");
?>
exemplo_07.php

Pgina 3 de 33

Programao Internet

No caso de se pretender efectuar comentrios apenas em algumas linhas de cdigo,


devem ser utilizados os comentrios do mesmo tipo que os da linguagem de
programao C++ (usando o //) ou os comentrios do mesmo tipo dos da linguagem de
programao shell do Unix (usando o #).
<?
// Apresenta como resultado no ecr
echo ("Isto apenas um teste"); # Mensagem para o ecr
?>
exemplo_08.php

5. TIPOS DE DADOS
A linguagem de programao PHP suporta vrios tipos de dados simples. Estes tipos de
dados so os seguintes: nmeros inteiros, nmeros de vrgula flutuante, cadeia de
caracteres (strings), arrays e objectos.
<?php
$var1 = 1234;
$var2 = -123;

# Nmero decimal
# Nmero decimal negativo

$var3 = -1.23;

# Nmero de virgula flutuante

$var4 = 'O valor da varivel 1 : $var1'; # String


$var5 = "O nmero = " . $var1; # . = Concatenao strings
$arr[0] = "abc"; # Exemplo de vector
$arr[1] = "def";
$arr["qqcoisa"] = 123; # Exemplo de vector associativo
$alunos1 = array ('Eduardo', 'Pedro');
$alunos2 = array (0 => 'Rita', 1=> 'Ana');
$aniversario = "03/09/1974";
$arr_aniversario = explode("/",$aniversario);
$ano_aniversario = $arr_aniversario[2]; # 3 posio do vector
?>
exemplo_09.php

No PHP, os arrays podem funcionar tanto como arrays associativos (tabelas de hash)
ou arrays indexados, tambm designados normalmente como vectores. As chaves de
um array associativo tm uma funo semelhante aos ndices de um array indexado,
mas com a seguinte diferena:

os ndices so sempre nmeros inteiros que indicam a posio de cada elemento


no array;
as chaves podem ser nmeros os strings e cada uma delas fica associada (dai o
termo associativo) a um determinado elemento no array.

No PHP ainda possvel converter de um tipo de varivel para outro, utilizando um


mtodo de converso directa, mais conhecido por cast, ou utilizando a funo settype.

Pgina 4 de 33

Programao Internet

[EXEMPLO] Obter o tipo de dados de uma varivel.


<?php
$a = 10;
echo gettype($a) . "<br />";
$b = 1.5;
echo gettype($b) . "<br />";
$c = "ol";
echo gettype($c) . "<br />";
?>
exemplo_10.php

6. ESTRUTURAS DE CONTROLO
if [ else [ elseif ] ]
A estrutura de controlo if muito importante em qualquer linguagem de programao,
pois permite fazer verificaes de condies e consequentemente s executar alguns
blocos de instrues.
(1) ---------------if (expressao) {
instrucoes;
}
(2) ---------------if (expressao) {
instrucoes;
}
else {
instrucoes;
}

Se pretende testar vrias condies seguidas


pode usar um conjunto de if's encadeados.
(3) ---------------if (expressao) {
instrucoes;
}
else
if { // ou ento elseif idntico
instrucoes;
}
else {
instrucoes;
}

[EXEMPLO] A partir de dois nmeros armazenados em variveis, indicar qual o maior.


<?php
$valor1 = 40;
$valor2 = 20;
if ($valor1 > $valor2) {
echo "A varivel $valor1 maior que a varivel $valor2";
}
else
{
echo "A varivel $valor2 maior que a varivel $valor1";
}
?>
exemplo_11.php

Pgina 5 de 33

Programao Internet

switch
A estrutura de controlo switch permite fazer vrias verificaes que poderiam ser feitas
por N if's encadeados mas assim torna-se muito mais simples.
switch (expressao) {
case valor1:

instrucoes;
[break;]

case valor2:

instrucoes;
[break;]

[default:

instrucoes;]

[EXEMPLO] Desejar um bom dia, com especial ateno para o incio e fim da semana.
<?php
$d = date("D");
switch ($d) {
case "Fri":
case "Mon":
default:

echo "Bom fim-de-semana.";


break;
echo "Boa semana de trabalho!";
break;
echo "Um bom dia.";

}
?>
exemplo_12.php

while
Este ciclo sem dvida, um dos mais utilizados, talvez pela sua simplicidade. Executa o
bloco de instrues enquanto a expresso for TRUE caso seja FALSE logo de inicio nem
sequer chega a executar as instrues, nesse caso devera ser usado um ciclo dowhile
que iremos ver de seguida.
while (expressao) {
instrucoes;
}

[EXEMPLO] Mostrar na pgina os 10 primeiros nmeros, usando o ciclo while.


<?php
//Utilizando o ciclo WHILE
$valor = 1;
while ($valor <= 10) {
echo $valor . "<br />"; $valor++;
}
?>
exemplo_13.php

Pgina 6 de 33

Programao Internet

dowhile
O ciclo dowhile similar ao while, com a excepo do teste da expresso, que
efectuada no fim do ciclo e no no incio.
do {
instrucoes
} while (expressao);

[EXEMPLO] Mostrar na pgina os 10 primeiros nmeros, usando o ciclo dowhile.


<?php
//Utilizando o ciclo DOWHILE
$valor = 1;
do {
echo $valor . "<br />"; $valor++;
} while ($valor <= 10);
?>
exemplo_14.php

for
O ciclo mais complexo em PHP, sendo a sintaxe a seguinte:
for (expressao inicial; expressao condicional; expressao final) {
instrucoes;
}

A expresso inicial executada apenas uma vez (normalmente usada para inicializar
variveis), enquanto que, expresso condicional, analisada a cada ciclo se FALSE o
ciclo termina caso contrrio continua. A expresso final, no final de cada ciclo esta
expresso executada.

[EXEMPLO] Mostrar na pgina os 10 primeiros nmeros, usando o ciclo for.


<?php
//Utilizando o ciclo FOR
for ($valor = 1; $valor <= 10; $valor++) {
echo $valor . "<br />";
}
?>
exemplo_15.php

A maneira mais comum de sair fora de um ciclo a expresso tornar-se FALSE, no


entanto, os comandos break e continue possibilitam outras opes.
break
Termina a execuo de um ciclo.
break;

Pgina 7 de 33

Programao Internet

[EXEMPLO] Interromper o ciclo quando a varivel "cont" (contador) igual a 3.


<?php
$cont=1;
while ($cont<=5) {
echo $cont . "<br />";
++$cont;
if ($cont==3)
break;
}
?>
exemplo_16.php

continue
Salta o resto das instrues do ciclo actual que o contm e continua a execuo na
expresso condicional.
continue;

[EXEMPLO] Salta e escrita da varivel "cont" (contador) quando esta igual a 3.


<?php
$cont=0;
while ($cont<5) {
++$cont;
if ($cont==3)
continue;
echo $cont . "<br />";
}
?>
exemplo_17.php

require
A expresso require (ou o seu complementar require_once) serve para incluir um
outro ficheiro de cdigo (ficheiros externos) dentro do actual.
require ficheiro-a-introduzir;

include
A expresso include (ou o seu complementar include_once) inclui e avalia um
determinado ficheiro. Isto acontece de cada vez que uma expresso include
encontrada, portanto, pode ser utilizada por exemplo dentro de uma estrutura cclica
para incluir diferentes ficheiros.
include ficheiro-a-introduzir;

Pgina 8 de 33

Programao Internet

[EXEMPLO] Incluso de vrios ficheiros em simultneo, atravs da instruo include.


<?php
$files = array ('file1.inc', 'file2.inc', 'file3.inc');
for ($i=0; $i < count ($files); $i++) {
include $files[$i];
}
?>
exemplo_18.php

A expresso include difere da require uma vez que a expresso de include


avaliada e reavaliada de cada vez que encontrada (e apenas quando executada),
enquanto quando uma expresso require encontrada esta apenas substituda pelo
contedo do ficheiro.
As instrues require_once e include_once possuem as mesmas funcionalidades que
o require e include. A diferena que existe entre estes que, quando j foi includo
um ficheiro anteriormente (o que pode ser muito normal, principalmente quando se
utiliza funes e vrios ficheiros externos), com a utilizao do require_once e
include_once o mesmo ficheiro no ser includo duas vezes.

7. FUNES
Funes definidas pelo utilizador no so realmente necessrias, pode-se produzir sites
interessantes e teis sem recorrer a funes, apenas com construes bsicas e funes
j existentes no PHP. Se acha que os seus ficheiros em PHP esto a ficar demasiados
grandes, difceis de perceber, e difcil de fazer a gesto, ento, nesse caso podemos
estruturar o nosso algoritmo em funes.
O que uma funo?
Funo uma maneira de pegar num pedao de cdigo dar-lhe um nome e p-lo a parte
e quando quiser pode chama-lo pelo nome, so especialmente teis quando vamos usar
esse pedao de cdigo vrias vezes, no entanto em situaes que s so usadas uma vez
tambm so teis por permite dividir bem o cdigo tornando-o mais legvel.
function nome-da-funcao ($arg1, $arg2, ...) {
instrucoes;
[return $valor;]
}

[EXEMPLO] Funo "soma", que permite somar dois valores enviados por parmetro.
<?php
function soma ($valor1, $valor2) {
return($valor1 + $valor2);
}
$a = 10;
echo soma($a,25);
?>
exemplo_19.php

Pgina 9 de 33

Programao Internet

Retorno de valores
Podem ser retornados valores de funes utilizando a expresso return. Qualquer tipo
de dados pode ser retornado, inclusive listas e objectos.

Argumentos de funes
Informao que pode ser passada para funes atravs de uma lista de argumentos. Esta
lista composta por variveis e/ou constantes, separados por virgulas.

Passagem de argumentos por referncia


Por defeito os argumentos so passados por valor. Isto significa que se o valor for
alterado dentro da funo, este no alterado fora da funo. Se desejar permitir que a
funo modifique os seus argumentos, estes devem ser passados por referncia.

Valor por defeito de argumentos


Uma funo pode definir valores por defeito para argumentos que lhe so passados.

8. FICHEIROS EM PHP
fopen
O comando fopen serve para abrir o ficheiro
fopen (nome-ficheiro, modo-de-abertura)

O parmetro modo-de-abertura indica o tipo de operao a executar sobre o ficheiro,


aps a sua abertura, podendo ser um dos seguintes:
Modo de abertura
r
r+
w
w+
a
a+
b

Descrio

Abre o ficheiro para leitura e coloca o apontador no incio;


Abre o ficheiro para leitura e escrita e coloca o apontador no incio
do ficheiro;
Abre o ficheiro para escrita e coloca o apontador no incio do
ficheiro (cria o ficheiro se este no existir);
Abre o ficheiro para leitura e para escrita, colocando o apontador no
incio do ficheiro (cria o ficheiro se este no existir);
Abre o ficheiro escrita e coloca o apontador no fim do ficheiro (cria
o ficheiro se este no existir);
Abre o ficheiro para leitura e para escrita e coloca o apontador no
fim do ficheiro (cria o ficheiro se este no existir).
recomendado a utilizao da flag 'b' depois do modo de abertura
ao abrir ficheiros em sistemas operativos como windows.

Pgina 10 de 33

Programao Internet

fclose
Aps a utilizao de um ficheiro aberto com o fopen devemos fecha-lo com o fclose.
fclose (apontador-para-ficheiro)

fread
Realiza uma leitura binria do ficheiro aberto com o fopen, lendo quantos bytes forem
introduzidos, ou ento at ao final do ficheiro (EOF).
fread (apontador-para-ficheiro, numero-de-bytes)

[EXEMPLO] Abertura de um ficheiro de texto, no modo de leitura e mostra 20 bytes.


<?php
if (!$file = fopen("texto.txt", "r")){
echo "Erro ao abrir ficheiro";
}else{
$texto = fread($file,20);
echo ($texto);
fclose ($file);
}
?>
exemplo_20.php

9. FORMULRIOS
Uma das funcionalidades mais importantes do PHP a possibilidade de interaco com
o HTML. Uma das formas mais bsicas desta interaco atravs da utilizao de
formulrios em HTML.
Estes formulrios em HTML permitem que os utilizadores introduzam valores para
campos que lhes so apresentados e que podem ser posteriormente tratados para
processamento. Por forma a processar os valores introduzidos por um utilizador num
formulrio de HTML necessrio um programa ou script.
form
<form name="nome-do-formulario" action="ficheiro-para-processamento"
method="mtodo-de-envio" enctype="tipo-formulrio">

</form>

Propriedade
name
action
method

Descrio

Nome do formulrio para referncia em funes JavaScript, por


exemplo.
Nome do programa responsvel pelo tratamento dos dados introduzidos
no formulrio.
Mtodo de envio dos dados para o servidor HTTP. Os valores possveis
so POST (recomendado) e o GET.
Pgina 11 de 33

Programao Internet

enctype

Define o formato de como os dados sero enviados ao servidor HTTP,


sendo vlido apenas para o method igual a POST. Este atributo
geralmente utilizado quando necessrio o envio de ficheiros, upload
de ficheiros ( obrigatrio nesta situao).

[EXEMPLO] Exemplo de um formulrio (dados.htm) para envio de dados. O ficheiro


que vai tratar os dados ser de PHP (processar.php).
<form name=frmProcessar action="processar.php" method="POST">
Primeiro nome: <input type="text" name="primeiro_nome"><br />
ltimo nome: <input type="text" name="ultimo_nome"><br />
<input type="submit" name="SUBMETER" value="Submeter">
</form>
dados.htm

Aspecto do formulrio quando visualizado no seu web browser


Primeiro nome:
ltimo nome:
Submeter

<?php
if (isset($_POST['SUBMETER'])){
echo "Primeiro nome = " . $_POST['primeiro_nome'] . "<br />";
echo "ltimo nome = " . $_POST['ultimo_nome'] . "<br />";
}
?>
processar.php

Elemento
<form>

Descrio

Define um formulrio para recolher dados inseridos pelo utilizador


Insere um campo para introduzir dados
<textarea> Define uma rea de texto (permite inserir texto com vrias linhas e um
nmero ilimitado de caracteres)
<label>
Define um nome para um elemento
<fieldset> Agrupa elementos num formulrio
<legend>
Define uma legenda para um grupo de elementos do formulrio
<input>

<select>

Define uma lista com vrias opes seleccionveis


<optgroup> Define um grupo de opes
<option>
Insere mais uma opo numa lista com vrias opes seleccionveis
<button>
Define um boto que pode ser pressionado
<isindex>
Desaprovado. Use <input> com o atributo type="button"
Pgina 12 de 33

Programao Internet

[EXEMPLO] Exemplo de um formulrio (ficheiro.htm) para upload de ficheiros. O


ficheiro que vai tratar o upload ser de PHP (upload.php).
<form name="frmUpload" action="upload.php" method="POST"
enctype="multipart/form-data">
FICHEIRO: <input type="file" name="ficheiro"><br />
<input type="submit" name="ENVIAR" value="Enviar">
<input type="reset" name="LIMPAR" value="Limpar">
</form>
ficheiro.htm
<?php
if (isset($_POST['ENVIAR'])){
$pasta = "upload_files/"; # nome da pasta para armazenar upload
move_uploaded_file($_FILES['ficheiro']['tmp_name'], $pasta .
$_FILES['ficheiro']['name']);
}
?>
upload.php

10. BASE DE DADOS


Um dos aspectos mais interessantes que permite um maior dinamismo com as pginas
web obtido com recurso interaco com as bases de dados. Assim, possvel
manipular os dados a armazenados e criar pginas instantaneamente, consoante o
pedido do utilizador, obtendo-se maior interactividade.
A maneira de manipular os dados externos, armazenados na base de dados, atravs da
linguagem dos Sistemas de Gesto de Base de Dados (SGBD), a linguagem SQL
(Structured Query Language). Obviamente que para tirar o mximo proveito, ser
necessrio ter conhecimentos mnimos de HTML e de bases de dados (SQL).
O PHP permite estabelecer a conexo aos mais diferentes SGBDs existentes no
mercado, desde os mais simples, como o caso do MYSQL e ACCESS, at aos mais
complexos, como por exemplo: ORACLE, Informix, Adabas, SQL Server e DB2.

[EXEMPLO] Para realizar testes ao PHP e ao MYSQL, ao mesmo tempo para analisar o

valor das variveis do sistema.


<?php
phpinfo();
?>
phpinfo.php

MySQL
O servidor MySQL um SGBD onde armazenado todo um conjunto de informao
estruturada. Pode conter qualquer tipo de informao, desde uma lista de produtos de
um site comercial at grandes blocos de informao de um grande grupo empresarial.
Para adicionar, aceder ou processar a informao armazenada num computador
necessrio um sistema de controlo e gesto que funcione independentemente ou como
parte de outras aplicaes (por exemplo aplicaes em PHP).
Pgina 13 de 33

Programao Internet

O MySQL um servidor de bases de dados SQL (Structured Query Language) muito


rpido, multi-processos, multi-utilizador e robusto. um sistema de bases de dados
relacionais onde a informao armazenada em vrias tabelas separadas em vez de
estar toda numa partio grande e nica, o que lhe confere mais rapidez de acesso e
flexibilidade. As tabelas esto interligadas por relaes bem definidas, sendo possvel,
desta forma, combinar informao de vrias tabelas em cada pedido.
Aliado a estas ltimas vantagens, o MySQL totalmente grtis e OpenSource. Para
efectuar a manuteno e para se aceder base de dados, podemos utilizar scripts em
PHP, atravs da linha de comandos do MYSQL, ou ento, atravs de ferramentas tal
como o PhpMyAdmin, mais uma ferramenta OpenSource.

PhpMyAdmin
O PhpMyAdmin uma ferramenta de administrao do MySQL e que, tal como o
prprio nome indica, foi totalmente desenvolvido em PHP para que possa funcionar
independentemente da plataforma em que se encontre o servidor web. Atravs do
PhpMyAdmin, podemos:

controlar todas as bases de dados existentes como se existisse uma s;


criar e eliminar bases de dados;
criar, eliminar e alterar tabelas e campos de tabelas;
listar a informao existente, bem como executar qualquer comando SQL.

Para alm destas funcionalidades, permite igualmente exportar toda a informao de


uma base de dados para vrios formatos (SQL, XML, etc.) para, por exemplo, realizar
uma cpia de segurana de toda a informao existente na base de dados.

Acesso s bases de dados


Na prtica, sempre que precisamos de aceder a uma base de dados, vai existir trs
comandos bsicos que tm de ser realizados:

um para fazer a conexo ao servidor de bases de dados;


outro para seleccionar a base de dados;
e um terceiro para executar a consulta (query), em SQL, base de dados.

mysql_connect
Estabelece a conexo ao servidor MySQL. Esta funo retorna um valor inteiro, que o
identificador da conexo estabelecida e dever ser armazenado numa varivel para ser
utilizado depois.
mysql_connect (hostname, login, password)

mysql_close
Fecha a conexo MySQL.
mysql_close ([conexo])

Pgina 14 de 33

Programao Internet

mysql_select_db
Depois de conectado ao servidor (mysql_connect), ser necessrio definir qual a base
de dados que existe no servidor e a qual nos pretendemos ligar. O valor de retorno
zero (0) se o comando falhar e um (1) no caso de sucesso.
mysql_select_db (nome-da-base-de-dados, conexo)

Se o valor da conexo for ignorado, o interpretador de PHP tentar utilizar a ltima


conexo estabelecida. No entanto, recomendado que inclua sempre a varivel de
conexo, para facilitar a legibilidade do cdigo.

mysql_query
Aps estabelecida a conexo e seleccionada a base de dados, praticamente toda a
interaco com o servidor MySQL pode ser realizada atravs de consultas escritas em
SQL. O valor de retorno zero (0) se o comando falhar e um (1) no caso de sucesso.
O sucesso, apenas nos permite perceber que a sintaxe utilizada no comando SQL foi
executada no servidor, e nenhuma informao sobre o resultado da consulta retornada
deste comando.
mysql_query (consulta, [conexo])

No caso de na consulta ser utilizado o comando SELECT, o valor de retorno um valor


interno que identifica o resultado, e que poder ser tratado com a funo mysql_result
e outras.

[EXEMPLO] Criar uma base de dados, no servidor web, atravs de scripts em PHP
(database.php).
<?php
$connection = mysql_connect ("localhost", "root", "root");
$query = "CREATE DATABASE 'exemploDB'";
mysql_query ($query, $connection);
mysql_close ($connection);
?>
database.php
[EXEMPLO] Criar uma tabela, dentro de uma base de dados no servidor web, atravs de
scripts em PHP (table.php).
<?php
$connection = mysql_connect ("localhost", "root", "root");
$select_db = mysql_select_db ("exemploDB", $connection);
$query = "CREATE TABLE 'exemplo' (
'codigo' INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
'nome' VARCHAR(40),
'email' VARCHAR(50) )";
mysql_query ($query, $connection);
mysql_close ($connection);
?>
table.php

Pgina 15 de 33

Programao Internet

[EXEMPLO] Vamos proceder insero de alguns registos na base de dados e tabela,


anteriormente criadas, atravs de scripts em PHP (insert.php).
<?php
$connection = mysql_connect ("localhost", "root", "root");
$select_db = mysql_select_db ("exemploDB", $connection);
$query1 = "INSERT
VALUES
$query2 = "INSERT
VALUES
$query3 = "INSERT
VALUES
$query4 = "INSERT
VALUES
mysql_query
mysql_query
mysql_query
mysql_query

INTO exemplo (nome, email)


('teste1', 'teste1@mail.pt')";
INTO exemplo (nome, email)
('teste2', 'teste2@mail.pt')";
INTO exemplo (nome, email)
('teste3', 'teste3@mail.pt')";
INTO exemplo (nome, email)
('teste4', 'teste4@mail.pt')";

($query1,
($query2,
($query3,
($query4,

$connection);
$connection);
$connection);
$connection);

mysql_close ($connection);
?>
insert.php

Normalmente, e por uma questo de facilidade de alterao do servidor web e/ou


mesmo para alterao dos dados de acesso base de dados, criamos um ficheiro
(connection.inc) que responsvel por definir todos esses valores (variveis).
Desta forma, sempre que necessitarmos de estabelecer uma ligao base de dados,
bastar realizar o include deste ficheiro.
<?php
$hostname
$username
$password
$database

=
=
=
=

"localhost";
"root";
"root";
"exemploDB";

#
#
#
#

nome do servidor
nome do utilizador
password
nome da base de dados

$connection = mysql_connect ($hostname, $username, $password);


$select_db = mysql_select_db ($database, $connection);
?>
connection.inc

Pela mesma ordem de ideias, devemos criar um ficheiro de include para fechar a
conexo base de dados, utilizando-o nas nossas pginas quando j no necessitamos
de realizar consultas base de dados.

<?php
mysql_close ($connection);
?>

# fechar conexo
close.inc

Pgina 16 de 33

Programao Internet

Ao executar uma consulta (query), utilizando o SQL SELECT, atravs do


mysql_query, o identificador do resultado deve ser armazenado numa varivel, para
que depois possa ser tratada das mais variadas formas. Destacamos o comando
mysql_result, o comando mysql_fetch_row e o comando mysql_fetch_array.
mysql_result
Atravs do resultado obtido no comando mysql_query, e especificando a linha
especfica (registo) e o campo a ser exibido, vamos poder chegar ao dado que
pretendemos, existente na nossa base de dados.
mysql_result (resultado, linha, [campo])

mysql_free_result
No final, devemos libertar o resultado das nossas consultas.
mysql_free_result (resultado)

[EXEMPLO] Apresentar o primeiro resultado de um SELECT (primeiro registo), atravs


de scripts em PHP (pesquisa_01.php).
<?php
// estabelecer a ligao base de dados
include ("connection.inc");
$query = "SELECT * FROM exemplo WHERE email LIKE '%teste%'";
$result = mysql_query ($query, $connection);
echo "NOME: " . mysql_result($result, 0, "nome") . "<br />";
echo "E-MAIL: " . mysql_result($result, 0, "email");
mysql_free_result ($result);
// fechar a ligao base de dados
include ("close.inc");
?>
pesquisa_01.php

A utilizao desta funo pode ser um pouco trabalhosa, se no resultado do SELECT


existir vrias linhas. Nessa situao, podemos utilizar outras funes para controlar o
nmero de linhas devolvidas pelo resultado, como por exemplo o comando
mysql_num_rows.

mysql_num_rows
Retorna o nmero de linhas de um SQL SELECT.
mysql_num_rows (resultado)

Pgina 17 de 33

Programao Internet

[EXEMPLO] Apresentar todos os resultados de um SELECT, utilizando o ciclo for e o


comando mysql_num_rows, atravs de scripts em PHP (pesquisa_02.php).
<?php
// estabelecer a ligao base de dados
include ("connection.inc");
$query = "SELECT * FROM exemplo WHERE email LIKE '%teste%'";
$result = mysql_query ($query, $connection);
$rows = mysql_num_rows ($result);
for($i =
echo
echo
echo
echo
}

0; $i < $rows; $i++) {


"NOME: " . mysql_result($result, $i, "nome");
"<br />";
"E-MAIL: " . mysql_result($result, $i, "email");
"<p>";

mysql_free_result ($result);
// fechar a ligao base de dados
include ("close.inc");
?>
pesquisa_02.php

mysql_fetch_array
Obtm uma linha como uma matriz associativa, uma matriz numrica, ou ambas.
Retorna uma matriz que corresponde a linha obtida e move o ponteiro interno dos dados
para a linha seguinte.
mysql_fetch_array (resultado)

[EXEMPLO] Apresentar todos os resultados de um SELECT, utilizando o ciclo while e


o comando mysql_fetch_array, atravs de scripts em PHP (pesquisa_03.php).
<?php
// estabelecer a ligao base de dados
include ("connection.inc");
$query = "SELECT * FROM exemplo WHERE email LIKE '%teste%'";
$result = mysql_query ($query, $connection);
while ($row = mysql_fetch_array ($result)) {
echo "NOME: " . $row ["nome"];
echo "<br />";
echo "E-MAIL: " . $row ["email"];
echo "<p>";
}
mysql_free_result ($result);
// fechar a ligao base de dados
include ("close.inc");
?>
pesquisa_03.php

Pgina 18 de 33

Programao Internet

Manuteno de uma base de dados


Para realizar a manuteno de uma base de dados, ser necessrio que existam ficheiros
(scripts em PHP) capazes de realizar operaes como insero, alterao e eliminao
de registos, nas mais diferentes tabelas da base de dados.
Vamos exemplificar como podem ser esses scripts para realizar a manuteno de uma
tabela na base de dados. Para tal, vamos aproveitar o exemplo referenciado
anteriormente (exemploDB). Todos estes exemplos vo estar realizados dentro de uma
pasta com o nome exemploDB.
Ser necessrio a criao de todos estes ficheiros para que a manuteno da pgina fique
a funcionar correctamente.

connection.inc ficheiro com as definies de ligao base de dados. Sempre que


necessrio, ser includo, atravs do comando include, nos ficheiros com scripts para

acesso base de dados.


<?php
$hostname
$username
$password
$database

=
=
=
=

"localhost";
"root";
"root";
"exemploDB";

#
#
#
#

nome do servidor
nome do utilizador
password
nome da base de dados

$connection = mysql_connect ($hostname, $username, $password);


$select_db = mysql_select_db ($database, $connection);
?>
connection.inc

close.inc ficheiro com a instruo de fecho de conexo base de dados. Sempre que
necessrio, ser includo, atravs do comando include, nos ficheiros com scripts para
acesso base de dados.
<?php
mysql_close ($connection);
?>

# fechar conexo
close.inc

index.php ficheiro principal da aplicao, onde podemos consultar todos os


contactos que constam na base de dados. Vai ser ainda neste ecr que o utilizador vai
poder efectuar inseres de novos contactos, editar um contacto j existente e mesmo,
se o desejar, efectuar a sua remoo da base de dados, tudo isto atravs das opes
inserir dados, editar e eliminar, respectivamente.

Na imagem que se segue, podemos ver uma apresentao deste ficheiro (index.php).

Pgina 19 de 33

Programao Internet

index.php
<?php
// estabelecer a ligao base de dados
include ("connection.inc");
$query = "SELECT * FROM exemplo";
$result = mysql_query ($query, $connection);
?>
<html>
<head>
<title>MANUTENO DA TABELA</title>
</head>
<body>
<p><strong>MANUTENO DA TABELA</strong><br />
<a href="inserir.htm">inserir dados</a>
<form id="frmPesquisa" name="frmPesquisa" method="post"
action="pesquisar.php">
<input name="pesquisa" type="text" id="pesquisa" />
<input type="submit" name="Submit" value="pesquisar" />
</form>
<p>Foram encontrado(s) <?=mysql_num_rows ($result)?> registo(s).
<hr /></p>
<table width="600" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="80"><strong>CDIGO</strong></td>
<td><strong>NOME</strong></td>
<td><strong>EMAIL</strong></td>
<td width="80"><strong>EDITAR</strong></td>
<td width="80"><strong>ELIMINAR</strong></td>
</tr>
<?php while ($row = mysql_fetch_array ($result)) { ?>
<tr>
<td><?=$row ["codigo"]?></td>
<td><?=$row ["nome"]?></td>
<td><?=$row ["email"]?></td>
<td><a href="editar.php?codigo=<?=$row ["codigo"]?>">editar</a></td>
<td><a href="eliminar.php?codigo=<?=$row ["codigo"]?>">eliminar</a></td>
</tr>
<?php } ?>
</table>

Pgina 20 de 33

Programao Internet

</body>
</html>
<?php
// fechar a ligao base de dados
include ("close.inc");
?>

index.php

inserir.htm trata-se de uma pgina web com um formulrio, neste formulrio

vamos poder inserir o nome e e-mail do contacto, para que este fique a constar na base
de dados. Este formulrio vai chamar o ficheiro inserir.php que vai ser responsvel
por gravar os dados introduzidos na base de dados.
Na imagem que se segue, podemos ver uma apresentao deste ficheiro (inserir.htm).

inserir.htm
<html>
<head>
<title>INSERIR</title>
</head>
<body>
<p><strong>MANUTENO DA TABELA</strong><br />
inserir dados | <a href="index.php">cancelar insero</a>
<p>&nbsp;<hr /></p>
<form name="frmInserir" method="post" action="inserir.php">
<table width="600" border="0" cellspacing="2" cellpadding="2">
<tr>
<td width="60"><strong>nome</strong></td>
<td><input name="nome" type="text" size="70" maxlength="40" /></td>
</tr>
<tr>
<td><strong>email</strong></td>
<td><input name="email" type="text" size="70" maxlength="50" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input name="inserir" type="submit" value="inserir" />
<input name="limpar" type="reset" value="limpar" /></td>
</tr>

Pgina 21 de 33

Programao Internet

</table>
</form>
</body>
</html>

inserir.htm

inserir.php trata-se de uma pgina web, com uma estrutura muito idntica ao
eliminar.php, que vai ser responsvel por inserir na base de dados os dados enviados
do formulrio (inserir.htm) atravs do mtodo POST.
<?php
// estabelecer a ligao base de dados
include ("connection.inc");
$query = "INSERT INTO exemplo (nome, email)
VALUES ('$_POST[nome]', '$_POST[email]')";
$result = mysql_query ($query, $connection);
// fechar a ligao base de dados
include ("close.inc");
// redireccionar para a pgina principal
header("location: index.php");
?>

inserir.php

pesquisar.php trata-se de uma pgina web, com uma estrutura muito idntica ao
index.php, que vai apresentar apenas os contactos em que o nome e/ou e-mail

satisfao o critrio de pesquisa.


Na imagem que se segue, podemos ver uma apresentao deste ficheiro
(pesquisar.php), com uma pesquisa realizada (pela palavra teste3).

pesquisar.php

Pgina 22 de 33

Programao Internet

<?php
// estabelecer a ligao base de dados
include ("connection.inc");
$query = "SELECT * FROM exemplo WHERE nome LIKE '%$_POST[pesquisa]%'
OR email LIKE '%$_POST[pesquisa]%'";
$result = mysql_query ($query, $connection);
?>
<html>
<head>
<title>PESQUISA</title>
</head>
<body>
<p><strong>MANUTENO DA TABELA</strong><br />
<a href="index.php">pgina principal</a>
<form name="frmPesquisa" method="post" action="pesquisar.php">
<input name="pesquisa" type="text" value="<?=$_POST[pesquisa]?>" />
<input type="submit" name="Submit" value="pesquisar" />
</form>
<p>Foram encontrado(s) <?=mysql_num_rows ($result)?> registo(s).<hr /></p>
<table width="600" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="80"><strong>CDIGO</strong></td>
<td><strong>NOME</strong></td>
<td><strong>EMAIL</strong></td>
<td width="80"><strong>EDITAR</strong></td>
<td width="80"><strong>ELIMINAR</strong></td>
</tr>
<?php while ($row = mysql_fetch_array ($result)) { ?>
<tr>
<td><?=$row ["codigo"]?></td>
<td><?=$row ["nome"]?></td>
<td><?=$row ["email"]?></td>
<td><a href="editar.php?codigo=<?=$row ["codigo"]?>">editar</a></td>
<td><a href="eliminar.php?codigo=<?=$row ["codigo"]?>">eliminar</a></td>
</tr>
<?php } ?>
</table>
</body>
</html>
<?php
// fechar a ligao base de dados
include ("close.inc");
?>

pesquisar.php

editar.php trata-se de uma pgina web com um formulrio, idntica pgina


inserir.htm. Neste formulrio vamos poder visualizar os dados actuais, existentes na

base de dados, para o nome e e-mail do contacto a editar e vai permitir efectuar as
alteraes desejadas. Este formulrio vai chamar o ficheiro gravar.php que vai ser
responsvel por gravar os dados introduzidos na base de dados.
<?php
// estabelecer a ligao base de dados
include ("connection.inc");
$query = "SELECT * FROM exemplo WHERE codigo=$_GET[codigo]";
$result = mysql_query ($query, $connection);

Pgina 23 de 33

Programao Internet

$row = mysql_fetch_array ($result);


?>
<html>
<head>
<title>EDITAR</title>
</head>
<body>
<p><strong>MANUTENO DA TABELA</strong><br />
editar dados | <a href="index.php">cancelar edio</a>
<p><hr /></p>
<form name="frmEditar" method="post" action="gravar.php">
<table width="600" border="0" cellspacing="2" cellpadding="2">
<tr>
<td width="60"><strong>nome</strong></td>
<td><input name="nome" type="text" size="70" maxlength="40"
value="<?=$row["nome"]?>" /></td>
</tr>
<tr>
<td><strong>email</strong></td>
<td><input name="email" type="text" size="70" maxlength="50"
value="<?=$row["email"]?>" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input name="codigo" type="hidden" value="<?=$_GET['codigo']?>" />
<input name="alterar" type="submit" value="alterar" />
<input name="limpar" type="reset" value="limpar" /></td>
</tr>
</table>
</form>
</body>
</html>
<?php
// fechar a ligao base de dados
include ("close.inc");
?>

editar.php

gravar.php trata-se de uma pgina web, com uma estrutura muito idntica ao
eliminar.php, que vai ser responsvel por alterar na base de dados os dados enviados
do formulrio (editar.php) atravs do mtodo POST.
<?php
// estabelecer a ligao base de dados
include ("connection.inc");
$query = "UPDATE exemplo SET nome = '$_POST[nome]',
email = '$_POST[email]' WHERE codigo = $_POST[codigo]";
$result = mysql_query ($query, $connection);
// fechar a ligao base de dados
include ("close.inc");
// redireccionar para a pgina principal
header("location: index.php");
?>

gravar.php

Pgina 24 de 33

Programao Internet

eliminar.php trata-se de uma pgina web, com uma estrutura muito idntica ao
inserir.php, que vai ser responsvel por eliminar o contacto cujo cdigo enviado no

endereo URL (mtodo GET).


<?php
// estabelecer a ligao base de dados
include ("connection.inc");
$query = "DELETE FROM exemplo WHERE codigo=$_GET[codigo]";
$result = mysql_query ($query, $connection);
// fechar a ligao base de dados
include ("close.inc");
// redireccionar para a pgina principal
header("location: index.php");
?>

eliminar.php

11. SESSES
A nova verso de PHP possui desde logo o suporte nativo para a gesto de sesses de
utilizadores. Esta tem vindo a ser uma das caractersticas mais reclamadas pelos
programadores que clamavam por uma forma simples e eficaz de gerir utilizadores.
A criao de sesses permite que o programador possa acompanhar e analisar todas as
aces de um determinado utilizador durante um determinado perodo de tempo
enquanto estiver no website.
Por forma a que seja associada informao de sesso com um utilizador especfico,
necessrio um identificador nico de sesso (tipicamente um numero nico). este
identificador de sesso que permitir a associao de um utilizador s suas variveis de
sesso e o seu acesso atravs do PHP.
Uma das principais utilidades das sesses que o protocolo HTTP HyperText
Transfer Protocol no possui um mecanismo que permita manter um estado. O
problema que no possvel preservar dados do cliente entre dois pedidos diferentes
(pelo menos no fcil de o fazer), e principalmente o servidor web no consegue
aperceber de que os pedidos podem ser originrios de utilizadores diferentes.
A utilizao de sesses extremamente importante principalmente no comrcio
electrnico do tipo business-to-consumer, nas lojas virtuais. Por exemplo, determinado
utilizador dirige-se a uma loja, efectua o login da sua conta pessoal, escolhe os artigos
que deseja comprar, adiciona-os ao seu carrinho de compras, introduz a sua morada e o
mtodo de pagamento e confirma e expede a sua encomenda e depois sai do web
browser. Este processo completo, desde que entrou na loja at que saiu do seu web
browser, corresponde a uma sesso e todos os dados correspondentes ao utilizador so
partilhados como variveis de sesso.

Pgina 25 de 33

Programao Internet

Funes para a gesto de sesses


O PHP, na sua verso mais recente, possui uma srie de funes que permitem que os
programadores desenvolvam aplicaes para a web incorporando a funcionalidade de
gesto de sesses.
Na tabela seguinte, esto descritas todas as funes e as suas funcionalidades:
session_start

Inicializa a informao relativa sesso


Destri toda a informao relativa sesso
session_name
L ou escreve o nome da actual sesso
session_module_name
L ou escreve o mdulo da sesso actual
session_save_path
L ou escreve a path da sesso actual
session_id
L ou escreve o identificador nico da actual sesso
session_register
Regista uma ou mais variveis com a sesso actual
session_unregister
Liberta uma varivel da sesso actual
session_is_registered Tenta verificar se determinada varivel est ou no
associada a sesso actual
session_decode
Descodifica informao de uma sesso a partir de um
texto
session_encode
Codifica a informao actual da sesso num texto
session_destroy

Para terminar a sesso


Para inicializar uma sesso, utiliza-se a funo session_start. No final,
aconselhvel que antes de chamar a funo session_destroy, sejam libertadas todas as
variveis de sesso, atravs da chamada da funo session_unset, que tem o mesmo
efeito de $_SESSION = Array().

[EXEMPLO] Registar uma varivel de sesso.


<?php
session_start();
$variavel_sessao = "um valor qualquer";
session_register("variavel_sessao");
?>
session_01.php

[EXEMPLO] Mostrar um valor de uma varivel de sesso.


<?php
session_start();
print "O valor da varivel de sesso :
$_SESSION[variavel_sessao]";
?>
session_02.php

Pgina 26 de 33

Programao Internet

[EXEMPLO] Ficheiro para terminar a sesso de um utilizador e voltar ao index.php.


<?php
session_unset();
session_destroy();
echo '<script>document.location.href="logout.htm";</script>';
?>
logout.php

Pgina 27 de 33

Programao Internet

ANEXOS
a) REFERNCIA DE HTML 4.01

Pgina 28 de 33

Programao Internet

a) REFERNCIA DE HTML 4.01


Todos os elementos ordenados alfabeticamente:
Elemento

Descrio

<!--...-->

Permite inserir um comentrio

<!DOCTYPE>

Indica o tipo de documento usado na pgina

<a>

Insere uma ncora (marca que identifica o local do documento em


que se encontra)

<abbr>

Insere uma abreviao

<acronym>

Insere um acrnimo

<address>

Insere um endereo (postal)

<applet>

Insere um applet (miniaplicao escrita em Java.) Desaprovado (usar


<object>).

<area>

Define uma rea sobre uma imagem

<b>

Insere texto carregado (negrito ou "bold")

<base>

Define o URL base de onde partem todas as ligaes relativas da


pgina

<basefont>

Define o tipo de letra base para a pgina. Desaprovado (usar CSS).

<bdo>

Define a direco em que o texto apresentado

<big>

Texto com letra maior

<blockquote>

Define uma citao extensa

<body>

Elemento que contm o corpo (contedo visvel) da pgina

<br>

Provoca uma mudana de linha forada

<button>

Insere um boto num formulrio

<caption>

Define a legenda de uma tabela

<center>

Texto alinhado ao centro. Desaprovado.

<cite>

Insere uma citao

<code>

Define texto que cdigo de computador

<col>

Define os atributos para as colunas de uma tabela

<colgroup>

Agrupa colunas numa tabela

<dd>

Insere texto que descreve uma definio

<del>

Define texto que foi apagado ("deleted")

Pgina 29 de 33

Programao Internet

<dir>

Mostra uma lista de directrio. Desaprovado.

<dfn>

Insere a definio de um termo

<div>

Insere uma diviso (ou seco) dentro da pgina

<dl>

Insere uma lista de definies ("definition list")

<dt>

Insere a definio de um termo

<em>

Insere texto enfatizado (escreve-se em itlico)

<fieldset>

Elemento que contm um grupo de campos de um formulrio

<font>

Define o tipo de letra, o tamanho e a cor a aplicar ao texto.


Desaprovado (usar CSS)

<form>

Insere um formulrio

<frame>

Define uma subjanela (moldura) dentro da janela principal do


browser. A subjanela contm a sua prpria pgina da Web

<frameset>

Insere um conjunto de subjanelas ("frames")

<h1> a <h6>

Define cabealhos ("headers") desde o nvel 1 (mais importante) at


ao nvel 6 (menos importante)

<head>

Contm informao importante a respeito do documento que no


deve ser apresentada no corpo da pgina

<hr>

Desenha uma linha horizontal

<html>

Elemento dentro do qual so colocados todos os restantes elementos


da pgina

<i>

Insere texto para ser escrito com caracteres itlicos

<iframe>

Insere no interior da pgina da Web uma subjanela ("frame")


contendo a sua prpria pgina da Web

<img>

Insere uma imagem

<input>

Define uma caixa para insero de texto num formulrio

<ins>

Define texto que foi inserido em substituio de outro mais antigo

<isindex>
<kbd>

Define texto inserido atravs do teclado

<label>

Define uma marca que ser associada a um controlo. Ao clicar nessa


marca o controlo que lhe est associado dever ser actuado

<legend>

Define um ttulo num elemento <fieldset>

<li>

Define um item de uma lista

Pgina 30 de 33

Programao Internet

<link>

Faz referncia a um recurso externo e estabelece a ligao com ele

<map>

Define um mapa sobre uma imagem

<menu>

Define uma lista de menu. Desaprovado.

<meta>

D informao sobre aquilo que o documento contm

<noframes>

Define um bloco noframes, o qual s ser apresentado se o browser


no suportar os elementos <frameset> e <frame>

<noscript>

Define um bloco noscript, o qual s ser apresentado se o browser


no suportar o elemento <script>

<object>

Insere um objecto dentro da pgina (como um filme em Flash, por


exemplo)

<ol>

Define uma lista ordenada

<optgroup>

Define um grupo de opes

<option>

Define uma opo numa lista de um formulrio

<p>

Insere um pargrafo

<param>

Define um parmetro para o elemento <object>

<pre>

Define texto pr-formatado

<q>

Define uma citao curta

<s>

Define texto que se escreve com um trao horizontal sobreposto


("strikethrough."). Desaprovado (usar CSS).

<samp>

Define uma amostra ("sample") de cdigo de computador

<script>

Insere um script

<select>

Define uma lista com items seleccionveis

<small>

Define texto mais pequeno ("small")

<span>

Insere uma diviso (ou seco) dentro da pgina

<strike>

Define texto que se escreve com um trao horizontal sobreposto


("strikethrough."). Desaprovado (usar CSS).

<strong>

Define texto mais forte (ser escrito em negrito)

<style>

Define estilos CSS a aplicar na pgina

<sub>

Define texto que fica alinhado um pouco mais abaixo ("subscript")

<sup>

Define texto que fica alinhado um pouco mais acima ("superscript")

<table>

Define uma tabela

Pgina 31 de 33

Programao Internet

<tbody>

Define um corpo ("body") numa tabela

<td>

Define uma diviso, ou clula, numa tabela

<textarea>

Define uma rea para insero de texto num formulrio

<tfoot>

Define o rodap de uma tabela

<th>

Define o cabealho de uma coluna numa tabela

<thead>

Define o cabealho de uma clula numa tabela

<title>

Define o ttulo da pgina

<tr>

Define uma linha de clulas numa tabela

<tt>

Define texto que imita o de uma mquina de escrever antiga


("teletype text")

<u>

Define texto sublinhado ("underlined."). Desaprovado (usar CSS)

<ul>

Define uma lista no ordenada ("unordered list")

<var>

Define uma varivel

Pgina 32 de 33

Programao Internet

REFERNCIAS BIBLIOGRFICAS
Serro, C. e Marques, J., Programao com o PHP 4, FCA, 2001.
Soares, W., Conceitos, PHP5 - Programao e Integrao com Banco de Dados,
RICA, 2006.

Sites utilizados como referncia


http://www.php.net

Site oficial PHP

http://www.w3c.org

Site oficial W3C

http://pt.wikipedia.org
http://www.artifice.web.pt/tutoriais/cntd/tut_html1.html

Pgina 33 de 33

You might also like