Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] wczytanie checkboxow po ich id
Forum PHP.pl > Forum > Przedszkole
lnn
Sytuacja wygląda następująco, zapisuje checboxy w następujący sposob (wynik to liczby ktore sa identyfikatorami i sa wyodrebnione z nazwy checkboxa)
wczytanie w petli checkboxow:
  1. // pobranie listy opcji udogodnien
  2. $udogodnienia_p_db = mysql_query("SELECT * FROM udogodnienia WHERE id % 2 = 0 ORDER BY wartosc");
  3. $udogodnienia_n_db = mysql_query("SELECT * FROM udogodnienia WHERE id % 2 = 1 ORDER BY wartosc");
  4.  
  5. // wywolanie formularza
  6. echo '<div class="podzial_cb">';
  7. while ($pokaz = mysql_fetch_array($udogodnienia_n_db))
  8. {
  9. echo '<input type="checkbox" name="chk-'.$pokaz['id'].'" />
  10. <label class="checkbox" for="chk-'.$pokaz['id'].'">'.$pokaz['wartosc'].'</label><br />';
  11. }
  12. echo '</div><div class="podzial_cb">';
  13. while ($pokaz = mysql_fetch_array($udogodnienia_p_db))
  14. {
  15. echo '<input type="checkbox" name="chk-'.$pokaz['id'].'" />
  16. <label class="checkbox" for="chk-'.$pokaz['id'].'">'.$pokaz['wartosc'].'</label><br />';
  17. }
  18. echo '</div>';


