kleine info zu dem while: also wenn du aus versehen mehrere datensätze in der Tabelle vms_start_praemie drin hast, dann bekommen die beiden variablen bei verwendung der while-schleife halt die werte des letzten zurückgelieferten datensatzes zugewiesen.

hat jetzt aber nichts mit deinem problem zu tun.

mit folgendem code (ungetestet) bekommen die variablen dann die werte des ersten zurückgelieferten datensatzes zugewiesen statt die des letzten:

PHP-Code:
//Anmeldebonus 
$req=mysql_query("SELECT werberpraemie, startguthaben FROM ".$db_prefix."_start_praemie"); 
if (
mysql_num_rows($req)>0) {
    
$row mysql_fetch_array($req));
    
$werberpraemie=$row['werberpraemie']; 
    
$startguthaben=$row['startguthaben']; 

bei mir ist die while-schleife auch drin .. keine probleme.

du solltest die Prämien nur gutschreiben, wenn (= if) KEIN (= !) fehler (= $error) aufgetreten ist ...=> if(!$error)... wie eRaaa schon sagte.

bei mir ist der ganze block mit einem if(!$error) umschlossen, in etwa so:

PHP-Code:
//Anmeldebonus
if(!$error){
    
$req=mysql_query("SELECT werberpraemie, startguthaben FROM ".$db_prefix."_start_praemie"); 
    while (
$row mysql_fetch_array($req)) { 
        
$werberpraemie=$row['werberpraemie']; 
        
$startguthaben=$row['startguthaben']; 
    } 
    
kontobuchung ('+',$werberpraemie,$_SESSION['werber']); 
    
$buchungs_id create_code(14);  
    
db_query("INSERT INTO ".$db_prefix."_buchungen (uid,buchungszeit,buchungs_id,buchungsmenge,verwen dungszweck) VALUES (".$_SESSION['werber'].",".time().",'".$buchungs_id."','".$werberpraemie ."','Werberprämie für User ".$id3."')");

wenn man nicht weiss warum man welchen code schreibt: ich kann jedem nur das PHP-Handbuch im CHM-Format ans Herz legen. gibt es auch weitestgehend auf deutsch. PHP-MySQL-Tutorials gibts auch viele im Netz.

viel Erfolg