 |
|
 |
Mostra argomento precedente :: Mostra argomento successivo |
Autore |
Messaggio |
_Alex_ staff tecnica

Iscritto: 22 Ago 2004 Messaggi: 5331
|
Inviato: Mar 23 Feb, 2016 10:04 am Oggetto: PHP |
|
|
Dedicato a chi è pratico di Php, ho un problema con l'inserimento dati in un database access di estensione .accdb e NON .mdb.
Metto i sorgenti, si tratta di riempire un form e scrivere i campi nel database, il quale contiene una sola tabella Ticket con i campi specificati nel .html.
Ecco il primo file, Inserimento dati.html:
Citazione: | <html>
<head></head>
<body>
</body>
</html> |
Ecco il secondo file, scrivi_db.php:
Citazione: | <?php
// Recuperiamo i dati dal form
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$ufficio = $_POST['ufficio'];
$asset = $_POST['asset'];
$problema = $_POST['problema'];
$descrizione = $_POST['descrizione'];
// Verifichiamo che i campi non siano vuoti...
if (!$nome || !$cognome || !$ufficio || !$asset || !$problema || !$descrizione) {
echo 'Tutti i campi del modulo sono obbligatori!'; }
// verifico che il nome non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$nome)) {
echo 'Il nome contiene caratteri non ammessi';
}
// verifico che il cognome non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$cognome)) {
echo 'Il cognome contiene caratteri non ammessi';
}
// verifico che l'ufficio non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$ufficio)) {
echo 'L'ufficio contiene caratteri non ammessi';
}
// verifico che l'asset non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$asset)) {
echo 'L'asset contiene caratteri non ammessi';
}
// verifico che il problema non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$problema)) {
echo 'Il problema contiene caratteri non ammessi';
}
// verifico che la descrizione non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$descrizione)) {
echo 'La descrizione contiene caratteri non ammessi';
}
else {
// Connessione al DB
$dbName = / . "/Ticket.accdb";
if (!file_exists($dbName)) {
die("Could not find database file.");
}
$db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.accdb)}; DBQ=$dbName; Uid=; Pwd=;");
$sql = "INSERT INTO Ticket";
$sql .= " (nome, cognome, ufficio, asset, problema, descrizione) ";
$sql .= "VALUES (" . $db->quote($nome) . ", " . $db->quote($cognome) . ", " . $db->quote($ufficio) . ", " . $db->quote($asset) . ", " . $db->quote($problema) . ", " . $db->quote($descrizione) .") ";
$db->query($sql);
}
?> |
Quando faccio Invia, al posto di scrivere i dati nel file Ticket.accdb mi mostra il sorgente di scrivi_db.php.
Ho fatto qualche errore di sintassi? E' corretto scrivi_db.php?
Sul pc che sto usando ho installato XAMPP, ho in esecuzione Apache, Php e MariaDb, ho abilitato il supporto odbc dall'estensione del file Php.ini.
Grazie in anticipo.
_________________
 
   |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
_Alex_ staff tecnica

Iscritto: 22 Ago 2004 Messaggi: 5331
|
Inviato: Mar 23 Feb, 2016 10:45 am Oggetto: |
|
|
Aggiornamento, ora i dati vengono passati allo script, ma ricevo il seguente errore:
Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in C:\xampp\htdocs\Form\scrivi_db.php:54 Stack trace: #0 C:\xampp\htdocs\Form\scrivi_db.php(54): PDO->__construct('odbc:DRIVER={Mi...') #1 {main} thrown in C:\xampp\htdocs\Form\scrivi_db.php on line 54
E' la riga del PDO, mentre la riga:
$dbName = / . "/Ticket.accdb";
è stata modificata in:
$dbName = "Ticket.accdb";
_________________
 
   |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
Andrea Giorgi supporto tecnico

Iscritto: 13 Dic 2003 Messaggi: 12696 Località: Pavia
|
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
Andrea Giorgi supporto tecnico

Iscritto: 13 Dic 2003 Messaggi: 12696 Località: Pavia
|
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
_Alex_ staff tecnica

