我正在尝试创建一个自动脚本,每天检查一次帐户是否有“今天”截止日期,如果是,请在当前贷款上加息,但由于某些原因,我的脚本会在扫描后停止第一个条目,不会遍历数据库中的所有条目。
谁能告诉我我错过了什么或做错了什么?先感谢您! (或建议是否有更好的方法完全执行此操作)
<?php
require('include/dbconfig.php');
$host = "redacted";
$user = "redacted";
$password = "redacted";
$datbase = "lending";
$tbl_name = "users";
mysql_connect($host, $user, $password);
mysql_select_db($datbase);
$sql_query = "SELECT user_id, datedue, locurrentamt, interestrate, first_name FROM $tbl_name";
$result_set = mysql_query($sql_query);
while ($row = mysql_fetch_row($result_set)) {
$user_id = $row['0'];
$first_name = $row['4'];
// FOR EACH DATABASE ENTRY CHECK THE DUE DATE
date_default_timezone_set('Australia/Perth');
$datetoday = date("Y/m/d");
$dateduefromdb = $row['1'];
// RETURN FALSE IF THE DATES ARE BOGUS
if (!$a = strtotime($datetoday))
return FALSE;
if (!$z = strtotime($dateduefromdb))
return FALSE;
// MAN PAGE http://php.net/manual/en/function.gregoriantojd.php
$a_jd = GregorianToJD(date('m', $a), date('d', $a), date('Y', $a));
$z_jd = GregorianToJD(date('m', $z), date('d', $z), date('Y', $z));
$countdowndate = $z_jd - $a_jd;
if ($countdowndate == 0 && $countdowndate >= 0) {
$dueamt = $row['2'];
$dueinterest = $row['3'];
$interestcharge = $dueamt * $dueinterest;
$finalinterest = $interestcharge + $dueamt;
$first_name = $row['4'];
$sql_query = "UPDATE users SET locurrentamt='$finalinterest' WHERE id='$user_id'";
}
}
答案 0 :(得分:0)
您能提供有关数据库中的内容的信息吗?
目前,如果datedue
被评估为null或任何无效,则以下代码将导致函数返回值FALSE(阻止处理更多行)。
if (!$z = strtotime($dateduefromdb))
return FALSE;
您可能需要类似
的内容 if (!$z = strtotime($dateduefromdb))
continue;
因为这将简单地跳过循环迭代的其余部分,并开始下一次迭代,这将处理下一个db行。
答案 1 :(得分:0)
我设法解决了我的问题。这是一个粗略的解决方案,但我在计算数据库中的条目数量后进行了for循环。如果有人有兴趣,可以在这里找到完成的脚本供您参考。祝你有美好的一天!
<?php
require('include/dbconfig.php');
$result2 = mysql_query("SELECT * FROM users");
$num_rows = mysql_num_rows($result2);
$numrowsadjust = ++$num_rows;
for ($x = $num_rows; $x <= $numrowsadjust; $x++){
$sql_query="SELECT * FROM $tbl_name WHERE user_id='$x' LIMIT 1";
$result_set=mysql_query($sql_query);
while($row=mysql_fetch_row($result_set))
{
//$user_id=$row['0'];
//$first_name = $row['1']; Display stuff for debugging
date_default_timezone_set('Australia/Perth');
$alpha=date("Y/m/d");
$omega=$row['20'];
// RETURN FALSE IF THE DATES ARE BOGUS
if (!$a = strtotime($alpha)) continue;
if (!$z = strtotime($omega)) continue;
// MAN PAGE http://php.net/manual/en/function.gregoriantojd.php
$a_jd = GregorianToJD( date('m', $a), date('d', $a), date('Y', $a) );
$z_jd = GregorianToJD( date('m', $z), date('d', $z), date('Y', $z) );
$countdowndate = $z_jd - $a_jd;
if ($countdowndate == 0 && $countdowndate >= 0){
$dueamt = $row['76'];
$dueinterest = $row['82'];
$interestactual = ($dueinterest / 100);
$interestcharge = $dueamt * $interestactual;
$finalinterest = $interestcharge + $dueamt;
$first_name = $row['1'];
$addthis = "UPDATE users SET locurrentamt='$finalinterest' WHERE user_id='$x'";
mysql_query($addthis);
}
}
die(mysql_error());
}
?>