DeanWhitehouse Posted January 29, 2009 Share Posted January 29, 2009 First off code <?php function FormatTimeDiff($t1,$t2 = null,$format = 'yfwdhms') { $t2 = $t2 === null ? time() : $t2; $s = abs($t2 - $t1); $sign = $t2 > $t1 ? 1 : -1; $out = array(); $left = $s; $format = array_unique(str_split(preg_replace('`[^yfwdhms]`', '', strtolower($format)))); $format_count = count($format); $a = array('y'=>31556926, 'f'=>2629744, 'w'=>604800, 'd'=>86400, 'h'=>3600, 'm'=>60, 's'=>1); $i = 0; foreach($a as $k=>$v) { if(in_array($k, $format)) { ++$i; if($i != $format_count) { $out[$k] = $sign * (int)($left / $v); $left = $left % $v; } else { $out[$k] = $sign * ($left / $v); } } else { $out[$k] = 0; } } return $out; } if(isset($_GET['account'])) { $id = mysql_real_escape_string(((int) $_GET['account'])); $sql = "SELECT interest,name,maturation FROM nbanking_types WHERE id = '".$id."'"; $sql = mysql_query($sql); if(mysql_num_rows($sql) == 0) { echo "Account type Not Found"; } else { $account = mysql_fetch_assoc($sql); $sql = "SELECT last_maturation,balance FROM user_nbanking WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."' AND package_id = '".$id."'"; $sql = mysql_query($sql); if(mysql_num_rows($sql) == 0) { mysql_query("INSERT INTO user_nbanking (user_id,package_id) VALUES ('".mysql_real_escape_string($_SESSION['user_id'])."','".$id."')"); $sql = mysql_query($sql); } $user_account = mysql_fetch_assoc($sql); $next_maturation = date("Y-m-d H:i:s",strtotime($user_account['last_maturation']." + ".$account['maturation']." days"));//Next maturation date if($next_maturation <= date("Y-m-d")) { mysql_query("UPDATE user_nbanking SET balance = '".($user_account['balance'] + ($user_account['balance'] / 100 * $account['interest']))."', last_maturation = NOW() WHERE WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."' AND package_id = '".$id."'") or die(mysql_error()); $sql = mysql_query($sql); $user_account = mysql_fetch_assoc($sql); $next_maturation = date("Y-m-d H:i:s",strtotime($user_account['last_maturation']." + ".$account['maturation']." days"));//Next maturation date } $time_dif = FormatTimeDiff(strtotime($user_account['last_maturation']),strtotime($next_maturation)); $new_time = ""; if($time_dif['y'] > 0) $new_time .= " ".$time_dif['y'].($time_dif['y'] > 1 ? " years" : " year"); if($time_dif['f'] > 0) $new_time .= " ".$time_dif['f'].($time_dif['f'] > 1 ? " months" : " month"); if($time_dif['w'] > 0) $new_time .= " ".$time_dif['w'].($time_dif['w'] > 1 ? " weeks" : " week"); if($time_dif['f'] > 0) $new_time .= " ".$time_dif['f'].($time_dif['f'] > 1 ? " months" : " month"); if($time_dif['d'] > 0) $new_time .= " ".$time_dif['d'].($time_dif['d'] > 1 ? " days" : " day"); if($time_dif['h'] > 0) $new_time .= " ".$time_dif['h'].($time_dif['h'] > 1 ? " hours" : " hour"); if($time_dif['m'] > 0) $new_time .= " ".$time_dif['m'].($time_dif['m'] > 1 ? " minutes" : " minute"); if($time_dif['s'] > 0) $new_time .= " ".$time_dif['s'].($time_dif['s'] > 1 ? " seconds" : " second"); } ?> Quick sum up of the code, the above code should get certain user account details from their account and work out when they are due to be added interest to their balance and if they are add it and set the last paid day to this day. Now i know for a fact that the code is flawed (although only one way) and that is that if the user doesn't log in for a few days then they will have gaps between interest payment. What ways would you recommend around this without cron jobs. Also i think the script is bugged in its logic. One other thing i tried making the day between the interest payments 0 and i didn't gain a payment, can anyone see why. I am tired so i might of missed things, i just need another head to work on this edit: sql dumps This is the nbanking_types table (a row in it) id interest maturation name 1 17.5 1 High Interest and this is the user banking one User Id Package ID Balance ID Last Maturation 2 1 50 1 2009-01-28 18:07:54 Thanks, Blade Quote Link to comment https://forums.phpfreaks.com/topic/142890-i-think-i-might-be-doing-something-wrong/ Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.