Einträge als Liste aus MySQL darstellen + Sortierung

Fruitgum

Erfahrenes Mitglied
Hallo,

ich habe eine kleine Frage:

Ich möchte 3 Spalten ausgeben Datum, Titel, Ort. Die in einer Zeile natürlich zusammengehören. Das Datum ist ein Datum was ich eingebe, also ein Termin. Ich möchte auf jeder Seite die Ausgabe auf 5 Zeilen begrenzen. Wenn ich auf Datum, Ort oder Titel drücke sollen sich die Daten auf und abwärts sortieren.

Ich habe leider überhaupt keine Ahnung, wo ich
anfangen soll ...

Für Eure Hilfe wäre ich echt dankbar!
 
Hi,
ich habe hier mal versucht alles ein zu bauen was du haben wolltest und es gut zu erklären:
PHP:
<?php
$daten_pro_seite = 5;
$ab = 0;

// abfragen welche Seite der Benutzer sehen will
if( $_GET["ab"] ) 
{
    // -1 damit man bei Seite 0 auf mit dem ersten Datensatz beginnt
    $ab = ($_GET["ab"] - 1)*$daten_pro_seite;
}

// Anzahl der Datensätze ermitteln
$sql  = "SELECT COUNT(*) AS anzahl ";
$sql .= "  FROM ... ";
$sql .= " WHERE ... ";
$anzahl_r = mysql_query( $sql );
$anzahl = mysql_fetch_assoc( $anzahl_r );

// Anzahl der benötigten Seiten ermitteln
$gesamtzahl = $anzahl["anzahl"];
$seiten = ceil( $gesamtzahl/$daten_pro_seite );

// Seitenauswahl ausgeben
for( $seite = 1; $seite <= $seiten; $seite++ ) 
{
	if( $seite != 1 ) 
    {
        echo "|";
    }
	echo "<a href='...?ab=$seite' title='Seite: $seite'>$seite</a>";
}

// Abfrage ob nach was bestimmtem sortiert werden soll
if( isset( $_GET["kriterium"] ) && ( $_GET["kriterium"] == "datum" || $_GET["kriterium"] == "titel" || $_GET["kriterium"] == "ort" ) )
{
    $sortier_kriterium = $_GET["kriterium"];
    $sortier_richtung = "ASC";
    
    if( $_GET["richtung"] == "desc" )
    {
        $sortier_richtung = "DESC";
    }
}

// Daten auslesen die zu der Seite gehören die der Benutzer sehen will
$sql  = "SELECT ... ";
$sql .= "  FROM ... ";
$sql .= " WHERE ... ";

// Sortierung vornehmen
if( isset( $sortier_kriterium ) )
{
    $sql .= "ORDER BY $sortier_kriterium $sortier_richtung ";
}

// Seitenauswahl vornehmen
$sql .= "LIMIT $ab, $angebote_proseite; ";
$daten_r = mysql_query( $sql );

// Daten ausgeben
while( $daten = mysql_fetch_array( $daten_r ) )
{
    // Beispiel Link für die Sortierung nach Datum
    if( $sortier_kriterium == "datum" && $sortier_richtung == "ASC" )
    {
        echo "<a href='...?ab=$seite&kriterium=datum&richtung=desc' title='absteigend nach Datum sortieren'>Datum</a>";
    }
    else
    {
        echo "<a href='...?ab=$seite&kriterium=datum&richtung=asc' title='aufsteigend nach Datum sortieren'>Datum</a>";
    }
}
?>

Ich hoffe das hilft dir weiter.

mfg.Fide
 
So,

jetzt habe ich mal das script angepasst, bekomme dann aber eine Fehlermeldung:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/meineseite/htdocs/aus.php on line 63

also ich denke das er von der Tabelle eine Spalte/Zeile haben will, die nicht vorhanden ist. Habe aber eigentlich dein Script angepasst, doch finde ich es nicht. Ich zeige dir noch mal das angepasste Script + Tabelle und die Config.php die ich include.

Dein Script:

PHP:
<?php
echo mysql_error();
include 'config.php';
$daten_pro_seite = 5;
$ab = 0;

// abfragen welche Seite der Benutzer sehen will
if( $_GET["ab"] ) 
{
    // -1 damit man bei Seite 0 auf mit dem ersten Datensatz beginnt
    $ab = ($_GET["ab"] - 1)*$daten_pro_seite;
}

// Anzahl der Datensätze ermitteln
$sql  = "SELECT COUNT(*) AS anzahl ";
$sql .= "  FROM $tbl_name ";
$sql .= " WHERE id ";
$anzahl_r = mysql_query( $sql );
$anzahl = mysql_fetch_assoc( $anzahl_r );

