php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 31.05.2005, 10:53  
Gast
 
Beiträge: n/a
Standard ausgegebene Tabelle über Links sortieren?

Hallo!

Ich habe eine Frage - ich lasse mir eine Tabelle (aus MySQL) anzeigen und würde nun gerne bei Klick auf die Überschrift (mittels Link) die Spalten sortieren.

Momentan sieht das ganze so aus:

Code:
<table border='1' align='center'>
 <tr>
  <td class='SiteText'>ID</td>
  <td class='SiteText'>Auftragsnummer</td>
  <td class='SiteText'>Art</td>
  <td class='SiteText'>Seriennummer</td>
  <td class='SiteText'>Problem</td>
  <td class='SiteText'>Beschreibung</td>
  <td class='SiteText'>Bearbeiter</td>
</tr>

<?php
  $DBConn = new jf_db("mysql");
  
  $DBConn->jf_Query(  
  "SELECT
    tbl_reklamation.ID,
    tbl_reklamation.Auftragsnummer,
    tbl_arttypen.Art,
    tbl_reklamation.Seriennummer,
    tbl_problem.Problem,
    tbl_problem.Beschreibung,
    tbl_bearbeiter.Name,
  FROM
    tbl_reklamation,
    tbl_arttypen,
    tbl_bearbeiter,
 WHERE
    tbl_reklamation.Art=tbl_arttypen.ID AND
    tbl_reklamation.BearbeiterID=tbl_bearbeiter.ID AND
    tbl_reklamation.ProblemID=tbl_problem.ID AND

  );
  
  $DBConn->jf_First();
  
  for ($i=1; $i <= $DBConn->jf_AffectedRows(); $i++) {
    echo "<tr class='OverviewItem'>";
      echo "<td class='SiteText'>".$DBConn->jf_FieldByName("ID")."</td>";
      echo "<td class='SiteText'>".$DBConn->jf_FieldByName("Auftragsnummer")."</td>";
      echo "<td class='SiteText'>".$DBConn->jf_FieldByName("Art")."</td>";
      echo "<td class='SiteText'>".$DBConn->jf_FieldByName("Seriennummer")."</td>";
      echo "<td class='SiteText'>".$DBConn->jf_FieldByName("Problem")."</td>";
      echo "<td class='SiteText'>".$DBConn->jf_FieldByName("Beschreibung")."</td>";
      echo "<td class='SiteText'>".$DBConn->jf_FieldByName("Name")."</td>";
      echo "</tr>";
    $DBConn->jf_Next();
  }

?>
</table>
Aber wie realisiere ich das? Dass oben sowas rein muss wie "<a href="<?=$PHP_SELF?>?sort=desc>absteigend sortieren</a>" ist mir klar, aber wie geht's weiter?
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 31.05.2005, 10:55  
Erfahrener Benutzer
 
Registriert seit: 25.02.2004
Beiträge: 1.524
Orolhawion
Standard

ja und? wo is das problem?
__________________
"die Mitte des Textes kann ja theor. mitten in einem Text liegen"

http://www.jagr.de/
Orolhawion ist offline  
Alt 31.05.2005, 11:16  
Erfahrener Benutzer
 
Registriert seit: 17.08.2004
Beiträge: 213
carrib befindet sich auf einem aufstrebenden Ast
Standard

Hi!

Dann verwende die Spaltenköpfe als Links für die Sortierung und übergebe je nach Spaltenkopf einen Wert der das für die Sortierung zu verwendende Feld definiert. Den Feldnamen direkt als Parameterwert zu verwenden und in die SQL Query einzubauen ist in Bezug auf SQL Injection strickt abzulehnen (daher der Umweg mittels switch).

Bsp. der HTML Code im Spaltenkopf:
Code:
Auftragsnummer auf/ab 
Im Script (bevor die Query ausgeführt wird):
Code:
if(!isset($_REQUEST['sortby'])) $_REQUEST['sortby'] = 0;
switch(intval($_REQUEST['sortby'])) {
  0: $sort_field = 'tbl_reklamation.ID'; break;
  1: $sort_field = 'tbl_reklamation.Auftragsnummer'; break;
  // ... usw ...
  default: $sort_field = 'tbl_reklamation.ID';
}

