Newseinträge blätterbar machen?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anzahl
ausgeben
beispiel
berechnen
code
dank
datum
grad
limit
nachname
offset
ordern
page
re
schleife
start
strang
tabelle
verwenden
vorname
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
So nun sollte der Code besser zu lesen sein.
Am besten über PhP, da ich so wenig wie möglich JS verwenden will. -
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.
-
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 -
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 -
Super damit lässt sich arbeiten... Danke ;)
-
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?
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 ;)
-
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. -
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 ;)
-
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 -
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 -
Bin ich auch grad drauf gekommen... hatten wa beide nen brett vorm kopf :P
-
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?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage