2014-09-12 89 views
0

我需要一些帮助来获取提交按钮的值。下面的代码触发了我的控制器功能,但我无法获得“邀请”按钮的值。 var_dump states'bool(false)',Educator_Id的0被插入到我对数据库的最终查询中。无法获得提交按钮的价值PHP

感谢您的帮助!

我的提交按钮:

<?php foreach($educators as $educator): ?> 
    <button type="submit" id="Invite" name="Invite" value="<?php echo $educator->Educator_Id; ?>">Invite</button> 
<?php endforeach; ?> 

我jQuery的功能:

$("#Invite").click(function() { 
    var form_data = $('#validation-form').serialize(); 

    $.ajax({ 
     url: "<?php echo site_url('schedule/send_invite'); ?>", 
     type: 'POST', 
     data: form_data 
    }); 

    return false; 
}) 

我的控制器:

function send_invite() { 
    $email = $this->input->post('Educator_Email'); 
    $Opportunity_Id = $this->input->post('Opportunity_Id'); 
    $Educator_Id = $this->input->post('Invite'); 
    $Class_Numbers = $this->input->post('Class_Numbers'); 

    foreach($Class_Numbers as $Class_Number): 
     $this->ion_auth_model->update_class_educator($Opportunity_Id, $Class_Number, $Educator_Id); 
    endforeach; 
} 

我的模型:

function update_class_educator($Opportunity_Id, $Educator_Class, $Educator_Id) { 
    $Class = array(
     'Educator_Id' => $Educator_Id 
    ); 

    $this->db->where('Opportunity_Id', $Opportunity_Id); 
    $this->db->where('Class_Number', $Educator_Class); 
    $this->db->update('Classes', $Class); 
} 
+0

你不能缩小到PHP或JavaScript?这应该很容易做到。 – 2014-09-12 18:58:37

+0

@JohnConde似乎是一个PHP问题给我。 – 2014-09-12 19:00:26

+1

根据这个答案 - http://stackoverflow.com/a/9866762/689579 - jquery'.serialize()'不编码按钮。 – Sean 2014-09-12 19:08:04

回答

0

尝试将值传递给隐藏的输入

的JavaScript:

$("#Invite").live("click", function(){ 
    var this_value = $(this).val(); 
    $("input[name='InviteValue']").val(this_value); 
}); 
0

而不是使用按钮使用输入这样的:

<?php 
    $count = 0; 
    foreach($educators as $educator): ?> 
    <input type="submit" id="Invite_$count" class="invite" name="Invite" data-value="<?php echo $educator->Educator_Id; ?>" value="Invite"/> 
<?php 
    $count++; 
    endforeach; ?> 

而在jQuery中您可以使用:

$(".invite").click(function() { 
    var submit_data = $(this).data('value'); 
    var form_data = $('#validation-form').serialize(); 

    $.ajax({ 
     url: "<?php echo site_url('schedule/send_invite'); ?>", 
     type: 'POST', 
     data: form_data + "&submit_data=" + submit_data 
    }); 

    return false; 
}) 

In Controller:

function send_invite() { 
    $email = $this->input->post('Educator_Email'); 
    $Opportunity_Id = $this->input->post('Opportunity_Id'); 
    $Educator_Id = $this->input->post('submit_data'); 
    $Class_Numbers = $this->input->post('Class_Numbers'); 

    foreach($Class_Numbers as $Class_Number): 
     $this->ion_auth_model->update_class_educator($Opportunity_Id, $Class_Number, $Educator_Id); 
    endforeach; 
} 

试试吧。这可能会解决您的问题。

+0

感谢您的回应,但仍得到相同的结果 – 2014-09-12 19:34:40

+0

哦,对不起,我的解决方案中有一个错误,我没有注意到for循环,并使用相同的“ID”在循环,我正在通过添加一个类来纠正它,然后它肯定会出现RK。 – KCP 2014-09-15 15:37:14

0

尝试本作的PHP:

<?php 
    foreach($educators as $educator){ 
     echo "<input type='checkbox' name='invite[]' value='".$educator->Educator_Id."'>".$educator."<br/>"; 
    } 
    echo "<input type='submit' value="Invite"/>"; 

,它将使一个复选框为每个教育工作者和一个提交按钮。然后,在您的JS中:

$("#invite").click(function() { 
var form_data = $('#validation-form').serialize(); 

$.ajax({ 
    url: "<?php echo site_url('schedule/send_invite'); ?>", 
    type: 'POST', 
    data: form_data, 
    success: function(){ 
     // Do something here if succeded 
    } 
}); 

return false; 

});

这样它只会将选中的复选框发送到服务器,因此您可以从那里处理控制器中选择的人员。

$Educator_Id = $this->input->post("invite[]"); 

,而不是

$Educator_Id = $this->input->post('Invite'); 

我认为应该工作...你的最终目标是有点不清楚我,但你的逻辑就是在这种情况下是关闭,这将有助于明确的东西向上。

干杯!