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:
- Array indicizzato:
$frutti = ["mela", "banana", "pera"];
foreach ($frutti as $frutto) {
echo "Frutto: $frutto<br>";
}
// Output:
// Frutto: mela
// Frutto: banana
// Frutto: pera
- 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
whileedo-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
$_GETsono 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()efilter_input()è raccomandato per validare input come email, numeri e URL.
Differenze tra $_GET e $_POST:
- Visibilità:
$_GETinvia i dati attraverso l’URL, mentre$_POSTli invia nel corpo della richiesta HTTP. - Lunghezza: I dati inviati con
$_GEThanno un limite di lunghezza (dipende dal browser e dal server), mentre con$_POSTla 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()ofilter_var()per sanitizzare i dati. - Validazione: Verifica sempre che i dati siano nel formato corretto (ad esempio, usa
FILTER_VALIDATE_EMAILper 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 arrayvar_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
*/