Joomla.it Forum
Non solo Joomla... => Database => : 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
-
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
-
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! ;)
-
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
-
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
-
a ok grazie!
un'altra cosa, esiste in joomla o si puo creare uno script che identifica chi lo sta eseguendo?
-
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
-
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];
:(
-
$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
-
ok risolto :)
sto iniziando ora con php!
comunque grazie infinite! ;)
-
in effetti ero convinto che A_field fosse un istruzione! :-[ :-[
-
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.