PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP + Formular: Zeilenumbruch nach Textausgabe



Skyfire
16-03-2007, 16:38
Hallo Leute,

Aus dem Internet habe ich mir ein PHP Gästebuch gezogen. Die Gäste geben ihren Text in die Textarea ein und klicken danach auf den "Eintragen Button". Der Text wird danach in eine SQL Datenbank geschrieben und ausgegeben.

Ich würde gerne verhindern, dass jemand mein Gästebuch vollmüllt und mein Desigin kaputt macht in dem er zB : "HalloHalloHalloHalloHalloHalloHalloHalloHalloHallo HalloHalloHalloHalloHalloHalloHalloHalloHalloHallo" schreibt

Gibt es eine Möglichkeit, bei der Textausgabe, nach zB 20 Zeichen automatisch ein Leerzeichen zu setzen oder einen Zeilenumbruch auszulösen? Ich will verhindern, dass dieses Hallohallohallo... in einer Zeile steht.

Ich hab leider nicht so viel Ahnung von PHP. Daher, wenn jemand eine Lösung hat, am Besten teile von meinne Quelltext kopieren, damit ich weis wo die Befehle hingehören. O_o

Danke schonmal im vorraus. Hier mein Quelltext:



<?php
// Die "db.php" wird includet. Damit haben wir die Verbindug zu der DB aufgebaut und haben alle Funktionen, die sich in der "db.php" befinden zur Hand.
include("db.php");

