Paginazione, ordine alfabetico e array

  • Creatore Discussione Creatore Discussione RedWolf
  • Data di inizio Data di inizio

RedWolf

Nuovo Utente
7 Mag 2009
22
0
0
Roma
www.antrocom.org
Ciao a tutti!
Quando si parla di perdersi in un bicchiere d'acqua sono un campione. Sto facendo una pagina php in cui vengono listati e paginati i risultati di una query verso un database mySQL.
Visto che la lista è molto lunga, ho pensato di dare la possibilità di ordinare in ordine alfabetico i dati, cliccando sul nome della colonna corrispondente.
Ho preso due script trovati a suo tempo in rete e li ho uniti alla bisogna. Separatamente funzionano, ma non riesco a far passare, nel link della paginazione, l'elemento dell'array che corrisponde proprio al nome della colonna. Come potrei fare?
Ho provato anche una querystring, prendendo spunto da http://forum.mrwebmaster.it/php/7101-passare-vettore-querystring.html, ma si vede che stasera non ci sto priprio dentro! :|
Di seguito posto il codice PHP con le parti salienti, se volete dare un'occhiata sto lavorando su: http://www.antrocom.org/annuario/list.php

PHP:
<?
//PAGINAZIONE
       // esecuzione prima query
       $count = mysql_query("SELECT COUNT(id) FROM utenti");
       $res_count = mysql_fetch_row($count);

       // numero totale di records
       $tot_records = $res_count[0];

       // risultati per pagina(secondo parametro di LIMIT)
       $per_page = 10;

       // numero totale di pagine
       $tot_pages = ceil($tot_records / $per_page);

       // pagina corrente
       $current_page = (!$_GET['page']) ? 1 : (int)$_GET['page'];

       // primo parametro di LIMIT
       $primo = ($current_page - 1) * $per_page;
//FINE PRIMA PARTE PAGINAZIONE

// definisco le variabili per mettere in ordine alfabetico i record: al primo click sul nome della colonna, OrdinaVerso sarà ASC, al secondo click DESC

             if(empty($_GET['ordercampo']))
             $_GET['ordercampo'] = "utenti.id";

             if(empty($_GET['order']))
             $_GET['order'] = "asc";

             if($_GET['order']=="asc") {$ordinaVerso = "desc";}
             if($_GET['order']=="desc") {$ordinaVerso = "asc";}

// i nomi dei campi sono posti in un array per essere listati in HTML
$campo= array ("cognome","nome","username");

//query principale database con il LIMIT di paginazione
$result=mysql_query("SELECT * FROM utenti ORDER BY $_GET[ordercampo] $ordinaVerso LIMIT $primo, $per_page");

// ora listo i nomi delle colonne come link: se ci clicco ordino ASC o DESC.
?>

      <td><a href="list.php?ordercampo=<?echo"$campo[0]";?>&order=<? echo"$ordinaVerso";?>">Cognome</a></td>
      <td><a href="list.php?ordercampo=<?echo"$campo[1]";?>&order=<? echo"$ordinaVerso";?>">Nome</a></td>
      <td><a href="list.php?ordercampo=<?echo"$campo[2]";?>&order=<? echo"$ordinaVerso";?>">Cognome</a></td>
<?

// Ora faccio la lista dei risultati in un ciclo while
while ($row = mysql_fetch_array($result))
{
echo"

        <td>$row[cognome]</font></td>
        <td>$row[nome]</font></td>
       <td>$row[username]</font></td>
";
}

// RICOMINCIA LA PAGINAZIONE

// scrivo le pagine totali
$paginazione = "Pagine totali: " . $tot_pages . "
[";
for($i = 1; $i <= $tot_pages; $i++) {
if($i == $current_page) {
$paginazione .= $i . " ";
} else {

// inserisco nel link il numero di pagina
$paginazione .= "<a href=\"?page=$i&ordercampo=";

// QUI DOVREI INSERIRE IL NOME DELLA COLONNA TRATTA DALL'ARRAY $campo

// inserisco nel link se ordinare ASC o DESC
$paginazione .= "&order=".$_GET['order']."\" title=\"Vai alla pagina $i\">$i</a> ";
}
}
$paginazione .= "]";

// scrivo i numeri delle pagine
echo $paginazione;
?>
 
Ultima modifica:
c'è una cosa che non ho capito, se concateni:
PHP:
$paginazione .= "<a href=\"?page=$i&ordercampo=";
a
PHP:
$paginazione .= "&order=".$_GET['order']."\" title=\"Vai alla pagina $i\">$i</a> ";

quale parametro dovresti passare a "ordercampo"?
 
Giusta domanda! ;) Dovrei passare il nome del campo/colonna, cioè quello che nel codice dei link è indicato come $campo[0], $campo[1] ecc., ovvero gli elementi dell'array "$campo".
In origine i nomi delle colonne erano "in chiaro" (nome, cognome, username...), ma poi ho capito che dovevo passare una variabile: come si fa a sapere a priori, infatti, quale colonna ha usato un utente per ordinare i dati?
 
non so se ho capito bene la meccanica del tuo script, però da quello che scrivi prima dovrebbe essere (dalla seconda pagina in poi):
PHP:
$paginazione .= "<a href=\"?page=$i&ordercampo=".$_GET['ordercampo'];
nella prima, a priori, dovrebbe essere:
PHP:
$paginazione .= "<a href=\"?page=$i&ordercampo=utenti.id";
 
Ultima modifica:
Dopo aver letto la tua risposta, ho avuto la tentazione di telefonare al mio medico, esporre il problema e chiedere se ero grave... :p Va bene perdersi in un bicchier d'acqua, ma dimenticare così una variabile settata apposta e incaponirsi sugli elementi di un array...
Grazie Eliox, soprattutto per la pazienza! :)
 

Discussioni simili