[PHP & MySQL]Query con funzioni matematiche

lughino

Nuovo Utente
23 Mar 2010
24
0
0
Ciao a tutti,
ho un piccolo problema di comprensione...
ho questa form che contiene questa select:
Codice:
Prezzo<select name="prez"> <option value="">Qualsiasi</option> 
<option value="fino100000">Fino a 100.000€</option> 
<option value="+100000">Da 100.000€ a 200.000€</option> 
<option value="oltre200000">Oltre 200.000€</option> 
</select><br />
Per filtrare i dati dal db del campo prezzo avevo fatto questo:
Codice:
$query_ricerca= "SELECT Immobili.Tipo, Immobili.Comune, Immobili.Acquisto, Immobili.Prezzo, Immobili.Data_ins, Immobili.Descrizione, Immobili.ID, Immagini.Id_Immobili, Immagini.Percorso, Immagini.Flag FROM Immobili JOIN Immagini ON Immobili.ID = Immagini.Id_Immobili ";

if($_GET['tipo'] != ''){ 
        $query_ricerca .= 'WHERE Immobili.Tipo LIKE %'. $tipo .'% AND '; 
} 
if($_GET['c'] != ''){ 
        $query_ricerca .= 'WHERE Immobili.Acquisto LIKE %'.$_GET['c'].'% AND '; 
} 
if($_GET['prez'] != ''){ 
    if($_GET['prez'] == "fino100000") { 
        $query_ricerca .= 'WHERE Immobili.Prezzo <= 100000 AND '; 
    } 
    elseif($_GET['prez'] == "+100000") { 
        $query_ricerca .= 'WHERE Immobili.Prezzo > 100000 Immobili.Prezzo AND >= 200000 AND '; 
    } 
} 
$sql = substr($query_ricerca,0,strlen($query_ricerca)-4);
Solo che ovviamente non funziona.
Mi restituisce un errore di sintassi sql.
Volevo chiedere, come faccio a filtrare i dati secondo un range di prezzi?
Poi mi è sorto anche un altro dubbio, se nella form non seleziono nulla dovrei visualizzare tutto, ma non mi visualizza nulla, nemmeno un errore.
Non so come fare per omettere
Codice:
$sql = substr($query_ricerca,0,strlen($query_ricerca)-4);
se non seleziono nulla.
Grazie a tutti
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
intanto ti nom mi sembra che il concatenemento che fai sia giusto
esempio: se $_GET['tipo'] e $_GET['c'] sono entrambi pieni ti risulta,

$query_ricerca= "SELECT ......... WHERE Immobili.Tipo..... AND WHERE Immobili.Acquisto...AND...SELECT ......... WHERE Immobili.Tipo..... AND WHERE Immobili.Acquisto...AND..."
mentre la query corretta sarebbe
$query_ricerca= "SELECT ......... WHERE Immobili.Tipo..... AND Immobili.Acquisto..."
se concateni anche il prezzo la query diventa addirittura tripla di select (per questo credo che ti dia errore di sintassi sql)

secondo me dovresti cambiare tutto la logica


p.s.
ci penso un momento, poi eventualmente ti so dire (ma forse non prima di pasqua)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao,
sono arrivato prima

PHP:
<?php
$query_ricerca= "SELECT Immobili.Tipo, Immobili.Comune, Immobili.Acquisto, Immobili.Prezzo, Immobili.Data_ins, Immobili.Descrizione, Immobili.ID, Immagini.Id_Immobili, Immagini.Percorso, Immagini.Flag FROM Immobili JOIN Immagini ON Immobili.ID = Immagini.Id_Immobili ";

//metti vuota la variabile
$were="";
if($_GET['tipo'] != ""){ 
	$were= "WHERE Immobili.Tipo LIKE %'". $_GET['tipo']."'% "; 
} //fine if tipo
if($_GET['c'] != ''){
	if($were ==""){
		$were= "WHERE Immobili.Acquisto LIKE %'".$_GET['c']."'%";
	}else{
		$were .= " AND  Immobili.Acquisto LIKE %'".$_GET['c']."'%";
	}//fine if-else were vuota
} // fine if acquisto
if($_GET['prez'] == "fino100000") {
	if($were ==""){
        $were= "WHERE Immobili.Prezzo <= 100000 ";
	}else{
		$were .= " AND Immobili.Prezzo <= 100000 ";
	}
}elseif($_GET['prez'] == "+100000") {
	if($were ==""){
		//guarda che hai messo entrambi con segno maggiore se le vuoi compresi
        $were= "WHERE Immobili.Prezzo > 100000 AND Immobili.Prezzo <=200000";
	}else{
		$were .= " AND Immobili.Prezzo > 100000  AND Immobili.Prezzo <=200000";
	}
}elseif($_GET['prez'] == "oltre200000"){
	if($were ==""){
		//guarda che hai messo entrambi con segno maggiore se le vuoi compresi
        $were= "WHERE Immobili.Prezzo > 200000";
	}else{
		$were .= " AND Immobili.Prezzo > 200000";
	}
}//fine selezione prezzi
//a questo punto generi la query stringa
//neza bisogno di altro (la manda a capo per questione di visibilità)
$query_ricerca = "SELECT Immobili.Tipo, Immobili.Comune, Immobili.Acquisto, Immobili.Prezzo, Immobili.Data_ins,
 Immobili.Descrizione, Immobili.ID, Immagini.Id_Immobili, Immagini.Percorso, Immagini.Flag FROM Immobili 
 JOIN Immagini ON Immobili.ID = Immagini.Id_Immobili ".$were; 
//prima di usare il db verifica la query con un bel var_dump
// per vedere se viene fuori come vuoi tu
var_dump($query_ricerca);//poi lo togli
?>

prova, al massimo non funzia come la tua
 
Ultima modifica di un moderatore:

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
la soluzione proposta da borgo non dovrebbe fare una grinza, ti consiglio soltanto, per sicurezza, di filtrare i dati inviati tramite GET
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
ti consiglio soltanto, per sicurezza, di filtrare i dati inviati tramite GET
saggio consiglio, l'unica cosa che non capisco è l'uso dei get, i dati non vengono da un form? e se si perche non post?
(comunque filtrati)
 

lughino

Nuovo Utente
23 Mar 2010
24
0
0
Ciao, e grazie mille per le risposte.
Volevo solo fare una domanda riguardo i filtrare i dati:
io uso questo:
Codice:
if (get_magic_quotes_gpc()) 
{ 
    $tipo = stripslashes($tipo); 
} 
$tipo = mysql_real_escape_string($tipo);

è giusto oppure devo fare l'inverso?
Codice:
if (!get_magic_quote_gpc())
{
  $tipo = addslashes($tipo);
}

Ci sono altri filtri che posso applicare?
EDIT: Ho provato a non selezionare nessun campo e non mi restituisce alcun record..
Sapete come mai?

Grazie ciao
 
Ultima modifica:

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
24
Roma
alessandro1997.netsons.org
Io solitamente, al momento dell'inserimento dei dati, mi avvalgo della funzione addslashes() così:
PHP:
<?php
$var = "Questa variabile sarebbe un po' pericolosa.";

if(!get_magic_quotes_gpc())
	$var = addslashes($var);

echo $var;
?>
E' inutile chiamare anche mysql_real_escape_string(), dopo...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
alex (speedy gonzales) mi ha preceduto, però ti richedo una cosa:
da dove provengano tutti quei get?
nella pagina che chiama quella che hai postato hai qualcosa del tipo
<a href="pagina.php?tipo=pinco&c=pallo&prez=caio">xyz</a>
anche perchè non mi sembra, tu nel primo post parli di select, quindi devi avere un form (o qualche js che lo simula), allora metti action="post" e preleva i dati con $_POST è più sicuro

dimenticavo per alex:
se scrivessi $var = "Questa variabile sarebbe un pò pericolosa."; ci sarebbero meno pericoli
 
Ultima modifica:

lughino

Nuovo Utente
23 Mar 2010
24
0
0
Ciao,
in effetti chiedo scusa, ma non ho postato la form iniziale (che tra l'altro è una prova, perchè ci vorrei inserire un js):
Codice:
<form action="risultato.php" method="get">
Ricerca immobile:<br />
Tipo      <select name="tipo"> <option value="">Selezionane uno:
</option>
<option value="Appartamento">Appartamento</option>
<option value="Villa">Villa</option>
<option value="Cascina">Cascina</option>
<option value="Capannone">Capannone</option>
</select><br />
Contratto<select name="c"> <option value="">Qualsiasi</option>
<option value="Vendita">Vendita</option>
<option value="Affitto">Affitto</option>
</select><br />
Prezzo<select name="p"> <option value="">Qualsiasi</option>
<option value="fino100000">Fino a 100.000€</option>
<option value="+100000">Da 100.000€ a 200.000€</option>
<option value="oltre200000">Oltre 200.000€</option>
</select><br />
Superficie<select name="sup"> <option value="">Qualsiasi</option>
<option value="50">Fino a 50 mq</option>
<option value="80">Da 50 a 80 mq</option>
<option value="150">Da 80 a 150 mq</option>
<option value="+150">Oltre 150 mq</option>
</select><br />
Camere<select name="cam"> <option value="">Qualsiasi</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="+3">Più di 3</option>
</select><br />
Terrazza<select name="t"> <option value="">Qualsiasi</option>
<option value="tsi">Si</option>
<option value="tno">No</option>
</select><br />
Giardino<select name="t"> <option value="">Qualsiasi</option>
<option value="500">Fino a 500 mq</option>
<option value="+500">Oltre 500 mq</option>
</select><br />
<input type="hidden" name="Inviato" value="true" /> 
<input type="submit" name="Invia" value="Invia!">
</form>
in realtà sono legato al GET poichè ho anche questa funzione per la visualizzazione delle pagine disponibili:
Codice:
unction pagination_4($total_pages,$page){

    global $webpage;
    global $tipo;
    $pagination="";

        if($total_pages!=1){

       //Impostiamo il numero massimo di elementi visualizzabili all'apertura della pagina, in questo caso 20;

        $max = 20;

        //Usiamo questa variabile nel cilco for piu sotto;

        $max_links = $max+1;
        $h=1;

            //Se la pagina è > di $max_links

        if($page>$max_links){

            //Facciamo partire il nostro loop

            $h=(($h+$page)-$max_links);
        }

          //Se la pagina non è l'unica

        if($page>=1){

                //estendiamo il nosto range di link visualizzabili

            $max_links = $max_links+($page-1);
        }

            //Se il numero massimo di link visualizzabili, supera il numero totale delle pagine, allora il numero di links è =numero totale di pagine

        if($max_links>$total_pages){
            $max_links=$total_pages+1;
        }

            //Creiamo i link prima e prev
	$pg = "";
        if($page>1){
		$pagination.="<div id=\"footer\"><a href=". $webpage ."?page=". ($page-1) . ">Prev</a></div>";
        }

            //Creiamo le pagine linkate

        for ($i=$h;$i<$max_links;$i++){
            if($i==$page){
                $pagination.="<div id=\"footer\"><a>".$i."</a></div>";
            }
            else{
                $pagination.="<div id=\"footer\"><a href=".$webpage."?tipo=" . $tipo . "&amp;page=".$i.">".$i."</a></div>";
            }
        }

            //Creiamo i link Next buttons

        if(($page >="1")&&($page!=$total_pages)){
            $pagination.="<div id=\"footer\"><a href=".$webpage."?tipo=" . $tipo . "&amp;page=".($page+1).">Next</a></div>";
        }
    }

    //if one page of results

    else{
        $pagination.="";
    }
    
    return($pagination);
}
Difatti proprio ora sto impazzendo perchè ai link delle pagine devo annidare tutti gli if seguendo la logica sul quale hai basato la query.
(o almeno penso che così riesco a risolvere il problema).
 

lughino

Nuovo Utente
23 Mar 2010
24
0
0
Allora per la visualizzazione delle pagine ho modificato la funzione così
PHP:
	$pg = "";
        if($page>1){
		if($tipo != ""){
			if($pg == ""){
				$pg = "&amp;tipo=". $tipo;
			} else {
				$pg .= "&amp;tipo=". $tipo;
			}
		} 
		elseif($acquisto != ""){
			if($pg == ""){
				$pg = "&amp;c=". $acquisto;
			} else {
				$pg .= "&amp;c=". $acquisto;
			}
		}
		elseif($prezzo != "") {
			if($pg == ""){
				$pg = "&amp;p=". $prezzo;
			} else {
				$pg .= "&amp;p=". $prezzo;
			}
		}
		$pagination.="<div id=\"footer\"><a href=". $webpage ."?page=". ($page-1) . $pg .">Prev</a></div>";
        }

            //Creiamo le pagine linkate

        for ($i=$h;$i<$max_links;$i++){
            if($i==$page){
                $pagination.="<div id=\"footer\"><a>".$i."</a></div>";
            }
            else{
		if($tipo != ""){
			if($pg == ""){
				$pg = "&amp;tipo=". $tipo;
			} else {
				$pg .= "&amp;tipo=". $tipo;
			}
		} 
		elseif($acquisto != ""){
			if($pg == ""){
				$pg = "&amp;c=". $acquisto;
			} else {
				$pg .= "&amp;c=". $acquisto;
			}
		}
		elseif($prezzo != "") {
			if($pg == ""){
				$pg = "&amp;p=". $prezzo;
			} else {
				$pg .= "&amp;p=". $prezzo;
			}
		}
                $pagination.="<div id=\"footer\"><a href=".$webpage."?page=".$i.">". $i . $pg ."</a></div>";
            }
        }

            //Creiamo i link Next buttons

        if(($page >="1")&&($page!=$total_pages)){
		 if($tipo != ""){
			if($pg == ""){
				$pg = "&amp;tipo=". $tipo;
			} else {
				$pg .= "&amp;tipo=". $tipo;
			}
		} 
		elseif($acquisto != ""){
			if($pg == ""){
				$pg = "&amp;c=". $acquisto;
			} else {
				$pg .= "&amp;c=". $acquisto;
			}
		}
		elseif($prezzo != "") {
			if($pg == ""){
				$pg = "&amp;p=". $prezzo;
			} else {
				$pg .= "&amp;p=". $prezzo;
			}
		}
            $pagination.="<div id=\"footer\"><a href=".$webpage."?page=". ($page+1) . $pg .">Next</a></div>";
        }
    }

