Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > Order BY im Tabellenheader
Antwort
 
Themen-Optionen
Alt 10.01.2007, 20:32   Nach oben    #1
jennifer
Benutzer
 
Registriert seit: 10.01.2007
Ort: Chemnitz
Beiträge: 47
Standard Order BY im Tabellenheader

hi ich grüsse euch ganz herzlichst,

meine frage lautet:
habe eine Tabelle (siehe code-bsp) und möchte, das ich im tabellenheader draufklicke und danach sortieren kann, also ich klicke auf Name oder Artikel Gruppe oder .. und kann nach DESC oder ASC sortieren.

wo kann man nachschauen oder hat bitte einer eine lösung wie man dies programmiert?

PHP-Code:
$artikeln = @mysql_query("
                         SELECT
                                      *
                         FROM
                                      wsp_adressen AS ad, wsp_artikel AS a
                         WHERE
                                      ad.ID=a.AID
                         ORDER BY
                                      a.ArtikelID"
);

if (!
$artikeln) {
   exit(
'<p>Fehler beim Abruf der Daten aus der Datenbank!<br>' .
         
'Error: ' mysql_error() . '</p>');
}
:
:
while (
$artikel mysql_...... (code ist bekannt)
echo <<<Formular
<table border="1">
<tr>
 <th>Name</th>
 <th>ArtikelGruppe</th>
 <th>ArtikelName</th>
 <th>Nächste Rechnung</th>
</tr>
<tr>
 <td>1</td>
 <td>1 </td>
 <td>1 </td>
 <td>1 </td>
</tr>
<tr>
 <td>.</td>
 <td>. </td>
 <td>. </td>
 <td>. </td>
</tr>
<tr>
 <td>100</td>
 <td>100</td>
 <td>100</td>
 <td>100</td>
</tr>
</table>
Formular; 
ich sage ganz herzlichen dank

es grüsst ganz herzlichst
jennifer

Geändert von jennifer (10.01.2007 um 20:36 Uhr).
jennifer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.01.2007, 20:40   Nach oben    #2
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Hallo,
das ist ja eigentlich recht simpel. Du verlinkst die Tabellenüberschrift und sendest beim Klick einen GET-Request an das Skript.
Das Skript wertet dann aus, ob da ein sort=desc oder ein sort=asc drin steht und verwendet die Information dann in der SQL-Anweisung.

Pseudocode mit Standardsortierung DESC:
Code:
WENN sort im GET-Request existiert
   WENN sort == asc
      ORDER BY ASC
   SONST
      ORDER BY DESC   
SONST
   ORDER BY DESC
Die Verlinkung musst du dann natürlich je nach ORDER BY auch ändern, damit man wieder zurück"switchen" kann.

Grüße, Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.01.2007, 21:06   Nach oben    #3
jennifer
Benutzer
 
Registriert seit: 10.01.2007
Ort: Chemnitz
Beiträge: 47
Standard Order BY

hi ben,

erst einmal herzlichen dank für die schnelle antwort.

also ich habe dies mal so geschrieben, da ich mit solchen abfragen noch so meine kleinen proplemchen habe.

PHP-Code:
if (isset($_GET['Request'])) {
 if (
$_GET['Request'] == ASC) {
  
$sort "ORDER BY ASC";
 } elseif (
$_GET['Request'] == DESC) {
  
$sort "ORDER BY DESC";
 }

oder wie hast du es gemeint?

es grüsst ganz herzlichst jennifer
jennifer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.01.2007, 21:10   Nach oben    #4
Artemis
Semantic Web Fanatic
 
Benutzerbild von Artemis
 
Registriert seit: 03.06.2006
Beiträge: 237
Standard

Nein.

So in etwa:

HTML-Code:
<th>Name <a href="seite.php?orderby=name&order=asc">^</a><a href="seite.php?orderby=name&order=desc">v</a>
PHP-Code:
if (isset($_GET['orderby'])) {
  if (isset(
$_GET['order']) && ($_GET['order'] == 'desc')) {
    
$order 'ORDER BY '.$_GET['orderby'].' DESC';
  } else {
    
$order 'ORDER BY '.$_GET['orderby'].' ASC';
  }

__________________
Applikations-Programmierung:
BlitzMax, BlitzPlus

Webentwicklung:
PHP, (X)HTML, CSS, JavaScript, MySQL


Artemis ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.01.2007, 21:12   Nach oben    #5
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Kann man ja auch noch abkürzen
PHP-Code:
$orderBy 'DESC';

if(
array_key_exists('sort'$_GET) and $_GET['sort'] == 'asc') {
    
$orderBy 'ASC';
}

$sql 'SELECT 
              data 
          FROM 
              prefix_table 
          ORDER BY 
              columnName 
          ' 
$orderBy
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.01.2007, 21:55   Nach oben    #6
jennifer
Benutzer
 
Registriert seit: 10.01.2007
Ort: Chemnitz
Beiträge: 47
Standard

hi ihr lieben,

habe es jetzt geschafft, also es funktioniert
und sage ganz herzlichen dank für die unterstützung.

und hier der fertige codeschnipsel

PHP-Code:

if (isset($_GET['orderby'])) {
  if (isset(
$_GET['order']) && ($_GET['order'] == 'desc')) {
    
$order 'ORDER BY '.$_GET['orderby'].' DESC';
  } else {
    
$order 'ORDER BY '.$_GET['orderby'].' ASC';
  }
}

$artikeln = @mysql_query("
                  SELECT
                   *
                                     FROM
                                         wsp_adressen AS ad, wsp_artikel AS a
                                   WHERE
                                      ad.ID=a.AID
                                      
                        $order"
);

if (!
$artikeln) {
  exit(
'<p>Fehler beim Abruf der Daten aus der Datenbank!<br>' .
        
'Error: ' mysql_error() . '</p>');
}

$summen = @mysql_query("SELECT COUNT(*), SUM(ArtikelPreis) as preis FROM wsp_artikel");
while (
$summe mysql_fetch_assoc($summen)) {
$gesamtpreis $summe['preis'];
}


echo <<<AusgabeKunden
<table width="100%" border="0" class="tabkunden">
<tr>
<th width="*">
ART-ID<a href="artikel_list.php?orderby=ArtikelID&order=asc">^</a>
<a href="artikel_list.php?orderby=ArtikelID&order=desc">v</a>
</th>
<th width="*">
Vorname, Name<a href="artikel_list.php?orderby=Vorname&order=asc">^</a>
<a href="artikel_list.php?orderby=Vorname&order=desc">v</a>
</th>
<th width="20" align="center"&nbsp;</th>
<th width="*">
Artikel Gruppe<a href="artikel_list.php?orderby=ArtikelGruppe&order=asc">^</a>
<a href="artikel_list.php?orderby=ArtikelGruppe&order=desc">v</a>
</th>
:
:



also nochmals herzlichen grossen dank
ganz herzliche grüsse an euch

jennifer

Geändert von jennifer (10.01.2007 um 22:14 Uhr).
jennifer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.01.2007, 21:57   Nach oben    #7
Jann Hendrik
Projektleiter
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.207
Standard

Ich würde die links so gestalten, dass immer nur ein ASC oder ein DESC vorhanden ist.
Das jeweils andere reicht ja.

In Abhängigkeit von dem, was via GET übergeben wurde nimmst du das im link einfach das andere...

Der Einfachheit wegen den post von Ben nicht übersehen!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.01.2007, 22:23   Nach oben    #8
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.184
Standard

Du musst unbedingt deine Parameter absichern, sonst kann es zu SQL-Injections kommen!

z.b. so:
PHP-Code:
if (isset($_GET['orderby'])) {
    
$orderby mysql_escape_string($_GET['orderby']);
  if (isset(
$_GET['order']) && ($_GET['order'] == 'desc')) {
    
$order 'ORDER BY '.$orderby.' DESC';
  } else {
    
$order 'ORDER BY '.$orderby.' ASC';
  }

robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.01.2007, 22:39   Nach oben    #9
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Mit meinem Code besteht diese Gefahr nicht ....
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.01.2007, 22:41   Nach oben    #10
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.184
Standard

Deiner unterstützt aber auch keinen dynamischen Feldnamen nach dem sortiert wird.
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.01.2007, 22:50   Nach oben    #11
jennifer
Benutzer
 
Registriert seit: 10.01.2007
Ort: Chemnitz
Beiträge: 47
Standard

hi ihr lieben,

so habe das wegen der SQL-Injections mit eingebaut.

PHP-Code:
 
 $orderby 
mysql_escape_string($_GET['orderby']); 
bastel nur noch an den link das nur noch einer sichtbar ist ansonsten funktioniert es prima, was es nicht alles gibt

also nochmals an alle ein rießen DANK

ganz herzliche grüsse

jennifer
jennifer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.01.2007, 00:42   Nach oben    #12
jennifer
Benutzer
 
Registriert seit: 10.01.2007
Ort: Chemnitz
Beiträge: 47
Standard

Zitat:
Zitat von robo47 Beitrag anzeigen
Deiner unterstützt aber auch keinen dynamischen Feldnamen nach dem sortiert wird.

meinst du damit, die ausgabe der feldnamen in der select anweisung?

ganz herzliche grüsse

jennifer
jennifer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.01.2007, 02:20   Nach oben    #13
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.184
Standard

Zitat:
Zitat von jennifer Beitrag anzeigen
Zitat:
Zitat von robo47 Beitrag anzeigen
Deiner unterstützt aber auch keinen dynamischen Feldnamen nach dem sortiert wird.

meinst du damit, die ausgabe der feldnamen in der select anweisung?

ganz herzliche grüsse

jennifer
das war im Bezug auf Bens Post, seine Lösung war ja nur auf ein Feld zur sortierung vorgesehen.
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.01.2007, 07:43   Nach oben    #14
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Wenn man ganz sichergehen will, ob die Spalte, nach der sortiert werden soll, überhaupt existiert (das ist ja auch noch eine Fehlerquelle), dann kann man im Voraus auch noch eine Abfrage à la
Code:
SHOW COLUMNS FROM prefix_table
an die Datenbank schicken und das Resultat dann mit dem übergebenen Parameter abgleichen.

Ist zwar eine Abfrage mehr, sichert aber ab, dass der übergebene Wert auch korrekt in die SQL-Abfrage passt.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.01.2007, 12:25   Nach oben    #15
jennifer
Benutzer
 
Registriert seit: 10.01.2007
Ort: Chemnitz
Beiträge: 47
Standard

hi ihr lieben,

so möchte mal meine seite kurz vorstellen, wie ich es gelöst und nach mein besten wissen geschrieben habe.
vieleicht kann ja jemand etwas gebrauchen.

die links sind momentan noch etwas zu viel aber was bessseres viel mir gerage nicht ein oder habe momentan keine andere lösung.
so php/mysql fortgeschritten bin ich noch nicht.

PHP-Code:
 
<?php
include "login.inc/sessionheader.inc.php";
if (isset(
$_SESSION['login']) && $_SESSION['login'] == true) {
include
"header.php";
?>
 
<div class="tabelleaussen" align="right">
&raquo; <a href='artikel_new.php' class="tabellenlink">Neuen Kunden Artikel hinzufügen</a>
&raquo; <a href='artikel_list_2.php' class="tabellenlink">Kunden ohne Artikel</a>&nbsp;&nbsp;
</div>
 
<table class="tabinhaltaussen" align="center" border="0" width="100%" cellpadding="5" cellspacing="5">
<tr>
 <td class="tabinhaltinnen" align="center">
<?php
include("../zugriff.inc.php");
echo 
"<h3 align='left'>Kunden Artikel Übersicht</h3>";
if (isset(
$_GET['orderby'])) {
    
$orderby mysql_escape_string($_GET['orderby']);
  if (isset(
$_GET['order']) && ($_GET['order'] == 'desc')) {
    
$order 'ORDER BY '.$orderby.' DESC';
  } else {
    
$order 'ORDER BY '.$orderby.' ASC';
  }
}
 
$artikeln = @mysql_query("
              SELECT
                  Vorname, Name, ArtikelID, ArtikelGruppe, ArtikelName,