更改复选框值并插入数据库

时间:2016-06-07 13:02:37

标签: php jquery mysql

听起来很简单,但我无法让它发挥作用。我试图将复选框值插入数据库。如果选中,则插入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

2 个答案:

答案 0 :(得分:2)

请勿尝试更改客户端上的值。复选框不是以这种方式工作的。如果未选中该复选框,则不会显示在提交的数据中。

测试是否发送了数据。

$value = "N";
if (isset($_POST['animalCare'])) {
    $value="Y";
}

(显然,不要让客户端发送的值要求查询完全运行。)

答案 1 :(得分:0)

这是因为函数serializeArray不会取消选中复选框。

这是HTML表单的默认行为。

来自jquery.com

  

.serializeArray()方法使用标准W3C规则来成功控制,以确定它应包含哪些元素;特别是该元素不能被禁用,并且必须包含name属性。没有提交按钮值被序列化,因为表单未使用按钮提交。来自文件选择元素的数据未被序列化。

&#13;
&#13;
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;
&#13;
&#13;