Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-从mysql表值中减去一个数字_Php_Mysql - Fatal编程技术网

PHP-从mysql表值中减去一个数字

PHP-从mysql表值中减去一个数字,php,mysql,Php,Mysql,这可能看起来有点奇怪,但重要的是我要让它工作起来。这是我正在做的一个游戏。所以基本上,我的用户在我的网站上有他们自己的帐户。我有不同的计划,他们可以选择,每个计划的费用每月不同 我想做的是有4个独立的PHP cron,根据他们选择的计划,每个月自动从他们的帐户中减去一定的金额。例如,如果用户有“终极”计划,并且当前帐户中有$1049.99,我希望它从数据库的“余额”行中减去49.99,然后将表更新为1000.00(因为它减去了计划金额) 在注册时,数据库将加载值“chargeday”,该值基本上

这可能看起来有点奇怪,但重要的是我要让它工作起来。这是我正在做的一个游戏。所以基本上,我的用户在我的网站上有他们自己的帐户。我有不同的计划,他们可以选择,每个计划的费用每月不同

我想做的是有4个独立的PHP cron,根据他们选择的计划,每个月自动从他们的帐户中减去一定的金额。例如,如果用户有“终极”计划,并且当前帐户中有$1049.99,我希望它从数据库的“余额”行中减去49.99,然后将表更新为
1000.00
(因为它减去了计划金额)

在注册时,数据库将加载值“chargeday”,该值基本上是用户注册的月份。我希望cron每天都运行(我知道怎么做),并且只有当当前日期等于数据库中列出的chargeday时,才运行此代码。(我一直在运行这段代码,删除了
if($chargeday==date(“d”){
}

我尝试了以下方法,但无法按我想要的方式工作:

<?php
  $servername = "localhost";
  $username = "myusername";
  $password = "mypassword";
  $dbname = "advenaio_myaccount";

$chargeday = date("d");
   if ($chargeday == date("d")) {

$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT email, plan, balance FROM advaccounts WHERE plan='ultimate'";
$result = $conn->query($sql);

$ultimateplan = "49.99";
$currentbalance = $row['balance'];
$newbalance = $currentbalance-$ultimateplan;

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "plan: " . $row["plan"]. "<br>balance: " . $row['balance'] . "<br>new balance: " . $newbalance . "<br>email address: " . $row['email'] .  "<br><br> ";
    }
} else {
    echo "0 results";
}

$sql = "UPDATE advaccounts SET balance=$newbalance WHERE plan='ultimate'";

if ($conn->query($sql) === TRUE) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . $conn->error;
}

$conn->close();
?>

您可以使用下面的sql直接使用一个sql更新余额。无需编写php逻辑

$sql = "UPDATE advaccounts SET balance=balance-49.99 WHERE plan='ultimate' and chargeday = '" . date('d'). "'";  

另外,
$chargeday
是引用的另一个文档中的变量,它总是设置在当前日期以进行调试,但我还想根据数据库检查,以确保在可能的情况下,用户应该在当天计费。是否在某个表中存储amount值?
$row['balance']
在您的代码中未定义,
$currentbalance=$row['balance'];
!!完全不需要从php查询余额,在php中执行减法并更新余额,您可以在一个sql更新调用中执行此操作。:)很高兴帮助您是的,我们可以做到这一点。。。为此,我需要修改sql,它将只更新那些余额超过49.99的记录。然后,我们需要执行另一个SQl,它将获取所有余额较少的用户,并对其进行处理,然后向这些用户发送邮件