Blättern in Einträgen geht nicht

mlechner

Grünschnabel
Hallo!!

ich hab ein kleines (großes) Problem: ich lese Einträge aus einer Datenbank aus und gebe sie in html aus. So weit so gut.
Um das Ganze übersichtlicher zu machen, sollten auf jeder Seite nur 5 Einträge stehen. Ich hab mir mehrere Tutorials zum Thema 'blättern' angesehen und mir dann mein eigenes Progrämmchen gebastelt -> der Anfang vom Ende :rolleyes:

Unten findet ihr die (meiner Meinung nach) wichtigsten Teile vom Code. Könnt ihr mir sagen was ich da schon wieder falsch gemacht hab? :confused:

So viel weiß ich schon: die Variablen start, newStart, limit und total stimmen. lesen() funktioniert auch -> also ist was mit meinem Anker falsch, oder?

VIELEN DANK!

lg Monika

Code:
// ... Verbindung zur Datenbank

$limit = 5;
$resultID = mysql_query("SELECT COUNT(Bestellnummer) FROM Bestellungen",$dblink);
$total    = mysql_result($resultID,0);
		
echo lesen(0);
function lesen($start) { 
	echo $start;
	global $dblink;
	global $limit;
	$sql = "SELECT * FROM Bestellungen INNER JOIN Kunden.kundendaten ON";
	$sql.= " Bestellungen.Kundennummer=kundendaten.knum ORDER BY Bestellnummer DESC LIMIT " .$start.",".$limit;
		
        $result = mysql_query($sql,$dblink);

	if ($result) {
		while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
				
		// ausgabe der Einträge	
		}
						
	}
}
			
if ($start > 0)
{
	
  $newStart = ($start - $limit < 0) ? 0 : ($start-$limit);
  echo "<a href='#' onClick='lesen(".$newStart.")'>zurück</a>";
}

if ($start + $limit < $total)
{
  $newStart = $start + $limit;

  $func = "lesen(".$newStart.")";
  echo $func;
  echo "<a href='#' onClick='lesen(".$newStart.")'>vor</a>";
}
 
PHP Funktionen können nicht einfach so mit onClick kombiniert werden, dafür müsstest du den Zwischenweg über Ajax nehmen.
 
Hi,
was nicht stimmt ist das du per Javascripte ne PHP Funktion aufruften willst. Das geht nicht da dein Javascript lokal läuft und das PHP Script auf dem Server liegt.

Du hast zwei möglichkeit
Nr. 1 wie oben schon gesagt per Ajax, also Asynchron ohne Frage Antwort spielchen
oder
Nr. 2
du sendest einen neuen Request an den Server mit einem neuen generierten start Parameter

gruss
 
mhmm....

Also erst mal DANKE für die Antworten! So richtig verstehen tu ich sie aber nicht. Von Ajax hab ich zwar schon mal gehört aber was das ist oder wie das geht weiß ich leider nicht.
Also wär da noch Möglichkeit 2: Neuer Request an den Server mit neuen Parametern :confused:

Wenn mir das irgendwer erklären könnte? *hilflos schau*

ich hatte mal ne variante mit
<a href="bestellen.php?start=".$newStart>vor</a>
hat auch nicht funktioniert

Wär das eine neue Anfrage an den Server?

Nochmal Danke, lg

Monika
 
Hi,
was nicht stimmt ist das du per Javascripte ne PHP Funktion aufruften willst. Das geht nicht da dein Javascript lokal läuft und das PHP Script auf dem Server liegt.

Du hast zwei möglichkeit
Nr. 1 wie oben schon gesagt per Ajax, also Asynchron ohne Frage Antwort spielchen
oder
Nr. 2
du sendest einen neuen Request an den Server mit einem neuen generierten start Parameter

gruss

Was er in 2. meint ist eigentlich nichts anderes als ein stinknormaler Link mit den entsprechenden Parametern ;)

