Subversion Repositories php_guestbook

Rev

Rev 4 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. <?php
  2.  
  3. # ViaThinkSoft PHP Guestbook 2.8.1
  4. # (C) 2003-2017 ViaThinkSoft, Daniel Marschall
  5. # Licensed under GPL v3
  6.  
  7. // Version des Gästebuchs
  8. $version = '2.8.1';
  9.  
  10. if (!file_exists(__DIR__ . '/config/config.inc.php')) {
  11.         die('ERROR: File <b>config/config.inc.php</b> does not exist. Please create it using <b>config/config.original.inc.php</b>');
  12. }
  13. require_once __DIR__ . '/config/config.inc.php';
  14.  
  15. if (!isset($cfg_recaptcha_enabled)) $cfg_recaptcha_enabled = false;
  16. if ($cfg_recaptcha_enabled) $cfg_feature_simple_antispam = false;
  17. if (!isset($cfg_icq_statusicon)) $cfg_icq_statusicon = 5;
  18.  
  19. require_once __DIR__ . '/includes/database.inc.php';
  20. verbinden();
  21.  
  22. require_once __DIR__ . '/includes/SecureMailer.class.php';
  23. require_once __DIR__ . '/includes/ip_functions.inc.php';
  24.  
  25. if ($cfg_recaptcha_enabled) {
  26.         require_once __DIR__ . '/includes/recaptcha/src/autoload.php';
  27. }
  28.  
  29. # ------------------------------
  30.  
  31. // Funktion zum sichern von E-Mail-Adressen
  32. // $crypt_linktext = 0
  33. // --> geeignet für <img>-links, da $linktext nicht in ASCII übersetzt wird!
  34. // $crypt_linktext = 1
  35. // --> geeignet für text-links für höhere Sicherheit
  36.  
  37. function secure_email($email, $linktext, $crypt_linktext) {
  38.         $aus = '';
  39.         if ($email != '') {
  40.                 $aus .= '<script language="JavaScript" type="text/javascript">
  41. <!--
  42.         document.write("<a href=\"");'."\n";
  43.  
  44.                 $gesamttext = 'mailto:'.$email;
  45.                 for ($i=0; $i<strlen($gesamttext); $i++) {
  46.                         $aus .= '  document.write("&#'.ord(substr($gesamttext, $i, 1)).';");'."\n";
  47.                 }
  48.  
  49.                 $aus .= '  document.write("\">");'."\n";
  50.  
  51.                 if ($crypt_linktext == '1') {
  52.                         $gesamttext = $linktext;
  53.                         for ($i=0; $i<strlen($gesamttext); $i++) {
  54.                                 $aus .= '  document.write("&#'.ord(substr($gesamttext, $i, 1)).';");'."\n";
  55.                         }
  56.                 } else {
  57.                         $gesamttext = str_replace('"', '\"', $linktext);
  58.                         $aus .= '  document.write("'.$gesamttext.'");';
  59.                 }
  60.  
  61.                 $aus .= '  document.write("<\/a>");
  62. // -->
  63. </script>';
  64.         }
  65.  
  66.         return $aus;
  67. }
  68.  
  69. function myhtmlentities($nachricht) {
  70.         global $charset;
  71.         return htmlentities($nachricht, ENT_COMPAT | ENT_XHTML, $charset);
  72. }
  73.  
  74. function parse_html($nachricht, $loc_dir = '') {
  75.         global $table_smileys;
  76.  
  77.         // Smiley pre-parsing
  78.         $uid = uniqid();
  79.         $result = mysql_query("SELECT `zeichen`, `image`, `beschreibung`, `id` FROM `".mysql_real_escape_string($table_smileys)."` WHERE `enabled` = '1' ORDER BY `id` ASC");
  80.         while ($row = mysql_fetch_object($result)) {
  81.                 # $nachricht = str_replace($row->zeichen, '<img src="images/smileys/'.$row->image.'" alt="'.myhtmlentities($row->beschreibung).'" title="'.myhtmlentities($row->beschreibung).'" />', $nachricht);
  82.                 $nachricht = str_replace($row->zeichen, "\nSMILEY${uid}:".$row->id.":${uid}YELIMS\n", $nachricht);
  83.         }
  84.  
  85.         // HTML Parsing
  86.         $nachricht = myhtmlentities($nachricht);
  87. # Damit funktioniert wordwrap() nicht gescheit, was für den Mailverkehr wichtig ist. außerdem gibt es dann keinen umbruch in der voransicht
  88. #       $nachricht = str_replace(' ', '&nbsp;', $nachricht);
  89. # TODO: man sollte ' '->&nbsp; erst ersetzen, wenn es mehr als 1 leerzeichen ist
  90.         $nachricht = nl2br($nachricht);
  91.         $nachricht = str_replace('<br>', '<br />', $nachricht); // to be sure
  92.         $nachricht = str_replace('<BR>', '<br />', $nachricht); // to be sure
  93.  
  94.         // Linkanalyse von phpBB
  95.         $nachricht = ' ' . $nachricht;
  96.         $nachricht = preg_replace("#([\t\r\n ])([a-z0-9]+?){1}://([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)#i", '\1<a href="\2://\3" target="_blank">\2://\3</a>', $nachricht);
  97.         $nachricht = preg_replace("#([\t\r\n ])(www|ftp)\.(([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)#i", '\1<a href="http://\2.\3" target="_blank">\2.\3</a>', $nachricht);
  98.         $nachricht = preg_replace("#([\n ])([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $nachricht);
  99.         $nachricht = substr($nachricht, 1);
  100.  
  101.         // Final smiley parsing
  102.         $result = mysql_query("SELECT `zeichen`, `image`, `beschreibung`, `id` FROM `".mysql_real_escape_string($table_smileys)."` WHERE `enabled` = '1' ORDER BY `id` ASC");
  103.         while ($row = mysql_fetch_object($result)) {
  104.                 $nachricht = str_replace("<br />\nSMILEY${uid}:".$row->id.":${uid}YELIMS<br />\n", '<img src="'.$loc_dir.'images/smileys/'.$row->image.'" alt="'.myhtmlentities($row->beschreibung).'" title="'.myhtmlentities($row->beschreibung).'" />', $nachricht);
  105.         }
  106.  
  107.         return $nachricht;
  108. }
  109.  
  110. function anznachricht($name, $ort, $email, $home, $icq, $nachricht, $kommentar, $zeit, $datum) {
  111.         global $farbe1, $farbe2, $farbe3, $farbe4, $farbe5, $farbe6, $farbe7, $farbe8, $farbe9, $farbe10, $farbe11, $this_dir, $cfg_icq_statusicon;
  112.  
  113.         $zzeit = explode(":", $zeit);
  114.         $zzeit = $zzeit[0].".".$zzeit[1];
  115.         $ddatum = explode("-", $datum);
  116.         $ddatum = $ddatum[2].".".$ddatum[1].".".$ddatum[0];
  117.         $nachricht = parse_html($nachricht, $this_dir);
  118.  
  119.         echo '<table border="1" cellpadding="5" cellspacing="0" width="100%" style="border-color:'.$farbe1.';border-collapse:collapse">';
  120.         echo '  <tr>';
  121.         echo '    <td width="100%" bgcolor="'.$farbe3.'" style="border-color:'.$farbe1.';border-collapse:collapse">';
  122.         echo '    <table border="0" cellpadding="0" cellspacing="0" width="100%" style="color:'.$farbe9.'">';
  123.         echo '      <tr>';
  124.         echo '        <td width="75%" align="left"><b>'.myhtmlentities($name).'</b>';
  125.         if ($ort != '') echo ' aus '.myhtmlentities($ort);
  126.         echo '</td>';
  127.         echo '        <td width="5%">&nbsp;</td>';
  128.         echo '        <td width="20%" align="right">';
  129.         if ($email != '') {
  130.                 echo secure_email(myhtmlentities($email), '<img src="images/email.gif" border="0" height="18" width="17" alt="E-Mail-Adresse" title="E-Mail-Adresse" />', 0);
  131.         }
  132.         if ($home != '') {
  133.                 echo '      <a href="'.myhtmlentities($home).'" target="_blank"><img src="images/homepage.gif" border="0" height="18" width="16" alt="Homepage" title="Homepage" /></a>';
  134.         }
  135.         if ($icq != '') {
  136.                 echo '      <a href="https://icq.com/people/'.urlencode($icq).'" target="_blank"><img src="https://status.icq.com/online.gif?icq='.urlencode($icq).'&amp;img='.$cfg_icq_statusicon.'" alt="Mein ICQ Status" title="Mein ICQ Status" border="0"></a></a>';
  137.         }
  138.         echo '</td></tr></table></td></tr>';
  139.         echo '<tr><td width="100%" bgcolor="'.$farbe2.'" style="color:'.$farbe10.'" align="left">'.$nachricht.'<br /><br /><font size="2" color="'.$farbe4.'">Dieser Eintrag wurde am '.$ddatum.' um '.$zzeit.' Uhr erstellt.</font></td></tr>';
  140.         if ($kommentar != '') {
  141.                 $kommentar = parse_html($kommentar, $this_dir);
  142.                 echo '<tr><td width="100%" bgcolor="'.$farbe5.'" style="color:'.$farbe11.'" align="left"><b>Kommentar des Seiteneigent&uuml;mers:</b><br /><br />'.$kommentar.'</td></tr>';
  143.         }
  144.         echo '</table><br />';
  145. }
  146.  
  147. # --------------------------
  148.  
  149. # http://stackoverflow.com/questions/1175096/how-to-find-out-if-you-are-using-https-without-serverhttps
  150. $is_https = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443);
  151.  
  152. $proto = $is_https ? 'https' : 'http';
  153. $inphp = $proto.'://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
  154. $this_dir = dirname($inphp).'/';
  155.  
  156. $seitenkopf = str_replace('{CHARSET}', $charset, $seitenkopf);
  157. echo $seitenkopf;
  158.  
  159. // Vor der Vorschau alles prüfen
  160. $err_name      = false;
  161. $err_nachricht = false;
  162. $err_icq       = false;
  163. $err_email     = false;
  164. $err_homepage  = false;
  165. $err_antispam  = false;
  166. $relfehler     = '';
  167.  
  168. $view_vorschau     = isset($_REQUEST['action']) && ($_REQUEST['action'] == 'vorschau');
  169. $view_abschicken   = isset($_REQUEST['action']) && ($_REQUEST['action'] == 'abschicken');
  170. $view_eintrag      = isset($_REQUEST['action']) && ($_REQUEST['action'] == 'eintrag');
  171. $view_freischalten = isset($_REQUEST['action']) && ($_REQUEST['action'] == 'freischalten');
  172.  
  173. $name      = (isset($_POST['name'])      ? trim($_POST['name'])      : '');
  174. $ort       = (isset($_POST['ort'])       ? trim($_POST['ort'])       : '');
  175. $email     = (isset($_POST['email'])     ? trim($_POST['email'])     : '');
  176. $homepage  = (isset($_POST['homepage'])  ? trim($_POST['homepage'])  : '');
  177. $icq       = (isset($_POST['icq'])       ? trim($_POST['icq'])       : '');
  178. $nachricht = (isset($_POST['nachricht']) ? trim($_POST['nachricht']) : '');
  179. $antispam  = (isset($_POST['antispam'])  ? trim($_POST['antispam'])  : '');
  180. $kommentar = '';
  181.  
  182. $icq = str_replace('-', '', $icq); // XXX-XXX-XXX -> XXXXXXXXX
  183.  
  184. # -----------------------------------
  185.  
  186. function md5_valid($id, $md5_message) {
  187.         global $table_entries;
  188.         return md5($table_entries.'-'.$id.'-'.$md5_message.'-GBINT');
  189. }
  190.  
  191. # -----------------------------------
  192.  
  193. if ($view_freischalten) {
  194.         $id  = isset($_REQUEST['id'])  ? $_REQUEST['id']  : '';
  195.         $md5 = isset($_REQUEST['md5']) ? $_REQUEST['md5'] : '';
  196.  
  197.         echo '<h1>G&auml;stebucheintrag freischalten</h1>';
  198.  
  199.         if (($id == '') || ($md5 == '')) {
  200.                 die('<p><font color="'.$farbe6.'">Ein Fehler ist aufgetreten. Fehler in den Parametern.</font></p>'.$seitenfuss);
  201.         }
  202.  
  203.         $result = mysql_query("SELECT `show`, MD5(`nachricht`) AS `md5` FROM `".mysql_real_escape_string($table_entries)."` WHERE `id` = '".mysql_real_escape_string($id)."'");
  204.         $row = mysql_fetch_array($result);
  205.         if ($row['show'] == 1) {
  206.                 echo '<p><font color="'.$farbe8.'">Eintrag ist bereits freigeschaltet!</font></p>';
  207.         } else {
  208.                 $md5_valid = md5_valid($id, $row['md5']);
  209.                 if (strtolower($md5) == strtolower($md5_valid)) {
  210.                         mysql_query("UPDATE `".mysql_real_escape_string($table_entries)."` SET `show` = '1' WHERE `id` = '".mysql_real_escape_string($id)."'");
  211.                         echo '<p><font color="'.$farbe8.'">Eintrag erfolgreich freigeschaltet!</font></p>';
  212.                 } else {
  213.                         echo '<p><font color="'.$farbe6.'">Keine Berechtigung, den Eintrag freizuschalten!</font></p>';
  214.                 }
  215.         }
  216.  
  217.         die($seitenfuss);
  218. }
  219.  
  220. if ($cfg_feature_simple_antispam) {
  221.         // NG: erster block der IP adresse hinzufügen
  222.         $antispam_awaiting = (date('d')-15) * (2+date('m')) * 2 + 1337 + date('Y');
  223. }
  224.  
  225. if (($view_vorschau) || ($view_abschicken)) {
  226.         // Name prüfen
  227.         if ($name == '') $err_name = true;
  228.  
  229.         // Nachricht prüfen
  230.         if ($nachricht == '') $err_nachricht = true;
  231.  
  232.         // ICQ prüfen, wenn angegeben
  233.         if ((!preg_match('/^[0-9]+$/', $icq)) && ($icq != '')) $err_icq = true;
  234.  
  235.         // E-Mail-Adresse prüfen, wenn angegeben
  236.         if ((!preg_match('/^[a-z0-9\.\-_\+]+@[a-z0-9\-_]+\.([a-z0-9\-_]+\.)*?[a-z]+$/is', $email)) && ($email != '')) $err_email = true;
  237.  
  238.         // Homepage prüfen, wenn angegeben
  239.         if ($homepage != '') {
  240.                 if (!preg_match('#^http[s]?:\/\/#i', $homepage)) {
  241.                         $homepage = 'http://' . $homepage;
  242.                 }
  243.                 if (!preg_match('#^http[s]?\\:\\/\\/[a-z0-9\-]+\.([a-z0-9\-]+\.)?[a-z]+#i', $homepage)) {
  244.                         $err_homepage = true;
  245.                 }
  246.         }
  247.  
  248.         // AntiSpam prüfen
  249.         if (($cfg_feature_simple_antispam) && ($antispam != $antispam_awaiting)) $err_antispam = true;
  250.  
  251.         // Fehler?
  252.         if (($err_name) || ($err_nachricht) || ($err_icq) || ($err_email) || ($err_homepage) || ($err_antispam)) {
  253.                 $relfehler = '<font color="'.$farbe6.'"><u>Fehler</u>: Es wurden nicht alle Pflichtfelder ausgef&uuml;llt oder einige Felder enthalten einen Fehler!</font>';
  254.         }
  255.  
  256.         if (!$relfehler) {
  257.                 $datum = date('Y-m-d');
  258.                 $zeit  = date('H:i:s');
  259.                 $ip    = get_real_ip(); // $_SERVER['REMOTE_ADDR'];
  260.                 $host  = gethostbyaddr($ip);
  261.                 $whois_service = "https://whois.viathinksoft.de/whois/$ip";
  262.  
  263.                 if ($view_vorschau) {
  264.                         echo '<h1>G&auml;stebucheintrag Vorschau</h1>';
  265.                         echo '<div align="center">';
  266.  
  267.                         anznachricht($name, $ort, $email, $homepage, $icq, $nachricht, $kommentar, $zeit, $datum);
  268.  
  269.                         echo "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tr>\n";
  270.  
  271.                         echo "<td>\n";
  272.                         echo "<form action=\"$inphp\" method=\"post\" name=\"frm2\">\n";
  273.                         echo "<input type=\"hidden\" name=\"action\" value=\"eintrag\" />\n";
  274.                         echo "<input type=\"hidden\" name=\"name\" value=\"".myhtmlentities($name)."\" />\n";
  275.                         echo "<input type=\"hidden\" name=\"ort\" value=\"".myhtmlentities($ort)."\" />\n";
  276.                         echo "<input type=\"hidden\" name=\"email\" value=\"".myhtmlentities($email)."\" />\n";
  277.                         echo "<input type=\"hidden\" name=\"homepage\" value=\"".myhtmlentities($homepage)."\" />\n";
  278.                         echo "<input type=\"hidden\" name=\"icq\" value=\"".myhtmlentities($icq)."\" />\n";
  279.                         echo "<input type=\"hidden\" name=\"nachricht\" value=\"".myhtmlentities($nachricht)."\" />\n";
  280.                         if ($cfg_feature_simple_antispam) echo "<input type=\"hidden\" name=\"antispam\" value=\"".myhtmlentities($antispam)."\" />\n";
  281.                         echo "<a href=\"javascript:document.frm2.submit()\"><img src=\"images/buttons/aendern.gif\" border=\"0\" height=\"31\" width=\"146\" alt=\"&Auml;ndern\" title=\"&Auml;ndern\" /></a>";
  282.                         echo "</form>";
  283.                         echo "</td>";
  284.  
  285.                         echo "<td><img src=\"images/spacer.gif\" height=\"1\" width=\"30\" alt=\"\" /></td>";
  286.  
  287.                         echo "<td>\n";
  288.                         echo "<form action=\"$inphp\" method=\"post\" name=\"frm1\">\n";
  289.                         echo "<input type=\"hidden\" name=\"action\" value=\"abschicken\" />\n";
  290.                         echo "<input type=\"hidden\" name=\"name\" value=\"".myhtmlentities($name)."\" />\n";
  291.                         echo "<input type=\"hidden\" name=\"ort\" value=\"".myhtmlentities($ort)."\" />\n";
  292.                         echo "<input type=\"hidden\" name=\"email\" value=\"".myhtmlentities($email)."\" />\n";
  293.                         echo "<input type=\"hidden\" name=\"homepage\" value=\"".myhtmlentities($homepage)."\" />\n";
  294.                         echo "<input type=\"hidden\" name=\"icq\" value=\"".myhtmlentities($icq)."\" />\n";
  295.                         echo "<input type=\"hidden\" name=\"nachricht\" value=\"".myhtmlentities($nachricht)."\" />\n";
  296.                         if ($cfg_feature_simple_antispam) echo "<input type=\"hidden\" name=\"antispam\" value=\"".myhtmlentities($antispam)."\" />\n";
  297.                         echo "<a href=\"javascript:document.frm1.submit()\"><img src=\"images/buttons/abschicken.gif\" border=\"0\" height=\"31\" width=\"146\" alt=\"Abschicken\" title=\"Abschicken\" /></a>";
  298.                         echo "</form>";
  299.                         echo "</td>";
  300.  
  301.                         echo "</tr></table></div>\n";
  302.                 } elseif ($view_abschicken) {
  303.                         $pass_final_recaptcha = true;
  304.                         if ($cfg_recaptcha_enabled) {
  305.                                 if (!isset($_POST['g-recaptcha-response'])) {
  306.                                         $pass_final_recaptcha = false;
  307.                                 } else {
  308.                                         $recaptcha = new \ReCaptcha\ReCaptcha($cfg_recaptcha_privkey);
  309.                                         $resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
  310.                                         $pass_final_recaptcha = $resp->isSuccess();
  311.                                 }
  312.                         }
  313.  
  314.                         if (!$pass_final_recaptcha) {
  315.                                 echo '<h1>Bitte Sicherheitsfrage beantworten</h1>';
  316.                                 echo '<p>Bitte tippen Sie den dargestellten Code ab. Dadurch wird sichergestellt dass Sie ein Mensch und kein Spam-Bot sind.</p>';
  317.  
  318.                                 echo "<form action=\"$inphp\" method=\"post\" name=\"frm1\">\n";
  319.  
  320.                                 echo '<div class="g-recaptcha" data-sitekey="'.$cfg_recaptcha_pubkey.'"></div>';
  321.                                 echo '<script type="text/javascript" src="https://www.google.com/recaptcha/api.js"></script>';
  322.                                 echo '<br>';
  323.  
  324.                                 echo "<input type=\"hidden\" name=\"action\" value=\"abschicken\" />\n";
  325.                                 echo "<input type=\"hidden\" name=\"name\" value=\"".myhtmlentities($name)."\" />\n";
  326.                                 echo "<input type=\"hidden\" name=\"ort\" value=\"".myhtmlentities($ort)."\" />\n";
  327.                                 echo "<input type=\"hidden\" name=\"email\" value=\"".myhtmlentities($email)."\" />\n";
  328.                                 echo "<input type=\"hidden\" name=\"homepage\" value=\"".myhtmlentities($homepage)."\" />\n";
  329.                                 echo "<input type=\"hidden\" name=\"icq\" value=\"".myhtmlentities($icq)."\" />\n";
  330.                                 echo "<input type=\"hidden\" name=\"nachricht\" value=\"".myhtmlentities($nachricht)."\" />\n";
  331.                                 if ($cfg_feature_simple_antispam) echo "<input type=\"hidden\" name=\"antispam\" value=\"".myhtmlentities($antispam)."\" />\n";
  332.                                 echo "<a href=\"javascript:document.frm1.submit()\"><img src=\"images/buttons/abschicken.gif\" border=\"0\" height=\"31\" width=\"146\" alt=\"Abschicken\" title=\"Abschicken\" /></a>";
  333.                                 echo "</form>";
  334.                         } else {
  335.                                 $daten  = "'".mysql_real_escape_string($name)."'";
  336.                                 $felder = '`name`';
  337.  
  338.                                 if ($ort != '') {
  339.                                         $daten  .= ", '".mysql_real_escape_string($ort)."'";
  340.                                         $felder .= ', `ort`';
  341.                                 }
  342.  
  343.                                 if ($email != '') {
  344.                                         $daten  .= ", '".mysql_real_escape_string($email)."'";
  345.                                         $felder .= ', `email`';
  346.                                 }
  347.  
  348.                                 if ($homepage != '') {
  349.                                         $daten  .= ", '".mysql_real_escape_string($homepage)."'";
  350.                                         $felder .= ', `homepage`';
  351.                                 }
  352.  
  353.                                 if ($icq != '') {
  354.                                         $daten  .= ", '".mysql_real_escape_string($icq)."'";
  355.                                         $felder .= ', `icq`';
  356.                                 }
  357.  
  358.                                 $daten  .= ", '".mysql_real_escape_string("$datum $zeit")."'";
  359.                                 $felder .= ', `timestamp`';
  360.  
  361.                                 $daten  .= ", '".mysql_real_escape_string($ip)."'";
  362.                                 $felder .= ', `ip`';
  363.  
  364.                                 $daten  .= ", '".mysql_real_escape_string($nachricht)."'";
  365.                                 $felder .= ', `nachricht`';
  366.  
  367.                                 $show = $cfg_automatisch_freischalten ? '1' : '0';
  368.                                 $daten  .= ", '".mysql_real_escape_string($show)."'";
  369.                                 $felder .= ', `show`';
  370.  
  371.                                 $result = mysql_query("INSERT INTO `".mysql_real_escape_string($table_entries)."` ($felder) VALUES ($daten)");
  372.                                 $id = mysql_insert_id();
  373.  
  374.                                 $md5 = md5($nachricht);
  375.                                 $md5_valid = md5_valid($id, $md5);
  376.  
  377.                                 // Send mail
  378.  
  379.                                 $ger_datum = date('d.m.Y', strtotime($datum));
  380.  
  381.                                 $msg_html  = "<h1>".myhtmlentities($seitentitel)." - G&auml;stebucheintrag</h1>\n";
  382.                                 $msg_html .= "<b>Name:</b> ".myhtmlentities($name)."<br />\n";
  383.                                 $msg_html .= "<b>E-Mail:</b> ".myhtmlentities($email)."<br />\n";
  384.                                 $msg_html .= "<b>Ort:</b> ".myhtmlentities($ort)."<br />\n";
  385.                                 $msg_html .= "<b>Homepage:</b> ".myhtmlentities($homepage)."<br />\n";
  386.                                 $msg_html .= "<b>ICQ:</b> ".myhtmlentities($icq)."<br />\n";
  387.                                 $msg_html .= "<b>Datum:</b> $ger_datum<br />\n";
  388.                                 $msg_html .= "<b>Uhrzeit:</b> $zeit<br />\n";
  389.                                 $msg_html .= "<br />\n";
  390.                                 $msg_html .= "<b>Nachricht:</b> ".parse_html($nachricht, $this_dir)."<br />\n";
  391.                                 $msg_html .= "<br />\n";
  392.                                 $msg_html .= "<i>Datensatz Nr. $id wurde erstellt.</i><br />\n";
  393.                                 $msg_html .= "<br />\n";
  394.                                 $msg_html .= "<font size=\"+1\"><b>Absenderdaten:</b></font><br />\n";
  395.                                 $msg_html .= "<br />\n";
  396.                                 $msg_html .= "<b>IP-Adresse:</b> <a href=\"$whois_service\" target=\"_blank\">$ip</a> ($host)<br />\n";
  397.                                 $msg_html .= "<b>Browser:</b> ".$_SERVER['HTTP_USER_AGENT']."<br />\n";
  398.                                 $msg_html .= "<br />\n";
  399.                                 if (!$cfg_automatisch_freischalten) {
  400.                                         $msg_html .= '<i>Klicken Sie <a href="'."$inphp?action=freischalten&amp;id=$id&amp;md5=".urlencode($md5_valid).'" target="_blank">hier</a>, um den Eintrag freizuschalten. Schalten Sie den Eintrag nicht frei, so bleibt er unver&ouml;ffentlicht.</i><br />'."\n";
  401.                                 }
  402.  
  403.                                 $msg_plain  = "$seitentitel - Gästebucheintrag\n\n";
  404.                                 $msg_plain .= "Name: $name\n";
  405.                                 $msg_plain .= "E-Mail: $email\n";
  406.                                 $msg_plain .= "Ort: $ort\n";
  407.                                 $msg_plain .= "Homepage: $homepage\n";
  408.                                 $msg_plain .= "ICQ: $icq\n";
  409.                                 $msg_plain .= "Datum: $ger_datum\n";
  410.                                 $msg_plain .= "Uhrzeit: $zeit\n";
  411.                                 $msg_plain .= "\n";
  412.                                 $msg_plain .= "Nachricht: $nachricht\n";
  413.                                 $msg_plain .= "\n";
  414.                                 $msg_plain .= "Datensatz Nr. $id wurde erstellt.\n";
  415.                                 $msg_plain .= "\n";
  416.                                 $msg_plain .= "Absenderdaten:\n";
  417.                                 $msg_plain .= "\n";
  418.                                 $msg_plain .= "IP-Adresse: $ip ($host) - Whois-Lookup at $whois_service\n";
  419.                                 $msg_plain .= "Browser: ".$_SERVER['HTTP_USER_AGENT']."\n";
  420.                                 $msg_plain .= "\n";
  421.                                 if (!$cfg_automatisch_freischalten) {
  422.                                         $msg_plain .= "Öffnen Sie $inphp?action=freischalten&id=$id&md5=".urlencode($md5_valid)." , um den Eintrag freizuschalten. Schalten Sie den Eintrag nicht frei, so bleibt er unver&ouml;ffentlicht.\n";
  423.                                 }
  424.  
  425.                                 $h = new SecureMailer(); // Includes Anti Mail-Header-Injection
  426.  
  427. /*
  428.                                 # http://www.phpbox.de/tipsundtricks/emailsumlaute.php
  429.                                 $h->addHeader('Mime-Version', '1.0');
  430.                                 $h->addHeader('Content-Type', 'text/html; charset='.$charset);
  431.  
  432.                                 $h->addHeader('Content-Transfer-Encoding', 'quoted-printable');
  433. #                               $msg_html = wordwrap($msg_html);
  434. #                               $msg_html = quoted_printable_encode($msg_html);
  435.                                 $msg_html = quoted_printable_encode2($msg_html);
  436. */
  437.  
  438.                                 if ($cfg_from_email != '') {
  439.                                         $h->addHeader('From',     $cfg_from_email);
  440.                                 }
  441.                                 if ($email != '') {
  442.                                         $h->addHeader('Reply-To', $email);
  443.                                 }
  444.  
  445.                                 if ((isset($adminmail_cc)) && ($adminmail_cc != '')) {
  446.                                         $h->addHeader('CC', $adminmail_cc);
  447.                                 }
  448.  
  449.                                 $h->addHeader('X-Mailer', 'PHP/'.phpversion());
  450.  
  451.                                 $subject = "$seitentitel - Gästebucheintrag";
  452.                                 $subject = SecureMailer::utf8Subject($subject);
  453.  
  454. #                               $gesendet = $h->sendMail($adminmail, $subject, $msg_html);
  455.                                 $gesendet = $h->sendMailHTMLandPlainMultipart($adminmail, $subject, $msg_html, $msg_plain);
  456.  
  457.                                 if (!$gesendet) {
  458.                                         echo '<p><font color="'.$farbe6.'">FEHLER BEIM SENDEN DER MAIL!</font></p>';
  459.                                 }
  460.  
  461.                                 if ($result) {
  462.                                         echo '<h1 align="center">G&auml;stebucheintrag abgeschickt</h1>
  463.  
  464. <div align="center">
  465.  
  466. <p><font color="'.$farbe8.'">Ihr G&auml;stebucheintrag wurde erfolgreich eingetragen!</font></p>
  467.  
  468. <p>Bitte beachten Sie, dass der Eintrag erst nach einer Pr&uuml;fung des Seiteninhabers freigeschaltet wird.</p>
  469.  
  470. <p><a href="'.$inphp.'"><img src="images/buttons/zurueck.gif" alt="Zur&uuml;ck" title="Zur&uuml;ck" height="31" width="146" border="0" /></a></p>
  471.  
  472. </div>';
  473.  
  474.                                 } else {
  475.                                         echo "<p>".mysql_error()."</p>";
  476.                                         echo '<p><font color="'.$farbe6.'">Es ist ein schwerer Fehler aufgetreten. Versuchen Sie es nocheinmal.</font></p>';
  477.                                 }
  478.                         }
  479.                 }
  480.         }
  481. }
  482.  
  483. if ($relfehler || $view_eintrag) {
  484.         echo '<h1>G&auml;stebucheintrag</h1>';
  485.  
  486.         echo '<p>Bitte f&uuml;llen Sie die unteren Felder aus. Die mit <font color="'.$farbe7.'">*</font> gekennzeichneten
  487.         Felder m&uuml;ssen ausgef&uuml;llt werden! Um Missbrauch zu vermeiden, wird die
  488.         IP-Adresse gespeichert.';
  489.         echo ' Die Eintr&auml;ge werden erst nach einer Pr&uuml;fung ver&ouml;ffentlicht.';
  490.         echo '</p>';
  491.  
  492.         if (isset($relfehler)) {
  493.                 echo "<p>$relfehler</p>";
  494.         }
  495.  
  496.         echo '<br />
  497.  
  498. <form action="'.$inphp.'" method="post" name="frm">
  499. <input type="hidden" name="action" value="'.($cfg_vorschau ? 'vorschau' : 'abschicken').'" />
  500.  
  501. <table cellspacing="0" cellpadding="0" border="0">
  502.                 <tr>
  503.                         <td align="right">';
  504.  
  505.         if ($err_name) {
  506.                 echo '<font color="'.$farbe6.'">Name *:</font>';
  507.         } else {
  508.                 echo 'Name <font color="'.$farbe7.'">*</font>:';
  509.         }
  510.  
  511.         echo '</td>
  512.                         <td><img src="images/spacer.gif" height="1" width="10" alt="" /></td>
  513.                         <td><input maxlength="40" size="66" name="name" value="'.$name.'" /></td>
  514.                 </tr>
  515.                 <tr>
  516.                         <td align="right">Wohnort:</td>
  517.                         <td><img src="images/spacer.gif" height="1" width="10" alt="" /></td>
  518.                         <td><input maxlength="40" size="66" name="ort" value="'.$ort.'" /></td>
  519.                 </tr>
  520.                 <tr>
  521.                         <td align="right">';
  522.  
  523.         if ($err_email) {
  524.                 echo '<font color="'.$farbe6.'">E-Mail:</font>';
  525.         } else {
  526.                 echo 'E-Mail:';
  527.         }
  528.  
  529.         echo '</td>
  530.                         <td><img src="images/spacer.gif" height="1" width="10" alt="" /></td>
  531.                         <td><input maxlength="40" size="66" name="email" value="'.$email.'" /></td>
  532.                 </tr>
  533.                 <tr>
  534.                         <td align="right">';
  535.  
  536.         if ($err_homepage) {
  537.                 echo '<font color="'.$farbe6.'">Homepage:</font>';
  538.         } else {
  539.                 echo 'Homepage:';
  540.         }
  541.  
  542.         echo '</td>
  543.                         <td><img src="images/spacer.gif" height="1" width="10" alt="" /></td>
  544.                         <td><input maxlength="40" size="66" name="homepage" value="'.$homepage.'" /></td>
  545.                 </tr>
  546.                 <tr>
  547.                         <td align="right">';
  548.  
  549.         if ($err_icq) {
  550.                 echo '<font color="'.$farbe6.'">ICQ:</font>';
  551.         } else {
  552.                 echo 'ICQ:';
  553.         }
  554.  
  555.         echo '</td>
  556.                         <td><img src="images/spacer.gif" height="1" width="10" alt="" /></td>
  557.                         <td><input maxlength="40" size="66" name="icq" value="'.$icq.'" /></td>
  558.                 </tr>
  559.                 <tr>
  560.                         <td colspan="3">&nbsp;</td>
  561.                 </tr>';
  562.  
  563.         if ($cfg_feature_simple_antispam) {
  564.                 echo '<tr>
  565.                         <td align="right">';
  566.  
  567.                 if ($err_antispam) {
  568.                         echo '<font color="'.$farbe6.'">Bitte <!--&quot;-->'.$antispam_awaiting.'<!--&quot;--> eingeben *:</font>';
  569.                 } else {
  570.                         echo 'Bitte <!--&quot;-->'.$antispam_awaiting.'<!--&quot;--> eingeben <font color="'.$farbe7.'">*</font>:';
  571.                 }
  572.  
  573.                 echo '</td>
  574.                         <td><img src="images/spacer.gif" height="1" width="10" alt="" /></td>
  575.                         <td><input maxlength="40" size="66" name="antispam" value="'.$antispam.'" /> (AntiSpam-Frage)</td>
  576.                 </tr>
  577.  
  578.                 <tr>
  579.                         <td colspan="3">&nbsp;</td>
  580.                 </tr>';
  581.         }
  582.  
  583.         echo '<tr>
  584.                         <td align="right">Smileys:</td>
  585.                         <td><img src="images/spacer.gif" height="1" width="10" alt="" /></td>
  586.                         <td><script language="JavaScript" type="text/javascript">
  587.                 <!--
  588.                 function setsmiley(smiley) {
  589.                         frm.nachricht.value = frm.nachricht.value + smiley;
  590.                 }
  591.                 // -->
  592.                 </script>';
  593.  
  594.         $result = mysql_query("SELECT `zeichen`, `image`, `beschreibung` FROM `".mysql_real_escape_string($table_smileys)."` WHERE `enabled` = '1' AND `show_in_editor` = '1' ORDER BY `id` ASC");
  595.         while ($row = mysql_fetch_object($result)) {
  596.                 echo "<a href=\"javascript:setsmiley(' ".addslashes(myhtmlentities($row->zeichen))." ')\">".
  597.                 '<img src="images/smileys/'.$row->image.'" border="0" alt="'.myhtmlentities($row->beschreibung).'" title="'.myhtmlentities($row->beschreibung).'" /></a>&nbsp;';
  598.         }
  599.  
  600.         echo '</td>
  601.                 </tr>
  602.                 <tr>
  603.                         <td colspan="3">&nbsp;</td>
  604.                 </tr>
  605.                 <tr>
  606.                         <td valign="top" align="right">';
  607.  
  608.         if ($err_nachricht) {
  609.                 echo '<font color="'.$farbe6.'">Nachricht *:</font>';
  610.         } else {
  611.                 echo 'Nachricht <font color="'.$farbe7.'">*</font>:';
  612.         }
  613.  
  614.         echo '</td>
  615.                         <td><img src="images/spacer.gif" height="1" width="10" alt="" /></td>
  616.                         <td><textarea name="nachricht" rows="5" cols="50">'.$nachricht.'</textarea><!-- wrap="virtual" --></td>
  617.                 </tr>
  618.                 <tr>
  619.                         <td colspan="2"><img src="images/spacer.gif" height="1" width="10" alt="" /></td>
  620.                         <td><br />
  621.                         <a href="javascript:document.frm.submit()">';
  622.         if ($cfg_vorschau) {
  623.                 echo '<img height="31" alt="Vorschau" title="Vorschau" src="images/buttons/vorschau.gif" width="146" border="0" />';
  624.         } else {
  625.                 echo '<img src="images/buttons/abschicken.gif" border="0" height="31" width="146" alt="Abschicken" title="Abschicken" />';
  626.         }
  627.         echo '</a>              <!--
  628.                         <img src="images/spacer.gif" height="1" width="30" alt="" />
  629.                         <a href="javascript:document.frm.reset()">
  630.                         <img height="31" alt="L&ouml;schen" title="L&ouml;schen" src="images/buttons/loeschen.gif" width="146" border="0" /></a>
  631.                         -->
  632.                         </td>
  633.                 </tr>
  634.         </table>
  635.  
  636. </form>
  637.  
  638. <p align="center"><a href="'.$inphp.'">Zur&uuml;ck zu den Eintr&auml;gen</a></p>';
  639. } else if ((!$view_vorschau) && (!$view_abschicken) && (!$view_eintrag)) {
  640.         echo '<h1 align="center">G&auml;stebuch</h1>
  641.  
  642.         <table width="100%" border="0" cellspacing="0" cellpadding="0">
  643.         <tr>
  644.                 <td align="center">[ <a href="'.$inphp.'?action=eintrag">Neuen Eintrag hinzuf&uuml;gen</a> ]</td></tr></table><br />';
  645.  
  646.         $cond = ($cfg_unfreigeschaltete_anzegen) ? '' : " WHERE `show` = '1'";
  647.  
  648.         $result = mysql_query("SELECT * FROM `".mysql_real_escape_string($table_entries)."`$cond");
  649.         if ($result) $number = mysql_num_rows($result); else $number = 0;
  650.         $max_page = ceil($number / $eintraege_proseite);
  651.  
  652.         $seiten = isset($_REQUEST['seiten']) ? $_REQUEST['seiten'] : 1;
  653.         if (!isset($seiten) || ($seiten > $max_page) || ($seiten < 0)) $seiten = '1';
  654.  
  655.         $result = mysql_query("SELECT * FROM `".mysql_real_escape_string($table_entries)."`$cond ORDER BY `id` DESC LIMIT ".($seiten-1)*$eintraege_proseite.",".$eintraege_proseite);
  656.  
  657.         $keineeintraege = true;
  658.  
  659.         if ($result) {
  660.                 while ($row = mysql_fetch_object($result)) {
  661.                         $xry   = explode(' ', $row->timestamp);
  662.                         $datum = $xry[0];
  663.                         $zeit  = $xry[1];
  664.                         anznachricht($row->name, $row->ort, $row->email, $row->homepage, $row->icq, $row->nachricht, $row->kommentar, $zeit, $datum);
  665.                         $keineeintraege = false;
  666.                 }
  667.         }
  668.  
  669.         if ($keineeintraege) {
  670.                 echo '<div align="center">Es sind keine Eintr&auml;ge vorhanden!</div>';
  671.         }
  672.  
  673.         if ((!$keineeintraege) && ($max_page != 1)) {
  674.                 echo '<table cellspacing="0" cellpadding="0" border="0" width="100%"><tr><td align="center"><p class="klein2">Seite: ';
  675.                 for ($i=1; $i<=$max_page; $i++) {
  676.                         if ($seiten != $i) {
  677.                                 echo "<a href=\"$inphp?seiten=$i\">[$i]</a>\n";
  678.                         } else {
  679.                                 echo "<b>[$i]</b>\n";
  680.                         }
  681.                 }
  682.                 echo '</p></td></tr></table>';
  683.         }
  684.  
  685. }
  686.  
  687. echo '<p align="center">OpenSource PHP-G&auml;stebuch von <a href="http://www.viathinksoft.de/" target="_blank">ViaThinkSoft</a>, Version '.$version.'</p>';
  688.  
  689. echo $seitenfuss;
  690.  
  691. # ---
  692.  
  693. // This is the only function which works with GMX.
  694. // wordwrap+quoted_printable_encode does not work, since it would insert whitespaces.
  695. // http://www.php.net/manual/en/function.quoted-printable-encode.php#97230
  696. function quoted_printable_encode2($input, $line_max = 75) {
  697.         $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
  698.         $lines = preg_split("/(?:\r\n|\r|\n)/", $input);
  699.         $linebreak = "=0D=0A=\r\n";
  700.         /* the linebreak also counts as characters in the mime_qp_long_line
  701.          * rule of spam-assassin */
  702.         $line_max = $line_max - strlen($linebreak);
  703.         $escape = "=";
  704.         $output = "";
  705.         $cur_conv_line = "";
  706.         $length = 0;
  707.         $whitespace_pos = 0;
  708.         $addtl_chars = 0;
  709.  
  710.         // iterate lines
  711.         for ($j=0; $j<count($lines); $j++) {
  712.                 $line = $lines[$j];
  713.                 $linlen = strlen($line);
  714.  
  715.                 // iterate chars
  716.                 for ($i = 0; $i < $linlen; $i++) {
  717.                         $c = substr($line, $i, 1);
  718.                         $dec = ord($c);
  719.  
  720.                         $length++;
  721.  
  722.                         if ($dec == 32) {
  723.                                         // space occurring at end of line, need to encode
  724.                                         if (($i == ($linlen - 1))) {
  725.                                                 $c = "=20";
  726.                                                 $length += 2;
  727.                                         }
  728.  
  729.                                         $addtl_chars = 0;
  730.                                         $whitespace_pos = $i;
  731.                         } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) {
  732.                                         $h2 = floor($dec/16); $h1 = floor($dec%16);
  733.                                         $c = $escape . $hex[$h2] . $hex[$h1];
  734.                                         $length += 2;
  735.                                         $addtl_chars += 2;
  736.                         }
  737.  
  738.                         // length for wordwrap exceeded, get a newline into the text
  739.                         if ($length >= $line_max) {
  740.                                 $cur_conv_line .= $c;
  741.  
  742.                                 // read only up to the whitespace for the current line
  743.                                 $whitesp_diff = $i - $whitespace_pos + $addtl_chars;
  744.  
  745.                                 /* the text after the whitespace will have to be read
  746.                                  * again ( + any additional characters that came into
  747.                                  * existence as a result of the encoding process after the whitespace)
  748.                                  *
  749.                                  * Also, do not start at 0, if there was *no* whitespace in
  750.                                  * the whole line */
  751.                                 if (($i + $addtl_chars) > $whitesp_diff) {
  752.                                                 $output .= substr($cur_conv_line, 0, (strlen($cur_conv_line) - $whitesp_diff)) . $linebreak;
  753.                                                 $i =  $i - $whitesp_diff + $addtl_chars;
  754.                                         } else {
  755.                                                 $output .= $cur_conv_line . $linebreak;
  756.                                         }
  757.  
  758.                                 $cur_conv_line = "";
  759.                                 $length = 0;
  760.                                 $whitespace_pos = 0;
  761.                         } else {
  762.                                 // length for wordwrap not reached, continue reading
  763.                                 $cur_conv_line .= $c;
  764.                         }
  765.                 } // end of for
  766.  
  767.                 $length = 0;
  768.                 $whitespace_pos = 0;
  769.                 $output .= $cur_conv_line;
  770.                 $cur_conv_line = "";
  771.  
  772.                 if ($j<=count($lines)-1) {
  773.                         $output .= $linebreak;
  774.                 }
  775.         } // end for
  776.  
  777.         return trim($output);
  778. } // end quoted_printable_encode
  779.