Ordinare i risultati a seconda della col scelta

Ciao a tutti,

ho un quesito da porvi. Ho fatto un form di ricerca che in out mi da i risultati (paginati ). Il risultato è suddiviso in 3 colonne ID, NOME, PREZZO.

Avete presente phpmyadmin, se clicchi sul nome della colonna i risultati vengono ordinati in base alla scelta fatta.

Io vorrei fare la stessa cosa: se clicco su id, mi deve ordinare i risultati per i Id, se clicco su Prezzo me li ordina per prezzo ecc.

Ammesso che ho capito che a ORDER BY bisogna assegnare una variale, mi potete suggerire un metodo per poter raggiungere il mio obiettivo?? 

 :bye:

inviato 10 anni fa
stellina
X 0 X

Suppongo che avrai realizzato una pagina che mostra i risultati. Questa pagina effettuerà una SELECT per recuperare i dati dal DB. In questa SELECT ci sarà una clausola ORDER BY per ordinare i risultati.

Ciò che devi fare è cambiare la query in modo che di volta in volta ordini i dati secondo una diversa colonna. Per scegliere la colonna puoi usare un parametro passato nell'URL

mostra.php?ordine=col1

così nello script avrai la variabile $_GET['ordine'] che contiene il nome della colonna su cui effettuare l'ordinamento.

Quindi nello script puoi mettere:

if(isset($_GET['ordine']))

   $ordine = " ORDER BY " . $_GET['ordine'];

else

   $ordine = '';

$query = "SELECT * FROM .... " . $ordine;

Ovviamente dovrai creare i link alle intestazioni della tabella per ordinare le colonne

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Per evitare SQL injection non sarebbe il caso di passare il parametro di rdinamento con il metodo POST o tramite sessioni?

risposto 10 anni fa
Nico Colonna
X 0 X

E' vero che la modalità che ho proposto è esposta a pericoli di sicurezza ma a nulla serve usare $_POST o le sessioni.

Basta invece "codificare" i campi della tabella con dei numeri. Ad esempio 1 equivale alla colonna "nome", 2 alla colonna "cognome", ecc.

Quindi basta fare un array

$colonne = array(1=>'nome','cognome', ecc...

e poi, una volta verificato che $_GET['ordine'] esiste e che esiste anche $colonne[$_GET['ordine']], si procede come prima:

$ordine = " ORDER BY " . $colonne[$_GET['ordine']];

in questo modo non c'è rischio di SQL injection

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

io solitamente utilizzo un form di ricerca che permetta di scegliere il campo per l'ordinamento da un select box, molti meno controlli e più sicuro! :bye:

risposto 10 anni fa
Xscratch
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda