Back to top

Autore Topic: componente con lettura database  (Letto 4720 volte)

Offline franklg

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
componente con lettura database
« il: 15 Nov 2006, 21:27:38 »
Solo da poco ho cominciato a lavorare con joomla. Ho costruito il mio primo componente (alquanto semplice) seguendo le istruzioni che ho trovato (guida alla creazione di componenti per mambo e joomla). Tutto bene.
Ho deciso poi di inserire nel componente una lettura di record e relativa visualizzazione su un db mysql creato da me. Sembrava che tutto funzionasse, infatti i dati dei record vengono visualizzati, soltanto che c'è un problema.
Il componente l'ho inserito nel menù principale, quando seleziono la voce relativa al mio componente, i record vengono visualizzati correttamente, ma nell'elenco del menu principale appaio delle voci di menu a cui avevo sospeso la pubblicazione (cioè non dovevano apparire).
Sbattendo la testa ho trovato qual'è l'istruzione che provova il malfunzionamento solamente che non so come risolvere il problema. Di seguito vi posto lo script.

<?php
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
require_once($mainframe->getPath('front_html'));
$db = new data_base($host, $dbase, $table, $user, $passwd);
echo immobili_view($db, $table);
@mysql_select_db('joomla') ;
@mysql_close($connect);
?>

L'istruzione incriminata è:   @mysql_select_db('joomla') ;

se la tolgo non funziona niente, i record non vengono visualizzati e escono fuori dei messaggi di errore.

NON SO COSA FARE!!!!
Qualcuno mi sa dare una dritta ??????
grazie franklg

Offline napo

  • Instancabile
  • ******
  • Post: 6532
  • Sesso: Maschio
  • NO MP TECNICI, verranno ignorati
    • Mostra profilo
Re: componente con lettura database
« Risposta #1 il: 15 Nov 2006, 22:56:31 »
<?php
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
require_once($mainframe->getPath('front_html'));
$db = new data_base($host, $dbase, $table, $user, $passwd);
echo immobili_view($db, $table);
@mysql_select_db('joomla') ;
@mysql_close($connect);
?>

Il tuo codice è strutturalmente sbagliato.
Esiste la classe database per interfacciarsi con MySQL e quella va usata.


AllOne.it Consulting: http://www.allone.it Gens Joomla, il : http://www.gensjoomla.org  [url=http://www.allone.it/jooml

Offline franklg

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
Re: componente con lettura database
« Risposta #2 il: 16 Nov 2006, 08:49:34 »
Ti ringrazio per il suggerimento, solo da poco sto cercando di sviluppare dei moduli. Proverò ad usare la classe database.
Dove posso cercare documentazione sull'uso della classe database per interfacciarsi a MySQL? Esisterà sicuramente un pezzo di codice come esempio che possa chiarirmi le idee.
Grazie Franklg

Offline napo

  • Instancabile
  • ******
  • Post: 6532
  • Sesso: Maschio
  • NO MP TECNICI, verranno ignorati
    • Mostra profilo
Re: componente con lettura database
« Risposta #3 il: 16 Nov 2006, 09:32:13 »
Ti ringrazio per il suggerimento, solo da poco sto cercando di sviluppare dei moduli. Proverò ad usare la classe database.
Dove posso cercare documentazione sull'uso della classe database per interfacciarsi a MySQL? Esisterà sicuramente un pezzo di codice come esempio che possa chiarirmi le idee.

Il manuale dello sviluppatore non è ancora pronto.
Ma un pezzo di codice può essere:

$database->setQuery("SELECT * FROM ...");
$objects = $database->loadObjectList();
foreach($objects as $obj){
    echo $obj->nomeCampo1;
    echo $obj->nomeCampo2;
    echo $obj->nomeCampo3;
    ...
}


AllOne.it Consulting: http://www.allone.it Gens Joomla, il : http://www.gensjoomla.org  [url=http://www.allone.it/jooml

Offline franklg

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
Re: componente con lettura database
« Risposta #4 il: 16 Nov 2006, 09:43:34 »
Scusami, forse è una domanda inutile, in mysql ho creato un'altro database (miodatabase) in cui ho inserito le mie tabelle, quindi le tabelle su cui lavoro non si trovano nel database di joomla. Quello che mi hai suggerito vale lo stesso indipendentemente dal db che uso? o vale solo se le mie tabelle le ho create nel db joomla?
grazie e scusami
franklg

Offline napo

  • Instancabile
  • ******
  • Post: 6532
  • Sesso: Maschio
  • NO MP TECNICI, verranno ignorati
    • Mostra profilo
Re: componente con lettura database
« Risposta #5 il: 16 Nov 2006, 09:59:27 »
Vale solo per il db di Joomla.
Ma non è un grosso problema, l'unica cosa è che devi istanziare un tuo oggetto configurato sul tuo db, non puoi più usare quello di Joomla.


AllOne.it Consulting: http://www.allone.it Gens Joomla, il : http://www.gensjoomla.org  [url=http://www.allone.it/jooml

Offline franklg

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
Re: componente con lettura database
« Risposta #6 il: 16 Nov 2006, 10:05:42 »
Scusami, il codice che ho postato infatti accede ad un db esterno a joomla ho creato un oggetto db mio, e così come l'ho scritto funziona a meno dei problemi esposti. Quindi siamo al problema di partenza.
c'è soluzione o devo perforza usare il db di joomla?
grazie

Offline napo

  • Instancabile
  • ******
  • Post: 6532
  • Sesso: Maschio
  • NO MP TECNICI, verranno ignorati
    • Mostra profilo
Re: componente con lettura database
« Risposta #7 il: 16 Nov 2006, 10:12:46 »
Ok, allora ricominciamo tutto da capo.
O usi la classe database o usi le funzioni PHP, ma non tutte e due.
Il costruttore della classe database è il seguente:

function database( $host='localhost', $user, $pass, $db='', $table_prefix='', $goOffline=true );

Come si vede possiede già TUTTI i parametri necessari alla connessione a MySQL, compreso il nome del database.
Pertanto non c'è alcun bisogno di selezionarlo e chiuderlo.

Per alte info occorrerebbe conoscere il codice del tuo componente.


AllOne.it Consulting: http://www.allone.it Gens Joomla, il : http://www.gensjoomla.org  [url=http://www.allone.it/jooml

Offline franklg

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
Re: componente con lettura database
« Risposta #8 il: 16 Nov 2006, 11:25:39 »
OK mi hai fornito ulteriori chiarimenti. Faccio delle prove e ti faccio sapere. A presto Franklg

Offline franklg

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
Re: componente con lettura database
« Risposta #9 il: 16 Nov 2006, 18:37:38 »
Oggi ho fatto un po di prove che purtroppo non hanno dato esito positivo. Sono alquanto sconsolato. Ricapitolo il problema.
In mysql ho i database mysql, joomla e un'altro database che chiamo miodb. In miodb ho una decina di tabelle, quella che mi interessa la chiamiamo tabella1. In un componente che ho creato ho la necessità di accedere alla tabella (per leggere dei record) di nome tabella1 del database miodb. come posso fare questo sfruttando la classe database di joomla? Come gli comunico che il db da usare si chiama miodb, la tabella tabella1, l'utente utente1, la password passwd ecc., con la funzione database ($host=localhost, $user=pippo,...  ecc) ?
grazie franklg

Offline napo

  • Instancabile
  • ******
  • Post: 6532
  • Sesso: Maschio
  • NO MP TECNICI, verranno ignorati
    • Mostra profilo
Re: componente con lettura database
« Risposta #10 il: 16 Nov 2006, 18:42:11 »
Che prove hai fatto?
Che errori ti ha dato?


AllOne.it Consulting: http://www.allone.it Gens Joomla, il : http://www.gensjoomla.org  [url=http://www.allone.it/jooml

Offline franklg

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
Re: componente con lettura database
« Risposta #11 il: 16 Nov 2006, 19:11:22 »
per es. ho provato a fare:

$host = "localhost";
$user = "root";
$passwd = "";
$dbase = "immobiliare";
$tabella= "immobili";

$db = new database($host, $user, $passwd, $dbase, "", true );

