Projeto Guia: Construção de um “Mural de Recados” interativo. Pré-requisitos: Conhecimento básico de HTML e CSS.
O objetivo é eliminar a primeira grande barreira: a instalação.
index.php com <?php phpinfo(); ?> para confirmar que tudo está funcionando.Aqui, introduzimos a sintaxe básica com exemplos diretos e úteis.
Sintaxe Básica e Saída de Dados:
<?php ... ?>.// e /* */.echo vs. print.Variáveis e Tipos de Dados:
$nome).string, int, float, bool.var_dump() para inspecionar variáveis e entender seus tipos.. e uso de aspas duplas para interpolação.Constantes:
define()). Exemplo: define('VERSAO', '1.0');.Operadores:
+, -, *, /, %).=, +=, -=).==, ===, !=, >).&&, ||, !).Exemplo Prático do Módulo 1 (Arquivo perfil.php):
<?php
// Módulo 1: Fundamentos
// Variáveis com informações do usuário
$nome_usuario = "Maria Silva";
$idade = 29;
$altura_metros = 1.75;
$e_desenvolvedora = true;
// Constante para o nome do projeto
define('NOME_PROJETO', 'Mural de Recados');
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Perfil do Usuário - <?php echo NOME_PROJETO; ?></title>
<style>body { font-family: sans-serif; }</style>
</head>
<body>
<h1>Perfil do Usuário</h1>
<?php
// Usando echo para exibir os dados no HTML
echo "<p><strong>Nome:</strong> " . $nome_usuario . "</p>";
echo "<p><strong>Idade:</strong> " . $idade . " anos</p>";
// Exemplo de interpolação com aspas duplas
echo "<p><strong>Altura:</strong> $altura_metros m</p>";
// Usando uma estrutura condicional (próximo módulo) para exibir um valor booleano
if ($e_desenvolvedora) {
echo "<p><strong>Profissão:</strong> Desenvolvedora</p>";
} else {
echo "<p><strong>Profissão:</strong> Não informada</p>";
}
?>
<footer>
<p>© <?php echo date('Y'); ?> <?php echo NOME_PROJETO; ?></p>
</footer>
</body>
</html>
O cérebro da aplicação.
if, else, elseif.for: Quando o número de iterações é conhecido.while: Para loops baseados em uma condição.foreach: A forma essencial para percorrer arrays (será o mais usado).Exemplo Prático do Módulo 2 (Melhorando o Mural):
<?php
// Módulo 2: Lógica e Estruturas de Repetição
// Vamos simular alguns recados que viriam de um banco de dados
// Isso introduz o conceito de Array (próximo módulo) de forma natural
$recados = [
"Olá! Bem-vindo ao mural.",
"Lembre-se de estudar PHP todos os dias.",
"Este é um exemplo de como exibir múltiplos itens.",
"Amanhã vamos aprender sobre formulários!"
];
$usuario_logado = true;
$nome_usuario = "Maria Silva";
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Mural de Recados</title>
</head>
<body>
<h1>Mural de Recados</h1>
<?php if ($usuario_logado): ?>
<p>Bem-vinda, <strong><?php echo $nome_usuario; ?></strong>!</p>
<?php else: ?>
<p>Bem-vindo, visitante!</p>
<?php endif; ?>
<hr>
<h2>Recados Atuais:</h2>
<?php
// Usando foreach para iterar sobre a lista de recados e exibi-los
if (!empty($recados)) {
echo "<ul>";
foreach ($recados as $recado) {
echo "<li>" . $recado . "</li>";
}
echo "</ul>";
} else {
echo "<p>Nenhum recado para exibir no momento.</p>";
}
?>
</body>
</html>
count(), print_r(), array_push(), unset().return.include e require:
header.php, footer.php. Isso limpa o código drasticamente.Exemplo Prático do Módulo 3 (Refatorando o Mural):
config.php
<?php
// Arquivo de configuração e funções
date_default_timezone_set('America/Sao_Paulo');
function formatarRecado(string $recado): string {
// Adiciona formatação e segurança básica (veremos mais tarde)
return htmlspecialchars(trim($recado));
}
function exibirRecados(array $recados) {
if (!empty($recados)) {
echo "<ul>";
foreach ($recados as $recado) {
echo "<li>" . formatarRecado($recado) . "</li>";
}
echo "</ul>";
} else {
echo "<p>Nenhum recado para exibir.</p>";
}
}
?>
header.php
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Mural de Recados 2.0</title>
<link rel="stylesheet" href="style.css"> </head>
<body>
<header>
<h1>Mural de Recados Moderno</h1>
</header>
<main>
footer.php
</main>
<footer>
<p>© <?php echo date('Y'); ?> - Todos os direitos reservados.</p>
</footer>
</body>
</html>
index.php (Arquivo Principal)
<?php
// Inclui os arquivos de configuração e funções
require_once 'config.php';
require_once 'header.php';
// Array associativo para mais detalhes
$recados_db = [
['autor' => 'Carlos', 'mensagem' => 'Primeiro recado do mural!'],
['autor' => 'Ana', 'mensagem' => 'PHP é muito poderoso.'],
];
// Lógica principal da página
echo "<h2>Recados:</h2>";
// Sim, podemos melhorar isso...
echo "<ul>";
foreach ($recados_db as $item) {
echo "<li><strong>" . formatarRecado($item['autor']) . " disse:</strong> " . formatarRecado($item['mensagem']) . "</li>";
}
echo "</ul>";
// Inclui o rodapé
require_once 'footer.php';
?>
O momento da mágica: o usuário envia dados para o servidor.
GET vs. POST e quando usar cada um.$_POST e $_GET.$_SERVER para obter informações do servidor.empty(), isset(), filter_var().Exemplo Prático do Módulo 4 (Adicionando recados via formulário):
index.php (Atualizado)
<?php
require_once 'config.php';
// Simula um "banco de dados" em sessão para persistir os dados entre requisições
session_start();
// Inicializa a lista de recados se não existir
if (!isset($_SESSION['recados'])) {
$_SESSION['recados'] = [];
}
// Lógica para processar o formulário
$erro = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$autor = $_POST['autor'] ?? '';
$mensagem = $_POST['mensagem'] ?? '';
if (empty($autor) || empty($mensagem)) {
$erro = "Todos os campos são obrigatórios!";
} else {
// Adiciona o novo recado à sessão
$_SESSION['recados'][] = [
'autor' => $autor,
'mensagem' => $mensagem,
'data' => date('d/m/Y H:i')
];
// Redireciona para evitar reenvio do formulário ao atualizar a página
header("Location: index.php");
exit;
}
}
require_once 'header.php';
?>
<h2>Deixe seu Recado</h2>
<?php if (!empty($erro)): ?>
<p style="color: red;"><?php echo $erro; ?></p>
<?php endif; ?>
<form action="index.php" method="POST">
<div>
<label for="autor">Seu Nome:</label>
<input type="text" id="autor" name="autor">
</div>
<br>
<div>
<label for="mensagem">Sua Mensagem:</label><br>
<textarea id="mensagem" name="mensagem" rows="4" cols="50"></textarea>
</div>
<br>
<button type="submit">Enviar Recado</button>
</form>
<hr>
<h2>Recados Salvos</h2>
<?php
if (!empty($_SESSION['recados'])) {
echo "<ul>";
// Exibe em ordem inversa (mais novos primeiro)
foreach (array_reverse($_SESSION['recados']) as $recado) {
echo "<li>";
echo "<strong>" . formatarRecado($recado['autor']) . "</strong>";
echo " <small>(" . $recado['data'] . ")</small>:<br>";
echo "<em>" . formatarRecado($recado['mensagem']) . "</em>";
echo "</li><br>";
}
echo "</ul>";
} else {
echo "<p>Seja o primeiro a deixar um recado!</p>";
}
?>
<?php require_once 'footer.php'; ?>
Nota Didática: O uso de
sessionaqui é um passo intermediário antes de introduzir o banco de dados. Mostra como manter dados persistentes durante a visita do usuário.
recados (id, autor, mensagem, data_criacao).conexao.php).INSERT para salvar o recado do formulário no banco.SELECT para ler e exibir os recados do banco.Exemplo Prático do Módulo 5 (Substituindo a sessão pelo banco de dados):
conexao.php.index.php seria refatorado para usar PDO::prepare() e execute() para inserir e selecionar dados da tabela recados, eliminando a necessidade de $_SESSION para armazenar os recados.Um módulo dedicado para reforçar a importância da segurança.
htmlspecialchars() ao exibir dados que vieram do usuário. (Já foi introduzido na função formatarRecado, agora explicamos o porquê)./public, /src, /config, etc.