【问题标题】:PHP - Subtracting a number from mysql table valuesPHP - 从 mysql 表值中减去一个数字
【发布时间】:2023-03-20 13:30:01
【问题描述】:

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

我想要做的是有 4 个单独的 PHP crons,它们会根据他们选择的计划每月自动从他们的账户中减去一定的金额。例如,如果用户拥有“终极”计划,并且当前帐户中有 1,049.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_user |姓名 |电子邮件 |域名 |用户名 |密码 |计划|余额|加盟日期 |收费日 |子状态 | cic

【问题讨论】:

  • 另外,$chargeday 是另一个文档中被引用的变量,它始终设置在当前日期以进行调试,但我还想检查数据库以确保其如果可能,应该向用户收费的日期。
  • 您是否将金额值存储在某个表中?
  • $row['balance']$currentbalance = $row['balance']; 的代码中未定义!!
  • 完全不需要从 php 中查询余额,在 php 中进行减法并更新余额,您可以在单个 sql 更新调用中完成。

标签: php mysql


【解决方案1】:

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

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

【讨论】:

  • :) 很乐意为您提供帮助
  • 是的,我们可以这样做......为此我需要修改 sql,它只会更新余额超过 49.99 的那些记录。然后我们需要执行其他 SQl 来获取所有余额较少的用户并处理它并将邮件发送给这些用户
猜你喜欢
  • 2011-06-22
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 2022-07-30
  • 1970-01-01
相关资源
最近更新 更多