Ordinamento colonne

Monital

Utente Attivo
15 Apr 2009
778
2
18
Salve a tutti

ho un informazione da chiedere,

non ho ancora creato tale script ma mia ccingo a farlo quindi prima di mettere mano volevo capire se la cosa era fattibile
Scirvo un esempios emplcie giusto per far capire cosa vorrei fare

ho una tabella nel databse contenente una gran moel di dati strutturata così

Nome cognome età altezza peso

estraggo i dati tramite una query del tipo

PHP:
    $query = "SELECT Nome,Cognome,eta,altezza,peso  ORDER BY Nome";
    $risultato = mysql_query($query) or die("Query fallita: " . mysql_error() );

    /* Stampa dei risultati in HTML */
    echo "<table border=\"1\">\n";
	echo "<tr><td width=\"80\" align=\"center\" bgcolor=\"DARKBLUE\"><b><font face=\"Tahoma\" size=\"2\" color=\"WHITE\">Nome</td>";
	echo "<td width=\"80\" align=\"center\"bgcolor=\"DARKBLUE\"><b><font face=\"Tahoma\" size=\"2\" color=\"WHITE\">Cognome</td>";
	echo "<td width=\"80\" align=\"center\"bgcolor=\"DARKBLUE\"><b><font face=\"Tahoma\" size=\"2\" color=\"WHITE\">Età</td>";
	echo "<td width=\"80\" align=\"center\"bgcolor=\"DARKBLUE\"><b><font face=\"Tahoma\" size=\"2\" color=\"WHITE\">Altezza</td>";
	echo "<td width=\"80\" align=\"center\"bgcolor=\"DARKBLUE\"><b><font face=\"Tahoma\" size=\"2\" color=\"WHITE\">peso</td>";
    while ($linea = mysql_fetch_array($risultato, MYSQL_ASSOC)) {
        	
		echo "\t<tr>\n";

	
			
        foreach ($linea as $valore_colonna) {
            echo "\t\t<td  height=\"22\" width=\"80\" align=\"center\" bgcolor=\"LIGHTCYAN\"><b><font face=\"Tahoma\" size=\"2\" color=\"#292929 \">$valore_colonna</td>\n";

        }

però vorrei che cliccando sull'intestazione della tabella mi ordinasse la tabella

del tipo cliccando su Nome me li ordini epr nome cliccando su eta me li ordini epr eta

coem posso fare una cosa del genere?

in solo php è possibile?

Grazie per le risposte
 

marco_rx

Utente Attivo
19 Dic 2010
129
0
0
Potresti utilizzare una query string e quindi avere l'intestazione sotto forma di link. Cliccando su età avresti un url di questo tipo: pagina.php?order=eta.
Nello script ti basta recuperare $_GET['order'] (in caso non sia settato imposti un valore predefinito) e passarlo all' ORDER BY della query.
Esempio:
PHP:
<?php
$order = isset($_GET['order']) ? $_GET['order'] : 'Nome';

$query = "SELECT Nome,Cognome,eta,altezza,peso  ORDER BY $order";

// resto dello script ...
?>
 
Ultima modifica:

Monital

Utente Attivo
15 Apr 2009
778
2
18
Potresti utilizzare una query string e quindi avere l'intestazione sotto forma di link. Cliccando su età avresti un url di questo tipo: pagina.php?order=eta.
Nello script ti basta recuperare $_GET['order'] (in caso non sia settato imposti un valore predefinito) e passarlo all' ORDER BY della query.
Esempio:
PHP:
<?php
$order = isset($_GET['order']) ? $_GET['order'] : 'Nome';

$query = "SELECT Nome,Cognome,eta,altezza,peso  ORDER BY $order";

// resto dello script ...
?>

grazie marco ma scusa da dove lo recupro $_GET['order']?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
prima una piccola osservazione:
perchè non usi i css per formattare la tabella invece di ripetere ad ogni tr e td tutta quella pappardella?
poi probabilmente itendevi questo

PHP:
<?php
//....
switch($_GET['ord']){
	case "1"; $o=" ORDER BY Nome";
	break;
	case "2"; $o=" ORDER BY Cognome";
	break;
	case "3"; $o=" ORDER BY Eta";
	break;
	case "4"; $o=" ORDER BY Altezza";
	break;
	case "5"; $o=" ORDER BY peso";
	break;
	default: $o="";//oppure = "ORDER BY Nome"
	break;
}

 $query = "SELECT Nome,Cognome,eta,altezza,peso $o";
    $risultato = mysql_query($query) or die("Query fallita: " . mysql_error() );

    /* Stampa dei risultati in HTML */
    echo "<table class=\"tabella\">\n";
    echo "<tr><td><a href=\"?ord=1\">Nome</a></td>";
    echo "<td><a href=\"?ord=2\">Cognome</a></td>";
    echo "<td><a href=\"?ord=2\">Età</a></td>";
    echo "<td><a href=\"?ord=3\">Altezza</a></td>";
    echo "<td><a href=\"?ord=4\">peso</a></td>";
    while ($linea = mysql_fetch_array($risultato, MYSQL_ASSOC)) {
    //ecc.....
?>
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ciao
prima una piccola osservazione:
perchè non usi i css per formattare la tabella invece di ripetere ad ogni tr e td tutta quella pappardella?

perchè non saprei nemmeno da dove iniziare

ciao

poi probabilmente itendevi questo

PHP:
<?php
//....
switch($_GET['ord']){
	case "1"; $o=" ORDER BY Nome";
	break;
	case "2"; $o=" ORDER BY Cognome";
	break;
	case "3"; $o=" ORDER BY Eta";
	break;
	case "4"; $o=" ORDER BY Altezza";
	break;
	case "5"; $o=" ORDER BY peso";
	break;
	default: $o="";//oppure = "ORDER BY Nome"
	break;
}

 $query = "SELECT Nome,Cognome,eta,altezza,peso $o";
    $risultato = mysql_query($query) or die("Query fallita: " . mysql_error() );

    /* Stampa dei risultati in HTML */
    echo "<table class=\"tabella\">\n";
    echo "<tr><td><a href=\"?ord=1\">Nome</a></td>";
    echo "<td><a href=\"?ord=2\">Cognome</a></td>";
    echo "<td><a href=\"?ord=2\">Età</a></td>";
    echo "<td><a href=\"?ord=3\">Altezza</a></td>";
    echo "<td><a href=\"?ord=4\">peso</a></td>";
    while ($linea = mysql_fetch_array($risultato, MYSQL_ASSOC)) {
    //ecc.....
?>

domani ci provo e so dirti
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
perchè non saprei nemmeno da dove iniziare
questo è un esempio con css interno, perfettibile comunque.
il css può essere enche un file esterno (es. formattazione.css) richiamato nell' head (sistem migliore)

HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento senza titolo</title>
<!-- qui sotto lo stile di formattazione -->
<style type="text/css">
.tabella{/*caratteri comuni a tutta la tabella*/
border-width: 2px;/*spessore del bordo*/
border-color:#000000;/*colore del bordo in quasto caso indicato con il codice html white*/
font-family:Georgia, "Times New Roman", Times, serif;/*font (non ho il tahoma)*/
font-size:12px;
font-weight:bold;
text-align:center;
}
.tdInt{
color:#FFFFFF;/*colore del carattere*/
background-color:DARKBLUE;
width: 80px;
height:15px;
}
.tdDat{
color:#000000;
text-align:center;
background-color:LIGHTCYAN;
width: 80px;
height:25px;
}
</style>
</head>

<body>
<table class="tabella">
  <tr>
    <td class="tdInt">Nome</td>
    <td class="tdInt">Cognome</td>
    <td class="tdInt">Et&aacute;</td>
    <td class="tdInt">Altezza</td>
    <td class="tdInt">Peso</td>
  </tr>
  <tr>
    <td class="tdDat">Pinco</td>
    <td class="tdDat">Pallo</td>
    <td class="tdDat">99</td>
    <td class="tdDat">130 cm</td>
    <td class="tdDat">180 kg</td>
  </tr>
</table>
</body>
</html>
se salvi es con nme pagina.htm e la chiami col bw vedrai la tabella formattata.
come puoi notare il codice è un po' meno incasinato, non solo se cambi qualcosa devi intervenire solo sullo style e non su tutti i td
leggiti il manuale sui css che trovi qui
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ok

allora per il css ok pensavo intendessi un altra cosa con il file css e le classi sof arlo ma questo è unos cript vecchio che ho fatto e che voglio rendere più dinamico

il codice da te postato funge e molto bene ma ho ancora due quesiti

1) le varie intestazioni sono le intestazioni del database, non c'è modo di fare estrarre anche quelle evitando cosi di dover riscirvere tutto il codice html delle intestazioni

2) nello switch dovrei mettre circa una 30ina di opzioni c'è modod dic reare un ciclo senza dover inserire rtutti i 30 o 40 break?

3) il codice funge eprò è molto lento nel caricare la pagina può dipendere dalla mole di dati? dato che attualemnte ci sono circa 6000 righe in quella tabella? C'è modod di velocizzare ?

