• ModSenior

    Se stampi la valore della query cosa ti stampa?
    Qual'è il suo testo e quello che invece vorresti ottenere?


  • User

    in pratica con la query voglio visualizzare tutti gli immobili nel db che soddisfano una serie di condizioni.

    In pratica ho due tabelle, in una ci sono tutti gli immobili, nell'altra ci sono tutte le richieste degli utenti che cercano un immobile.

    Nella pagina di visualizzazione delle richieste ho un tasto "incroci", schiacciandolo visualizzo tutti gli immobili che soddisfano le condizioni che ho inserito.

    Esempio pratico, ho una richiesta di un cliente che cerca un appartamento a Pisa al piano terra e il cui prezzo non sia superiore a 300000 ?.

    Quando schiaccio il tasto incroci mi compare una tabella con tutti gli immobili che soddisfano le condizioni inserite, in questo caso che si trovi a Pisa, al piano terra e con prezzo inferiore a 300000 ?.

    Riesco a inserire e far funzionare tutte le condizioni tranne che quella che riguarda il prezzo, quindi probabilmente c'è un errore nella formulazione della condizione, ecco il codice:

    [php]if($richieste['Budget_disponibile_a']!=''){
    $queryimmobili.="AND ( ((Richiesta) <= ('".$richieste['Budget_disponibile_a']."')) OR ((ultimo_prezzo) <= ('".$richieste['Budget_disponibile_a']."')) ) ";}[/php]

    In pratica la cifra che il cliente è disposto a spendere (che sarebbe $richieste['Budget_disponibile_a']) deve essere superiore al prezzo richiesto per l'immobile (Richiesta) e all'ultimo prezzo fatto dal proprietario (ultimo_prezzo).

    Solo che questa condizione nella maniera in cui io l'ho impostata viene totalmente ignorata, e quindi mi visualizza anche i record che non la soddisfano


  • User

    Ciao
    così a occhio mi viene il sospetto che stai comparando un valore numerico con una stringa.
    prova a togliere le virgolette nella query, tipo:

    ...(Richiesta) <= ".$richieste['Budget_disponibile_a']."...

    ricordati di sanitizzare quell'input se già non l'hai fatto 🙂


  • User

    @mr_valdemar said:

    Ciao
    così a occhio mi viene il sospetto che stai comparando un valore numerico con una stringa.
    prova a togliere le virgolette nella query, tipo:

    ...(Richiesta) <= ".$richieste['Budget_disponibile_a']."...

    ricordati di sanitizzare quell'input se già non l'hai fatto 🙂

    provato ma non va.. 😞


  • User Attivo

    Cosa vuol dire che non va? Ti dà qualche errore?


  • User

    @matmattia said:

    Cosa vuol dire che non va? Ti dà qualche errore?

    No, non mi da nessun errore, semplicemente la condizione viene ignorata, il budget è di 180000 ? ma continua a visualizzarmi tutti gli immobili con una richiesta superiore..

    Posto tutta la query:

    [PHP]$queryrichieste = "SELECT * FROM richieste WHERE id='".$_GET['id']."'";
    $query_limitrichieste = mysql_query($queryrichieste) or die(mysql_error());
    $richieste = mysql_fetch_array($query_limitrichieste);

        $queryimmobili = "SELECT * FROM beni WHERE";
        
        $query2info = 0;
              if ($richieste['Zona']!='') {
                  $queryimmobili.= " ( Localita LIKE '%".$richieste['Zona']."%' OR Comune LIKE '%".$richieste['Zona']."%'";
                $query2info++;
              }
              if ($richieste['Zona2']) {
                 if ($query2info) {
                      $queryimmobili.= " OR Localita LIKE '%".$richieste['Zona2']."%' OR Comune LIKE '%".$richieste['Zona2']."%'";
                    $query2info++;
                 }
                 else 
                    $queryimmobili.= " ( Localita LIKE '%".$richieste['Zona2']."%' OR Comune LIKE '%".$richieste['Zona2']."%'";
                    
              }
              
              if ($richieste['Zona3']) {
                 if ($query2info) {
                      $queryimmobili.= " OR Localita LIKE '%".$richieste['Zona3']."%' OR Comune LIKE '%".$richieste['Zona3']."%'";
                    $query2info++;
                 }
                 else 
                    $queryimmobili.= " ( Localita LIKE '%".$richieste['Zona3']."%' OR Comune LIKE '%".$richieste['Zona3']."%'";
                    
              }
              
              if ($richieste['Zona4']) {
                 if ($query2info) {
                      $queryimmobili.= " OR Localita LIKE '%".$richieste['Zona4']."%' OR Comune LIKE '%".$richieste['Zona4']."%'";
                    $query2info++;
                 }
                 else 
                    $queryimmobili.= " ( Localita LIKE '%".$richieste['Zona4']."%' OR Comune LIKE '%".$richieste['Zona4']."%'";
                    
              }
              
              if ($richieste['Zona5']) {
                 if ($query2info)
                      $queryimmobili.= " OR Localita LIKE '%".$richieste['Zona5']."%' OR Comune LIKE '%".$richieste['Zona5']."%'";
                 else 
                    $queryimmobili.= " Localita LIKE '%".$richieste['Zona5']."%' OR Comune LIKE '%".$richieste['Zona5']."%'";
              }            
              if ($query2info)  $queryimmobili.= " ) AND ";
        
        
        $queryimmobili.="((Tipologia = '".$richieste['Tipologia']."') OR (Tipologia = '".$richieste['Tipologia2']."') OR (Tipologia = '".$richieste['Tipologia3']."')) ";
        $queryimmobili.="AND Destinazione='".$richieste['Tipo_contratto']."' ";
        if($richieste['giardino']!=''){$queryimmobili.="AND Giardino != '' ";}
        $queryimmobili.="AND camere='".$richieste['Camere']."' ";
        
        if($richieste['Budget_disponibile_a']!=''){$queryimmobili.="AND ( (Richiesta <= ".$richieste['Budget_disponibile_a'].") OR (ultimo_prezzo <= ".$richieste['Budget_disponibile_a'].") ) ";}
        
        if($richieste['garage']!=''){$queryimmobili.="AND Garage != '' ";}
        $queryimmobili.="AND piano='".$richieste['piano']."' ";
    
        
        $queryresults=mysql_query($queryimmobili);
    
        $i=0;
        while($immobili=mysql_fetch_assoc($queryresults)){
        $i=$i+1;
        
        $query_limit = mysql_query($queryimmobili) or die(mysql_error());[/PHP]
    

    Si comporta bene con tutte le condizioni tranne che con quella che si riferisce al budget...


  • User Attivo

    Se metti:
    [php]echo $queryimmobili;[/php]

    subito prima di:
    [php]$queryresults=mysql_query($queryimmobili);[/php]

    Cosa stampa?


  • User

    @matmattia said:

    Se metti:
    [php]echo $queryimmobili;[/php]subito prima di:
    [php]$queryresults=mysql_query($queryimmobili);[/php]Cosa stampa?

    Questo:

    SELECT * FROM beni WHERE ( Localita LIKE '%Navacchio%' OR Comune LIKE '%Navacchio%' OR Localita LIKE '%S. Frediano %' OR Comune LIKE '%S. Frediano %' OR Localita LIKE '%Cascina%' OR Comune LIKE '%Cascina%' OR Localita LIKE '% Fornacette %' OR Comune LIKE '% Fornacette %' ) AND ((Tipologia = 'TERRATETTO') OR (Tipologia = 'APPARTAMENTO') OR (Tipologia = '')) AND Destinazione='Vendita' AND camere='2' AND ( (Richiesta <= 180000.00) OR (ultimo_prezzo <= 180000.00) ) AND Garage != '' AND piano=''

    Solo che poi appaiono risultati come:

    N.

         	**RIFERIMENTO**
    
     		**LOCALITÀ**
    
     		**COMUNE**
    
     		**CAMERE**
    
     		**MQ. NETTI**
    
     		**RICHIESTA**
    
     		                       	**1**         	IC8059             Cascina             Cascina             2             85             277000.00             
    

    **
    ** Tutto ok tranne la richiesta che come vedi non soddisfa la query essendo superiore a 180000


  • User Attivo

    Prova a modificare questa riga:
    [php]if($richieste['Budget_disponibile_a']!=''){$queryimmobili.="AND ( (Richiesta <= ".$richieste['Budget_disponibile_a'].") OR (ultimo_prezzo <= ".$richieste['Budget_disponibile_a'].") ) ";}[/php]

    In questo modo:
    [php]if($richieste['Budget_disponibile_a']!=''){$queryimmobili.="AND ( (Richiesta <= ".$richieste['Budget_disponibile_a'].") AND (ultimo_prezzo <= ".$richieste['Budget_disponibile_a'].") ) ";}[/php]

    Praticamente quella riga che esce che non dovrebbe uscire avrà "ultimo_prezzo" minore di 180000.


  • User

    @matmattia said:

    Prova a modificare questa riga:
    [php]if($richieste['Budget_disponibile_a']!=''){$queryimmobili.="AND ( (Richiesta <= ".$richieste['Budget_disponibile_a'].") OR (ultimo_prezzo <= ".$richieste['Budget_disponibile_a'].") ) ";}[/php]In questo modo:
    [php]if($richieste['Budget_disponibile_a']!=''){$queryimmobili.="AND ( (Richiesta <= ".$richieste['Budget_disponibile_a'].") AND (ultimo_prezzo <= ".$richieste['Budget_disponibile_a'].") ) ";}[/php]Praticamente quella riga che esce che non dovrebbe uscire avrà "ultimo_prezzo" minore di 180000.

    Fungeeeeee!!
    Però adesso ho capito forse qual è il problema...
    Il campo ultimo_prezzo non sempre viene riempito, ma ho l'impressione (devo controllare) che nel db venga inserito come valore predefinito 0,00.
    In questo modo ultimo_prezzo è sempre <= al budget e per questo la condizione viene rispettata e mi mostra anche i risultati che non dovrebbero esserci.

    Mettendo AND al posto di OR come mi hai fatto fare entrambe le condizioni devono essere soddisfatte e quindi funziona correttamente se ultimo_prezzo è zero. Ma se per esempio Richiesta fosse superiore al budget ma ultimo_prezzo inferiore in questo modo il record non verrebbe visualizzato.

    In pratica devo togliere il valore predefinito dal db e andare a cancellare tutti quei valori di ultimo_prezzo uguali a 0,00.

    Grazie mille, mi hai illuminato facendomi avere questo flash!


  • User Attivo

    Allora puoi modificare quella riga in questo modo:
    [php]if($richieste['Budget_disponibile_a']!=''){$queryimmobili.="AND (Richiesta <= ".$richieste['Budget_disponibile_a']." OR (ultimo_prezzo <= ".$richieste['Budget_disponibile_a']." AND ultimo_prezzo>0)) ";}[/php]


  • User

    @matmattia said:

    Allora puoi modificare quella riga in questo modo:
    [php]if($richieste['Budget_disponibile_a']!=''){$queryimmobili.="AND (Richiesta <= ".$richieste['Budget_disponibile_a']." OR (ultimo_prezzo <= ".$richieste['Budget_disponibile_a']." AND ultimo_prezzo>0)) ";}[/php]

    Perfetto, adesso va benissimo.
    Grazie mille, è da ieri che ci sbatto la testa e non mi rendevo conto che la soluzione l'avevo sotto il naso...bastava inserire AND ultimo_prezzo>0..
    Ti ringrazio molto.