if(!isset($_REQUEST['sortorder'])) $_REQUEST['sortorder'] = 0;
switch(intval($_REQUEST['sortorder'])) {
  0: $sort_order = 'ASC';
  1: $sort_order = 'DESC';
  default: $sort_order = 'ASC';
}
Dann noch die Query um ORDER BY erweitern:
Code:
$DBConn->jf_Query(  
  "SELECT 
    tbl_reklamation.ID, 
    tbl_reklamation.Auftragsnummer, 
    tbl_arttypen.Art, 
    tbl_reklamation.Seriennummer, 
    tbl_problem.Problem, 
    tbl_problem.Beschreibung, 
    tbl_bearbeiter.Name, 
  FROM 
    tbl_reklamation, 
    tbl_arttypen, 
    tbl_bearbeiter, 
 WHERE 
    tbl_reklamation.Art=tbl_arttypen.ID AND 
    tbl_reklamation.BearbeiterID=tbl_bearbeiter.ID AND 
    tbl_reklamation.ProblemID=tbl_problem.ID 
 ORDER BY
    ".$sort_field." ".$sort_order."
  );
Und das war's. Kannst Du noch schöner regeln in dem die Links für die Sortierung dynamisch erzeugt/anzeigt werden (bsp. wenn aktuelle Sortierung Auftragsnummer aufsteigend wird nur Auftragsnummer absteigend angezeigt), etc. aber den Zweck erfüllt es und nachhvollziehbar sollte es auch sein.
carrib ist offline  
Alt 31.05.2005, 11:23  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Schau dir diese Beispiel (aus einer Adressverwaltung) an. Hier wird zwar nicht mit Klick auf den Titel sortiert, sondern mit einem kleinen Symbol daneben. Je nach Sortierung ändert sich das Symbol.
PHP-Code:
<?php
    
echo "<form action='menu.php' method='POST'>\n";
    if (!isset(
$_GET['sort']))
    {
        
$asort 'a.anr';
        
$sort 'anr';
        
$onr 0;
    }
    else
    {
        
$sort $_GET['sort'];
        
$asort = ($sort == 'ort') ? "p.$sort" "a.$sort";
        
$onr = ($_GET['onr'] + 1) % 2;
    }
    
$classes = array('#FFFFCC''#FFFF66');
    
$order = array("ASC""DESC");
    
$gifs = array('sortup.gif''sortdown.gif''sortup_pass.gif''sortdown_pass.gif');
    
