PHP e páginas dinâmicas com base de dados

Tipos, funções, pedidos, PDO, transações, templates, sessões e autenticação no servidor.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Fronteira do pedido

  • PHP corre a cada pedido; o cliente recebe só a saída. Nada local persiste: estado fica na base de dados ou na sessão.
  • . concatena; aspas duplas interpolam, simples são mais literais. strlen conta bytes, não letras.
  • === compara valor e tipo. Zero válido exige !== null: if ($nota) e empty rejeitam 0. strpos exige !== false, pois a posição 0 é válida.
  • isset é falso para ausência ou null; array_key_exists distingue chave presente com null.
  • sort renumera, asort conserva chaves, ksort ordena chaves. array_filter conserva chaves: array_values antes de emitir JSON como lista.
  • strict_types só regula chamadas escalares desse ficheiro. Não valida HTTP.
  • $this é o objeto; static pertence à classe. throw interrompe, catch trata, finally finaliza.
OrigemLeitura
Query$_GET
Corpo de formulário$_POST (mais nada: JSON não aparece aqui)
Corpo JSONphp://input com json_decode
Método$_SERVER['REQUEST_METHOD']
  • Entrada pode faltar ou ser array (q[]=x). Exige método, confirma is_string, valida inteiro e limites, e só depois converte. intval('2x') dá 2: converter não é validar. Dinheiro exato usa cêntimos inteiros.

Base de dados

$stmt = $db->prepare('SELECT titulo, preco FROM livro WHERE preco < :limite');
$stmt->execute(['limite' => 20]);
$livros = $stmt->fetchAll(PDO::FETCH_ASSOC);
  • prepare separa valores do SQL; execute fornece-os. fetch dá uma linha ou false; fetchAll dá as restantes.
  • Marcador é valor, nunca coluna. Ordenação escolhida pelo cliente mapeia-se para nomes fixos. LIKE continua a interpretar % e _.
  • Base em ficheiro persiste; fora da raiz pública, com caminho estável. PRAGMA foreign_keys = ON por conexão, quando as restrições importam.

Reserva consistente

  1. beginTransaction.
  2. UPDATE ... SET stock = stock - :q WHERE id = :id AND stock >= :q; confirma que alterou uma linha.
  3. INSERT da reserva.
  4. commit só no fim; em falha, rollback e relança.

Condição no UPDATE fecha a janela entre ler e escrever. Transação não substitui autorização nem validação.

Responder e autenticar

  • Página consulta e apresenta; ação valida, altera e redireciona. Template escapa ao apresentar: htmlspecialchars($t, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8').
  • header('Location: ...', true, 303) antes de qualquer saída, seguido de exit. 303 após POST evita repetir a submissão ao atualizar.
  • Registo: password_hash($p, PASSWORD_DEFAULT). Login: password_verify contra o resumo guardado, session_regenerate_id(true), guarda utilizador_id na sessão. Autorização confirma o dono em cada ação; nunca vem de campo hidden.
  • Cookies: HttpOnly, Secure em HTTPS, SameSite adequado. Logout limpa estado, destrói a sessão e remove o cookie.

Âmbito: o que cada função vê

  • Função nomeada não vê variáveis do ficheiro: passa por argumento ou declara global. Superglobais ($_POST, $_SESSION) são a exceção.
  • Closure: use ($x) congela o valor da criação; use (&$x) segue a variável.
  • foreach ($a as &$v) deixa $v ligada à última posição. unset($v) após o ciclo desfaz o vínculo sem apagar o elemento. Sem &, nada disto acontece.

Explicação completa.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.