PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gästebuch/Nachrichtensystem - nach 18 Zeilen neue Seite


Fettkopp
2009-12-01, 16:54:48
Mahlzeit,
ich bastel grad n kleines Nachrichtensysten. Soll nichts aufwendiges sein. Eigentlich ne Art Gästebuch.
Das Problem an der Webseite ist, dass nur Platz für 18 Zeilen vorhanden ist.

Nu wollte ich also, dass automatisch erkannt wird, wann die 18 Zeilen verbraucht sind... und je nachdem die Anzahl an Beiträge angezeigt werden.

Mit folgender Funktion, versuche ich zu erkennen, dass die 18 Zeilen bereits verbraucht sind


....
if ($query = mysql_query("SELECT * FROM Intern_Kommentare ORDER BY datum DESC LIMIT $start, $entrys")) {
while ($eintrag = mysql_fetch_array($query)) {
$datum[] = $eintrag["datum"];
$name[] = $eintrag["name"];
$inhalt[] = $eintrag["eintrag"];
}
} else die(mysql_error());


for ($i = 0; $i < count($name); $i++) {
$lines = explode("<br", stripslashes(nl2br($inhalt[$i])));
$number_lines = ($number_lines + count($lines) + 2);

if($number_lines < 18)
{
echo "<table>";
echo "<tr>";
echo "<td>";
echo "<h4>";
echo stripslashes($name[$i])." am ".date("d.m.Y - H:i",$datum[$i])." ";
echo "</h4>";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo stripslashes(nl2br($inhalt[$i].""));
echo "</td>";
echo "</tr>";
echo "</table>";
echo "<hr>";
$lastentry = $i;
}
}


danach lasse ich noch automatisch {Seite vor} und {zurück} erstellen, falls nötig, ist hier aber eigentlich irrelevant..

Mein Problem habe ich eher Dick markiert. Der Nutzer gibt seine Nachricht in einem Formular ein. Wenn dieser innerhalb des Formulars "Return" drück, wird auch eine neue Zeile erstellt (nl), und korrekt in ein <br /> umgewandelt. Wenn der Nutzer aber seinen gesamten Beitrag einfach so eingibt... dann wird der Beitrag auf der Seite zwar automatisch passend angezeigt, aber am Ende jeder Zeile ist kein <br />... dementsprechend erkennt mein Script nicht, wann wirklich nach 18 Zeilen Schluss ist...

Gibt es eine andere Möglichkeit, die erkennt, dass ich maximal 18 Zeilen verbrauchen kann? :confused:

Sephiroth
2009-12-01, 17:07:29
Wenn du eine fixe Breite (Zeilenbreite) und Schriftgröße hast, dann kannst du ausrechnen wie viele Zeichen auf eine Zeile passen usw.

DanMan
2009-12-01, 19:01:14
Das Problem an der Webseite ist, dass nur Platz für 18 Zeilen vorhanden ist.
Wieso? Wie muss man sich das vorstellen?

Fettkopp
2009-12-02, 10:19:30
@Sephirot:
Da ist dann das Problem, was man auf dem Screenshot auch sehen kann. Die Zeichen verbrauchen ja auch unterschiedlich Platz bzw. zudem müsste ich dann ja sicherlich Zeichen zählen + zusätzlich prüfen, ob während der Nachrichteneingabe, ein Zeilenumbruch gemacht wurde...
arghs.. alles so kompliziert :frown:


Wieso? Wie muss man sich das vorstellen?

Es darf keine Scrollbalken geben...siehe folgender Screenshot! btw. Sind etwas mehr als 18 Zeilen! Ich könnte natürlich einstellen, dass pro Seite maximal 2 Beiträge angezeigt werden, aber das sieht auch ätzend aus, wenn jede Nachrricht evtl. nur aus einem Satz besteht...

http://dl.dropbox.com/u/809438/Screenshot.png


Hab jetzt mal folgende Funktion eingefügt.. und scheint zumindestens zu funktionieren.... hab jetzt nur noch das Problem, dass ein Beiträg länger als 18 Zeilen komplett ignoriert wird.. :eek:


$umbruch = wordwrap( $inhalt[$i], 80, "<br />");

$lines = explode("<br", stripslashes($umbruch));
$number_lines = ($number_lines + count($lines) + 2);

DanMan
2009-12-02, 18:55:33
Es darf keine Scrollbalken geben.
Darf = soll, ja? Nun, mal davon abgesehen, dass mir das den Aufwand nicht wert wäre, zumal ich da auch keine Paginierung sehe, was bedeutet, dass ich mich Seite um Seite durch die Einträge blättern muss.. :ucrazy:

Die einzige Bedingung ist doch, dass es höchstens 18 Zeilen sein dürfen - weniger is egal. Also mach es eben näherungsweise:
Schätz ab, wie viele Zeichen max. bei der Schrift in 18 Zeilen passen. Pro Linefeed (\n) ziehst du einen Zeile ab. Teil die Höchstzahl an Zeichen durch die tatsächliche Anzahl
Wenn das aufgerundete Ergebnis dann größer als 1 ist hast du noch min. eine Zeile Platz. Mal 'ne blöde Frage: Fängst du es ab, wenn jemand mehr eintragen will?

Ich würd den Bereich einfach auf overflow:auto setzen, und alle Einträge da reiladen, so dass darin gescrollt werden kann. Dabei gehe ich davon aus, dass deine eigentliche Absicht ist, dass die Seite insgesamt nicht höher wird. Die Erläuterung bist du ja immer noch schuldig geblieben.