Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] wczytanie checkboxow po ich id
lnn
post
Post #1





Grupa: Zarejestrowani
Postów: 361
Pomógł: 11
Dołączył: 17.12.2008
Skąd: LU

Ostrzeżenie: (0%)
-----


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 ? (IMG:style_emoticons/default/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 :
(IMG:http://img713.imageshack.us/img713/20/capture20100202223405e.jpg)

(IMG:http://img524.imageshack.us/img524/4554/capture20100202223417.jpg)

Ten post edytował lnn 2.02.2010, 22:54:03
Go to the top of the page
+Quote Post
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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ę (IMG:style_emoticons/default/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ę.
Go to the top of the page
+Quote Post
lnn
post
Post #3





Grupa: Zarejestrowani
Postów: 361
Pomógł: 11
Dołączył: 17.12.2008
Skąd: LU

Ostrzeżenie: (0%)
-----


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ę (IMG:style_emoticons/default/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 :/
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
lnn
post
Post #5





Grupa: Zarejestrowani
Postów: 361
Pomógł: 11
Dołączył: 17.12.2008
Skąd: LU

Ostrzeżenie: (0%)
-----


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 :|

Ten post edytował lnn 3.02.2010, 00:08:54
Go to the top of the page
+Quote Post
Szeszek1992
post
Post #6





Grupa: Zarejestrowani
Postów: 117
Pomógł: 29
Dołączył: 20.05.2009

Ostrzeżenie: (0%)
-----


Masz błąd w 11 linii(powinno być $B a nie $A)(IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
lnn
post
Post #7





Grupa: Zarejestrowani
Postów: 361
Pomógł: 11
Dołączył: 17.12.2008
Skąd: LU

Ostrzeżenie: (0%)
-----


Cytat(Szeszek1992 @ 3.02.2010, 01:08:55 ) *
Masz błąd w 11 linii(powinno być $B a nie $A) (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
Szeszek1992
post
Post #8





Grupa: Zarejestrowani
Postów: 117
Pomógł: 29
Dołączył: 20.05.2009

Ostrzeżenie: (0%)
-----


  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.

Ten post edytował Szeszek1992 3.02.2010, 12:55:52
Go to the top of the page
+Quote Post
skowron-line
post
Post #9





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


@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ą.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 10:59