Você está na página 1de 24

6.

Introduo Linguagem PHP


w

A comunicao na Web exige dois agentes: o cliente web e o servidor web. O


cliente requer informao (a partir de uma pgina HTML acessada pelo
navegador) e o servidor fornece a informao requerida. Isto feito na web
por meio de fluxos de textos que atendem ao protocolo HTTP (Hypertext
Transfer Protocol). O cliente requer uma informao ao servidor, o servidor
reconhece a requisio do cliente e gera um contedo correspondente (na
forma de um texto HTML) e devolve este contedo como resposta ao cliente,
que o visualiza no navegador.
Cliente

Servidor
requisio

Servidor
Web

Navegador

Gerador
de
Contedo

resposta

Os programas JavaScripts so interpretados diretamente pelo navegador (ou


seja, pelo prprio cliente). Neste caso, dizemos que a programao web
feita pelo lado do cliente (client-side programming).

ELFS, 2003

164

Introduo Linguagem PHP


w

No caso da linguagem PHP, a programao interpretada pelo servidor que, a


partir de um gerador de contedo (o interpretador da linguagem PHP) produz
uma pgina HTML que ento devolvida ao cliente. Neste caso, dizemos que
a programao pelo lado do servidor (server-side programming).
Assim, no caso da linguagem JavaScript, os programas fazem parte do
documento HTML que est sendo visualizado no navegador (pois o prprio
navegador tem que interpret-los) sendo, portanto, possvel ao cliente ter
acesso ao cdigo-fonte destes programas.
No caso da linguagem PHP, a pgina que est sendo visualizada no navegador
o resultado da interpretao do programa-fonte pelo gerador de contedo
do servidor, ou seja, a partir do cdigo-fonte de um programa PHP gerada
um documento HTML correspondente (que no inclui o cdigo-fonte). Assim, a
programao pelo lado do servidor "esconde do cliente" os detalhes de
programao.
Nesta disciplina vamos usar o pacote PHP Triad for Windows, que inclui o
servidor web Apache, o gerenciador de bancos de dados relacionais MySQL, e
o interpretador da linguagem PHP. Este pacote ir criar uma pasta C:\apache
onde sero instalados todos estes componentes. Dentro desta pasta, ser
criada a pasta htdocs como diretrio padro para os documentos web
(arquivos HTML e arquivos PHP).

ELFS, 2003

165

Introduo Linguagem PHP


w

Para testar se o servidor Apache e o interpretador PHP esto funcionando,


copie o arquivo a seguir para a pasta C:\apache\htdocs:
aula06_01.php
<?php
$txt1 = "O servidor Apache";
$txt2 = "o interpretador PHP";
$txt3 = "esto prontos para o trabalho!!";
echo "<h1><a href=http://www.apache.org> $txt1 </a><br>";
echo "e<br><a href=http://www.php.org> $txt2 </a></h1>";
echo "<h2><div style='color:red'> $txt3 </div></h2>";
?>

Agora, aponte o navegador para: http://localhost/aula06_01.php


O resultado deve ser como o mostrado abaixo.

ELFS, 2003

166

Introduo Linguagem PHP


w

O cdigo PHP tambm pode ser includo como scripts em um documento


HTML (como em JavaScript). preciso, no entanto, usar a extenso .php para
o nome do documento. Exemplo:
aula06_02.php
<html>
<body>
<?php
$txt1 = "O servidor Apache";
$txt2 = "o interpretador PHP";
$txt3 = "esto prontos para o trabalho!!";
echo "<h1><a href=http://www.apache.org1> $txt1 </a><br>";
echo "e<br><a href=http://www.php.org1> $txt2 </a></h1>";
echo "<h2><div style='color:red'> $txt3 </div></h2>";
?>
</body>
</html>

Execute no navegador http://localhost/aula06_02.php. Clique com o boto


direito sobre a pgina exibida e escolha a opo "Exibir cdigo-fonte" para se
certificar de que o script PHP no fica disponvel ao cliente.

O importante, com a linguagem PHP, a possibilidade de construo de


pginas dinmicas (pginas cujo contedo dependem de uma interao com o
usurio). Para isto, vamos usar o gerenciador de bancos de dados MySQL.

ELFS, 2003

167

Introduo Linguagem PHP


w

Como padro, a instalao do MySQL cria o usurio root que no requer


senha. papel do administrador dos bancos de dados acrescentar novos
usurios e suas permisses de uso. Vamos criar o banco de dados dai para o
usurio root. Para isto, digite em uma janela de comandos:
mysqladmin -u root create dai

