web-dev-qa-db-fra.com

Case à cocher non cochée retournant une valeur nulle

J'ai un ensemble de cases à cocher qui, lorsqu'elles sont cochées, passent la valeur à 1, sinon, la valeur à 0. Cependant, au lieu d'envoyer la valeur des cases à cocher non cochées à "0", la valeur envoyée est "NULL".

J'ai le code JS suivant en place qui devrait définir la valeur à 0/1 en conséquence, mais toujours la valeur est envoyée en tant que NULL. Peut-on faire quelque chose pour s'assurer que la valeur transmise en cas de case non cochée est 0?

$('#cb1, #cb2, #cb3, #cb4').on('click', function ()
    $(this).val(this.checked ? 1 : 0);
});

UPDATED Voici mon code HTML:

<input type="checkbox" name="cb1" id="cb1" value="1" checked />
<input type="checkbox" name="cb2" id="cb2" value="1" checked />
<input type="checkbox" name="cb3" id="cb3" value="1" checked />
<input type="checkbox" name="cb4" id="cb4" value="1" checked />

Ils sont tous vérifiés par défaut.

Si l'un d'eux est décoché, MySQL signale l'erreur suivante: 0SQLSTATE [23000]: Violation de contrainte d'intégrité: 1048 La colonne 'Nom de la colonne' ne peut pas être null. 

Cela est dû au fait que les colonnes sont définies pour ne pas être Null. Et même si j'ai défini la valeur par défaut sur 0, une fois que je clique sur le bouton d'envoi, le message d'erreur persiste. J'ai essayé de supprimer la propriété Not NULL cependant, plutôt que de pré-remplir la valeur à 0, l'entrée était NULL dans la base de données.

8
user1809790

Si une case à cocher n'est pas cochée, elle ne sera pas envoyée. Par conséquent, définir sa valeur sur 0 si elle n'est pas cochée ne va pas aider - il retournera toujours NULL.

Il y a deux façons de résoudre ce problème facilement:

1) Supposons qu'une valeur NULL dans les paramètres PHP signifie que la case à cocher n'est pas cochée. Si la case à cocher n'existe pas toujours sur la page, cela pourrait être problématique. En apparence, il y a un nombre variable de cases à cocher, donc cela ne fonctionnera probablement pas.

2) Ajoutez une entrée masquée portant le même nom que la case à cocher avec la valeur 0AVANTla case à cocher. Si la case à cocher est décochée, la valeur du champ masqué sera utilisée. Si elle est cochée, la valeur de la case à cocher sera utilisée.

<input type="hidden" name="checkbox_1" value="0">
<input type="checkbox" name="checkbox_1" value="1">

Remarque: Si vos noms sont sous forme de tableau (c'est-à-dire qu'ils comportent des crochets), cela ne fonctionnera pas, car les champs masqués incrémenteront également le nombre de tableaux.

49
Myles Eftos

CHANGEZ VOTRE SCRIPT COMME CELA. J'ESPÈRE QUE ÇA AIDE.

$(document).ready(function(){
    $('#cb1, #cb2, #cb3, #cb4').click(function(){
        $(this).val(this.checked ? 1 : 0);
    });
});
1
Vijay Sarin

Avec jQuery, vous pouvez utiliser le sélecteur coché pour obtenir l'état d'une case à cocher. Lorsque cette case est cochée, la longueur contient quelque chose de supérieur à 0, par exemple:

$('#id:checked').length

Il n'est donc pas nécessaire de définir la valeur de l'élément checkbox sur 0 ...

0
Christian

Vous pouvez essayer ceci, cela peut vous aider. Supposons que votre formulaire ressemble à ceci: 

<tr>
  <td>Active</td>
  <td><?php echo form_checkbox('active',set_value('active',$student->active),TRUE); ?>  </td>
</tr>

Maintenant, vous configurez votre contrôleur codeigniter comme ceci:

// Set up the form
$rules = $this->student_m->rules;
$this->form_validation->set_rules($rules);

// Process the form
if ($this->form_validation->run() == TRUE) {
   $data = $this->student_m->array_from_post(array(
           'active',
           'name'
   ));

   // checking is checkbox is checked or not
   ($data['active'] == TRUE)?($data['active'] = 1) : ($data['active'] = 0);

   $this->student_m->save($data, $id);
   redirect('admin/student');
}
0
sojib

En effet, si vous avez désélectionné la case à cocher, la valeur est null, car elle n'a pas de valeur. Vérifiez cet exemple de w3cschools: 

http://www.w3schools.com/html/tryit.asp?filename=tryhtml_form_checkbox

Si vous n'avez rien sélectionné, la valeur n'est pas soumise. Mais si vous avez sélectionné quelque chose, sa valeur sera soumise.

Si vous voulez vraiment la valeur vraie/fausse, vous devez la tromper .. donc envoyer l'état de l'attribut coché fera l'affaire.

$('#id:checked').length
0
Arcturus