2013-06-05 43 views
0

我目前正在使用ExpressionEngine建立一个系统,允许用户回答问题以换取积分,然后他们可以使用这些积分来奖励奖品。ajax表单提交第二次表单提交如果成功

我已经写功能领取奖品时,它需要做到以下几点:

  • 检查奖品是股票
  • 检查用户有足够的积分
  • 如果股票和足够的点提交一个表格,让管理员知道发送奖金

我有下面的代码,我认为几乎在那里,但我正在努力与最后一点,实际的成功零件/故障零件。我使用jQuery的阿贾克斯:

<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> 

该代码目前只是在输出警报prize_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} 

此代码检查股票,如果该物品有库存,然后从用户总点数中删除点数,这是有效的。但是,一旦发生这种情况,我想提交自由格式,我不能100%确定这是否应该位于prize_validation文件或第三个位置。但经过大量的实验后,我仍然不确定如何去做!

任何提示/技巧非常感谢!

+1

为什么不直接在你的ajax调用的成功回调函数中提交freefrom?如果我正确理解你。 –

+0

听起来像你已经理解了我,这听起来很理想,但我如何提交成功的表格? – Nick

+1

你想用阿贾克斯提交或正常表单提交。这应该提交表单,如果你把'$(“#freeform”)。submit();'在你的回调中而不是alert中。那就是假设你的表单的id被称为自由格式。如果你想做一个Ajax,它做得有点不同。 –

回答

0

Pjacks在上述评论中的回答帮助我解决了这个问题。