Funktion fürs Gästebuch
Bevor Sie den Beitrag abspeichern, sollten folgendes Beachtet werden. Als erstes sollten HTML- und
PHP-Tags aus den Text mit strip_tags($string);
entfernt werden.
Als zweites sollten Anführungszeichen und Backslashes durch ein Backslash mit addslashes($string);
geschütz werden. Zusätzlich habe ich noch BB-Code für das Gästebuch hinzugefügt.
function prepare4sql($string) { $string = trim($string); $string = strip_tags($string); $string = preg_replace("/([ \r\n])http:\/\/(.*) /iUms", "\\1[url]http://\\2[/url] ", $string); $string = preg_replace("/([ \r\n])https:\/\/(.*) /iUms", "\\1[url]https://\\2[/url] ", $string); $string = preg_replace("/([ \r\n])ftp:\/\/(.*) /iUms", "\\1[url]ftp://\\2[/url] ", $string); $string = preg_replace("/([ \r\n])www.(.*) /iUms", "\\1[url]http://www.\\2[/url] ", $string); $string = preg_replace("/^http:\/\/(.([^ ,\r\n])*) /iUms", "[url]http://\\1[/url] ", $string); $string = preg_replace("/^https:\/\/(.([^ ,\r\n])*) /iUms", "[url]https://\\1[/url] ", $string); $string = preg_replace("/^ftp:\/\/(.([^ ,\r\n])*) /iUms", "[url]ftp://\\1[/url] ", $string); $string = preg_replace("/^www.(.([^ ,\r\n])*) /iUms", "[url]http://www.\\1[/url] ", $string); $string = str_replace("[hr]", "<hr>", $string); //[hr] $string = preg_replace("/\[b\](.*)\[\/b\]/iUms", "<span style=\"font-weight: bold;\">\\1</span>", $string); //[fett] $string = preg_replace("/\[i\](.*)\[\/i\]/iUms", "<span style=\"font-style: italic;\">\\1</span>", $string); //[kursiv] $string = preg_replace("/\[u\](.*)\[\/u\]/iUms", "<span style=\"text-decoration: underline;\">\\1</span>", $string); //[unterstrichen] $string = preg_replace("/\[email\](.*)\[\/email\]/msiU", "<a href=\"mailto:\\1\">\\1</a>", $string); //[email] $string = preg_replace("/\[url\]www.(.*)\[\/url\]/iUms", "<a href=\"http://www.\\1\">http://www.\\1</a>", $string); //[url] $string = preg_replace("/\[url\](.*)\[\/url\]/iUms", "<a href=\"\\1\">\\1</a>", $string); //[url] $string = preg_replace("/\[url=(.*)\](.*)\[\/url\]/iUms", "<a href=\"\\1\">\\2</a>", $string); //[url=] $string = preg_replace("/\[img\](.*)\[\/img\]/iUms", "<img src=\"\\1\" style=\"border:0;\" alt=\"bild\">", $string); //[img] $string = preg_replace("/\[green\](.*)\[\/green\]/iUms", "<span style=\"color:green\">\\1</span>", $string); //[green] $string = preg_replace("/\[red\](.*)\[\/red\]/iUms", "<span style=\"color:red\">\\1</span>", $string); //[red] $string = preg_replace("/\[blue\](.*)\[\/blue\]/iUms", "<span style=\"color:blue\">\\1</span>", $string); //[blue] $string = preg_replace("/\[white\](.*)\[\/white\]/iUms", "<span style=\"color:white\">\\1</span>", $string); //[white] $string = addslashes($string); return $string; }
Unser Script eintragen.php
aus Formular auslesen
ändern wir dann noch wie folgt.
include 'inc/zugriff.php'; include 'inc/_functions.php'; $sql = "INSERT INTO beitrag (Name, eMail, HP, Beitrag, IP, Zeit) VALUES ('".addslashes(htmlspecialchars($_POST['realname']))."', '".addslashes(htmlspecialchars($_POST['email']))."', '".addslashes(htmlspecialchars($_POST['url']))."', '".prepare4sql($_POST['body'])."', '".$_SERVER['REMOTE_ADDR']."', $zeit)"; $erg = mysqli_query($dblink, $sql);
Und wir haben noch ein Problem. Zeilenumbrüche, die in der Datenbank abgespeichert sind, werden im
Gästebuch nicht übernommen. Um diese richtig anzuzeigen, gibt es in XHTML die Funktion
nl2br($string);
. Diesen können wir hier allerdings nicht anwenden, da dieses
Gästebuch in HTML in der strict-Variante geschrieben ist. Daher benutze ich die Funktion
str_replace("\r\n","<br>",$string);
. Hier der komplette Code
function prepare4view($string){ $string = str_replace("\r\n","<br>",$string); // $string = nl2br($string); $string = stripslashes($string); $new_text = ''; $string_1 = explode('>',$string); $sizeof = sizeof($string_1); for ($i=0; $i<$sizeof; ++$i) { $string_2 = explode('<',$string_1[$i]); if (!empty($string_2[0])) { $new_text .= preg_replace('#([^\n\r .]{50})#i', '\\1 ', $string_2[0]); } if (!empty($string_2[1])) { $new_text .= '<' . $string_2[1] . '>'; } } return $new_text;