Grazie ancora del supporto
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
aggiungo un ulteriore domanda

se voglio che anche ogni nome estratto sia sotto forma di hyperlink e che quindi cliccandoci sopra si apri un pop up che visualizzi solo i dati relativi al nome cliccato?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
1) le varie intestazioni...
intendi i nomi dei campi della tabella? non so se c'è un sistema per estrarli, verifico ed eventualmente ti so dire.
2) nello switch....
ci penso un momento poi ti so dire, probabilmente bisogna cambiare sistema
3) il codice funge...
con molta probabilità dipende dalla grandezza del db
domanda aggiuntiva (ho semplificato)

PHP:
<?php
//.....
 foreach ($linea as $valore_colonna) { 
            echo "<td><a href='qui_per aprire'>$valore_colonna</a></td>"; 
        }
//.....
?>
dove al posto di 'qui_per_aprire' ci metterai, es, un istruzione js per aprire un pop o il nome di una pagina con taget _blank o quello che ti interessa.
così ti fa il link su tutte le colonne
se vuoi invece vuoi fare il link solo su una specifica colonna ti conviene mettere un contatore e tramite if fare il link o no
es.
PHP:
<?php
//.....
 $flag=1;
 foreach ($linea as $valore_colonna) { 
            if($flag==1){//o al numero di colonna a cui ti interessa il link
			//se a più di una colonna if($flag==3 || $flag==4 || $flag==7).....
				echo "<td><a href='qui_per aprire'>$valore_colonna</a></td>";
			}else{
				echo "<td>$valore_colonna</td>";
			}
			$flag++;//incremento
			if($flag > $numero_di_colonne){$flag=1;}//riporto il contatore all'inizio
        }