Ma ovviamente c'è sempre qualcosa che non va...
il link "Prev" va bene.
il link "Next" mi raddoppia le variabili passate, ad esempio se seleziono solo "Appartamento", mi ritrovo nel link "&tipo=Appartamento&tipo=Appartamento".
Poi se vado a pagina 2, il link della pagina 1 mi fa la stessa del link "Next".
Questa non la capisco proprio...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao,
guarda che non c'entra nulla nella stessa pagine possono convire diversi tipi di superglobali ($_POST, $_GET, $_SESSION....), non vedo la ragion per cui tu non possa mettere method="post"
tra l'altro provenendo tutti i post da valori predefiniti (select) fai meno fatica (e c'è meno bisogno) di filtrarli
 

lughino

Nuovo Utente
23 Mar 2010
24
0
0
ciao,
guarda che non c'entra nulla nella stessa pagine possono convire diversi tipi di superglobali ($_POST, $_GET, $_SESSION....), non vedo la ragion per cui tu non possa mettere method="post"
tra l'altro provenendo tutti i post da valori predefiniti (select) fai meno fatica (e c'è meno bisogno) di filtrarli

Scusa l'ignoranza, ma però allora non capisco come fare per lavorare con la funzione della creazione delle pagine...
 

lughino

Nuovo Utente
23 Mar 2010
24
0
0
Ciao a tutti,
secondo il consiglio di Borgo ho cambiato la form da GET a POST, ma ho mantenuto la funzione per la paginazione dei record via GET, così:
PHP:
function pagination_4($total_pages,$page){

    global $webpage;
    $pagination="";

        if($total_pages!=1){

       //Impostiamo il numero massimo di elementi visualizzabili all'apertura della pagina, in questo caso 20;

        $max = 20;

        //Usiamo questa variabile nel cilco for piu sotto;

        $max_links = $max+1;
        $h=1;

            //Se la pagina è > di $max_links

        if($page>$max_links){

            //Facciamo partire il nostro loop

            $h=(($h+$page)-$max_links);
        }

          //Se la pagina non è l'unica

        if($page>=1){

                //estendiamo il nosto range di link visualizzabili

            $max_links = $max_links+($page-1);
        }

            //Se il numero massimo di link visualizzabili, supera il numero totale delle pagine, allora il numero di links è =numero totale di pagine

        if($max_links>$total_pages){
            $max_links=$total_pages+1;
        }

            //Creiamo i link prima e prev
        if($page>1){
		$pagination.="<div id=\"footer\"><a href=". $webpage ."?page=". ($page-1) . ">Prev</a></div>";
        }

            //Creiamo le pagine linkate

        for ($i=$h;$i<$max_links;$i++){
            if($i==$page){
                $pagination.="<div id=\"footer\"><a>".$i."</a></div>";
            }
            else{
		$pagination.="<div id=\"footer\"><a href=". $webpage ."?page=". $i .">". $i . "</a></div>";
            }
        }

            //Creiamo i link Next buttons

        if(($page >="1")&&($page!=$total_pages)){

	    $pagination.="<div id=\"footer\"><a href=".$webpage."?page=". ($page+1) .">Next</a></div>";
        }
    }

    //if one page of results

    else{
        $pagination.="";
    }
    
    return($pagination);
}
Solo che ora, quando clicco su pagina 2, mi restituisce la pagina senza record; immagino che, avendo passato i valori tramite post, li perda andando sulla pagina successiva.
Dove sbaglio?
Grazie a tutti per la pazienza.
Ciao
 
