PHP

Introduzione a PHP

PHP (Hypertext Preprocessor) è un linguaggio di scripting lato server ampiamente utilizzato per lo sviluppo web. È incorporato direttamente nei file HTML e viene eseguito sul server, generando contenuti dinamici.

Struttura di Base di un File PHP:

<?php
echo "Ciao, mondo!";
?>

Variabili in PHP

Le variabili in PHP sono prefissate dal simbolo $ e non hanno bisogno di essere dichiarate con un tipo specifico.

Esempio di variabili:

$nome = "Mario";
$eta = 25;
$prezzo = 19.99;
$isOnline = true;

Concatenazione di stringhe:

echo "Ciao, " . $nome . "!"; // Output: Ciao, Mario!

Array

Gli array sono utilizzati per memorizzare più valori in una sola variabile. PHP supporta array indicizzati, associativi (dizionari) e multidimensionali.

Array Indicizzati

Gli array indicizzati usano numeri interi come chiavi.

Creazione di un array:

$frutti = ["mela", "banana", "pera"];
// o
$frutti = array("mela", "banana", "pera");

Accesso agli elementi:

echo $frutti[1]; // Output: banana

Aggiungere elementi:

$frutti[] = "arancia";

Funzioni utili:

  • count($frutti) per ottenere il numero di elementi.
  • array_push($frutti, "uva") per aggiungere elementi alla fine.

Array Associativi (Dizionari)

Gli array associativi utilizzano chiavi per identificare i valori.

Creazione e accesso:

$etaPersone = [
    "Mario" => 30,
    "Luigi" => 25,
    "Peach" => 28
];
echo $etaPersone["Luigi"]; // Output: 25

Iterazione con foreach:

foreach ($etaPersone as $nome => $eta) {
    echo "$nome ha $eta anni.<br>";
}

Funzioni utili per i dizionari:

  • array_keys($etaPersone) per ottenere tutte le chiavi.
  • array_values($etaPersone) per ottenere tutti i valori.
  • isset($etaPersone["Mario"]) per controllare se una chiave esiste.
  • unset($etaPersone["Peach"]) per rimuovere un elemento.

Array Multidimensionali

Gli array multidimensionali sono array che contengono altri array.

Creazione e accesso:

$studenti = [
    "classeA" => ["Mario", "Luigi"],
    "classeB" => ["Peach", "Toad"]
];
echo $studenti["classeA"][1]; // Output: Luigi

Iterazione:

// scorro le classi
foreach ($studenti as $classe => $alunni) {
    echo "Alunni di $classe:<br>";
    // per ogni classe scorro gli alunni al loro interno
    foreach ($alunni as $alunno) {
        echo "- $alunno<br>";
    }
}

Costrutti Principali

I costrutti condizionali e i cicli sono fondamentali per controllare il flusso del programma.

Condizioni: if, else if, else

$eta = 20;
if ($eta >= 18) {
    echo "Sei maggiorenne.";
} elseif ($eta == 17) {
    echo "Sei quasi maggiorenne.";
} else {
    echo "Sei minorenne.";
}

Ecco una versione più dettagliata del paragrafo sui cicli, con un approfondimento su foreach e sugli altri cicli in PHP:

Cicli in PHP

I cicli sono costrutti essenziali per eseguire blocchi di codice ripetutamente fino a quando una condizione specifica è vera. PHP offre vari tipi di cicli: while, do-while, for, e foreach.

Ciclo while

Il ciclo while esegue un blocco di codice fintanto che una condizione è vera. La condizione viene valutata all’inizio di ogni iterazione, quindi se la condizione è falsa all’inizio, il ciclo non verrà eseguito.

Sintassi ed esempio:

$i = 0;
while ($i < 5) {
    echo "Il valore di i è: $i<br>";
    $i++;
}
// Output:
// Il valore di i è: 0
// Il valore di i è: 1
// Il valore di i è: 2
// Il valore di i è: 3
// Il valore di i è: 4

Ciclo do-while

Il ciclo do-while è simile a while, ma la condizione viene valutata alla fine di ogni iterazione, il che garantisce che il blocco di codice venga eseguito almeno una volta.

Sintassi ed esempio:

$i = 0;
do {
    echo "Il valore di i è: $i<br>";
    $i++;
} while ($i < 5);
// Output identico al ciclo `while`

Ciclo for

Il ciclo for è utile quando si conosce in anticipo il numero di iterazioni. Include un contatore iniziale, una condizione di continuazione e un incremento/decremento.

Sintassi ed esempio:

for ($i = 0; $i < 5; $i++) {
    echo "Il valore di i è: $i<br>";
}
// Output:
// Il valore di i è: 0
// Il valore di i è: 1
// Il valore di i è: 2
// Il valore di i è: 3
// Il valore di i è: 4

Ciclo foreach

Il ciclo foreach è specificamente progettato per iterare su array e array associativi. È particolarmente utile perché permette di accedere direttamente ai valori senza preoccuparsi di contatori o indici.

Sintassi di base:

foreach ($array as $valore) {
    // Esegue il codice per ogni elemento dell'array
}

Sintassi per array associativi:

foreach ($arrayAssociativo as $chiave => $valore) {
    // Esegue il codice per ogni coppia chiave-valore
}

Esempi pratici:

  1. Array indicizzato:
$frutti = ["mela", "banana", "pera"];
foreach ($frutti as $frutto) {
    echo "Frutto: $frutto<br>";
}
// Output:
// Frutto: mela
// Frutto: banana
// Frutto: pera
  1. Array associativo (dizionario):
$prezziFrutti = [
    "mela" => 1.5,
    "banana" => 0.75,
    "pera" => 1.2
];
foreach ($prezziFrutti as $frutto => $prezzo) {
    echo "Il prezzo di una $frutto è $prezzo euro.<br>";
}
// Output:
// Il prezzo di una mela è 1.5 euro.
// Il prezzo di una banana è 0.75 euro.
// Il prezzo di una pera è 1.2 euro.

Confronto tra i Cicli

  • while e do-while: Utili quando non si conosce esattamente il numero di iterazioni e si basa tutto su una condizione.
  • for: Ideale per situazioni in cui il numero di iterazioni è noto in anticipo.
  • foreach: Perfetto per iterare su array e array associativi in modo semplice e leggibile.

Esempio pratico complesso con foreach: Supponiamo di avere un array multidimensionale con i dati degli studenti e le loro materie:

$studenti = [
    "Mario" => ["Matematica" => 28, "Storia" => 30, "Informatica" => 27],
    "Luigi" => ["Matematica" => 25, "Storia" => 28, "Informatica" => 30],
    "Peach" => ["Matematica" => 30, "Storia" => 30, "Informatica" => 29]
];

foreach ($studenti as $nome => $materie) {
    echo "Studente: $nome<br>";
    foreach ($materie as $materia => $voto) {
        echo " - $materia: $voto<br>";
    }
    echo "<br>";
}
// Output:
// Studente: Mario
//  - Matematica: 28
//  - Storia: 30
//  - Informatica: 27
//
// Studente: Luigi
//  - Matematica: 25
//  - Storia: 28
//  - Informatica: 30
//
// Studente: Peach
//  - Matematica: 30
//  - Storia: 30
//  - Informatica: 29

Variabili $_GET e $_POST

Le variabili globali $_GET e $_POST sono array superglobali in PHP utilizzati per raccogliere dati inviati dall’utente attraverso un form o tramite URL. Entrambi sono strumenti fondamentali per gestire l’input nei siti e nelle applicazioni web.

Cos’è $_GET?

$_GET è un array associativo superglobale che raccoglie i dati inviati tramite il metodo GET. Il metodo GET invia i dati attraverso l’URL, quindi è visibile all’utente e ai motori di ricerca. Questo lo rende ideale per operazioni come la ricerca e la navigazione, ma meno sicuro per l’invio di dati sensibili.

Esempio di un form che utilizza il metodo GET:

<form method="GET" action="pagina.php">
    <label for="nome">Nome:</label>
    <input type="text" name="nome" id="nome">
    <input type="submit" value="Invia">
</form>

Accesso ai dati in PHP:

// Supponiamo che l'URL sia: pagina.php?nome=Mario
if (isset($_GET['nome'])) {
    $nome = htmlspecialchars($_GET['nome']);
    echo "Il nome ricevuto è: " . $nome; // Output: Il nome ricevuto è: Mario
}

Considerazioni sulla sicurezza:

  • I dati inviati tramite $_GET sono visibili nell’URL e possono essere memorizzati nei log del server o condivisi attraverso i link.
  • È importante utilizzare htmlspecialchars() per prevenire attacchi XSS (Cross-Site Scripting).