Ich bin an der Blätterfunktion auch mal fast gescheitert, sämtliche Tuts konnten mir da auch nicht wirklich weiterhelfen. Ich hab mich dann einfach mal hingesetzt und mir überlegt, was ich brauche, was passieren muss und vor allem was ich dazu brauche. Herausgekommen ist dann etwas dieser Art:
PHP:
    /**
    * Voraussetzung ist eine bestehende und offene Verbindung zu einer Datenbank
    * mit der Tabelle "tabelle", die die Zeilen "id", "title" und "text" beinhaltet.
    **/ 
    // Zählen aller Einträge der DB-Tabelle, speicherin in $count_items
    $query_count = "SELECT
                id
            FROM
                tabelle
            WHERE
                status = 1
        ";
    $result_count = mysql_query( $query_count );
    $count_items = mysql_num_rows( $result_count );

    // Festlegen des Offsets, also der Anzahl der anzuzeigenden Einträge, speichern in $offset
    $offset = 5;

    // Festlegen / herausfinden der Seitenzahl, speichern in $pagenr
    // Diese wird per GET übergeben: dateiname.php?pagenr=1
    // Falls die Seitenzahl nicht übergeben wurde, wird diese auf 1 gesetzt (für die erste Seite)
    $pagenr = isset( $_GET[ 'pagenr' ] ) && !empty( $_GET[ 'pagenr' ] )
                ? intval( $_GET[ 'pagenr' ] )
                : 1;
    // Ist die Kurzschreibweise für
    /**
    * if( $isset( $_GET[ 'pagenr' ] ) && !empty( $_GET[ 'pagenr' ] ) )
    * {
    *     $pagenr = intval( $_GET[ 'pagenr' ] );
    * }
    * else
    * {
    *     $pagenr = 1;
    * }
    **/

    // Berechnen des Seitenanzahl, Ergebnis aufrunden!
    $count_pages= ceil( $count_items / $offset );

    // Berechnen des Starteintrages, ab dem die Einträge ausgegeben werden sollen 
    $item_start = ( $pagenr * $offset ) - $offset;

    // Starten der DB-Abfrage für die Ausgabe der Tabellen
    $query_items = "SELECT
                title,
                text
            FROM
                tabelle
            WHERE
                (gleiche Bedingungen wie in $query_count!)
            ORDER BY
                id DESC
            LIMIT
                " . $item_start . "," . $offset . "
        ";
    $result_items = mysql_query( $query_items );

    // Ausgabe der Einträge
    while( $item = mysql_fetch_assoc( $result_items ) )
    {
        echo '<h1>' . $item[ 'title' ] . '</h1>' . "\n";
        echo '<p>' . $item[ 'text' ] . '</p>' . "\n\n";
    }

    // Ausgabe der Blätterfunktion als Liste
    // wird die aktuelle Seiten-Nummer ausgegeben, wird diese nicht verlinkt und fett angezeigt
    // Die \t und \n dienen nur dem schöneren HTML-Quellcode, sind also nicht unbedingt nötig
    echo '<ul style="list-style-type:none;">' . "\n";;

    for( $i = 1 ; $i < $count_pages ; $i++ )
    {
        echo "\t" . '<li style="float:left;margin:3px;">' . "\n";

        if( $i == $pagenr )
        {
            echo "\t\t" . '<b>' . $i . '</b>' . "\n";
        }
        else
        {
            echo "\t\t" . '<a href="dateiname.php?pagenr=' . $i . '">' . $i . '</a>' . "\n";
        }

        echo "\t" . '</li>' . "\n";
    }

    echo '</ul>';
Ich hoffe dir ein wenig geholfen haben zu können. Falls dir der Ablauf etwas unklar ist, arbeite das Script von Hand durch. Soll heißen nimm dir ein Blatt Papier und rechne das ganze von Hand Schritt für Schritt durch. Die Werte für Seitennummer $pagenr, Anzahl der Einträge in der DB-Tabelle gesamt $count_items und die Anzahl der anzuzeigenden Einträge $offset kannst du dann je nach belieben abändern und das ganze wiederholen. Ich hab das auch gemacht und eigentlich erst dadurch Begriffen, was passieren muss und was ich dazu brauche :)
 
