Imparare PHP da zero: Guida Completa per Principianti alla Programmazione Server-Side

Introduzione a PHP: Cos'è e Perché Impararlo oggi

Se stai iniziando il tuo percorso nel mondo dello sviluppo web, probabilmente hai già familiarità con HTML e CSS. Tuttavia, queste tecnologie sono 'statiche': permettono di definire la struttura e l'estetica di una pagina, ma non possono 'pensare', non possono ricordare chi è l'utente che visita il sito e non possono interagire con un database. È qui che entra in gioco PHP.

PHP (acronimo ricorsivo di PHP: Hypertext Preprocessor) è un linguaggio di scripting lato server. Questo significa che il codice viene eseguito sul server web prima che la pagina venga inviata al browser dell'utente. Quando un utente richiede una pagina PHP, il server elabora il codice, genera l'HTML risultante e invia solo quest'ultimo al client. L'utente finale non vedrà mai il codice sorgente PHP, ma solo il risultato della sua esecuzione.

Perché imparare PHP nel 2024? Nonostante l'ascesa di Node.js o Python, PHP alimenta ancora una parte enorme del web (incluso WordPress, che muove circa il 40% dei siti mondiali). È un linguaggio accessibile, con una documentazione vastissima e un ecosistema maturo che rende il deployment estremamente semplice rispetto a molte alternative moderne.

Configurare l'Ambiente di Sviluppo

Prima di scrivere la tua prima riga di codice, hai bisogno di un ambiente che possa interpretare PHP. Poiché PHP gira sul server, non puoi semplicemente aprire un file .php nel browser come faresti con un file .html.

Strumenti Necessari

  1. Un Server Locale: Il modo più semplice per iniziare è installare un pacchetto "all-in-one" che includa PHP, un server web (come Apache o Nginx) e un database (MySQL/MariaDB). I software più comuni sono:

    • XAMPP: Disponibile per Windows, Linux e macOS.
    • MAMP: Molto popolare su macOS.
    • LocalWP: Ideale se il tuo obiettivo finale è WordPress.
  2. Un Editor di Testo: Ti serve un posto dove scrivere il codice. Ti consiglio vivamente Visual Studio Code (VS Code) con l'estensione "PHP Intelephense" per l'autocompletamento e l'evidenziazione della sintassi.

Il tuo primo script

Una volta installato XAMPP (o simili), avvia il modulo Apache. Crea una cartella chiamata mio-progetto all'interno della directory htdocs (di solito in C:\\xampp\\htdocs su Windows). Crea un file chiamato index.php e scrivi quanto segue:

<?php
// Questo è un commento a riga singola
// Tutto ciò che sta tra i tag <?php e ?> viene eseguito dal server

$saluto = "Ciao Mondo!";
 echo "<h1>" . $saluto . "</h1>";

?>

Spiegazione del codice:

  • <?php ... ?>: Questi sono i tag di apertura e chiusura. Indicano al server dove inizia e finisce il codice PHP.
  • $saluto: In PHP, tutte le variabili iniziano con il simbolo del dollaro ($).
  • echo: È l'istruzione fondamentale per stampare testo o HTML a video.
  • .: Il punto viene utilizzato per la concatenazione di stringhe.

Ora apri il browser e visita http://localhost/mio-progetto/index.php. Vedrai un titolo H1 con scritto "Ciao Mondo!".

Fondamentali del Linguaggio: Variabili e Tipi di Dato

PHP è un linguaggio a tipizzazione dinamica. Questo significa che non devi dichiarare esplicitamente che una variabile è un numero o una stringa; PHP lo capirà automaticamente dal valore assegnato.

