Letze Änderung der Scripte 31.07.2008 05:19 - Bei Bedarf bitte erneut installieren
Da es vor Kurzem angefragt wurde und mir langweilig war, hier mal ein Codeschnippsel der bewirkt, dass die Vergütung eines Bettelseiten-Aufrufs nicht sofort erfolgt, sondern erst nach sechs Sekunden Verzögerung.

Bitte wie immer nicht vergessen Backups anzulegen bevor irgendwelche Dateien überschrieben werden. Datenbank-Backup ist auch sinnvoll.

Neue "betteln.php":
Code:
<?
$_GET['ref'] = (int)$_GET['ref'];


if ($pageconfig['reload_betteln'] == 0){
	$betteltext = '<b>Die Bettelfunktion ist auf dieser Seite deaktiviert';
}else{
	if ($_SESSION['uid'] == $_GET['ref'] || $_GET['ref'] == $_COOKIE['uid']){
		$betteltext = '<b><font color="#FF0000">Du kannst dich nicht selbst anbetteln!</font></b>';
	}else{
		$new_reload = 
		$_SESSION['betteldelay'] = time() + 5;
		$doload = true;
		$betteltext = '<b><font color="#FF0000">Bitte warte ein paar Sekunden bis die Verg&uuml;tung erfolgt ist.</font></b>';
	}
}
?>

<?head("Betteln auf ".$seitenname);?>
Verdiene auch Du mit!<br>
Melde Dich bei <?=$seitenname;?> an und bewirbe Deinen pers&ouml;nlichen Bettellink, so
verdienst Du Deine <?=$waehrung;?> fast wie im Schlaf!<br>
<br>
<div align="center" id="betteltext"><?=$betteltext;?></div>

<? if ( $doload === true ) { ?>
	<script type="text/javascript">
	window.setTimeout(function(){
		var ifr = document.createElement('iframe');
		ifr.setAttribute( 'width', '0' );
		ifr.setAttribute( 'height', '0' );
		ifr.setAttribute( 'src', '/index.php?content=/betteln_verg&ref=<?=$_GET['ref'];?>' );
		document.getElementsByTagName('body')[0].appendChild(ifr);
	}, 6000);
	</script>
<? }

foot();

$filename = 'lib/texte/bettelwerbung.txt';
$fp = fopen ($filename, "r");
$inhalt = fread ($fp, filesize ($filename));
fclose ($fp);
$inhalt = str_replace('\\', '', $inhalt);

if ($inhalt != ''){
	head("Werbung dieser Seite");
	echo nl2br($inhalt);
	foot();
}
?>
Neue Datei "betteln_verg.php":
Code:
<?
// Autor: profitgeier
// Diese Datei enthält geschützten Quellcode von Designerscripte.net

$_GET['ref'] = (int)$_GET['ref'];

if ($pageconfig['reload_betteln'] != 0){

	// prüfe ob Bettelseite noch im Reload
	$reloadcheck = db_query("SELECT bis FROM ".$db_prefix."_reloads WHERE ip = '".$ip."' and tan = 'bettelaufruf' and bis >= ".time()." LIMIT 1");

	if (!mysql_num_rows($reloadcheck)) {
	
		// prüfe ob Zeit vergangen sind
		if (isset($_SESSION['betteldelay'])) $delaycheck = ( $_SESSION['betteldelay'] < time() );
		else $delaycheck = false;

		if ($delaycheck) {
			
			$minimum		= $pageconfig['min_betteln'];
			$maximum		= $pageconfig['max_betteln'];
			srand((double)microtime()*1000000);
			$bettelsumme	= rand($minimum*100,$maximum*100)/100;
			
			$new_reload = time()+$pageconfig['reload_betteln'];
			db_query("INSERT INTO ".$db_prefix."_reloads (ip,uid,tan,bis) VALUES ('".$ip."','".$_GET['ref']."','bettelaufruf','".$new_reload."')");
			
			db_query("UPDATE ".$db_prefix."_kontodaten  SET angebettelt =angebettelt + 1, bv = bv + ".$bettelsumme.", kontostand = kontostand + '".$bettelsumme."' WHERE uid = '".$_GET['ref']."'");
			
			refumsatz ($bettelsumme,$_GET['ref']);
			aktivralley ($bettelsumme,$_GET['ref']);
			bilanz(0,$bettelsumme);
						
			$betteltext = '<b>Du hast f&uuml;r den User '.$_GET['ref'].' gerade '.$bettelsumme.' '.$waehrung.' erbettelt!</b>';
			
			unset($_SESSION['betteldelay']);
		} else {
			// Bettelvergütung zu schnell angefordert 
			$betteltext = '<b><font color="#FF0000">Fehler bei Bettel-Verg&uuml;tung! Vergütung ist nicht erfolgt.</font></b>';
		}
	} else {
		// Bettelseite noch im Reload
		$reloadcheck = mysql_fetch_array($reloadcheck);
		$betteltext = '<b><font color="#FF0000">Du bist noch f&uuml;r '. round((($reloadcheck['bis'] - time())),0) .' Sekunden f&uuml;rs Betteln gesperrt</font></b>';
	}
}

?>
<script type="text/javascript">
	parent.document.getElementById('betteltext').innerHTML = '<?=$betteltext;?>';
</script>
Beide Dateien gehören in den Ordner "/content", wie die originale "betteln.php".

  • Die Vergütung erfolgt nach etwa 6 Sekunden (Abhängig von Systemauslastung / Browser des Users, d.h. wenn er mehrere JavaScript-Lastige Webseiten nebenbei geöffnet hat könnte es ein wenig länger als 6 Sekunden dauern).
  • JavaScript muss eingeschaltet sein, damit eine Vergütung erfolgen kann.
  • Popup-Blocker von Firefox wird ausgehebelt, indem das Iframe erst zur Laufzeit mit JavaScript kreiert und in den Elementbaum der Seite gehängt wird.
  • Iframe-Blocker und NoScirpt habe ich nicht getestet
  • Funktoniert möglicherweise ab IE 5.5, Opera 7.0, Firefox 1.0 laut SelfHTML-Angaben zu den JavaScript-Befehlen "createElement", "setAttribute" und "appendChild". Dies wurde jedoch nicht getestet.
  • Erfolgreich getestet mit FF 3.0.1, Opera 9.5.1, IE 7 Pro.


Anpassung der Verzögerungs-Zeit:
in betteln.php:
$_SESSION['betteldelay'] = time() + 5;
sowie
}, 6000);
den eigenen Anforderungen anpassen.

Erster Wert sind Sekunden, zweiter Wert Millisekunden.
Wenn ich beides auf fünf Sekunden gestellt hatte, dann wurde oft die betteln_verg.php zu früh geladen so dass keine Vergütung stattfand (ich vermute das hängt ab von der Auslastung des Web-Servers und des Datenbank-Servers oder vom JavaScript-Interpreter des Clients (Browsers)). Deshalb habe ich den ersten Wert auf fünf und den zweiten auf sechs Sekunden gestellt, damit wurde die betteln_verg.php nicht mehr zu früh geladen.

Ich habe nur kurze Tests durchgeführt, also bitte vor dem Einsatz ausgiebig testen, denn bei stark beworbenen Bettelseiten könnte ein kleiner Fehler großen Verlust bedeuten.

Kleingedrucktes:
Die Nutzung erfolgt auf eigene Verantwortung. Ich hafte nicht für Schäden irgendeiner Art.

Freundliche Grüße,
profitgeier / hm

ps. basierend auf der Bettelseite von VMS v1.2.3 und nur dort getestet.