Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wysylanie wartosci pola checkbox do bazy danych [jquery, ajax]
Forum PHP.pl > Forum > Przedszkole
janeiro
Mam taki oto kod. Dane przechowywane sa w kolumnie book_active, ktora przyjmuje wartosci N lub Y.
Niestety obecnie jak zostawiam niezaznaczony checkbox, wysylana jest wartosc "NULL".
Gdy zaznacze checkboxa, wysylana jest pusta wartosc.
Nie rozumiem o co kaman i jak to rozwiazac w kodzie ponizej.
CODE
<input name="book_active" id="book_active" type="hidden" value="N">
<input name="book_active" id="book_active" type="checkbox" role="switch" class="form-check-input" value="Y">
<script>
function edit_book(id) {
save_method = 'update';
$('#form')[0].reset(); // reset form on modals
$.ajax({ //Load data from ajax
url: "<?php echo site_url('book/ajax_edit/') ?>" + id,
type: "GET",
dataType: "JSON",
success: function(data) {
$('[name="book_active"]').val(data.book_active);
//zaznaczenie checkboxa jesli book_active=Y
if (data.book_active == 'Y') {
$('#book_active').prop('checked', data.book_active == 'Y'); //.prop (name, value)
}
},
error: function(jqXHR, textStatus, errorThrown) {
alert('Error get data from ajax');
}
})
}
</script>
nospor
Ale co to ma do PHP? Przenosze.

Dwa pola o tym samym ID, toz tak nie mozna,
po co w ogole ci te pola HIDDEN? Sam checkbox wystarczy
Zas wartosci checkbox to powinny byc 0/1 a nie zadne Y/N
janeiro
Po co dwa pola o tym samym ID? Podobno dlatego This way you don't have to keep track of which values in the posted data were expected to come from checkboxes.

Wartości checkbox wynoszą "N" lub "Y" poniewaz takie akceptuje kolumna w tabeli bazy danych.

Formularz powinien dzialac w ten sposob:
1.Klikam w checkbox = dodaje wartosc "Y" do bazy
2.Nie klikam = dodaje wartosc "N"

To pole sluzy do wł/wył wyświetlania ksiązki.
nospor
Ja wiem po co to jest, ale tobie tutaj to jest do niczego nie potrzebne. Rzeczy z nety trzeba brac wiedzac co sie bierze a nie na chybil trafil
Po za tym, tam w przykaldach nie maja HIDDEN i Checkbox z tym samym ID tongue.gif

Podusmowujac: wywal te HIDDEN, jest ci nie potrzebne


Kolejna rzecz: co z tego ze wbazie masz Y/N? A w html ma byc 1/0. Nie wspominajac o tym ze w bazie tez powinno byc 1/0. A juz nie wspominaja o tym, ze nie ma znaczenia co jest w checkbox, bo ty i tak sprawdzasz tylko fakt czy jest zaznaczony a nie jaka wartosc ma

przy zalozenie ze wywalisz to nieszczesne HIDDEN to pobranie wartosci 1/0 to:

$("#book_active :checked") ? 1 : 0;

I juz
janeiro
Wywalilem pole hidden. Wysmarzyłem coś takiego, ale wysyla teraz tylko wartosc "N" jak zaznacze. Jak nie zaznacze, wysyla NULL.

CODE
if ($('[name=book_active]').prop("checked") == true) {
$('[name="book_active"]').attr('value', 'Y');
} else {
$('[name="book_active"]').attr('value', 'N');
}
nospor
ja tu czegos nie rozumiem.
Ty uzywasz AJAX zeby zaladowac form, a potem form wysylasz normalnie postem czy tez ajaxem? Czy ja zle widze i ajax z kodu sluzy ci w ogole czemu innemu?
janeiro
Uzywam codeigniter. Mam kontroler Book, przesylam dane z modelu w formacie json.
Mam tabelke z wpisami. Klikam edytuj, wyswietla sie Modal.
Uzywam jednego formularza do edycji i dodawania nowego wpisu.
Kod ktory wyslalem to tylko fragment i jedna funkcja do edycji wpisu, ale pewnie o tym wiesz.
nospor
Skoro wyswietla sie modal, to rozumiem do zapisu tez uzywasz AJAX?
janeiro
Tak, ale nie moge wyslac tutaj calosci kodu bo wyrzuca blad ze post jest zbyt dlugi. Zrobie to tutaj:
Codepen
Chcialem wykonac template CRUD dla siebie ze wszystkimi operacjami na wpisach i teraz dodaje drobnostki. Ucze sie dopiero.

To jest tylko widok. Jeszcze jest model i kontroler.
nospor
dobra, widze zxe uzywasz form serialize. W takim razie dodaj to nieszczesne hidden, ale z glowa tym razem czyli:

<input name="book_active" type="hidden" value="N">
<input name="book_active" id="book_active" type="checkbox" role="switch" class="form-check-input" value="Y">

a potem tam gdzie ustawiasz checkbox po wgraniu danych to masz tylko go znaznaczyc i tylko tyle,

if (data.book_active == 'Y') { //check the checkbox
$('#book_active').prop('checked', true);
} else {
$('#book_active').prop('checked', false);
}


A to
$('[name="book_active"]').val(data.book_active);
jest zbedne

tak samo jakto
if ($('[name=book_active]').prop("checked") == true) {
$('[name="book_active"]').attr('value', 'Y');
} else {
$('[name="book_active"]').attr('value', 'N');
}

Ma byc tylko to co ci podalem, nic wiecej odnosnie cehckbox/hidden nie potrzebujesz
janeiro
Teraz działa. Jak postawic Ci piwko albo kawke?
nospor
Nie trzeba. najwazniejsze ze dziala smile.gif

Jesli chcesz sprawic mi przejemnosc, to wywal te Y/N z bazy, zrob z tego pole TINYINT i wstawiaj tam 1/0 wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.