Em seguida, vamos criar a tabela alunos do banco de dados dai, a partir dos
seguintes comandos SQL:
alunos.sql
CREATE TABLE alunos ( num int(5) NOT NULL,
nome varchar(20),
sobrenome varchar(20),
PRIMARY KEY (num), UNIQUE (num));
INSERT INTO alunos VALUES (99060,'Luis','Nascimento');
INSERT INTO alunos VALUES (99059,'Cristiane','Silva');
INSERT INTO alunos VALUES (99057,'Victor','Silva');
INSERT INTO alunos VALUES (99044,'Mariana','Peixoto');
INSERT INTO alunos VALUES (99036,'Filipe','Domiciano');

Salve o arquivo alunos.sql em uma [pasta]. Para incluir a tabela alunos no


banco de dados dai, digite o comando:
mysql -u root dai < [pasta]\alunos.sql

Para verificar que tudo foi criado apropriadamente, vamos usar o monitor
MySQL.

ELFS, 2003

168

Introduo Linguagem PHP


w

Digite na janela de comandos: mysql -u root

Digite, ento, os comandos a seguir (note que o ponto-e-vrgula necessrio)


e verifique a resposta dada pelo monitor MySQL:
show databases;
use dai;
show tables;
desc alunos;
select * from alunos;
Para sair do monitor, digite: quit

Outra forma de verificar bancos de dados e tabelas com o programa


winmysqladmin.

Vamos agora usar o banco de dados dai para criar um programa PHP para
mostrar, inserir, alterar e excluir linhas da tabela alunos.

ELFS, 2003

169

Introduo Linguagem PHP


w

Para isto, vamos considerar o seguinte documento HTML:

aula06_03.htm

<html>
<head>
<title>Edio de Tabelas com PHP</title>
</head>
<body>
<form name="EdTab" action="aula06_03.php" method="post">
<h1>Alunos de DAI</h1>
<p>Nmero: <input type="text" name="edNum" size="10" maxlength="5"></p>
<p>Nome: <input type="text" name="edNome" size="30" maxlength="20"></p>
<p>Sobrenome: <input type="text" name="edSobre" size="30"
maxlength="20"></p>
<br>
<p>Operao:
<input type="radio" name="Escolha" value="1" checked>Listar</input>
<input type="radio" name="Escolha" value="2">Incluir</input>
<input type="radio" name="Escolha" value="3">Alterar</input>
<input type="radio" name="Escolha" value="4">Excluir</input>
</p>
<input type="reset" value="Limpar">
<input type="submit" value="Executar">
</form>
</body>
</html>
ELFS, 2003

170

Introduo Linguagem PHP


Note que, neste formulrio, o usurio dever
escolher uma das operaes e clicar no boto
Executar. Com isto ser executado (no lado
servidor) o script aula06_03.php, que construir
uma pgina de resposta requisio do usurio.
Note, no documento HTML, que esto definidos os
identificadores: edNum, edNome e edSobre
(nomes das caixas de edio) e tambm o
identificador Escolha (identifica qual operao foi
escolhida pelo usurio).

Considere o seguinte script PHP:


aula06_03.php

<?php
// Edio de tabela de banco de dados.
/* Note que comentrios podem ser feitos tambm
de forma a ocupar diversas linhas.
Neste caso, basta usar os delimitadores
de incio e fim de comentrio. */
// *********************************************************

ELFS, 2003

171

Introduo Linguagem PHP


function listagem($conecta)
{
$sql = "select * from alunos";

Variveis definidas dentro de funes


em um script PHP so consideradas
variveis locais, a menos que sejam
declaradas com o qualificador global.

$query = mysql_db_query("dai", $sql, $conecta);


echo("<h1>Listagem de Alunos</h1>");
echo("<table border width=50%");
echo("<tr><th>Nmero</th><th>Nome</th><th>Sobrenome</th></tr>");
A funo mysql_fecth_array retorna
while ($result = mysql_fetch_array($query))
uma linha da tabela (ou zero, caso
{
no existam mais linhas). Note que os
echo("<tr>");
campos que compem a linha so
echo("<td>" . $result["num"] . "</td>");
acessados como "ndices".
echo("<td>" . $result["nome"] . "</td>");
echo("<td>" . $result["sobrenome"] . "</td>");
echo("</tr>");
}
Sempre que o comando SQL resultar em uma tabela
(como no caso de um select), os recursos de memria
alocados varivel que armazena os resultados da
mysql_free_result($query);
consulta (no caso, a varivel $query) devem ser
}
liberados com a funo mysql_free_result.
// *********************************************************

