PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Tabelle per Klick sortieren (http://www.selfphp.de/forum/showthread.php?t=10789)

Max_04 16.06.2005 03:36:58

Tabelle per Klick sortieren
 
Hallo Leute.

Alle Suche und experimentieren hat nichts geholfen. Vermutlich sehe ich den Wald vor lauter Bäumen nicht.
Ich hab folgendes Prob.

Ich lasse per php eine Tabelle dynamisch generieren.
Die Daten für die Tabelle werden in txt-Dateien abgelegt. D.h. sie kommen nicht
aus einer Datenbank. Für jede Zeile wird eine einzelne Datei angelegt.

Jetzt mein Problem, die Zeilen der Tabelle werden erst mal nach ihrem eingabealter
aufgelistet. Also die zu letzt eingegebenen Daten werden als erste Zeile (nach der kopfzeile die fest besteht) ausgegeben.
Will ich aber nicht. Die Tabelle soll zum Beispiel nach Spalte 4 sortiert angezeigt werden.
Und zum anderen möchte ich diese dann mit Klick auf die Spaltenüberschrift nach der entsprechenden Spalte sortieren lassen. Ein neu Laden der Seite ist dabei akzeptabel.

So sieht das ganze aus bis jetzt aus: (ohne Sortierexperiment)
PHP-Code:

<body>
<div align="center"> 
  <p class="Ueberscrift">Mitgliederverzeichnis</p>
  <table align="center" cellpadding="0" class="TabelleVerzeichnis" id="table0">
    <tr> 
      <td width="130" height="30" class="Tabellenueberschrift"> <div align="center">Name</div></td>
      <td width="80" height="30" class="Tabellenueberschrift"> <div align="center">Vorname</div></td>
      <td width="80" height="30" class="Tabellenueberschrift"> <div align="center">Codename</div></td>
      <td width="60" class="Tabellenueberschrift"> <div align="center">Bereich</div></td>
      <td width="60" height="30" class="Tabellenueberschrift"> <div align="center">Email</div></td>
      <td width="110" height="30" class="Tabellenueberschrift"> <div align="center">Handy</div></td>
      <td width="80" height="30" class="Tabellenueberschrift"> <div align="center">Status</div></td>
      <td width="60" height="30" class="Tabellenueberschrift"> <div align="center">Zugang</div></td>
      <td width="90" height="30" class="Tabellenueberschrift"> <div align="center">Mitglied 
          seit</div></td>
    </tr>
    <?php
require ('config.php');
$dateianzahl=fopen("news_kommentare/anza.hl","r");
$anzahly=intval(fgets($dateianzahl,10000));
fclose($dateianzahl);

$dateianzahl=fopen("artikel/anza.hl","r");
$anzahl=intval(fgets($dateianzahl,10000));

$readin=array();

$x=0;
for(
$i=$anzahl;$i>-1;$i--) {
    
$k=0;
    if(
file_exists("artikel/".$i.".atk")){
        for(
$y=$anzahly;$y>-1;$y--) {
            if(
file_exists("news_kommentare/".$i."_".$y.".atk"))$k++;
        }

        
//$commentanzahl=$k;
        
include "artikel/".$i.".atk";
        
$readin[$x][]=stripslashes($usname);
        
$readin[$x][]=stripslashes($usvorname);        
        
$readin[$x][]=stripslashes($uscode);
        
$readin[$x][]=stripslashes($usbereich);
        
$readin[$x][]=stripslashes($usemail);
        
$readin[$x][]=stripslashes($ushandy);
        
$readin[$x][]=stripslashes($usstatusaktiv);
        
$readin[$x][]=stripslashes($usstatusinaktiv);
        
$readin[$x][]=stripslashes($usstatusunklar);
        
$readin[$x][]=stripslashes($usstatusaus);
        
$readin[$x][]=stripslashes($usstatusgek);        
        
$readin[$x][]=stripslashes($uszugangja);
        
$readin[$x][]=stripslashes($uszugangnein);
        
$readin[$x][]=stripslashes($usseit);
        
$readin[$x][]=$i;
        
$readin[$x][]=$k;
        
$x++;
    }
}

if(isset(
$_GET['page'])) $page=intval($_GET['page']);
else 
$page=0;

for(
$x=($page)*$perpage;$x<(($page)*$perpage+$perpage) && $x<sizeof($readin);$x++){
    
$usname=$readin[$x][0];
    
$usvorname=$readin[$x][1];
    
$uscode=$readin[$x][2];
    
$usbereich=$readin[$x][3];
    
$usemail=$readin[$x][4];
    
$ushandy=$readin[$x][5];
    
$usstatusaktiv=$readin[$x][6];
    
$usstatusinaktiv=$readin[$x][7];
    
$usstatusunklar=$readin[$x][8];
    
$usstatusaus=$readin[$x][9];
    
$usstatusgek=$readin[$x][10];
    
$uszugangja=$readin[$x][11];
    
$uszugangnein=$readin[$x][12];
    
$usseit=$readin[$x][13];
    
$i=$readin[$x][14];
    include 
"template_index.php";

}
?>
</table>
  <p>V = Vorstand<br>
    M = Mitglied</p>
</div>
<? echo $menu; ?>
</body>

Ich weiß das es da funktionen wie "sort" "nasort" usw. gibt. Komme aber irgendwie nich richtig klar damit. Hab sicherlich en Denkfehler drin.
Danke schon mal für Eure Hilfe.

meikel (†) 16.06.2005 07:11:43

AW: Tabelle per Klick sortieren
 
> Hab sicherlich en Denkfehler drin.

Ich verstehe ehrlich gesagt nicht, warum Du für sowas keine SQL-Datenbank verwendest, die sowas bestens mit einer Anweisung erledigt.

c4 16.06.2005 08:30:35

AW: Tabelle per Klick sortieren
 
Wenn Du mit JavaScript spielen darfst, dann wäre das was:
--> http://webfx.eae.net/dhtml/tablesort/tablesort.html

Ansonsten ist MySQL natürlich die einzig wahre Lösung.

vestine 16.06.2005 10:52:32

AW: Tabelle per Klick sortieren
 
Hallo,
für dein Fall wäre vielleicht die Funktion Array-Multisort interessant

Max_04 16.06.2005 15:20:22

AW: Tabelle per Klick sortieren
 
Ok, hab es jetzt mit "sort" bzw "rsort" hinbekommen.

PHP-Code:

$readin=array();

$x=0;
for(
$i=$anzahl;$i>-1;$i--) {
    
$k=0;
    if(
file_exists("artikel/".$i.".atk")){
        for(
$y=$anzahly;$y>-1;$y--) {
            if(
file_exists("news_kommentare/".$i."_".$y.".atk"))$k++;
        }

        
//$commentanzahl=$k;
        
include "artikel/".$i.".atk";
        
$readin[$x][]=stripslashes($usname);
        
$readin[$x][]=stripslashes($usvorname);        
        
$readin[$x][]=stripslashes($uscode);
        
$readin[$x][]=stripslashes($usbereich);
        
$readin[$x][]=stripslashes($usemail);
        
$readin[$x][]=stripslashes($ushandy);
        
$readin[$x][]=stripslashes($usstatusaktiv);
        
$readin[$x][]=stripslashes($usstatusinaktiv);
        
$readin[$x][]=stripslashes($usstatusunklar);
        
$readin[$x][]=stripslashes($usstatusaus);
        
$readin[$x][]=stripslashes($usstatusgek);        
        
$readin[$x][]=stripslashes($uszugangja);
        
$readin[$x][]=stripslashes($uszugangnein);
        
$readin[$x][]=stripslashes($usseit);
        
$readin[$x][]=$i;
        
$readin[$x][]=$k;
        
$x++;
    }
}

if(isset(
$_GET['page'])) $page=intval($_GET['page']);
else 
$page=0;
sort ($readin);


for(
$x=($page)*$perpage;$x<(($page)*$perpage+$perpage) && $x<sizeof($readin);$x++){
    
$usname=$readin[$x][0];
    
$usvorname=$readin[$x][1];
    
$uscode=$readin[$x][2];
    
$usbereich=$readin[$x][3];
    
$usemail=$readin[$x][4];
    
$ushandy=$readin[$x][5];
    
$usstatusaktiv=$readin[$x][6];
    
$usstatusinaktiv=$readin[$x][7];
    
$usstatusunklar=$readin[$x][8];
    
$usstatusaus=$readin[$x][9];
    
$usstatusgek=$readin[$x][10];
    
$uszugangja=$readin[$x][11];
    
$uszugangnein=$readin[$x][12];
    
$usseit=$readin[$x][13];
    
$i=$readin[$x][14];
    include 
"template_index.php"

Trotzdem noch zwei Probleme.
Wenn ich die Funktion "sort" aufrufe sortiert er grundsätzlich nach dem ersten

PHP-Code:

$readin[$x][]=stripslashes($usname); 

was in der Liste steht.
Wie muß ich es anstellen, das er z.B. nach

PHP-Code:

$readin[$x][]=stripslashes($usbereich); 

sortiert? Was hier
PHP-Code:

        include "artikel/".$i.".atk";
        
$readin[$x][]=stripslashes($usname);
        
$readin[$x][]=stripslashes($usvorname);        
        
$readin[$x][]=stripslashes($uscode);
        
$readin[$x][]=stripslashes($usbereich);
        
$readin[$x][]=stripslashes($usemail);
        
$readin[$x][]=stripslashes($ushandy);
        
$readin[$x][]=stripslashes($usstatusaktiv);
        
$readin[$x][]=stripslashes($usstatusinaktiv);
        
$readin[$x][]=stripslashes($usstatusunklar);
        
$readin[$x][]=stripslashes($usstatusaus);
        
$readin[$x][]=stripslashes($usstatusgek);        
        
$readin[$x][]=stripslashes($uszugangja);
        
$readin[$x][]=stripslashes($uszugangnein);
        
$readin[$x][]=stripslashes($usseit);
        
$readin[$x][]=$i;
        
$readin[$x][]=$k;
        
$x++; 

weiter unten steht
Und, wie kann ich es anstellen, das ich die Sortierung interaktiv steuern lassen kann.
Zu gut deutsch, Mit Klick auf die Überschrift sortiert er die Spalte. Wie lautet denn dann der Aufruf. Ich kann ja nicht für alle Spalten ne eigene index.php erstellen. Oder muß ich das?

@c4 ich wollte eigentlich JavaScrip hier raus halten, zum anderen blicke ich bei den Script nicht ganz durch.

c4 16.06.2005 15:22:35

AW: Tabelle per Klick sortieren
 
Überlass die Sortierung einfach MySQL. Das geht schneller, macht schöneren Code, wartet sich einfacher und ist am vernünftigsten!

Max_04 16.06.2005 16:52:07

AW: Tabelle per Klick sortieren
 
@c4
Jo, glaub ich Dir. Das Prob. mit sql-Datenbanken kenne ich mich noch nicht so aus.
Bin froh, das ich diesen code zum laufen gebracht habe.
Ne Datenbank steht mir zwar zur Verfügung, wie ich da was einfüge und anlege is auch klar, nur die Interaktion dann mit der php-Datei, da haperts.
Zum anderen will ich diese Code weiter verwenden.
Habe mehrere html-Seiten mit Tabellen mit jeweils fast 100-200 Zeilen mit Daten. Die alle in ne sql-Datenb. zu übertragen, nö... das is Irrsinn.
Aus ner html ne text-datei zu machen und nur die Daten die ich brauch rauszuselektieren ist einfacher.

Max_04 17.06.2005 04:20:50

AW: Tabelle per Klick sortieren
 
Ok, das mit dem Multisort ist nicht ganz das ware für mein Zwecke.
Ich hab nen JS eingedunden.

http://webfx.eae.net/dhtml/tablesort/tablesort.html

Funktioniert supi.

@c4
Trotzdem Danke für den Tip mit der sql-Dat.
Vielleicht steig ich irgendwann mal um ;-)


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:28:46 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.