MeisterLeo: Blätterfunktion

Hallo,

ich habe mir eine Blätterfunktion zusammen "gebastelt" bze kopiert :-)

Nun hacke ich an einer Stelle:

  
if ($start + $limit < $total)  
{  
$newStart = $start + $limit;  
echo "<a href=".beispiel.php."?start=".$newStart.">vor &gt;&gt;</a>";  
}  

In der Andresszeile erscheint beispielphp?start=2 wenn ich auf den Link klicke. Aber es soll doch eingentlich beispiel.php?start=2 heissen oder?

Was mache ich denn da falsch?

Viele Grüße
MeisterLeo

  1. Was mache ich denn da falsch?

    du solltest dich ernsthaft zumindest mit grundzügen der php-dokumentaton auseinandersetzen, ein wunder, dass das so überhaupt funzt ;)

    1. Hallo,

      ich habe das nun so gemacht, zwar wird das richtige in der adresszeile anhgzeit, aber "blättern" tut es immernoch nicht.

        
      if ($start + $limit < $total)  
      {  
      $newStart = $start + $limit;  
      echo "<a href=".basename($_SERVER["PHP_SELF"])."start=".$newStart.">vor</a>";  
      }  
      
      

      vielleich noch einige informationen:

        
      $start = (isset($_GET['start'])) ? abs((int)$_GET['start']) : 0;  
      $limit = 2;  
      $resultID = @mysql_query("SELECT COUNT(ID) FROM  table ");  
      $total    = @mysql_result($resultID,0);  
      $start    = ($start >= $total) ? $total - $limit : $start;  
      
      

      vielleicht kann mir jemand weiterhelfen, da ein neues thread dafür doof wäre.

      Grüße
      MeisterLEO

      1. echo $begrüßung;

        $start = (isset($_GET['start'])) ? abs((int)$_GET['start']) : 0;

        Statt grünen Spirituosen könntest du die Funktion intval() verwenden, die garantiert auch einen Integerwert.

        $resultID = @mysql_query("SELECT COUNT(ID) FROM  table ");

        @ ist im Allgemeinen keine ausreichende Fehlerbehandlung, doch das nur nebenbei. Wenn du einen Teil einer Ergebnismenge haben möchtest, so fehlt noch eine entsprechende Formulierung in der Query. Die LIMIT-Klausel eignet sich dafür.

        echo "$verabschiedung $name";

        1. Hallo,

          MeisterLeo hat ein Problem wieder. Es ist echt mein letztes Problem und werde euch in diesem Leben nicht mehr mit meinen Problemen nerven.

          Ich bitte um Verständnis, das ich ein neues Thread öffne.

          Ich habe diesen Code teilweise selbst geschrieben und teilweise was passendes auf dem internet "kopiert" bzw "bearbeitet".

          $verbindung = mysql_connect ("localhost", "abcd", "efghijklmn")
          or die ("Fehler");
          mysql_select_db("abcd") or die ("Fehler");
          mysql_query("SET NAMES SET 'latin1'");
          mysql_query("SET character_set_client = 'latin1'");
          mysql_query("SET character_set_connection = 'latin1'");
          mysql_query("SET character_set_results = 'latin1'");

          error_reporting(E_ALL);

          $start = 0;
          $limit = 2;

          $resultID = @mysql_query("SELECT COUNT(ID) FROM  Table");
          $total    = @mysql_result($resultID,0);

          $query    = "SELECT Ids, Message FROM  Table LIMIT $start,$limit";
          $resultID = @mysql_query($query);

          if ($start > 0)
          {
          $newStart = ($start - $limit < 0) ? 0 : ($start-$limit);
          echo "<a href=".basename($_SERVER["PHP_SELF"])."?start=".$newStart.">zurück</a>";
          }

          if ($start + $limit < $total)
          {
          $newStart = $start + $limit;
          echo "<a href=".basename($_SERVER["PHP_SELF"])."?start=".$newStart.">vor</a>";
          }

          while ($row = mysql_fetch_array($resultID))
          {
          echo "
          <table cellspacing=0 align='center' rules=rows >
          <tr bgcolor='#CCCCCC'>
          <td width='280' align='left'>".$row["Ids"]."</td>
          <td width='280' align='right'>".$row["Message"]."</td>
          </tr>
          </table>
          ";
          }

          Nun, in der Datenbank sind ca. 20 Datensätze, die ersten beiden werden auch angezeigt. aber wenn ich auf "vor" klicke passiert nichts, nicht einmal der link "zurück" erscheint. Das Problem ist auch, dass die zwei Beiträge auch immernoch da sind.

          Viele Grüße und ein schönen Abend und Tausend Dank nochmal.
          MeisterLeo

          1. Hi,

            Nun, in der Datenbank sind ca. 20 Datensätze, die ersten beiden werden auch angezeigt. aber wenn ich auf "vor" klicke passiert nichts, nicht einmal der link "zurück" erscheint. Das Problem ist auch, dass die zwei Beiträge auch immernoch da sind.

            Das ist ja auch kein Wunder, wenn du den GET-Parameter start, den du im Link uebergibst, im Script ueberhaupt nicht benutzt.

            $start = 0;

            Hier setzt du $start immer auf 0.

            if ($start > 0)

            Das wird wohl ziemlich selten passieren.

            Informiere dich, wie man auf GET-Parameter in PHP zugreift.
            Und dann passe dein Script so an, dass es den uebergebenen start-Parameter auch nutzt.

            MfG ChrisB

            --
            „This is the author's opinion, not necessarily that of Starbucks.“
            1. Hallo,

              habe das jetzt etwa so gemacht:

              $verbindung = mysql_connect ("localhost", "abcd", "efghijklmn")  
              or die ("Fehler");  
              mysql_select_db("abcd") or die ("Fehler");  
              mysql_query("SET NAMES SET 'latin1'");  
              mysql_query("SET character_set_client = 'latin1'");  
              mysql_query("SET character_set_connection = 'latin1'");  
              mysql_query("SET character_set_results = 'latin1'");  
                
              error_reporting(E_ALL);  
                
              $start = (isset($_GET['start'])) ? abs((int)$_GET['start']) : 0;  
              $limit = 2;  
                
              $resultID = @mysql_query("SELECT COUNT(ID) FROM  Table");  
              $total    = @mysql_result($resultID,0);  
                
              $start    = ($start >= $total) ? $total - $limit : $start;  
                
              $query    = "SELECT Ids, Message FROM  Table LIMIT $start,$limit";  
              $resultID = @mysql_query($query);  
                
              if ($start > 0)  
              {  
              $newStart = ($start - $limit < 0) ? 0 : ($start-$limit);  
              echo "<a href=".basename($_SERVER["PHP_SELF"])."?start=".$newStart.">zurück</a>";  
              }  
                
              if ($start + $limit < $total)  
              {  
              $newStart = $start + $limit;  
              echo "<a href=".basename($_SERVER["PHP_SELF"])."?start=".$newStart.">vor</a>";  
              }  
                
              while ($row = mysql_fetch_array($resultID))  
              {  
              echo "  
              <table cellspacing=0 align='center' rules=rows >  
              <tr bgcolor='#CCCCCC'>  
              <td width='280' align='left'>".$row["Ids"]."</td>  
              <td width='280' align='right'>".$row["Message"]."</td>  
              </tr>  
              </table>  
              ";  
              }
              

              das problem bleibt immernoch. undzwar, wenn ich in mein Gästebuch draufklicke erscheinen dort, wie gewünscht zwei beiträge und in der adreszeile gbook.php. wenn ich nun auf "vor" klicke, sind die zwei beiträge immernoch da, obwohl die nächsten zwei beiträge erscheinen sollen und KOMISCHER weise steht zwar in der Adreszeile gbook.php?start=2, seltsam... Aber vielleicht sollte ich noch folgendes ERWÄHNEN: das skript wo der inhalt von gbook.php eingeben ist, befindet sich in einem ordener z.b. www.abcd.com/skripte/gbook.php und der skript wird in die subdomain www.subdomain.abcd.com/gbook.php includet. deswegen habe ich den tag von <a href=...> den parameter .basename($_SERVER["PHP_SELF"]). ohne diesen parameter kommt in die adreszeile: www.subdomain.abcd.com/skripte/gbook.php?start=2. Vielleicht liegt es doch nur an dem tag oder so?

              MeisterLeo

              1. Hallo,

                kann mir echt keiner weiterhelfen?

                Gruß
                MeisterLeo

                1. Hallo, HALLO HALLO,

                  kann wirklich niemand mir helfen? Ich habe nun die stelle, ESCAPED, aber es funzt immernoch nicht....

                  Bitte Bitte um Hilfe!!!!!!

                  if ($start + $limit < $total)  
                  {  
                  $newStart = $start + $limit;  
                  echo"<a href=\"?start=$newStart\">vor</a>";  
                  }
                  

                  Ich habe auch anstelle von echo auch print benutzt, aber nichts hat sich geändert. Das Problem bleibt immernoch. In der Adresszeile steht zwar schon, ......php?start=2 aber der blätter nicht. es sind immernoch die gleichen beiträge zu sehen wie auf der ersten seite.

                  hat es vielleicht was damit zu tun, das der skript includet wird von einer anderen domain, also

                  skript ist auf der seite www.aaaaaa.com/skripte
                  und per include in www.bbb.aaaaa.com/beispiel.php includet.

                  vielen Dank für eure hilfe.

              2. echo $begrüßung;

                Zunächst: Drängle nicht! Es wird dir jemand helfen, wenn bei einem potentiellen Helfer Zeit, Interesse und (idealerweise auch) Wissen vorhanden ist. Drängeln senkt im Allgemeinen das Interesse. (Außerdem schreibt man Wörter auf -weise, wie komischerweise, nach wie vor zusammen.)

                $verbindung = mysql_connect ("localhost", "abcd", "efghijklmn")
                or die ("Fehler");

                or die() ist in den seltensten Fällen eine sinnvolle Fehlerbehandlung. Den Text "Fehler" auszugeben ist noch weniger hilfreich, weder für dich als Programmiere noch für den späteren Anwender.

                mysql_query("SET NAMES SET 'latin1'");

                Die Anweisung heißt: SET NAMES latin1. Die Anführungszeichen sind nict notwendig und das zweite SET ist falsch.

                mysql_query("SET character_set_client = 'latin1'");
                mysql_query("SET character_set_connection = 'latin1'");
                mysql_query("SET character_set_results = 'latin1'");

                Diese drei Werte werden bereits von SET NAMES gesetzt (wenn es richtig formuliert ist).

                error_reporting(E_ALL);

                Sehr schön, aber zur Fehlersuche noch nicht ausreichend. Wenn, wie in deinem Fall, Wunsch und Wirklichkeit nicht übereinstimmen, so prüft man am besten die Wirklichkeit mit Kontrollausgaben. Du hast Anweisungen notiert Variablen verwendet und solltest dich auch davon überzeugen, dass sie so arbeiten beziehungsweise das enthalten, wie es von dir vorgesehen ist. Kontrollausgaben gehen im einfachsten Fall mit echo, besser, weil genauer, ist var_dump(). Bei komplexen Strukturen (Arrays, Objekte) empfiehlt sich ein vorangehendes <pre> zur Formatierung der Ausgabe.

                [...] Vielleicht liegt es doch nur an dem tag oder so?

                Finde es mit Kontrollausgaben heraus.

                echo "$verabschiedung $name";

  2. Hi MeisterLeo!

    Was mache ich denn da falsch?

    Der Interpreter sucht die Konstanten "beispiel" und "php". Sind diese nicht definiert, wandelt er den Namen der Konstanten in einen String um und gibt den zurück.
    Diese zwei Strings verknüpfst du nun: "beispiel"."php" ergibt "beispielphp".

    Manchmal wäre es halt doch nicht sooo schlecht, sich mit den Grundlagen zu beschäftigen.

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Hi,

      Der Interpreter sucht die Konstanten "beispiel" und "php". Sind diese nicht definiert, wandelt er den Namen der Konstanten in einen String um und gibt den zurück.

      weißt Du zufällig, ob dieser Bug in PHP 6 behoben sein wird?

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hallo Cheatah.

        weißt Du zufällig, ob dieser Bug in PHP 6 behoben sein wird?

        Das ist in diesen Meeting Notes nicht ersichtlich, also eher nicht. (Ist zwar schon von 2005, aber was anderes konnte ich nicht finden.)

        Servus,
        Flo

      2. Hi Cheatah!

        Der Interpreter sucht die Konstanten "beispiel" und "php". Sind diese nicht definiert, wandelt er den Namen der Konstanten in einen String um und gibt den zurück.
        weißt Du zufällig, ob dieser Bug in PHP 6 behoben sein wird?

        Ich bin ja erfreut, dass du mir eventuell die Kompetenz zutraust, das zu wissen, aber da muss ich dich leider enttäuschen.

        Meine Interessen liegen im Moment eher bei (Delphi) und (C++ in Verbindung mit Lua).

        Aber wenn PHP 6 solche Macken wie die automatische Umwandlung von bare strings mitschleppt, denke ich dass der Anteil von (professionellen) Webanwendungen, die PHP nutzen, zurückgeht.
        Ich gehe da vor allem von mir persönlich aus. Im Moment würde ich eine größere Anwendung eher auf die Basis von C++ und Lua stellen, obwohl PHP durchaus in Betracht gezogen würde. Mit dem Einsatz einer Skriptsprache wie Lua wäre ich annähernd so flexibel wie mit PHP, hätte allerdings den Vorteil einer Sprache, die mir viel besser gefällt.

        Der große Vorteil von PHP ist halt die wirklich gute Dokumentation und die weite Verbreitung bei zum Teil kostenlosen Webspace-Anbietern.

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
      3. echo $begrüßung;

        Der Interpreter sucht die Konstanten "beispiel" und "php". Sind diese nicht definiert, wandelt er den Namen der Konstanten in einen String um und gibt den zurück.
        weißt Du zufällig, ob dieser Bug in PHP 6 behoben sein wird?

        Für PHP 6 werden viele Script umzuschreiben sein, aber dass $foo[bar] nicht mehr wie $foo['bar'] funktionieren soll ist mir bisher nicht begegnet.

        echo "$verabschiedung $name";

  3. Hallo,

    ich habe mir eine Blätterfunktion zusammen "gebastelt" bze kopiert :-)

    aha. Du hättest ruhig dort im Thread bleiben können, dann wäre im Archiv dokumentiert, dass Dir die dort genannten Suchbegriffe weitergeholfen haben.

    echo "<a href=".beispiel.php."?start=".$newStart.">vor &gt;&gt;</a>";

      
    Was steht in den Konstanten  
        beispiel  
    und  
        php  
    drin?  
      
    Möchtest Du etwa stattdessen einfach die Zeichenkette  
      
        `'beispiel.php'`{:.language-php}  
      
    verwenden?  
      
    
    > In der Andresszeile erscheint beispielphp?start=2 wenn ich auf den Link klicke. Aber es soll doch eingentlich beispiel.php?start=2 heissen oder?  
      
    PHP ist gnädig und fehlertolerant aber nicht allwissend. Schalte beim Entwickeln stets alle Fehlermeldungen ein (und vergiß auch nicht, sie Dir anzeigen zu lassen). Dazu sollten Dir die Funktion    [error_reporting()](http://www.php.net/manual/de/function.error-reporting.php) und die Direktive [display_errors](http://www.php.net/manual/de/errorfunc.configuration.php#ini.display-errors) weiterhelfen.  
      
      
    Freundliche Grüße  
      
    Vinzenz
    
  4. Hi,

    In der Andresszeile erscheint beispielphp?start=2 wenn ich auf den Link klicke. Aber es soll doch eingentlich beispiel.php?start=2 heissen oder?

    Was mache ich denn da falsch?

    beschäftige Dich mit Escapen!

    MfG

    Hugo Egon Balder

  5. Hi,

      
    echo "<a href=".beispiel.php."?start=".$newStart.">vor &gt;&gt;</a>";  
    
    

    Die Menge und Positionierung von " sieht etwas ungescheit aus.

      
    echo "<a href=\"beispiel.php?start=".$newStart."\">vor &gt;&gt;</a>";  
    
    

    Falls man in PHP mittels \ ein Zeichen escapt.

    Ciao, Frank

    1. echo "<a href="beispiel.php?start=".$newStart."">vor &gt;&gt;</a>";

      
      >   
      > Falls man in PHP mittels \ ein Zeichen escapt.  
        
      schlauer ist es hin gegen, single-quoted-strings zu verwenden, damit man einen großteil der escpaperei spart  
        
      im übrigen ist das &gt;&gt; schlechtetr stil - der link sollte die klasse "next" oder ähnliches erhalten, die pfeile sind als pseudo-inhalt oder hintergrund einzubinden
      
      1. Hi,

        schlauer ist es hin gegen, single-quoted-strings zu verwenden, damit man einen großteil der escpaperei spart

        noch schlauer könnte die Verwendung von printf() respektive ggf. sprintf() sein.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  6. hi $name,

    Hallo,

    ich habe mir eine Blätterfunktion zusammen "gebastelt" bze kopiert :-)

    ja, das impliziert dein problem.

    Nun hacke ich an einer Stelle:

    if ($start + $limit < $total)
    {
    $newStart = $start + $limit;
    echo "<a href=".beispiel.php."?start=".$newStart.">vor &gt;&gt;</a>";
    }

    
    >   
    > In der Andresszeile erscheint beispielphp?start=2 wenn ich auf den Link klicke. Aber es soll doch eingentlich beispiel.php?start=2 heissen oder?  
    >   
    > Was mache ich denn da falsch?  
      
    schau dir mal u.a. die string funktionen an, warum zeichen escaped werden müssen und den unterschied zwischen " und '.  
    Sprich: bescfäftige dich bitte mit den grundlagen.  
    ![http://www.php.net/manual/de/](http://www.php.net/manual/de/)  
    [http://www.php.net/manual/de/](http://www.php.net/manual/de/)  
      
      
    gruss  
    shadow  
      
    p.s.  
      
     ~~~php
      
     if ($start + $limit < $total)  
     {  
     $newStart = $start + $limit;  
     echo '<a href="beispiel.php?start='.$newStart.'">vor &gt;&gt;</a>';  
     }  
     
    

    p.p.s.
    äh ich hab da meine zweifel ob das überhaupt funzt[TM], keine abfrage, sondern eine schleife wäre angebracht.

    --
    Vor dem Parser und auf hoher See sind wir allein in Gottes Hand