Tipi di dati comuni

  • Stringhe: Sequenze di caratteri racchiuse tra virgolette (es. `"Ciao"
  • Interi (Integers): Numeri senza decimali (es. 42)
  • Float: Numeri con decimali (es. 3.14)
  • Booleani: Valori di verità (true o false)
  • Array: Liste di valori indicizzate o associative.

Operazioni e Logica

La potenza di PHP risiede nella sua capacità di prendere decisioni. Usiamo le strutture di controllo come if, else e i cicli for o foreach.

<?php
$eta = 20;
$nome = "Marco";

if ($eta >= 18) {
    echo "Benvenuto $nome, sei maggiorenne!\
";
} else {
    echo "Spiacente $nome, l'accesso è vietato.\
";
}

// Esempio di Array e Ciclo
$frutti = ["Mela", "Banana", "Arancia"];

echo "Lista della spesa:\
";
foreach ($frutti as $frutto) {
    echo "- " . $frutto . "\
";
}
?>

Perché usare il foreach? Il ciclo foreach è specifico per gli array. Invece di gestire un contatore manuale (come in un ciclo for classico), foreach estrae automaticamente ogni elemento della lista, rendendo il codice più leggibile e meno soggetto a errori di "off-by-one" (errori di indice).

Gestione dei Dati: Form e Superglobali

L'aspetto più importante di un sito web dinamico è l'interazione con l'utente. PHP gestisce questo attraverso le "Superglobali", array speciali disponibili in ogni parte dello script.

GET vs POST

Quando un utente invia un modulo HTML, i dati vengono inviati al server tramite due metodi principali:

  1. GET: I dati vengono passati nell'URL (es. search.php?q=php_tutorial). È utile per ricerche o filtri, ma non è sicuro per password o dati sensibili.
  2. POST: I dati vengono inviati nel corpo della richiesta HTTP. È invisibile all'utente e indispensabile per l'invio di password o l'upload di file.

Esempio Pratico: Un Modulo di Contatto

Creiamo un file form.html e un file elabora.php.

form.html

<form action="elabora.php" method="POST">
    Nome: <input type="text" name="utente"><br>
    Email: <input type="email" name="email"><br>
    <input type="submit" value="Invia">
</form>

elabora.php

<?php
// Recuperiamo i dati dall'array superglobale $_POST
// Usiamo htmlspecialchars per prevenire attacchi XSS (Cross-Site Scripting)
$nome = htmlspecialchars($_POST['utente']);
$email = htmlspecialchars($_POST['email']);

if (!empty($nome) && !empty($email)) {
    echo "Grazie $nome! Abbiamo ricevuto la tua richiesta dall'indirizzo $email.";
} else {
    echo "Per favore, compila tutti i campi.";
}
?>

Nota sulla Sicurezza: Ho utilizzato htmlspecialchars(). Questo è fondamentale perché impedisce agli utenti di iniettare codice JavaScript malevolo nel tuo sito. Se un utente scrivesse <script>alert('Hacked!')</script> nel campo nome, senza questa funzione il browser eseguirebbe il codice. Con htmlspecialchars, il codice viene convertito in testo semplice.

Interazione con i Database tramite MySQL

Un sito web senza database è come un libro con le pagine bianche. PHP si sposa perfettamente con MySQL per memorizzare utenti, articoli, prodotti e commenti.

Connessione PDO (PHP Data Objects)

In passato si usavano funzioni come mysql_connect, ma oggi lo standard è PDO. PDO è un'estensione che permette di connettersi a diversi tipi di database e, soprattutto, supporta i "Prepared Statements", l'unica difesa efficace contro la SQL Injection.

<?php
$host = 'localhost';
$db   = 'mio_database';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";

try {
     $pdo = new PDO($dsn, $user, $pass);
     // Impostiamo l'errore in modalità eccezione
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     echo "Connessione riuscita!";
} catch (PDOException $e) {
     die("Errore di connessione: " . $e->getMessage());
}

// Esempio di inserimento sicuro con Prepared Statement
$nomeUtente = "Mario Rossi";
$emailUtente = "mario@example.com";

$stmt = $pdo->prepare("INSERT INTO utenti (nome, email) VALUES (:nome, :email)");
$stmt->execute(['nome' => $nomeUtente, 'email' => $emailUtente]);

echo "Utente salvato correttamente!";
?>

Perché i Prepared Statements? Se inserissimo le variabili direttamente nella query (es. "INSERT INTO utenti VALUES ('$nome')"), un malintenzionato potrebbe chiudere la virgolette e scrivere comandi SQL per cancellare l'intero database. I Prepared Statements separano la struttura della query dai dati, rendendo l'attacco impossibile.

Errori Comuni e FAQ

Perché vedo il codice PHP invece del risultato?

Questo accade quasi sempre per due motivi:

  1. Server non avviato: Hai aperto il file direttamente con il browser (file://...) invece di usare http://localhost/....
  2. Tag errati: Hai dimenticato di aprire il file con <?php o hai scritto l'estensione come .html invece di .php.

Differenza tra echo e print?

In termini pratici, sono quasi identici. echo è leggermente più veloce e può accettare più parametri, mentre print restituisce sempre un valore (1), potendo essere usato in contesti di espressione.

Cos'è il "White Screen of Death"?

Se vedi una pagina completamente bianca, significa che PHP ha riscontrato un errore fatale ma la configurazione del server è impostata per non mostrare gli errori all'utente (per motivi di sicurezza). In fase di sviluppo, puoi attivarli aggiungendo queste righe all'inizio del file: ini_set('display_errors', 1); error_reporting(E_ALL);

Prossimi Passi e Approfondimenti

Ora che hai le basi di PHP, sei pronto per scalare le tue competenze. Programmare in "PHP puro" (Vanilla PHP) è fondamentale per capire come funziona il web, ma nel mondo professionale si utilizzano i Framework.

Cosa studiare ora?

  1. Programmazione a Oggetti (OOP): Impara a usare le Classi e gli Oggetti. È il modo in cui è scritto tutto il software moderno.
  2. Composer: È il gestore di dipendenze per PHP. Ti permette di installare librerie create da altri (come PHPMailer per inviare email professionali).
  3. Laravel: Attualmente il framework PHP più popolare al mondo. Semplifica enormemente la creazione di rotte, la gestione del database (tramite Eloquent ORM) e la sicurezza.
  4. Sicurezza Web Avanzata: Approfondisci i concetti di CSRF (Cross-Site Request Forgery) e l'hashing delle password con password_hash().

PHP è un linguaggio che non smette di evolversi. Con l'uscita di PHP 8.x, le performance sono migliorate drasticamente e sono state introdotte funzionalità moderne come i Union Types e le Attributes. Continua a sperimentare, costruisci piccoli progetti (un blog, un sistema di gestione task, un e-commerce semplificato) e non aver paura di sbagliare: il debug è la parte più istruttiva della programmazione.