LP3

LP3

LP3

profile-pic

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 chamada minha-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
  • <?php inicia 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.
  • echo envia uma resposta para o navegador. Nesse caso, a resposta é uma frase simples.
  • O endereço http://localhost/minha-pratica-php/index.php chama 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âmetro inicio.
  • $_GET["fim"] lê o valor enviado no parâmetro fim.
  • 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 cujo name é inicio.
  • $_POST["fim"] lê o campo cujo name é 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 > $fim impede uma contagem progressiva impossível.
  • O for só 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

Use o depurador depois de tentar montar sua solução.
Dica 1 — Separar responsabilidades

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.

Dica 2 — Estrutura esperada
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
Gabarito — HTML e PHP

Compare sua solução com os dois arquivos abaixo.

Arquivo formulario_tabuada.html
<!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>
Arquivo tabuada.php
<?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>";
}
?>
 Depurador — Exercício 01
Código PHP
Variáveis
TipoNomeValor
nenhuma variável ainda
Saída

                                

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.