Hi Muhkuh!

Danke für die Hilfe!!
Ich hatte so was ähnliches schon, nur ohne GET.

Jetzt funktionierts einwandfrei.:-)

Nochmal Danke
lg Monika
 
hallo, also ich hab mir dein Script auch mal kopiert und angepasst!

das Einzigste was nicht ausgegeben wird, is die anzeige des blätterns!


hier der code->
PHP:
// Ausgabe der Blätterfunktion als Liste
    // wird die aktuelle Seiten-Nummer ausgegeben, wird diese nicht verlinkt und fett angezeigt
    // Die \t und \n dienen nur dem schöneren HTML-Quellcode, sind also nicht unbedingt nötig

	echo '<ul style="list-style-type:none;">' . "\n";;
	
    for( $i = 1 ; $i < $count_pages ; $i++ )
    {
        echo "\t" . '<li style="float:left;margin:3px;">' . "\n";

        if( $i == $pagenr )
        {
            echo "\t\t" . '<b>' . $i . '</b>' . "\n";
			echo "hier sollte was stehen! \n";
        }
        else
        {
            echo "\t\t" . '<a href="blaettern.php?pagenr=' . $i . '"> ' . $i . '</a>' . "\n";
			echo "hier sollte was stehen!";
        }

        echo "\t" . '</li>' . "\n";
    }

    echo '</ul>';
..danke shcon mal für die hilfe!
 
Zuletzt bearbeitet:
Poste noch bitte den restlichen Code. Der Code, den du gepostet hast, funktioniert auch dann, wenn die Variable $count_pages einen Wert - der vom Typ Integer sein sollte - hat. Den vollen Funktionsumfang bekommt der Code aber auch erst, wenn die Variable $count_pages UND die Variable $pagenr einen Wert haben.

Überprüf deinen Code am besten mal darauf hin. Versuch den Code auch zu verstehen, nicht einfach nur zu kopieren :)
 
ja versuch ich, ja!

also hier der gesammte code wie ich ihn verwende.

PHP:
$host = "localhost";
$user = "kokuyos";
$pw = "";
$db = mysql_connect($host,$user,$pw)
	or exit ("Keine Verbindung hergestellt!") ;

