JavaScript - Aula06

24
ELFS, 2003 164 6. Introdução à Linguagem PHP w A comunicação na Web exige dois agentes: o cliente web e o servidor web. O cliente requer informação (a partir de uma página HTML acessada pelo navegador) e o servidor fornece a informação requerida. Isto é feito na web por meio de fluxos de textos que atendem ao protocolo HTTP (Hypertext Transfer Protocol). O cliente requer uma informação ao servidor, o servidor reconhece a requisição do cliente e gera um conteúdo correspondente (na forma de um texto HTML) e devolve este conteúdo como resposta ao cliente, que o visualiza no navegador. w Os programas JavaScripts são interpretados diretamente pelo navegador (ou seja, pelo próprio cliente). Neste caso, dizemos que a programação web é feita pelo lado do cliente (client-side programming). Navegador Servidor Web Gerador de Conteúdo requisição resposta Cliente Servidor

Transcript of JavaScript - Aula06

Page 1: JavaScript - Aula06

ELFS, 2003 164

6. Introdução à Linguagem PHP

w A comunicação na Web exige dois agentes: o cliente web e o servidor web. O cliente requer informação (a partir de uma página HTML acessada pelo navegador) e o servidor fornece a informação requerida. Isto é feito na webpor meio de fluxos de textos que atendem ao protocolo HTTP (Hypertext Transfer Protocol). O cliente requer uma informação ao servidor, o servidor reconhece a requisição do cliente e gera um conteúdo correspondente (na forma de um texto HTML) e devolve este conteúdo como resposta ao cliente, que o visualiza no navegador.

w Os programas JavaScripts são interpretados diretamente pelo navegador (ou seja, pelo próprio cliente). Neste caso, dizemos que a programação web éfeita pelo lado do cliente (client-side programming).

Navegador Servidor Web

Gerador de

Conteúdo

requisição

resposta

Cliente Servidor

Page 2: JavaScript - Aula06

ELFS, 2003 165

Introdução à Linguagem PHP

w No caso da linguagem PHP, a programação é interpretada pelo servidor que, a partir de um gerador de conteúdo (o interpretador da linguagem PHP) produz uma página HTML que é então devolvida ao cliente. Neste caso, dizemos que a programação é pelo lado do servidor (server-side programming).

w Assim, no caso da linguagem JavaScript, os programas fazem parte do documento HTML que está sendo visualizado no navegador (pois o próprio navegador tem que interpretá-los) sendo, portanto, possível ao cliente ter acesso ao código-fonte destes programas.

w No caso da linguagem PHP, a página que está sendo visualizada no navegador é o resultado da interpretação do programa-fonte pelo gerador de conteúdo do servidor, ou seja, a partir do código-fonte de um programa PHP é gerada um documento HTML correspondente (que não inclui o código-fonte). Assim, a programação pelo lado do servidor "esconde do cliente" os detalhes de programação.

w 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:\apacheonde serão instalados todos estes componentes. Dentro desta pasta, serácriada a pasta htdocs como diretório padrão para os documentos web(arquivos HTML e arquivos PHP).

Page 3: JavaScript - Aula06

ELFS, 2003 166

Introdução à Linguagem PHP

w Para testar se o servidor Apache e o interpretador PHP estão funcionando, copie o arquivo a seguir para a pasta C:\apache\htdocs:

w Agora, aponte o navegador para: http://localhost/aula06_01.phpO resultado deve ser como o mostrado abaixo.

<?php$txt1 = "O servidor Apache";$txt2 = "o interpretador PHP";$txt3 = "estão 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>";

?>

aula06_01.php

Page 4: JavaScript - Aula06

ELFS, 2003 167

Introdução à Linguagem PHP

w O código PHP também pode ser incluído como scripts em um documento HTML (como em JavaScript). É preciso, no entanto, usar a extensão .php para o nome do documento. Exemplo:

w Execute no navegador http://localhost/aula06_02.php. Clique com o botão direito sobre a página exibida e escolha a opção "Exibir código-fonte" para se certificar de que o script PHP não fica disponível ao cliente.

w O importante, com a linguagem PHP, é a possibilidade de construção de páginas dinâmicas (páginas cujo conteúdo dependem de uma interação com o usuário). Para isto, vamos usar o gerenciador de bancos de dados MySQL.