// 1. IF-Abfrage | Hinzufügen eines neuen GB-Eintrages
// Anweisungen werden ausgeführt, wenn die Variable "$action" den Wert "new" aufweist
if ($action == "new") {
echo "<b>Neuer beitrag</b><br>";
// 2. IF-Abfrage | Überprüft die Felder "$vorname" und "$text" auf ihre Vollständigkeit
if ($vorname != "" && $text != "") {
echo "Danke für Ihren Eintrag.<br><br>";
// Das aktuelle Datum(+Uhrzeit) werden auf die Variable "$datum" verwiesen. Das Datum besteht aus einer Zahlenfolge.
$datum = time();
// Der neue GB-Eintrag wird in die DB (Tabelle "gaestebuch") gespeichert
$sql = "INSERT INTO `gaestebuch` (`name`, `vorname`, `mail`, `icq`, `homepage`, `text`, `datum`)";
$sql .= "VALUES ('$name', '$vorname', '$mail', '$icq', '$homepage', '$text', '$datum');";
query($sql);
}
// Wenn die Felder nicht vollständig ausgefüllt sind, kommt folgende Meldung
else {
echo "Sie haben nicht alle Felder ausgef&uuml;t!";
// 2. IF-Abfrage ENDE
}
// 1. IF-Abfrage ENDE
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>G&auml;stebuch</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-5">
</head>
<body>
<h1>G&auml;stebuch</h1>
<h5><b>Hier k&ouml;nnen Sie einen neuen Eintrag erstellen:</b></h5>
<!-- Formular ANFANG //-->
<form action="gaestebuch.php">
<table cellpadding="0" cellspacing="5" border="0">
<tr>
<td width="100" class="text" align="right">Name:</td>
<td><input type="text" name="vorname" size="25" ></td>
</tr>


<tr>
<td class="text" align="right">e-Mail:</td>
<td><input type="text" name="mail" size="25"></td>
</tr>

<tr>
<td class="text" align="right">Homepage:</td>
<td><input type="text" name="homepage" value="http://" size="25"></td>
</tr>

<tr>
<td class="text" align="right" valign="top">Nachricht:</td>
<td><textarea cols="35" rows="10" name="text"></textarea></td>
</tr>

<tr>
<td class="text"><br><br><br>&nbsp;</td>
<td valign="top" align="right"><input type="submit" value="Eintragen"></td>
</tr>
</table>
<!-- Im hidden-Feld wird der Variablen "action" der Wert "new" zugewiesen (wichtig für die IF-Abfrage) //-->
<input type="hidden" name="action" value="new">
</form>
<!-- Formular ENDE //-->

<!-- Ausgabe aller GB-Einträge ANFANG //-->
<h1>Alle Eintr&auml;ge:</h1><br>
<table border="0" width="380" cellpadding="2" cellspacing="0">
<?php
// "$persite" legt die Anzahl der GB-Einträge fest, die pro Seite angezeigt werden
$persite = 5;

// IF-Abfrage und Variable "$page" sind für die Verteilung der GB-Einträge auf mehrere Seiten zuständig
if($x == "") $x = 0;
$page = $x*$persite;

// In den nächsten 5 Zeilen werden alle GB-Einträge auf einen Array ("$row") verwiesen
$result = query("SELECT * FROM gaestebuch ORDER BY Datum DESC LIMIT $page,5");
$anzahl = mysql_num_rows($result);
// WHILE-Schleife dient der Wiedergabe aller GB-Einträge, die sich in der DB befinden
// WHILE-Schleife ANFANG
while($row = mysql_fetch_array($result)) {
// IF-Abfrage überprüft ob eine Homepageadresse eingetragen ist oder nicht und macht dann eine entsprechende Ausgabe
if ($row[homepage]=="http://") {
$hp = "keine Homepage";
} else {
$hp = "<a href=\"$row[homepage]\" target=\"_blank\">Homepage</a>";
// IF-Abfrage ENDE
}
?>
<!-- Ausgabe der GB-Einträge //-->
<tr>
<td class="text"><b><? echo $row[vorname]; ?></b> <b><? $row[name]; ?></b> | <a href="mailto:<? echo $row[mail]; ?>">e-Mail</a> | <? echo $hp; ?></td>
</tr>
<?

// Da das Datum in einer Zahlenfolge in der DB liegt, muss diese zuerst in ein reguläres Datumformat zerlegt werden. Dies geschieht in folgenden 2 Zeilen
$datum = getdate($row[datum]);
$okay = "$datum[mday].$datum[mon].$datum[year] um $datum[hours]:$datum[minutes]";
?>
<tr>
<td class="text"><i>schrieb am <? echo $okay; ?></i></td>
</tr>
<?
// IF-Abfrage überprüft ob ein Kommentar vorhanden ist oder nicht und gibt diesen ggf. wieder
if ($row[8] == "") $kommentar = "";
else $kommentar = "<i><b>Antwort:</b> $row[kommentar]</i>";
?>
<tr>
<td class="text"> <? echo $row[text]; ?></td></tr>
<tr>
<td class="text">&nbsp;</td>
</tr>
<tr>
<td class="comment"><? echo $kommentar; ?></td>
</tr>
<tr>
<td class="text">&nbsp;</td>
</tr>
<tr>
<td class="text"><hr align="center" color="000000" width="100%"></td>
</tr>
<tr>
<td class="text">&nbsp;</td>
</tr>
<?
// WHILE-Schleife ENDE
}
?>
</table>
<?
// Die "menge"-Funktion wird aufgerufen um die Anzahl aller GB-Einträge zu ermitteln
$count = menge("gaestebuch");

// Im foldendem Abschnitt werden die GB-Einträge auf mehrere "Seiten" aufgeteilt
$count = $count/$persite;
// FOR-Schleife ANFANG
for($z=0; $z<$count; $z++) {
$y = $z+1;
// IF-Abfrage ANFANG
if ($x != $z) {
echo "<a href=\"gaestebuch.php?show=guestbook&kat=site&x=$z\">$y</a> | ";
} else {
echo "<b>$y</b> | ";
// IF-Abfrage ENDE
}
// FOR-Schleife ENDE
}
?>
<!-- Ausgabe der aller Gästebucheinträge ENDE //-->
</body>
</html>

h2o471
21-03-2007, 18:43
hi skyfire,

probier mal folgendes:



$originaltext = 'Huhu HalloHalloHalloHalloHalloHalloHalloHalloHalloHallo Hihi';
echo $originaltext.'<br />';

$textanzeige = '';
$maxLaenge = 20;
$arrText = explode(" ", $originaltext);
for($i=0; $i<count($arrText); $i++){
if(strlen($arrText[$i]) > $maxLaenge){
$schnipsel = substr($arrText[$i],0,$maxLaenge);
}else{
$schnipsel = $arrText[$i];
}
$textanzeige = $textanzeige.' '.$schnipsel;
}
echo $textanzeige;


die einzelnen worte des ankommenden formulars werden in ein Array geschoben und dort auf ihre länge geprüft. anschließend werden stücke die länger als 20 zeichen sind gekürzt und zum schluß alles wieder zusammengefügt.

ich hoffe es hilft.
gruss
mirko

Pingu
21-03-2007, 21:21
Ehrlich gesagt: Man sollte nicht einfach jedes Script aus dem Internet nehmen, welches man da findet.

Über das Problem mit überlangem Wort solltest Du Dir die geringsten Gedanken machen. Denn Dein Layout kann jeder durch einfachstest HTML zerstören, welches da eingebaut wird. Weiterhin ist das ganze offen für Cross-Site-Scripting-Attacken. Gar nicht erst zu Reden von SQL-Injection oder den ganzen Spammern, die Dein Gästebuch mit Link-Spam zu schmeisen werfen. Praktisch ein Paradebeispiel an "So tut man es nicht."

Ein Tip: Setz dich mit PHP auseinander oder verzichte auf ein Gästebuch.