Prática 01 — PHP: Executando no Servidor
Esta prática apresenta o primeiro contato com PHP no contexto de uma aplicação web.
O objetivo é entender por que um arquivo .php precisa ser executado por
um servidor, enquanto arquivos .html, .css e .js
podem ser abertos diretamente pelo navegador.
Ponto principal: se você abrir um arquivo index.php
com duplo clique, usando um endereço parecido com file:///..., o PHP
não será interpretado pelo servidor. Para executar PHP, use o Apache pelo XAMPP e
acesse a página por http://localhost/minha-pratica-php/index.php.
A pasta htdocs simula a pasta pública do servidor Apache. Tudo que estiver
dentro dela pode ser acessado pelo navegador usando localhost, desde que o
Apache esteja ligado no XAMPP.
Selecione uma prática ou exercício no menu lateral ou abaixo para começar.
Prática 01 — Preparando o servidor local
Antes de escrever código PHP, prepare o ambiente que vai interpretar esse código. Nesta prática, o XAMPP será usado para ligar o Apache, que funcionará como servidor web local.
Passo a passo
- Abra o XAMPP Control Panel.
- Ligue o serviço Apache.
- Abra a pasta de instalação do XAMPP e localize a pasta
htdocs. - Dentro de
htdocs, crie uma pasta chamadaminha-pratica-php. - Acesse
http://localhost/no navegador.
Se a página do XAMPP ou uma resposta do servidor aparecer, significa que o navegador
está conversando com o Apache pelo endereço localhost.
Orientação
A pasta htdocs deve ser entendida como o local onde ficará a aplicação PHP.
Se você criar a pasta minha-pratica-php dentro de htdocs, todo
arquivo colocado nessa pasta passa a fazer parte dessa aplicação.
O endereço base dessa aplicação no navegador será:
http://localhost/minha-pratica-php/
Quando você acessa esse endereço, o navegador está pedindo uma página ao servidor Apache.
O Apache procura o conteúdo dentro de htdocs/minha-pratica-php e devolve a
resposta para o navegador.
Teste extra: crie outra pasta dentro de htdocs, chamada
teste-servidor. Depois, acesse http://localhost/teste-servidor/
e compare o endereço com http://localhost/minha-pratica-php/. O objetivo é
perceber que cada pasta dentro de htdocs pode representar uma aplicação
diferente no servidor local.
Prática 02 — Criando o primeiro index.php
Crie o primeiro script PHP e execute-o pelo servidor local. O objetivo é confirmar que
o código dentro de <?php ?> está sendo interpretado antes de chegar ao navegador.
Arquivo
Crie o arquivo index.php dentro da pasta htdocs/minha-pratica-php.
<?php
echo "Olá, mundo! Meu primeiro código PHP está rodando no servidor.";
?>
Como executar
Correto: http://localhost/minha-pratica-php/index.php
Incorreto: abrir o arquivo por duplo clique e usar um caminho como file:///....
Explicação do código
<?phpinicia um bloco de código PHP. Tudo dentro desse bloco será interpretado no servidor.?>encerra o bloco PHP. Neste exemplo ele aparece para deixar claro onde o PHP termina.echoenvia uma resposta para o navegador. Nesse caso, a resposta é uma frase simples.- O endereço
http://localhost/minha-pratica-php/index.phpchama o arquivo pelo Apache, permitindo que o PHP seja executado no servidor.
Ao final, o navegador mostra a frase gerada pelo echo. Ele não executa PHP;
quem executa PHP é o servidor.
Teste extra: altere a mensagem do echo para mostrar seu
nome e sua turma. Depois, adicione um segundo echo imprimindo uma frase
em outra linha usando <br>.
Prática 03 — Usando echo e for
Substitua o conteúdo do index.php por um código que use for
para imprimir os números de 1 até 50. Cada número deve aparecer em uma linha.
Código sugerido
<?php
echo "<h1>Números de 1 a 50</h1>";
for ($i = 1; $i <= 50; $i++) {
echo $i . "<br>";
}
?>
Atualize a página em http://localhost/minha-pratica-php/index.php.
O laço roda no servidor; o navegador recebe apenas o HTML gerado.
Explicação do conteúdo
Em PHP, toda variável começa com $. Esse símbolo ajuda o interpretador a
identificar rapidamente que aquele nome representa uma variável, como em $i,
$nome ou $total.
Diferente de C# ou Java, o PHP não exige que o tipo seja escrito na declaração da variável. O tipo é associado ao valor recebido em tempo de execução.
$idade = 17; // inteiro
$preco = 25.90; // número decimal
$nome = "Ana"; // texto
$aprovado = true; // booleano
No código da prática, $i começa valendo 1, aumenta de um em
um e é impresso com echo. O operador . concatena o valor de
$i com <br>, que é uma quebra de linha em HTML.
Teste extra: altere o laço para imprimir apenas os números pares de
2 até 50. Depois, troque o título para
Números pares de 2 a 50.
Prática 04 — Passando valores pela URL com GET
Nesta prática, o próprio endereço da página vai enviar dados para o PHP. Use
$_GET para ler os valores de inicio e fim
informados na URL.
Código sugerido
<?php
$inicio = 1;
$fim = 10;
if (isset($_GET["inicio"])) {
$inicio = (int) $_GET["inicio"];
}
if (isset($_GET["fim"])) {
$fim = (int) $_GET["fim"];
}
echo "<h1>Contagem personalizada</h1>";
echo "<p>Início: " . $inicio . "</p>";
echo "<p>Fim: " . $fim . "</p>";
for ($i = $inicio; $i <= $fim; $i++) {
echo $i . "<br>";
}
?>
Testes no navegador
Sem parâmetros:http://localhost/minha-pratica-php/index.php
Com parâmetros:http://localhost/minha-pratica-php/index.php?inicio=5&fim=20
Outro teste:http://localhost/minha-pratica-php/index.php?inicio=30&fim=40
Explicação do conteúdo
A parte da URL depois do ? é chamada de query string.
Ela permite que o cliente, neste caso o navegador, envie dados para o servidor web Apache.
?inicio=5&fim=20
O PHP coloca esses valores na superglobal $_GET. Ela é chamada de
superglobal porque fica disponível em qualquer parte do script PHP,
sem precisar ser criada manualmente.
$_GET["inicio"]lê o valor enviado no parâmetroinicio.$_GET["fim"]lê o valor enviado no parâmetrofim.isset(...)verifica se aquele parâmetro realmente foi enviado.(int)converte o valor recebido pela URL para número inteiro.
Assim, uma mesma página PHP pode responder de formas diferentes dependendo dos dados enviados pelo navegador na URL.
Teste extra: adicione um terceiro parâmetro na URL chamado
passo, por exemplo ?inicio=5&fim=30&passo=5.
Depois, altere o for para usar esse valor como incremento da contagem.
Prática 05 — Formulário enviando início e fim por GET
Na prática anterior, os valores foram digitados manualmente na URL. Agora, o navegador
vai montar essa URL automaticamente a partir de um formulário HTML com os campos
inicio e fim.
Arquivo formulario_contador_get.html
Crie o arquivo formulario_contador_get.html dentro de
htdocs/minha-pratica-php.
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Contador com GET</title>
</head>
<body>
<h1>Contador com formulário GET</h1>
<form action="contador_get.php" method="get">
<label>
Início:
<input type="number" name="inicio">
</label>
<br><br>
<label>
Fim:
<input type="number" name="fim">
</label>
<br><br>
<button type="submit">Gerar contagem</button>
</form>
</body>
</html>
Arquivo contador_get.php
Crie também o arquivo contador_get.php na mesma pasta.
<?php
$inicio = 1;
$fim = 10;
if (isset($_GET["inicio"])) {
$inicio = (int) $_GET["inicio"];
}
if (isset($_GET["fim"])) {
$fim = (int) $_GET["fim"];
}
echo "<h1>Contagem recebida por GET</h1>";
echo "<p>Início: " . $inicio . "</p>";
echo "<p>Fim: " . $fim . "</p>";
for ($i = $inicio; $i <= $fim; $i++) {
echo $i . "<br>";
}
?>
Como testar
Acesse:
http://localhost/minha-pratica-php/formulario_contador_get.html
Preencha o formulário e clique em Enviar. Observe que o navegador muda a URL para algo parecido com:
http://localhost/minha-pratica-php/contador_get.php?inicio=3&fim=8
Explicação do conteúdo
action="contador_get.php"indica para qual arquivo os dados serão enviados.method="get"faz os valores aparecerem na URL.- O atributo
name="inicio"cria a chave$_GET["inicio"]no PHP. - O atributo
name="fim"cria a chave$_GET["fim"]no PHP. isset(...)confere se o campo foi enviado antes de tentar usar o valor.
Ou seja, o formulário é uma forma mais organizada de fazer o navegador enviar dados para o servidor usando a URL.
Teste extra: adicione um campo chamado passo.
Depois, altere o PHP para ler $_GET["passo"] e usar esse valor
como incremento do for.
Prática 06 — Formulário enviando início e fim por POST
Agora vamos repetir a mesma ideia de contagem, ainda com inicio e
fim, mas usando POST. Os dados continuam sendo enviados
pelo navegador para o servidor, porém não aparecem na barra de endereço.
Arquivo formulario_contador_post.html
Crie o arquivo formulario_contador_post.html dentro de
htdocs/minha-pratica-php.
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Contador com POST</title>
</head>
<body>
<h1>Contador com formulário POST</h1>
<form action="contador_post.php" method="post">
<label>
Início:
<input type="number" name="inicio">
</label>
<br><br>
<label>
Fim:
<input type="number" name="fim">
</label>
<br><br>
<button type="submit">Gerar contagem</button>
</form>
</body>
</html>
Arquivo contador_post.php
Crie também o arquivo contador_post.php na mesma pasta.
<?php
$inicio = 1;
$fim = 10;
if (isset($_POST["inicio"])) {
$inicio = (int) $_POST["inicio"];
}
if (isset($_POST["fim"])) {
$fim = (int) $_POST["fim"];
}
echo "<h1>Contagem recebida por POST</h1>";
echo "<p>Início: " . $inicio . "</p>";
echo "<p>Fim: " . $fim . "</p>";
for ($i = $inicio; $i <= $fim; $i++) {
echo $i . "<br>";
}
?>
Como testar
Acesse:
http://localhost/minha-pratica-php/formulario_contador_post.html
Preencha os campos e envie. Repare que a URL fica parecida com
http://localhost/minha-pratica-php/contador_post.php, sem
?inicio=... nem &fim=....
Explicação do conteúdo
method="post"envia os dados no corpo da requisição HTTP.$_POST["inicio"]lê o campo cujonameéinicio.$_POST["fim"]lê o campo cujonameéfim.isset(...)evita acessar um campo que ainda não foi enviado.
A lógica do for é a mesma da prática anterior. A diferença é apenas
a forma como os dados chegam ao PHP: antes vinham por $_GET; agora
chegam por $_POST.
Teste extra: altere o PHP para imprimir também o dobro de cada número gerado na contagem.
Prática 07 — Formulário e processamento na mesma página com POST
Na prática anterior, o formulário e o processamento ficaram em arquivos separados.
Agora vamos manter o mesmo contexto de inicio e fim, mas
colocando o HTML e o PHP no mesmo arquivo.
Arquivo contador_post_mesma_pagina.php
Crie o arquivo contador_post_mesma_pagina.php dentro de
htdocs/minha-pratica-php.
<?php
$mensagem = "";
$inicio = "";
$fim = "";
if (isset($_POST["inicio"]) || isset($_POST["fim"])) {
if (isset($_POST["inicio"])) {
$inicio = (int) $_POST["inicio"];
}
if (isset($_POST["fim"])) {
$fim = (int) $_POST["fim"];
}
$mensagem = "<h2>Contagem gerada</h2>";
for ($i = $inicio; $i <= $fim; $i++) {
$mensagem = $mensagem . $i . "<br>";
}
}
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Contador na mesma página</title>
</head>
<body>
<h1>Contador com POST na mesma página</h1>
<form action="contador_post_mesma_pagina.php" method="post">
<label>
Início:
<input type="number" name="inicio">
</label>
<br><br>
<label>
Fim:
<input type="number" name="fim">
</label>
<br><br>
<button type="submit">Gerar contagem</button>
</form>
<?php echo $mensagem; ?>
</body>
</html>
Como testar
Acesse:
http://localhost/minha-pratica-php/contador_post_mesma_pagina.php
Primeiro, a página deve mostrar apenas o formulário. Depois que você enviar o formulário,
a mesma página deve mostrar a contagem abaixo do formulário, sem colocar
inicio e fim na URL.
Aqui usamos POST para continuar a prática anterior. O mesmo padrão de página
única também poderia ser feito com GET, trocando method="post"
por method="get" e lendo os valores com $_GET.
Explicação do conteúdo
O arquivo começa com PHP porque a página precisa decidir se já recebeu dados ou não.
Quando ela é aberta pela primeira vez, $mensagem fica vazia e apenas o
formulário aparece.
A verificação isset($_POST["inicio"]) || isset($_POST["fim"]) indica se o
formulário já foi enviado. Depois disso, o PHP lê os valores, monta a contagem com
for e guarda o HTML gerado dentro de $mensagem.
A parte final do arquivo mistura HTML com um pequeno trecho PHP:
<?php echo $mensagem; ?>. Esse trecho é o ponto onde o resultado
processado pelo servidor aparece dentro da página.
Teste extra: adicione um campo titulo ao formulário.
Depois, leia $_POST["titulo"] e use esse texto como título da contagem
exibida abaixo do formulário.
Prática 08 — Validando a contagem na mesma página
Agora vamos continuar exatamente a prática anterior e adicionar validações. Antes de executar
o for, o PHP deve verificar se os campos foram preenchidos e se
inicio não é maior que fim.
Arquivo contador_post_validado.php
Crie o arquivo contador_post_validado.php dentro de
htdocs/minha-pratica-php.
<?php
$mensagem = "";
$inicio = "";
$fim = "";
if (isset($_POST["inicio"]) || isset($_POST["fim"])) {
if (empty($_POST["inicio"]) || empty($_POST["fim"])) {
$mensagem = "<p>Preencha o início e o fim.</p>";
} else {
$inicio = (int) $_POST["inicio"];
$fim = (int) $_POST["fim"];
if ($inicio > $fim) {
$mensagem = "<p>O início não pode ser maior que o fim.</p>";
} else {
$mensagem = "<h2>Contagem validada</h2>";
for ($i = $inicio; $i <= $fim; $i++) {
$mensagem = $mensagem . $i . "<br>";
}
}
}
}
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Contador validado</title>
</head>
<body>
<h1>Contador com validação</h1>
<form action="contador_post_validado.php" method="post">
<label>
Início:
<input type="number" name="inicio">
</label>
<br><br>
<label>
Fim:
<input type="number" name="fim">
</label>
<br><br>
<button type="submit">Gerar contagem</button>
</form>
<?php echo $mensagem; ?>
</body>
</html>
Como testar
Acesse http://localhost/minha-pratica-php/contador_post_validado.php e teste:
Intervalo válido: início 3 e fim 8.
Campo vazio: deixe um dos campos sem preencher.
Intervalo inválido: início 10 e fim 2.
Explicação do conteúdo
isset($_POST["inicio"]) || isset($_POST["fim"])verifica se o formulário já foi enviado.empty(...)verifica se algum campo foi enviado vazio.- A validação
$inicio > $fimimpede uma contagem progressiva impossível. - O
forsó roda quando os dados passaram pelas validações.
Teste extra: adicione um campo chamado passo.
Valide se ele foi preenchido e se é maior que zero. Depois, use esse valor no incremento
do for.
Exercício 01 — Tabuada recebida por formulário GET
Crie uma pequena aplicação com dois arquivos. O primeiro arquivo será um formulário HTML
que recebe apenas um valor numérico. O segundo arquivo será um PHP que recebe esse valor
via GET, valida se ele foi enviado e imprime a tabuada desse número usando
uma estrutura for.
- O formulário HTML deve ter apenas um campo numérico e um botão de envio.
- O formulário deve enviar os dados usando
method="get". - O PHP deve verificar se
$_GET["numero"]está setado. - Se o número não for enviado, o PHP deve mostrar uma mensagem de erro.
- Se o número for enviado, o PHP deve imprimir a tabuada de 1 até 10 usando
for.
Exemplo de Entrada e Saída
Entrada no formulário:
Número: 7
URL gerada:http://localhost/minha-pratica-php/tabuada.php?numero=7
Saída esperada:
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
...
7 x 10 = 70
O arquivo HTML só coleta o número e envia para o servidor. O arquivo PHP recebe,
valida e calcula. Não tente fazer o for no HTML.
formulario_tabuada.html
form action="tabuada.php" method="get"
input type="number" name="numero"
tabuada.php
se numero não foi enviado
mostrar erro
senão
converter numero
para i de 1 até 10
imprimir numero x i = resultado
Compare sua solução com os dois arquivos abaixo.
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Tabuada</title>
</head>
<body>
<h1>Gerador de tabuada</h1>
<form action="tabuada.php" method="get">
<label>
Número:
<input type="number" name="numero">
</label>
<button type="submit">Gerar tabuada</button>
</form>
</body>
</html>
<?php
if (!isset($_GET["numero"])) {
echo "<h1>Erro</h1>";
echo "<p>Informe um número pelo formulário.</p>";
exit;
}
$numero = (int) $_GET["numero"];
echo "<h1>Tabuada do " . $numero . "</h1>";
for ($i = 1; $i <= 10; $i++) {
$resultado = $numero * $i;
echo $numero . " x " . $i . " = " . $resultado . "<br>";
}
?>
| Tipo | Nome | Valor |
|---|---|---|
| nenhuma variável ainda | ||
Referência rápida
Use esta tabela para revisar os termos centrais desta prática.
| Termo | Significado |
|---|---|
| XAMPP | Pacote que facilita o uso de Apache, PHP e outros recursos em ambiente local. |
| Apache | Servidor web que recebe a requisição do navegador e interpreta arquivos PHP. |
| htdocs | Pasta pública do Apache no XAMPP. Os projetos PHP devem ficar dentro dela para serem acessados por localhost. |
| localhost | Endereço que aponta para o próprio computador, simulando um servidor web local. |
| echo | Comando PHP usado para enviar texto ou HTML como resposta para o navegador. |
| $_GET | Variável superglobal usada para ler valores enviados pela URL. |
| form | Elemento HTML usado para coletar dados do usuário e enviá-los para o servidor. |
| action | Atributo do formulário que define qual arquivo receberá os dados enviados. |
| method | Atributo do formulário que define como os dados serão enviados, por exemplo get ou post. |
| GET | Método em que os dados são enviados na URL, ficando visíveis na barra de endereço. |
| POST | Método em que os dados são enviados no corpo da requisição, sem aparecerem na URL. |
| $_POST | Variável superglobal usada para ler valores enviados por um formulário com method="post". |
| isset | Função usada para verificar se uma variável ou posição de array existe. |
| empty | Função usada para verificar se um valor está vazio. |
| trim | Função usada para remover espaços no início e no fim de um texto. |
| exit | Comando usado para interromper o script quando uma validação falha. |
| type="number" | Tipo de campo HTML usado para receber valores numéricos em um formulário. |


