Aus MySQL Spalten per php sortierbar aufrufen

Hallo, zu dem Thema habe ich jetzt tagelang im web gesucht. Es gibt dazu u.a. einen Beitrag vom Jahr 2006 unter http://www.administrator.de/index.php?content=23446, der die Frage behandelt. Leider funktioniert bei mir damit nichts. Es kommt eine weisse Seite. Vielleicht ist der dort angegebene Code nicht mehr aktuell?
Verwende localhost mit Typo3_4.0.2 Winstaller-Paket (MySQL - 4.1.15 phpMyAdmin - 2.8.2 php 5.1.6.6)

Hallo Günther,
mail mir mal deine Abfrage - die nicht funktioniert -
Gruss Norbert

Hallo Guenther,

Es kann sein, dass bei der Server nur mysql5 oder nur bestimmte Versionen der 4er verarbeitet. Diese Version ist aufwärtskompatibel bis mysql 5:

Ich frage hier alle Gigs meiner Band ab. Diese werden dann nach Datum sortiert und zwar erst nach Jahr, dann nach Monat und dann Tag …
das Ergebnis findest du auf www.riccochet.de/tour.php

Hallo ,

dazu kann ich nichts wirklich fundiertes sagen.
Es scheint mir auch mehr ein php Problem als ein
MySQL Problem zu sein.
In dem von Dir referenzierten Beitrag wird folgendes
für den Zugriff zur Datenbank verwendet:
$result=mysql_query($query, $conn);
d.h. Du musst mal irgendwo die DB-Verbindung mit der Variable $conn verknüpft haben. Vielleicht stimmt da was nicht.

Gruss

Hallo Günther,
mail mir mal deine Abfrage - die nicht funktioniert -
Gruss Norbert

Hallo Norbert, hier die Abfrage:

________________________________________________

<?php function direction($dir){
if($dir= ="asc"){ return "desc"; }else{ return "asc"; } } $conn=mysql\_connect("localhost","root",""); $db=mysql\_select\_db("webshop.products"); if($sort){ $dir=direction($dir); $query="select number, name, description order by $sort $dir"; }else{ $query="select number, name, description from tabelle"; } $result=mysql\_query($query, $conn); ?\>Spalten sortierbar ausgeben<?php $row=mysql_fetch_array($result, MYSQL_ASSOC));
echo " "; //Begin des Tabellenkopfes echo ""; while($field=key($row)){ echo "[$field](%255C%2522)"; next($row); } echo ""; //Ende Tabellenkopf //Da durch die Anweisung $row=mysql\_fetch\_array($result, MYSQL\_ASSOC)); bereits der //erste Datensatz "geholt" wurde, muß er separat ausgegeben werden echo ""; echo implode("", $row); echo ""; //Dann erfolgen die restlichen Datensätze mit der while-Schleife while($row=mysql\_fetch\_array($result, MYSQL\_ASSOC)){ echo ""; echo implode("", $row); echo ""; } echo ""; ?\> \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ Gruß, Günther

also ohne den quelltext von dir zu sehen, kann ich dir auch nicht deinen evtl fehler aufzeigen…
aber in den allermeisten fällen liegt es an nem vergessenen „;“ oder falscher klammersetzung…
um ne weitere aussage machen zu können, muss der code schon her…
mfg

Hallo,
nach einem kurzen Überflug, sehe ich keinen obsoleten Quellcode, daher ist er auch kompatibel zu PHP 5.x.
Ich vermute einen fehlerhaften Query. Aber nach dieser Anfrage zufolge muss ich einfach in der Glaskugel lesen.

Hallo,

in Deinem Codeschnipsel fehlt in Zeile 14 die Angabe, aus welcher Tabelle gelesen werden soll.
Folge der SQL-Syntax „SELECT * FROM tabellenname WHERE bedingung ORDER BY spaltenname“. Wobei WHERE und ORDER BY ggf. entfallen können.

Im else-Zweig in Zeile 16 ist es korrekt.

Micha

Hallo ATZENPOWERde,
hier ist der aktuelle code:
______________________________

<?php $conn=mysql_connect("localhost","user","");
$db=mysql\_select\_db("website"); function direction($dir) { if($dir="asc"){ return "desc"; } else {return "asc"; }} if($sort){ $dir=direction($dir); $query="select vorname, nachname, telefon $sort $dir";} else {$query="select vorname, nachname, telefon from authors order by vorname";} //oder // $query="select vorname, nachname, telefon from authors order by vorname"; //z.B. als Standardsortierung $result=mysql\_query($query, $conn); ?\>Untitled<?php while($row=mysql_fetch_array($result, MYSQL_ASSOC)){
echo " "; //Begin des Tabellenkopfes echo ""; while($field=key($row)){ echo "[$field](%255C%2522sort.php?sort=%2524field&dir=%2524dir%255C%2522)"; next($row); } echo ""; //Ende Tabellenkopf //Da durch die Anweisung $row=mysql\_fetch\_array($result, MYSQL\_ASSOC)); bereits der //erste Datensatz "geholt" wurde, muß er separat ausgegeben werden echo ""; echo ""; echo implode("", $row); echo ""; echo ""; //Dann erfolgen die restlichen Datensätze mit der while-Schleife while($row=mysql\_fetch\_array($result, MYSQL\_ASSOC)){ echo ""; echo implode("", $row); echo ""; echo ""; }} echo ""; ?\> \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ Gruß, Günther ATZENPOWERde