<html><body><?php

$txt1 = "O servidor Apache";$txt2 = "o interpretador PHP";$txt3 = "estão 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>

aula06_02.php

Page 5: JavaScript - Aula06

ELFS, 2003 168

Introdução à Linguagem PHP

w Como padrão, a instalação do MySQL cria o usuário root que não requer senha. É papel do administrador dos bancos de dados acrescentar novos usuários e suas permissões de uso. Vamos criar o banco de dados dai para o usuário root. Para isto, digite em uma janela de comandos: mysqladmin -u root create dai

w Em seguida, vamos criar a tabela alunos do banco de dados dai, a partir dos seguintes comandos SQL:

w 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

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

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');

alunos.sql

Page 6: JavaScript - Aula06

ELFS, 2003 169

Introdução à Linguagem PHP

w Digite na janela de comandos: mysql -u root

w Digite, então, os comandos a seguir (note que o ponto-e-vírgula é necessário) 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

w Outra forma de verificar bancos de dados e tabelas é com o programa winmysqladmin.

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

Page 7: JavaScript - Aula06

ELFS, 2003 170

Introdução à Linguagem PHP

w Para isto, vamos considerar o seguinte documento HTML: <html><head><title>Edição de Tabelas com PHP</title></head><body><form name="EdTab" action="aula06_03.php" method="post"><h1>Alunos de DAI</h1><p>Número: <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>Operação:

<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>

aula06_03.htm

Page 8: JavaScript - Aula06

ELFS, 2003 171

Introdução à Linguagem PHP

w Considere o seguinte script PHP:

<?php// Edição de tabela de banco de dados.

/* Note que comentários podem ser feitos tambémde forma a ocupar diversas linhas.Neste caso, basta usar os delimitadoresde início e fim de comentário. */

// *********************************************************

aula06_03.php

Note que, neste formulário, o usuário deverá escolher uma das operações e clicar no botão Executar. Com isto será executado (no lado servidor) o script aula06_03.php, que construirá uma página de resposta à requisição do usuário.

Note, no documento HTML, que estão definidos os identificadores: edNum, edNome e edSobre(nomes das caixas de edição) e também o identificador Escolha (identifica qual operação foi escolhida pelo usuário).

Page 9: JavaScript - Aula06

ELFS, 2003 172

Introdução à Linguagem PHP

function listagem($conecta){

$sql = "select * from alunos";

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

echo("<h1>Listagem de Alunos</h1>");echo("<table border width=50%");echo("<tr><th>Número</th><th>Nome</th><th>Sobrenome</th></tr>");

while ($result = mysql_fetch_array($query)){

echo("<tr>");echo("<td>" . $result["num"] . "</td>");echo("<td>" . $result["nome"] . "</td>");echo("<td>" . $result["sobrenome"] . "</td>");echo("</tr>");

}

mysql_free_result($query);}

// *********************************************************

Sempre que o comando SQL resultar em uma tabela(como no caso de um select), os recursos de memória alocados à variável que armazena os resultados da consulta (no caso, a variável $query) devem ser liberados com a função mysql_free_result.

A função mysql_fecth_array retorna uma linha da tabela (ou zero, caso não existam mais linhas). Note que os campos que compõem a linha são acessados como "índices".

Variáveis definidas dentro de funções em um script PHP são consideradas variáveis locais, a menos que sejam declaradas com o qualificador global.

Page 10: JavaScript - Aula06

ELFS, 2003 173

Introdução à 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);

echo("<h1>Inclusão de Alunos</h1>");if ($query){

echo("Aluno $edNome incluído na tabela!");}else{

echo("Erro na inclusão " . mysql_error() . "\n");}

}

// *********************************************************function encontrar($conecta,$edNum){

$sql = "select * from alunos where num = $edNum";

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

Note que o ponto ( . ) é o operador de concatenaçãode strings.

Note que se o nome de uma variável aparece em um string, ele será automaticamente substituído pelo valor da variável.

Page 11: JavaScript - Aula06

ELFS, 2003 174

Introdução à Linguagem PHP

