kostenloser Webspace werbefrei: lima-city


Gästebuch Aktivierungsmail deaktivieren

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    hamoos

    hamoos hat kostenlosen Webspace.

    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 &uuml;berpr&uuml;fen sie die Eingabe im Feld <ul><li>' .$felderror[0]. '</li></ul></p>';
    		}
    		else
    		{
    			echo '<p>Bitte &uuml;berpr&uuml;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&uuml;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&uuml;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&uuml;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&uuml;ck zum Startseite</a>';
    }
    
    ?>
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    hamoos

    hamoos hat kostenlosen Webspace.

    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
  5. Außerdem musst du diesen Teil deines Skriptes Löschen:
    // Aktivierungsmail schicken
    			if (@mail( $email, $config['mailbetreff'], $eintrag->parseMailBody(), MailHeader() ))
    			{
    				EintragOK();
    			}
    			else
    			{
    				MailERROR();
    			}
  6. 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
  7. Autor dieses Themas

    hamoos

    hamoos hat kostenlosen Webspace.

    So Gästebuch funktioniert jetzt endlich :thumb::thumb::thumb::thumb:

    Mod kann Topic: Closen !

    Beitrag zuletzt geändert: 22.3.2010 18:34:56 von hamoos
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!