Lista
Exerc´ıcio 1 Exerc´ıcio 2 Exerc´ıcio 3
Exerc´ıcio 4
Acesso a Base de Dados Via Web
Hernani Costa
hpcosta@dei.uc.pt
Redes de Comunica¸c˜ao 2011/2012 Exerc´ıcios
Lista Exerc´ıcio 1 Exerc´ıcio 2 Exerc´ıcio 3 Exerc´ıcio 4 Nodo Exerc´ıcio Valores 1 1.05v 2 1.05v 3 1.05v 4 1.05v Total 4.2v
Lista Exerc´ıcio 1
Exerc´ıcio 2 Exerc´ıcio 3 Exerc´ıcio 4
Descreva o modo de funcionamento do acesso a uma BD atrav´es da linguagem PhP.
Lista
Exerc´ıcio 1
Exerc´ıcio 2
Exerc´ıcio 3 Exerc´ıcio 4
Crie as seguintes tabelas:
Table: Tabela Jogador.
NomeJogador Idade NomeClube Posicao Nacionalidade
Deco 28 Chelsea M´edio Portuguesa
Raul Meireles 26 FC Porto M´edio Portuguesa Ronaldinho 28 AC Milan Avan¸cado Brasileira
Lucho 28 FC Porto M´edio Argentina
Jo˜ao Moutinho 22 Sporting M´edio Portuguesa Laranjeira 30 Leix˜oes Defesa Portuguesa
Lista
Exerc´ıcio 1
Exerc´ıcio 2
Exerc´ıcio 3 Exerc´ıcio 4
Table: Tabela Clube.
NomeClube Pais Idade Est´adio
FC Porto Portugal 115 Drag˜ao Real Madrid Espanha 120 Santiago Barnab´eu Manchester U. Inglaterra 100 Old Trafford
Lista
Exerc´ıcio 1
Exerc´ıcio 2
Exerc´ıcio 3 Exerc´ıcio 4
Inserir os dados nas respetivas tabelas.
Listar todos os clubes.
Listar o nome e o est´adio de cada clube.
Listar os nomes de todos osjogadores com mais de 23 anos (inclusive).
Lista
Exerc´ıcio 1
Exerc´ıcio 2
Exerc´ıcio 3 Exerc´ıcio 4
Listar o nome dos jogadorescom 26 ou 30 anos.
Listar toda a informa¸c˜ao dos jogadorescom idades entre os 22 (inclusive) e os 26.
Listar o nome dos clubese idadeonde a idade ´e maior que 110 e menor que 95.
Listar todos os nomes dejogadores come¸cados por ‘R’.
Listar todos os nomes dejogadores que contenham “inh” no nome.
Lista
Exerc´ıcio 1
Exerc´ıcio 2
Exerc´ıcio 3 Exerc´ıcio 4
Listar os nomes dos jogadorese a sua idade porordem crescentede idade.
Listar os nomes dos jogadorescom idades iguais a 26 anos ou com mais de 28 porordem alfab´etica.
Contar o n´umero dejogadoresda tabela jogador.
Lista
Exerc´ıcio 1
Exerc´ıcio 2
Exerc´ıcio 3 Exerc´ıcio 4
Contar o n´umero dejogadoresque n˜ao jogam no FC Porto.
Listar a idade do clube mais velho da tabela alertclube.
Indicar a idade do jogador mais novo da tabelajogador que seja m´edio.
Calcular a m´edia de idades dosjogadoresde nacionalidade portuguesa.
Lista
Exerc´ıcio 1
Exerc´ıcio 2
Exerc´ıcio 3 Exerc´ıcio 4
Calcular a soma das idadesdos clubes portugueses centen´arios.
Listar todos os nomes dosjogadores portugueses que joguem em clubes de Portugal.
Listar todos osjogadores portugueses que joguem em clubes de Portugal e tenham mais de 25 anos.
Listar todos osjogadores estrangeiros que joguem em equipas portuguesas.
Lista Exerc´ıcio 1 Exerc´ıcio 2 Exerc´ıcio 3 Exerc´ıcio 4 M´odulo 7
Resolva os pontos seguintes em linguagem PhP, HTML e SQL.
Criar uma tabela de nome Aluno atrav´es do MySQL como a que se mostra de seguida.
Nota: Criar apenas a tabela. Deixe o seu conte´udo vazio.a
Table: Tabela Aluno.
Nome Idade ... ...
Lista
Exerc´ıcio 1 Exerc´ıcio 2
Exerc´ıcio 3
Exerc´ıcio 4 Criar um novo ficheiro de nome form.html onde deve
Lista
Exerc´ıcio 1 Exerc´ıcio 2
Exerc´ıcio 3
Exerc´ıcio 4
Criar um ficheiro de nome inserir.phponde dever´a constar o c´odigo para captar o nomee idadeescrito nas caixas de texto.
Ajuda: use o m´etodo GET ou POST e baseia-se nos seguintes c´odigos $ GET[‘nome da caixa de texto’] ou
$ POST[‘nome da caixa de texto’] para captar o valor da caixa de texto.
Na p´aginainserir.php deve ser mostrada a seguinte frase:
O seu nome ´e “valor da caixa de texto nome” A sua idade ´e “valor da caixa de texto idade”
Lista
Exerc´ıcio 1 Exerc´ıcio 2
Exerc´ıcio 3
Exerc´ıcio 4
Acrescentar o c´odigo necess´ario para ligar `a BD e para conseguir introduzir os dados nela atrav´es do formul´ario. Alterar o c´odigo da p´agina inserir.phponde agora deve ser mostrada a seguinte mensagem:
Os dados foram inseridos com sucesso!
No caso de existir um erro deve conseguir detet´a-lo atrav´es de c´odigos de erro que devem estar presentes em todas as fun¸c˜oes relacionadas com a BD no seu c´odigo PhP.
Veja o seguinte exemplo do que se pretende, na fun¸c˜ao associada `a liga¸c˜ao `a BD.
Lista
Exerc´ıcio 1 Exerc´ıcio 2
Exerc´ıcio 3
Exerc´ıcio 4
$Iigax = mysqI connect(‘localhost’, ‘root’, ‘ ’); If (!$ligax){
echo ‘<p> Erro: Falha na liga¸c˜ao `a BD.’; exit;
Lista
Exerc´ıcio 1 Exerc´ıcio 2
Exerc´ıcio 3
Exerc´ıcio 4
Proceder `as altera¸c˜oes do c´odigo anterior para o seu caso particular, n˜ao se esquecendo de aplicar, da mesma forma, o c´odigo de erros `as restantes fun¸c˜oes.
No caso de j´a existir um nome na tabela igual ao que se pretende inserir deve aparecer no ecr˜a a seguinte
mensagem:
Lista
Exerc´ıcio 1 Exerc´ıcio 2
Exerc´ıcio 3
Exerc´ıcio 4
Crie um ficheiro de nomeligabd.php onde dever˜ao constar os c´odigos respons´aveis pela liga¸c˜ao `a BD bem como pela escolha da BD.
Substitua no ficheiro inserir.phpas linhas de c´odigo que colocou no ficheiro Iigabd.phppela seguinte:
Lista
Exerc´ıcio 1 Exerc´ıcio 2
Exerc´ıcio 3
Exerc´ıcio 4
Tente inserir um novo aluno para garantir que apesar desta altera¸c˜ao, tudo funciona normalmente.
Nota: Em todos os ficheiros que ser˜ao criados a partir
deste momento, que necessitem de aceder `a BD, dever˜ao
incluir apenas o c´odigoinclude (“ligabd.php”);
Acrescente ao form.html um link de nome “Listar
Registos”para uma p´agina de nomelistar.phpque ir´a criar de seguida.
Lista
Exerc´ıcio 1 Exerc´ıcio 2
Exerc´ıcio 3
Exerc´ıcio 4
Crie a p´aginalistar.php que mostre todos os registos da tabelaAluno.
Ajuda: a por¸c˜ao do c´odigo seguinte lista todos os nomes
de jogadores, idade e clube da tabela jogador na forma de uma tabela.
Baseie-se neste c´odigo, procedendo `as altera¸c˜oes
necess´arias para que funcione quando lista os registos da
Lista Exerc´ıcio 1 Exerc´ıcio 2 Exerc´ıcio 3 Exerc´ıcio 4 <table border=“1”>
<tr><th> Nome Jogador </th><th> ldade </th><th> Nome Clube </th></tr> <?php
for ($i=0; $i <$num registos; $i++) { $registos = mysql fetch array($result); echo ‘<tr>’;
echo ‘</td>’ .$registos [‘nomejogador’]. ‘</td>’; echo ‘</td>’ .$registos [‘idade’]. ‘</td>’; echo ‘</td>’ .$registos [‘nomeclube’]. ‘</td>’; echo ‘</td>’ .$registos [‘Ano’]. ‘</td>’; echo ‘</td>’ .$registos [‘Email’]. ‘</td>’; echo ‘</tr>’;
} </table>
Lista
Exerc´ıcio 1 Exerc´ıcio 2
Exerc´ıcio 3
Exerc´ıcio 4
Acrescentar ao form.html um link de nome “Pesquisar”
para uma p´agina de nome pesquisa.html que iremos criar de seguida.
Crie uma p´agina de nome pesquisa.html com o seguinte aspeto:
Nota: o bot˜ao de submit dever´a estar direcionado para o
Lista
Exerc´ıcio 1 Exerc´ıcio 2
Exerc´ıcio 3
Exerc´ıcio 4
Crie um ficheiro de nomepesquisa.php onde liste numa tabela, `a semelhan¸ca dolistar.php, os nomes e idades dos alunos da tabela aluno que resultem da pesquisa.
Acrescente ao final da p´agina pesquisa.php o seguinte formul´ario:
Nota: o bot˜ao de submit dever´a estar direcionado para o
Lista
Exerc´ıcio 1 Exerc´ıcio 2
Exerc´ıcio 3
Lista
Exerc´ıcio 1 Exerc´ıcio 2
Exerc´ıcio 3
Exerc´ıcio 4
Crie um ficheiro de nomeapagar.php que apague um registo da tabela Aluno conforme o nome inserido na caixa de texto acima.
Lista
Exerc´ıcio 1 Exerc´ıcio 2 Exerc´ıcio 3
Exerc´ıcio 4
Crie uma BD e respetiva tabela que permita interagir com os dados dos formul´arios seguintes. N˜ao se esque¸ca de escolher uma chave prim´aria para a tabela.
Notas: A palavra “Registe-se” ´e um hyperlink para a
p´agina form.html onde deve constar os campos que
Lista
Exerc´ıcio 1 Exerc´ıcio 2 Exerc´ıcio 3
Exerc´ıcio 4
Crie um ficheiro de nomelogin.php.
Neste ficheiro deve constar o c´odigo respons´avel por verificar os dados do utilizador.
Lista
Exerc´ıcio 1 Exerc´ıcio 2 Exerc´ıcio 3
Exerc´ıcio 4
Caso este introduza corretamente os dados no formul´ario anterior, deve-lhe ser mostrada a p´aginamain.php e ainda a seguinte mensagem:
Ol´a X!
No caso do utilizador n˜ao se encontrar registado ent˜ao a p´agina a ler deve ser novamente a entrar.html.
Ajuda: a forma de redirecionar para outros ficheiros ´e
Lista
Exerc´ıcio 1 Exerc´ıcio 2 Exerc´ıcio 3
Exerc´ıcio 4 if (condi¸c˜ao para verificar username e password){
header[‘Location: main.php’]; exit; } else{ header[‘Location: entrar.html’]; exit; }
Lista
Exerc´ıcio 1 Exerc´ıcio 2 Exerc´ıcio 3
Exerc´ıcio 4
No ficheirologin.phpdever´a ficar gravada uma vari´avel de sess˜ao. Adapte o seguinte c´odigo ao seu.
Session start();
$ SESSION[“nome”]=$nome;
No c´odigo do ficheiromain.php j´a poder´a fazer aparecer o nome (em vez do X) de quem fez o login atrav´es da sua vari´avel de sess˜ao.
Session start();
Lista
Exerc´ıcio 1 Exerc´ıcio 2 Exerc´ıcio 3
Exerc´ıcio 4
Neste momento, se pretendesse entrar nomain.php bastava escrever essa p´agina diretamente no browser.
Como devem compreender esta ´e uma falha grave de seguran¸ca, visto permitir a entrada numa p´agina supostamente privada.
Para impedir que isto aconte¸ca, proceder `as seguintes altera¸c˜oes:
Lista
Exerc´ıcio 1 Exerc´ıcio 2 Exerc´ıcio 3
Exerc´ıcio 4
Incluir (com include) um ficheiro de nomevalidacao.php no c´odigo domain.php.
De seguida, no ficheirovalidacao.phpdever´a encontrar-se o c´odigo que verifique se a vari´avel de sess˜ao relativa ao nome do utilizador est´a definida
dica: pode usar a fun¸c˜ao isset(nome da vari´avel)
No caso de n˜ao se encontrar definida, deve saltar para a p´aginaerro.php(dica: pode usar a fun¸c˜ao header()) que mostrar´a no ecr˜a“Acesso reservado a utilizadores
Lista
Exerc´ıcio 1 Exerc´ıcio 2 Exerc´ıcio 3
Exerc´ıcio 4
Na p´aginamain.php dever´a ser criado um bot˜ao do tipo submit de nome “sair”.
Ao clicar nesse bot˜ao um ficheiro de nomelogout.php deve ser chamado.
No ficheiro deve constar o seguinte c´odigo:
Session start();
Lista
Exerc´ıcio 1 Exerc´ıcio 2 Exerc´ıcio 3
Exerc´ıcio 4
Adicionalmente dever´a constar no final do c´odigo acima mostrado, o redirecionamento para a p´agina entrar.html.
Teste o seu c´odigo tentando aceder diretamente `a p´agina main.php ap´os clicar no bot˜ao sair.