$database->setQuery("SELECT * FROM immobili");
$righe = $database->loadObjectList();
foreach($righe as $riga){
    echo $riga->cod_immobile;
    echo $riga->descr_immobile;
}
ed ho questo errore:
Warning: Invalid argument supplied for foreach() in c:\easyphp\www\joomla\components\com_immobili\immobili.php

Offline napo

  • Instancabile
  • ******
  • Post: 6532
  • Sesso: Maschio
  • NO MP TECNICI, verranno ignorati
    • Mostra profilo
Re: componente con lettura database
« Risposta #12 il: 16 Nov 2006, 19:20:56 »
$db = new database($host, $user, $passwd, $dbase, "", true );

$database->setQuery("SELECT * FROM immobili");
$righe = $database->loadObjectList();
foreach($righe as $riga){
    echo $riga->cod_immobile;
    echo $riga->descr_immobile;
}

ed ho questo errore:
Warning: Invalid argument supplied for foreach() in c:\easyphp\www\joomla\components\com_immobili\immobili.php

P.S.: visto che la variabile interna di Joomla si chiama già $database, usa un altro nome per sicurezza.

L'errore è dato dal fatto che $righe=null.
Fai SEMPRE il test:

$database->setQuery("SELECT * FROM immobili");
$righe = $database->loadObjectList();
if($righe != null){
    foreach($righe as $riga){
        echo $riga->cod_immobile;
        echo $riga->descr_immobile;
    }
}


Per sapere il motivo dell'errore, fai queste stampe DOPO:
$righe = $database->loadObjectList();

Scrivi:
echo $database->getErrorNum() . ": " . $database->getErrorMsg();
oppure
echo $database->stderr(true);


AllOne.it Consulting: http://www.allone.it Gens Joomla, il : http://www.gensjoomla.org  [url=http://www.allone.it/jooml

Offline franklg

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
Re: componente con lettura database
« Risposta #13 il: 16 Nov 2006, 19:31:54 »
l'errore è:
1146: La tabella \'joomla.immobili\' non esiste SQL=SELECT * FROM immobili

La tabella immobili esiste nel database immobiliare

Offline napo

  • Instancabile
  • ******
  • Post: 6532
  • Sesso: Maschio
  • NO MP TECNICI, verranno ignorati
    • Mostra profilo
Re: componente con lettura database
« Risposta #14 il: 16 Nov 2006, 19:36:33 »
Aspè, ho trovato l'errore!!

$db = new database($host, $user, $passwd, $dbase, "", true );

$database->setQuery("SELECT * FROM immobili");


Perchè istanzi l'oggetto $db e puoi usi $database?
Devi usare l'oggetto $db: $db->setQuery(), ...


AllOne.it Consulting: http://www.allone.it Gens Joomla, il : http://www.gensjoomla.org  [url=http://www.allone.it/jooml

Offline franklg

  • Esploratore
  • **
  • Post: 63
    • Mostra profilo
Re: componente con lettura database
« Risposta #15 il: 16 Nov 2006, 19:48:32 »
é vero, l'errore è quello. Ora funziona.
Scusami ma dopo tanto provare e riprovare (non conoscendo ancora bene gli oggetti, classi, ecc. di joomla) ho perso la bussola, commettendo questo errore che è abbastanza banale.
Ti ringrazio per l'aiuto che è stato, non solo provvidenziale ma fondamentale perchè mi ha fatto capire un po come funziona la classe database di joomla. Certo sarebbe auspicabile che qualche esperto (come te) metta a disposizione un po di documentazione riguardo questi argomenti; altri oggetti sconosciuti sono per es. la classe mosmenu, mosparameters ecc.
Saluti, alla prossima
Franklg

Offline napo

  • Instancabile
  • ******
  • Post: 6532
  • Sesso: Maschio
  • NO MP TECNICI, verranno ignorati
    • Mostra profilo
Re: componente con lettura database
« Risposta #16 il: 16 Nov 2006, 20:44:17 »
Certo sarebbe auspicabile che qualche esperto (come te) metta a disposizione un po di documentazione riguardo questi argomenti;

Infatti cosa c'è scritto nella mia firma?  8)


AllOne.it Consulting: http://www.allone.it Gens Joomla, il : http://www.gensjoomla.org  [url=http://www.allone.it/jooml

 



Web Design Bolzano Kreatif