// Anzahl der benötigten Seiten ermitteln
$gesamtzahl = $anzahl["anzahl"];
$seiten = ceil( $gesamtzahl/$daten_pro_seite );

// Seitenauswahl ausgeben
for( $seite = 1; $seite <= $seiten; $seite++ ) 
{
    if( $seite != 1 ) 
    {
        echo "|";
    }
    echo "<a href='aus.php?ab=$seite' title='Seite: $seite'>$seite</a>";
}

// Abfrage ob nach was bestimmtem sortiert werden soll
if( isset( $_GET["kriterium"] ) && ( $_GET["kriterium"] == "datum" || $_GET["kriterium"] == "club" || $_GET["kriterium"] == "ort" ) )
{
    $sortier_kriterium = $_GET["kriterium"];
    $sortier_richtung = "ASC";
    
    if( $_GET["richtung"] == "desc" )
    {
        $sortier_richtung = "DESC";
    }
}

// Daten auslesen die zu der Seite gehören die der Benutzer sehen will
$sql  = "SELECT * ";
$sql .= "  FROM $tbl_name ";
$sql .= " WHERE id ";

// Sortierung vornehmen
if( isset( $sortier_kriterium ) )
{
    $sql .= "ORDER BY $sortier_kriterium $sortier_richtung ";
}

// Seitenauswahl vornehmen
$sql .= "LIMIT $ab, $angebote_proseite ";
$daten_r = mysql_query( $sql );

// Daten ausgeben
while( $daten = mysql_fetch_array( $daten_r ) );
{
    // Beispiel Link für die Sortierung nach Datum
    if( $sortier_kriterium == "datum" && $sortier_richtung == "ASC" )
    {
        echo "<a href='aus.php?ab=$seite&kriterium=datum&richtung=desc' title='absteigend nach Datum sortieren'>Datum</a>";
    }
    else
    {
        echo "<a href='aus.php?ab=$seite&kriterium=datum&richtung=asc' title='aufsteigend nach Datum sortieren'>Datum</a>";
    }
}
?>



meine config

PHP:
<?
$host="xxxx.xxxx.de"; // Host name 
$username="xxxxx08"; // Mysql username 
$password="xxxxxxxxxxx5"; // Mysql password 
$db_name="xxxxxxxx8"; // Database name 

$tbl_name="konzerte";  
mysql_connect("$host", "$username", "$password")or die("Keine Verbindung möglich"); 
mysql_select_db("$db_name")or die("Datenbank nicht vorhanden!");


?>


und die tabelle:
Code:
CREATE TABLE `konzerte` (
  `id` int(4) NOT NULL auto_increment,
  `club` varchar(255) NOT NULL default '',
  `eintrag` longtext NOT NULL,
  `ort` varchar(65) NOT NULL,
  `datum` varchar(65) NOT NULL,
  `datetime` varchar(25) NOT NULL default '',
  `view` int(4) NOT NULL default '0',
  `hits` int(4) NOT NULL default '0',
  `datei` varchar(150) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=24 DEFAULT CHARSET=latin1 AUTO_INCREMENT=24 ;


Vielleicht siehst du den Fehler ja.... :)


Grüße
 
Hi,
deine WHERE-Bedingung im SQL-Befehl ist glaube ich überflüssig. Ich hatte die nur drin gelassen weil ich nicht wusste ob die Daten evtl. aus mehreren Tabellen kommen. Und dann sind da noch 2 Logik Fehler von mir drin. Darum hier nochmal alles neu:

PHP:
<?php
echo mysql_error();
include 'config.php'; 

// Da ich nicht weiss wie deine Daten sind habe ich hier Dummys eingetragen
$con = mysql_connect( "server-ip", "user-name", "user-pw" );
mysql_select_db( "db-name", $con );

$daten_pro_seite = 5;
$ab = 0;

// abfragen welche Seite der Benutzer sehen will
if( $_GET["ab"] ) 
{
    // -1 damit man bei Seite 0 auf mit dem ersten Datensatz beginnt
    $ab = ($_GET["ab"] - 1)*$daten_pro_seite;
    $aktuelle_seite = $_GET["ab"];
}

// Anzahl der Datensätze ermitteln
$sql  = "SELECT COUNT(*) AS anzahl ";
$sql .= "  FROM $tbl_name; ";
$anzahl_r = mysql_query( $sql );
$anzahl = mysql_fetch_assoc( $anzahl_r );

// Anzahl der benötigten Seiten ermitteln
$gesamtzahl = $anzahl["anzahl"];
$seiten = ceil( $gesamtzahl/$daten_pro_seite );

