Veröffentlicht 10. April 200421 j Hallo, also: Ich hab mir ein ganz kleines Gästebuch programmiert. Die Betonung liegt auf klein! So, nun möchte ich die Einträge Seitenweise darstellen. Also die ersten 15 auf der ersten, die nächsten 15 auf der zweiten. Wie mach ich das? Ich habe da an eine While-Schleife gedacht. Habe ich auch so gemacht, dass er mir nur 15 Einträge anzeigt. Und wie kann ich das jetzt machen, dass er mir auf der zweiten Seite die nächsten 15 Einträge anzeigt und nicht wieder die ersten 15. Ich hoffe ihr versteht, was ich meine. Hier ist mal der Code: <?php $host = "xxxxx"; $name = "xxxxx"; $passwort = "xxxxx"; $sql = mysql_connect($host, $name, $passwort); $dbname = "xxxxx"; mysql_select_db($dbname); $anfrage = mysql_query( "SELECT id,name,email,homepage,ort,nachricht FROM `gaestebuch` ORDER BY id DESC LIMIT 0, 30" ) or die ( "Konnte Gästebuch nicht anzeigen: ".mysql_error() ); while ($datensatz = mysql_fetch_object($anfrage) AND $i <= 15){ $i = $i + 1; print "<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"1\">"; print "<tr>"; print "<td colspan=\"4\"><font color=\"#7DA9F6\">leer</font></td>"; print "</tr>"; print "<tr>"; print "<td width=\"11%\"><strong>Name:</strong></td>"; print "<td width=\"32%\">$datensatz->name</td>"; print "<td width=\"18%\"><strong>aus dem Ort:</strong></td>"; print "<td width=\"39%\">$datensatz->ort</td>"; print "</tr>"; print "<tr>"; print "<td><strong>E-Mail:</strong></td>"; print "<td><a href=\"mailto:$datensatz->email\">$datensatz->email</a></td>"; print "<td><strong>Homepage:</strong></td>"; print "<td><a href=\"$datensatz->homepage\">$datensatz->homepage</a></td>"; print "</tr>"; print "<tr>"; print "<td colspan=\"4\"><strong>Nachricht:</strong></td>"; print "</tr>"; print "<tr>"; print "<td colspan=\"4\"><font color=\"#333333\">$datensatz->nachricht</font></td>"; print "</tr>"; print "</table>"; } ?>[/PHP] Danke im Vorraus! Sebastian
10. April 200421 j Hallo, das zählen in der while Schleife ist überflüssig. Du hast ja im SQL Teil geschrieben LIMIT 0,30. Das heißt er würde nur die ersten 30 ausgeben. Änder die 30 in eine 15 und dann kommen nur die ersten 15 Datensätze. Das mit den Seitenzahlen ist relativ einfach. Du mußt, wenn Du auf z. B. Seite 2 gehst, die Seitenzahl als Parameter mitgeben. Beispiel: <a href="gaestebuch.php?seite=2>Seite 2</a> Dann mußt Du nur abfragen ob $_GET['seite'] gefüllt ist. Wenn nein, nimmst Du deine bisherige SQL Anweisung. Wenn $_GET['seite'] gefüllt ist, dann machst Du folgendes: $hilf = $_GET['seite'] * 15; $sql = "select .... from tabelle where .. limit $hilf-15, $hilf [/php] Heißt bei Seite 2 = limit 15,30, Seite 3 = 30,45 usw. Frank
13. April 200421 j Hi, DANKE, das hört sich sehr einfach an. Ich muss dann nur noch die Anzahl der Datensätze in der Tabelle ermitteln, oder? Gibt es da einen bestimmen Befehl dazu? Sebastian
13. April 200421 j Original geschrieben von muth Hi, DANKE, das hört sich sehr einfach an. Ich muss dann nur noch die Anzahl der Datensätze in der Tabelle ermitteln, oder? Gibt es da einen bestimmen Befehl dazu? Sebastian select count(*) from tabelle
13. April 200421 j mal angemerkt $host = "xxxxxx"; $name = "xxxxx"; $passwort = "xxxxx"; [/PHP] sehr ungeschickt
13. April 200421 j Mist! Hab ich vergessen rauszumachen! Könnte das mal nen Admin ändern? War echt nett! Und danke für die Tipps! Sebastian
13. April 200421 j Original geschrieben von muth Mist! Hab ich vergessen rauszumachen! Könnte das mal nen Admin ändern? Ist editiert....
13. April 200421 j Danke! Werd mir von jetzt an nen Zettel mit der Aufschrift "MySQL-Daten nicht veröffentlichen" an mein Schreibtisch kleben...! Sebastian
13. April 200421 j Hmmm...ich bins nochmal! Also, ich hab das ganze jetzt mal so gemacht: // $anzahl = mysql_query( "SELECT count(*) from `gaestebuch`" ); mysql_close($sql); // print $anzahl;[/PHP] Er gibt mir, wenn ich das Auskommentieren natürlich weglasse, dann gibt er mir nur dies aus: [b]Resource id #5[/b] Ich würde es ja noch verstehen, wenn statt einer 5, eine 4 stehen würde. Es sind ja nur 4 Einträge in der Datenbank...:confused: ! Kann mir da nochmal einer helfen...! Schon mal DANKE im Vorraus! Sebastian
13. April 200421 j $res = mysql_query("select count(*) from tabelle") $row = mysql_fetch_row( $res); $anzahl = $row[0]; [/PHP]
13. April 200421 j Das ist die ID der Verbindung. Du mußt mit mysql_num_rows oder die Anzahl abfragen. Mehr unter http://www.selfphp.info/funktionsreferenz/mysql_funktionen/mysql_num_rows.php. Frank
13. April 200421 j Original geschrieben von palvoelgyi Das ist die ID der Verbindung. Du mußt mit mysql_num_rows oder die Anzahl abfragen. Mehr unter http://www.selfphp.info/funktionsreferenz/mysql_funktionen/mysql_num_rows.php. Frank das ist hier nicht ganz richtig. wenn du das mit num rows machen willst musst du das auf deine result id beziehen, mit der du im select die komplette tabelle abgefragt hast. die version die ich oben vorgeschlagen habe, gibt dir nur 1nen datensatz, der auch nur ein feld "besitzt" und in diesem feld steht auch schon die anzahl drinne!
13. April 200421 j Original geschrieben von kills wenn du das mit num rows machen willst musst du das auf deine result id beziehen, mit der du im select die komplette tabelle abgefragt hast. ist vielleicht nicht ganz verständlich: Also mit dem mysql_num_rows kannst du abfragen wieviel Datensätze in dem result-Set drinne sind, dass du vorher per SQL abgefragt hast. Das muss natürlich nicht zwingend heißen, dass sich das auf die komplette Tabelle bezieht, da ja durch einschränkungen im Where - Zweig eines SQL ja die Datensatzmenge stark variieren kann.
13. April 200421 j Original geschrieben von kills Also mit dem mysql_num_rows kannst du abfragen wieviel Datensätze in dem result-Set drinne sind, dass du vorher per SQL abgefragt hast. Das muss natürlich nicht zwingend heißen, dass sich das auf die komplette Tabelle bezieht, da ja durch einschränkungen im Where - Zweig eines SQL ja die Datensatzmenge stark variieren kann. Ich habe doch auch nichts anderes behauptet. Mit mysql_num_rows erhält er die Anzahl der Datensätze die die SQL Anweisung von Ihm zurück liefert. Frank
13. April 200421 j Also, ich bins nochmal. Ich hab doch schon nen bissl probiert und natürlich gleich wieder Probleme. Ich hoffe ich nerv nicht, bin halt noch nen Anfänger...! Ich hab den Code folgendermaßen geändert: $sql = mysql_connect($host, $name, $passwort); $seitenanzahl = $seite * 15; // $res = mysql_query( "select count(*) from `gaestebuch`" ); // $row = mysql_fetch_row($res); // $anzahl = $row[0]; $anfrage = mysql_query( "SELECT id,name,email,homepage,ort,nachricht FROM `gaestebuch` ORDER BY id DESC $seitenanzahl-15, $seitenanzahl" ) or die ( "Konnte Gästebuch nicht anzeigen: ".mysql_error() );[/PHP] Und bekomm nun diese Fehlermeldung: [b]Sebastian's Gästebuch: Hinterlasse mir eine Nachricht! Konnte Gästebuch nicht anzeigen: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '15-15, 15' at line 1[/b] Ich hab doch alles richtig gemacht...oder? Sebastian
13. April 200421 j Und mit 15-15 wird Mysql auch nichts anfangen können, das musst du vorher ausrechnen oder vernünftig quoten. Gruß Jaraz
13. April 200421 j OK, wenn ich das nun gemacht habe, bekomm ich die Meldung No Database selected! Irgendwie habe ich nun alles verhunzt... ! Nun sieht der Code so aus: $anfrage = mysql_query( "SELECT id,name,email,homepage,ort,nachricht FROM `gaestebuch` ORDER BY id DESC LIMIT $seitenanzahlminus, $seitenanzahl" ) or die ( "Konnte Gästebuch nicht anzeigen: ".mysql_error() );[/PHP] Trotzdem schon mal danke...! Sebastian
14. April 200421 j Original geschrieben von palvoelgyi Ich habe doch auch nichts anderes behauptet. Mit mysql_num_rows erhält er die Anzahl der Datensätze die die SQL Anweisung von Ihm zurück liefert. Frank ja sicher wollte dir auch nichts unterstellen :-) aber ich denke da er hier mit limit 30 arbeitet, wird er bei num_rows immer eine 30 oder weniger erhalten, oder?!
14. April 200421 j Es funktioniert nun fast alles. Ich muss nur noch die Links für die Seiten 1, 2, 3... generieren. Nochmal DANKE an alle! Sebastian
14. April 200421 j versuch das ma: $iMaxSites = $iMaxRows % 15; for ( $i = 0; $i < $iMaxSites; $i++) { echo "<a href='meineSeite.php?seite=". $i ."'>Seite ". $i . "</a><br>"; } [/PHP]
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.