Du gibst eigentlich die gleichen Parameter mal mit GET mal mit POST an den Request. Überleg dir doch mal primär ein sauberes Schema für den Request und welche Fälle wie gehandhabt werden sollen bevor du beginnst zu programmieren.
Beispiel:
Parameter: page_id
Methode: GET
Bedeutung: zu ladende Seite
Mögliche Werte: Zahlen
Optional: nein
Datenbankrelevant: Vermutlich nicht
Parameter: suche
Methode: GET
Bedeutung: zu suchender String
Mögliche Werte: Alle strings
Optional: Ja
Standardwert: Leerer String
Datenbankrelevant: Vermutlich schon
Parameter: cat
Methode: GET
Bedeutung: Zu filternde Kategorien
Mögliche Werte: kids, wmodels, mmodels, ...
Optional: Ja
Standartwert: Alle Kategorien (oder keine Kategorie)
Datenbankrelevant: Indirekt
usw
Wenn du dir das fertig überlegt hast merkst, du dass du weder POST Parameter benötigst, noch dass du Teile deiner SQL Query an den User schicken musst. Durch die vordefinierten Werte für cat kannst du diese theoretisch durch einen switch jagen und damit deine Query zusammenbauen ohne, dass du den Parameter direkt unbearbeitet in der Query verwendest. Damit umgehst du deine horrenden Sicherheitslecks schon mal teilweise.