我目前正在使用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>
此代码目前只在警报中输出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}
此代码检查库存,如果物品有库存,则从用户总点数中删除点数,这是有效的。但是,一旦发生这种情况,我想提交Freeform,我不是100%确定这是否应该在prize_validation文件内或第三个位置。但经过大量的实验,我仍然不确定如何去做!
任何提示/提示非常感谢!
答案 0 :(得分:0)
上述评论中的Pjacks回答帮助我解决了这个问题。
您想使用ajax提交还是正常表单提交。如果您将
$("#freeform").submit();
放入回拨而不是提醒,则应提交此表单。假设你的表单的id被称为自由形式。如果你想做ajax,它会有所不同。