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-送信として a href を含むテキスト ボックス。2- テーブルの更新はオンザフライで行われます (リロードなし)。アヤックス。3- ページをリロードせずに一度に 1 つ以上のアイテムを購入できる 4- 必要な場合を除き、php コードのヘルプは必要ありません。あらゆる種類の助けをいただければ幸いです。

4

2 に答える 2

1

しばらく前に、ニュースの管理、追加、編集、削除などのためだけに CMS のようなものを作成しなければならないプロジェクトがありました。

私がしたことは、あなたと同じように、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">';
       }
      }
     }

ここで最も重要なことの 1 つは、各アイテムの 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>
}

次に、AJAX リクエストを作成する「購入」リンクに JavaScript 関数をバインドします。

$('.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 に答える