Una pagina web dinamica è una pagina il cui contenuto può variare in base all’interazione dell’utente, alle informazioni presenti in un database o ad altri fattori esterni. PHP è un linguaggio di scripting lato server che permette di creare pagine web dinamiche, mentre MySQL è un sistema di gestione di database relazionali che consente di memorizzare e recuperare dati in modo efficiente. Insieme, PHP e MySQL rappresentano una combinazione potente e ampiamente utilizzata per lo sviluppo di applicazioni web dinamiche.
Sviluppo dell’argomento
1. Configurazione dell’ambiente di sviluppo
Prima di iniziare a creare pagine dinamiche, è necessario configurare un ambiente di sviluppo adeguato:
- Server web: È necessario un server web come Apache o Nginx per elaborare le richieste HTTP.
- PHP: Installare PHP (versione 7.4 o superiore consigliata).
- MySQL: Installare un server MySQL per la gestione dei dati.
- Tool di amministrazione: PHPMyAdmin o altro strumento per gestire facilmente il database MySQL.
Per semplificare, potete utilizzare pacchetti preconfigurati come XAMPP, WAMP o MAMP che includono tutti questi componenti.
2. Creazione del database e delle tabelle
Il primo passo per costruire una pagina dinamica è progettare e creare il database che conterrà i dati da visualizzare:
- Definire lo schema del database (tabelle, campi, relazioni)
- Creare il database in MySQL
- Impostare le tabelle necessarie con i relativi campi
- Definire le chiavi primarie e le relazioni tra tabelle
3. Connessione a MySQL tramite PHP
Il codice PHP dovrà stabilire una connessione con il database MySQL:
<?php // Parametri di connessione $servername = "localhost"; $username = "nome_utente"; $password = "password"; $dbname = "nome_database"; // Creazione della connessione $conn = new mysqli($servername, $username, $password, $dbname); // Verifica della connessione if ($conn->connect_error) { die("Connessione fallita: " . $conn->connect_error); } echo "Connessione al database stabilita con successo"; ?>
4. Esecuzione di query e manipolazione dei dati
Una volta stabilita la connessione, possiamo eseguire query SQL per interagire con il database:
- SELECT: Per recuperare dati
- INSERT: Per aggiungere nuovi record
- UPDATE: Per modificare record esistenti
- DELETE: Per eliminare record
5. Visualizzazione dinamica dei dati
Il passo finale è visualizzare i dati recuperati nella pagina web:
- Iterare sui risultati della query
- Formattare i dati in HTML
- Gestire casi speciali (nessun risultato, errori, ecc.)
Esempio 1: Lista di prodotti da un database
Lista prodotti dinamica
<?php // Connessione al database $servername = "localhost"; $username = "user"; $password = "password"; $dbname = "negozio"; // Crea connessione $conn = new mysqli($servername, $username, $password, $dbname); // Verifica connessione if ($conn->connect_error) { die("Connessione fallita: " . $conn->connect_error); } // Query per selezionare tutti i prodotti $sql = "SELECT id, nome, descrizione, prezzo FROM prodotti ORDER BY nome"; $result = $conn->query($sql); // Creazione della pagina HTML ?> <!DOCTYPE html> <html lang="it"> <head> <meta charset="UTF-8"> <title>Catalogo Prodotti</title> <style> body { font-family: Arial, sans-serif; margin: 20px; } h1 { color: #333; } table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; } tr:nth-child(even) { background-color: #f9f9f9; } .prezzo { font-weight: bold; color: #007bff; } </style> </head> <body> <h1>Catalogo Prodotti</h1> <?php // Verifica se ci sono risultati if ($result->num_rows > 0) { echo "<table>"; echo "<tr><th>ID</th><th>Nome</th><th>Descrizione</th><th>Prezzo</th></tr>"; // Output dei dati di ogni riga while($row = $result->fetch_assoc()) { echo "<tr>"; echo "<td>" . $row["id"] . "</td>"; echo "<td>" . $row["nome"] . "</td>"; echo "<td>" . $row["descrizione"] . "</td>"; echo "<td class='prezzo'>" . number_format($row["prezzo"], 2, ',', '.') . " €</td>"; echo "</tr>"; } echo "</table>"; } else { echo "<p>Nessun prodotto disponibile nel catalogo.</p>"; } // Chiudi connessione $conn->close(); ?> </body> </html>
Esempio 2: Modulo di ricerca con risultati dinamici
Form di ricerca dinamica
<?php // Inizializzazione variabili $termineRicerca = ""; $risultati = null; $errore = ""; // Connessione al database (solo se viene effettuata una ricerca) if ($_SERVER["REQUEST_METHOD"] == "POST") { // Recupera il termine di ricerca dal form $termineRicerca = $_POST["cerca"]; // Connessione al database $servername = "localhost"; $username = "user"; $password = "password"; $dbname = "negozio"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { $errore = "Errore di connessione al database: " . $conn->connect_error; } else { // Preparazione della query con prepared statement per prevenire SQL injection $sql = "SELECT id, nome, descrizione, prezzo FROM prodotti WHERE nome LIKE ? OR descrizione LIKE ?"; $stmt = $conn->prepare($sql); $param = "%" . $termineRicerca . "%"; $stmt->bind_param("ss", $param, $param); $stmt->execute(); $risultati = $stmt->get_result(); $stmt->close(); $conn->close(); } } ?> <!DOCTYPE html> <html lang="it"> <head> <meta charset="UTF-8"> <title>Ricerca Prodotti</title> <style> body { font-family: Arial, sans-serif; margin: 20px; } h1 { color: #333; } form { margin-bottom: 20px; } input[type="text"] { padding: 8px; width: 300px; } input[type="submit"] { padding: 8px 15px; background-color: #4CAF50; color: white; border: none; cursor: pointer; } table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #ddd; padding: 8px; } th { background-color: #f2f2f2; } .error { color: #d9534f; } .results-count { margin-bottom: 10px; font-style: italic; } </style> </head> <body> <h1>Ricerca Prodotti</h1> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>"> <input type="text" name="cerca" placeholder="Cerca prodotti..." value="<?php echo htmlspecialchars($termineRicerca); ?>" required> <input type="submit" value="Cerca"> </form> <?php if ($errore): ?> <p class="error"><?php echo $errore; ?></p> <?php endif; ?> <?php if ($risultati !== null): ?> <div class="results-count"> <?php echo $risultati->num_rows; ?> risultati trovati per "<?php echo htmlspecialchars($termineRicerca); ?>" </div> <?php if ($risultati->num_rows > 0): ?> <table> <tr> <th>Nome</th> <th>Descrizione</th> <th>Prezzo</th> </tr> <?php while($row = $risultati->fetch_assoc()): ?> <tr> <td><?php echo htmlspecialchars($row["nome"]); ?></td> <td><?php echo htmlspecialchars($row["descrizione"]); ?></td> <td><?php echo number_format($row["prezzo"], 2, ',', '.'); ?> €</td> </tr> <?php endwhile; ?> </table> <?php else: ?> <p>Nessun prodotto corrisponde alla tua ricerca.</p> <?php endif; ?> <?php endif; ?> </body> </html>
Attività interattive
Attività 1: Creazione di una pagina per aggiungere nuovi prodotti
Progetta e implementa un modulo HTML e uno script PHP che permetta di inserire nuovi prodotti nel database. Il modulo dovrebbe includere:
- Nome del prodotto
- Descrizione
- Prezzo
- Categoria (da selezionare da una lista di categorie esistenti nel database)
- Pulsante di invio
Assicurati di:
- Validare i dati inseriti (sia lato client che lato server)
- Prevenire SQL injection utilizzando prepared statements
- Fornire feedback all’utente dopo l’operazione (successo o errore)
- Reindirizzare l’utente alla lista prodotti dopo un inserimento riuscito
Attività 2: Miglioramento della pagina di ricerca
Migliora la pagina di ricerca dell’esempio 2 aggiungendo le seguenti funzionalità:
- Filtri per categoria
- Ordinamento dei risultati (per prezzo crescente/decrescente, per nome)
- Paginazione dei risultati (visualizzare 10 risultati per pagina)
- Possibilità di visualizzare i dettagli di un prodotto cliccando sul suo nome
Conclusione
Abbiamo visto come creare pagine web dinamiche utilizzando PHP e MySQL, partendo dalla configurazione dell’ambiente di sviluppo fino alla creazione di pagine interattive che recuperano e visualizzano dati da un database. I concetti chiave che abbiamo esplorato includono:
- Configurazione dell’ambiente di sviluppo;
- Creazione e gestione di database MySQL;
- Connessione a MySQL tramite PHP;
- Esecuzione di query SQL;
- Visualizzazione dinamica dei dati in una pagina web;
- Implementazione di funzionalità interattive come moduli di ricerca.
Per approfondire questi argomenti, consiglio le seguenti risorse:
- Documentazione ufficiale PHP: php.net
- Documentazione MySQL: dev.mysql.com
- PHP: The Right Way: phptherightway.com
- Libro “Learning PHP, MySQL & JavaScript” di Robin Nixon
- Corso online su Udemy o Coursera: “PHP and MySQL Web Development”
E’ sempre bene tenere a mente che la sicurezza è fondamentale nello sviluppo web. Dunque il mio consiglio è quello di utilizzare sempre prepared statements per le query SQL, di implementare metodologie di validazioni adeguate e di applicare le migliori strategie pratiche di sicurezza per proteggere i vostri dati e i vostri utenti.