//.....
?>
in questo caso al posto di 'qui_per_aprire' potresti mettere una variabile array es. $pinco[$flag'] in cui potrai mettere la varie istruzioni distinte
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
per sostituire lo switch potresti farti un array con i nomi dei campi, forse è il sistema più rapido
PHP:
<?php
//....
$campi=array('Nome','Cognome','et&agrave','altezza','peso');
$by= " ORDER BY ";
if(isset($_GET['ord']){
	$campo=$_GET['ord']-1;//l'array parte da 0 o far partire i get ?ord da 0 e quindi non serve il -1
	$o= $by.str_replace('&agrave;','a',$campi[$campo]);//il campo non può chiamarsi età e l'intestazione scritta eta non è bella
}else{
	$o= "";
}
//....

/* Stampa dei risultati in HTML */ 
echo "<table border=\"1\">";
foreach($campi as $intestazione){
    echo "<tr><td width=\"80\" align=\"center\" bgcolor=\"DARKBLUE\"><b><font face=\"Tahoma\" size=\"2\" color=\"WHITE\">$intestazione</td>"; 
}
//.....
?>

prova, al massimo non funzia
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
grazie borgo dopo al amssimo domani provo e ti so dire però riguardo al caso 3 cia vevo già pensato ma c'è un problema

con href prima di valore colonna, quando mi estrae i dati incolonna tutto correttamente e di nomi li trasforma i hyperlink però quando clicco sul nome ovviamente mi restituisce pagina vuota perchè nella nuova pagina non so come ricavare la variabile

faccio un esempio

PHP:
 <?php
//.....
 foreach ($linea as $valore_colonna) { 
            echo "<td><a href='htpp//sito/etc/nuovapagina'>$valore_colonna</a></td>"; 
        }
//.....
?>

in nuova pagina in sostanza ripeto il codice per estrarre i dati del nome ma quale nome?

quando vadoa fare

PHP:
SELECT * eta peso etc. FROM tabella WHERE nome=?????

in nome dovrei inserire il nome he è stato cliccato come faccioa aportare il nome scelto nell'altra apgina?

non sos e mi sono spiegato

grazie ancora della disponibilità
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
da quello che ho capito tu vuo aprire una scheda particolareggiata relativa (es) pinco pallo.
spero che ogni record della tua tabella abbia il suo id, altrimenti è un ca..no.
se hai l'id nella selct modifica
PHP:
<?php
//.....
$query = "SELECT id,Nome,Cognome,eta,altezza,peso  ORDER BY Nome"; 
//....
?>
poi nel link metti
PHP:
<?php
//.....
echo "<td><a href='htpp//sito/etc/nuovapagina.php?id=".$linea['id']."' target='_blank'>$valore_colonna</a></td>"; 
// se rimani nel tuo sito non serve l'http://ecc ma basta etc/nuovapagina.php
//....
?>
in nuovapagina.php
PHP:
<?php
$id=$_GET['id'];
//....
$query=mysql_query("SELECT * eta peso etc. FROM tabella WHERE id=$id");
//.....
?>
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
sisi borgo tutte le mie tbelle hanno l'id autoincrementante

sscusa se ti faccio doamnde frammentarie ma è difificle da spiegarti sto effettuando varie prove pechè prima di comporre lo script voglio vedere se la cosa è fattibile da inserire nel mio script

allora penso di avere materiale sufficiente per completarlo però sonoa d un blocco

Ti speigo e spero di farlo bene, pertanto mi limito a come funziona los cript

in pratica

ci sono 2 pulsanti 100 e 200 che rimandano alla pagina princiaple chiamata

Principale.php

all'interno ho creato una semplice tabella in html

dove ho incluso due file

<tr><td><?php include (fileA.php);?></td>

e
<tr><td><?php include (fileB.php);?></td>

sia nel file A che B reinvio con un input type hidden il $POST derivante dal pulsante quindi o 100 o 200 in base a cosa preme l'utente

sia nel file A apro le tabelle per l'estrrazione dati proprio in base alla variabile $POST

ora succede che quando arrivo a Principale.php vedo la tabella estratta correttaemtne ma come vado per ordianre non vedo + niente.

Allora ho fatto una prova

sono andato in fileA ho isnerito il dato manualmente invece di $variabile ho messo 200 ed ho aperto il file sul browser quindi vedevo l'estrazione della tabella e quando andavoa d ordinare mi ordinava correttamente quindi

credo che mi salta tutto perch invece di crearsi fileA.php?ord=2
si crea
Principale.php?ord=2
sono risucito ad essere chiaro?
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ok borgo scusa ma forse era la stanchezza

ho risolto al riguardo dell'ultimo post

in sostanza mi è bastato passare le variabili inget ed aggiungere &ord=1 al posto di ?ord=1

va splendidamente

ora devo provare la cosa + difficile cioè far aprire il popup o nuova finestra cliccalndo sul nome

p.s un dubbio

ho notatp che quando clicco su nome ad esempio me li ordina dalla A alla Z però ricclicando sopra non mi da dalla Z alla A

e solo una chicca quindis e c'è da spremersi fa neinte

a breve ti dico come e andata
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
Mamma mia sto forum è na cosa pazzesca

ma c'è qualcosa che non sapete fare? ;)

Allora funge tutto perfettamente(in realtà mi amnca da provare l'array dello switch) anche il flag epr scegleire solo una colonna :fonzie:

ci sono solo 3 piccole inezie che vorrei perfezionare

preciso che porei ripresentarmi epr la storia popup :)

cmq espongo

1)Vorrei che una volta ordinato dal piccolo a grande ricliccndoci sopra deve fare il contrario dal grande al piccolo

2)E possibile eliminare la sottolineatura del hyperlink?

