Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][JavaScript][PHP] Zapisywanie checkboxów
Forum PHP.pl > Forum > Przedszkole
BuzekxD
Witajcie,
mam pewien problem. Zapewne się już z nim spotkaliście, bo widziałem, że jest częsty. Mam problem z zapisywaniem checkboxów do bazy danych, aby po ich zaznaczeniu były one na stałe zaznaczone (najlepiej na wszystkich komputerach jakie się połączą), a nie po odświeżeniu znowu były puste. Jestem kompletnie zielony co do MySQL, w html się bawię i rozumiem(nie tworze) JS. Google używałem. Ten temat pisze po 6 dniach poszukiwań, gdzie znajdowałem niepełne skrypty, pomoce dla innych, albo zupełnie coś odbiegającego od tematu. Nie wiem co jeszcze mogę powiedzieć. Przejdę już do sedna.

Tutaj jest część, która jest wprowadzona w body.
  1. <form name="myform"><table>
  2. <tr><td><input TYPE="checkbox" NAME="atak1" TITLE="Zaznacz wszystkie" VALUE="X" onClick="atak1_elements(true,3)"><a>1</a> <input TYPE="checkbox" NAME="atak2" TITLE="Zaznacz wszystkie" VALUE="X" onClick="atak2_elements(true,3)"><a>2</a></td><td colspan="3"><center><a>Zaznacz wszystko</a></center></td></tr>
  3. <tr><td><input TYPE="checkbox" NAME="atak1" TITLE="Odznacz wszystkie" VALUE="O" onClick="atak1_elements(false,3)"><a>1</a> <input TYPE="checkbox" NAME="atak2" TITLE="Odznacz wszystkie" VALUE="O" onClick="atak2_elements(false,3)"><a>2</a></td><td colspan="3"><center><a>Odznacz wszystko</a></center></td></tr>
  4. <tr><td><input type="checkbox" name="atak1" value="1">1 <input type="checkbox" name="atak2" value="1">2</td></tr>
  5. <tr><td><input type="checkbox" name="atak1" value="1">1 <input type="checkbox" name="atak2" value="1">2</td></tr>
  6. <tr><td><input type="checkbox" name="atak1" value="1">1 <input type="checkbox" name="atak2" value="1">2</td></tr>
  7. </table></form>


Działają jeszcze tutaj 2 identyczne skrypty od zaznaczania i odznaczania wszystkiego (publiczne, nie mojego autorstwa):
[JAVASCRIPT] pobierz, plaintext
  1. function atak1_elements(is_checked, checkboxs_count){
  2. for ( i=0 ; i < checkboxs_count + 99 ; i++ ){
  3. if (is_checked){
  4. document.forms[0].atak1[i].checked=true;
  5. }
  6. else{
  7. document.forms[0].atak1[i].checked=false;
  8. }
  9. }
  10. }
[JAVASCRIPT] pobierz, plaintext

[JAVASCRIPT] pobierz, plaintext
  1. function atak2_elements(is_checked, checkboxs_count){
  2. for ( i=0 ; i < checkboxs_count + 99 ; i++ ){
  3. if (is_checked){
  4. document.forms[0].atak2[i].checked=true;
  5. }
  6. else{
  7. document.forms[0].atak2[i].checked=false;
  8. }
  9. }
  10. }
  11.  
[JAVASCRIPT] pobierz, plaintext


Nie mam bladego pojęcia, jak to zrobić, szukanie nic nie dało, dlatego proszę was o pomoc.

Z góry dzięki.
morthan
Piszę z głowy więc kod będzie do sprawdzenia.

  1. <input class='element0' TYPE="checkbox" NAME="atak2[0]" TITLE="Zaznacz wszystkie" VALUE="1" >
  2. <input class='element1' TYPE="checkbox" NAME="atak2[1]" TITLE="Zaznacz wszystkie" VALUE="1" >
  3. <input class='element2' TYPE="checkbox" NAME="atak2[2]" TITLE="Zaznacz wszystkie" VALUE="1" >
  4. <input class='element3' TYPE="checkbox" NAME="atak2[3]" TITLE="Zaznacz wszystkie" VALUE="1" >
  5. <input class='element4' TYPE="checkbox" NAME="atak2[4]" TITLE="Zaznacz wszystkie" VALUE="1" >
  6. <input class='element5' TYPE="checkbox" NAME="atak2[5]" TITLE="Zaznacz wszystkie" VALUE="1" >