Cos’è $_POST?

$_POST è un array associativo superglobale che raccoglie i dati inviati tramite il metodo POST. Questo metodo invia i dati attraverso il corpo della richiesta HTTP, rendendoli più sicuri e meno visibili rispetto al metodo GET. È utilizzato per operazioni che richiedono sicurezza, come l’invio di password o di moduli di registrazione.

Esempio di un form che utilizza il metodo POST:

<form method="POST" action="pagina.php">
    <label for="email">Email:</label>
    <input type="email" name="email" id="email">
    <input type="submit" value="Invia">
</form>

Accesso ai dati in PHP:

if (isset($_POST['email'])) {
    $email = htmlspecialchars($_POST['email']);
    echo "L'email ricevuta è: " . $email; // Output: L'email ricevuta è: email@example.com
}

Considerazioni sulla sicurezza:

  • Anche se i dati non sono visibili nell’URL, è essenziale validare e sanitizzare gli input per proteggersi da attacchi come l’injection.
  • Per prevenire attacchi XSS, htmlspecialchars() può essere usato per convertire i caratteri speciali in entità HTML.
  • L’uso di filter_var() e filter_input() è raccomandato per validare input come email, numeri e URL.

Differenze tra $_GET e $_POST:

  • Visibilità: $_GET invia i dati attraverso l’URL, mentre $_POST li invia nel corpo della richiesta HTTP.
  • Lunghezza: I dati inviati con $_GET hanno un limite di lunghezza (dipende dal browser e dal server), mentre con $_POST la quantità di dati è maggiore.
  • Sicurezza: $_POST è generalmente più sicuro per l’invio di dati sensibili, mentre $_GET è più appropriato per trasmettere informazioni che non necessitano di protezione.

Esempio Completo di Validazione e Sanitizzazione

Quando si raccolgono dati dagli utenti, è importante effettuare una validazione completa per assicurarsi che siano conformi alle aspettative.

Esempio di un form di registrazione:

<form method="POST" action="pagina_registrazione.php">
    <label for="username">Username:</label>
    <input type="text" name="username" id="username" required>
    
    <label for="password">Password:</label>
    <input type="password" name="password" id="password" required>
    
    <input type="submit" value="Registrati">
</form>

Elaborazione dei dati con PHP:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = htmlspecialchars($_POST['username']);
    $password = htmlspecialchars($_POST['password']);

    // Validazione semplice
    if (!empty($username) && !empty($password)) {
        echo "Registrazione avvenuta con successo per l'utente: " . $username;
    } else {
        echo "Tutti i campi sono obbligatori.";
    }
}

Buone pratiche di sicurezza:

  • Sanitizzazione: Usa htmlspecialchars() o filter_var() per sanitizzare i dati.
  • Validazione: Verifica sempre che i dati siano nel formato corretto (ad esempio, usa FILTER_VALIDATE_EMAIL per le email).
  • Protezione da attacchi XSS: Converti i caratteri speciali in entità HTML per impedire l’inserimento di codice dannoso.

Funzioni di Output

  • echo: Stampa una o più stringhe.
  • var_dump: Stampa il contenuto di una variabile, molto utile per visualizzare in fase di programmazione il contenuto di un array var_dump($_POST)

Manipolazione delle Stringhe

PHP offre una vasta gamma di funzioni per manipolare le stringhe.

Funzioni comuni:

  • strlen(): Lunghezza della stringa.
  • strtoupper() / strtolower(): Conversione in maiuscolo/minuscolo.
  • substr(): Estrazione di una sottostringa.
  • str_replace(): Sostituzione di testo.
echo str_replace("mondo", "PHP", "Ciao, mondo!"); // Output: Ciao, PHP!

Divisione e Unione di Stringhe:

  • explode():
$parti = explode(",", "mela,banana,pera");
  • implode():
echo implode(" - ", $parti); // Output: mela - banana - pera

Trattamento degli input:

  • trim(): Rimuove gli spazi bianchi.
  • nl2br(): Converte le nuove righe in <br> per l’output HTML.

Commenti in PHP

I commenti sono importanti per rendere il codice più leggibile.

Commento su una riga:

// Questo è un commento su una riga

Commento su più righe:

/*
Questo è un commento
su più righe
*/