php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 18.09.2008, 10:45  
Neuer Benutzer
 
Registriert seit: 18.09.2008
Beiträge: 9
vtx-rider befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Tabelle über Spalten sortieren

Hallo zusammen

Ich bin neu hier (und auch relativ unerfahren, was PHP und MySQL) anbetrifft.

In den letzten zwei Tagen (bzw. Nächten) habe ich versucht, eine Funktion zu "basteln", mit welcher man eine gegebene Tabelle mit Klick auf den Tabellenkopf auf- oder absteigend sortieren kann. Das soll bei jeder Spalte möglich sein.

Im Moment habe ich es ganz unelegant so gelöst, indem ich die ganze Seite 8x dupliziert und dann auf jeder Seite die Sortierung geändert habe. Ziemlich umständlich und mühsam. Das Ergebnis seht ihr hier.

Das geht bestimmt professioneller und eleganter! Nur wie?

Folgenden Code habe ich mal gebastelt (bzw. "ergoogelt):

====Code====

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php
include ("dbconnect.php");
?>
</head>
<body>
<?php
function direction($dir)
{
if($dir="ASC")
{
return "DESC";
}
else
{
return "ASC";
}
}
if($sort)
{
$dir=direction($dir);
$abfrage="SELECT f0, f1, f6, f9, f11, f13, f15, f16 ORDER BY $sort $dir";
}
else
{
$abfrage="select f0, f1, f6, f9, f11, f13, f15, f16 FROM user1_3 ORDER BY f1";
}
$ergebnis = mysql_query($abfrage)or die("Anfrage fehlgeschlagen: " . mysql_error());
?>
<p></p>
<table width="700" border="0" bordercolor="#FFFFCC" >
<tr>
<td nowrap="nowrap" bordercolor="#FFFFCC"><strong> <?php echo "<a href= 'test3.php?sort=$dir\'>Nachname</a>" ?></strong></td>
<td nowrap="nowrap" bordercolor="#FFFFCC"><strong>Vorname</strong></td>
<td nowrap="nowrap" bordercolor="#FFFFCC"><strong>Motorrad</strong></td>
<td nowrap="nowrap" bordercolor="#FFFFCC"><strong>Anz. Pers.</strong></td>
<td nowrap="nowrap" bordercolor="#FFFFCC"><strong>Zimmer</strong></td>
<td nowrap="nowrap" bordercolor="#FFFFCC"><strong>Anreise</strong></td>
<td nowrap="nowrap" bordercolor="#FFFFCC"><strong>Abreise</strong></td>
</tr>
<?php
while ($result = mysql_fetch_array($ergebnis)){
?>
<tr>
<td align="left" nowrap="nowrap" bordercolor="#FFFFCC"><?=$result['f1']?></td>
<td align="left" nowrap="nowrap" bordercolor="#FFFFCC"><?=$result['f0']?></td>
<td align="left" nowrap="nowrap" bordercolor="#FFFFCC"><?=$result['f9']?></td>
<td align="left" nowrap="nowrap" bordercolor="#FFFFCC"><?=$result['f11']?></td>
<td align="left" nowrap="nowrap" bordercolor="#FFFFCC"><?=$result['f13']?></td>
<td align="left" nowrap="nowrap" bordercolor="#FFFFCC"><?=$result['f15']?></td>
<td align="left" nowrap="nowrap" bordercolor="#FFFFCC"><?=$result['f16']?></td>
</tr>
<?php
}
?>
</table>
<?php mysql_close($connection);?>
<p>&nbsp;</p>
</body>
</html>

====Code Ende====

Ich habe hier alles Überflüssige weggelassen und nur den Code für die Tabelle aufgeführt.

Fragt bitte nicht, weshalb die Felder keine selbsterklärende Namen haben, sondern f0, f1, f2 etc. heissen. Ist so, und ich kann's leider nicht ändern.

Ich habe das ganze mal "test3.php" benannt, und wie ihr hier seht, funktioniert der Code auch ohne Fehlermeldung - aber die Sortierung wird eben auch nicht gemacht.

Ich bin für jede Hilfe dankbar!

Gruss, vtx-rider
vtx-rider ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 18.09.2008, 11:35  
Erfahrener Benutzer
 
Registriert seit: 28.03.2008
Beiträge: 1.847
HPR1974 wird schon bald berühmt werden
Standard

also ich les mal nicht durch was Du da fabriziert hast, aber deine vorgehensweise kann so sein:
in deinem link in der tabelle gibst Du 2 parameter mit
zb:
?sort_col=f1&sort_dir=desc
dann machst Du Deine Abfrage wie folgt:
$abfrage="select f0, f1, f6, f9, f11, f13, f15, f16 FROM user1_3 ORDER BY ".$_GET['sort_col']." ".$_GET['sort_dir'];
Natürlich solltest Du noch das incoming data überprüfen auf alles Inhalt, dass Dir keine einen schlechten scherz spielt...
Stichwort: SQL injection
HPR1974 ist offline  
Alt 18.09.2008, 16:02  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
also ich les mal nicht durch was Du da fabriziert hast,
Dito. Editiere doch bitte das Posting und ergänze [php] Tags.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 18.09.2008, 18:12  
Neuer Benutzer
 
Registriert seit: 18.09.2008
Beiträge: 9
vtx-rider befindet sich auf einem aufstrebenden Ast
Standard

Danke schon mal.

Der erste Vorschlag hat nicht funktioniert (ich erhalte einen leeren Bildschirm, aber auch keine Fehlermeldung). Ausserdem möchte ich ja die Sortierrichtung mit jedem Klick immer umkehren können.

Ich versuche den Code mal zu editieren:

1. Ich habe eine Funktion, welche die Sortierrichtung steuert.

====Code====
<?php
function direction($dir)
{
if($dir ="ASC"){
return "DESC";
}else{
return "ASC";
}
}
?>
====Code Ende====

2. Dann folgt die Abfrage mit einer If-Anweisung
Die Bedingung "If($sort)" überprüft, ob die Variable $sort mit einem Wert gefüllt ist.
Wenn ja, wird der ja-Zweig der if-Abfrage ausgeführt. Die Tabelle wird so ausgegeben, dass die Spalte, deren Tabellenkopf angeklickt wurde, sortiert ausgegeben wird. Wenn nein, wird die Abfrage in der Standardsortierung ausgegeben.

====Code====
<?php
if($sort){
$dir=direction($dir);
$ergebnis=mysql_query("SELECT f0, f1, f6, f9, f11, f13, f15, f16 FROM user1_3 ORDER BY $sort $dir");
}else{
$ergebnis=mysql_query("SELECT f0, f1, f6, f9, f11, f13, f15, f16 FROM user1_3");
}
?>
====Code Ende====

3. Im Tabellenkopf folgt der Link
Hier soll auf Klick die Sortierung nach dieser Spalte erfolgen, wobei bei jedem Klick die Sortierrichtung um gekehrt wird.

====Code====
<?php echo "<a href= 'test3.php?sort=$ergebnis[f1]&dir=$dir'>Nachname</a>" ?>
====Code Ende====

Wenn ich das ganze teste, wird die Tabelle richtig ausgegeben. Auch der Link im Tabellenkopf ist da. Nur wenn ich ihn anklicke, wird nicht sortiert. Fehlermeldung gibt es keine.

Das Resultat könnt ihr hier sehen. Bei Klick auf den Tabellenkopf erscheint in der Browserzeile Folgendes: "http://www.vtx-treffen.ch/test3.php?sort=&dir=". Eine Fehlermeldung gibt es aber nicht.

Ich hoffe, meine Frage ist nun klarer geworden. Wahrscheinlich liegt es nur an einem kleinen Detail... aber ich komme nicht drauf.
vtx-rider ist offline  
Alt 18.09.2008, 18:15  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Editiere doch bitte das Posting und ergänze [php] Tags.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 18.09.2008, 18:24  
Neuer Benutzer
 
Registriert seit: 18.09.2008
Beiträge: 9
vtx-rider befindet sich auf einem aufstrebenden Ast
Standard

Was meinst du damit?
vtx-rider ist offline  
Alt 18.09.2008, 22:04  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

PHP-Code:
//[noparse]
echo 'in diesem Board kann Code durch [php] formatiert ausgegeben werden';
// es existiert auch ein Button.
//[/noparse] 
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 19.09.2008, 09:18  
Neuer Benutzer
 
Registriert seit: 18.09.2008
Beiträge: 9
vtx-rider befindet sich auf einem aufstrebenden Ast
Standard

Also nochmals...

Ziel ist, die Tabelle auf der fraglichen Seite durch Klick auf den jeweiligen Spaltenkopf neu zu sortieren. dabei soll bei jedem erneuten Klick die Sortierrichtung wieder umgekehrt werden.

Das möchte ich in drei Schritten erreichen.

1. Funktion für die Steuerung der Sortierrichtung
PHP-Code:
<?php
function direction($dir//Funktion, welche die Sortierrichtung steuert
{
if(
$dir ="ASC"){
      return 
"DESC";
 }else{
           return 
"ASC";
         }
}
?>


2. MYSQL-Abfrage

Die MYSQL-Abfrage ist mit einer If-Anweisung verbunden: Es soll geprüft werden, ob die Variable $sort mit einem Wert gefüllt ist.
Wenn ja, soll der ja-Zweig der if-Abfrage ausgeführt. Die Tabelle wird dann so ausgegeben, dass die Spalte, deren Tabellenkopf angeklickt wurde, sortiert ausgegeben wird. Wenn nein, wird die Abfrage in der Standardsortierung ausgegeben.

PHP-Code:
 <?php
 
if($sort){ //Prüfung, ob $sort mit einem Wert gefüllt ist
     
$dir=direction($dir); //Inhalt von $dir aufrufen
     
$ergebnis=mysql_query("SELECT f0, f1, f6, f9, f11, f13, f15, f16 FROM user1_3 ORDER BY $sort $dir"); //DB-Abfrage sortiert nach $sort und $dir
 
}else{ //Falls $sort leer ist
         
$ergebnis=mysql_query("SELECT f0, f1, f6, f9, f11, f13, f15, f16 FROM user1_3"); //DB-Abfrage, Standard-Sortierung
         
}
 
?>
3. Link im Spaltenkopf
Im Spaltenkopf folgt der Link. Hier soll auf Klick die Sortierung nach dieser Spalte erfolgen, wobei bei jedem Klick die Sortierrichtung um gekehrt wird.

Soweit ich das überblicke, liegt das Problem hier.

PHP-Code:
<?php
echo "<a href= 'test3.php?sort=$ergebnis[f1]&dir=$dir'>Nachname</a>" //Link, der die Seite mit der neuen Sortierung neu  aufruft
?>
Wenn ich das ganze teste, wird die Tabelle richtig ausgegeben. Auch der Link im Tabellenkopf ist da. Nur wenn ich ihn anklicke, wird nicht sortiert. Fehlermeldung gibt es keine.

Das Resultat könnt ihr hier sehen. Bei Klick auf den Tabellenkopf erscheint in der Browserzeile Folgendes: "http://www.vtx-treffen.ch/test3.php?sort=&dir=". Eine Fehlermeldung gibt es aber nicht.
vtx-rider ist offline  
Alt 19.09.2008, 09:25  
Erfahrener Benutzer
 
Registriert seit: 28.03.2008
Beiträge: 1.847
HPR1974 wird schon bald berühmt werden
Standard

<?php
echo "<a href= 'test3.php?sort=$ergebnis[f1]&dir=$dir'>Nachname</a>"
//Link, der die Seite mit der neuen Sortierung neu aufruft
?> ergibt:

Teilnehmerliste Ride-In 2009=
das heisst Deine Variablen $ergebnis[f1] und $dir sind leer, bzw. nicht gesetzt
HPR1974 ist offline  
Alt 19.09.2008, 11:04  
Neuer Benutzer
 
Registriert seit: 18.09.2008
Beiträge: 9
vtx-rider befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von HPR1974 Beitrag anzeigen
<?php
echo "<a href= 'test3.php?sort=$ergebnis[f1]&dir=$dir'>Nachname</a>"
//Link, der die Seite mit der neuen Sortierung neu aufruft
?> ergibt:

Teilnehmerliste Ride-In 2009=
das heisst Deine Variablen $ergebnis[f1] und $dir sind leer, bzw. nicht gesetzt
Das erste Problem habe ich erkannt und gelöst:
PHP-Code:
$row=mysql_fetch_array($ergebnisMYSQL_ASSOC);
$field=key($row);
.
.
.
echo 
"<td><a href=\" test3.php?sort=$field&dir=$dir\">Name</a></td>"
Aber warum ist $dir nicht gesetzt bzw. leer? Die Funktion $dir ist definiert....
vtx-rider ist offline  
 


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
Tabelle mit while nach 4 spalten zur nächsten zeile Supeede PHP Tipps 2008 6 10.05.2008 09:46
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
Wie viele Spalten kann eine Datenbank Tabelle den tragen`? tomtaz Datenbanken 11 20.05.2006 20:22
[Problem selbst gelöst] Sortieren über 2 Tabellen Alpha Centauri Datenbanken 1 04.04.2006 16:37
[Erledigt] Primary Key über zwei Spalten Datenbanken 6 10.03.2006 00:40
Nach 2 Spalten sortieren Datenbanken 2 10.07.2005 23:36
Addieren von 3 Spalten, nach Ergebnis sortieren Datenbanken 11 15.06.2005 09:54
ausgegebene Tabelle über Links sortieren? PHP Tipps 2005 6 31.05.2005 12:39
Tabelle erweitern, Spalten hinzufügen GeorgM Datenbanken 3 24.11.2004 17:06
PHP & Mysql tabelle sortieren PHP Tipps 2004 1 03.11.2004 15:51
[Erledigt] [OT] besser eine Tabelle mit mehr Spalten oder aufteilen ? Datenbanken 1 22.10.2004 17:26
Sortieren anhand einer zweiten Tabelle PHP Tipps 2004 6 20.09.2004 09:03
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
php tabelle sortieren, tabelle sortieren php, php tabellen sortieren, php sortierbare tabelle, tabellen sortieren php, php spalten sortieren, php table sort, html tabelle sortieren php, tabelle php sortieren, php tabelle sortieren link, sortierbare tabelle php, tabelle mit php sortieren, php html tabelle sortieren, php sortierung tabelle, http://www.php.de/php-tipps-2008/47502-erledigt-tabelle-ueber-spalten-sortieren.html, html spalten sortieren, php sortieren tabelle, html tabelle spalten sortieren, php tabelle sortierung, php tabelle mit sortierung

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:00 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