Joomla.it Forum

Non solo Joomla... => Database => : ms91 22 Dec 2009, 13:00:23

: collegamento a tabella database [RISOLTO]
: ms91 22 Dec 2009, 13:00:23
Ciao a tutti!
Non riesco a stabilire una connessione tra uno script di un componente in  php e il proprio database, in modo che lo script possa estrarre il valore di un campo di una tabella e effettuare un controllo su di esso. come posso fare ?
grazie!
per il db uso easyphp
: Re:collegamento a tabella database
: MarcoJ 22 Dec 2009, 14:08:48
Ciao ms91,
se ho ben capito vuoi raggiungere un tuo db attraverso un tuo programma in php, integrando il tutto ovviamente in joomla.
E' questo ?
Prima di tutto il db e' lo stesso dell'applicazione joomla oppure hai un ulteriore db esterno a questa ?

Accedere ad un db non è un problema, ma occorre prima di tutto un componente che ti permetta di gestire il codice Php.
Io utilizzo sempre JUMI che mi è sempre andato bene.
Poi con questo scrivo il codice che voglio, compreso quindi la connessione al mio db e tutte le interrogazioni che voglio.
Estraggo quindi i dati con i quali personalizzo delle pagine.
Inutile dire che per fare questo occorre un minimo di conoscenza di Mysql e qualcosa di piu' di Php.

Se hai queste capacità il gioco è velocissimo.

Ciao
: Re:collegamento a tabella database
: ms91 22 Dec 2009, 15:54:51
Allora, il programma in php è di un componente e lo vorrei modificare in modo che prima di effettuare l'operazione che deve svolgere effettui un controllo su un campo di una tabella, la tabella è nello stesso database del componente, ne so qualcosa di php e mysql ma sto imparando, io ho pensato di scrivere direttamente sul codice l'istruzione mysql_connect... ma non funziona. Non ho mai usato un componente, ma scrivendp il codice direttamente e provandolo sulla pagina non dovrebbe funzionare lo stesso?
Grazie per l'aiuto! ;)
: Re:collegamento a tabella database
: MarcoJ 23 Dec 2009, 09:39:13
Ciao,
la possibilità che ti funzioni dipende da come è scritto il codice che vuoi modificare e quindi devi fare di questo un minimo di analisi.
Tipicamente quando ci si connette ad un db si scrive un codice del tipo:

<?PHP
// Esegue un accesso al database, restituendo nella variabile $database lo stato dell'operazione

          $hostname = "localhost";
          $dbName   = "tuo_db";
          $username = "tua_username";
          $password = "tua_password";
          $database = mysql_Connect($hostname,$username,$password);
          $db_selected=mysql_select_db ($dbName,$database);

if (!$db_selected) {
    die('Impossibile connettersi. Errore : ' . mysql_error());
}
?>

Questo per connettersi, ma se nel punto del codice dove vuoi fare l'inserimento del tuo codice personalizzato la connessione è già aperta, allora evidentemente non hai bisogno di fare nulla, ma puoi passare direttamente ad esegire le tue query, con istruzioni del tipo:

<?PHP
$query="SELECT * FROM tua_tabella WHERE tue_condizioni;                       
$valore=mysql_query($query,$database);
if (!$valore1)
   echo "Errore nell'esecuzione della query";
else
   $rows=mysql_Num_Rows($valore);  // legge il numero delle righe                 
?>

Peraltro se mi permetti vorrei consigliarti di non andare troppo a modificare componenti o moduli standard, perchè rischi di perdere in compatibilità con gli aggiornamenti di joola o del componente oppure rischi comportamenti inattesi.
Se quello che devi fare ti è assolutamente necessario, fallo ma con intelligenza.

Ciao e buon lavoro
: Re:collegamento a tabella database
: mmleoni 28 Dec 2009, 22:12:35
veramente se sei all'interno di un componente, dovresti conformarti alle regole di coding di Joomla!

:
$db =& JFactory::getDBO();
$db->setQuery( 'SELECT A_field FROM #__!table! WHERE A_condition' );
// per singolo record
$result = $db->loadResult();
// per un record set
$results = $db->loadObjectList();

ovvero usa il metodo getDBO() per ottenere una istanza della classe JDatabase [http://docs.joomla.org/JDatabase], setQuery() per passare la query e poi il metodo opportuno per recuperare i dati.

non ti preoccupare di connessione o selezione db poichè vi pensa il framework

ciao,
marco
: Re:collegamento a tabella database
: ms91 29 Dec 2009, 10:06:33
a ok grazie!
un'altra cosa, esiste in joomla o si puo creare uno script che identifica chi lo sta eseguendo?
: Re:collegamento a tabella database
: mmleoni 29 Dec 2009, 10:24:15
se intendi quale utente stia vedendo la pagina (con ciò che fa la pagina stessa: modifiche, inserimenti et cetera) allora
:
$user =& JFactory::getUser();
per i dettagli vedi http://docs.joomla.org/JFactory/getUser (http://docs.joomla.org/JFactory/getUser)

ciao,
marco
: Re:collegamento a tabella database
: ms91 30 Dec 2009, 17:51:00
non mi funziona!
:
$user =& JFactory::getUser();
$db =& JFactory::getDBO();
$db->setQuery( 'SELECT A_field FROM jos_users WHERE username== $user' );
// per singolo record
$result = $db->loadResult();
echo $result;
// per un record set
$results = $db->loadObjectList();
echo $results [1];
:(
: Re:collegamento a tabella database
: mmleoni 30 Dec 2009, 18:06:29
$user è un oggetto, non uno scalare, la query era un esempio, non codice effettivo A_field non esiste, semmai usa *, l'operatore di confronto è =, una stringa in sql deve essere tra ', in php una stringa tra ' non può essere interpolata...

:
db->setQuery( "SELECT * FROM #__users WHERE username = '{$user}->username'" );
...
print_r(results[1]); // echo restituisce 'object'

scusa la domanda brutale, ma sei sicuro di saper programmare? ;)

ciao (e non scoraggiarti :) ),
marco
: Re:collegamento a tabella database
: ms91 30 Dec 2009, 18:37:47
ok risolto :)
sto iniziando ora con php!
comunque grazie infinite! ;)
: Re:collegamento a tabella database [RISOLTO]
: ms91 30 Dec 2009, 18:41:10
in effetti ero convinto che A_field fosse un istruzione! :-[ :-[
: Re:collegamento a tabella database [RISOLTO]
: mmleoni 30 Dec 2009, 18:58:40
visto che sei all'inizio ti faccio notare che la classe in $user contiene già tutte le informazioni fornite dalla query ;)

leggi quanto scritto al link http://docs.joomla.org/JFactory/getUser , è una buona guida.