correggere la select

Ciao ho un form di ricerca che funziona con questo codice:

public function ricercaAction()
   {


       $clienti = new Clienti();
       $form = new RicercaForm();
       $this->view->form = $form;

       $sql = "SELECT *  FROM clienti WHERE idcliente>0 ";

       if ($this->getRequest()->isPost()) {
       $formData  = $this->_request->getPost();
           if ($form->isValid($formData)) {
           
              
               if(isset($formData['Nome'])){

                   $barcode=$formData['Nome'];

                   $sql .= " AND Nome LIKE '%$Nome%'";

               }
               if(isset($formData['Cognome'])){

                   $barcode=$formData['Cognome'];

                   $sql .= " AND Cognome LIKE '%$Cognome%'";

               }
               
       

                $clienti = new Clienti();

                 $data  =  $clienti->fetchAll( $clienti->select($sql));

                 $this->view->data = $data->toArray();
           }
       }
   }

in realta quando inserisco un nome o un cognome ottengo tutti i record del db evidentemente la select non gli piace come è scritta come la dovrei correggere per andare con zend?? ho visto la documentazione ma non mi riesce correggerla http://framework.zend.com/manual/en/zend.db.select.html

vi ringrazio se mi date una mano a correggerla

inviato 6 anni fa
surferbloggy
X 0 X

Perchè non usi per l'appunto Zend_Db_Select?

Parti con il chiamarla:

     $db = Zend_Db::factory( ...options... );
     $sql = $db->select()
                       ->from('clienti')
                       ->where('idcliente > 0');

Poi mano a mano che procedi aggiungi le condizioni where con il metodo dell'oggetto.

Infine esegui la query come hai fatto.

Ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X

grazie. sto facendo così ma mi restituisce tutti i record lo stesso come se la query fosse senza filtri ho provato con isset o così $formData['Nome']!=""

cosa sbaglio??

public function ricercaAction()
   {

       $db = Zend_Registry::get('db');

       $clienti = new Clienti();
       $form = new RicercaForm();
       $this->view->form = $form;

//       $sql = "SELECT *  FROM clienti WHERE idcliente>0 ";

       $sql = $db->select()
                 ->from('clienti')
                 ->where('idcliente > 12');



       if ($this->getRequest()->isPost()) {
       $formData  = $this->_request->getPost();
           if ($form->isValid($formData)) {
           
               if($formData['barcode']!=""){

                   $barcode=$formData['barcode'];

                   $sql .= " AND barcode LIKE '%$barcode%'";
//                   $sql .= " AND barcode = '$barcode'";

               }
               if($formData['Nome']!=""){

                   $Nome=$formData['Nome'];

                   $sql .= " AND Nome LIKE '%$Nome%'";

               }
               if($formData['Cognome']!=""){

                   $Cognome=$formData['Cognome'];

                   $sql .= " AND Cognome LIKE '%$Cognome%'";
//                   $sql .= " AND Cognome = '$Cognome'";

               }
               if($formData['email']!=""){

                   $email=$formData['email'];

                   $sql .= " AND email LIKE '%$email%'";

               }
               if($formData['citta']!=""){

                   $citta=$formData['citta'];

                   $sql .= " AND citta LIKE '%$citta%'";

               }
               if($formData['provincia']!=""){

                   $provincia=$formData['provincia'];

                   $sql .= " AND provincia LIKE '%$provincia%'";

               }

                $clienti = new Clienti();

                 $data  =  $clienti->fetchAll( $clienti->select($sql));

                 $this->view->data = $data->toArray();
           }
       }
risposto 6 anni fa
surferbloggy
X 0 X

Fa una cosa, prendi l'output della query che ti sei creato. Studiala.

Per me hai un codice un po' confuso che non facilita la risoluzione del problema...

Buona notte...

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Ciao,

prova a gestire la variabile come un oggetto e non un array associativo, cioè facendo:

$formData -> Nome

$formData essendo un'istanza di una classe, immagino debba essere usata così.

Ciao

Luca

risposto 5 anni fa
Luca450Mhz
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda