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 = eregi_replace("([ \r\n])http://([^ ,\r\n]*)", "\\1[url]http://\\2[/url]", $string);
  $string = eregi_replace("([ \r\n])https://([^ ,\r\n]*)", "\\1[url]https://\\2[/url]", $string);
  $string = eregi_replace("([ \r\n])ftp://([^ ,\r\n]*)", "\\1[url]ftp://\\2[/url]", $string);
  $string = eregi_replace("([ \r\n])www\\.([^ ,\r\n]*)", "\\1[url]http://www.\\2[/url]", $string);
  $string = eregi_replace("^http://([^ ,\r\n]*)", "[url]http://\\1[/url]", $string);
  $string = eregi_replace("^https://([^ ,\r\n]*)", "[url]https://\\1[/url]", $string);
  $string = eregi_replace("^ftp://([^ ,\r\n]*)", "[url]ftp://\\1[/url]", $string);
  $string = eregi_replace("^www\\.([^ ,\r\n]*)", "[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';
  @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR 
    die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());
  mysql_select_db(MYSQL_DATABASE) OR
    die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());
  $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)";
  mysql_query($sql) OR die(mysql_error());

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;

Auch hier müssen wir den Code aus Sätze lesen ändern.

  $name = mysql_result($result, $i, 'Name');
  $datum = mysql_result($result, $i, 'Zeit');
  $datum = strftime('%d.%m.%Y um %H:%M', $datum);
  $text = mysql_result($result, $i, 'Beitrag');
  $comment = mysql_result($result, $i, 'Kommentar');
  $email = mysql_result($result, $i, 'eMail');
  $homepage = mysql_result($result, $i, 'HP');
  $text = str_replace($search, $replace, $text);
  $text = prepare4view($text);
  $comment = str_replace($search, $replace, $comment);
  $comment = prepare4view($comment);

back top next