Länge der Ausgabe von Daten aus DB begrenzen

Zneaf

Erfahrenes Mitglied
Hey Leute =)

ich habe heute eine Seite programmiert, auf der man als Admin News verfassen kann (mit MYSQL Datenbank).
Mit Außnahme eines einzigen Problems funktioniert das auch bestens.

Hier mein Problem:
Scheibt man einen Text, ohne Zeilenumbrüche, so sprengt dies beim Anzeigen dieses Textes die Tabelle in der der Text angezeigt wird. Anders gesagt: die Tabelle besitzt eine Breite von 500 Pixeln. Ist der Text länger als diese 500 Pixel, so wird die Tabelle auseinander gedehnt, was natürlich total beschissen aussieht.

Hier die Datei, auf der die News angezeigt werden:
PHP:
<?php
// Mit Datenbank verbinden
require_once("config2.php");

// Daten aus Datenbank abholen und absteigend nach id sortieren.
$sql = "SELECT * FROM home ORDER BY id DESC";
$result = mysql_query($sql,$db);

// Ausgabe	
while ($row = mysql_fetch_object($result)) {

	echo "<hr><table width=\"500\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">
		<tr>
			<td><font face=\"Arial\" color=\"#333333\"><b>$row->thema</b><i>($row->date)</i></font></td>
		</tr>
		</table>
		<hr>
		<br>
		<table width=\"500\" table=\"0\" cellspacing=\"0\" cellpadding=\"2\">
		<tr>
			<td><font face=\"Arial\" color=\"#333333\">$row->bericht</font></td>
		</tr>
	</table><hr>";
}
?>

Kann man vielleicht irgendwie festlegen, dass die Tabelle nicht auseinander gedehnt wird, sondern einfach Zeilenumbrüche im News-Text entstehen?

Oder habt ihr eine andere Idee, um dieses Problem zu lösen?

Hoffe ich konnte es verständlich erklären.
Falls ihr Fragen habt, stellt sie bitte ;)

Vielen Dank für Eure Hilfe

LG Zneaf =)
 
Grüße,

spontan würde mir da "max-width" als CSS-Attribut einfallen (bin mir allerdings nicht sicher, ob das auch auf Tabellen zutrifft). Ansonsten könnte man der Tabelle noch mit "overflow" zu Leibe rücken.
Ein "overflow:scroll" würde deine Tabelle nicht mehr dehnen, jedoch Scrollbalken einfügen (ist dann Geschmackssache, ob man das so lassen möchte).
 
Meinst du einen Text ohne Leerzeichen? Denn nur weil beim Eingeben keine Ümbrüche drin sind, wird der Text in der Tabelle doch nicht in eine Zeile geschrieben.

Du könntest zur Not aber hergehen und den Text zum Beispiel nach 100 Zeichen (so das es halt in die Zeile passt) mit str_split trennen und die so erstellten Teile einzeln ausgeben.
 
Ich nochmal.

Wenn es im Text doch Leerzeichen gibt und du diese an bestimmten Stellen durch "<br />" ersetzen willst, kannst du es so lösen:


PHP:
<?php

$text = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.";

do {
    $temp = substr($text.' ', 0, 100);
    $pos = strrpos($temp, ' ');
    $temp = substr($temp, 0, $pos);
    $split[] = $temp;
    $temp = '';
    $text = substr($text, ($pos + 1), strlen($text));
} while (strlen($text) > 100);

$text = implode("<br />", $split);

?>

Hier wird immer nach <= 100 Zeichen das Leerzeichen durch einen Zeilenumbruch ersetzt.
 
Hey tombe ;)

erstmal vielen Dank =)

glaube ich habs einigermaßen verstanden.
Hätte nur eine Frage: wende ich diese Code an, bevor der Text in der DB gespeichert wird oder nachher?
Spontan würde ich es vor dem Speichern in die DB machen. Oder?

LG Zneaf =)
 
Oder du nimmst einfach wordwrap().

Der folgende Code macht dasselbe wie der Code von tombe.
PHP:
$newText = wordwrap($text, 100, '<br />');

Hätte nur eine Frage: wende ich diese Code an, bevor der Text in der DB gespeichert wird oder nachher?
Spontan würde ich es vor dem Speichern in die DB machen. Oder?

Nachher. Denn beim Speichern weisst du noch nix über die Tabellenbreite. Auch wenn du diese mal änderst, sind so nicht alle Daten kaputt
 
Hi,

das ist Geschmacksache ob du er vorher oder nachher machst.

Der Vorteil wenn du es vor dem Speichern machst, ist der das der Datensatz nur einmal gespeichert aber x-mal angezeigt wird. Ergo hast du/das Skript so weniger zu tun.

Der Nachteil wäre das der Text halt um entsprechend viele Zeichen verlängert wird weil 1 Zeichen für " " durch 6 Zeichen für "<br />" ersetzt wird.

Das müsstest du dann halt bei der maximalen Textlänge bzw. Feldlänge noch berücksichtigen.

Ich denke aber das ich die Umwandlung auch gleich beim Speichern machen würde.

EDIT: yaslaw denkt mal wieder weiter. für diesen Fall (das sich die Tabellenbreite mal ändert) ist es natürlich besser den Umbruch nicht gleich zu speichern.
 
Zuletzt bearbeitet:
Ich denke aber das ich die Umwandlung auch gleich beim Speichern machen würde.
Siehe mein Beitrag oben. Beim Speichern ist äusserst schlecht. Somit hat man im gespeicherten Text Design-Vorgaben mitgespeichert. Beim Ändern des Designs, müssen somit alle Texte überabreitet werden. Es ist dann nicht agnz einfach alle automatisch erstellten Zeilenumbrüche zu löschen und neu zu setzen, während manuel eingegebene Zeilenumbrüche stehen bleiben sollen.

Darum ein ganz klares NEIN von mir zu einem wordwrap() vor dem Speichern.
 
Ok, dann verweise ich auf mein obiges "EDIT". Da habe ich dir nämlich zugestimmt.

Hatte als ich das geschrieben habe deinen Beitrag noch nicht gesehen.
 
Zurück