Back to top

Autore Topic: [RISOLTO] Chronoconnectivity: lanciare ricerca su record contenente un campo N  (Letto 3353 volte)

Offline johnny64

  • Nuovo arrivato
  • *
  • Post: 26
    • Mostra profilo
Salve a tutti! Complimenti agli amministratori ed ai moderatori del forum per l'alto livello e nello stesso tempo per la semplicità dei suggerimenti che fornite a noi newbies.
Ho un problema per il quale non ho trovato risposta nel forum, spero che qualcuno possa darmi una mano.
Utilizzando Chronoconnectivity per ottenere dati da un data base, ho la necessità di lanciare una ricerca esclusivamente tra i record che contengono un determinato campo il cui valore è N.
Il codice inserito nel selettore WHERE SQL del Query Related Settings di Chonoconnectivity è il seguente:

<?php
 $session =& JFactory::getSession('ricerca');
 $search_array = array('Protocollo,'Data','Ufficio','Richiesta','Pratica_Chiusa');
 $cerca = array();
 foreach ( $search_array as $search ) {
 $value = JRequest::getVar($search, '' , 'post');
 if ( $value ) {
 $cerca[] = " `$search` LIKE '%$value%' ";
 }
 }
 
 if (empty($cerca) and (JRequest::getVar('submit','no','POST')=="Trova")) {
 $session->set('cerca','0','ricerca');
 JRequest::setVar('limitstart',0,'Get');
 }
 if ( !empty($cerca) ){
 echo " WHERE ".implode(' AND ', $cerca);
 $session->set('cerca',$cerca,'ricerca');         
 }
 elseif ((JRequest::getVar('submit','no','POST')<>"Trova") and  ($session->get('cerca',0,'ricerca')<>0)) {
 $cerca=$session->get('cerca',0,'ricerca');
 echo " WHERE ".implode(' AND ', $cerca);
 }
 else
 {
 echo "";
 }
?>

La mia necessità è filtrare tutti i record in cui il campo Pratica_Chiusa contiene il valore N.
Ho provato ad inserire una select all'inizio del codice php ma ottengo un errore nel frontend del form di ricerca.
Ringrazio per i Vostri cortesi suggerimenti.
« Ultima modifica: 01 Dic 2010, 17:22:42 da johnny64 »

Offline vales

  • Global Moderator
  • Instancabile
  • *****
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
Consiglio di usare i nomi dei campi con sole lettere minuscole per evitare possibili conflitti. Dovresti quindi modificare i nomi nelle tabelle del database e nei form.

La soluzione al tuo problema è inserire nella parte fissa della query che sarà generata il filtro che interessa nel seguente modo.

Codice: [Seleziona]
<?php
 $session 
=& JFactory::getSession('ricerca');
 
$search_array = array('protocollo,'data','ufficio','richiesta','pratica_chiusa');
 $cerca = array();
 foreach ( $search_array as $search ) {
 $value = JRequest::getVar($search, '' , '
post');
 $value = str_replace("'","
\'",$value);
 if ( $value ) {
 $cerca[] = " `$search` LIKE '
%$value%' ";
 }
 }
 
 if (empty($cerca) and (JRequest::getVar('
submit','no','POST')=="Trova")) {
 $session->set('
cerca','0','ricerca');
 JRequest::setVar('
limitstart',0,'Get');
 }
 if ( !empty($cerca) ){
 echo " WHERE `pratica_chiusa`='
N' AND ".implode(' AND ', $cerca);
 $session->set('
cerca',$cerca,'ricerca');          
 }
 elseif ((JRequest::getVar('
submit','no','POST')<>"Trova") and  ($session->get('cerca',0,'ricerca')<>0)) {
 $cerca=$session->get('
cerca',0,'ricerca');
 echo " WHERE `pratica_chiusa`='
N' AND ".implode(' AND ', $cerca);
 }
 else
 {
 echo " WHERE `pratica_chiusa`='
N' ";
 }
?>

Ho inserito un'ulteriore riga per ripulire eventuali singoli apici inseriti nella ricerca ed ho già messo le lettere minuscole nei campi.

Attenzione forse per un problema con il parser del forum la riga modificata non mostra la barra rovescia prima dell'apice nella seconda stringa della funzione il codice giusto è il seguente:

$value = str_replace("'","\'",$value);
« Ultima modifica: 01 Dic 2010, 18:13:30 da vales »
Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

Offline johnny64

  • Nuovo arrivato
  • *
  • Post: 26
    • Mostra profilo
 :) GRANDE VALES!
Complimenti per la tempestività e per la completezza della soluzione proposta.
Ho provato il codice che mi hai postato ed in un primo tempo, forse per la versione di mysql che utilizzo o per un refuso di copia incolla nel codice da te postato, veniva restituito un errore. Ho provato a togliere gli apici alla dichiarazione $search all'ottava riga ed ai  campi contenenti il valore condizionante la ricerca e tutto ha funzionato a meraviglia.

<?php
$session =& JFactory::getSession('ricerca');
$search_array = array('protocollo,'data','ufficio','richiesta','pratica_chiusa');
$cerca = array();
foreach ( $search_array as $search ) {
$value = JRequest::getVar($search, '' , 'post');
$value = str_replace("'","'",$value);
if ( $value ) { $cerca[] = " $search LIKE '%$value%' ";
}
}
if ( !empty($cerca) ){
echo " WHERE pratica_chiusa='N' AND ".implode(' AND ', $cerca);
$session->set('cerca',$cerca,'ricerca');
}
elseif ((JRequest::getVar('submit','no','POST')<>"Trova") and  ($session->get('cerca',0,'ricerca')<>0)) { $cerca=$session->get('cerca',0,'ricerca');
echo " WHERE pratica_chiusa='N' AND ".implode(' AND ', $cerca);
}
else
{
echo " WHERE pratica_chiusa='N ";
}
?>

Per i newbies come me voglio segnalare che la condizione WHERE suggerita da vales può essere arricchita con ulteriori condizioni. Ad esempio se foglio fare una ricerca nei record aventi campo pratica_chiusa='N' e richiesta diverso da 'Sopralluogo' le righe di codice preposte alla funzione devono essere modificate come di seguito indicato:

echo " WHERE pratica_chiusa='N' AND richiesta NOT LIKE 'Sopralluogo' AND ".implode(' AND ', $cerca);

echo " WHERE pratica_chiusa='N AND richiesta NOT LIKE 'Sopralluogo' ";

Ancora grazie vales per il tempo e le risorse che ci dedichi!

Ho qualche altro quesito da postare ma questo è stato brillantemente risolto!
Ciao.

Offline vales

  • Global Moderator
  • Instancabile
  • *****
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
Ciao Johnny64,

a volte quegli apici danno noia, ma la forma corretta è quella. Forse dipende dalla versione di Mysql.

Metti risolto sul primo post

Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

Offline vales

  • Global Moderator
  • Instancabile
  • *****
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
Ho inserito un commento per nel post del codice perchè forse il parser del forum toglie la barra rovescia nella seconda stringa della seguente funzione

$value = str_replace("'","\'",$value);
Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

Offline johnny64

  • Nuovo arrivato
  • *
  • Post: 26
    • Mostra profilo
Ciao vales,
grazie per la precisazione. Il codice che hai postato serve a sostituire il carattere ' con il carattere \ nella stringa $value? Come mai il codice mi funziona anche senza questa modifica?
Ciao

Offline vales

  • Global Moderator
  • Instancabile
  • *****
  • Post: 8012
  • Sesso: Maschio
    • Mostra profilo
No, la barra rovescia serve a far intepretare il carattere ' come parte della stringa e non come l'inizio di una nuova stringa con conseguente errore.
Download e demo di Albo Pretorio On Line per Joomla 1.5 e Joomla 2.5 e 3
Moduli scuola On Line v1 per Joomla 3
http://valesweb.altervista.org

 



Web Design Bolzano Kreatif