Gästebuch Aktivierungsmail deaktivieren
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aktivieren
aktivierung
anfang
ausgeben
code
date
datei
datum
eintrag
email
ermitteln
feld
laden
nachricht
null
seitenzahl
setzen
status
url
weben
-
Hallo,
ich habe mir heute ein Gästebuch auf meiner Homepage installiert.
Funktioniert alles perfekt, nur bevor ein Beitrag veröffentlicht wird muss man eine Aktivierunglink anklicken, den man per E-mail bekommt. Wie kann ich dies deaktivieren? Im Setup ist dies nicht möglich...
Hier sind meine PHP-Dateien.
gaestebuch.php
<?php if (!isset( $_SESSION )) session_start(); if (!defined( '__PFAD__' )) die( 'Diese Datei kann nicht direkt aufgerufen werden!' ); // Benoetigte Dateien einbinden require_once( __PFAD__. 'include/gbconf.inc.php' ); require_once( __PFAD__. 'include/mysql.class.php' ); require_once( __PFAD__. 'include/gaestebuch.class.php' ); require_once( __PFAD__. 'include/gbfunc.inc.php' ); require_once( __PFAD__. 'include/messages.inc.php' ); // Konfiguration aus DB laden $config = Gaestebuch::getConfig(); // Neuer Eintrag wurde uebermittelt if (isset( $_POST['gbeintrag'] ) && isset( $_SESSION ) && $_SESSION['gb_doppeleintrag'] != 1) { // Formular Variablen initialisieren $name=$email=$web=$nachricht=$ip=$datum=$hash=''; // Zeitzone setzen date_default_timezone_set( "Europe/Berlin" ); // Sonstige Variablen initialisieren $fehlerfrei = TRUE; $felderror = array(); // Werte aus $_POST holen if (get_magic_quotes_gpc()) { $_POST = array_map( 'stripslashes', $_POST ); } $name = $_POST['name']; $email = $_POST['email']; $web = $_POST['homepage']; $nachricht = $_POST['nachricht']; $ip = $_SERVER['REMOTE_ADDR']; $datum = date( 'Y-m-d H:i:s' ); $hash = md5( date( 'Y-m-d H:i:s' ) ); // Eingaben ueberpruefen if (!checkName( $name )) { $fehlerfrei = FALSE; $felderror[] = 'Name'; } if (!checkEmail( $email )) { $fehlerfrei = FALSE; $felderror[] = 'Email'; } else if (checkSpam( $email )) { $fehlerfrei = FALSE; $felderror[] = 'Email (Anbieter gesperrt)'; } if (strlen( $web ) > 0) { if (!checkURL( $web )) { $fehlerfrei = FALSE; $felderror[] = 'Homepage'; } } if (strlen( $nachricht ) < 5) { $fehlerfrei = FALSE; $felderror[] = 'Nachricht'; } else if (checkSpam( $nachricht )) { $fehlerfrei = FALSE; $felderror[] = 'Nachricht (Verdacht auf Spam)'; } // Falls ein Eingabefehler vorliegt einen Hinweis ausgeben if (!$fehlerfrei) { echo '<div style="width: 300px; font: 12px Verdana, Arial, Helvetica, sans-serif; margin: 0 auto;">'; echo '<h2>Ooops, verschrieben?!</h2>'; if (count( $felderror ) == 1) { echo '<p>Bitte überprüfen sie die Eingabe im Feld <ul><li>' .$felderror[0]. '</li></ul></p>'; } else { echo '<p>Bitte überprüfen Sie folgende Felder:'; echo '<ul>'; foreach ($felderror as $feld) { echo '<li>' .$feld. '</li>'; } echo '</ul></p>'; } echo '<p style="margin-top: 35px;"><a href="javascript:history.back()">Zurück zum Formular</a></p>'; echo '</div>'; } else { // Gaestebuch-Eintrag in die Datenbank schreiben $eintrag = new Gaestebuch(); // Mail Template setzen - falls ein Fehler auftritt kein DB Eintrag schreiben $eintrag->setMailTemplate = $config['mailtemplate']; $sql = "INSERT INTO `gb_data` (`name`, `email`, `url`, `ip`, `datum_eintrag`, `nachricht`, `hash`) VALUES( " .dbInput( $name ). ", " .dbInput( $email ). ", " .dbInput( $web ). ", " .dbInput( $ip ). ", " .dbInput( $datum ). ", " .dbInput( $nachricht ). ", " .dbInput( $hash ). " )"; $eintrag->setQuery = $sql; $eintrag->query(); // Bei erfolgreichem Eintrag Aktivierungs-Email verschicken und Nachricht ausgeben if ($eintrag->affected_rows() == 1) { // Flag setzen das bereits ein Eintrag gemacht wurde $_SESSION['gb_doppeleintrag'] = 1; // Aktivierungsmail schicken if (@mail( $email, $config['mailbetreff'], $eintrag->parseMailBody(), MailHeader() )) { EintragOK(); } else { MailERROR(); } } else { EintragERROR(); } } } // ==================================================================== // Meldung bei Mehrfach-Eintrag ausgeben else if(isset( $_POST['gbeintrag'] ) && isset( $_SESSION ) && $_SESSION['gb_doppeleintrag'] == 1) { MehrfachEintrag(); // ==================================================================== } else // Eintraege ausgeben { // ==================================================================== // Variablen initialisieren $datensaetze=$maxseiten=$seite=$eintragsnummer=''; // Gaestebuch-Objekt erzeugen $gb = new Gaestebuch(); // Template laden $gb->setTemplate = $config['templatedatei']; // Anzahl der Datensaetze und maximale Seiten ermitteln $gb->setQuery = "SELECT SQL_CALC_FOUND_ROWS `id` FROM `gb_data` WHERE `aktiviert` = 1"; $datensaetze = $gb->num_rows( $gb->query() ); $maxseiten = ceil( $datensaetze / $config['proseite'] ); // Pruefen ob eine Seitenzahl gesetzt ist if (!isset( $_GET['seitenzahl'] )) { $seite = 1; } else if ((is_numeric( $_GET['seitenzahl'] ) && ( $_GET['seitenzahl'] < 0 ))) { $seite = 1; } else if (is_numeric( $_GET['seitenzahl'] )) { $seite = $_GET['seitenzahl']; } else { die( 'Falscher Datentyp für <em>Seitenzahl</em>!' ); } // Falls die uebergebene Seitenzahl die maximale Seitenzahl // uebersteigt, diese auf die maximale Seitenzahl zuruecksetzen if ($seite > $maxseiten) { $seite = $maxseiten; } // Offset ermitteln if ($seite > 0) { $anfang = ( ( $seite - 1 ) * $config['proseite'] ); } else { $anfang = ($seite ); } // Korrekte Eintragsnummer ermitteln - wird in der Klasse (BlockAusgabe()) verarbeitet $eintragsnummer = $datensaetze - $anfang; // Query fuer die Ausgabe der aktuellen Seite $gb->query( $gb->setQuery = "SELECT `id`, `name`, `url`, `nachricht`, `datum_aktiviert`, `kommentar` FROM `gb_data` WHERE `aktiviert` = 1 ORDER BY `datum_aktiviert` DESC LIMIT {$anfang}, {$config['proseite']}" ); // Pager-Links ausgeben - Fuer eine Erklaerung der benoetigten Parameter die Kommentare in der gbfunc.inc.php lesen $gb->PagerAusgabe( PagerLinks( $seite, $maxseiten, $_SERVER['PHP_SELF'].$config['modulpfad'], 3, 'seitenzahl' ) ); // Template parsen und Gaestebuch ausgeben $gb->GaestebuchAusgabe(); // Resourcen freigeben und das Objekt zerstoeren $gb = NULL; unset($gb); } ?>
Das hier meine Aktivierung.php
<?php if (!isset( $_GET['hash'] )) { die( header( "location: /" ) ); } // Benoetigte Dateien einbinden require_once( 'include/gbconf.inc.php' ); require_once( 'include/mysql.class.php' ); require_once( 'include/gaestebuch.class.php' ); $hash = $_GET['hash']; // Konfiguration aus DB laden $configuration = new Gaestebuch(); $configuration->query( $configuration->setQuery = "SELECT `eigenschaft`, `wert` FROM `gb_config`" ); while ($cfg = $configuration->fetch_object()) { $config[$cfg->eigenschaft] = $cfg->wert; } $configuration = NULL; unset( $configuration ); // Falls ein 32-stelliger Hash uebermittelt wurde if (strlen( $hash ) == 32 ) { // Eintrags auslesen $aktivieren = new Gaestebuch(); $aktivieren->query( $aktivieren->setQuery = "SELECT `aktiviert` FROM `gb_data` WHERE `hash` = '" .$hash. "'" ); // Falls ein passender Eintrag gefunden wurde if ($aktivieren->num_rows() == 1) { // Status des Eintrag ermitteln und ggfs aendern $status = $aktivieren->fetch_object(); if ($status->aktiviert == 0) { // Zeitzone setzen date_default_timezone_set( "Europe/Berlin" ); $datum = date( 'Y-m-d H:i:s' ); $aktivieren->query( $aktivieren->setQuery = "UPDATE `gb_data` SET `aktiviert` = 1, `datum_aktiviert` = '" .$datum. "' WHERE `hash` = '" .$hash. "' LIMIT 1" ); if ($aktivieren->affected_rows() == 1) { echo 'Vielen Dank!<br>Ihr Eintrag wurde erfolgreich aktiviert und ist ab sofort abrufbar.'; // Mail an Admin verschicken $mail_header = "From:Gaestebuch auf Homepage<{$config['adminemail']}>\n"; $mail_header .= "Content-Type: text/html\n"; $mail_header .= "Content-Transfer-Encoding: 8bit\n"; @mail( $config['adminemail'], "Neuer Gaestebuch-Eintrag", "Soeben wurde ein neuer Gaestebuch-Eintrag aktiviert!", $mail_header ); } } else { echo 'Ihr Eintrag wurde bereits aktiviert.<br>Vielen Dank!'; } } // Kein Eintrag in der DB der dem Hash entspricht else { echo 'Es konnte leider kein passender Eintrag gefunden werden. Bitte stellen Sie sicher das der Link korrekt übermittelt wurde.'; } $aktivieren = NULL; unset( $aktivieren ); // Link zur Gaestebuch-Seite ausgeben echo '<br><br><a href="/">Zurück zum Startseite</a>'; } // Der Hash hatte kein md5 Format else { echo 'Leider hat der von Ihnen eingegebene Link nicht das korrekte Format.<br>Wenn Sie den Link kopiert und manuell eingefügt haben stellen Sie bitte sicher, dass der komplette Link kopiert wurde und versuchen es erneut.<br>Sollte das Problem bestehen bleiben kontaktieren Sie bitte den Webmaster dieser Seite.'; echo '<br><br><a href="/">Zurück zum Startseite</a>'; } ?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo,
in deinem Skript findest du (ziemlich in der Mitte) folgendes:
$sql = "INSERT INTO `gb_data` (`name`, `email`, `url`, `ip`, `datum_eintrag`, `nachricht`, `hash`) VALUES( " .dbInput( $name ). ", " .dbInput( $email ). ", " .dbInput( $web ). ", " .dbInput( $ip ). ", " .dbInput( $datum ). ", " .dbInput( $nachricht ). ", " .dbInput( $hash ). " )";
Hier wird nur der Hash-Code zur Aktivierung des Eintrags erstellt.
Wenn du zusätzlich das Feld "aktiviert" angibst, kannst du hier den Wert von Hand eingeben:
$sql = "INSERT INTO `gb_data` (`name`, `email`, `url`, `ip`, `datum_eintrag`, `nachricht`, `aktiviert`) VALUES( " .dbInput( $name ). ", " .dbInput( $email ). ", " .dbInput( $web ). ", " .dbInput( $ip ). ", " .dbInput( $datum ). ", " .dbInput( $nachricht ). ", " .dbInput( 1 ). " )";
Logischerweise habe ich den Hash aus dem Beispiel nicht übernommen.
Das Versenden der E-Mail kannst du natürlich auch raus machen.
Gruß,
dex
Beitrag zuletzt geändert: 21.3.2010 14:56:17 von qap2 -
So ganz hab ich das nicht verstanden, kann mir jemand sagen was genau ich abändern muss?
Beitrag zuletzt geändert: 21.3.2010 16:26:08 von hamoos -
Außerdem musst du diesen Teil deines Skriptes Löschen:
// Aktivierungsmail schicken if (@mail( $email, $config['mailbetreff'], $eintrag->parseMailBody(), MailHeader() )) { EintragOK(); } else { MailERROR(); }
-
qap2 schrieb: Hallo,
in deinem Skript findest du (ziemlich in der Mitte) folgendes:
$sql = "INSERT INTO `gb_data` (`name`, `email`, `url`, `ip`, `datum_eintrag`, `nachricht`, `hash`) VALUES( " .dbInput( $name ). ", " .dbInput( $email ). ", " .dbInput( $web ). ", " .dbInput( $ip ). ", " .dbInput( $datum ). ", " .dbInput( $nachricht ). ", " .dbInput( $hash ). " )";
Hier wird nur der Hash-Code zur Aktivierung des Eintrags erstellt.
Wenn du zusätzlich das Feld "aktiviert" angibst, kannst du hier den Wert von Hand eingeben:
$sql = "INSERT INTO `gb_data` (`name`, `email`, `url`, `ip`, `datum_eintrag`, `nachricht`, `aktiviert`) VALUES( " .dbInput( $name ). ", " .dbInput( $email ). ", " .dbInput( $web ). ", " .dbInput( $ip ). ", " .dbInput( $datum ). ", " .dbInput( $nachricht ). ", " .dbInput( 1 ). " )";
Logischerweise habe ich den Hash aus dem Beispiel nicht übernommen.
Das Versenden der E-Mail kannst du natürlich auch raus machen.
Gruß,
dex
Wenn ich das richtig verstehe setzt er statt des hash wertes direkt die Variable 1 die den Gästebucheintrag aktiviert.
Er schlägt dir also vor in der msql datenbank das feld "hash" gegen das Feld "aktiviert" auszutauschen was dann voreingestellt bei der speicherung den Wert 1 bekommt.
Also das der beitrag sofort freigegeben wird.
Wobei ich denke das du im Ausgabeteil deiner php datei noch eine Änderung machen must sodass statt des Wertes hash der Wert Aktiviert abgefragt wird.
mfg Felix -
So Gästebuch funktioniert jetzt endlich
Mod kann Topic: Closen !
Beitrag zuletzt geändert: 22.3.2010 18:34:56 von hamoos -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage