【问题标题】:How to write data in MySQL database without cron?如何在没有 cron 的情况下在 MySQL 数据库中写入数据?
【发布时间】:2014-12-09 05:54:05
【问题描述】:

我遇到了一个问题。我正在创建一个基于网络的游戏。它更像是基于实时网络的应用程序。我的玩家可以建造建筑物。每个建筑物都有唯一的哈希 ID。具有所有参数的已构建建筑物存储在 SQL 中。我想做的就是制作自动收集资源(黄金)的引擎。我不想使用 cron。我想做到这一点,当我按下“引擎启动”时,它会开始收集金币:

if( $sql['engine'] == 1 ){
     //do the job..
}

我试过这个方法,但没有运气(collect.php):

if( $sql['engine'] == 1 ){
  mysql_query("UPDATE `info` SET `gold` = `gold` + 10 WHERE `building`='{$building}'");
}

还有index.php

function enginestat() {
    $("#EngineStatus").load("../job/collect.php?building=<?php echo $building; ?>", function () {
        setTimeout( function () {
            enginestat();
        }, 1000);
    });
}
$( function () {
    enginestat();
});

我相信我做错了什么,但有人能告诉我我做错了什么吗?我需要一个答案,我需要详细的信息。谢谢。

【问题讨论】:

  • 警告:这是非常不安全的,因为这些参数不是properly escaped。您应该绝不$_POST 数据直接放入查询中:它会创建一个巨大的SQL injection bugmysql_query 是一个过时的接口,不应使用,它已从 PHP 中删除。像PDO is not hard to learn 这样的现代替代品。像 PHP The Right Way 这样的指南解释了最佳实践。
  • 由于您正在编写一款竞争激烈的游戏,因此您将成为黑客攻击的目标。一定要按部就班。一个小小的错误就足以破解整个数据库。如果您刚刚开始使用您的应用程序,您可能需要评估各种development frameworks,例如Laravel,这可以使您的设计更容易实现。
  • 从技术上讲,您的&lt;?php echo $building; ?&gt;"", 在引号之外。其实,一句话太多了。 ("../job/collect.php?building=&lt;?php echo $building; ?&gt;", - 我的错.
  • @tadman 潜在的 sql 注入和您在此处指出的“巨大的 SQL 注入错误”有什么区别?它会结束宇宙的生命吗?有用的提示不会因为夸大而变得更好!
  • 除了 SQL 注入之外,我认为让客户端脚本决定玩家获得金币的频率几乎意味着他们可以随心所欲地获得金币。

标签: php mysql ajax cron


【解决方案1】:

您正在做的事情可以分解为一系列较小的步骤。例如,如果您每小时收集 X 个金币,那么当该人下次加载该页面时,您需要做的就是计算他们累积的金币差。

每次他们检查时,在数据库中记录轮询时间。下次他们检查时计算差异秒数并插值支付多少。每小时 100 次,相当于每秒 100 / 3600 次。您显然可以四舍五入以避免显示增量值。

【讨论】:

  • 我想过这个,但我想展示每个人的实时黄金收集。例如,我想让 ppl 看看黄金数量的增长情况。
  • 如果你想显示这个数字“实时”递增,那么使用 ajax 调用
  • @MarkBaker 很容易说话.. 我是 ajax 新手。你能给我看看例子吗?我写了类似 ajax/jquery 的东西..
  • @user3292639 您在示例中进行了 AJAX 调用。只需确保每次轮询该页面时,您只支付自上次轮询时间以来的金额。如果他们每秒检查一次以上,那可能为零。
  • @tadman 谢谢伙计!我明天试试。。我可以联系你吗?也许通过Skype?
猜你喜欢
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 2022-07-21
  • 2011-11-03
  • 2018-11-06
  • 2011-08-31
  • 2017-04-29
  • 1970-01-01
相关资源
最近更新 更多