kostenloser Webspace werbefrei: lima-city


Newseinträge blätterbar machen?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    strange

    Kostenloser Webspace von strange

    strange hat kostenlosen Webspace.

    Hi,

    wie schon im Topic steht versuche ich ref="/tag/grad">grad mein Newssystem blätterbar zu machen. Nur habe ich im Moment keine Idee wie das gehen soll ohne 2 Kilometer Queltext zu tippen.

    Ziel ist es X News auf der Seite anzeigen zu lassen, die dann beliebig geblättert werden können. X ist in diesem Fall variabel und wird in meiner config als "$news_offset" definiert werden.

    Hier erst mal der aktuelle Code:

    <?php
      if(!isset($mysql_error)) {
        $newsqry = "SELECT
                       Titel,
                       Author,
                       Kurz,
                       Inhalt,
                       Datum
                    FROM
                       News
                    ORDER BY
                       Datum DESC";
        $news = mysql_query($newsqry) OR ($mysql_error = true);
                    
          if(!isset($mysql_error)) {
            if(mysql_num_rows($news)) {
              while($news_cont = mysql_fetch_assoc($news)) {
                $authorqry = "SELECT
                                  Vorname,
                                  Nachname
                              FROM
                                  users
                              WHERE
                                  ID = '".$news_cont['Author']."';";
                $auth_res = mysql_query($authorqry) OR ($auth_err = "1");
                $author = mysql_fetch_assoc($auth_res);
                echo '<p><b>'.$news_cont['Titel'].'</b></p>
                      <p>'.$news_cont['Kurz'].'</p>
                      <p><i>Geschrieben am: '.$news_cont['Datum'].
                      ', von: '.$author['Vorname'].' '.$author['Nachname'].'</i></p>';
              }
            } else {
              echo "Keine News vorhanden!";
            }
          }
        }
    ?>



    Beitrag geändert: 28.9.2008 16:19:55 von strange
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Willst du die dann mit PHP oder JS blätterbar machen?

    Leider kann ich nicht deinen ganzen Text lesen, da dein überlanger Code das Lima Layout zerstört.
    Kürze doch bitte die entsprechende(n) Zeile(en).

    Gruß, Prog
  4. Autor dieses Themas

    strange

    Kostenloser Webspace von strange

    strange hat kostenlosen Webspace.

    So nun sollte der Code besser zu lesen sein.

    Am besten über PhP, da ich so wenig wie möglich JS verwenden will.
  5. Ich würde die News in zwei Schritten holen: Erst mal alle aus der Datenbank auslesen und in einem Array speichern (inkl. Autorinformationen) und zur Anzeige dann eine for-Schleife a la

    $page = $_GET['page']; // Todo: isset prüfen, int prüfen, etc.
    $start = $page * $news_offset; // Der erste Eintrag
    $end = $start + $news_offset; // Der letzte Eintrag
    if ($end > count($news_array)) { // Wir können nur so viel anzeigen, wie wir haben...
      $end = count($news_array());
    }
    for ($i = $start; $i < $end; $i++) {
        // Hier auf $news_array[$i] zugreifen und ausgeben...
    }
    echo '<a href="news.php?page='.$page+1.'">Nächste Seite</a>';


    Das Prinzip sollte klar werden. Eventuell mag man bei $start auch ($page - 1) rechnen, sonst ist "0" die erste Seite.
  6. t*****b

    Grob geht es so:

    Anzahl Seiten = Anzahl der Newsbeiträge / gewünschte Anzahl der Newsbeiträge pro Seite
    Seiten auflisten (For-Schleife: news.php?page=1, news.php?page=2, ...)
    Dann beim SQL: SELECT ... LIMIT $page*$anzahlderbeiträgeproseite, $anzahlderbeiträgeproseite
  7. Autor dieses Themas

    strange

    Kostenloser Webspace von strange

    strange hat kostenlosen Webspace.

    Die Möglichkeit finde ich nicht ganz so elegant, da mir ein Zurück Link fehlt und jedesmal die ganze Tabelle abgefragt wird.

    Also ist die Variante nicht ganz so elegant... aber dennoch danke.

    Edit:

    @trueweb: genau so... danke, kannst mr aber ggf. mal nen Beispiel basteln so das dass in meinen Schädel auch rein geht.


    Beitrag geändert: 28.9.2008 17:00:29 von strange
  8. t*****b

    Quick and Dirty und nicht getestet:

    <?
    // Anzahl der Newsbeiträge pro Page
    $newsPerPage = 10;
    // Anzahl der Newsbeiträge in der DB
    mysql_query("SELECT count(*) AS anzahl FROM news");
    // Berechnen, wie viele Seiten 
    $anzahlPages = $anzahl/$newsperpage+1;
    
    // Parameter Page initialisieren, wenn nicht Angegeben dann auf 1 stellen (1. Seite)
    $page = $_GET["page"];
    if (empty($page)) { $page = 1; }
    
    // für LIMIT berechnen, ab welchem Datensatz ausgelesen werden soll, -1 da mit 0 anfangend in DB
    $from = $page-1*$newsPerPage;
    
    // Datensätze ausgeben
    $sql = "SELECT * FROM news LIMIT ".$from.", ".$newsPerPage;
    $res = mysql_query($sql); 
    while ($row = mysql_fetch_object($res)) {
     echo "news".$row->id."<br />";
    }
    
    // Seiten ausgeben
    for($i = 1; $i < $anzahlPages; $i++) {
     echo ?><a href=news.php?page=<?=$i;?>">Seite <?=$i;?></a><? 
    }
    ?>


    Hab ich schnell runtergecodet, also keine Garantie ;)


    Beitrag geändert: 28.9.2008 17:17:04 von trueweb
  9. Autor dieses Themas

    strange

    Kostenloser Webspace von strange

    strange hat kostenlosen Webspace.

    Super damit lässt sich arbeiten... Danke ;)

  10. Die Möglichkeit finde ich nicht ganz so elegant, da mir ein Zurück Link fehlt und jedesmal die ganze Tabelle abgefragt wird.

    Naja, nen Zurück-Link wirst du ja nach dem Beispiel des Vorwärts-Links grad noch selbst hinbekommen? :confused:

    Ansonsten: Ja, ist in dem Fall vielleicht nicht ganz so elegant, immer die ganze Tabelle abzufragen. Aber mag ja Fälle geben, in denen man die Daten z.B. per PHP sortieren/filtern oder sonstwas möchte ;)
  11. t*****b

    Addon für mein Script: Vor- und Zurückbutton:

    if ($page != 1) {
     echo "<a href=\"".$page--."\">Zurück</a>";
    } else {
     echo "Zurück";
    }
    
    // Seiten auflisten...
    
    if ($page != $anzahlPages) {
     echo "<a href=\"".$page++."\">Vor</a>";
    } else {
     echo "Vor";
    }


    Zur last: Es werden jeweils nur die gewünschten Anzahl der Einträge aufgelistet werden, außerdem sind Datebanken ja für große Mengen an Daten konzipiert, demnach sehe ich keine Probleme darin, jeweils die aktuellen Daten abzurufen.

  12. Addon für mein Script: Vor- und Zurückbutton:

    Bist Du sicher, dass du $page-- und $page++ verwenden möchtest? Verändert das in PHP nicht auch den Wert der Variablen? Imho etwas ungünstig, falls man $page danach nochmal irgendwo verwenden will ;)
  13. Autor dieses Themas

    strange

    Kostenloser Webspace von strange

    strange hat kostenlosen Webspace.

    So kleines Problemchen...

    <?php mysql_query("SELECT count(*) AS anzahl FROM news"); ?>

    Notice: Undefined variable: anzahl in C:xampphtdocssienna_newnewsindex.php on line 7

    Es sind aber schon 2 beispiel News drinn...


    Beitrag geändert: 28.9.2008 18:01:52 von strange
  14. t*****b

    Sorry mein Fehler, muss natürlich noch ausgeführt werden:

    $res = mysql_query("SELECT count(*) AS anzahl FROM news");
    $row = mysql_fetch_assoc($res);
    $anzahl = $row['anzahl'];



    Beitrag geändert: 28.9.2008 18:07:01 von trueweb
  15. Autor dieses Themas

    strange

    Kostenloser Webspace von strange

    strange hat kostenlosen Webspace.

    Bin ich auch grad drauf gekommen... hatten wa beide nen brett vorm kopf :P
  16. Autor dieses Themas

    strange

    Kostenloser Webspace von strange

    strange hat kostenlosen Webspace.

    So ich hab noch mal ein wenig gegoogelt und ne Lösung gefunden die ich gesucht habe. Nur hab ich damit wieder meine kleinen Probleme:

    Hier erst mal die Abfrage:

    <?php
      $offset = ($start - 1) * LIMIT_NUM;
    
      $sql = "SELECT
                  news.ID
                  news.Titel,
                  news.Inhalt,
                  DATE_FORMAT(news.Datum, '".DATE_STYLE."') AS Changedatum,
                  users.Vorname,
                  users.Nachname,
                  users.Email
              FROM
                  news,
                  users
              WHERE
                  news.Author = users.ID
              ORDER BY
                  news.Datum DESC
              LIMIT
                  ".$offset.",".LIMIT_NUM;
      $res = mysql_query($sql);
      while($row = mysql_fetch_assoc($res)) { // dies ist Line 47
        echo 'Titel der News: '.$row['news.Titel'].'<br>';
      }
    ?>


    LIMIT_NUM ist in disem Fall wieder via MySQL definiert und ist 4. Der Rest ist eigentlich fast wie beim alten Script nur das die ganze Offsetberechnung noch vorher kommt, die hat aber mit dem eigentlichen Problem nichts zu tun.

    Wenn ich nun die Seite bei mir aufrufe bekomme ich nur ein Fehlermeldung:
    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\sienna_new\news\index.php on line 47


    Was mache ich falsch?
  17. Autor dieses Themas

    strange

    Kostenloser Webspace von strange

    strange hat kostenlosen Webspace.

    EDIT. Erldeigt...


    Beitrag geändert: 28.9.2008 20:46:41 von strange
  18. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!