Questo sito utilizza cookie per raccogliere dati statistici.
Privacy Policy
## 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
<?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**:
```php
$nome = "Mario";
$eta = 25;
$prezzo = 19.99;
$isOnline = true;
```
**Concatenazione di stringhe**:
```php
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**:
```php
$frutti = ["mela", "banana", "pera"];
// o
$frutti = array("mela", "banana", "pera");
```
**Accesso agli elementi**:
```php
echo $frutti[1]; // Output: banana
```
**Aggiungere elementi**:
```php
$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**:
```php
$etaPersone = [
"Mario" => 30,
"Luigi" => 25,
"Peach" => 28
];
echo $etaPersone["Luigi"]; // Output: 25
```
**Iterazione con `foreach`**:
```php
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**:
```php
$studenti = [
"classeA" => ["Mario", "Luigi"],
"classeB" => ["Peach", "Toad"]
];
echo $studenti["classeA"][1]; // Output: Luigi
```
**Iterazione**:
```php
// 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`
```php
$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**:
```php
$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**:
```php
$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**:
```php
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**:
```php
foreach ($array as $valore) {
// Esegue il codice per ogni elemento dell'array
}
```
**Sintassi per array associativi**:
```php
foreach ($arrayAssociativo as $chiave => $valore) {
// Esegue il codice per ogni coppia chiave-valore
}
```
**Esempi pratici**:
1. **Array indicizzato**:
```php
$frutti = ["mela", "banana", "pera"];
foreach ($frutti as $frutto) {
echo "Frutto: $frutto<br>";
}
// Output:
// Frutto: mela
// Frutto: banana
// Frutto: pera
```
2. **Array associativo (dizionario)**:
```php
$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:
```php
$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**:
```html
<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**:
```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**:
```html
<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**:
```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**:
```html
<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**:
```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.
```php
echo str_replace("mondo", "PHP", "Ciao, mondo!"); // Output: Ciao, PHP!
```
**Divisione e Unione di Stringhe**:
- **`explode()`**:
```php
$parti = explode(",", "mela,banana,pera");
```
- **`implode()`**:
```php
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**:
```php
// Questo è un commento su una riga
```
**Commento su più righe**:
```php
/*
Questo è un commento
su più righe
*/
```