HTML, CSS, PHP, MySQL

html-php.de

HTML & CSS Stylesheets Referenz JavaScript PHP MySQL Sonstiges Gästebuch Inhalt Impressum

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;

back top next