# Salvare un modulo HTML in un database MySQL: come funziona

I moduli HTML permettono agli utenti di inserire dati direttamente tramite un sito web, che possono poi essere salvati in un database. Rappresentano quindi l’interfaccia tra il sito e il database, in modo che input come nomi, indirizzi e-mail o commenti vengano raccolti e gestiti in modo sistematico. In questa guida ti mostriamo come salvare con PHP le informazioni provenienti da un modulo HTML in un database MySQL/MariaDB.

## Requisiti

Per salvare in modo affidabile i dati provenienti da un modulo HTML in un database MySQL o MariaDB, ti serve un ambiente che soddisfi i seguenti requisiti:

- **Server web con supporto PHP**: un server web Apache o [NGINX](https://www.ionos.it/digitalguide/server/configurazione/nginx-basi-installazione-e-configurazione/) con [PHP](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/cose-php/) installato e attivato, così che gli script lato server possano elaborare le informazioni del modulo
- **Conoscenze di base in PHP e SQL**: conoscenze fondamentali di PHP e SQL per creare il collegamento tra modulo e database e inserire correttamente i dati
- **Accesso alla configurazione del server web**: possibilità di accesso al server web, così da poter eseguire script PHP, creare tabelle nel database ed eventualmente configurare i permessi

N.B. Apache, MySQL/MariaDB e PHP fanno parte di un’installazione standard e sono già in esecuzione. Se il tuo server è stato creato con un’installazione minimale, devi installare e configurare Apache, MySQL/MariaDB e PHP prima di poter procedere.

## Inserire informazioni da un modulo HTML in MySQL/MariaDB: come fare

Per questo tutorial creiamo un [sito web per un ristorante](https://www.ionos.it/digitalguide/siti-web/creare-siti/creare-il-sito-web-di-un-ristorante/) fittizio. L’obiettivo è dare ai clienti la possibilità di lasciare recensioni direttamente tramite il sito. Ti mostriamo come i [moduli HTML](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/form-html/) vengano elaborati da uno script PHP e come i dati inseriti vengano salvati in un database MySQL o MariaDB.

### Primo passaggio: crea il database

Nel primo passaggio creiamo un database, così puoi archiviare tutte le informazioni del modulo HTML nel database. Per farlo, accedi innanzitutto al client MySQL/MariaDB dalla riga di comando:

```bash
mysql -u root -p
```

Crea ora un [database](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/database/) per le recensioni utilizzando il [comando SQL](https://www.ionos.it/digitalguide/server/configurazione/comandi-sql/) [CREATE DATABASE](https://www.ionos.it/digitalguide/server/configurazione/sql-create-database/) :

```bash
CREATE DATABASE reviews;
```

Passa quindi a questo database:

```bash
USE reviews;
```

Per il nostro esempio, per semplificare creeremo una sola tabella. Questa tabella avrà i seguenti tre campi:

- **Un campo ID:** questo campo verrà impostato su `AUTO_INCREMENT`. Questo parametro fa sì che un campo venga aumentato automaticamente di uno per ogni nuovo record, in modo che ogni voce riceva un valore univoco.
- **Nome della persona che lascia la recensione:** qui viene utilizzato un campo di testo con una lunghezza fino a 100 caratteri.
- **Una valutazione con stelle:** una valutazione numerica da 1 a 5, con il tipo di dati `TINYINT`.
- **Controlla i dettagli:** un campo di testo memorizza dettagli o commenti alle valutazioni ed è dimensionato con `VARCHAR(4000)` in modo da poter contenere circa 500 parole.

Crea ora la tabella con [CREATE TABLE](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/mariadb-create-table/):

```bash
CREATE TABLE user_review (
id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
reviewer_name VARCHAR(100),
star_rating TINYINT,
details VARCHAR(4000)
);
```

### Secondo passaggio: crea l’utente

Per motivi di sicurezza è consigliabile creare un utente univoco per ogni database, soprattutto quando si accede a questo database da un sito web.

Il seguente comando di [MariaDB](https://www.ionos.it/digitalguide/server/know-how/cose-mariadb/) crea un utente chiamato `review_site` con la password `JxSLRkdutW` e gli concede l’accesso al database con le recensioni:

```bash
GRANT ALL ON reviews.* TO review_site@localhost IDENTIFIED BY 'JxSLRkdutW';
```

Se utilizzi [MySQL](https://www.ionos.it/digitalguide/server/know-how/cose-mysql/), nelle versioni attuali il comando `GRANT ... IDENTIFIED BY ...` non è più consigliato. Invece, è preferibile creare prima l’utente con `CREATE USER` e poi usare `GRANT`:

```bash
CREATE USER 'review_site'@'localhost' IDENTIFIED BY 'JxSLRkdutW';
GRANT ALL PRIVILEGES ON reviews.* TO 'review_site'@'localhost';
FLUSH PRIVILEGES;
```

### Terzo passaggio: crea il modulo HTML per il sito web

Nel passaggio successivo creiamo il modulo di valutazione per le recensioni dei clienti. A questo scopo, crea un file chiamato `reviews.html` nel tuo spazio web e aprilo per la modifica. Per creare ad esempio il file in `/var/www/html` con l’editor di testo nano, il comando è:

```bash
sudo nano /var/www/html/reviews.html
```

Ora inserisci il seguente contenuto in questo file:

```html

<html lang="it">
<head>
<meta charset="UTF-8">
<title>Valutazione del ristorante </title>
</head>
<body>
<p>Come ti sei trovato da noi?</p>
<form action="addreview.php" method="POST">
Il tuo nome: <input type="text" name="reviewer_name"><br><br>
Quante stelle ci daresti?
<select name="star_rating">
<option value="1">1 stella</option>
<option value="2">2 stelle</option>
<option value="3">3 stelle</option>
<option value="4">4 stelle</option>
<option value="5">5 stelle</option>
</select><br><br>
La tua valutazione: <br>
<textarea name="details" rows="10" cols="30"></textarea><br><br>
<input type="submit" value="Submit" name="submit">
</form>
<div class="hash d-none" hidden>hash_c24509c99fe099508bff4ac81db01e32d65a288b</div><script data-shy-copy-guard>(function(){var C=[0x00AD,0x200B,0x200C,0x200D,0x2060,0xFEFF];var s=function(t){for(var i=0;i<C.length;i++){t=t.split(String.fromCharCode(C[i])).join("");}return t;};document.addEventListener("copy",function(e){var sel=document.getSelection();if(!sel||sel.isCollapsed||!e.clipboardData){return;}e.clipboardData.setData("text/plain",s(sel.toString()));try{var d=document.createElement("div");d.appendChild(sel.getRangeAt(0).cloneContents());e.clipboardData.setData("text/html",s(d.innerHTML));}catch(x){}e.preventDefault();});})();</script></body>
</html>
```

Di seguito trovi alcuni aspetti da tenere presenti per questo semplice modulo HTML:

- Questo modulo utilizza il metodo `POST` per passare i dati allo script PHP `addreview.php`.
- Il nome di ogni campo di input verrà utilizzato nel passaggio successivo come **nome della variabile PHP**. Di norma è consigliabile usare per questi valori il nome del campo della tabella del database.
- Non fidarti **mai dell’input degli utenti**. In questo esempio, per la valutazione con le stelle ci serve un numero da 1 a 5. Se chiedessimo agli utenti di inserire manualmente la valutazione, potrebbero fornire un valore non valido. È quindi meglio chiedere loro di scegliere valori predefiniti da un menu a discesa.

### Quarto passaggio: crea lo script PHP

Nell’ultimo passaggio creiamo lo script PHP che inserisce i dati del modulo HTML nel database. A questo scopo, stabilisci una connessione a MySQL o MariaDB, intercetta l’input degli utenti dal modulo e salvalo nella tabella creata in precedenza. Crea innanzitutto un file `addreview.php` nel tuo spazio web e aprilo per la modifica. Qui verrà inserito il codice PHP. Per creare il file in `/var/www/html` usando nano, il comando è:

```bash
sudo nano /var/www/html/addreview.php
```

Ogni script PHP deve iniziare con il tag di apertura PHP:

```php
<?php
```

Aggiungi quindi un blocco di connessione MySQL/MariaDB con l’indirizzo del server (`localhost`), il nome del database, il nome utente del database e la relativa password.

```php
$hostname = "localhost";
$username = "review_site";
$password = "JxSLRkdutW";
$db = "reviews";
```

La seguente sezione di codice consente di stabilire una connessione al database usando la funzione `mysqli_connect`. Inoltre, lo script restituisce un errore se la connessione non riesce:

```php
$dbconnect = mysqli_connect($hostname, $username, $password, $db);
if (mysqli_connect_errno()) {
die("Database connection failed: " . mysqli_connect_error());
}
```

Nel passaggio successivo recuperiamo i dati inseriti dall’utente tramite il modulo HTML e li memorizziamo in variabili PHP, così da poterli poi usare per l’elaborazione e l’inserimento nel database:

```php
if (isset($_POST['submit'])) {
$reviewer_name = $_POST['reviewer_name'];
$star_rating = $_POST['star_rating'];
$details = $_POST['details'];
```

Successivamente, i dati inseriti dall’utente devono essere scritti nel database. A questo scopo creiamo una query `SQL INSERT` che prende i valori dalle variabili PHP e li inserisce nei campi corrispondenti della tabella `user_review`. Per evitare [SQL injections](https://www.ionos.it/digitalguide/server/sicurezza/sql-injection-che-cose-e-come-proteggersi/) utilizziamo qui i [prepared statement](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/prepared-statement-in-php-mysql/):

```php
$stmt = $dbconnect->prepare("INSERT INTO user_review (reviewer_name, star_rating, details) VALUES (?, ?, ?)");
$stmt->bind_param("sis", $reviewer_name, $star_rating, $details);
$stmt->execute();
```

Aggiungi un’[istruzione PHP if-else](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/php-if-else/) che mostri un messaggio di errore se il processo non va a buon fine. Se il processo viene concluso, ringrazia l’utente per la sua valutazione:

```php
if ($stmt->execute()) {
echo "Grazie per la tua valutazione.";
} else {
die("Si è verificato un errore.");
}
$stmt->close();
}
```

Infine, chiudi l’istruzione `if` aperta e aggiungi un tag PHP di chiusura:

```php
}
?>
```

N.B. Se ricevi il messaggio di errore “Connessione al database non riuscita: accesso per l’utente ‘review\_site’@‘localhost’ negato (con password: SÌ)”, puoi testare le credenziali provando ad accedere a MySQL/MariaDB dalla riga di comando con il comando `mysql -u review_site -p`.

### Quinto passaggio: testa lo script

Per testare lo script, visita `reviews.html` in un browser e invia quindi una valutazione di esempio. Successivamente accedi al database delle recensioni con il client MySQL/MariaDB dalla riga di comando:

```bash
mysql -u root -p reviews
```

Usa `SELECT * FROM user_review` per visualizzare l’intero contenuto della tabella:

```bash
MariaDB [reviews]> SELECT * FROM user_review;
+----+---------------+-------------+---------------------------------------------------------+
| id | reviewer_name | star_rating | details                                                 |
+----+---------------+-------------+---------------------------------------------------------+
|  1 | Ben           |           5 | Pizza squisita!                                        |
|  2 | Eleonora        |           1 | La pizza non è così buona.                                  |
+----+---------------+-------------+---------------------------------------------------------+
2 rows in set (0.00 sec)
```

Lo script PHP completo è il seguente:

```php
<?php
// Dati di connessione al database
$hostname = "localhost";
$username = "review_site";
$password = "JxSLRkdutW";
$db       = "reviews";
// Stabilire la connessione al database
$dbconnect = new mysqli($hostname, $username, $password, $db);
// Controllare la connessione
if ($dbconnect->connect_error) {
    die("Connessione al database non riuscita: " . $dbconnect->connect_error);
}
// Eseguire solo se il modulo è stato inviato
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit'])) {
    // Convalidare i dati inseriti (controllo minimo)
    $reviewer_name = trim($_POST['reviewer_name'] ?? '');
    $star_rating   = intval($_POST['star_rating'] ?? 0);
    $details       = trim($_POST['details'] ?? '');
    // Validazione semplice
    if ($reviewer_name === '' || $star_rating < 1 || $star_rating > 5 || $details === '') {
        die("Compila correttamente tutti i campi.");
    }
    // Creare prepared statement
    $stmt = $dbconnect->prepare("INSERT INTO user_review (reviewer_name, star_rating, details) VALUES (?, ?, ?)");
    
    if ($stmt === false) {
        die("Errore del database: " . $dbconnect->error);
    }
    $stmt->bind_param("sis", $reviewer_name, $star_rating, $details);
    // Eseguire lo statement
    if ($stmt->execute()) {
        echo "Grazie per la tua valutazione.";
    } else {
        die("Si è verificato un errore: " . $stmt->error);
    }
    $stmt->close();
}
// Chiudere la connessione
$dbconnect->close();
?>
```


This is a markdown version of: [https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/inserire-con-php-informazioni-da-un-modulo-html-in-un-database-mysql-mariadb/](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/inserire-con-php-informazioni-da-un-modulo-html-in-un-database-mysql-mariadb/) for AI/LLM consumption.