// Seitenauswahl ausgeben
for( $seite = 1; $seite <= $seiten; $seite++ ) 
{
    if( $seite != 1 ) 
    {
        echo "|";
    }
    echo "<a href=aus.php?ab=$seite' title='Seite: $seite'>$seite</a>";
}

// Abfrage ob nach was bestimmtem sortiert werden soll
if( isset( $_GET["kriterium"] ) && ( $_GET["kriterium"] == "datum" || $_GET["kriterium"] == "titel" || $_GET["kriterium"] == "ort" ) )
{
    $sortier_kriterium = $_GET["kriterium"];
    $sortier_richtung = "ASC";
    
    if( $_GET["richtung"] == "desc" )
    {
        $sortier_richtung = "DESC";
    }
}

// Daten auslesen die zu der Seite gehören die der Benutzer sehen will
$sql  = "SELECT * ";
$sql .= "  FROM $tbl_name ";

// Sortierung vornehmen
if( isset( $sortier_kriterium ) )
{
    $sql .= "ORDER BY $sortier_kriterium $sortier_richtung ";
}

// Seitenauswahl vornehmen
$sql .= "LIMIT $ab, $daten_pro_seite; ";
$daten_r = mysql_query( $sql );

// Beispiel Link für die Sortierung nach Datum
if( $sortier_kriterium == "datum" && $sortier_richtung == "ASC" )
{
    echo "<br /><a href='aus.phpp?ab=$aktuelle_seite&kriterium=datum&richtung=desc' title='absteigend nach Datum sortieren'>Datum</a><br />";
}
else
{
    echo "<br /><a href='aus.php?ab=$aktuelle_seite&kriterium=datum&richtung=asc' title='aufsteigend nach Datum sortieren'>Datum</a><br />";
}
    
// Daten ausgeben
while( $daten = mysql_fetch_array( $daten_r ) )
{
    echo $daten["datum"]."<br />";
}
?>

Hier werden bis jetzt nur die Daten angezeigt und das auch ziemlich primitiv ohne Tabelle, aber ich denke das solltest du nun leicht erweitern können.

mfg.Fide
 
Zuletzt bearbeitet:
Gut der Fehler ist weg!

oben stehen jetzt 2 seiten und datum zum wählen... Aber es wird nichts ausgegeben. Wenn du mir jetzt noch sagst an welcher stelle ich die ausgabe kommt habe ichs...


Thx
 
Die Ausgabe hätte in die While-Schleife gemusst und die Datumslinkausgabe da drüber. Habe es oben mal verbessert ohne die Fehler die ich da noch drin hatte.
Hätte gestern doch etwas länger drüber gucken sollen^^
 
jup geht alles, das einzige was ich noch schön wäre ist die Seite die gerade angezeigt wird oben in der blätterfunktion evtl. Fett wäre.

Und das ich die Ausgabe noch umkehren kann. Also er sortiert das schon richtig, nur berechnet er zb. beim Datum das älteste und das jüngste aber bezieht sich auf alle Seiten, aber die 5 Einträge pro Seite sind dann von Unten nach oben, will es aber genau andersrum. :)


Danke dir für deine Schnelle und sehr gute Hilfe.


Grüße
 
Also die Sortierung sollte umgekehrt sein wenn du zum zweiten mal auf Datum klickst.

Und die aktuelle Seite fett zu schreiben geht auch relativ einfach:
PHP:
// Abfrage ob nach was bestimmtem sortiert werden soll
if( isset( $_GET["kriterium"] ) && ( $_GET["kriterium"] == "datum" || $_GET["kriterium"] == "titel" || $_GET["kriterium"] == "ort" ) )
{
    $sortier_kriterium = $_GET["kriterium"];
    $sortier_richtung = "asc";
    
    if( $_GET["richtung"] == "desc" )
    {
        $sortier_richtung = "desc";
    }
}

// Seitenauswahl ausgeben
for( $seite = 1; $seite <= $seiten; $seite++ ) 
{
    if( $seite != 1 ) 
    {
        echo "|";
    }
    if( $aktuelle_seite == $seite )
    {
        echo "<a href='333747-eintraege-als-liste-aus-mysql-darstellen-sortierung.php?ab=$seite&kriterium=$sortier_kriterium&richtung=$sortier_richtung' title='Seite: $seite'><b>$seite</b></a>";
    }
    else
    {
        echo "<a href='333747-eintraege-als-liste-aus-mysql-darstellen-sortierung.php?ab=$seite&kriterium=$sortier_kriterium&richtung=$sortier_richtung' title='Seite: $seite'>$seite</a>";
    }
}

Habe da nochmal die Reihenfolge der 2 Blöcke geändert, damit man auch beim Seitenwechsel die Sortierung bei behält. Sonst hatte man nach einem Seitenwechsel keine Sortierung mehr.
 
Zurück