diff --git a/adcheck.php b/adcheck.php
new file mode 100644
index 0000000000000000000000000000000000000000..388fc4aae977b4252a3e20680c602aa48b4e58f8
--- /dev/null
+++ b/adcheck.php
@@ -0,0 +1,43 @@
+<?php
+if(!isset($_GET['data'])) exit;
+
+require ('lib/datenbank.inc.php');
+require ('lib/functions.lib.php');
+require ('lib/session.lib.php');
+require ('ext/ap/ads.inc.php');
+
+list($art, $tan) = explode('-', $_GET['data']); // yeah sorry ;)
+$art = base64_decode($art);
+$tan = base64_decode($tan);
+$kampdaten = getAdDataByArtAndTan( $art, $tan );
+
+$result_color = 'red';
+
+if( $tan == $_SESSION['current_ad']['tan'] &&
+    $art == $_SESSION['current_ad']['art'] &&
+    true == $_SESSION['current_ad']['paid']
+  )
+{
+    $result_color = 'green';
+}
+
+?><!DOCTYPE html>
+<html>
+    <head>
+        <!-- never is old spec but will be ignored by new browsers //-->
+        <meta name="referrer" content="never">
+        <meta name="referrer" content="no-referrer" />
+        <title>Hinweis</title>
+    </head>
+    <body bgcolor="<?php echo $result_color; ?>">
+
+        <?php if( 'green' == $result_color ) { ?>
+        Diese Anzeige wurde dir mit <?php echo $kampdaten['verdienst'] .' '. $pageconfig['waehrung']; ?> verg&uuml;tet.
+        <?php } else { ?>
+        Nope, das war nix
+        <?php } ?>
+
+    </body>
+</html><?php
+invalidateAlreadyRunningAd();
+?>
diff --git a/adclick.php b/adclick.php
new file mode 100644
index 0000000000000000000000000000000000000000..9abdf6004e6cae375e0e22736bf305e5ae80105d
--- /dev/null
+++ b/adclick.php
@@ -0,0 +1,43 @@
+<?php
+if(!isset($_GET['data'])) exit;
+
+require ('lib/datenbank.inc.php');
+require ('lib/functions.lib.php');
+require ('lib/session.lib.php');
+require ('ext/ap/ads.inc.php');
+
+list($art, $tan) = explode('-', $_GET['data']); // yeah sorry ;)
+$art = base64_decode($art);
+$tan = base64_decode($tan);
+
+$kampdaten = getAdDataByArtAndTan( $art, $tan );
+// TODO prevent malicious ziel urls
+
+invalidateAlreadyRunningAd();
+setCurrentRunningAd( $art, $tan );
+?><!DOCTYPE html>
+<html>
+    <head>
+        <!-- never is old spec but will be ignored by new browsers //-->
+        <meta name="referrer" content="never">
+        <meta name="referrer" content="no-referrer" />
+        <meta http-equiv="refresh" content="0; URL=<?php echo $kampdaten['ziel']; ?>">
+        <title>Anzeige</title>
+    </head>
+    <body>
+
+      <script>
+        var notified = false;
+        function notify()
+        {
+            if( false == notified )
+            {
+                notified = true;
+                window.opener.postMessage( { 'action': 'adcheck', 'art': '<?php echo $art; ?>', 'tan': '<?php echo $tan; ?>' }, '<?php echo $pageconfig['domain']; ?>');
+            }
+            return true;
+        }
+      </script>
+      <a href="<?php echo $kampdaten['ziel']; ?>" rel="noopener noreferrer nofollow" onclick="notify();" >Hier weiter, falls keine automatische Weiterleitung erfolgt.</a>
+    </body>
+</html>
diff --git a/content/verdienen/forcedbanner_nf.php b/content/verdienen/forcedbanner_nf.php
new file mode 100644
index 0000000000000000000000000000000000000000..69119fe549644c4184dbbae4c052c0168940a323
--- /dev/null
+++ b/content/verdienen/forcedbanner_nf.php
@@ -0,0 +1,12 @@
+<?php
+$sperre = mysqli_fetch_array(db_query("SELECT forced_sperre FROM ".$db_prefix."_kontodaten WHERE uid = '".$_SESSION['uid']."' "));
+userstatus ();
+head ('Klickbanner');
+?>
+
+<div id="forcedbanner_display"></div>
+<input type="button" value="Neue Banner laden" id="loadAds_btn">
+
+<script src="<?php echo $pageconfig['domain']; ?>/ext/js/forcedbanner_nf.js"></script>
+<?php
+foot ();
diff --git a/ext/ap/ads.inc.php b/ext/ap/ads.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..89007c00fcd190e359b0f42932c0077e3b09fbe1
--- /dev/null
+++ b/ext/ap/ads.inc.php
@@ -0,0 +1,166 @@
+<?php
+$adArten = array('forcedbanner' => 'forcedbanner',
+                );
+
+/*
+* TODO
+* nothing checks wether user landed on blacklist...
+* blacklist check is broken currently anyway
+* please fix me
+*/
+
+function invalidateAlreadyRunningAd()
+{
+    global $adArten,$ip,$db_prefix;
+    $result = false;
+
+    if( isset($_SESSION['current_ad']) )
+    {   
+        $tan = ( isset($_SESSION['current_ad']['tan']) ) ? $_SESSION['current_ad']['tan'] : false;
+        $art = ( isset($_SESSION['current_ad']['art']) ) ? $_SESSION['current_ad']['art'] : ''; 
+
+        if( false !== $tan && in_array($art, $adArten) )
+        {
+            $dbArt = $adArten[$art];
+            $kamp = db_query ("SELECT `t1`.* FROM `" . $db_prefix . "_gebuchte_werbung` AS `t1`
+                               LEFT JOIN `" . $db_prefix . "_reloads` AS `t2` ON (`t1`.`tan`=`t2`.`tan` AND (`t2`.`uid`=" . $_SESSION['uid'] . " OR `t2`.`ip`='" . $ip . "') AND `t2`.`bis` > " . time() . ")
+                               WHERE `t1`.`tan` = '" . $tan . "' AND `t2`.`tan` IS NULL AND `t1`.`werbeart` = '".$dbArt."' LIMIT 1");
+
+            if ( mysqli_num_rows( $kamp ) )
+            {
+                $result = true;
+                $forced = mysqli_fetch_assoc( $kamp );
+
+                $new_reload = time() + $forced['reload'];
+
+                db_query("INSERT INTO `" . $db_prefix . "_reloads`
+                         (`ip`,`uid`,`tan`,`bis`) VALUES 
+                         ('" . $ip . "'," . $_SESSION['uid'] . ",'" . $tan . "'," . $new_reload . ")");
+            }   
+        }   
+        unset( $_SESSION['current_ad'] );
+    }
+    return $result;
+}
+
+function setCurrentRunningAd( $art, $tan )
+{
+    $_SESSION['current_ad']['tan'] = $tan;
+    $_SESSION['current_ad']['art'] = $art;
+    $_SESSION['current_ad']['time'] = time();
+    $_SESSION['current_ad']['paid'] = false;
+}
+
+function handleAdPayout( $forced )
+{
+    global $dbArten, $ip, $db_prefix;
+
+    db_query("UPDATE ".$db_prefix."_kontodaten  SET klicks = klicks + 1, kv = kv + ".$forced['verdienst'].", fc_klicks = fc_klicks + 1 WHERE uid = '".$_SESSION['uid']."'"); // Hier Zusatz für Fakeschutz  
+    kontobuchung ('+', $forced['verdienst'], create_code(14), $_SESSION['uid'], 1, 'Forcedbannerverdienst');
+    refumsatz ($forced['verdienst'], $_SESSION['uid']);
+    rallysystem ($_SESSION['uid'], '1', $forced['verdienst']);
+    bilanz($forced['preis'], $forced['verdienst'],'Werbebereich','Forcedbannerklick');
+    $new_reload = time() + $forced['reload'];
+    db_query("INSERT INTO " . $db_prefix . "_reloads (ip,uid,tan,bis) VALUES ('" . $ip . "'," . $_SESSION['uid'] . ",'" . $forced['tan'] . "'," . $new_reload . ")");
+    db_query("UPDATE " . $db_prefix . "_gebuchte_werbung SET menge = menge - 1 WHERE tan='" . $forced['tan'] . "'");
+
+}
+
+function checkAdOk( $art, $tan )
+{
+    global $dbArten, $ip, $db_prefix, $sql_open;
+    $result = array('checkResult' => false);
+
+    $sql = "SELECT `t1`.* FROM `" . $db_prefix . "_gebuchte_werbung` AS `t1`
+            LEFT JOIN `" . $db_prefix . "_reloads` AS `t2` ON (`t1`.`tan`=`t2`.`tan` AND (`t2`.`uid`=" . $_SESSION['uid'] . " OR `t2`.`ip`='" . $ip . "') AND `t2`.`bis` > " . time() . ")
+            WHERE `t1`.`tan` = ? AND `t2`.`tan` IS NULL AND `t1`.`werbeart` = ? LIMIT 1";
+    $statement = mysqli_stmt_init( $sql_open );
+    mysqli_stmt_prepare( $statement, $sql );
+
+    mysqli_stmt_bind_param( $statement, "ss", $tan, $art );
+    if( mysqli_stmt_execute( $statement ) )
+    {
+
+        mysqli_stmt_store_result( $statement );
+
+        if ( mysqli_stmt_num_rows( $statement ) > 0 )
+        {
+
+            $timepassed = ( time() - $_SESSION['current_ad']['time'] ) +1;
+
+            $rows = db_fetch( $statement );
+            $forced = $row[0];
+            $result['data'] = $forced;
+
+            if( $timepassed >= $forced['aufendhalt'] )
+            {
+                handleAdPayout( $forced );
+                $_SESSION['current_ad']['paid'] = true;
+                $result['checkResult'] = true;
+            }
+        }
+    }
+    mysqli_stmt_close( $statement );
+    return $result;
+}
+
+function getNewAdData( $dbArt )
+{
+    global $ip,$db_prefix;
+    $result = array('count' => 0, 'data' => array() );
+
+    $banner_sql = 'SELECT t1.*
+                    FROM ' . $db_prefix . '_gebuchte_werbung t1
+                    LEFT JOIN ' . $db_prefix . '_userblacklist t4 ON t4.uid = ' . $_SESSION['uid'] . ' 
+                    LEFT JOIN ' . $db_prefix . '_fb_blacklist AS t3 ON t3.kid = t1.kid AND t3.werbeart=t1.werbeart
+                    LEFT JOIN ' . $db_prefix . '_reloads t2
+                    ON (t1.tan = t2.tan AND (t2.uid = ' . $_SESSION['uid'] . ' OR t2.ip = "' . $ip . '") AND t2.bis >= ' . time() . ')
+                    WHERE
+                    (t3.kid IS NULL OR LOCATE(t3.sponsor, t1.ziel) = 0) AND 
+                    t2.tan IS NULL AND
+                    t1.werbeart = "'.$dbArt.'" AND
+                    t1.menge > 0 AND
+                    t1.status = 1 AND
+                    t1.verdienst > 0 AND
+                    t1.sponsor != ' . $_SESSION['uid'] . ' 
+                    ORDER BY t1.verdienst DESC LIMIT 3';
+    $banner_res = db_query( $banner_sql );
+    $banner_c   = mysqli_num_rows( $banner_res );
+
+    $result['count'] = $banner_c;
+
+    if( 0 < $banner_c )
+    {   
+        while( $banner = mysqli_fetch_assoc( $banner_res ) )
+            $result['data'][] = $banner;
+    }
+
+    return $result;
+
+}
+
+function getAdDataByArtAndTan( $art, $tan )
+{
+    global $db_prefix, $sql_open;
+    $row = false;
+    $sql = 'SELECT `uid`, `tan`, `kid`, `ziel`, `banner`, `verdienst`, `preis`, `aufendhalt`, `menge`, `reload`, `sponsor`, `werbeart`, `status` FROM `' . $db_prefix . '_gebuchte_werbung` WHERE `tan` = ? AND `werbeart` = ? LIMIT 1';
+
+    $statement = mysqli_prepare( $sql_open, $sql );
+
+    mysqli_stmt_bind_param( $statement, "ss", $tan, $art );
+    if( mysqli_stmt_execute( $statement ) )
+    {
+        mysqli_stmt_store_result( $statement );
+        if ( mysqli_stmt_num_rows( $statement ) > 0 )
+        {
+            $rows = db_fetch( $statement );
+            $row = $rows[0]; // should be there ... > 0
+        }
+    }
+    mysqli_stmt_close( $statement );
+    return $row;
+    
+    //return array( 'uid' => $uid, 'tan' => $tan, 'kid' => $kid, 'ziel' => $ziel, 'banner' => $banner, 'verdienst' => $verdienst, 'preis' => $preis, 'aufendhalt' => $aufendhalt,
+    //                 'menge' =>  $menge, 'reload' => $reload, 'sponsor' => $sponsor, 'werbeart' => $werbeart, 'status' => $status );
+
+}
diff --git a/ext/ap/ads.php b/ext/ap/ads.php
new file mode 100644
index 0000000000000000000000000000000000000000..d1ab5ab35fe61e26b50e3a46e5d8dd08c909ca94
--- /dev/null
+++ b/ext/ap/ads.php
@@ -0,0 +1,47 @@
+<?php
+ini_set('display_errors', '1');
+require ('../../lib/datenbank.inc.php');
+require ('../../lib/functions.lib.php');
+require ('../../lib/session.lib.php');
+userstatus();
+require ('ads.inc.php');
+
+$sperre_sql = "SELECT `forced_sperre` FROM `".$db_prefix."_kontodaten` WHERE `uid` = ".$_SESSION['uid'];
+$sperre_res = db_query($sperre_sql);
+$sperre     = mysqli_fetch_assoc( $sperre_res );
+
+
+if( 0 == $sperre['forced_sperre'] )
+{
+    $result = array( 'count' => 0, 'data' => array() );
+
+    if( isset($_POST['action']) )
+    {
+        switch( $_POST['action'] )
+        {
+            case 'getNewAdData':
+                invalidateAlreadyRunningAd();
+                if( isset($_POST['adArt']) )
+                {
+                    if( in_array($_POST['adArt'], $adArten) )
+                    {
+                        $dbArt = $adArten[$_POST['adArt']];
+                        $result = getNewAdData( $dbArt );
+                    }
+                }
+            break;
+
+            case 'checkAdOk':
+                if( isset( $_POST['art'] ) && isset( $_POST['tan'] ) )
+                    $result = checkAdOk( $_POST['art'], $_POST['tan'] );
+            break;
+
+            case 'invalidateAd':
+                $result = invalidateAlreadyRunningAd();
+            break;
+        }
+    }
+
+    echo json_encode($result);
+
+}
diff --git a/ext/js/basics.js b/ext/js/basics.js
new file mode 100644
index 0000000000000000000000000000000000000000..9696b81e55b323add6ae618fc3b2dec4b066d8cf
--- /dev/null
+++ b/ext/js/basics.js
@@ -0,0 +1,4 @@
+function sleep(ms)
+{
+    return new Promise(resolve => setTimeout(resolve, ms));
+}
diff --git a/ext/js/forcedbanner_nf.js b/ext/js/forcedbanner_nf.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd2a067790d63ccf2eef9fde5b55ffaa4e496f7c
--- /dev/null
+++ b/ext/js/forcedbanner_nf.js
@@ -0,0 +1,189 @@
+
+$( document ).ready( function()
+    {
+        var adFenster = new Array();
+
+        window.addEventListener("message", function(event)
+            {
+                if ( pageconfig['domain'] != event.origin )
+                {
+                    return;
+                }
+                console.log(event.data);
+                var art = event.data['art'],
+                    tan = event.data['tan'],
+                    action = event.data['action'];
+                
+                if( 'adcheck' == action )
+                {
+                    console.log('okokok');
+                    adFenster[art][tan]['opened'] = true;
+
+                }
+            }   
+        );
+
+        function checkAdOk( art, tan )
+        {
+            console.log('checkadok');
+            if( false == adFenster[art][tan]['checked'] && false == adFenster[art][tan]['window'].closed )
+            {
+                var pdata = window.btoa(art) + '-' + window.btoa(tan)
+                adFenster[art][tan]['checked'] = true;
+                $.post( "ext/ap/ads.php",
+                    {
+                        'action': "checkAdOk",
+                        'art': art,
+                        'tan': tan
+                    },
+                    function(data, status)
+                    {
+                        window.open(pageconfig['domain']+'/adcheck.php?data='+pdata, art+'-'+tan, "height=120,width=200");
+                    }
+                );
+            }
+        }
+
+        /*
+        * if u do something wrong, sorry no matter which ad was active, invalidate 
+        */
+        function invalidateAd( art, tan )
+        {
+            console.log('invalidatead');
+            adFenster[art][tan]['checked'] = true;
+            var pdata = window.btoa(art) + '-' + window.btoa(tan)
+            $.post( "ext/ap/ads.php",
+                {
+                    'action': "invalidateAd"
+                },
+                function(data, status)
+                {
+                    window.open(pageconfig['domain']+'/adcheck.php?data='+pdata, art+'-'+tan, "height=120,width=200");
+                }
+            );
+
+
+        }
+
+        async function startAdCountdown( art, tan, sec )
+        {
+            console.log('startadcountdown');
+            let timer = setInterval( () =>
+                {
+                    console.log('checktimer');
+                    if( true == adFenster[art][tan]['checked'] )
+                    {
+                        clearInterval(timer);
+                    } else {
+                        if( document.hasFocus() )
+                        {
+                            invalidateAd( art, tan );
+                            clearInterval(timer);
+                        }
+                        if ( 'undefined' == adFenster[art][tan]['window'].closed || adFenster[art][tan]['window'].closed )
+                        {
+                            invalidateAd( art, tan );
+                            clearInterval(timer);
+                        }
+                    }
+                },
+                100
+            );
+            await sleep(sec * 1000);
+            checkAdOk( art, tan );
+        }
+
+
+        /*
+        * communicates with ad window, placing detection of actual click
+        */
+        function openAdWindow( art, tan, sec )
+        {
+            if ( 'undefined' == typeof adFenster[art] || (! adFenster[art] instanceof Array ) )
+            {
+                adFenster[art] = new Array();
+            }
+
+            if ( 'undefined' == typeof adFenster[art][tan] || (! adFenster[art][tan] instanceof Array ) )
+            {
+                adFenster[art][tan] = new Array();
+            }
+
+            if( ( 'undefined' == adFenster[art][tan]['window'] || null == adFenster[art][tan]['window'] ) || adFenster[art][tan]['window'].closed )
+            {
+                var data = window.btoa(art) + '-' + window.btoa(tan);
+                adFenster[art][tan]['window'] = window.open( pageconfig['domain'] + '/adclick.php?data='+data, "_blank" );
+
+                adFenster[art][tan]['window'].focus();
+                adFenster[art][tan]['opened'] = false;
+                adFenster[art][tan]['checked']= false;
+                console.log('meh');
+                adFenster[art][tan]['window'].onbeforeunload = function()
+                {   console.log('startadcountdowncall');
+                    startAdCountdown( art, tan, sec );
+                }
+            }
+        }
+
+
+        /*
+        * gets executed after loading ads for every ad loaded
+        */
+        function displayForcedBanner( data )
+        {
+            // {"count":1,"data":{"uid":"0","tan":"BxrPvnPbs8j7D1bNAL28KNQVxr4Szijb","kid":"0","ziel":"https:\/\/ztk.me","banner":"https:\/\/ztk.me","verdienst":"10.00","preis":"0.00","aufendhalt":"0","menge":"99999","reload":"3600","sponsor":"administrator","werbeart":"forcedbanner","status":"1"}}
+            var html = '<li class="list-group-item" data-tan="'+ data.tan + '" data-art="' + data.werbeart + '" data-sec="'+ data.aufendhalt + '"><img src="' + data.banner + '" style="min-width:60px; min-height:10px; cursor:pointer;" /></li>';
+            $( "#forcedbanner_display_grp" ).append( html );
+        }
+
+
+        /*
+        * gets executed on click on ad
+        */
+        $( "#forcedbanner_display" ).on('click', function(e)
+            {
+                var elem = $( e.target ).closest( "li" );
+                var sec = elem.data('sec');
+                var tan = elem.data('tan');
+                var art = elem.data('art');
+                if (typeof tan !== typeof undefined && tan !== false)
+                {
+                    if (typeof art !== typeof undefined && art !== false)
+                    {
+                        if (typeof sec !== typeof undefined && sec !== false)
+                        {
+                            $(elem).remove();
+                            openAdWindow( art, tan, sec );
+                        }
+                    }
+                }
+            }
+        );
+
+        /*
+        * gets executed first, loads available ads and prepares the bootstrap <ul>-list for display
+        */
+        function loadAds( art )
+        {
+            $.post( "ext/ap/ads.php",
+                {
+                    'action': "getNewAdData",
+                    'adArt' : art
+                },
+                function(data, status)
+                {
+                    var useData = jQuery.parseJSON( data );
+                    if( 0 < useData.count )
+                    {
+                        $( "#forcedbanner_display" ).html('<ul class="list-group" id="forcedbanner_display_grp"></ul>');
+                        useData.data.forEach( displayForcedBanner );
+                    }
+                }
+            );
+        }
+
+        $( "#loadAds_btn").on('click', function(e) { loadAds( 'forcedbanner' ) } );
+
+        loadAds( 'forcedbanner' );
+    }
+);
diff --git a/index.php b/index.php
index 5a30a96d41cddb5e1825cabe11164b46a6050f93..b6c69e340e33ace029cfff989c335f68be77deae 100644
--- a/index.php
+++ b/index.php
@@ -36,9 +36,7 @@ if (mysqli_num_rows($start_reload) != 0) {
 	$datetime = "2014-09-21 20:33:28";
 }
 $ts = strtotime($datetime);
-?>
-
-<!DOCTYPE html>
+?><!DOCTYPE html>
 <html lang='de'>
     <head>
         <title><?php echo $pageconfig['seitenname'];?></title>
@@ -53,13 +51,17 @@ $ts = strtotime($datetime);
 		<link href="css/bootstrap.min.css" rel="stylesheet"> 
 		<script src="http://code.jquery.com/jquery-latest.js"></script>
 		<script type="text/javascript" src="js/tcal.js"></script> 
-		<script language="JavaScript" src="js/slider.js"></script>
+		<script type="text/javascript" src="js/slider.js"></script>
 		<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
-		<script src="js/bootstrap.min.js"></script>
+		<script type="text/javascript" src="js/bootstrap.min.js"></script>
+    <script type="text/javascript" src="ext/js/basics.js"></script>
 		<script type="text/javascript" src="js/start_countdown.js"></script>
     </head>
     <body>
-	
+    <script>
+        var pageconfig = new Array();
+        pageconfig['domain'] = '<?php echo $pageconfig['domain']; ?>';
+    </script>
 	<?php 
 	if(!empty($meldung['meldung'])){
 	?>
diff --git a/install/index.php b/install/index.php
index fffc7c23be710cab9053d01b7c3b1f8db281d0dd..70db8cea2ffe5961e94c068f0adffbd813151e11 100644
--- a/install/index.php
+++ b/install/index.php
@@ -426,6 +426,48 @@ if(isset($_POST['datenbank_anlegen'])){
 			return 0;
 		}
 	}
+
+/*
+* taken from  nieprzeklinaj at gmail dot com
+* http://php.net/manual/de/mysqli-stmt.bind-result.php
+*/
+function db_fetch($result)
+{   
+    $array = array();
+   
+    if($result instanceof mysqli_stmt)
+    {   
+        $result->store_result();
+    
+        $variables = array();
+        $data = array();
+        $meta = $result->result_metadata();
+    
+        while($field = $meta->fetch_field())
+            $variables[] = &$data[$field->name]; // pass by reference
+    
+        call_user_func_array(array($result, 'bind_result'), $variables);
+    
+        $i=0;
+        while($result->fetch())
+        {
+            $array[$i] = array();
+            foreach($data as $k=>$v)
+                $array[$i][$k] = $v;
+            $i++;
+
+            // don\'t know why, but when I tried $array[] = $data, I got the same one result in all rows
+        }
+    }
+    elseif($result instanceof mysqli_result)
+    {
+        while($row = $result->fetch_assoc())
+            $array[] = $row;
+    }
+
+    return $array;
+}
+
 	
 	function pw_erstellen($pw){
 		global $pw_zusatz;
diff --git a/lib/datenbank.inc.php b/lib/datenbank.inc.php
index c671594e2dbf063ccbf5a4d6c6530ed16001ac89..e015e84fb8ce89951a98eac8f0731a60999af82f 100644
--- a/lib/datenbank.inc.php
+++ b/lib/datenbank.inc.php
@@ -1,19 +1,19 @@
 	<?php
 	$db_host = "localhost";
 	// Mysql User
-	$db_user = "vms_suee2";
+	$db_user = "";
 	// Mysql PW
-	$db_pass = "lTxyJyZtmSQvaV6M";
+	$db_pass = "";
 	// Datenbank
-	$db_base = "vms_suee2";
+	$db_base = "";
 	//Datenbank Prefix
 	$db_prefix = "vms";
 	
 	//Passwort zusatz
-	$pw_zusatz = 'fg65en';
+	$pw_zusatz = '';
 	
 	// Verschlüsselungspasswort
-	$ver_schluessel = 'libh5476H6G4v0TB';
+	$ver_schluessel = '';
 	
 	//Datenbankverbindung herstellen
 	$sql_open = @mysqli_connect($db_host, $db_user, $db_pass, $db_base) or die('Verbindung zum Mysql Server fehlgeschlagen! <br>Tipp: <a href="http://www.vms-tutorial.de/wiki//Lib/Functions">http://www.vms-tutorial.de/wiki//Lib/Functions</a>');
@@ -50,6 +50,47 @@
 		}
 		
 	}
+
+/*
+* taken from  nieprzeklinaj at gmail dot com
+* http://php.net/manual/de/mysqli-stmt.bind-result.php
+*/
+function db_fetch($result)
+{   
+    $array = array();
+   
+    if($result instanceof mysqli_stmt)
+    {
+        $result->store_result();
+       
+        $variables = array();
+        $data = array();
+        $meta = $result->result_metadata();
+       
+        while($field = $meta->fetch_field())
+            $variables[] = &$data[$field->name]; // pass by reference
+       
+        call_user_func_array(array($result, 'bind_result'), $variables);
+       
+        $i=0;
+        while($result->fetch())
+        {
+            $array[$i] = array();
+            foreach($data as $k=>$v)
+                $array[$i][$k] = $v;
+            $i++;
+           
+            // don't know why, but when I tried $array[] = $data, I got the same one result in all rows
+        }
+    }
+    elseif($result instanceof mysqli_result)
+    {
+        while($row = $result->fetch_assoc())
+            $array[] = $row;
+    }
+   
+    return $array;
+}
 	
 	function pw_erstellen($pw){
 		global $pw_zusatz;