Sortierung
Ingo Arndt
- php
0 eddi0 Ingo0 reinhard0 Ingo Arndt0 dedlfix
0 reinhard
0 eddi0 Ingo Aundt0 eddi
0 Cheatah
Hallo SELFHTML Gemeinde,
ich habe ein Problem mit der Sortierung nach DESC oder ASC.
Folgendes: Ich erhalte Ergebnisse in 4. Unterkategorie aus meiner Datenbank angezeigt, jetzt wollte ich diese wahlweise vom User sortieren lassen.
Ich habe dazu link und rechts neben der Schrift(Spaltenname)einen Pfeil gemacht und darauf einen Link gelegt aber irgendwie passiert garnichts.
Die Seite ist mit den selben Daten vorhanden nur bleibt die Sortierung nach ASC(Startsortierung) bestehen.
So sehen meine Links aus :
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?orderby=ends&sort=DESC">↓</A>
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?orderby=ends&sort=ASC">↑</A>
Was mache ich da falsch????
Ingo
Hallo,
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?orderby=ends&sort=DESC">↓</A>
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?orderby=ends&sort=ASC">↑</A>
poste bitte auch den Quellcodeteil, in dem Du mit $_GET['sort'] arbeitest!
Gruß aus Berlin!
eddi
Hallo,
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?orderby=ends&sort=DESC">↓</A>
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?orderby=ends&sort=ASC">↑</A>poste bitte auch den Quellcodeteil, in dem Du mit $_GET['sort'] arbeitest!
Gruß aus Berlin!
eddi
Hallo EDDI,
danke für deine schnelle Antwort, hier der Code aus der PHP Datei.
$statement = "SELECT FROM auctions WHERE galerie ORDER BY ends $orderby";
if($_GET['sort'] == 'auf') {
$orderby = 'ASC';
} else {
$orderby = 'DESC';
}
Ingo
Hallo Ingo,
irgendwie kommt mir Dein Quelltext seltsam vor (auch, wenn ich normalerweise nicht in PHP programmiere):
Hilft Dir das weiter?
Grüße, Reinhard
Hallo Ingo,
irgendwie kommt mir Dein Quelltext seltsam vor (auch, wenn ich normalerweise nicht in PHP programmiere):
- die Variable $orderby muß mit einem Wert gefüllt werden, bevor das SELECT-Statement zusammengebaut wird; der if-Teil gehört also vor das SELECT.
- im SELECT-Statement ist die Variable einfach nur als Textstring enthalten, der Wert wird so jedoch nicht ausgegeben. Der Textstring müßte m.E. eher so aussehen: "... ORDER BY ends " . $orderby (der "." müßte lt. Tutorialseiten das Verknüpfungszeichen für PHP sein, wie gesagt, mit der PHP-Syntax kenne ich mich nicht so aus. In javascript wäre es "... ORDER BY ends " + $orderby , in vbscript "... ORDER BY ends " & $orderby )
Hilft Dir das weiter?
Grüße, Reinhard
Hallo Reinhard,
danke für deine Bemühungen bin auch erst seid 3 Monaten mit PHP am kämpfen.
Gruß Ingo
echo $begrüßung;
- die Variable $orderby muß mit einem Wert gefüllt werden, bevor das SELECT-Statement zusammengebaut wird; der if-Teil gehört also vor das SELECT.
Soweit richtig. PHP hat jedoch die Angewohnheit, Parameter von GET und POST-Anfragen selbständig als Variablen anzulegen, wenn register_globals eingeschaltet ist. Dies war lange Zeit Standard und ist auch heute noch bei manchen Providern so eingestellt, damit auch alte Scripte noch funktionieren, die sich auf dieses Feature verlassen. Generell ist register_globals aber als kritisch zu betrachten, weil damit von außerhalb unkontrolliert und unbeabsichtigt Variablen im Script angelegt werden können. Vergisst man dann auch noch seine eigenen Variablen vor der ersten Verwendung mit einem definierten Wert zu initialisieren, kann es zu einem unerwarteten Scriptablauf kommen, wenn jemand einen Parameter übergibt, der einem vorhandenen Variablennamen entspricht.
Moderne Scripte greifen auf auf die GET- und POST-Werte über $_GET und $_POST zu, damit sie unabhängig von register_globals funktionieren. Sicherheitsbewusste Programmierer achten auch noch darauf, dass ihre Variablen in jedem Fall einen definierten Wert erhalten, da man nicht unbedingt wissen kann, welche Einstellung register_globals auf dem Zielrechner hat. Abschalten kann man es innerhalb des Scripts nicht mehr, da register_globals bereits vor dem Scriptstart seine Aufgabe erledigt.
- im SELECT-Statement ist die Variable einfach nur als Textstring enthalten, der Wert wird so jedoch nicht ausgegeben. Der Textstring müßte m.E. eher so aussehen: "... ORDER BY ends " . $orderby (der "." müßte lt. Tutorialseiten das Verknüpfungszeichen für PHP sein, wie gesagt, mit der PHP-Syntax kenne ich mich nicht so aus. In javascript wäre es "... ORDER BY ends " + $orderby , in vbscript "... ORDER BY ends " & $orderby )
Hier triffst du auf einen Unterschied PHPs zu anderen Programmiersprachen. Strings können in einfachen Anführungszeichen ' oder in doppelten " notiert werden. Notiert man sie in doppelten Anführungszeichen werden Variablennamen beim Parsen erkannt und durch deren Inhalt ersetzt.
Natürlich muss dann auch ein Inhalt vorhanden sein. Greift man lesend auf eine nicht initialisierte bzw. nicht vorhandene Variable zu, gibt PHP eine Notice-Meldung aus, die im Normalfall jedoch unterdrückt wird. Um diese wichtigen Hinweismeldungen dennoch zu bekommen, empfiehlt es sich beim Entwickeln das error_reporting auf E_ALL zu stellen. Auch Tippfehler bei den Variablennamen kassen sich so leichter finden.
echo "$verabschiedung $name";
Hey, danke!
Das war eine sehr hilfreiche Erläuterung, auch wenn ich nicht in PHP programmiere. Vielleicht muß ich mich in Zukunft doch mehr dafür interessieren, aber in unserer Serverumgebung sind halt andere Sprachen gefragt.
Grüße,
Reinhard
Re:
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?orderby=ends&sort=DESC">↓</A>
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?orderby=ends&sort=ASC">↑</A>
if($_GET['sort'] == 'auf') {
$orderby = 'ASC';
diese Bedingung wird mit den beiden oben gesetzten Verweisen _nie_ eintreten.
Gruß aus Berlin!
eddi
Re:
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?orderby=ends&sort=DESC">↓</A>
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?orderby=ends&sort=ASC">↑</A>if($_GET['sort'] == 'auf') {
$orderby = 'ASC';diese Bedingung wird mit den beiden oben gesetzten Verweisen _nie_ eintreten.
Gruß aus Berlin!
eddi
Hallo EDDI,
danke für den Tip, leider bin ich in PHP nicht die Leuchte kannst Du mir ein Beispiel nennen mit welcher Bedingung das klappt?
Danke Ingo
Re:
[link:http://de3.php.net/manual/de/language.control-structures.php#control-structures.if@title=if]([link:http://de3.php.net/manual/de/function.in-array.php@title=in_array]($_GET['sort'],array('ASC','DESC')))
$orderby = $_GET['sort'];
else $orderby = 'DESC';
Durch in_array() ist es Dir sehr leicht möglich weitere Sortierungen umzusetzen.
Gruß aus Berlin!
eddi
Hi,
$statement = "SELECT FROM auctions WHERE galerie ORDER BY ends $orderby";
if($_GET['sort'] == 'auf') {
$orderby = 'ASC';
"Entschuldigung, wie komme ich bitte zum Bahnhof?"
"Gehen Sie daran vorbei und dann rechts."
"Äh?"
"Sehen Sie da hinten das große Gebäude?"
Nicht nur im richtigen Leben, nein, auch in der Programmierung ist die Reihenfolge der Aussagen wichtig. Zudem muss, wie in diesem Thread schon gesagt wurde, nicht am großen Gebäude vorbei gegangen werden, sondern am Park.
Cheatah