Programação para Internet
Curso de Sistemas de Informação
Prof. Dr. Daniel A. Furtado
Módulo 7
Introdução à Web Dinâmica com PHP
Universidade Federal de Uberlândia
Faculdade de Computação
1.
Motivação e Introdução ao PHP
2.
Criação de uma conta em servidor de hospedagem
Web com PHP
3.
Primeira página Web utilizando PHP
4.
Introdução à Linguagem PHP
5.
Formulários HTML com PHP
PHP é uma linguagem de script utilizada no
desenvolvimento de páginas Web interativas e
dinâmicas;
Scripts em PHP são executados no
lado do servidor
,
diferentemente daqueles em JavaScript, que rodam no
lado do cliente (navegador);
PHP é um acrônimo recursivo para
PHP: Hypertext
Preprocessor.
Por que PHP?
PHP pode ser executado em várias plataformas (Windows,
Linux, Unix, Mac OS X, etc.)
PHP é compatível com quase todos os servidores Web atuais
(Apache, IIS, etc.)
PHP suporta vários SGBDs
PHP é gratuito
PHP é fácil de aprender e é executado de maneira eficiente
no servidor
Programação para Internet 5
Linguagem PHP – Introdução
De acordo com o portal W3Techs.com, PHP é utilizada por
82.6% de todos os websites cuja linguagem do lado servidor
é conhecida.
De acordo com o
W3Techs, PHP é a
linguagem server-side
mais popular;
Entretanto, Java é a
linguagem mais
utilizada por websites
com alto tráfego.
Programação para Internet 7
Linguagem PHP – Motivação
O que pode ser feito com PHP?
•
Gerar conteúdo de página dinamicamente;
•
Manipular arquivos no servidor;
•
Receber, validar e manipular dados de formulários;
•
Enviar e receber cookies;
•
Adicionar, atualizar ou remover dados em banco de dados;
•
Criptografar dados;
•
Controle de acesso, etc.
Para utilizar o PHP há basicamente duas opções:
1.
Utilizar um serviço de hospedagem Web (web host) com suporte a
PHP (há serviços gratuitos e pagos disponíveis); ou
2.
Instalar e configurar um servidor Web com suporte a PHP no próprio
computador:
A instalação manual geralmente envolve três etapas:
Instalar e configurar um servidor Web (como o Apache HTTP);
Instalar e configurar o PHP;
Instalar e configurar um SGBD (como o MySQL).
Também é possível instalar todos os recursos por meio de um pacote de
instalação como o WAMP (Windows, Apache, MySQL and PHP)
http://www.wampserver.com/en/
Programação para Internet 9
Linguagem PHP – Introdução
Há diversos websites que oferecem o serviço de hospedagem
com suporte a PHP gratuitamente;
•
Entretanto, nos planos gratuitos geralmente há limitações com relação
ao tamanho do website, limite de tráfego e anúncios;
Exemplos:
•
www.awardspace.com
•
www.freehostia.com
•
www.freehosting.com
Para realização dos exercícios de aula e atividades extraclasse,
recomenda-se o uso de um serviço de hospedagem gratuito,
como o do awardspace.com.
Criação de uma Conta em Servidor de
Hospedagem Web com suporte a PHP
Crie um conta gratuita no awardspace.com
Após criação da conta, os dados de acesso são enviados para o e-mail de
cadastro
;
No awardspace.com, clique em login e forneça os dados necessários.
Programação para Internet 13
Exemplo de Serviço de Hospedagem
Exemplo de Serviço de Hospedagem
1
2
Utilizando o WinSCP para Enviar os
Arquivos para o Servidor
Pode-se utilizar um programa de FTP gratuito para enviar
arquivos para o servidor;
O WinSCP é um exemplo:
Envio dos arquivos ao servidor web
Coloque o número ClientID recebido no e-mail ao se
cadastrar no awardspace Coloque aqui o endereço completo cadastrado como subdomínio no
awardspace.
Exemplo: fulanodetal.atwebpages.com
Alguns servidores só aceitam o protocolo FTP
Tela principal do WinSCP após login do usuário:
Programação para Internet 17
Envio dos arquivos ao servidor web
Arquivos locais do
computador Arquivos no servidor
Pasta no servidor para armazenar os arquivos do
website vinculado ao
subdomínio cadastrado.
É possível configurar o WinSCP para que os arquivos da pasta local do
website sejam automaticamente enviados para o servidor sempre que
forem atualizados;
Este recurso pode ser bastante útil, uma vez que evita o reenvio dos
arquivos toda vez que eles são editados e alterados localmente;
Acesse Commands Synchonize, marque a opção Remote e clique em OK
Envio dos arquivos ao servidor web
Marque esta opção para os arquivos alterados localmente sejam automaticamente reenviados para o servidor
Crie um arquivo HTML simples com base no exemplo a seguir, salve-o
utilizando o nome
index.html
e envie para o servidor do awardspace
utilizando o WinSCP;
Em seguida, acesse a página digitando o endereço completo do website
no navegador.
Programação para Internet 19
Enviando uma Página de Teste
<!DOCTYPE html>
<html lang="pt-br"> <head>
<meta charset="UTF-8">
<title>Minha primeira página on-line</title> </head>
<body>
<h1> Bem vindo à minha primeira página on line! </h1> </body>
</html>
Primeira Página Dinâmica
Utilizando o PHP
Arquivo PHP (.php)
Um arquivo com código PHP deve ser salvo com a extensão .php
Um arquivo PHP pode conter elementos HTML, texto, CSS, e código
PHP;
O código PHP é executado no servidor, e o resultado é enviado para o
navegador como um arquivo HTML;
Um script PHP começa com
<?php
e termina com
?>
Programação para Internet 21
Linguagem PHP – Introdução
Prof. Dr. Daniel A. Furtado
<?php
// Código PHP
Envie o arquivo Anexos/ex01-hello.php para o servidor e em seguida acesse o
mesmo pelo navegador: www.enderecodoservidor/ex01-hello.php
Repare que um arquivo PHP pode conter tags HTML e código PHP;
Quando o arquivo é acessado através de um browser, o código PHP é executado no
servidor, e a saída desse código é mesclada com o restante do código HTML e enviado
para o navegador (neste exemplo utilizamos o construtor echo para tal);
Linguagem PHP – Exemplo 1
<!DOCTYPE html>
<html>
<body>
<h1>
Primeira página dinâmica com PHP
</h1>
<?php
for
($i
=
0;
$i
<
10;
$i++)
echo
"<h1>Título gerado dinamicamente com PHP! </h1>\n"
;
?>
</body>
</html>
Podemos ter diversos trechos de código PHP dentro do mesmo arquivo.
Envie o arquivo Anexos/ex02-hello.php para o servidor.
Linguagem PHP – Exemplo 2
Programação para Internet 23
<!DOCTYPE html> <html lang="pt-br"> <head>
<meta charset="UTF-8">
<title>Introdução ao PHP</title> </head> <body> <h1>Múltiplos trechos PHP</h1> <?php for ($i = 0; $i < 5; $i++)
echo "<h5>Subtitulo gerado com PHP</h5>\n";
?>
<h1>Múltiplos trechos PHP</h1>
<?php
for ($i = 0; $i < 5; $i++)
echo "<h5>Outro subtitulo gerado com PHP</h5>\n";
?>
</body> </html>
Há vários editores de texto multi-linguagem que poderiam ser
utilizados para desenvolvimento com PHP;
Entretanto, neste curso recomenda-se a utilização da IDE
Eclipse for PHP Developers:
1.
Acesse
www.eclipse.org/downloads/packages/
2.
Escolha a opção Eclipse for PHP Developers
3.
Escolha o sistema operacional e clique em baixar
4.
Descompacte o arquivo zip e execute o programa eclipse.exe
Comentários em PHP podem ser inseridos de maneira
semelhante às outras linguagens de programação:
Comentários em PHP
<!DOCTYPE html>
<html>
<body>
<h1>
Primeira página PHP
</h1>
<?php
// comentário de linha
/* comentário de
bloco */
?>
</body>
</html>
</html>
PHP não é sensível à caixa (case-sensitive) com respeito
às palavras reservadas, nomes de classes e funções;
Entretanto, PHP é sensível à caixa com respeito aos
nomes de variáveis.
Prof. Dr. Daniel A. Furtado
Programação para Internet 27
Em PHP, uma variável começa com o símbolo $, seguido pelo
nome da variável propriamente dito;
Não há um comando para declarar uma variável; ela é declarada
no momento de sua primeira atribuição.
Declaração de Variáveis
<?php
$x = 10;
$y = 2.5;
$msg = "
um texto qualquer
"
;
echo
$msg, $x, $y;
?>
Tipos suportados:
String
Integer
Float
Boolean
Array
Object
NULL
Resource
Tipos de Dados
Prof. Dr. Daniel A. Furtado
Programação para Internet 29
<?php
$x
=
5;
// variavel do tipo integer
$y
=
-6;
// variavel do tipo integer
$z
=
3.14;
// variavel do tipo float
$str
=
"bla bla bla"
;
// variavel do tipo string
$cond
=
true
;
// variável booleana
$estados
=
array
(
"MG"
,
"SP"
,
"RJ"
);
// vetor de strs
echo
$estados[0];
// mostra o 1o elem.
echo
$estados[1];
// mostra o 2o elem.
echo
não é considerada uma função, mas um construtor da linguagem.
Logo, não é obrigatório o uso de parênteses;
Quando utilizado com aspas duplas, o conteúdo da string é avaliado e
pode conter nomes de variáveis;
Se for utilizado com aspas simples, a string não será avaliada (não deve
ter nomes de variáveis);
Construtor echo
<?php
$idade = 15;
$mes = 10;
echo
"A idade eh $idade";
// a saída será: A idade eh 15
echo
'A idade eh $idade';
// a saída será: A idade eh $idade
// É possível separar os ‘argumentos’ por vírcula
echo
$idade, $mes;
// saída: 15 10
echo
"Idade: ", $idade, "Mês: ", $mes;
// saída: Idade: 15 Mês: 10
// Também é possível concatenar os ‘argumentos’ com o operador .
O construtor echo também pode ser utilizado para enviar para a
saída um bloco de texto (por exemplo, com conteúdo HTML) com a
possibilidade de intercalar conteúdos de variáveis.
Construtor echo
Prof. Dr. Daniel A. Furtado
Programação para Internet 31
<?php
echo
<<<HTML
Todo este texto com múltiplas linhas será enviado
para a saída com interpolação de
$variavel
Porém não deve haver nenhum espaço após
<<<HTML
e
nenhum outro caractere na linha do ultimo
HTML,
exceto o ponto-e-vírgula
HTML;
?>
Dica: O termo HTML utilizado no exemplo acima após os caracteres <<< poderia
ser substituído por qualquer outro texto, como CODIGO, BLOCO, SQL, etc.
Estruturas Condicionais e de Repetição
do
{
// operações
// operações
while
(expressao) {
// operações
// operações
}
for
($i = 0; $i < 10; $i++){
// operações
}
if (expressão) {
// operações
}
if (expressão) {
// operações caso verdadeiro
}
else {
// operações caso falso
}
if (expressao1) {
// bloco de operações 1
}
else if (expressao2) {
// bloco de operações 2
}
else {
// bloco de operações 3
$cores = array("R","G","B");
foreach
($cores
as
$cor) {
echo $cor;
}
PHP também disponibiliza a declaração elseif
Estrutura Condicional
if-elseif
Programação para Internet 33
if
(expressao1) {
// ops. a serem executadas caso 'expressao1' seja verdadeira
}
elseif
(expressao2) {
// ops. a serem executadas caso 'expressao2' seja verdadeira
}
elseif
(expressao3) {
// ops. a serem executadas caso 'expressao3' seja verdadeira
}
else
{
// ops. a serem executadas caso nenhuma expressão seja verdadeira
}
Operadores Aritméticos, Relacionais e Lógicos
Operador
Significado
+
Adição
-
Subtração
*
Multiplicação
/
Divisão
%
Resto da divisão inteira
(módulo)
++
Incremento
--
Decremento
**
Exponenciação
Operador de concatenação:
.
Operador
Significado
==
Comparação por igualdade
===
Comparação por igualdade,
incluindo valor e tipo
!= ou <> Diferente
>
Maior que
>=
Maior ou igual a
<
Menor que
<=
Menor ou igual a
&& ou and “E” lógico
|| ou or “Ou” lógico
!
Negação lógica
Prof. Dr. Daniel A. Furtado
Programação para Internet 35
Operadores de Atribuição
Operador
Significado
Exemplo
=
Atribuição
var x = 0;
// atribui o valor 0 a x
+=
Atribuição com soma
var x += y;
// equivalente a: x = x + y
-=
Atribuição com subtração
var x -= y;
// equivalente a: x = x - y
*=
Atribuição com multiplicação
var x *= y;
// equivalente a: x = x * y
/=
Atribuição com divisão
var x /= y;
// equivalente a: x = x / y
%=
Atribuição com módulo
var x %= y;
switch
(expressao)
{
case
condicao1:
// bloco de operações
break
;
case
condicao1:
// bloco de operações
break
;
...
case
condicaoN:
// bloco de operações
break
;
default
:
// bloco de operações
}
Permite comparar uma expressão com diversos valores possíveis:
Uma forma de definir e inicializar um array em PHP é utilizando o
construtor array, como em:
$estados = array('MG', 'SP', 'RJ');
Também é possível definir um array atribuindo os elementos
diretamente às suas posições (sem definição prévia):
A função count devolve o número de elementos do array.
Tipos de Dados – Array Indexado
Programação para Internet 37
<?php
$estados[0] = 'MG';
$estados[1] = 'SP';
$estados[2] = 'RJ';
$n = count($estados);
for
($i = 0; $i < $n; $i++)
{
echo
$estados[$i];
}
?>
Um array vazio pode ser iniciado com a string vazia ‘ ‘, null ou
[]
;
Para acrescentar elementos automaticamente no final do array,
pode-se suprimir o índice, como no exemplo a seguir:
Tipos de Dados – Array Indexado
<?php
$arrayDeNumerosImpares = [];
for
($i = 1; $i < 100; $i = $i + 2)
{
arrayDeNumerosImpares
[] = $i;
// adiciona o elemento no final do array}
Em um array associativo é possível fornecer uma chave de
acesso (key) para cada elemento do array;
Para acessar o elemento deve-se informar a chave no lugar do
índice. Exemplo:
Tipos de Dados – Array Associativo
Programação para Internet 39
<?php
$alunos
=
array
(
"GSI010"
=>
"Augusto"
,
"GSI011"
=>
"Camila"
,
"GSI005"
=>
"Pedro"
);
echo
$alunos[
'GSI011'
];
// a saída será 'Camila'
echo
$alunos[0];
// ocorrerá um erro!!
?>
Prof. Dr. Daniel A. Furtado
Sintaxe:
Exemplo:
Definindo Funções
function
nomeFuncao(parâmetros) {
// operações da função
}
...
function
max($a, $b) {
if
($a > $b)
return
$a;
else
return
$b;
}
...
O escopo de uma variável é a parte do script onde a variável pode
ser acessada;
Em PHP, uma variável pode ser
local
ou
global
;
Uma variável declarada
dentro
de uma função tem
escopo local
e
pode ser acessada somente dentro da função;
Uma variável declarada
fora
de uma função tem
escopo global
e
pode ser acessada somente fora das funções (exceto se for
utilizada a palavra reservada global para realizar o acesso dentro
da função – ver próximo exemplo);
Escopo de Variáveis
Escopo de Variáveis – Exemplo
<?php
// variavel com escopo global
$x
=
5;
function
Teste
()
{
// acessar x dentro desta função resultará em um erro
echo
"<p>Variável x dentro da função: $x</p>"
;
// entretanto, ela pode ser acessada desta forma
global
$x;
echo
"<p>Variável x dentro da função (com global): $x</p>"
;
}
Teste
();
echo
"<p>Variavel x fora da função: $x</p>"
;
O PHP disponibiliza alguns arrays associativos especiais que
podem ser acessados de qualquer lugar dos scripts, sem a
necessidade de fazer global $array;
Eles são chamados de
arrays super globais
;
Alguns desses arrays são:
Prof. Dr. Daniel A. Furtado
Programação para Internet 43
Arrays Super Globais
Array
Descrição
$GLOBALS
Permite acessar as variáveis globais do script
$_SERVER
Contém informações sobre o servidor, do navegador, etc.
$_GET
Utilizado para acessar os campos de formulários submetidos pelo método GET
$_POST
Utilizado para acessar os campos de formulários submetidos pelo método POST
$_FILES
Permite acessar os arquivos enviados como anexos de formulários
$_COOKIE
Contém informações de variáveis passadas para o script via cookies HTTP
$_SESSION
Contém dados de variáveis de sessão
Algumas entradas do array super global $_SERVER são:
Arrays Super Globais
Array
Descrição
$_SERVER['PHP_SELF']
Fornece o nome do arquivo do script que está executando
$_SERVER['REQUEST_METHOD']
Contém o método da requisição HTTP utilizada para acessar a
página
$_SERVER['HTTP_USER_AGENT']
Contém informações sobre o navegador que está sendo
utilizado para acessar a página
Prof. Dr. Daniel A. Furtado
Programação para Internet 45
Classes e Objetos
<?php
class
Circulo
{
// declaração de propriedades
public
$raio
= 0;
public
$area = 0
;
// declaração de método
public function
mostraArea
()
{
echo
$this->area
;
}
// declaração de método
public function
calculaArea
()
{
$this->area = 3.14*$raio*$raio;
}
}
?>
<?php
$circ1
=
new
Circulo
();
$circ1->raio = 5;
$circ1->calculaArea();
$circ1->mostraArea();
?>
Definindo uma Classe
Formulários em HTML são frequentemente submetidos a scripts
PHP para validação, processamento e armazenamento dos
dados;
Os dados dos formulários submetidos a um script PHP podem
ser resgatados facilmente por meio dos arrays associativos
super globais
$_POST
e
$_GET
(dependendo do método
utilizado no envio);
Formulários HTML e PHP
Programação para Internet Prof. Dr. Daniel A. Furtado 47
OBS
: os exemplos apresentados nos próximos slides são introdutórios e não
tratam aspectos de segurança do website.
Recebendo dados de um formulário HTML
<html>
<body>
<form
action=
"processaForm.php"
method=
"post"
>
Nome:
<input
type=
"text"
name=
"nome"
><br>
E-mail:
<input
type=
"text"
name=
"email"
><br>
<input
type=
"submit"
>
</form>
</body>
</html>
<html>
<body>
<?php
// o array $_POST armazena os val. dos campos do formulário
// enviados pelo método post
$nome
=
$_POST[
"nome"
];
// Copia o valor do array para a var. $nome
=
$_POST[
"email"
];
// Copia o valor do array para a var. $email
echo
"Bem vindo, $nome! <br>"
;
echo
"Seu e-mail eh: $email! <br>"
;
?>
Formulário HTML
Cross-Site Scripting (XSS)
•
É um tipo de ataque em que um código malicioso (HTML,
CSS, JavaScript, etc.) é injetado no web site;
•
Acontece geralmente quando os dados enviados para o
servidor por meio da URL ou de campos de formulário
não são devidamente validados e recodificados;
•
Em alguns casos também é denominado de HTML
Injection.
Prof. Dr. Daniel A. Furtado
Programação para Internet 49
Os valores vindos de campos de formulários não devem ser utilizados pelo
script PHP sem antes serem validados, pois podem conter código malicioso
Prevenindo ataques XSS
<html>
<body>
<?php
// A função filtraEntrada (definida no próximo slide) elimina alguns
// caracteres especiais que poderiam ser inseridos de forma maliciosa
// no campo do formulário. Assim, conseguimos prevenir algumas formas
// de ataque ao website (HTML Injection / JavaScript Injection)
if (isset(
$_POST[
"nome"]
)
{
$nome
=
filtraEntrada(
$_POST[
"nome"]
)
}
?>
</body>
</html>
Prof. Dr. Daniel A. Furtado
Programação para Internet 51
Prevenindo ataques XSS
<?php
// Valida uma string removendo alguns caracteres
// especiais que poderiam ser provenientes
// de ataques do tipo HTML/CSS/JavaScript Injection
function
filtraEntrada
($dado)
{
// remove espaços no inicio e no final da string
$dado
=
trim
($dado);
// remove contra barras da string (caracter \ )
$dado
=
stripslashes
($dado);
// caracteres especiais do HTML (como < e >) são convertidos
// nos seus respectivos códigos HTML
// Por exemplo, o caracter < é convertido para <
$dado
=
htmlspecialchars
($dado);
return
$dado;
}
O mesmo arquivo PHP que exibe um formulário também pode realizar o
seu processamento. Neste caso, o formulário deve ser submetido para o
mesmo arquivo;
Uma forma de submeter um formulário para o próprio script PHP é
utilizando a variável super global
$_SERVER[
"PHP_SELF"
]
no atributo action
do formulário. Tal variável armazena o nome do arquivo em execução;
Para evitar ataques do tipo HTML Injection por meio da URL, utiliza-se
também a função
htmlspecialchars.
PHP e Formulários
<form
action=
"
<?php
echo
htmlspecialchars
($_SERVER[
"PHP_SELF"
]);
?>
"
method="POST">// campos do formulário
Ver exemplo disponível em:
https://www.w3schools.com/php/php_form_complete.asp
Prof. Dr. Daniel A. Furtado
Programação para Internet 53