听起来很简单,但我无法让它发挥作用。我试图将复选框值插入数据库。如果选中,则插入Y,如果没有,则插入N.在我的DOM中,我看到复选框的值在我单击后更改为N,但数据库中的值未更改。也许这是我失踪的小而愚蠢的东西。
因此默认值为N。
这是HTML:
<div class="funkyradio">
<div class="funkyradio-success">
<input type="checkbox" name="animalCare" id="animalCare" value="N"/>
<label for="animalCare">Hoolitsen loomade eest:</label>
</div>
</div>
JS
//I have a lot more of those checkboxes
$('#cleaningOk, #animalCare, #homeSchooling, #worktime_lenght, #sickChildren, #isSmoking, #isTattoo, #animalsOk, #disabledChildren, #singleParent, #driversLicense, #babyOk').change(function(){
if ($(this).is(':checked')) {
$(this).val('Y');
} else {
$(this).val('N');
}
});
为了插入我使用formValidation.io插件,如果复选框被更改,我甚至看不到网络选项卡下的formdata中的N,否则我看到Y.
.on('success.form.fv', function(e, data) {
// Prevent form submission
e.preventDefault();
console.log("validated");
var $form = $(e.target),
formData = new FormData(),
params = $form.serializeArray(),
files = $form.find('[name="userProfilePhoto"]')[0].files;
$.ajax({
url: $form.attr('action'),
data: formData,
cache: false,
contentType: false,
processData: false,
type: 'POST',
success: function(data) {},
error: function(jqXHR, textStatus, errorThrown, data) {
console.log(jqXHR, textStatus, errorThrown, data);
}
});
});
PHP
////SERVICES
if (isset($_POST["cleaningOk"], $_POST['animalCare'], $_POST['homeSchooling'])){
$cleaningOk = $_POST['cleaningOk'];
$animalCare = $_POST['animalCare'];
$homeSchooling = $_POST['homeSchooling'];
$nanny_services = $user_home->runQuery("INSERT into services (user_id, koristab, loomade_hoolitsus, koduõpetamine) VALUES (:user_id, :cleaningOk, :animalCare, :homeSchooling) ON DUPLICATE KEY UPDATE koristab= VALUES(koristab), loomade_hoolitsus= VALUES(loomade_hoolitsus), koduõpetamine=VALUES(koduõpetamine)");
$nanny_services->bindparam(':cleaningOk', $cleaningOk, PDO::PARAM_STR);
$nanny_services->bindparam(':animalCare', $animalCare, PDO::PARAM_STR);
$nanny_services->bindparam(':homeSchooling', $homeSchooling, PDO::PARAM_STR);
$nanny_services->bindparam(':user_id', $user_id, PDO::PARAM_STR);
$nanny_services->execute();
$response_array["status"] = 'success';
}
////SERVICES
答案 0 :(得分:2)
请勿尝试更改客户端上的值。复选框不是以这种方式工作的。如果未选中该复选框,则不会显示在提交的数据中。
测试是否发送了数据。
$value = "N";
if (isset($_POST['animalCare'])) {
$value="Y";
}
(显然,不要让客户端发送的值要求查询完全运行。)
答案 1 :(得分:0)
这是因为函数serializeArray
不会取消选中复选框。
这是HTML表单的默认行为。
来自jquery.com:
.serializeArray()
方法使用标准W3C规则来成功控制,以确定它应包含哪些元素;特别是该元素不能被禁用,并且必须包含name
属性。没有提交按钮值被序列化,因为表单未使用按钮提交。来自文件选择元素的数据未被序列化。
function testForm() {
console.log($("#myForm").serializeArray());
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myForm">
<input type="checkbox" name="checked" value="T" checked>
<input type="checkbox" name="unchecked" value="F">
<a href="#" onclick="testForm()">Submit</a>
</form>
&#13;