ELFS, 2003

172

Introduo Linguagem PHP


function incluir($conecta,$edNum,$edNome,$edSobre)
{
$sql = "insert into alunos (num,nome,sobrenome) values " .
"( $edNum, '$edNome', '$edSobre' )";
$query = mysql_db_query("dai", $sql, $conecta);

Note que o ponto ( . ) o


operador de concatenao
de strings.

echo("<h1>Incluso de Alunos</h1>");
if ($query)
Note que se o nome de uma
{
varivel aparece em um string, ele
echo("Aluno $edNome includo na tabela!");
ser automaticamente substitudo
}
pelo valor da varivel.
else
{
echo("Erro na incluso " . mysql_error() . "\n");
}
}
// *********************************************************
function encontrar($conecta,$edNum)
{
$sql = "select * from alunos where num = $edNum";
$query = mysql_db_query("dai", $sql, $conecta);
ELFS, 2003

173

Introduo Linguagem PHP


$result = mysql_fetch_array($query);
if ($result["num"] == 0)
{
echo("<h1>Aluno $edNum no existe!!!</h1>");
$cod = 0;
}
else
Note que se um campo da tabela for do tipo
{
varchar, o valor do campo deve ser
$cod = 1;
delimitado por aspas ou por apstrofos ( o
}
caso dos campos nome e sobrenome, da
mysql_free_result($query);
return $cod;

tabela alunos). Para campos numricos, o


valor no precisa estar delimitado por aspas
ou por apstrofos ( o caso do campo num).

}
// *********************************************************
function alterar($conecta,$edNum,$edNome,$edSobre)
{
echo("<h1>Alterao de Alunos</h1>");
if (encontrar($conecta,$edNum) == 1)
{
$sql = "update alunos set nome = '$edNome', sobrenome = '$edSobre' " .
"where num = $edNum";
ELFS, 2003

174

Introduo Linguagem PHP


$query = mysql_db_query("dai", $sql, $conecta);
if ($query)
{
echo("Aluno $edNum alterado!");
}
else
{
echo("Erro na alterao " . mysql_error() . "\n");
}
}
}
// *********************************************************
function excluir($conecta,$edNum)
{
echo("<h1>Excluso de Alunos</h1>");
if (encontrar($conecta,$edNum) == 1)
{
$sql = "delete from alunos where num = $edNum";
$query = mysql_db_query("dai", $sql, $conecta);

ELFS, 2003

175

Introduo Linguagem PHP


if ($query)
{
echo("Aluno $edNum excludo da tabela!");
}
else
{
echo("Erro na excluso " . mysql_error() . "\n");
}
}
}
// *********************************************************
//
// Aqui comea o script principal
//
// *********************************************************
$conecta = mysql_connect("localhost","root");
if ($conecta)
Note que o script principal tem acesso aos identificadores
{
definidos no documento HTML que chamou o script. Estes
switch ($Escolha)
identificadores so tratados como variveis (como o caso
{
de $Escolha). Note que a linguagem PHP faz distino entre
case "1":
letras maisculas e minsculas.
listagem($conecta);
break;
ELFS, 2003

176

Introduo Linguagem PHP


Observe que necessrio
passar como parmetros
de funo os identificadores
definidos no documento
HTML, caso a funo
necessite de seus valores.

case "2":
incluir($conecta,$edNum,$edNome,$edSobre);
break;
case "3":
alterar($conecta,$edNum,$edNome,$edSobre);
break;
case "4":
excluir($conecta,$edNum);
break;
default:
echo("Operacao [" . $Escolha . "] nao reconhecida");
break;
}
}
else
{
echo("Erro na conexo " . mysql_error() . "\n");
}
mysql_close($conecta);
?>

Note que a funo mysql_error() retorna, como um string, a mensagem de erro


correspondente a uma operao SQL invlida. Isto ajuda na depurao do script PHP.
ELFS, 2003

177

Introduo Linguagem PHP


w

Devido caracterstica de ser processado pelo lado do servidor, um programa


PHP no consegue interagir com os usurios depois que as pginas HTML so
montadas e enviadas ao navegador. Entretanto, muitas vezes preciso
realizar tarefas na prpria pgina como, por exemplo: validao de campos
digitados pelo usurio, preenchimento dinmico de listas com base em
parmetros informados na pgina, abertura de novas janelas,
redirecionamento para outras pginas. Nestes casos, mais interessante
utilizar JavaScript.
Considere, por exemplo, que no formulrio de edio da tabela alunos
desejamos garantir que o usurio digitou o nmero do aluno como uma
sequncia de 5 dgitos e que os dois primeiros dgitos devem ser iguais a "98"
ou "99", antes que este dado seja enviado ao script PHP. Neste caso,
podemos rescrever o documento HTML que define o formulrio como:
aula06_04.htm
<html>
<head><title>Edio de Tabelas com PHP</title>
<SCRIPT language="JavaScript">
function verifica_numero(valor)
{
if (valor.length != 5)
alert("Digite um nmero de 5 dgitos");

ELFS, 2003

Os acrscimos ao documento
aula06_03.htm aparecem em
destaque.

178

Introduo Linguagem PHP


ano = valor.substr(0,2);
if (ano != "98" && ano != "99")
alert("Os dois primeiros dgitos devem ser '98' ou '99'");
num = valor.substr(2,3);
ok = true;
for (i = 0; i < 3; i++)
{
if ( isNaN(num.substr(i,1)) )
ok = false;
}
if (!ok)
alert("O nmero do aluno deve conter apenas dgitos!");
}
</SCRIPT>
</head>
<body>
<form name="EdTab" action="aula06_03.php" method="post">
<h1>Alunos de DAI</h1>
<p>Nmero:
<input type="text" name="edNum" size="10" maxlength="5"
onchange="verifica_numero(edNum.value);"></p>
<p>Nome:
<input type="text" name="edNome" size="30" maxlength="20"></p>
<p>Sobrenome:
ELFS, 2003

179

Introduo Linguagem PHP


<input type="text" name="edSobre" size="30" maxlength="20"></p>
<br>
<p>
Operao:
<input type="radio" name="Escolha" value="1" checked>Listar</input>
<input type="radio" name="Escolha" value="2">Incluir</input>
<input type="radio" name="Escolha" value="3">Alterar</input>
<input type="radio" name="Escolha" value="4">Excluir</input>
</p>
<input type="reset" value="Limpar">
<input type="submit" value="Executar">
</form>
</body>
</html>

Considere o seguinte formulrio


HTML, cujo cdigo apresentado
a seguir. Neste formulrio, quando
o usurio clicar no boto Enviar,
dependento da opo de cadastro,
ser chamado o script
cad_cliente.php ou o script
cad_fornece.php.

ELFS, 2003

180

Introduo Linguagem PHP


aula06_05.htm
<html>
<head>
<title>PHP e JavaScript</title>
<SCRIPT language="JavaScript">
function mostra_estado()
{
var estados = new Array("SP
"RJ
"MG
"ES
"RS
"CE
"GO
"AM

So Paulo",
Rio de Janeiro",
Minas Gerais",
Esprito Santo",
Rio Grande do Sul",
Cear",
Gois",
Amazonas");

for (i = 0; i < estados.length; i++)


if ( document.cadastro.estado.value == estados[i].substr(0,2) )
document.cadastro.nomest.value = estados[i].substr(5,30);
}
function verifica()
{
var erro = "Foram encontrados os seguintes erros: ";
ELFS, 2003

181

Introduo Linguagem PHP


aula06_05.htm
var ok = true;
if ( document.cadastro.nome.value.length == 0 )
{
erro += "\n - O nome deve ser informado";
ok = false;
}
if ( document.cadastro.email.value.length == 0 )
{
erro += "\n - O e-mail deve ser informado";
ok = false;
}
if ( !ok )
alert(erro);
else
if ( documento.cadastro.tipo[0].cheched )
document.cadastro.action = "cad_cliente.php";
else
document.cadastro.action = "cad_fornece.php";
return ok;
}
</SCRIPT>
ELFS, 2003

182

Introduo Linguagem PHP


aula06_05.htm
</head>
<body onLoad="mostra_estado();">
<h1>Cadastro de Clientes e Fornecedores</h1>
<form name="cadastro" action="????.php" onSubmit="return verifica();">
<p>Nome: <input name="nome" type="text" size="30"></p>
<p>E-mail: <input name="email" type="text" size="30"></p>
<p>Estado:
<select name="estado" size="1" onChange="mostra_estado();">
<option value="SP">SP</option>
<option value="RJ">RJ</option>
<option value="MG">MG</option>
<option value="ES">ES</option>
<option value="RS">RS</option>
<option value="CE">CE</option>
<option value="GO">GO</option>
<option value="AM">AM</option>
</select>
<input name="nomest" type="text" size="30"></p>
<p>Cadastro: <input name="tipo" type="radio" value="1" checked>Cliente
<input name="tipo" type="radio" value="2">Fornecedor</p>
<input name="enviar" type="submit" value=" Enviar ">
</form>
</body>
</html>
ELFS, 2003

183

Introduo Linguagem PHP


w

Exerccio: Considerando o formulrio dado em aula06_05.htm, escreva:


a) Uma funo verifica_email para testar a validade do e-mail digitado.
Considere que um e-mail vlido da forma: ***@***.com.br, onde ***
representa um string qualquer.
b) Os scripts cad_cliente.php e cad_fornece.php. Considere um novo banco
de dados cadastros, contendo as tabelas clientes e fornecedores. Crie o
banco de dados e as estruturas das tabelas usando o monitor MySQL.

