Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pętla i checkbox
Forum PHP.pl > Forum > Przedszkole
Code46
Witam!

Piszę skrypt, który pobiera z bazy dane o pracownikach i wypisuje je pod sobą na zasadznie:

imie nazwisko logi
imie2 nazwisko2 logi2

a obok tych danych wstwia pola checkbox. Chcę zrobić możliwość kasowania kilku danych naraz. Na polach typu radio poradziłem sobie. To był taki kawałek kodu:
  1. <?php
  2.  
  3.  
  4. while ($query_data = mysql_fetch_row($result))
  5. {
  6. $Licznik++;
  7. echo &#092;"<td width='27%'>\".$query_data[2].\"<br></td>\";
  8. echo &#092;"<td width='39%'>\".$query_data[3].\"<br></td>\";
  9. echo &#092;"<td width='28%'>\".$query_data[1].\"<br></td>\";
  10. echo &#092;"<td width='6%'><input type='ratio' name='KogoSkasowac value='\".$query_data[0].\"'/><br></td>\";
  11. if ($Licznik < $IluPracownikow) echo &#092;"</tr><tr>\";
  12. } 
  13. ?>

A w skrypcie który miał kasować z bazy odwoływałem się do tych wartości poprzez $_POST[KogoSkasowac] i było ok. Ale jak przerobię to na checkboxa to trzebaby wartość pola name dawać inną. I tu pojawia się problem - nie wiadomo ile ich będzie. Może być 5 a może i 155. Dlatego tenh kawałek zapisałem tak:
  1. <?php
  2.  
  3. (...)
  4. echo &#092;"<td width='6%'><input type='checkbox' name='KogoSkasowac[$Licznik]' value='\".$query_data[0].\"'/><br></td>\"; 
  5. ?>

Problem, że nie wiem jak tą zmienną odczytać w drugim skrypcie. Próbowałem przez:
  1. <?php
  2. for ($i=1; $i<5; $i++)
  3. {
  4. echo &#092;"Kasujemy: \".$_POST[KogoSkasowac[$i]].\" ...<br>\";
  5. } 
  6. ?>

Ale to nic nie wypisuje. Jak ten problem rozwiązać?
strife
Witam,

Spróbuj tak, zmień:

  1. <?php
  2.  
  3. echo &#092;"<td width='6%'><input type='checkbox' name='KogoSkasowac[$Licznik]' value='\".$query_data[0].\"'/><br></td>\";
  4.  
  5. ?>


na ...
  1. <?php
  2.  
  3. echo &#092;"<td width='6%'><input type='checkbox' name='KogoSkasowac[]' value='\".$query_data[0].\"'/><br></td>\";
  4.  
  5. ?>

Następnie odczytujesz to tak jak z tablicy czyli:
  1. <?php
  2.  
  3. foreach($_POST['KogoSkasowac'] as $s)
  4. {
  5.  
  6.  echo &#092;"Kasujemy: \".$s.\" ...<br>\";
  7.  
  8. }
  9.  
  10. ?>


Pozdrawiam! smile.gif
Code46
Dziękuje. Działa smile.gif

Jeśli ustawię zmienną w ten sposób: KogoKasujemy[] to tablica numerowana jest od 0?
A za odpowiedzialne jest foreach?

Pozdrawiam
strife
Cytat(Code46 @ 2005-04-13 21:30:51)
Dziękuje. Działa smile.gif

Jeśli ustawię zmienną w ten sposób: KogoKasujemy[] to tablica numerowana jest od 0?
A za odpowiedzialne jest foreach?

Pozdrawiam

Tak wtedy tablica jest numerowana od 0. foreach jest odpowiedzialne za przegladanie zawartosci tablic w petli, w tym przypadku własnie tej. Dokładniej => http://pl.php.net/manual/pl/control-structures.foreach.php

Pozdro!
Code46
A dlaczego mój sposób nie działał i był zły?
Code46
Dowiedziałem się że zamiast funkcji foreach można odwołać się przez coś takiego:
  1. <?php
  2. $_POST[KogoSkasowac][$i]
  3. ?>
i działa tylko nie potrafię zrozumieć dlaczego nie przez
  1. <?php
  2. $_POST[KogoSkasowac[$i]]
  3. ?>
? Jeśli ktoś potrafi to wytłumaczyć to będę wdzięczny. Ten zapis jest dla mnie bez sensu ale działa. Proszę wytłumaczcie mi to
strife
Cytat(Code46 @ 2005-04-14 16:31:40)
Dowiedziałem się że zamiast funkcji foreach można odwołać się przez coś takiego:
  1. <?php
  2. $_POST[KogoSkasowac][$i]
  3. ?>
i działa tylko nie potrafię zrozumieć dlaczego nie przez
  1. <?php
  2. $_POST[KogoSkasowac[$i]]
  3. ?>
? Jeśli ktoś potrafi to wytłumaczyć to będę wdzięczny. Ten zapis jest dla mnie bez sensu ale działa. Proszę wytłumaczcie mi to

Ponieważ w tym przypadku tablicy wielowymiarowej odwołujesz się to przykład:

  1. <?php
  2.  
  3. $array = array(array('jeden', 'dwa'),
  4.  array('trzy', 'cztery'),
  5.  array('piec', 'szesc'));
  6.  
  7. echo $array[0][1];
  8.  
  9. ?>


Pozdrawiam!
Code46
Ale ja pisałem tak $KogoSkasujemy[$i] czyli tworzyłem tablicę jednowymiarową a nie dwuwymiarową
strife
Cytat(Code46 @ 2005-04-14 17:21:16)
Ale ja pisałem tak $KogoSkasujemy[$i] czyli tworzyłem tablicę jednowymiarową a nie dwuwymiarową

Ale zauważ że potem te dane odbierałes poprzez tablicę $_POST... więc została utworzona można powiedzieć tablica w tablicy... dlatego odwołujesz się

  1. <?php
  2.  
  3. $_POST['test'][0];
  4.  
  5. ?>


http://pl.php.net/manual/pl/language.variables.external.php

Pisałes $KogoSkasujemy[$i], ale zmianna $i domyslnie zawsze mialo wartosc 0, wiec przy petli nie zostaly w niej zapisane wszystkie elementy, dlatego optymalnym rozwiazaniem jest $KogoSkasujemy[], wtedy zostaje utorzona tablica z elementami:
  1. <?php
  2.  
  3. $KogoSkasujemy[0];
  4. $KogoSkasujemy[1];
  5. $KogoSkasujemy[2];
  6. $KogoSkasujemy[3];
  7. // ... itd.
  8.  
  9. ?>

następnie musisz to odebrać przez $_POST, a własnie to jest tablicą... sprawdź poprzez var_dump" title="Zobacz w manualu PHP" target="_manual albo print_r" title="Zobacz w manualu PHP" target="_manual co dokłądnie zawiera ta tablica $_POST po odebraniu to zobaczysz czemu jest tak.

Pozdrawiam! smile.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-2025 Invision Power Services, Inc.