zapis ich:
  1. // zapis checkboxow
  2. $selected = $etap_4;
  3.  
  4. foreach($selected as $k =>$v) {
  5. if(preg_match("/chk-/",$k) != 0) {
  6. $temp = explode("chk-",$k);
  7. $selected[]=$temp[1];
  8. }
  9. }
  10.  
  11. $selected=array_filter($selected, 'is_numeric');
  12.  
  13. $saveme = "";
  14. if(count($selected) != 0) {
  15. foreach($selected as $h) {
  16. $saveme.=$h.",";
  17. }
  18. }
  19. if(strlen($saveme) != 0) {
  20. // usuwamy ostatni przecinek dla porządku:
  21. $saveme = substr($saveme, 0, strlen($saveme)-1);
  22. }
  23.  
  24. if (mysql_query("INSERT INTO `dane4` SET wartosci = '".$saveme."',
  25. user_id4 = '".$_SESSION['id']."',
  26. spis_id = '".$last_insert."' ")==true) {
  27. echo 'dodano checkboxy'; } else { echo 'nie dodano';}


teraz pobieram dane z bazy i mam do dyspozycji tablice z ich numerami np "11,14,25,..." w zmiennej $show['wartosci']

i pytanie, jak spowrotem pooznaczac te checkboxy ktore byly zaznaczone ? sadsmiley02.gif
dajmy na to ze je spwrotem exploduje i co dalej? :/
  1. foreach(explode(",",$show['wartosci']) as $v) {
  2. $resaveme[]=$v;
  3. }
  4.  
  5. // i tu mi zwraca spowrotem te numery, tylko co z nimi zrobic?
  6. foreach ($resaveme as $cos) {
  7. echo $cos.'<br />';
  8. }


jesli to cos da to screenshoty tabel :


skowron-line
Powiem tak: O ja pierd***
Wiesz że można jednym zapytaniem pobrać wszystkie rekordy i zrobić 2 pętle while z warunkiem zamiast 2 razy pytać bazę questionmark.gif

Jeżeli już tak zapisujesz zaznaczone checkboxy to niech to wygląda tak
,2,3,4,5, bo później będziesz miał problem z przeszukiwaniem kto zaznaczył jaki checkbox.

Znasz taką funkcję jak explode a wiesz że implode ( join ) są jego przeciwnościami
więc twoje pętle
  1. $save = $h .',';

można zastąpic
  1. join( ',', $save ); <==== tablica


Ten preg_match to też lekka przesada.

I zamiast wyświetlać
w taki sposób
  1. <input type="checkbox" name="chk-'. $wartosc[id] .'">

daj
[php]<input type="checkbox" name="chk['.$wartosc[id] .'">[php]
Jak wyświetlisz sobie print_r( $_POST ) to zobaczysz że tylko zaznaczone checkboxy przeszły i sprawdzanie będzie zbędne.
Wtedy join jak najbardziej Ci się przyda.

A co do sprawdzania które były checkboxy zaznaczone to możesz zrobić sobie tak

- pobierasz wszystkie wartosci id
- robisz explode po przecinku
- przy wyświetlaniu checkboxów sprawdzasz czy dane id znajduje się w tablicy którą wcześniej stworzyłeś
in_array i jeżeli jest to zaznaczasz.

Troche pomieszałem no ale myśle że dasz radę.
lnn
Cytat(skowron-line @ 2.02.2010, 23:09:08 ) *
Powiem tak: O ja pierd***
Wiesz że można jednym zapytaniem pobrać wszystkie rekordy i zrobić 2 pętle while z warunkiem zamiast 2 razy pytać bazę questionmark.gif

w jaki sposob??

niezly hardkor ten tutorial co napisales ;| nie wiem czy nie zrezygnowac z edycji tego.. no nic bede probowal :/ :/ ale chyba na dzis to juz za ciezkie na moj mozg :/
skowron-line
Wybacz też już trochę zmęczony jestem.
  1. $query = mysql_query(''); // wiadomo zapytanie
  2. while( $A = mysql_fetch_array($query))
  3. {
  4. if( $A[ 'id' ] % 2 == 0 ){ echo ''; }
  5. }
  6.  
  7. while( $B = mysql_fetch_array($query))
  8. {
  9. if( $A['id' ] % 2 == 1 ){ echo ''; }
  10. }
lnn
mam tak i mi pokazuje tylko parzyste ? ;/
  1. $query = mysql_query("SELECT * FROM udogodnienia ORDER BY wartosc");
  2.  
  3.  
  4. while( $A = mysql_fetch_array($query))
  5. {
  6. if( $A[ 'id' ] % 2 == 0 ){ echo 'parzyste<br />'; }
  7. }
  8.  
  9. while( $B = mysql_fetch_array($query))
  10. {
  11. if( $A['id' ] % 2 == 1 ){ echo 'nieparzyste<br />'; }
  12. }


dziwna sprawa :| wykonuje mi sie ta petla ktora jako pierwsza wpisze :|
Szeszek1992
Masz błąd w 11 linii(powinno być $B a nie $A)winksmiley.jpg
lnn
Cytat(Szeszek1992 @ 3.02.2010, 01:08:55 ) *
Masz błąd w 11 linii(powinno być $B a nie $A) winksmiley.jpg

probowalem na wszystkie sposoby, nawet to co Ty mowisz ze jest jako blad jak zmienilem (bo tez to zauwazylem) to nie wykonuje mi sie ta petla
Szeszek1992
  1. $query = mysql_query("SELECT * FROM udogodnienia ORDER BY wartosc");
  2.  
  3. $T=array();
  4. while( $A = mysql_fetch_array($query))
  5. {
  6. $T[]=$A;
  7. }
  8.  
  9. foreach( $T as $key)
  10. {
  11. if( $key['id' ] % 2 == 1 ){ echo 'nieparzyste<br />'; }
  12. }
  13.  
  14. foreach( $T as $key)
  15. {
  16. if( $key['id' ] % 2 == 0 ){ echo 'parzyste<br />'; }
  17. }

A coś w tym stylu działa?


PS. Druga pętla nie działała, bo pierwsza pętla wykorzystała już wszystko, co zwróciło mysql_query.
mysql_fetch_array() Returns an array of strings that corresponds to the fetched row, or FALSE if there are no more rows.
skowron-line
@Inn przepraszam wprowadziłem Cię w błąd rzeczywiście nie da się tych 2 pętli zrobić z jednego mysql_query
wczoraj wydawało mi się że tak robiłem w skrypcie ale okazało się ze miałem jedno zapytanie ale 2 razy mysql_query użyłem przed pętlą.
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.