• 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.