Gerao de cdigo JavaScript com PHP


w Com scripts PHP possvel a gerao de cdigos JavaScript dinmicos. Por
exemplo:
aula06_06.php
<html>
<head><title>Gerando JavaScript com PHP</title></head>
<body>
<script language="JavaScript">
Note que este script PHP ir completar o
<?php
cdigo JavaScript do documento HTML que
$data = date("d/m/Y",time());
ser enviado ao cliente. Execute este script
echo "alert('Data atual = $data');";
e clique com o boto direito sobre a
?>
pgina exibida e selecione a opo Exibir
</script>
cdigo-fonte para verificar o documento
</body></html>
enviado ao cliente.
ELFS, 2003

184

Introduo Linguagem PHP


w

Evidentemente, a partir de scripts PHP possvel a gerao de cdigo


JavaScript muito mais sofisticado. Como o cdigo JavaScript um texto, em
princpio, no existem limites para a gerao deste cdigo a partir de um
script PHP.

Uma outra aplicao de scripts PHP na autenticao de usurios (que,


evidentemente, no pode ser feita por cdigo JavaScript, pois o programafonte estaria disponvel a qualquer cliente). Considere, por exemplo, o
seguinte documento HTML:
aula06_07.htm
<html>
<head>
<title>Autenticao de Usurio</title>
</head>
<body>
<h1>Autenticao</h1>
<form name="usuario" action="autoriza.php">
<p>Login: <input name="login" type="text" size="20"></p>
<p>Senha: <input name="senha" type="password" size="20"></p>
<input name="entrar" type="submit" value=" Entrar ">
</form>
</body>
</html>

ELFS, 2003

185

Introduo Linguagem PHP


w

Vamos considerar que as senhas dos usurios esto armazenadas na tabela


senhas do banco de dados usuarios. Vamos considerar a criao desta tabela
a partir dos seguintes comandos SQL:
senhas.sql
CREATE TABLE senhas ( login varchar(20),
senha varchar(20),
UNIQUE (login) );
INSERT INTO senhas VALUES ('Senne','feg2003');

O script autoriza.php pode ser escrito como:


autoriza.php
<?php
// *********************************************************
//
// Um script simples de autenticao de usurios
//
// *********************************************************
$conecta = mysql_connect("localhost","root");
if ($conecta)
{
$sql = "select * from senhas where login = '$login'";
$query = mysql_db_query("usuarios", $sql, $conecta);
$result = mysql_fetch_array($query);

ELFS, 2003

186

Introduo Linguagem PHP


if ($result["login"] != $login)
{
echo("<h1>Usurio $login no cadastrado!!!</h1>");
}
else
O tag META pode ser usado para
identificar propriedades de um
{
documento HTML (autor, data de
if ($result["senha"] != $senha)
expirao, lista de palavras-chave,
{
etc.) e para especificar um
echo("<h1>Senha no confere</h1>");
cabealho HTTP a ser passado ao
}
navegador, permitindo que uma
else
URL seja carregada.
{
echo "<META HTTP-EQUIV='REFRESH' CONTENT=\"0;
URL='http://www.feg.unesp.br'\">";
}
}
Note o uso da barra invertida ( \ ) para
mysql_free_result($query);
poder incluir o caractere aspas ( " ) dentro
}
de um string.
else
{
echo("Erro na conexo " . mysql_error() . "\n");
}
mysql_close($conecta);
?>
ELFS, 2003

187

Você também pode gostar