$result = mysql_fetch_array($query);if ($result["num"] == 0){

echo("<h1>Aluno $edNum não existe!!!</h1>");$cod = 0;

}else{

$cod = 1;}

mysql_free_result($query);return $cod;

}

// *********************************************************function alterar($conecta,$edNum,$edNome,$edSobre){

echo("<h1>Alteração de Alunos</h1>");

if (encontrar($conecta,$edNum) == 1){

$sql = "update alunos set nome = '$edNome', sobrenome = '$edSobre' " ."where num = $edNum";

Note que se um campo da tabela for do tipo varchar, o valor do campo deve ser delimitado por aspas ou por apóstrofos (é o caso dos campos nome e sobrenome, da tabela alunos). Para campos numéricos, o valor não precisa estar delimitado por aspas ou por apóstrofos (é o caso do campo num).

Page 12: JavaScript - Aula06

ELFS, 2003 175

Introdução à Linguagem PHP

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

if ($query){

echo("Aluno $edNum alterado!");}else{

echo("Erro na alteração " . mysql_error() . "\n");}

}}

// *********************************************************function excluir($conecta,$edNum){

echo("<h1>Exclusão de Alunos</h1>");

if (encontrar($conecta,$edNum) == 1){

$sql = "delete from alunos where num = $edNum";

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

Page 13: JavaScript - Aula06

ELFS, 2003 176

Introdução à Linguagem PHP

if ($query){

echo("Aluno $edNum excluído da tabela!");}else{

echo("Erro na exclusão " . mysql_error() . "\n");}

}}

// *********************************************************//// Aqui começa o script principal//// *********************************************************$conecta = mysql_connect("localhost","root");if ($conecta){

switch ($Escolha){

case "1": listagem($conecta);break;

Note que o script principal tem acesso aos identificadoresdefinidos no documento HTML que chamou o script. Estes identificadores são tratados como variáveis (como é o caso de $Escolha). Note que a linguagem PHP faz distinção entre letras maiúsculas e minúsculas.

Page 14: JavaScript - Aula06

ELFS, 2003 177

Introdução à Linguagem PHP

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 conexão " . mysql_error() . "\n");}

mysql_close($conecta); ?>

Note que a função mysql_error() retorna, como um string, a mensagem de erro correspondente a uma operação SQL inválida. Isto ajuda na depuração do script PHP.

Observe que é necessário passar como parâmetrosde função os identificadores definidos no documento HTML, caso a função necessite de seus valores.

Page 15: JavaScript - Aula06

ELFS, 2003 178

Introdução à Linguagem PHP

w Devido à característica de ser processado pelo lado do servidor, um programa PHP não consegue interagir com os usuários depois que as páginas HTML são montadas e enviadas ao navegador. Entretanto, muitas vezes é preciso realizar tarefas na própria página como, por exemplo: validação de campos digitados pelo usuário, preenchimento dinâmico de listas com base em parâmetros informados na página, abertura de novas janelas, redirecionamento para outras páginas. Nestes casos, é mais interessante utilizar JavaScript.

w Considere, por exemplo, que no formulário de edição da tabela alunosdesejamos garantir que o usuário digitou o número do aluno como uma sequência de 5 dígitos e que os dois primeiros dígitos 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 formulário como:

<html><head><title>Edição de Tabelas com PHP</title><SCRIPT language="JavaScript">function verifica_numero(valor){

if (valor.length != 5)alert("Digite um número de 5 dígitos");

aula06_04.htm

Os acréscimos ao documento aula06_03.htm aparecem em destaque.

Page 16: JavaScript - Aula06

ELFS, 2003 179

Introdução à Linguagem PHP

ano = valor.substr(0,2);if (ano != "98" && ano != "99")

alert("Os dois primeiros dígitos 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 número do aluno deve conter apenas dígitos!");}</SCRIPT></head><body><form name="EdTab" action="aula06_03.php" method="post"><h1>Alunos de DAI</h1><p>Número:

<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:

Page 17: JavaScript - Aula06

ELFS, 2003 180

w Considere o seguinte formulário HTML, cujo código é apresentado a seguir. Neste formulário, quando o usuário clicar no botão Enviar, dependento da opção de cadastro, será chamado o script cad_cliente.php ou o script cad_fornece.php.

Introdução à Linguagem PHP

<input type="text" name="edSobre" size="30" maxlength="20"></p><br><p>Operação:

<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>

Page 18: JavaScript - Aula06

ELFS, 2003 181

Introdução à Linguagem PHP

<html><head><title>PHP e JavaScript</title><SCRIPT language="JavaScript">

function mostra_estado(){

var estados = new Array("SP - São Paulo","RJ - Rio de Janeiro","MG - Minas Gerais","ES - Espírito Santo","RS - Rio Grande do Sul","CE - Ceará","GO - Goiás","AM - 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: ";

aula06_05.htm

Page 19: JavaScript - Aula06

ELFS, 2003 182

Introdução à Linguagem PHP

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);

elseif ( documento.cadastro.tipo[0].cheched )

document.cadastro.action = "cad_cliente.php";else

document.cadastro.action = "cad_fornece.php";return ok;

}</SCRIPT>

aula06_05.htm

Page 20: JavaScript - Aula06

ELFS, 2003 183

Introdução à Linguagem PHP

</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>

aula06_05.htm

Page 21: JavaScript - Aula06

ELFS, 2003 184

Introdução à Linguagem PHP

w Exercício: Considerando o formulário dado em aula06_05.htm, escreva:a) Uma função verifica_email para testar a validade do e-mail digitado.