$stmt "SELECT DISTINCT a.adr_nr ANr, a.vorname, a.name, a.zusatz, a.strasse, a.plz, p.ort
             FROM adresse a, plz p, org_zuo o
             WHERE a.plz = p.plz and a.land = p.land and a.p_laufnr = p.lfnr
               AND o.o_key in (" 
$_SESSION['org'] . ") AND o.a_key = a.adr_nr
               AND o.s_key in (" 
implode(', '$_SESSION['status']) . ")
             ORDER BY $asort $order[$onr]"
;
//echo "$stmt
n";
    $prozent = array(5, 10, 15, 10, 15, 5, 10);
    $res = mysql_query($stmt) or die("
Fehler" . mysql_error());
    echo "
<table align='center' cellpadding='5' width='100%'>n<tr>";
    for ($i = 0;$i < mysql_num_fields($res);$i ++)
    {
        $feld = mysql_field_name($res, $i);
        echo "
<th width='$prozent[$i]%'>[b]" . ucfirst($feld) . "[/b]";
        if (strtolower($feld) == strtolower($sort)) $pnr = $onr;
        else $pnr = $onr + 2;
        echo "
[url='$SELF?sort=$feld&onr=$onr']<img src=Pics/$gifs[$pnrborder='0'>[/url]</th>n";
    }
    echo "
<th width='5%'>Details</th><th width='5%'>&Auml;ndern</th><th width='5%'>L&ouml;schen</th></tr>n";
    while($row = mysql_fetch_row($res))
    {
        echo "
<tr>";
        $col = ($col + 1 ) % 2;
        for ($i = 0;$i < mysql_num_fields($res);$i ++)
        {
            echo "
<td style='background-color:$classes[$col]'>$row[$i]</td>n";
        }
        echo "
<td style='background-color:$classes[$col]' align='center'>n";
        echo "
[url='details.php?id=$row[0]'][img]Pics/details.gif[/img][/url]";
        echo "
<td style='background-color:$classes[$col]' align='center'>n";
        echo "
[url='edit.php?id=$row[0]'][img]Pics/edit.gif[/img][/url]";
        echo "
<td style='background-color:$classes[$col]' align='center'>n";
        echo "
[url='delete.php?id=$row[0]'][img]Pics/delete.gif[/img][/url]";
        echo "
</tr>n";
    }
    echo "
</form>n";
?>
Ich denke die Grundidee lässt sich durchaus auf dein Beispiel übertragen.
__________________
Gruss
L
lazydog ist offline  
Alt 31.05.2005, 11:46  
Gast
 
Beiträge: n/a
Standard

@carrib
Da bringt er mir einen Fehler:
"Parse error: syntax error, unexpected T_LNUMBER, expecting T_CASE or T_DEFAULT or '}' in C:\...\admin_overview.inc.php on line 23"

PHP-Code:
<?php
  $DBConn 
= new jf_db("mysql");
  
  if(!isset(
$_REQUEST['sortby'])) $_REQUEST['sortby'] = 0;
    switch(
intval($_REQUEST['sortby'])) {
      
0$sort_field 'tbl_reklamation.ID'; break; //das ist Zeile 23
//...
?>
 
Alt 31.05.2005, 12:22  
Erfahrener Benutzer
 
Registriert seit: 27.10.2003
Beiträge: 530
Thice
Standard

Syntax?!
PHP-Code:
<?php
  $DBConn 
= new jf_db("mysql");
 
  if(!isset(
$_REQUEST['sortby'])) $_REQUEST['sortby'] = 0;
    switch(
intval($_REQUEST['sortby'])) {
      case 
0$sort_field 'tbl_reklamation.ID'; break; //das ist Zeile 23
//...
?>
Bei dir fehlte das case!!
__________________
kintzebros.de | KintzeBros Home Entertainment
2061. Nach dem Frieden | kurzfilm
Paula | spielfilm
Thice ist offline  
Alt 31.05.2005, 12:39  
Gast
 
Beiträge: n/a
Standard

oh *vor Stirn patsch*
sorry ... bin wohl nicht ganz bei der Sache
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
dynamische Tabelle sortieren Supeede PHP-Fortgeschrittene 11 29.01.2008 08:48
tabelle sortieren mit php? Thuata PHP Tipps 2008 6 26.09.2007 13:46
[Problem selbst gelöst] Sortieren über 2 Tabellen Alpha Centauri Datenbanken 1 04.04.2006 16:37
Problem mit Anzeige einer Tabelle mit dem Firefox? HTML, Usability und Barrierefreiheit 8 28.11.2005 15:08
Tabelle ganz links lalala HTML, Usability und Barrierefreiheit 1 06.07.2005 14:29
Tabelle nach Datum sortieren? PHP Tipps 2005 10 29.03.2005 16:02
Links sortieren Simon9990 PHP Tipps 2005 5 28.01.2005 23:03
Sortieren einer Tabelle woods Datenbanken 4 02.12.2004 20:02
PHP & Mysql tabelle sortieren PHP Tipps 2004 1 03.11.2004 15:51
Sortieren anhand einer zweiten Tabelle PHP Tipps 2004 6 20.09.2004 09:03
Tabelle auslesen und sortieren lassen PHP Tipps 2004 4 02.09.2004 11:24
Tabelle mit Links farblich verändern HTML, Usability und Barrierefreiheit 7 30.08.2004 20:41
Tabelle mit überwachten Links PHP Tipps 2004 3 12.08.2004 18:42
Sortieren einer Tabelle mit den Werten aus einer anderen Tab Datenbanken 5 04.08.2004 18:09
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
link in mit php ausgegebener html seite, links sortieren, php tabelle asort, ausgegebene reihe php als link, tabelle per link sortieren, ausgegebene tabelle sortieren, ausgegebene tabellen sortieren, link sort, php tabellen sortierung mit header, ausgegebene liste sortieren php, jf_query php, php tabelle sortieren, , 1, $_get[\'sort\']); switch, php sortierfunktion anhand eines status, tabellen per link sortieren, link sortierer, asort tabelle, <a href=\<?=$php_self?>?sort=desc>absteigend sortieren\</a>, ausgegebene mysql sortieren link

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.