/**
    * Voraussetzung ist eine bestehende und offene Verbindung zu einer Datenbank
    * mit der Tabelle "tabelle", die die Zeilen "id", "title" und "text" beinhaltet.
    **/ 
    // Zählen aller Einträge der DB-Tabelle, speicherin in $count_items
    $query_count = "SELECT
                id
            FROM
                blog
            WHERE
                status = 1
        ";
    $result_count = mysql_query( $query_count );
    $count_items = mysql_num_rows( $result_count );

    // Festlegen des Offsets, also der Anzahl der anzuzeigenden Einträge, speichern in $offset
    $offset = 1;

    // Festlegen / herausfinden der Seitenzahl, speichern in $pagenr
    // Diese wird per GET übergeben: dateiname.php?pagenr=1
    // Falls die Seitenzahl nicht übergeben wurde, wird diese auf 1 gesetzt (für die erste Seite)
    $pagenr = isset( $_GET[ 'pagenr' ] ) && !empty( $_GET[ 'pagenr' ] )
                ? intval( $_GET[ 'pagenr' ] )
                : 1;
    // Ist die Kurzschreibweise für
    /**
    * if( $isset( $_GET[ 'pagenr' ] ) && !empty( $_GET[ 'pagenr' ] ) )
    * {
    *     $pagenr = intval( $_GET[ 'pagenr' ] );
    * }
    * else
    * {
    *     $pagenr = 1;
    * }
    **/

    // Berechnen des Seitenanzahl, Ergebnis aufrunden!
    $count_pages= ceil( $count_items / $offset );

    // Berechnen des Starteintrages, ab dem die Einträge ausgegeben werden sollen 
    $item_start = ( $pagenr * $offset ) - $offset;

    // Starten der DB-Abfrage für die Ausgabe der Tabellen
    $query_items = "SELECT
                id,
				titel,
                text,
				datum
            FROM
                blog
            
            ORDER BY
                id 
            LIMIT
                " . $item_start . "," . $offset . "
        ";
    $result_items = mysql_query( $query_items );

    // Ausgabe der Einträge
    while( $item = mysql_fetch_assoc( $result_items ) or die(mysql_error()))
    {
        echo '<h1>' . $item[ 'titel' ] . '</h1>' . "\n";
        echo '<p>' . $item[ 'text' ] . '</p>' . "\n\n";
		echo '<p>' . $item[ 'id' ] . '</p>' . "\n\n";
		echo '<p>' . $item[ 'datum' ] . '</p>' . "\n\n";

    }

    // Ausgabe der Blätterfunktion als Liste
    // wird die aktuelle Seiten-Nummer ausgegeben, wird diese nicht verlinkt und fett angezeigt
    // Die \t und \n dienen nur dem schöneren HTML-Quellcode, sind also nicht unbedingt nötig

	echo '<ul style="list-style-type:none;">' . "\n";;
	
    for( $i = 1 ; $i < $count_pages ; $i++ )
    {
        echo "\t" . '<li style="float:left;margin:3px;">' . "\n";

        if( $i == $pagenr )
        {
            echo "\t\t" . '<b>' . $i . '</b>' . "\n";
			echo "hier sollte was stehen! \n";
        }
        else
        {
            echo "\t\t" . '<a href="blaettern.php?pagenr=' . $i . '"> ' . $i . '</a>' . "\n";
			echo "hier sollte was stehen!";
        }

        echo "\t" . '</li>' . "\n";
    }

    echo '</ul>';  

?>

wie gesagt die ausgabe der datensätze t. Und über die Adresszeile meines Browsers kann ich auch auf die folge seiten mittels http://meineseite.eu/blaettern.php?pagenr=2
zugreifen.
 
Ist bis auf ein paar Kleinigkeiten korrekt. Ich gehe mal davon aus, dass die Tabelle "blog" auch vorhanden ist und diese die vier Felder "id", "titel", "text" und "datum" beinhaltet.

PHP:
...
    // Starten der DB-Abfrage für die Ausgabe der Tabellen
    $query_items = "SELECT
                id,
                titel,
                text,
                datum
            FROM
                blog
            WHERE
                status = 1
            ORDER BY
                id DESC
            LIMIT
                " . $item_start . "," . $offset . "
        "; 
...
Die WHERE-Klauseln, die du in $query_count zum zählen aller Einträge nutzt, müssen auch im Query für die Einträge enthalten sein, bzw. müssen alle WHERE-Klauseln, die zum Auslesen der Einträge verwendet werden auch die Zählung aller Einträge beeinflussen.
Blog-Einträge werden in der Regel chronologisch rückwärts angezeigt, deswegen ODER BY id DESC (ist aber kein Fehler im eigentlichen Sinne).

PHP:
...
    $result_items = mysql_query( $query_items );

    // Ausgabe der Einträge
    while( $item = mysql_fetch_assoc( $result_items ) or die(mysql_error()))
    {
        echo '<h1>' . $item[ 'titel' ] . '</h1>' . "\n"; 
...
Das ergibt so keinen Sinn, weil eine While-Schleife automatisch gestoppt wird, wenn die Bedingung nicht mehr zutrifft. Richtig wäre
PHP:
...
    $result_items = mysql_query( $query_items )
                OR die( mysql_error() );

    // Ausgabe der Einträge
    while( $item = mysql_fetch_assoc( $result_items ) )
    {
        echo '<h1>' . $item[ 'titel' ] . '</h1>' . "\n"; 
...

Ansonsten habe nichts gesehen. Ich gehe davon aus, dass alle vorhandenen Blog-Einträge nicht status = 1 haben, also beim zählen aller Einträge etwas schief gelaufen ist, wenn die Einträge angezeigt werden.
 
Zurück