2016-06-07 5 views
0

Звучит достаточно просто, но я просто не могу заставить его работать. Я пытаюсь вставить значение checkbox в базу данных. Если он установлен, вставьте 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 плагин и если флажок изменился, я даже не вижу N в formdata под вкладкой сети, иначе я вижу 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

Проверка на наличие ошибок исполнения Вашего запроса. 'koristab = VALUES (koristab), loomade_hoolitsus = VALUES (loomade_hoolitsus)' должен что-то бросить. Также почему обновление до того же значения? – chris85

+0

что у вас есть в 'var_dump ($ _ POST)'? – Alex

+0

Флажки не отправляются на сервер, когда они не проверяются, и, вероятно, поэтому они также не включены в 'FormData'. – jeroen

ответ

3

Не пытайтесь изменить значение на клиенте. Флажки не предназначены для работы таким образом. Если флажок не установлен, он не будет отображаться в представленных данных.

Проверьте, отправлены ли данные.

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

(Очевидно, что не делает стоимость отправки от клиента требования запроса будет работать вообще).

+0

Пробовал реализовать это. Теперь он обновляет все до N. – raqulka

+0

@raqulka - Поскольку вы сказали, что можете видеть Y в представленных данных, это говорит о том, что что-то еще сломалось. – Quentin

+0

Что вы подразумеваете под этим: не следует ли отправлять значение клиенту запроса на выполнение запроса? – raqulka

0

Это потому, что функция serializeArray не будет снимать флажки.

Это поведение HTML-форм по умолчанию.

От jquery.com:

Метод .serializeArray() использует стандартные W3C правила для успешного управления, чтобы определить, какие элементы она должна включать; в частности, элемент не может быть отключен и должен содержать атрибут name. Значение кнопки отправки не сериализуется, так как форма не была отправлена ​​с помощью кнопки. Данные из элементов выбора файлов не сериализованы.

function testForm() { 
 
    console.log($("#myForm").serializeArray()); 
 
}
<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>