Hallo,

der Artikel unter http://www.administrator.de/index.php?content=23446 erklärt das Thema ganz gut und es spielt auch keine Rolle, dass der aus dem Jahr 2006 stammt. Das Prinzip ist auch 2012 das gleiche.
„1+1“ war auch schon vor hundert Jahren „2“ :wink:

Du willst Daten sortiert ausgeben und verwendest TYPO, um Deine Site zu verwalten.
Dagegen ist auch nichts zu sagen, ich frage mich allerdings, wieviel Kenntnisse Du selbst in SQL und PHP hast. Ich will dich da nicht blöd anmachen, aber gewisse Grundlagen-Kenntnisse sind einfach erforderlich.

Was mir an dem Artikel nicht so gefällt ist, dass der Autor die Skript-Beispiele sehr „kompakt“ gestaltet hat, was für das Verständnig nicht umbedingt hilfreich ist.

Eine MySQL-Kommunikation läuft schematisch unter PHP so ab:

  1. mysql_cinnect();

  2. SQL-Statement an eine Variable übergeben.

  3. mysql_query();

  4. m FROM ORDER B> ;

Die zweite Feldliste ist die Sortierreihebfolge (z. B.: Nachname, Vorname).

Due schreibst, due erhältst eine leere Seite.
Hast Du die Verbindung zum MySQL aufgebaut ?

In den Skript-Beispielen wird zwar auf eine bestehende Verbindung referenziert, diese aber nicht erstellt.

Noch ein Tipp:
Teste Deine Sites unter einer lokalen XAMPP-Distribution. Die zeigt dir auch Warnungen an, die bei Hostern unterdrückt werden. Ich bin mir sicher, dass nicht nur eine leere Seite kommt, sondern mindestens eine Warnung, die auf eine fehlende Connection hinweist.

Gruß aus München,
Frank

phhhhhh… wollte den code mal etwas sortiert wieder angehangen… aber die formatierung wird hier scheinbar nicht mit übernommen… schade…
ansich stellt sich mir als erstes die frage wo zb $sort bei dir deklariert ist. also das war mir zuerst aufgefallen… und dann lieg ich doch sicher richtig wenn ich annehme, das daß 2 dateien sind oder?..
ansonsten muss ich evtl heute abend mal genauer hingucken…
ansonsten vergess nicht… rechner sind dumm… du musst ihenn alles genau vorgeben… und wenn du mit $sort etwas verarbeiten willst, musst du ihm zuvor erklären was $sort sein soll

Hallo Frank,
kann die Tabelle jetzt immerhin aufrufen.
Aber die Sortierung springt noch nicht an.
Anbei der aktuelle code:
________________________________

<?php $conn=mysql_connect("localhost","user","");
$db=mysql\_select\_db("website"); function direction($dir){ if($dir="asc"){ return "desc";} else { return "asc"; } } if($sort){ $dir=direction($dir); $query="select vorname, nachname, telefon from authors $dir $sort";} else {//$query="select vorname, nachname, telefon from authors";} //oder $query="select vorname, nachname, telefon from authors order by vorname";} //z.B. als Standardsortierung $result=mysql\_query($query, $conn); ?\>Untitled<?php while($row=mysql_fetch_array($result, MYSQL_ASSOC)){
echo " "; //Begin des Tabellenkopfes echo ""; while($field=key($row)){ echo "[$field](%255C%2522sort.php?sort=%2524field&dir=%2524dir%255C%2522)"; next($row); } echo ""; //Ende Tabellenkopf //Da durch die Anweisung $row=mysql\_fetch\_array($result, MYSQL\_ASSOC)); bereits der //erste Datensatz "geholt" wurde, muß er separat ausgegeben werden echo ""; echo ""; echo implode("", $row); echo ""; echo ""; //Dann erfolgen die restlichen Datensätze mit der while-Schleife while($row=mysql\_fetch\_array($result, MYSQL\_ASSOC)){ echo ""; echo implode("", $row); echo ""; echo ""; }} echo ""; ?\> \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ LG Günther

Hallo Micha, danke für Deine Antwort.
Gruß, Günther

Hallo Michael, dank Dir für die Antwort auf meine Anfrage!
Gruß, Günther

Sehe jetzt immerhin die Tabelle im Browserfenster, der weisse Bildschirm ist behoben.

Die Sortierung springt allerdings noch nicht an.
Es handelt sich um nur 1 Datei (sort.php)

Die sollte erneut in sich selber aufgerufen werden, sobald ich auf einen Titel eines beliebigen Spaltenkopfes clicke.
Habe hier den überarbeiteten code:
_______________________________________

<?php $conn=mysql_connect("localhost","user","");
$db=mysql\_select\_db("website"); function direction($dir){ if($dir="asc"){ return "desc";} else { return "asc"; } } if($sort){ $dir=direction($dir); $query="select vorname, nachname, telefon from authors $dir $sort";} else {//$query="select vorname, nachname, telefon from authors";} //oder $query="select vorname, nachname, telefon from authors order by vorname";} //z.B. als Standardsortierung $result=mysql\_query($query, $conn); ?\>Untitled<?php while($row=mysql_fetch_array($result, MYSQL_ASSOC)){
echo " "; //Begin des Tabellenkopfes echo ""; while($field=key($row)){ echo "[$field](%255C%2522sort.php?sort=%2524field&dir=%2524dir%255C%2522)"; next($row); } echo ""; //Ende Tabellenkopf //Da durch die Anweisung $row=mysql\_fetch\_array($result, MYSQL\_ASSOC)); bereits der //erste Datensatz "geholt" wurde, muß er separat ausgegeben werden echo ""; echo ""; echo implode("", $row); echo ""; echo ""; //Dann erfolgen die restlichen Datensätze mit der while-Schleife while($row=mysql\_fetch\_array($result, MYSQL\_ASSOC)){ echo ""; echo implode("", $row); echo ""; echo ""; }} echo ""; ?\> \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ Gruß, Günther

Hallo, danke für die Antwort auf meine Anfrage. Die Verbindung zur Datenbank steht jetzt. Nun reagiert aber die Sortierung noch nicht. Füge den überarbeiteten code mal ein:
______________________

<?php $conn=mysql_connect("localhost","user","");
$db=mysql\_select\_db("website"); function direction($dir){ if($dir="asc"){ return "desc";} else { return "asc"; } } if($sort){ $dir=direction($dir); $query="select vorname, nachname, telefon from authors $dir $sort";} else {//$query="select vorname, nachname, telefon from authors";} //oder $query="select vorname, nachname, telefon from authors order by vorname";} //z.B. als Standardsortierung $result=mysql\_query($query, $conn); ?\>Untitled<?php while($row=mysql_fetch_array($result, MYSQL_ASSOC)){
echo " "; //Begin des Tabellenkopfes echo ""; while($field=key($row)){ echo "[$field](%255C%2522sort.php?sort=%2524field&dir=%2524dir%255C%2522)"; next($row); } echo ""; //Ende Tabellenkopf //Da durch die Anweisung $row=mysql\_fetch\_array($result, MYSQL\_ASSOC)); bereits der //erste Datensatz "geholt" wurde, muß er separat ausgegeben werden echo ""; echo ""; echo implode("", $row); echo ""; echo ""; //Dann erfolgen die restlichen Datensätze mit der while-Schleife while($row=mysql\_fetch\_array($result, MYSQL\_ASSOC)){ echo ""; echo implode("", $row); echo ""; echo ""; }} echo ""; ?\> \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ Gruß, Günther

Hallo Günther,

der Fehler liegt hier:

In $dir steht entweder „asc“, oder „desc“.

Ist $sort die Feldliste, nach der sortiert werden soll ?
Ich finde im Code keine Zuweisung.

Das SQL-Staetment lautet dann beispielsweise:
select vorname, nachname, telefon from authors asc nachname, vorname;

(Ich habe einfach mal „nachname, vorname“ für $sort angenommen.)

Dieses SQL-Statement ist falsch!
Es muss lauten:
select vorname, nachname, telefon from authors ORDER BY nachname, vorname ASC;

Zudem fehlt das „;“ am Ende des SQL-Statements im Cpde.

Tipp: Wenn Du nicht sicher bist, ob dein SQL-Statement funktioniert, dann führe es einfach mal in einem Query Builder aus (z. B.: phpMyadmin).

Ansonsten sieht der Code gut aus!

Gruß aus München,
Frank

Kann dzt leider nicht helfen!
Alles Gute
Peter

Hallo Günther,

war leider ein paar Tage nicht online.
Ich werde aus Deinem Code nicht so recht schlau. Was passiert, bzw. denn nicht ? Du hast ein Statement
„select vorname, nachname, telefon from authors $dir $sort“ und wenn ich es richtig verstehe, ist $dir die Richtung (asc/desc) und $sort das Feld über das sortiert werden soll. Wenn ich das einsetze, ergibt das z.B.
„select vorname, nachname, telefon from authors asc nachname“, was syntaktisch falsch ist. Es muss „select vorname, nachname, telefon from authors order by nachname asc“ dabei herauskommen.
Ich würde Dir raten, grundsätzlich zu sortieren, d.h. $sort und $dir vorbelegen und den Select immer gleich zu schreiben:
„select vorname, nachname, telefon from authors order by $sort $dir“

Gruss

Hallo Frank,
danke dir für deine Antwort!
Kam jetzt auch nicht mehr dazu und ich muß das erst noch nachvollziehen. Wollte nur mal überhaupt ein Echo senden.
Der Verfasser des Beitrages unter http://www.administrator.de/index.php?content=23446 hat übrigens einen womöglich auch entscheidenden Zusatz angefügt.
Werde mich dann nochmal melden, ob´s klappt.
Gruß, Günther