Problema ricerca con piu campi in php

Salve! premetto che sono nuovo al linguaggio php :D

Ho realizzato un pannello di amministrazione in php che carica dei campi (in qsto caso veicoli) dal db e li mette in una pagina dove e possibile controllarli eliminarli modificarli ecc.. ora però mi sono accorto di un piccolo (non tanto-.-) problema che riguarda la ricerca avanzata, che mi permette di filtrare i veicoli a seconda di quello che inserisco nei campi di ricerca. I campi di ricerca sono i seguenti Tipo: che puo essere Tutti,  Nuovo o usato, Categorie: Tutti, autocarri, auto, ecc.. e un campo di testo dove posso inserire la marca. Il problema è che qndo seleziono nel campo tipo: Tutti , categoria: autocarri (o altre)  e inserisco la marca mi dà un errore su due variabile $x, $y (lui dice non sono definite-.-) che io uso come appoggio e di conseguenza non mi completa correttamente la query creandomi una query del tipo: SELECT * FROM tabella WHERE categoria='autocarri' marca='Volvo' order by id desc limit 0, 12   mancando un AND e causandomi errori a nn finire xd

$query2 = "SELECT COUNT(id) AS totale FROM veicoli ";
            $query = "SELECT * FROM veicoli ";
            if(isset($_POST['cerca_tipo']) or isset($_POST['cerca_categoria']) or isset($_POST['marca'])){
                $x;
                $y;
                if($_POST['cerca_tipo']=="tutti" && $_POST['cerca_categoria']=="tutti" && $_POST['cerca']==NULL){
                    } else {
                $query.="WHERE";
                $query2.="WHERE";
                    }
            if($_POST['cerca_tipo']!="tutti"){
                $query.=" tipo ='".$_POST['cerca_tipo']."' ";
                $query2.=" tipo ='".$_POST['cerca_tipo']."' ";
                $x="1";
                }
            if($_POST['cerca_categoria']!="tutti"){
                if($x=="1"){
                    $query.=" AND ";
                    $query2.=" AND ";
                    $y="1";
                    }
                $query.=" categoria='".$_POST['cerca_categoria']."'";
                $query2.=" categoria='".$_POST['cerca_categoria']."'";
                }
            if($_POST['cerca']!=NULL){
                if($y=="1"){
                    $query.=" AND ";
                    $query2.=" AND ";
                    }
                $query.=" marca='".$_POST['cerca']."'";
                $query2.=" marca='".$_POST['cerca']."'";
                }
inviato 4 anni fa
krat0s89
modificato 4 anni fa
Gianni Tomasicchio
X 0 X

Invece di comporre la query concatenando tante stringhe puoi scriverla così:

$tipo = $_POST['cerca_tipo'];
$categoria = $_POST['cerca_categoria'];

$query = "SELECT * FROM veicoli
WHERE
('$tipo' = 'tutti' OR tipo = '$tipo') AND
('$categoria' = 'tutti' OR categoria = '$categoria')";

Non dimenticare di effettuare l'escape di $tipo e $categoria (ad esempio con mysql_real_escape_string se stai usando mysql)

EDIT: avevo dimenticato le parentesi nella query

risposto 4 anni fa
Gianni Tomasicchio
modificato 4 anni fa
ciao gianni! grazie per la risposta ! il problema e che il campo Tutti non lo tengo nel db ma.. Tutti "sta per seleziona tutti gli elementi di quel tipo o/e quella categoria senza mettere un filtro"krat0s89 4 anni fa
@krat0s89 ...ed infatti nella query filtro per tipo solo se il tipo selezionato è diverso da 'tutti', lo stesso faccio per la categoria. Non c'è bisogno di mettere degli IF nel codice, sono gli OR della query ad attivare e disattivare i filtri.Gianni Tomasicchio 4 anni fa
grazie mille :) andato tt bn dp dp inserisco l'escape purtroppo nn lo sapevo dell'injection me so fatto na bella ricerca :O sono ancora un polletto!:D ahhahakrat0s89 4 anni fa
@krat0s89 puoi "accettare" la mia risposta se ti ha risolto il problema? (cliccando sul simbolo di spunta)Gianni Tomasicchio 4 anni fa
X 0 X X
Effettua l'accesso o registrati per rispondere a questa domanda