Quella che mi interesa di più è questa

io voglio estrarre tutta la tabella in un colpo escludendo magari proprio la colonna ID e nel caso qualche altra colonna si può fare?

cioe invece di fare SELECT colonna,colonna1.....colonna10000 eseguire una query del genere
SELECT * escluso colonna 105

grazie ancora dal cuore :elvis:

@ho appena trovato il punto 2
 
Ultima modifica:

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
1) per fare in fretta ti basta usare un semplice table sorter in js;
2) per questo basta CSS, ad esempio "a{text-decoration: none;color: #0080FF}"
3)SELECT * WHERE id != 105;
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
1) per fare in fretta ti basta usare un semplice table sorter in js;
2) per questo basta CSS, ad esempio "a{text-decoration: none;color: #0080FF}"
3)SELECT * WHERE id != 105;

dopo vedo la 1

per la 2 ho un grosso(credo problema) i nomi mi escono colorati in abse a delle condizioni che ho posto usando nel comando font($color)

quindi per dire se armando ha + di 40 anni armando me lo colora di rosso

ho provato di tutte le maniere ma non c'è verso di far mantenere all'hypelrink il colore variabile


per la 3

io volgio proprio escludere la colonna ID mi spiego meglio

select *

mi estrae tutte le colonne ID Nome cognome etc.

invece io voglio far vedere nella tabella tutto tranne la colonna ID

