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.
- Partner IONOS Cloud
- Soluzioni flessibili e su misura
- Data center situati in Europa
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 con 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
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 fittizio. L’obiettivo è dare ai clienti la possibilità di lasciare recensioni direttamente tramite il sito. Ti mostriamo come i moduli 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:
mysql -u root -pbashCrea ora un database per le recensioni utilizzando il comando SQL CREATE DATABASE :
CREATE DATABASE reviews;bashPassa quindi a questo database:
USE reviews;bashPer 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:
CREATE TABLE user_review (
id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
reviewer_name VARCHAR(100),
star_rating TINYINT,
details VARCHAR(4000)
);bash
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 crea un utente chiamato review_site con la password JxSLRkdutW e gli concede l’accesso al database con le recensioni:
GRANT ALL ON reviews.* TO review_site@localhost IDENTIFIED BY 'JxSLRkdutW';bashSe utilizzi 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:
CREATE USER 'review_site'@'localhost' IDENTIFIED BY 'JxSLRkdutW';
GRANT ALL PRIVILEGES ON reviews.* TO 'review_site'@'localhost';
FLUSH PRIVILEGES;bashTerzo 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 è:
sudo nano /var/www/html/reviews.htmlbashOra inserisci il seguente contenuto in questo file:
<!DOCTYPE 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>
</body>
</html>htmlDi seguito trovi alcuni aspetti da tenere presenti per questo semplice modulo HTML:
- Questo modulo utilizza il metodo
POSTper passare i dati allo script PHPaddreview.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 è:
sudo nano /var/www/html/addreview.phpbashOgni script PHP deve iniziare con il tag di apertura PHP:
<?phpphpAggiungi 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.
$hostname = "localhost";
$username = "review_site";
$password = "JxSLRkdutW";
$db = "reviews";phpLa 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:
$dbconnect = mysqli_connect($hostname, $username, $password, $db);
if (mysqli_connect_errno()) {
die("Database connection failed: " . mysqli_connect_error());
}phpNel 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:
if (isset($_POST['submit'])) {
$reviewer_name = $_POST['reviewer_name'];
$star_rating = $_POST['star_rating'];
$details = $_POST['details'];phpSuccessivamente, 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 utilizziamo qui i prepared statement:
$stmt = $dbconnect->prepare("INSERT INTO user_review (reviewer_name, star_rating, details) VALUES (?, ?, ?)");
$stmt->bind_param("sis", $reviewer_name, $star_rating, $details);
$stmt->execute();phpAggiungi un’istruzione 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:
if ($stmt->execute()) {
echo "Grazie per la tua valutazione.";
} else {
die("Si è verificato un errore.");
}
$stmt->close();
}phpInfine, chiudi l’istruzione if aperta e aggiungi un tag PHP di chiusura:
}
?>phpSe 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:
mysql -u root -p reviewsbashUsa SELECT * FROM user_review per visualizzare l’intero contenuto della tabella:
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)bashLo script PHP completo è il seguente:
<?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();
?>php
