0

我对网络编程非常陌生,我学到的一切基本上都是通过在线查找文档来学习的。我有一个网站运行一种带有库存等的游戏。我似乎想不出一种将物品提供给用户的干净方式。它目前使用 JavaScript 函数,但我意识到用户可以从 URL 栏中调用该函数并利用系统。

在给定的页面上,这是要求提供项目的代码。用户将单击“获取帽子”按钮之类的按钮,并将被重定向到另一个页面:

<script>
    function giveitem(name, quant)
    {
        document.getElementById("itemnamefield").value=name;
        document.getElementById("itemquantfield").value=quant;
        document.itemform.submit();
    }
</script>
<form id="itemform" name="itemform" action="./itemget.php" method="post">
    <input type="hidden" id="itemnamefield" name="itemnamefield" value="">
    <input type="hidden" id="itemquantfield" name="itemquantfield" value="">
</form>    
<input type="button" onClick="javscript: giveitem('Hat',1);" value="Get Hat"><br>

itemget.php 然后使用前一页的发布数据执行此函数。$id 是存储在 cookie 中的用户 ID 号,$name 是商品的标题,$quant 是所需的商品数量。

function additem($id, $name, $quant){
        include 'sqlconnect.php';
        $result = mysqli_query($con, "SELECT * FROM inventory WHERE id='$id' AND name='$name'");
        if ($row = mysqli_fetch_array($result)){
            mysqli_query($con, "UPDATE inventory SET quant=quant+'$quant' WHERE id='$id' AND name='$name'");
        }
        else{
            $subresult = mysqli_query($con, "SELECT name FROM itemdef WHERE name='$name'");
            $subrow = mysqli_fetch_array($subresult);
            mysqli_query($con,"INSERT INTO inventory (id, quant, name) VALUES ('$id', '$quant', '$subrow[name]')");
        }
    }

itemget.php 然后显示用户收到的物品。所以我不能使用javascript,因为这是可以利用的。除了标准的 HTML 和 PHP 之外,我并没有真正打算使用 jquery 或其他任何东西(我试图保持简单,因为我缺乏经验)。为每个“给 x 项”按钮创建一个新表单是我唯一的选择吗?

4

3 回答 3

0

您可以使用 javascript、表单或只是简单的超链接。

诀窍是让服务器知道用户有哪些可能性。因此,当您生成页面时,您可以将生成“get hat”链接的用户会话存储在服务器上,因此“get hat”是一个有效的命令。

如果您收到无效的命令,则用户可能在作弊,或者他们单击“返回”并从过时的页面执行命令。无论如何,您可以忽略该命令或显示一条消息。

所以诀窍是将验证保留在服务器上。这样,他们就不能作弊,因为除了您提供的命令之外的所有内容都被阻止了。

所以说技术,你可以只用 PHP 编写游戏逻辑和会话处理,并使用纯 HTML(超链接)来呈现命令。如果您愿意,您也可以使用 Javascript/JQuery 或表单,如果您认为这更容易或让您的游戏玩法更好。只要您在服务器上进行检查,就可以了。

于 2013-07-14T22:18:57.343 回答
0

小例子。当您将数据发送到 .php 文件以进一步处理信息时,总是,我的意思是总是恐慌(不像严重恐慌,但要小心)并且不要相信用户信息。如果您知道变量 $x 应该只是整数,那么使用 if 条件来确保它是一个整数,这样坏/恶意数据就不会成为问题。

于 2013-07-14T22:25:57.230 回答
0

使用由 初始化的 PHP 会话<?php session_start(); ?>,然后您可以存储存储在服务器上的信息,该信息由具有会话 ID 的 cookie 引用。

例如,不要将用户的 id 存储在 cookie 中,使用会话:<?php $_SESSION['user_id'] = 1; ?>

然后,例如,您也可以在该会话中存储可用项目。

game.com/view-x.php

<?php
session_start();
...
$_SESSION['items_available'] = array('hat', 'shoe');
?>

例如,当用户通过 html 表单、链接、...请求项目时:

game.com/item-add.php?item=stone

<?php
session_start();
...
if (in_array($_GET['item'], $_SESSION['items_available'])) {
  ..
}
else {
  // 'stone' is not an available item
}
...
于 2013-07-14T22:56:28.077 回答