Considere que um e-mail válido é 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.

Geração de código JavaScript com PHPw Com scripts PHP é possível a geração de códigos JavaScript dinâmicos. Por

exemplo:

<html><head><title>Gerando JavaScript com PHP</title></head><body><script language="JavaScript"><?php

$data = date("d/m/Y",time());echo "alert('Data atual = $data');";

?></script></body></html>

aula06_06.php

Note que este script PHP irá completar o código JavaScript do documento HTML que será enviado ao cliente. Execute este script e clique com o botão direito sobre a página exibida e selecione a opção Exibir código-fonte para verificar o documento enviado ao cliente.

Page 22: JavaScript - Aula06

ELFS, 2003 185

Introdução à Linguagem PHP

w Evidentemente, a partir de scripts PHP é possível a geração de código JavaScript muito mais sofisticado. Como o código JavaScript é um texto, em princípio, não existem limites para a geração deste código a partir de um script PHP.

w Uma outra aplicação de scripts PHP é na autenticação de usuários (que, evidentemente, não pode ser feita por código JavaScript, pois o programa-fonte estaria disponível a qualquer cliente). Considere, por exemplo, o seguinte documento HTML:

<html><head><title>Autenticação de Usuário</title></head><body><h1>Autenticação</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>

aula06_07.htm

Page 23: JavaScript - Aula06

ELFS, 2003 186

Introdução à Linguagem PHP

w Vamos considerar que as senhas dos usuários estão armazenadas na tabela senhas do banco de dados usuarios. Vamos considerar a criação desta tabela a partir dos seguintes comandos SQL:

w O script autoriza.php pode ser escrito como:

CREATE TABLE senhas ( login varchar(20), senha varchar(20), UNIQUE (login) );

INSERT INTO senhas VALUES ('Senne','feg2003');

senhas.sql

<?php// *********************************************************//// Um script simples de autenticação de usuários//// *********************************************************$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);

autoriza.php

Page 24: JavaScript - Aula06

ELFS, 2003 187

Introdução à Linguagem PHP

if ($result["login"] != $login){

echo("<h1>Usuário $login não cadastrado!!!</h1>");}else{

if ($result["senha"] != $senha){

echo("<h1>Senha não confere</h1>");}else{

echo "<META HTTP-EQUIV='REFRESH' CONTENT=\"0;URL='http://www.feg.unesp.br'\">";

}}mysql_free_result($query);

}else{

echo("Erro na conexão " . mysql_error() . "\n");}mysql_close($conecta);

?>

O tag META pode ser usado para identificar propriedades de um documento HTML (autor, data de expiração, lista de palavras-chave, etc.) e para especificar um cabeçalho HTTP a ser passado ao navegador, permitindo que uma URL seja carregada.

Note o uso da barra invertida ( \ ) para poder incluir o caractere aspas ( " ) dentro de um string.