Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

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

mal angemerkt :)


$host = "xxxxxx";

$name = "xxxxx";
$passwort = "xxxxx";
[/PHP]

sehr ungeschickt ;)

Mist! Hab ich vergessen rauszumachen! Könnte das mal nen Admin ändern?

War echt nett!

Und danke für die Tipps!

Sebastian

Original geschrieben von muth

Mist! Hab ich vergessen rauszumachen! Könnte das mal nen Admin ändern?

Ist editiert....

Danke!

Werd mir von jetzt an nen Zettel mit der Aufschrift "MySQL-Daten nicht veröffentlichen" an mein Schreibtisch kleben...:)!

Sebastian

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


$res = mysql_query("select count(*) from tabelle")
$row = mysql_fetch_row( $res);
$anzahl = $row[0];
[/PHP]

Danke! Ich werd da mal schauen!

Sebastian

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!

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.

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

Nochmal Danke an alle. Ich werde dies morgen mal probieren.

Sebastian

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

Du hast das LIMIT vergessen, so kann er mit den Zahlen nichts anfangen.

Und mit 15-15 wird Mysql auch nichts anfangen können, das musst du vorher ausrechnen oder vernünftig quoten.

Gruß Jaraz

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

Dann hast du mysql_select_db nicht aufgerufen!

OK, mein Fehler! Vielen Dank!

Sebastian

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?!

Es funktioniert nun fast alles. Ich muss nur noch die Links für die Seiten 1, 2, 3... generieren. Nochmal DANKE an alle!

Sebastian

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.