Joomla.it Forum

Non solo Joomla... => Sviluppo => : ang3lop3luso 15 Oct 2015, 17:02:14

: Problema jQuery e connessione DB
: ang3lop3luso 15 Oct 2015, 17:02:14
Ciao a tutti,

è un po' che non scrivo sul forum di solito riesco a trovare le soluzioni senza il bisogno di postare.  ;D

Comunque premetto che ho cercato in lungo ed in largo ma non sono riuscito a trovare una soluzione e spero di non aver creato un 3d inutile quando magari la soluzione al mio problema era già stata scritta. In tal caso chiedo scusa anticipatamente.  :P

Allora descrivo il mio problema sto creando un modulo di registrazione con suggerimenti per l autocompletamento del campo. In breve ho necessità di inserire Nazione e Città e dopo tre lettere inserite in un campo text deve comparire un div con i suggerimenti presi da DB tramite chiamata jQuery.

Il tutto funziona regolarmente se effettuato al di fuori di joomla con connessioni db classiche php ma nel momento in cui effettuo la chiamata da jQuery al file.php che deve eseguire la query all'interno del modulo non funziona perchè è come se il tutto avenisse al di fuori di joomla e quindi il JFactory::getDBO() con tutto il contorno non funziona.

Copio un po di codice per capirci meglio:

html
:
<div><input type="text" name="country" id="country" placeholder="Nazione"></div>
<div id="sugg_country">uffa</div>

jquery
:
jQuery( document ).ready(function() {
   jQuery("#country").keyup(function() {
        var cerca = jQuery("#country").val();
        if (cerca.length > 2) {
            jQuery.post("../modules/mod_ewregistersecond/jquery.php",{cerca:cerca},function(data) {
                console.log("cerca: "+cerca+" risultato: "+data);
                jQuery('#sugg_country').html('');
                var results = jQuery.parseJSON(data);
                if (results == "nd") {
                    jQuery('#sugg_country').html('');
                } else {
                    jQuery('#sugg_country').append(results);   
                }
            });
        }   
   });
});

jquery.php
:
defined('_JEXEC') or die;
$Db = JFactory::getDBO();
$query = $Db->getQuery(true) ;       
$query->select('*');       
$query->from('#__appy_country_list');       
$Db->setQuery($query);
$country = $Db->loadAssocList();

if ($country) {
        foreach ($ris as $r) {
            if(ereg($_POST['cerca'],$r['COUNTRY_NAME'])){
                echo "<div>".$r['COUNTRY_NAME']."</div>";
            }
        }
}

ho copiato solo il codice necessario e voglio precisare che ho effettuato la prova ad utilizzare connessione DB classica ed il tutto funziona come dovrebbe quindi il problema sta nell'utilizzo dei metodi joomla.

attendo suggerimenti rigrazio anticipatamente. :D
: Re:Problema jQuery e connessione DB
: giovi 15 Oct 2015, 21:42:55
il problema è che utilizzi metodi statici e metodi pubblici di librerie che non hai importato.
Una volta che joomla è stato caricato, se esegui uno script php in modo asincrono hai bisogno di reimportare tutte le librerie da 0.
In questo caso quindi o richiami uno script php interno a joomla (componente, ecc...) che svolga la funzione all'interno del framework joomla o importi nel tuo script le librerie necessarie al tuo scopo
: Re:Problema jQuery e connessione DB
: ang3lop3luso 15 Oct 2015, 22:15:21
il problema è che utilizzi metodi statici e metodi pubblici di librerie che non hai importato.
Una volta che joomla è stato caricato, se esegui uno script php in modo asincrono hai bisogno di reimportare tutte le librerie da 0.
In questo caso quindi o richiami uno script php interno a joomla (componente, ecc...) che svolga la funzione all'interno del framework joomla o importi nel tuo script le librerie necessarie al tuo scopo

Grazie mille per la risposta...avevo in effetti risolto il problema creando un piccolo modulo con tutte le funzioni che mi serve richiamare e nel jQuery invece che richiamare lo script php richiamo l'url...

Il problema l ho risolto in questa maniera ed il tutto funziona a dovere però dato che siamo in discussione quali sarebbero tutte le librerie da importare per aggirare il problema delle chiamate asincrone?
: Re:Problema jQuery e connessione DB
: giovi 15 Oct 2015, 22:48:04
Dal codice sembrerebbe che usi solo quelle contenute in libraries\joomla\database

Il problema è che joomla le importa già di default o comunque c'è un metodo che consente di importare tutto il necessario solo inserendo la path "logica" come ad es. jimport ('joomla.database') che però a sua volta richiede altre librerie per essere utilizzata, quindi è difficile dirti in che modo inserire le librerie nel tuo script php. 
: Re:Problema jQuery e connessione DB
: ang3lop3luso 15 Oct 2015, 23:49:05
Dal codice sembrerebbe che usi solo quelle contenute in libraries\joomla\database

Il problema è che joomla le importa già di default o comunque c'è un metodo che consente di importare tutto il necessario solo inserendo la path "logica" come ad es. jimport ('joomla.database') che però a sua volta richiede altre librerie per essere utilizzata, quindi è difficile dirti in che modo inserire le librerie nel tuo script php.

Diciamo che per quel che serve questo script mi interessa fare solo un paio di query...ma giustamente non posso utilizzare le connessioni mysql classiche altrimenti creo una falla di sicurezza...comunque se qualcuno ha già incontrato il problema e ha un alternativa a quella trovata da me, e quindi come detto da giovi ha importato con successo le librerie necessarie, benvenga imparo un altra cosa  ;D se no ho risolto come detto prima...

grazie ancora giovi xD
: Re:Problema jQuery e connessione DB
: mmleoni 16 Oct 2015, 07:40:12
ciao ang3lop3luso,
 la falla di sicurezza la stai creando usando un entry point che non è legittimo usare in joomla!

la prima riga di "../modules/mod_ewregistersecond/jquery.php" dovrebbe essere "defined('_JEXEC') or die;" e questo per questioni di sicurezza. va da sé che se quella riga fosse presente il tuo codice non funzionerebbe.

se invece entri da dove devi, allora non hai problemi di sicurezza né di inclusione delle librerie, che sono gestiste da joomla.

in questo post rispondevo ad un utente in generale su ajax e componenti: http://forum.joomla.it/index.php/topic,254770.0.html  (http://forum.joomla.it/index.php/topic,254770.0.html)

nel tu caso il componente non c'è, o almeno non ne parli, quindi devi usare ciò che joomla mette a disposizione per chi deve usare ajax da moduli o componenti di terzi, ovvero com_ajax; vedi https://docs.joomla.org/Using_Joomla_Ajax_Interface (https://docs.joomla.org/Using_Joomla_Ajax_Interface) per maggiori dettali.

ciao,
marco