0

我将使其尽可能简短和具有描述性(考虑到我的情况更长)。假设我有 2 个具有以下结构的数据库表:

用户表:

id ---- 用户名---- 金

物品表:

id----- item_name---- item_price

我想要实现的是头脑风暴,我尝试了超过 20 种脚本组合。我需要能够将表​​格中的所有项目回显到一个好的布局(完成)有一个文本框供用户输入需要购买的值。a href 提交金额,从用户拥有的黄金数量中扣除物品的价格,然后将 1 添加到库存中。我不需要 php 代码,因为它很容易。我需要的只是帮助尝试更新在“实时”中键入的值。“商店”的布局将如下所示:

while($_row = mysql_fetch_assoc($query)){
 echo out name...
 <input type = 'text' name = 'to_buy_value'/>
 <a href = 'javascript:;' class = 'buy'>Buy</a>
}

我希望上面的代码能给你足够的参考。TL;DR(在 db 结构之后?) 1- 一个带有 href 作为提交的文本框。2-表更新是即时完成的(不重新加载)。阿贾克斯。3-能够一次购买超过 1 件商品而无需重新加载页面 4-除非必要,否则无需使用 php 代码。我将不胜感激任何形式的帮助。

4

2 回答 2

1

前段时间,我有一个项目,我必须为新闻管理、添加、编辑、删除等做某种 CMS。正如 Satya 评论的那样,如果你想做得很好,方法就是使用 AJAX。

我所做的是一个循环,就像你的一样,为使用 PHP mysql_fetch_assoc 获取的每一行在表中添加一个 tr (是的,我知道,表......)。我知道您不想要 PHP 帮助,但我认为这会对您有所帮助。

    $res=mysql_query($query) or die(mysql_error());
    while($row = mysql_fetch_assoc($res)) {  
     foreach ($row as $col => $val) {
     if ($col != "column you dont display or isn't 'ID' column" && $col != "another column you dont display, and so on") {
       if ($col == "ID") $id = $val;

       //use this to echo values in table/tr/td/div/span or whatever you use to display values
       if ($col == "gold") {
        echo 'whatever you want to echo using the gold value';
       }
       if ($col == "name of last column you are displaying") {
        echo 'whatever you display for that column';
        echo '<input type="text" value="Introduce quantity">';
        //If you are on HTML5 you could just use id="{$id}" as it will be easier
        echo '<a href="#" class="buy" id="i_{$id}" value="Introduce quantity">';
       }
      }
     }

这里最重要的事情之一是跟踪每个项目的 ID,这样您就可以在向服务器发送 POST 请求时将它们关联起来。

我建议你使用 jQuery,它很容易使用

<script type="text/javascript">
  $(document).ready(function () {
    $(".buy").click(function(e) {
      e.preventDefault();
      // You get the id attribute of the button clicked, which contains the
      // item ID. Then you substr the string to get just the id number. Example:
      // The id of the clicked element is "i_2254" you use substr to get just the
      // 2254 and send it to the php that process the buy
      // If you choose the HTML5 id form I said above in the PHP, then var id=$(this).attr("id")
      var id = $(this).attr("id").substr(2);
      $.ajax({
              type: "POST",
              url: "buy_item.php",
              async:false,
              data: "itemID="+id,
              success: function(data) {
                  // Here is where the magic occurs, this is what happens when you
                                      // get the response, here is where you update the
                                      // inventory, quantity, etc WITHOUT reloading.
                                      // The variable data is the response of the server
                                      // you just echo what you need on buy_item.php, and 
                                      // that will be data here
                                      // A simple example is to change the value of an input
                                      // with id="gold", you echo gold on php and...

                                      $('#gold').val(data);

                }
              }); 

  });
    });
  });
</script>

在 buy_item.php 中,您可以更新表的黄金值,并将项目添加到项目表中。使用 $_SESSION 变量存储用户会话名称并更新该用户的金币和物品。

我建议你调查一下 AJAX 和 jQuery(可选),它会有很大帮助!

我想基本上这会解决你的问题,我希望能收到游戏邀请:P

于 2012-04-18T00:49:08.917 回答
1

这是一个非常粗略的解决方案。在您的 while 循环中,您可以将项目的数据库 ID 附加到元素的 ID:

while($_row = mysql_fetch_assoc($query)){
 echo out name...
 <input id="purchaseAmount{$_row->id}" type="text" name="value_to_buy" />
 <a id="purchaseButton{$_row->id}" href="#" class="buy">Buy</a>
}

然后将 javascript 函数绑定到您的“购买”链接,该链接将发出 AJAX 请求:

$('.buy').bind('click', function() {

  // Grab the item id and amount
  var itemId = $(this).attr('id').substring(14);
  var itemAmount = $('purchaseAmount' + itemId).val();

  $.ajax({
    url: 'someurl/purchaseItem.php',
    data: { item: itemId, amount: itemAmount },
    success: function(data) {
      // Update the player's gold and inventory on screen
    }
  });
});

“purchaseItem.php”文件可以返回一个简单的 JSON 对象,该对象保存玩家当前的金币和物品栏的物品数量。或者您可以返回 HTML,具体取决于您的页面设置方式。

于 2012-04-18T00:55:53.373 回答