Principais erros de desenvolvedores PHP iniciantes e como evitá-los

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course
Here is the translated HTML content in Portuguese (Português), with all HTML tags preserved and only the text content translated. Programming terms, code examples, and proper nouns remain in English. ```html

Introdução: Por que o PHP é tão traiçoeiro para iniciantes?

O PHP continua sendo uma das linguagens mais populares para desenvolvimento web, mas seu baixo nível de entrada frequentemente leva à formação de maus hábitos. Desenvolvedores iniciantes, inspirados pela simplicidade da sintaxe, muitas vezes esquecem da segurança, desempenho e padrões modernos. Neste artigo, vamos analisar os principais erros de desenvolvedores PHP iniciantes, que podem transformar seu código em um pesadelo de manutenção e uma vulnerabilidade para ataques.

Não vamos apenas listar os problemas — você verá exemplos de código em PHP com erros e suas versões corrigidas. Isso ajudará você a aplicar imediatamente as práticas corretas.

1. Ignorar a segurança: SQL injection e XSS

O erro mais crítico é confiar em dados do usuário. Iniciantes frequentemente inserem variáveis diretamente em consultas SQL ou as exibem na página sem filtragem.

Erro: Concatenação em consultas SQL

Exemplo clássico de vulnerabilidade:

// INCORRETO: vulnerável a SQL injection
$id = $_GET['id'];
$query = "SELECT * FROM users WHERE id = $id";
$result = mysqli_query($link, $query);

Um atacante pode passar ?id=1 OR 1=1 e obter todos os dados da tabela.

Solução: Consultas preparadas (PDO)

Use PDO ou mysqli com expressões preparadas:

// CORRETO: PDO com consulta preparada
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute(['id' => $_GET['id']]);
$result = $stmt->fetchAll();

Erro: Exibir dados sem escapamento (XSS)

Se você exibir dados do banco ou de $_GET diretamente, corre o risco de sofrer um ataque XSS:

// INCORRETO: vulnerável a XSS
echo "Olá, " . $_GET['name'];

Solução: htmlspecialchars

Sempre escape a saída:

// CORRETO: escapamento HTML
echo "Olá, " . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');

2. Uso de construções e funções obsoletas

Muitos tutoriais de 10 anos atrás ensinam a usar funções mysql_* ou tags curtas. Isso não é apenas inseguro, mas pode não funcionar em hospedagens modernas.

Erro: Funções mysql_*

// INCORRETO: extensão obsoleta
$link = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('test', $link);

Esta extensão foi removida do PHP 7, e o código simplesmente falhará com um erro.

Solução: Migrar para PDO ou MySQLi

// CORRETO: PDO - abordagem moderna e segura
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');

Erro: Tags curtas
// INCORRETO: pode estar desabilitado no php.ini
<? echo "Hello"; ?>

Solução: Apenas tags completas

// CORRETO: sempre use <?php
<?php echo "Hello"; ?>

3. Trabalho ruim com formulários e dados

Desenvolvedores iniciantes frequentemente esquecem de verificar se o formulário foi enviado e usam $_REQUEST em vez de arrays superglobais específicos.

Erro: Falta de verificação do método de envio

// INCORRETO: o código é executado mesmo em requisição GET
$name = $_POST['name'];
// ... processamento

Solução: Verificar REQUEST_METHOD

// CORRETO: verificar se o formulário foi enviado
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = $_POST['name'] ?? '';
    // ... validação e processamento
}

Erro: Uso de $_REQUEST

O array superglobal $_REQUEST combina GET, PO

``` Note: The last line of the original input was cut off (`$_REQUEST` combina GET, PO...). I have translated it as "O array superglobal `$_REQUEST` combina GET, PO" to match the incomplete original. If you have the full original text, I can complete the translation accordingly.

Blogs

Book Recommendations