- O que é um servidor
- PHP: PHP Hypertext Preprocessor
- Bancos de dados e o MySQL
- Piratas e seus Tesouros 👑 x2
PHP: PHP Hypertext Preprocessor
- Como fizemos até hoje?
- O que faz um servidor Web?
- Página estática vs página dinâmica
- Servidor Apache
- Nas práticas
- Foram criados arquivos (HTML, CSS, etc) e, os mesmos, foram exibidos no navegador
- Os arquivos de um computador não podiam ser visualizados em outro
- Para disponibilizar para demais computadores, precisamos de um serviço que:
- Mantenha os arquivos
- A partir de um requisiçäo, envie os arquivos solicitados
- Controle os determinados erros que poderiam ocorrer
- Página inexistente, falta de permissão
- Para isso, usaremos um servidor Web e nos comunicaremos por meio do protocolo HTTP
- É um protocolo na camada de aplicação
Conjunto de regras bem definidas descrevendo como entidades se comunicam.
- É a "língua falada" pelo navegador e pelo servidor web
- Modelo requisição → resposta
::: figure .http-diagram.flex-align-center.figure-slides.clean.no-margin
- Resposta:
HTTP/1.1 200 OK Date: Mon, 23 May 2005 22:38:34 GMT Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux) Content-Type: text/html; charset=UTF-8 Content-Length: 131 <!DOCTYPE html> <html> <head> <title>Twitter</title> </head> <body> Olá mundo, este é um tweet. </body> </html>
::: figure .figure-slides.full-width-slides :::
- O servidor Web precisa:
- Saber "falar" o protocolo HTTP para atender as requisições
- Conhecer o sistema de arquivos do SO para entregar arquivos solicitados (JS, HTML, CSS, imagens etc.)
- O servidor Web pode (opcional... alguns fazem, outros não):
- Executar algum arquivo escrito em alguma linguagem de programação
- Permitir a geração dinâmica de arquivos HTML (e.g., usando PHP)
- Permitir a recepção de arquivos (e.g., cliente fazendo upload)
- Entender outros protocolos além de HTTP: HTTPS, FTP, etc.
- Gerenciar conexões simultâneas de vários "solicitantes"
[SO]: Sistema Operacional
Pág. estáticas ~ O servidor simplesmente entrega um arquivo .html da forma como ele foi criado pelo programador ~ É o que temos feito
Pág. dinâmicas ~ Podem exibir um conteúdo diferente, dependendo: - Usuário que está logado - Parâmetros de entrada - Além disso, elas podem exibir conteúdo que está armazenado em um banco de dados ~ É o que vamos fazer hoje!
- Exemplo:
- Existe um arquivo
index.html
para a página inicial - +1 arquivo
.html
para cada raçaalgodovelha.html
piratovelha.html
ovelho-pixel.html
- Problema: precisa-se repetir muito código HTML entre uma página e outra
- Existe um arquivo
::: figure .figure-slides.clean :::
domínio ~ Em que computador estão os arquivos
porta ~ Qual endereço do programa dentro do computador
caminho ~ Qual o endereço até o arquivo
query string ~ Identificar o que se deseja mostrar - por exemplo, o código identificador da ovelha
O back-end pode usar a query string para fazer uma busca no banco de dados e retornar informações sobre algo específico.
[URL]: Unique Resource Locator
- Exemplos de Servidores Web:
- Apache
- Tomcat
- JBoss
- IIS
- Nginx
- http-server
- Vejamos um exemplo de servidor web que simplesmente envia arquivos
estáticos (
.html
,.js
,.css
, imagens etc.):http-server .
- Além de servir arquivos estáticos, eles podem executar scripts (programas)
em diversas outras linguagens:
- PHP, Python, Java, ASP .NET etc.
- A esses programas, que executam em um servidor web, damos o nome de back-end (digamos, a "parte oculta" de um site)
- O servidor web mais utilizado desde 1995
- Tipicamente (mas não exclusivamente) associado à linguagem PHP
- Motivos para seu sucesso:
- Projeto altamente modularizado e configurável
- Gratuito
- Extensível
- Bom desempenho
- Multi-plataforma (Linux, Windows, OSX)
- Sintaxe Básica
- Condicionais
- Estrutura de Repetição
- Vetores
- É uma linguagem amplamente usada
- É executada no servidor para preprocessar e gerar HTML dinamicamente
- O código PHP é tipicamente mesclado ao HTML
- Mas existem formas mais organizadas
- Assim, todo código PHP deve iniciar por
<?php
e finalizar com?>
...
<body>
<h1>Produto: <?php echo produto["nome"]; ?></h1>
</body>
</html>
echo
: exibe no HTML o que for passado como parametro. Exemplo, arquivoindex.php
:
<html>
<head>...</head>
<body>
<?php echo "<p>Olá Mundo</p>"; ?>
</body>
</html>
- O servidor irá ler
index.php
, processá-lo e enviar ao navegador o seguinte código HTML:
<!DOCTYPE html>
<html>
<head>...</head>
<body>
<p>Olá Mundo</p>
</body>
</html>
- Variáveis não precisam ser declaradas
- Toda a variável inicia-se com o caractere
$
- Exibir a variável no HTML:
echo
(tipoprintf
do C) - Para concatenação de strings, usa-se o ponto
.
- Com aspas duplas, o PHP faz substituição das variáveis na string:
<?php $a = 1; echo $a; //imprime: 1 echo "resultado: " . $a; // imprime: resultado: 1 echo "resultado: $a"; // imprime: resultado: 1 echo 'resultado: $a'; // imprime: resultado: $a ?>
- Condicionais possuem a sintaxe similar ao JavaScript:
<?php $a = 1; $b = rand(); // rand(): retorna um número inteiro aleatório echo "b: $b"; if ($a > $b) { echo "'a' é maior que 'b'!"; } else { echo "'b' é maior ou igual a 'a'!"; } ?>
- Também possui a sintaxe similar ao JavaScript
<?php $numero = rand(2,9); // aleatório entre 2 e 9 ?> <h1>Tabuada do <?php echo $numero ?></h1> <ul> <?php for($i = 1; $i < 10; $i++) { $resultado = $i * $numero; echo "<li>$i x $numero = $resultado</li>"; } ?> </ul>
<?php $numero = rand(2,9); // aleatório entre 2 e 9 ?>
<h1>Tabuada do <?php echo $numero ?></h1>
<ul>
<?php
$i = 1;
while($i < 10) {
$resultado = $i * $numero;
echo "<li>$i x $numero = $resultado</li>";
$i++;
}
?>
</ul>
- Inicialização:
<?php $frutas = array("kiwi", "morango", "uva"); ?>
- Percorrendo o array:
<?php echo("<ul>"); for ($i = 0; i < count($frutas); $i++) { echo("<li>{$frutas[$i]}</li>"); } echo("</ul>"); ?>
- para imprimirmos um valor do array em uma string, colocar chaves
- A função
count
retorna o tamanho do array
- Arrays em PHP são, na verdade, mapas ordenados:
- mapeiam uma chave a um valor
- Exemplo:
<?php $personagem = array(nome => "luke", pontos => 123); $personagem["pontos"] += 100; echo("O personagem {$personagem['nome']} possui {$personagem['pontos']}"); ?>
- São parecidos com os objetos em JavaScript!
- Por que centralizar dados?
- SGBDs
- Entidades e Relacionamentos
- Tabelas e Registros
- Cláusula SELECT
- PHP e MySQL
- Servidores são úteis para centralizar dados, para, por exemplo:
- salvar/ler mensagens de um bate-papo;
- apresentar/escrever e-mails;
- exibir/escrever posts de um blog;
- exibir e registrar compras de produtos de um site de compra.
- Para centralizar, temos que armazenar estes dados em:
- Arquivos ou
- Bancos de Dados
- Bancos de dados armazenam os seus dados de uma forma:
- mais estruturada
- favorecendo o uso por muitos usuários
- SGBD: É um conjunto de ferramentas para gerenciar bancos de dados
- São exemplos de SGBDs:
- MySQL
- Postgres
- Oracle
- MS SQL Server
- Usaremos o MySQL por ser gratuito, multiplataforma e popular
*[SGBD]: Sistema de Gerenciamento de Banco de Dados
- Um banco de dados é formado por um conjunto de entidades com relacionamentos
- Entidades podem ser abstratas ou concretas:
- Pessoa, Carro, Alimento, Pedido, Transação Bancária
- Cada entidade pode ter relacionamentos com outras:
- Uma pessoa faz diversas transações bancárias
- Um carro possui uma pessoa que é seu dono
- Uma pessoa pode fazer diversos pedidos de compra
- Em SGBDs, entidades são representadas por tabelas
- Uma entidade é representada por uma ou mais tabelas em um SGBD
- Tais tabelas possuem um conjunto de registros
- Na tabela, cada linha é um registro e cada coluna é um campo que descreve aquela entidade
Para interagir com um SGBD, precisamos de uma linguagem...
- Tendo um conjunto de tabelas, precisamos de uma linguagem para:
- Manipular e pesquisar nos registros
- Criar, alterar a estrutura das tabelas
- Conceder e retirar permissões de usuários, etc.
- Para isso, foi criado o SQL que é uma linguagem padrão que a maioria dos SGBDs adotam (com algumas adaptações)
- Na aula de hoje, iremos aprender a consultar os registros que uma tabela possui usando a cláusula SQL SELECT
*[SQL]: Structured Query Language
- Seleciona todas as colunas e registros da tabela
RACA_OVELHA
- Seleciona o nome de todas as raças de ovelha (i.e. tabela
RACA_OVELHA
)
- Seleciona o nome e alimento preferido de todas as raças de ovelha (i.e. tabela
RACA_OVELHA
) em que a expectativa de vida é menor que 5 anos
- Para usarmos o MySQL no PHP precisamos conectar ao MySQL:
<?php // faz a conexão com o banco de dados $db = mysqli_connect("localhost", "root", "123456", "piratas"); $db->set_charset("utf8"); // verifica se a conexão funcionou... if (!$db) { // encerra a execução do script php, dando um erro $descricaoErro = "Erro! Detalhes: " . mysqli_connect_error(); die($descricaoErro); } ?> <!DOCTYPE html> <html> <head> ⋮
- Logo após, podemos fazer uma consulta, por exemplo, exibindo todas as raças de ovelha:
<?php $sql = "SELECT nome, alimento_preferido FROM raca_ovelha"; $result = $db->query($sql); // $db é a conexão obtida if ($result->num_rows > 0) { echo("<ul>"); while($linha = $result->fetch_assoc()) { $html = "<li>Ovelhas da raça <strong>{linha['nome']}</strong>"; $html .= "gostam de {linha['alimento_preferido']} </li>" echo($html); } echo("</ul>"); } else { echo("<p>Não existem ovelhas cadastradas</p>"); } ?>
- Instalando Apache, PHP e MySQL
- Atividade de hoje
- Pergunte ao professor se é necessário instalar algo nos
laboratórios
- É provável que já esteja tudo funcionando... de qualquer forma, leia sobre como fazê-lo
- Podemos instalar (a) cada software separadamente ou (b) um pacote que instala todos de uma vez (mais fácil)
- Ao instalar, lembre-se apenas de anotar o usuário (normalmente 'root') e senha escolhidos para o MySQL
WAMP: Windows, Apache, MySQL e PHP LAMP: Linux, Apache, MySQL e PHP
- Torne a página dos tesouros do Barba-Ruiva uma página dinâmica usando o Apache, PHP e um banco de dados MySQL
- Veja o enunciado completo no Github