Dla zapisu.

  1. foreach($_POST['atak2'] AS $key => $value){
  2. // jakaś tam obsługa typu:
  3. if($key === 2 ){
  4. // zapis do bazy jakiejś wartości
  5. }
  6. }


Dla odczytu (zakładam że dane masz tyciągnięte z bazy w array)

  1. foreach($slownik AS $key => $value){
  2. echo '<input TYPE="checkbox" NAME="atak2['.$key.']" TITLE="Zaznacz wszystkie" VALUE="'.$value.'"';
  3. if($zapisaneDane[$key])
  4. echo ' checked="checked" ';
  5. echo ' >';
  6. }


albo:

  1. <script type="">
  2. $(document).ready(function(){
  3. var table = new Array();
  4. <?php
  5. foreach($zapisaneDane AS $key => $value){
  6. echo "table[$key] = $value";
  7. }
  8. echo "var max = count($zapisaneDane )";
  9. ?>
  10. for (var i=0; i<max; i++)
  11. {
  12. $('input.element'+i).prop('checed',true);
  13. }
  14. });


Coś w ten deseń.
Dla js loop polecam zernąć tu:
  1. <a href="http://stackoverflow.com/questions/9329446/for-each-in-a-array-how-to-do-that-in-javascript" target="_blank">http://stackoverflow.com/questions/9329446...t-in-javascript</a>
BuzekxD
Jeśli dobrze rozumiem, to albo tamte 2 kody php, albo ten jeden html. Ani tak ani tak nie działa, przy php bez roznicy, a w html wywala blad, ze nie czyta "<".
Dodam, że nie mam pojęcia jak skonfigurować MySQL(jak pisałem, jeszcze się z tym nie spotkałem), może jakaś tabela, czy coś tego typu.
Na chwile obecną starcza mi serwer w domu na osobnym PC z użyciem programu Webserv. Do bazy loguje się z użyciem phpMyAdmin.
Dopiero teraz zauważyłem, że ten skrypt do zaznaczania, wywala jakiś błąd, choć działa... Jednak nie zmienia to faktu, że to wyżej nie działa/coś źle robię, ponieważ testowałem to bez tego skryptu.

Nadal poszukuje pomocy ;/
gitbejbe
Zapisujesz do bazy danych jakieś wartości tych checkboxów. Powiedźmy, że jesli checkbox jest zaznaczony to w bazie danych posiada wartość "1".
Przy włączeniu strony pobierasz najpierw z bazy danych wartości tych checkboxów i sprawdzasz, które mają wartość "1". Możesz to zrobić w warunku

  1. if($row['jakis_checkbox_z_bazy']) == 1)
  2. {
  3. echo '<input type="checkbox" name="nazwa" checked>'.
  4. }

to tak na szybko. Najwygodniej byłoby oczywiście walnąc to w pętle z odpowiednimi warunkami
BuzekxD
No tak, ale mam zrobić jakaś tabel, cokolwiek? Zapewne tak, a ja nawet nie wiem jak ;/
A uwzględniłeś może, że u mnie działa skrypt, który operuje checkboxami z taka sama nazwa, bo z tego co zgaduje musi być inna a wtedy to nie działa ;/
gitbejbe
no to kolega @morthan pięknie przedstawił Tobie rozwiązanie.

Może prościej byłoby Ci coś poradzić, gdybyś napisać co w ogóle chcesz osiągnąć. Do czego ma być ten formularz ? co chcesz za jego pomocą zrobić ? To, że checkboxy mają być zaznaczone to już wiemy...
BuzekxD
Mam 2 kolumny checkboxow (w tabeli). Używając 2 skryptów (podanych w temacie), zaznaczam je i odznaczam wszystkie (czyli tak jakby zaznacz wszystko w emailu). Chciałbym, aby po odświeżeniu strony, checbkoxy sie nie resetowały i opcjonalnie były takie same na wszystkich innych komputerach, ale powtarzam, że to opcjonalnie.

//edit
Mówisz, że przedstawił pięknie, mógłbyś mi połączyć to co on zrobił (bo mi nie działa jak robię) a ja to potem przekleję z head do head, z body do body i to co do bazy to do bazy.

sprawdziłem juz pare razy...
wywala błąd tu:
foreach($slownik AS $key => $value){
i tu:
foreach($_POST['atak2'] AS $key => $value){
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-2025 Invision Power Services, Inc.