Sebastian Riedel: Blätterfunktion funktioniert nicht!

hallo,

ich habe ein gästebuch mit einer blätterfunktion, doch diese gibt immer wieder die erste seite aus und springt nicht auf eine andere.
ihc weiß, dass das problem schon angesprochen wurde, aber das hat mir nicht weitergeholfen.
hoffentlich könnt ihr mir anhand des quellcodes helfen!

hier der link:
http://blonder.bl.funpic.de/index.php?section=guestbook

und hier das script:
<?php
    $sql = "SELECT
                COUNT(*) as number
            FROM
                guestbook";
    $result = mysql_query($sql) OR die(mysql_error());

$number = mysql_result($result, 0);

$start  = isset($_GET['page'])?(int)$_GET['page']:1;

if(!defined('LIMIT_NUM')) {
        die("Constant LIMIT_NUM is not defined.");
    }

$num_pages = ceil($number/LIMIT_NUM);

if(!$num_pages) {
        $num_pages = 1;
    }

if($start > 1) {
        $start = 1;
    }

if($start > $num_pages) {
        $start = $num_pages;
    }

$offset = ($start - 1) * LIMIT_NUM;

echo "<h2>\n";
    echo "    Guestbook\n";
    echo "</h2>\n";
    echo "<p>\n";
    echo "    <a href="index.php?section=gb_add">write entry</a>\n";
    echo "</p>\n";
    $sql = "SELECT
                name,
                DATE_FORMAT(guestbook.date, '".DATE_STYLE."') AS changedate,
                email,
                link,
                content
            FROM
                guestbook
            ORDER BY
                date DESC
            LIMIT
                ".$offset.",".LIMIT_NUM;
    $result = mysql_query($sql) OR die(mysql_error());
    echo "<p>guestbook entries: ".mysql_num_rows($result)."</p>\n";
    while($row = mysql_fetch_assoc($result)) {
        echo "<div class="gb_entry" align="center">\n";
        echo "    <div class="gb_head">\n";
        if(trim($row['email']) == "") {
            echo $row['name'];
        } else {
            echo "<a href="mailto:".$row['email']."">".$row['name']."</a>\n";
        }
        if(trim($row['link']) != "") {
            if(strtolower(substr($row['link'], 0, 7)) == "http://") {
                echo " <a href="".$row['link'].""><img src="images/homepage.gif"></a>";
            } else {
                echo " <a href="http://".$row['link'].""><img src="images/homepage.gif"></a>";
            }
        }

echo " wrote <span class="date">".$row['changedate']."</span>\n";
        echo "    </div>\n";
        echo "    <div class="gb_content">\n";
        echo changetext($row['content']);
        echo "    </div>\n";
        echo "</div>\n";
        echo "<br />\n";
        echo "<br />\n";
    }

if($num_pages > 1) {
        echo "<p>\n";
        for($i = 1; $i <= $num_pages; $i++) {
            if($i == $start) {
                echo $i."\n";
            } else {
                echo "<a href="index.php?section=guestbook&amp;page=".$i."">\n";
                echo $i."\n";
                echo "</a>\n";
            }
        }
        echo "</p>\n";
    }
?>

