0

私は現在 ExpressionEngine を使用して、ユーザーがポイントと引き換えに質問に答えることができるシステムを構築しています。その後、ユーザーはこれらのポイントを使用して賞品を請求できます。

私は賞品を請求する機能を書いてきました。次のことを行う必要があります。

  • 賞品の在庫を確認する
  • ユーザーが十分なポイントを持っていることを確認します
  • 在庫があり、十分なポイントがある場合は、管理者に賞品の発送を知らせるフォームを送信します

次のコードはほとんどあると思いますが、実際の成功/失敗の部分である最後のビットに苦労しています。私はjQuery Ajaxを使用しました:

<script type="text/javascript">

$(function() {
    $("#prizeClaim").submit(function() {
        var data = "entry_id={entry_id}&member_id={logged_in_member_id}&prize_title={title}&prize_points={prize_points}";
        $.ajax({
            url: "/prizes/prize_validation/",
            data: data, 
            success: function(html) {
                alert(html); // alert the output from the PHP Script
            }
        });
        return false;
    });
});
</script>

このコードは現在、prise_validation の html をアラートに出力するだけです。これは、これまでの検証ページで使用されたコードです。

<?php

  // All data required made into vars
  $entry_id = ($_GET['entry_id']);
  $member_id = ($_GET['member_id']);
  $prize_title = ($_GET['prize_title']);
  $prize_points = ($_GET['prize_points']);

  // Select the stock column 
  $query = ee()->db->query("SELECT field_id_6 FROM exp_channel_data WHERE entry_id = $entry_id");

  if ($query->num_rows() > 0)
  {
      foreach($query->result_array() as $row)
      {
          // define stock_total
          $stock_total = $row['field_id_6'];

          // If stock more than 0 go ahead
          if($stock_total > 0) {
            //remove 1 stock item
            ee()->db->query("UPDATE exp_channel_data SET field_id_6 = field_id_6 - 1 WHERE entry_id = $entry_id");

            //update users points
            $data = array('member_id' => $member_id, 'prize_points' => $prize_points, 'prize_id' => $entry_id);
            $sql = ee()->db->insert_string('exp_rmdy_member_prize_data', $data);
            ee()->db->query($sql);
          }
      }
  }
?>

{exp:freeform:form form_id="1" return="thanks"}
    <input type="hidden" name="name" value="{username}" id="freeform_name" maxlength="150">
    <input type="hidden" name="email" value="{email}" id="freeform_email" maxlength="150">
    <input type="hidden" name="company" value="{exp:channel:entries channel='company' dynamic='no'}{if {member_code} == {company_code}}{title}: {company_address}{/if}{/exp:channel:entries}" id="freeform_company" maxlength="200">
    <input type="hidden" name="prize" value="<?php echo $prize_title ?>" id="freeform_prize" maxlength="150">
    <p><input type='submit' name='submit' value='Process order'></p>
{/exp:freeform:form}

このコードは在庫をチェックし、アイテムが在庫にある場合は、ユーザーの合計ポイントからポイントの量を削除します。これは機能します。しかし、これが発生したら、フリーフォームを提出したいのですが、これが Prize_validation ファイル内にあるべきか、それとも 3 番目の場所にあるべきか、100% 確信が持てません。しかし、多くの実験を行った後でも、どうすればよいかわかりません!

ヒント/ヒントは大歓迎です!

4

1 に答える 1

0

上記のコメントの Pjacks の回答は、これを修正するのに役立ちました。

ajax を使用して送信するか、通常のフォーム送信を使用しますか。$("#freeform").submit();アラートの代わりにコールバックを入力すると、フォームが送信されます。あなたのフォームのIDがフリーフォームと呼ばれると仮定します。ajax を実行する場合は、少し方法が異なります。

于 2013-06-24T09:46:52.783 に答える