这可能看起来有点奇怪,但重要的是我让这个工作。这是我做的游戏。所以基本上,我的用户在我的网站上有他们自己的帐户。我有不同的计划,他们可以选择,每个计划每月费用不同。
我想做的是有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();
?>

如果我的问题没有意义,我很抱歉,我只是真的需要这个工作,我有点绝望,它的工作。以下是数据库的结构:
id|用户|名称|电子邮件|域|用户名|密码|计划|余额|加入日期|收费日|子状态| cic

最佳答案

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

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

关于php - PHP-从mysql表值中减去数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37314830/

10-11 23:02
查看更多