Iscritto: 22 Ago 2004 Messaggi: 5331
|
Inviato: Mar 23 Feb, 2016 11:18 am Oggetto: |
|
|
Dunque, facciamo ordine.
Il primo problema, in cui mi ripresentava il sorgente del .php è stato risolto, erano banalmente da copiare i file nella root del server virtuale.
Il fatal error di sopra si verificava quando la riga incriminata era la seguente:
$db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=$dbName; Uid=; Pwd=;");
Mentre ora è:
$db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.accdb)}; DBQ=$dbName; Uid=; Pwd=;");
e l'errore che ricevo è:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[IM002] SQLDriverConnect: 0 [Microsoft][Driver Manager ODBC] Nome origine dati non trovato e driver predefinito non specificato.' in C:\xampp\htdocs\Form\scrivi_db.php:54 Stack trace: #0 C:\xampp\htdocs\Form\scrivi_db.php(54): PDO->__construct('odbc:DRIVER={Mi...') #1 {main} thrown in C:\xampp\htdocs\Form\scrivi_db.php on line 54
_________________
 
   |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
_Alex_ staff tecnica

Iscritto: 22 Ago 2004 Messaggi: 5331
|
Inviato: Mar 23 Feb, 2016 11:26 am Oggetto: |
|
|
Dimenticavo, da riga di comando apachectl -M mi restituisce un errore di sistema:
apachectl non è riconosciuto come comando interno o esterno, un programma eseguibile o un file batch
_________________
 
   |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
Andrea Giorgi supporto tecnico

Iscritto: 13 Dic 2003 Messaggi: 12696 Località: Pavia
|
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
_Alex_ staff tecnica

Iscritto: 22 Ago 2004 Messaggi: 5331
|
Inviato: Mar 23 Feb, 2016 12:47 pm Oggetto: |
|
|
Avevo già visto quella pagina ma non l'avevo letta fino in fondo.
Ovviamente la soluzione al problema è scritta tutta lì: Access 2010 a 64bit non supporta il driver Odbc a 32bit, quindi non comunicano.
Ora si pongono alcuni interessanti interrogativi:
-quali altri rdbms sono supportati da PHP?
-in particolar modo, è supportato Libre/Open Office base? Lo scopo è fare il backup sciuè sciuè scopiazzando un file su un disco diverso, piuttosto che fare il datapump come in Oracle....
-se Libre/Open Office non sono supportati, quale rdbms ha il sistema più semplice di backup? Ovviamente se è free è meglio, ma abbiamo una megalicenza nazionale con Oracle che, all'occorrenza, si può usare.
Obviously grazie già per tutto quanto sopra e per eventuali altre dritte
_________________
 
   |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
Andrea Giorgi supporto tecnico

Iscritto: 13 Dic 2003 Messaggi: 12696 Località: Pavia
|
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
_Alex_ staff tecnica

