Provala così:
Codice PHP:
$sql = "INSERT INTO dati utenti (testo, email, file) VALUES ("
. "'" . $dati. "',"
. "'" . $mail . "',"
. "'" . $file . "');"
Ho rimosso l'ultima virgola e chiuso la parentesi tonda. La query generata sarebbe:
Codice:
INSERT INTO dati utenti (testo, email, file) VALUES ('stringa_testo', 'stringa_email', 'stringa_file');
Se ancora dovesse persistere l'errore, puoi mostrarci il messaggio di errore?
Ti consiglio anche io di usare i prepared statement come indicato da Dreadnaut, o almeno ti suggerirei di aumentare il livello di sicurezza controllando i dati in ingresso con real_escape_string():
Codice PHP:
$sql = "INSERT INTO dati utenti (testo, email, file) VALUES ("
. "'" . $mysqli->real_escape_string($dati) . "',"
. "'" . $mysqli->real_escape_string($mail) . "',"
. "'" . $mysqli->real_escape_string($file) . "');"
In pratica, devi passare sempre i dai provenienti dai form nella real_escape_string() per evitare attacchi mysql injection, oppure usare i prepared statement.
Ciao!