Ho appena istallato Drupal ma prima di cimentarmi nel suo studio vorrei un chiarimento. Ho necessità di creare dei database contenenti informazioni di varia natura (e utilizzo per questo phpmyadmin). Esiste un modulo che possa far dialogare drupal con database esterni? Mi scuso per banalità della domanda ma sono un "neofita"! Grazie.
La risposta è si, ma:
se vuoi accedere a tabelle all'intendo dello stesso database, la connessione verso il db è già aperta.
se invece è un database diverso, dovrai aprire una connessione diversa ed usare delle call native mysql, perchè le funzioni utilizzate da drupal sono relative alla connessione con il proprio database.
Matteo
Se ti piace cantare, visita CANTinCORO
Matteo
Ti ringrazio per la risposta! Potresti farmi un esempio pratico? Io avevo provato a scrivere un piccolo script in php con i relativi comandi (connect_db etc.) sql. Però non ho avuto risultati positivi forse perchè inserivo lo scipt direttamente alla "page" selezionando la voce "php". Grazie anticipatamente!
Girami il pezzettino di codice, così lo provo e vedo che succede...
Matteo
Se ti piace cantare, visita CANTinCORO
Matteo
Ciao! Grazie ancora per la tua tempestività. Ti invio quello che ho fatto:
Questo è il risultato:
user error: La tabella 'assut.book' non esiste
query: SELECT * FROM book WHERE nid = 0 in c:\programmi\easyphp1-8\www\drupal\includes\database.mysql.inc on line 67.
Fatal error: La tabella 'assut.watchdog' non esiste query: INSERT INTO watchdog (uid, type, message, severity, link, location, hostname, timestamp) VALUES (1, 'php', 'La tabella \'assut.book\' non esiste query: SELECT * FROM book WHERE nid = 0 in c:\\programmi\\easyphp1-8\\www\\drupal\\includes\\database.mysql.inc on line 67.', 2, '', '/drupal/?q=node/add/page', '127.0.0.1', 1115663176) in c:\programmi\easyphp1-8\www\drupal\includes\database.mysql.inc on line 67
Fatal error: La tabella 'assut.sessions' non esiste query: UPDATE sessions SET uid = 1, hostname = '127.0.0.1', session = 'messages|a:0:{}', timestamp = 1115663176 WHERE sid = '9e5aa67af627ff991144207a87a13f75' in c:\programmi\easyphp1-8\www\drupal\includes\database.mysql.inc on line 67
Warning: Unknown(): A session is active. You cannot change the session module's ini settings at this time. in Unknown on line 0
Ho anche provato ad eliminare la connessione a localhost:
Con il seguente risultato:
warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in c:\programmi\easyphp1-8\www\drupal\includes\common.inc(1841) : eval()'d code on line 2.
Infine ho copiato una tabella del mio database all`interno del database drupal e ho fatto la query:
con il seguente risultato:
warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in c:\programmi\easyphp1-8\www\drupal\includes\common.inc(1841) : eval()'d code on line 6.
warning: mysql_result(): supplied argument is not a valid MySQL result resource in c:\programmi\easyphp1-8\www\drupal\includes\common.inc(1841) : eval()'d code on line 8.
ID:
warning: mysql_result(): supplied argument is not a valid MySQL result resource in c:\programmi\easyphp1-8\www\drupal\includes\common.inc(1841) : eval()'d code on line 9.
$db = mysql_connect("localhost", "root", "miapwd") or die
("Impossibile connettersi: " . mysql_error());
mysql_select_db("assut",$db);
Questo è il risultato:
user error: La tabella 'assut.book' non esiste
query: SELECT * FROM book WHERE nid = 0 in c:\programmi\easyphp1-8\www\drupal\includes\database.mysql.inc on line 67.
Fatal error: La tabella 'assut.watchdog' non esiste query: INSERT INTO watchdog (uid, type, message, severity, link, location, hostname, timestamp) VALUES (1, 'php', 'La tabella \'assut.book\' non esiste query: SELECT * FROM book WHERE nid = 0 in c:\\programmi\\easyphp1-8\\www\\drupal\\includes\\database.mysql.inc on line 67.', 2, '', '/drupal/?q=node/add/page', '127.0.0.1', 1115663176) in c:\programmi\easyphp1-8\www\drupal\includes\database.mysql.inc on line 67
Fatal error: La tabella 'assut.sessions' non esiste query: UPDATE sessions SET uid = 1, hostname = '127.0.0.1', session = 'messages|a:0:{}', timestamp = 1115663176 WHERE sid = '9e5aa67af627ff991144207a87a13f75' in c:\programmi\easyphp1-8\www\drupal\includes\database.mysql.inc on line 67
//mysql_connect_db(“ergon?,$db);
Con il seguente risultato:
warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in c:\programmi\easyphp1-8\www\drupal\includes\common.inc(1841) : eval()'d code on line 2.
Infine ho copiato una tabella del mio database all"interno del database drupal e ho fatto la query:
con il seguente risultato:
warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in c:\programmi\easyphp1-8\www\drupal\includes\common.inc(1841) : eval()'d code on line 6.
warning: mysql_result(): supplied argument is not a valid MySQL result resource in c:\programmi\easyphp1-8\www\drupal\includes\common.inc(1841) : eval()'d code on line 8.
ID:
warning: mysql_result(): supplied argument is not a valid MySQL result resource in c:\programmi\easyphp1-8\www\drupal\includes\common.inc(1841) : eval()'d code on line 9.
Se non è un problema per te, è meglio copiare la tua tabella all'interno del database di Drupal; a questo punto, puoi usare una normale query.
Spiegami però che tipo di interazione devi avere: devi leggere un record oppure stampare una lista ??
E poi, questo codice ti serve all'interno di una pagina o in un blocco ?? non che questo cambi tantissimo le cose, ma almeno ti do le istruzioni giuste....
Matteo
Se ti piace cantare, visita CANTinCORO
Matteo
Avevo provato a inserire la tabella all'interno del database Drupal. Ho provato ad eseguire la query ma il risultato è stato ancora una volta di errore. Comunque dovrei leggere un record e avere la possibilità di scaricarlo in pdf (esigenza futuribile). Il risultato della query effettuata sul database esterno (o la mia tabella che ho inserito in Drupal) dovrebbe essere visualizzato in una pagina.
Ti ringrazio anticipatamente!
Puoi creare una pagina e come formato di input specificare PHP code.
A questo punto, puoi scrivere testo html inframezzato da codice PHP.
Come esempio:
Testo statico della pagina
Testo statico della pagina<br>
<?php<br>
<br>
$r=db_fetch_object(db_query("select colonna from <code>{tabella}
where colonna = 'xx' LIMIT 1;"));
print "<b>$r->colonna</b> bla
bla<br>";
?>
Ricordati che il nome tabella deve essere circondato dalla parentesi grafa, perchè così è possibile gestire il prefisso dei nomi tabella.
Le call sono proprietarie di Drupal e assumono che la connessione sia già aperta sul database utilizzato da Drupal.
Visualizzando la pagina, verrà eseguito il codice PHP. Semplice, vero ??
Per la creazione del PDF, secondo me dovresti trovare una classe PHP che faccia la trasformazione e mettere una include all'interno del codice PHP, ma è da provare.
Fammi sapere
Matteo
Se ti piace cantare, visita CANTinCORO
Matteo
Per generare contenuto in formato PDF si può prendere ispirazione dal modulo PDFVIEW
http://drupal.org/project/pdfview
Matteo
Se ti piace cantare, visita CANTinCORO
Matteo
Parse error: parse error in c:\programmi\easyphp1-8\www\drupal\includes\common.inc(1841) : eval()'d code on line 4
Lo script l'ho copiato bene perchè provato in una cartella in locale e restituisce la query perfettamente. Non potrebbe essere un problema di settaggio del file di configurazione?
Mi sembra molto strano, non ci sono settaggi nel file di configurazione che influiscano sul comportamento.
Stai usando Drupal 4.6 con PHP 4 o 5 ??
La linea 4 che cosa contiene ??
Per favore mandami l'intero testo della pagina, ESATTAMENTE come inserito a webmaster at cantincoro punto org.
Matteo
Se ti piace cantare, visita CANTinCORO
Matteo
Ho dimenticato di dirti che io stò lavorando in locale con Easy php 1-8 e che nel provare lo script mi stò limitando all'anteprima della pagina! Comunque a proposito dell'errore 4 ho cercato all'interno del file common.inc ed ho trovato sull'errore "eval" questo commento in inglese
( * Evaluate a string of PHP code.
*
* This is a wrapper around PHP's eval(). It uses output buffering to capture both
* returned and printed text. Unlike eval(), we require code to be surrounded by
*
* PHP file.
*
* Using this wrapper also ensures that the PHP code which is evaluated can not
* overwrite any variables in the calling code, unlike a regular eval() call.
*
* @param $code
* The code to evaluate.
* @return
* A string containing the printed output of the code, followed by the returned
* output of the code.)
Non ho capito l'inserimento a Webmaster cantincoro cosa vuol dire!
Ti ringrazio tanto. Comunque non vorrei rubarti più tempo di quanto tu non ne abbia. Quindi dimmi senza problema quando devo arrendermi. Ciao.
Intendevo dire mandami il codice come l'hai inserito nella pagina all'indirizzo webmaster@cantincoro.org.
non ti preoccupare, quando posso ci lavoro...
Matteo
Se ti piace cantare, visita CANTinCORO
Matteo
Matteo ti ringrazio per il valido aiuto che mi hai dato! Ho ottimizzato lo script con l'opzione WHILE al fine di veder visualizzati tutti i record. E' davvero importante il fatto che Drupal consenta di inserire tabelle esterne all'interno del suo database e effettuare delle query sulle stesse. Per spirito di solidarietà pubblico lo script per tutti coloro che ne avessero bisogno:
$result = db_query("SELECT * FROM mia_tabella");
while ($records = mysql_fetch_array($result)){
echo "";
echo "CAMPO1: ". $records['CAMPO1'] . "";
echo "CAMPO2: ". $records['CAMPO2'] . "";
echo "CAMPOx: ". $records['CAMPOx'] . "";
}