che però mis erve epr risalire all'id

@ dimenticavo al riguardo del punto due ho provato in style a mettere color:$color ma non mi fa niente
 
Ultima modifica:

Monital

Utente Attivo
15 Apr 2009
778
2
18
si!!!... tanti soldi per vivere di rendita

;););)

bè studiate unos cript per l'enalotto ;)

cmq ho risolto quel grosso problema forse sbagliavoa d insserire lo style

PHP:
style=\"color:$color; text-decoration:none\"

cosi e andato

favoloso

mi resta il probelma ascndente deiscendete
e l'esclusione di una colonna
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
qui l'affare si ingrossa, lavorando con i get. dovresti fare un get per vedere cosa ordinare e un get per ASC o DES con la complicazione che lo script in caso di get ascendente o discendente deve ricordarsi cosa.
credo che, dato anche il consiglio del sommo eliox, forse ti convenga ripartire da zero e riscrivere il tutto secondo le tue esigenze
 
Discussioni simili
Autore Titolo Forum Risposte Data
P Ordinamento colonne PHP 2
E Ordinamento file decrescente PHP 5
L risolto visualizzazione e ordinamento dati PHP 1
D [ASP] ordinamento query Classic ASP 2
P [PHP] Ordinamento DB multitabellare PHP 2
D Mysql ordinamento risultati MySQL 4
P problema di ordinamento MySQL 17
M ordinamento array file txt in base al contenuto PHP 1
M Problema ordinamento array PHP 4
StarFish Ordinamento vettore C++ C/C++ 2
felino Ordinamento dinamico degli elementi visualizzati PHP 6
R ordinamento immagini con drag and drop e memorizzazione db PHP 1
Monital Rinominare le chiavi del multiarray dopo il suo ordinamento PHP 0
M Ordinamento Array PHP 3
E ordinamento array multidimensionale per un valore ottenuto tramite una funzione PHP 1
E JQRY + XML piccola rubrica con ordinamento e raggruppamento jQuery 1
P Sort di un array da ordinamento fisso PHP 4
D Ordinamento div HTML e CSS 12
A ordinamento PHP o MySql PHP 2
H Ordinamento dati da xml Flash 0
H Piccola applicazione per News con Php, Xml e Flash: problema ordinamento. XML 0
N Ordinamento in PHP PHP 5
Z query sql e script php per ordinamento dati tabella PHP 2
G Miglior ordinamento delle voci in un file css? HTML e CSS 3
M URGENTE: ORDINAMENTO LESSICOGRAFICO STRINGHE CON MERGESORT ricorsivo IN C (non C++) C/C++ 1
N Ordinamento Dati Database Classic ASP 2
matteoraggi Come cancellare le colonne di wordpress WordPress 0
E Tabella righe e colonne PHP 0
T colonne di tabelle mysql ordinate MySQL 0
M Esportare tabella in csv con intestazione di colonne PHP 6
max1974 raggruppare e girare i dati in colonne MySQL 11
A Somma delle colonne di una tabella pivot Database 6
S [PHP] Selezionare i campi non in comune con le altre colonne della tabella PHP 4
S [MS Access] Report con colonne duplicate MS Access 0
GraceHawk ACCESS e VBA: scorrere le righe e le colonne di una tabella? MS Access 3
S [PHP] selezionare colonne in comune con un altra tabella PHP 5
F [HTML] Google fogli ordinare per colonne HTML e CSS 0
Kolop [HTML] Menu a colonne stessa lunghezza HTML e CSS 7
A [HTML] due colonne responsive HTML e CSS 1
elpirata [PHP] Query per ricercare stringa in più colonne PHP 5
U [PHP - RISOLTO] Tabella dinamica: colonne selezionate da checkbox PHP 40
S [Javascript] Slider html: Mostrare immagini su 4 colonne Javascript 20
elpirata [PHP] Larghezza colonne Fpdf PHP 0
fabryx [PHP]RISOLTO: Trasformare righe in colonne assegnando singole variabili PHP 10
S [PHP] Selezionare tutte le colonne meno due PHP 6
P [HTML] [PHP] dividere lo schermo in tre colonne HTML e CSS 110
A Footer a 6 colonne equistanziato e centrato HTML e CSS 1
S Come estrapolare nomi colonne tabella e affiancare Input Radio PHP 16
K div a due colonne e div annidati HTML e CSS 17
neo996sps [PHP + MySQL] Tabella 5 colonne per N righe con un record per cella PHP 3

Discussioni simili