我正在尝试向数据库提交复选框值。表单应该提交给数据库,但所有复选框字段都没有。简而言之,如果复选框为checked
,我希望使用值1
更新数据库上的相应列。如果表单提交时复选框不是checked
,则该列的值应为0
。
我做错了什么?注意,我知道查询很长。一旦工作,我可能会将其分解为2个表格。 仅供参考 $this -> input -> post('email');
& $this -> input -> post('email');
是从未发布的Ajax调用中收到的值。
我的模特:
// Add or update campaign on database
public function add_campaign()
{
// grab campaign session data
$userid = $this -> session -> userdata('user_id');
$campaign = $this -> session -> userdata('campaign_name');
$website = $this -> session -> userdata('campaign_user_website');
$headline = $this -> session -> userdata('campaign_headline');
$bar_color = $this -> session -> userdata('campaign_bar_color');
$head_color = $this -> session -> userdata('campaign_head_color');
$main_color = $this -> session -> userdata('campaign_main_color');
$thanks_msg = $this -> session -> userdata('campaign_thanks');
//grab scorecard options
$email_q = $this -> input -> post('email');
$brand_q = $this -> input -> post('brand');
$design_q = $this -> input -> post('design');
$usability_q = $this -> input -> post('usability');
$support_q = $this -> input -> post('support');
$service_q = $this -> input -> post('service');
$recommend_q = $this -> input -> post('recommend');
$suggestion_q = $this -> input -> post('suggestion');
$comments_q = $this -> input -> post('comments');
$modified = date('Y-m-d H:i:s');
// insert OR if campaign already exists, update the campaign values and date modified
$this -> db -> query("
INSERT INTO campaigns (userid, campaign, website, headline, bar_color, head_color, main_color, thanks_msg, email_q, brand_q, modified)
VALUES ('$userid', '$campaign', '$website', '$headline', '$bar_color', '$head_color', '$main_color', '$thanks_msg', '$email_q', '$brand_q', '$modified')
ON DUPLICATE KEY UPDATE userid='$userid', campaign='$campaign', website='$website', headline='$headline', bar_color='$bar_color', head_color='$head_color', main_color='$main_color', thanks_msg='$thanks_msg', email_q='$email_q', brand_q='$brand_q', modified='$modified'
");
}
我的观点的一部分:
<!-- Scorecard options -->
<div class="scordOption roundtop">
<div class="checkicon"><input type="checkbox" name="email" class="email_score" value="1"></div>
<div class="scoreOptionTxt">What is your email address?</div>
</div>
<div class="scordOption">
<div class="checkicon"><input type="checkbox" name="brand" class="brand_score" value="1"></div>
<div class="scoreOptionTxt">How would you rate our company's branding?</div>
</div>
Ajax函数指向可正常工作的控制器函数。无需显示代码。在该功能中,它指向上面的模型。
var score_options = {
email: $('input.email_score').val(),
brand: $('input.brand_score').val(),
ajax : '1' // needed for controller, to verify that request is ajax
};
//display ajax loader animation
$('#loading').show();
$.ajax({
url : 'ajax/embed_step',
type : 'POST',
data : score_options,
success : function(msg) {
$('.wizardContent').html(msg);
// output success in this container
$.scrollTo(0, 500);
// scroll to top on success
$('#loading').hide();
// hide loading icon
}
});
return false;
答案 0 :(得分:1)
无论是否选中了复选框,所有复选框字段都会在DB上注册1值,
这是你的主要问题:
email: $('input.email_score').val(),
这将抓取value
无论输入是否被选中,您都希望使用类似的东西(至少目前,有可能使用serialize()
等更有效的方法提交表格,但你应该先了解问题):
email: $('input.email_score:checked').val() ? 1 : 0,
如果你不熟悉这种语法,它通常被称为“条件运算符”,与基本相同:
if ($('input.email_score:checked').val()) {
email = 1;
} else {
email = 0;
}
如果未选中输入, $('input.email_score:checked').val()
将返回undefined
。作为旁注,通过其name
属性而不是类来获取输入可能更有意义。还有很多其他方法可以执行此操作,例如$('input.email_score:checked').length
(已检查了多少?),但您可以按照您想要的方式执行此操作。
此外,在PHP方面,继续并转换为整数或使用intval()
,以便您知道值是安全的:
$email_q = (int) $this->input->post('email');
或者,再一次,使用条件运算符(可能更好,因为你只想要1或0):
$email_q = $this->input->post('email') ? 1 : 0;
复选框有点棘手,因为未经检查的复选框通常根本不发布,而不是发布您可能期望的空值。