[PHP] Ricerca multipla, evitare if

cosworthwolf

Nuovo Utente
21 Giu 2018
4
0
1
Buongiorno, questo è il mio primo post quindi spero di non commettere errori. Premetto che sono alle prime armi con il php ma dopo diversi giorni di "duro lavoro" son riuscito a creare una pagina di ricerca in un database. La pagina in questione funziona su singola tabella ed effettua una ricerca multipla tramite form (circa una ventina di campi di ricerca!!).
Finchè le variabili sono solo campi di testo, il sistema funziona perfettamente effettuando la ricerca anche se alcuni campi vengono lasciati vuoti ma appena inserisco nel form un campo con relativa variabile numerica, sono obbligato ad inserire un valore nei suddetti campi altrimenti va in errore.
La mia domanda è, è possibile aggirare questo problema senza dover per forza utilzzare un if/else con relative query per ogni singolo campo numerico? (sono almeno 6 :eek::eek::eek:)

Spero di essere stato chiaro :(
 

macus_adi

Utente Attivo
5 Dic 2017
1.141
65
48
IT/SW
Certo, basta parametrizzare la query con filtro su campo di ricerca....
Se utilizzi mysql, anche in altri post l'ho consigliato, puoi utilizzare la tabella information_schema, che oltre ad avere l'indice delle tabelle, ha anche informazioni inerenti i campi delle tabelle....

In questo modo puoi recuperare dinamicamente:
Tipo di dato
Nome Colonna
Valore di default etc....

Ciclando a 2 vie l'array dai campi della tabella e attraverso il prepare statement puoi valorizzare il filtro con i risultati e far visualizzare l'intersezione degli stessi....

Quanto detto si svolge in poco più di 10 minuti e con 10/15 linee di codice, quindi nulla di trascendentale e soprattutto nulla di impossibile anche per chi è alle prime armi...
 

cosworthwolf

Nuovo Utente
21 Giu 2018
4
0
1
MAcus_adi, intanto grazie per la risposta, inutile dire che ci ho capito ben poco, ma prima di gettare la spugna e chiedere chiarimenti o postare il codice, provo a fare un giro ed a capirci qualcosa da solo :D
 

cosworthwolf

Nuovo Utente
21 Giu 2018
4
0
1
Certo, basta parametrizzare la query con filtro su campo di ricerca....
Se utilizzi mysql, anche in altri post l'ho consigliato, puoi utilizzare la tabella information_schema, che oltre ad avere l'indice delle tabelle, ha anche informazioni inerenti i campi delle tabelle....

In questo modo puoi recuperare dinamicamente:
Tipo di dato
Nome Colonna
Valore di default etc....

Ciclando a 2 vie l'array dai campi della tabella e attraverso il prepare statement puoi valorizzare il filtro con i risultati e far visualizzare l'intersezione degli stessi....

Quanto detto si svolge in poco più di 10 minuti e con 10/15 linee di codice, quindi nulla di trascendentale e soprattutto nulla di impossibile anche per chi è alle prime armi...
Non so se ho capito bene ma in questo modo è come se inserissi (in caso di campo vuoto) un valore di default. E' così? perchè a me invece interesserebbe far finta che quel campo non esista cioè che la ricerca funzioni solo in base ai valori immessi.
 

macus_adi

Utente Attivo
5 Dic 2017
1.141
65
48
IT/SW
Allora mappi i dati in input con quelli della tabella!
Hai dati in POST/GET come ti pare, ed effettui il mapping solo sui dati che ti interessano....
Tabella:
ID
TXT1
TXT2
...
TXTn

DATI in PSOT
DATO1
DATO2
DATO3

PHP:
$ar_map=['DATO1'=>'TXT1','DATO2'=>'TXT"'.....'DATOn'=>'TXTm'];
e cicli solo se il valore del dato non è nullo... naturalmente la esegui sul valore del dato ar_map e non sulla chiave!