Iscritto: 22 Ago 2004 Messaggi: 5331
|
Inviato: Mar 23 Feb, 2016 3:02 pm Oggetto: |
|
|
Ok, aggiornamento di situazione.
Questo è il codice di scrivi_db.php
Citazione: | <?php
// Recuperiamo i dati dal form
$Nome = $_POST['Nome'];
$Cognome = $_POST['Cognome'];
$Ufficio = $_POST['Ufficio'];
$Asset = $_POST['Asset'];
$Problema = $_POST['Problema'];
$Descrizione = $_POST['Descrizione'];
// Verifichiamo che i campi non siano vuoti...
if (!$Nome || !$Cognome || !$Ufficio || !$Asset || !$Problema || !$Descrizione) {
echo 'Tutti i campi del modulo sono obbligatori!'; }
// verifico che il nome non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$Nome)) {
echo 'Il Nome contiene caratteri non ammessi';
}
// verifico che il cognome non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$Cognome)) {
echo 'Il Cognome contiene caratteri non ammessi';
}
// verifico che l'ufficio non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$Ufficio)) {
echo 'L\' Ufficio contiene caratteri non ammessi';
}
// verifico che l'asset non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$Asset)) {
echo 'L\' Asset contiene caratteri non ammessi';
}
// verifico che il problema non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$Problema)) {
echo 'Il Problema contiene caratteri non ammessi';
}
// verifico che la descrizione non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$Descrizione)) {
echo 'La Descrizione contiene caratteri non ammessi';
}
else {
// Il nome dell'host (hostname) su cui si trova MySQL
$dbhost = "localhost:81";
// Il nome del nostro database
$dbname = "Ticket";
// Il nostro nome utente (username)
$dbuser = "Alex";
// La nostra password
$dbpass = "5win938lu35";
// Connessione al DB
$conn = mysql_connect($dbhost,$dbuser,$dbpass)
or die("Impossibile collegarsi al server MySQL.");
// Funzione mysql_select_db()
mysql_select_db($dbname,$conn)
or die("Impossibile selezionare il database $dbname");
// Inserimento dati
$sql = "INSERT INTO Ticket (Nome, Cognome, Ufficio, Asset, Problema, Descrizione) VALUES ($Nome, $Cognome, $Ufficio, $Asset, $Problema, $Descrizione);"
// Esegue il comando SQL o stampa un messaggio di errore
$res = mysql_query($sql,$conn)
or die( "Errore: " . mysql_error() );
}
?> |
Xampp è in esecuzione, Localhost è sulla porta 81 perché il pc nel mio ufficio non mi dà disponibile la 80 classica, in php.ini mysql è abilitato di default, ho disabilitato l'odbc di Microzozz, stoppato Apache e riavviato.
L'esecuzione mostra il codice di scrivi_db e non scrive nulla nel database
Da PHPmyadmin avevo creato il database e la tabella (ha un campo in più, ovviamente, la primary key), oltre all'utente in questione, ma ho un dubbio:
l'utente Alex compare su tutta la gestione di mysql, anche per l'altro database Idrografico che avevo creato, invece volevo che apparisse solo tra gli utenti di Ticket.
Cosa mi sfugge?
_________________
 
   |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
Andrea Giorgi supporto tecnico

Iscritto: 13 Dic 2003 Messaggi: 12696 Località: Pavia
|
Inviato: Mar 23 Feb, 2016 5:57 pm Oggetto: |
|
|
Togli la porta da $dbhost, 80 è la porta HTTP (Apache) mentre la porta predefinita di MySQL è la 3306 quindi se non l'hai cambiata nella sua configurazione omettila.
Se ti viene restituito il contenuto del file php nel browser significa che non viene interpretato, verifica ancora che apache stia girando e che il modulo php sia attivo.
Riguardo all'utente puoi anche crearne uno e dargli i permessi solo per il DB Ticket... facciamo una cosa per volta però.
P.S. usa "mysqli" come estensione php che "mysql" è deprecato.
_________________ Andrea Giorgi - www.andreagiorgi.net
LINK UTILI : Regolamento - Come pubblicare le vostre fotografie - Guida alla navigazione del forum - Il breviario del Don |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
_Alex_ staff tecnica

Iscritto: 22 Ago 2004 Messaggi: 5331
|
Inviato: Mar 23 Feb, 2016 6:14 pm Oggetto: |
|
|
Si, 80 era l'unica porta cambiata; domani cambio tutorial ed elimino quello che usavo, poi faccio le modifiche al codice e vediamo cosa viene fuori.
Thanx a lot.
_________________
 
   |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
_Alex_ staff tecnica

Iscritto: 22 Ago 2004 Messaggi: 5331
|
Inviato: Mer 24 Feb, 2016 8:37 am Oggetto: |
|
|
Dunque, il nuovo codice è questo:
Citazione: | <?php
// Recuperiamo i dati dal form
$Nome = $_POST['Nome'];
$Cognome = $_POST['Cognome'];
$Ufficio = $_POST['Ufficio'];
$Asset = $_POST['Asset'];
$Problema = $_POST['Problema'];
$Descrizione = $_POST['Descrizione'];
// Verifichiamo che i campi non siano vuoti...
if (!$Nome || !$Cognome || !$Ufficio || !$Asset || !$Problema || !$Descrizione) {
echo 'Tutti i campi del modulo sono obbligatori!'; }
// verifico che il nome non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$Nome)) {
echo 'Il Nome contiene caratteri non ammessi';
}
// verifico che il cognome non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$Cognome)) {
echo 'Il Cognome contiene caratteri non ammessi';
}
// verifico che l'ufficio non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$Ufficio)) {
echo 'L\' Ufficio contiene caratteri non ammessi';
}
// verifico che l'asset non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$Asset)) {
echo 'L\' Asset contiene caratteri non ammessi';
}
// verifico che il problema non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$Problema)) {
echo 'Il Problema contiene caratteri non ammessi';
}
// verifico che la descrizione non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$Descrizione)) {
echo 'La Descrizione contiene caratteri non ammessi';
}
else {
// Il nome dell'host (hostname) su cui si trova MySQL
$dbhost = "localhost";
// Il nome del nostro database
$dbname = "ticket";
// Il nostro nome utente (username)
$dbuser = "Alex";
// La nostra password
$dbpass = "5win938lu35";
// Connessione al DB
$conn = new mysqli($dbhost,$dbuser,$dbpass, $dbname);
// Verifica connessione
if ($conn->connect_errno) {
echo "Connessione fallita, codice errore: ". $conn->connect_error . ".";
exit();
}
// Inserimento dati
$sql = "INSERT INTO ticket (Nome, Cognome, Ufficio, Asset, Problema, Descrizione) VALUES (
. "." . $Nome . "',"
. "." . $Cognome . "',"
. "." . $Ufficio . "',"
. "." . $Asset . "',"
. "." . $Problema . "',"
. "." . $Descrizione . "');"
// Esegue il comando SQL o stampa un messaggio di errore
if (!$conn->query($sql)) {
echo "Errore della query: " . $conn->error . ".";
} else {
echo "Registrazione effettuata correttamente.";
}
// Chiudiamo la connessione
$conn->close();
}
?> |
Continua a non andare, anche il test nel browse con phpinfo non va.
Dal prompt dei comandi, php -m mi dà la seguente risposta:
Descrizione: |
|
Dimensione: |
19.38 KB |
Visualizzato: |
File visto o scaricato 13080 volta(e) |

|
_________________
 
   |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
_Alex_ staff tecnica

Iscritto: 22 Ago 2004 Messaggi: 5331
|
Inviato: Mer 24 Feb, 2016 8:47 am Oggetto: |
|
|
Stranamente l'istruzione phpinfo(); da sola non va, ma se la richiamo dal pannello di Xampp (è un php anche quello) mi dà la schermata corretta.....
_________________
 
   |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
_Alex_ staff tecnica

Iscritto: 22 Ago 2004 Messaggi: 5331
|
Inviato: Mer 24 Feb, 2016 9:55 am Oggetto: |
|
|
Ok, ora va, devo ricordarmi di specificare nella barra degli indirizzi localhost, non il percorso assoluto del file.
Ho un errore di sintassi nella stringa sql, l'ultima che ho messo è:
$sql = "INSERT INTO ticket (Nome, Cognome, Ufficio, Asset, Problema, Descrizione)
VALUES (" . "'" . $Nome . "'," . "'" . $Cognome . "'," . "'" . $Ufficio,
. "'" . $Asset . "'," . "'" . $Problema . "'," . "'" . $Descrizione ."')";
E' corretta?
_________________
 
   |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
Andrea Giorgi supporto tecnico

Iscritto: 13 Dic 2003 Messaggi: 12696 Località: Pavia
|
Inviato: Mer 24 Feb, 2016 10:12 am Oggetto: |
|
|
No, c'è un po' di confusione con gli apici, scrivila così:
$sql = "INSERT INTO ticket (Nome, Cognome, Ufficio, Asset, Problema, Descrizione)
VALUES ('$Nome', '$Cognome', '$Ufficio', '$Asset', '$Problema', '$Descrizione')";
_________________ Andrea Giorgi - www.andreagiorgi.net
LINK UTILI : Regolamento - Come pubblicare le vostre fotografie - Guida alla navigazione del forum - Il breviario del Don |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
_Alex_ staff tecnica

Iscritto: 22 Ago 2004 Messaggi: 5331
|
Inviato: Mer 24 Feb, 2016 10:47 am Oggetto: |
|
|
Mi dava errore, ho dovuto usare il carattere di escape \, ora funziona ed è scritta così:
$sql = "INSERT INTO ticket (Nome, Cognome, Ufficio, Asset, Problema, Descrizione)
VALUES (\"".$Nome."\", \"".$Cognome."\", \"".$Ufficio."\",
\"".$Asset."\", \"".$Problema."\", \"".$Descrizione."\")";
_________________
 
   |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
Andrea Giorgi supporto tecnico

Iscritto: 13 Dic 2003 Messaggi: 12696 Località: Pavia
|
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
_Alex_ staff tecnica

Iscritto: 22 Ago 2004 Messaggi: 5331
|
Inviato: Mer 24 Feb, 2016 1:34 pm Oggetto: |
|
|
L'avevo provata prima e mi dava un generico errore di sintassi.
Ok, ora pensiamo ai problemi successivi, il primo che ho è che non riesco ad accedere alla pagina da un altro pc nella rete, poiché uso Xampp la directory del server simulato è C:\Xampp\HtDoc, la pagina è contenuta in una sottodirectory Form, l'indirizzo che ho digitato è:
http://numeroip:81/Form/Inserimento_dati.html
ma non va.
Il mio ip viene correttamente pingato all'interno della rete ed è accessibile e visibile dagli altri pc.
L'altro problema è quello relativo all'utente globale di MySql, mentre lo vorrei locale alla pagina.
In realtà la situazione è un pò più complessa (paradossalmente rovesciata), perché questa pagina farà parte di un sito più grande costruito con Joomla, all'interno del quale c'è un forum con i suoi utenti (miei colleghi), a ciascuno dei quali ho creato un utente locale al sito con il cms, che, però, dovrà avere le permission per scrivere in questo database Ticket.
In pratica il forum punta ad un database, la richiesta di ticket ad un altro, ma nello stesso server gestito con una sola installazione di Xampp e gli utenti saranno quelli del forum.
Se sono stato caotico ditemelo....
Non so se fa comodo saperlo, comunque Xampp non usa proprio MySql, usa MariaDb, gli sviluppatori di Xampp lo danno per identico, io sto cominciando a sospettare che la tua sintassi non funzionasse a causa di piccole differenze tra i due.
_________________
 
   |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
Andrea Giorgi supporto tecnico

Iscritto: 13 Dic 2003 Messaggi: 12696 Località: Pavia
|
Inviato: Mer 24 Feb, 2016 2:10 pm Oggetto: |
|
|
Devi vedere nella configurazione di apache se ci sono impostate delle limitazioni o meno.
In merito alle utenze MySQL sappi che non hanno nulla a che vedere con gli utenti del cms. L'utenza MySQL è quella che lo script PHP utilizza per connettersi al DB ed è una sola. Può essere diversa da quella principale di MySQL, ed in tal caso potrai crearla con phpMyAdmin, ma non ha nulla a che fare con le utenze del CMS.
Se vuoi gestire in maniera distinta le utenze del CMS devi farlo tramite lo script PHP.
MariaDB è un fork di MySQL, per quello che stai facendo sono perfettamente identici.
_________________ Andrea Giorgi - www.andreagiorgi.net
LINK UTILI : Regolamento - Come pubblicare le vostre fotografie - Guida alla navigazione del forum - Il breviario del Don |
|
Vai ad inizio pagina Vai a fine pagina |
|
 |
|
|
Non puoi iniziare nuovi argomenti Non puoi rispondere ai messaggi Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi Non puoi allegare files in questo forum Puoi scaricare gli allegati in questo forum
|
|