Discussioni simili
Autore Titolo Forum Risposte Data
C Php/Mysql query JOIN tra tabelle PHP 4
C Php/Mysql query JOIN tra due tabelle PHP 18
booklisa MYSQL e PHP Query e sottoquery PHP 3
M [PHP - MYSQL] Mantenere filtro query in tabelle paginate PHP 3
G problema query mysql in php PHP 5
felino [PHP][MySQL] Errore nella query PHP 6
G Inserimento loop in una INSERT query in PHP e MySQL PHP 2
L filtri di query [php-mysql] PHP 6
A [RISOLTO]Come generare query dinamica PHP-MYSQL PHP 2
B problema query mysql php PHP 1
L PHP: problema con query mysql. PHP 3
A Indicizzare i risultati di una query Mysql con php PHP 0
B Aiuto query mysql in php PHP 1
S Autocompletamente con jQuery, PHP e MySQL - Problema con le query PHP 7
neo996sps [PHP + MySQL + Server Linux] Upload semi riuscito e query non eseguite PHP 2
D query con mysql, checkbox e php PHP 8
K Strano errore in una query mysql da php PHP 5
M Query php select mysql PHP 12
S Query MYSQL in php PHP 3
A [MYSQL+PHP]Non riesco a fare la query!!!Penso sia semplice.. PHP 1
M Query MYSql PHP PHP 2
J query con php su mysql PHP 1
Z Invio query da php su db mysql PHP 6
F Ricreare struttura php+mysql su Xampp Apache 0
M Array associativi php su 2 campi mysql PHP 10
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
Z MySql injection PHP PHP 1
D problema php mysql PHP 1
D problema php mysql PHP 1
L Google chart php mysql PHP 2
L Aiuto per programma web php/mySQL PHP 2
S Problemi delle funzioni eliminate con PHP e MySQL PHP 4
C Aiuto compiuto scuola PHP/MySQL PHP 2
G Problema caricamento tabelle MySql da PhP PHP 0
L update tabelle in php mysql [risolto] PHP 6
F Passare una variabile php dal DB mysql alla pagina PHP 3
B Fare calcoli con php da tabella mysql PHP 2
D [MySQL] [PHP] SQL andare da capo MySQL 0
P [OFFRO] Realizzazione siti web in PHP/MYSQL, responsive e Ottimizzati SEO Offerte e Richieste di Lavoro e/o Collaborazione 0
Tommy03 Firebase o PHP+Mysql? Sviluppo app per Android 0
pjtertdj Visualizzazione dati in php da mysql con funzione matematica in javascript PHP 1
E Cerco programmatore PHP/Mysql - retribuito Offerte e Richieste di Lavoro e/o Collaborazione 0
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
Z Gestionale in Php/mysql: Quanto farsi pagare? Aiuto! Discussioni Varie 0
E Inserimento dati da PHP in tabella MySQL PHP 5
R radio input php mysql PHP 2
E Caricare dati da DB MySql all'apertura pagina, meglio PHP o Javascript? PHP 1
giusebos [retribuito] Cercasi programmatore PHP/MySql Offerte e Richieste di Lavoro e/o Collaborazione 1

Discussioni simili