grüße, sebasitian

  1. echo $begrüßung;

    ich habe ein gästebuch mit einer blätterfunktion, doch diese gibt immer wieder die erste seite aus und springt nicht auf eine andere.
    hoffentlich könnt ihr mir anhand des quellcodes helfen!

    Fehlersuchen ist keine angenehme Arbeit, und ich mag sie auch nicht sonderlich. Das Vorgehen ist aber ein recht einfaches, wenn auch manchmal langwieriges. Du bekommst Daten aus den übergebenen Parametern, und berechnest selbst welche. Diese Daten, die temporär verwendeten Variablen und die Ergebnisse von Ausdrücken solltest du dir mit echo, print(), print_r() und/oder var_dump() ausgeben lassen und mit den von dir an der jeweilgen Stelle erwarteten Werten vergleichen. Auch das Einstellen des error_reporting auf E_ALL kann mit seinen Notice-Meldungen Hinweise auf falsch geschriebene Variablennamen und nicht vorhandene Array-Elemente liefern.

    echo "$verabschiedung $name";

    1. Und wie gehe ich da jetzt genau vor?

      1. echo $begrüßung;

        Und wie gehe ich da jetzt genau vor?

        Von irgendwoher bekommst du einen Parameter übergeben, der die Nummer der gewünschten Seite beinhaltet. Verfolge diesen Parameter durch dein Script, bis du weißt, warum die falschen Daten gewählt werden.
        Anfangen könntest du beispielsweise damit, dass du error_reporting(E_ALL); an den Anfang des Scripts einbaust[*] und dir den Inhalt des $_GET-Arrays ausgeben lässt: print_r($_GET); Übersichtlicher wird es in der Quelltext-Ansicht der Seite oder indem du ein <pre> vor dem print_r() ausgibst.
        Wenn eine Entscheidung zu treffen ist (if), kann man sich das Ergebnis der Bedingung mit var_dump() anzeigen lassen, um zu prüfen, dass die Bedingung das erwartete Ergebnis liefert. Z.B. so:

        var_dump(bedingung1 and bedingung2);
        var_dump(bedingung1);
        var_dump(bedingung2);
        if (bedingung1 and bedingung2)
          dies;
        else
          jenes;

        echo "$verabschiedung $name";

        [*] Nach beendeter Fehlersuche kann das wieder weg.

        1. hi!

          ich verstehe nicht ganz die vorgehensweise, sorry!
          ich habe jetzt folgendes an den anfang des scriptes eingefügt:

          error_reporting(E_ALL);
              print_r($_GET);

          dieses script gab dann flgendes auf der seite aus:

          Array ( [section] => guestbook [page] => 2 )

          was hat das dann gebracht?

          das problem ist folgendes: im eingabefeld des browsers ändert sich der link, wenn man auf eine nächste seite klickt, das heißt es fehlt nur noch etwas, was die nächsten einträge ausgibt. außerdem ändert sich der seitenlink, den man anklickt nicht so, dass er nicht mehr als link dargestellt wird, wie es eigentlich gewollt ist.
          also bleibt die ausgabe auf der seite gleich, nur der link im browser eingabefeld ändert sich.
          und was könnte das verursachen?

          grüße, sebastian riedel

          1. echo $begrüßung;

            ich verstehe nicht ganz die vorgehensweise, sorry!
            ich habe jetzt folgendes an den anfang des scriptes eingefügt:

            error_reporting(E_ALL);
                print_r($_GET);

            dieses script gab dann flgendes auf der seite aus:

            Array ( [section] => guestbook [page] => 2 )

            was hat das dann gebracht?

            Damit siehst du nun, dass die Parameter section und page übergeben wurden und welche Werte sie enthalten. Im weiteren Verlauf des Scripts stellst du nun damit und mit aus der Datenbank ermittelten Werten (z.B. Gesamtanzahl der Einträge) weitere Berechnungen an, die letzlich zur eingeschränkten Ausgabe der Gästebucheinträge (LIMIT) und der Links mit neuen Parameter für die weiteren Seiten führt. Wenn du bei der Ausgabe unerwünschtes Verhalten feststellst, hast du irgendwo dazwischen einen Berechnungsfehler. Den gilt es zu ermitteln, indem du dir die Ergebnisse der Berechnungen anschaust und nachprüfst, warum beispielsweise der else-Zweig ausgeführt wird obwohl die Bedingung doch wahr sein sollte, usw. usf.

            echo "$verabschiedung $name";

            1. na gut, ich werde es mal ausprobieren.

              vielen dank für die bemühungen! ich habe mir jetzt übrigens ein dickes buch bestellt ;)

              aber falls jemand noch eine idee hat, wie ich das prob lösen könnte, bitte melden! ich wäre sehr dankbar.

              grüße sebastian riedel

  2. n'abend,

    hättest du mal - wie dedlfix dir aufgetragen hat - nach jeder Berechnung / Prüfung der Werte einfach mal ein print_r() odr var_dump() gemacht, wäre dir wahrscheinlich aufgefallen, dass $start nie größer als 1 wird - weshalb du auch immer bei der ersten Seite hängen bleibst:

    if($start > 1) {
            $start = 1;
        }

    in Worten: Setze $start auf 1, wenn $start größer als 1.
    Hier willst du aber wohl eher sicherstellen, dass $start mindestens 1 ist. Du wolltest also < (kleiner) schreiben, hast aber > (größer) getippt - das passiert auch den Besten hin und wieder...

    weiterhin schönen abend...

    --
    Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
    sh:( fo:# ch:# rl:° br:> n4:& ie:{ mo:} va:) de:] zu:} fl:{ ss:? ls:[ js:|
    1. ooohhhhh!! ich idiot!

      vielen dank für die hilfe!
      hat gefunzt :)

      grüße sebastian riedel

      1. n'abend,

        vielen dank für die hilfe!
        hat gefunzt :)

        du wirst in deinem zukünftigen Programmiererleben noch über etliche dieser Vorfälle stolpern. Deshalb ist es sehr wichtig, dass du lernst, wie du diese Fehler aufspüren kannst. dedlfix predigt das hier im Forum nun schon seit anno achtzehnhunderttrölf. Wenn du keine Debuggingschnittstellen zur Verfügung hast, dann musst du dir eben mit den dir zur Verfügung gestellten Funktionen klar kommen. In PHP sind das eben print_r(), var_dump() und echo. Dir sequentiell alle nötigen Variablen ausgeben zu lassen und die Ausgaben zu analysieren erspart dir sicherlich tagelanges Warten auf die "richtige" Antwort.

        weiterhin schönen abend...

        --
        Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
        sh:( fo:# ch:# rl:° br:> n4:& ie:{ mo:} va:) de:] zu:} fl:{ ss:? ls:[ js:|