Problem mit einer Seitenzahlen auflistung !

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit einer Seitenzahlen auflistung !

    ich habe gerade mein eigenes forum fertig geschrieben und wollte nun in der thread und post auflistung eine seitenzahlen generierung implementieren die zur zeit so aussieht:

    PHP-Code:
         $limit 2;
        if(!isset(
    $_REQUEST['seite']))
           
    $seite=0;
        else
           
    $seite=$_REQUEST['seite'];

        
    $sql=mysql_query("SELECT * FROM test ORDER BY id ASC LIMIT $seite$limit"$connection);
        
    $anzahl=mysql_num_rows(mysql_query("SELECT * FROM test ORDER BY id ASC"$connection));

        for(
    $i=0$i<mysql_num_rows($sql); $i++)
        {
        
    $thread=mysql_fetch_object($sql);
        echo 
    "$thread->wert<br>";
        }

        if(
    $anzahl>$limit)
        {
            
    $Seiten=intval($anzahl/$limit);
            if(
    $anzahl%$limit)
            {
                
    $Seiten++;
            }
        }
        
    $vor "".$_GET[seite].""+2;
        
    $zurueck "".$_GET[seite].""-2;
        if(
    $_GET[seite]==0){
        }else{
        echo 
    "<a href=\"seiten_zahlen.php?seite=$zurueck\">Zurück</a>&nbsp;";
        }
        echo 
    "<select onChange=\"window.location.href='seiten_zahlen.php?seite='+options[selectedIndex].value\">";
            for(
    $i=1$i<=$Seiten$i++)
            {
            
    $limiter = ($i-1)*$limit;
            echo 
    "<option value=\"$limiter\">$i</option>";
            }
        echo 
    "</select>";
        if(
    $_GET[seite]==$limiter){
        }else{
        echo 
    "&nbsp;<a href=\"seiten_zahlen.php?seite=$vor\">Vor</a>&nbsp;";
        } 
    das funktioniert auch soweit ganz gut, ich wähle also die entsprechende seite über <option></option> aus und springe auch zu der enstprechenden auswahl, nur bekomme ich leider nicht die aktuelle seite angezeigt zu der ich gesprungen bin, sondern $i zeigt immer 1 an weil das ja die seitenzahl ist mit der es anfängt.

    wie kann ich das denn so gestalten das mir die seitenzahl als "status" angezeigt wird auf der ich mich nach der auswahl auch befinde zb. sprung zu seite 3 <option value=\"6\">3</option>?


    und dann noch eine frage, ich arbeite im grundegenommen eher mit funktionen (OOP) und vererbungen von klassen, wobei sich die eigentliche abfrage der datenbank in einer datei datenbank.php abspielt die so aussieht

    PHP-Code:
    class MySQLDB
    {
       var 
    $connection;

       function 
    MySQLDB(){
       
    $this->connection mysql_connect(DB_SERVERDB_USERDB_PASS) or die(mysql_error());
                           
    mysql_select_db(DB_NAME$this->connection) or die(mysql_error());
       }

       function 
    getDaten(){
          
    $sql "SELECT * FROM ".TBL_TEST." ORDER BY id ASC";
          
    $result mysql_query($sql$this->connection);
          
    $dbarray $result;
          return 
    $dbarray;
       }
    };
    $database = new MySQLDB
    wie könnte ich es schaffen dort die seitenzahlengenerierung in einer klasse zusammenzufassen die ich variabel auf mehrere abfragen hin immer wieder verwenden kann ?

    sorry das es nun 2 fragen geworden sind, aber da beides ja irgendwie zusammenhängt dachte ich mir wäre das doch besser sie in einem thread zu verfassen

    mfg
    scriptler
    Zuletzt geändert von scriptler; 04.07.2005, 02:58.

  • #2
    Moin,

    wie wäre es mit :
    PHP-Code:
    $string="<option value=\"$seite\""
    if(
    $i==$seite$string.=" selected";
    $string.=">$i</option>\n";
    echo 
    $string
    Damit wird die aktuelle Seite als 'selected' markiert.

    Bei deinem zweiten Problem sehe ich auch keine großen Hürden.
    Du mußt im Funktionsaufruf eben alle benötigten Variablen übermiteln:
    - Datenbank
    - seite
    - limit

    Und schon könntest du sie überall einbauen.

    Das solltest du übrigens vermeiden:
    PHP-Code:
    "SELECT * FROM ..." 

    Kommentar


    • #3
      @ExInfernis
      thx für den neuen scriptcode der select.auflistung, werde das gleich mal ausprobieren.

      also ich habe das schon gemacht mit dem übermitteln, nur muss ich doch auch per $_REQUEST['seite'] rausfinden was sache ist um diesen wert dann in die zweite datenbankabfrage mitreinzunehmen, und das sollte ja doch auf der seite geschehen won der ich zb. threads auslese und anzeigen lassen, und dann die seiten ergebnis an die datenbank.php zu schicken um dort die werte aus der db zu holen um sie wieder zurückzuschicken sehe ich als recht umständlich an, wobei ich mich da auch irren kann, habe seit 23 stunden nicht geschlafen :-/

      und was die SELECT * FROM sache angeht ist mir das bewußt, ist nur zu testzwecken, und da es sich momentan eh nur um 2 werte handelt id und name sehe ich das nicht so eng, später im foren script wird dann wie gewohnt alles wieder einzeln reingeschrieben was aus der db geholt werden soll.

      EDIT: habe den neuen quellcode von dir eingesetzt und ausprobiert und da ergibt sich das problem das zwar die seitenzahlen angezeigt werden, aber leider nur die werte aus dem limit.
      ich habe als limit 2 werte eingestellt die pro seite ausgegeben werden sollen da ich zur zeit genau 12 datenbank einträge habe ergibt das 6 seiten mit a`2 einträgen pro seite.

      ich habe dein script wie folgt eimgebunden:
      PHP-Code:
       for($i=1$i<=$Seiten$i++)
               {
               
      $string="<option value=\"$seite\"";
                  if(
      $i==$seite$string.=" selected";
                  
      $string.=">$i</option>\n";
                  echo 
      $string;
               }         for(
      $i=1$i<=$Seiten$i++) 
      doch ergibt sich dort ein problem!
      die if abfrage hier ($i==$seite) vergleicht lediglich den tatsächlichen seitenzahlenwert $i mit der seite $seite und die ist ja nicht immer gleich mit dem seitenzahlenwert.
      ich habe zur zeit das limit der anzeigbaren werte pro seite auf 2 limitiert, der datenbankbestand liegt bei 12, somit ergibt sich nur bei jeder zweiten seite eine konstante übereinstimmung, da zwar die seiten 1-6 per $i angezeigt werden, aber der wert von der variable $seite die werte 0, 2, 4, 6, 8 und 10 aufweißt.
      aber guggsdu selber mal *Klick*

      wobei ich aber denke ich lasse das bei folgender ausgabe:
      PHP-Code:
          $vor $seite+$limit;
          
      $zurueck $seite-$limit;
          if(
      $seite==0){}else{echo "<a href=\"seiten_zahlen.php?seite=0\">Anfang</a>&nbsp;
      <a href=\"seiten_zahlen.php?seite=
      $zurueck\">Zurück</a>&nbsp;";}

              for(
      $i=1$i<=$Seiten$i++)
              {
              
      $limiter = ($i-1)*$limit;
              echo 
      "<a href=\"seiten_zahlen.php?seite=$limiter\">$i</a>&nbsp;";
              }

          if(
      $seite==$limiter){}else{echo "&nbsp;<a href=\"seiten_zahlen.php?seite=$vor\">Vor</a>&nbsp;
      <a href=\"seiten_zahlen.php?seite=
      $limiter\">Ende</a>";} 
      dann nur noch bei mehr als 20 bis 30 seiten per explode alles zerstückeln und nur die ersten und letzten 5 oder 10 seiten ausgeben, dann passt das auch

      mfg
      scriptler
      Zuletzt geändert von scriptler; 04.07.2005, 06:05.

      Kommentar


      • #4
        sodelle,
        hab nun beide probleme selbst noch in den griff bekommen deren lösung ich euch natürlich auch nicht vorenthalten möchte

        Lösung zu Problem #1:
        PHP-Code:
            $vor $seite+$limit;
            
        $zurueck $seite-$limit;

            if(
        $seite==0){}else{
            echo 
        "<a href=\"daten.php?seite=0\">Anfang</a>&nbsp;
                  <a href=\"daten.php?seite=
        $zurueck\">Zurück</a>&nbsp;";}

                for(
        $i=1$i<=$Seiten$i++)
                {
                
        $limiter = ($i-1)*$limit;
                echo 
        "<a href=\"daten.php?seite=$limiter\">$i</a>&nbsp;";
                }

            if(
        $seite==$limiter){}else{
            echo 
        "&nbsp;<a href=\"daten.php?seite=$vor\">Vor</a>
                  &nbsp;<a href=\"daten.php?seite=
        $limiter\">Ende</a><br><br><br>";} 
        Lösung zu Problem #2:
        datenbank.php
        PHP-Code:
        class MySQLDB
        {
           var 
        $connection;

           function 
        MySQLDB(){
           
        $this->connection mysql_connect(DB_SERVERDB_USERDB_PASS) or die(mysql_error());
                               
        mysql_select_db(DB_NAME$this->connection) or die(mysql_error());
           }

           function 
        getDaten(){
            
        $limit 10;
            if(!isset(
        $_REQUEST['seite'])) $seite=0; else $seite=$_REQUEST['seite'];

              
        $sql "SELECT * FROM ".TBL_TEST." ORDER BY id ASC LIMIT $seite$limit";
              
        $result mysql_query($sql$this->connection);
              
        $dbarray $result;
              return 
        $dbarray;
           }

           function 
        getDatenSeite(){
              
        $sql mysql_query("SELECT * FROM ".TBL_TEST."");
              
        $dbarray mysql_num_rows($sql);
              return 
        $dbarray;
           }

        };
        $database = new MySQLDB
        datenausgabe.php
        PHP-Code:
           $Daten $database->getDaten();
           
        $anzahl $database->getDatenSeite();
           
        $limit=10;
           for(
        $i=0$i<mysql_num_rows($Daten); $i++)
           {
           
        $thread=mysql_fetch_object($Daten);
           echo 
        "ID: $thread->id, Wert: $thread->wert<br>";
           }

            if(
        $anzahl>$limit)
            {
                
        $Seiten=intval($anzahl/$limit);
                if(
        $anzahl%$limit)
                {
                    
        $Seiten++;
                }
            }
            
        $vor $seite+$limit;
            
        $zurueck $seite-$limit;

            if(
        $seite==0){}else{
            echo 
        "<a href=\"daten.php?seite=0\">Anfang</a>&nbsp;
                  <a href=\"daten.php?seite=
        $zurueck\">Zurück</a>&nbsp;";}

                for(
        $i=1$i<=$Seiten$i++)
                {
                
        $limiter = ($i-1)*$limit;
                echo 
        "<a href=\"daten.php?seite=$limiter\">$i</a>&nbsp;";
                }

            if(
        $seite==$limiter){}else{
            echo 
        "&nbsp;<a href=\"daten.php?seite=$vor\">Vor</a>
                  &nbsp;<a href=\"daten.php?seite=
        $limiter\">Ende</a><br><br><br>";} 
        wobei ich mein erstes problem nur indirekt gelöst habe, ich benutze halt einfache textlinks dafür, die ich aber später noch bearbeiten werde, so das immer nur die ersten 10 und die letzten 10 threads oder postings angezeigt werden, jenachdem wieviele einträge natürlich vorhanden sind, unter 20 einträge werden natürlich einfache textlinks ohne kürzung genutzt.


        mfg
        scriptler
        Zuletzt geändert von scriptler; 04.07.2005, 06:10.

        Kommentar


        • #5
          Moin,

          bin auch schon 24h wach, hoffe aber noch den Durchblick zu haben.

          Alles wie bisher auch, dann bei der DB-Abfrage eben :

          PHP-Code:
          $start=($seite-1)*$limit;
          $sql=mysql_query("SELECT * FROM test ORDER BY id ASC LIMIT $start$limit"$connection); 
          Ergibt dann den folgenden Code.
          Ist $seite nicht gesetzt geht es bei 1 los.
          $seite ist im kompletten Code als echte Seite zu sehen und wird
          erst vor der DB-Abfrage in den Startwert der LIMIT-Abfrage umgewandelt.

          PHP-Code:
          $limit 2;
          if(!isset(
          $_REQUEST['seite']))
             
          $seite=1;
          else
             
          $seite=$_REQUEST['seite'];

          $start=($seite-1)*$limit;// Umwandeln der Seitenzahl in den Startwert der DB-LIMIT-Abfrage

          $sql=mysql_query("SELECT * FROM test ORDER BY id ASC LIMIT $start$limit"$connection);
          $anzahl=mysql_num_rows(mysql_query("SELECT * FROM test ORDER BY id ASC"$connection));

          for(
          $i=0$i<mysql_num_rows($sql); $i++)
          {
          $thread=mysql_fetch_object($sql);
          echo 
          "$thread->wert<br>";
          }

          if(
          $anzahl>$limit)
          {
              
          $Seiten=intval($anzahl/$limit);
              if(
          $anzahl%$limit)
              {
                  
          $Seiten++;
              }
          }
          $vor $_GET['seite']+1;
          $zurueck $_GET['seite']-1;
          if(
          $_GET[seite]>=2)
              {
              echo 
          "<a href=\"seiten_zahlen.php?seite=$zurueck\">Zurück</a>&nbsp;";
              }
          echo 
          "<select onChange=\"window.location.href='seiten_zahlen.php?seite='+options[selectedIndex].value\">";
              for(
          $i=1$i<=$Seiten$i++)
              {
              
          $string="<option value=\"$seite\"";
              if(
          $i==$seite$string.=" selected";
              
          $string.=">$i</option>\n";
              echo 
          $string;
              }
          echo 
          "</select>";
          if(
          $_GET[seite]<<$limiter)
          {
          echo 
          "&nbsp;<a href=\"seiten_zahlen.php?seite=$vor\">Vor</a>&nbsp;";

          So, lohnt es sich nun noch ins Bett zu gehen?
          Naja, wohl eher nicht.

          P.S.: Brech bitte mal deinen Code und Text um, bei ner Auflösung
          von 1280x1024 noch seitlich scrollen zu müssen nervt ein wenig!
          Zuletzt geändert von ExInfernis; 04.07.2005, 05:47.

          Kommentar


          • #6
            das funktioniert dann aber leider nur wenn ich auch "vor" oder "zurück" gehe, mit dem sprung des options feld funktioniert das leider nicht, und einige andere sachen auch nicht so ;-/
            naja wiegesagt, ich belasse das bei meiner anderen (neuen) methode, die funktioniert wenigstens *fg*

            Kommentar

            Lädt...
            X