Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wyświetlanie innego stylu co 2 wiersz
Forum PHP.pl > Forum > Przedszkole
!*!
  1. <?php
  2. while($row = mysql_fetch_array($result))
  3. {
  4. ++$i;
  5. $classs = ($i%2==1) ? "gj1" : "gj2";
  6. echo ''.$classs.'';
  7. echo ''.$classs.'';
  8. if ($row['email'] !== brak) {echo '<div class="'.$classs.'">Email: </div>';}
  9. if ($row['email5'] !== brak) {echo '<div class="'.$classs.'">Email5: </div>';}
  10. }
  11. ?>


Emm może mi ktoś wyjaśnić czemu zmienna $classs jest odczytywana tylko jako "gj1" ? gj1 i gj2 jest w pliku css, gdy wpisze je ręcznie wszytko działa.
Maxik
Chyba raczej $i++ zamiast ++$i
!*!
To akurat nie ma znaczenia, z tego co wyczytałem zalecane jest właśnie zrobienie ++$i. Tak czy inaczej, oba motywy nie działają...
l0ud
To w końcu chcesz, aby divy z email i email5 miały inne klasy, czy te klasy mają się różnić dla poszczególnych par divów?
!*!
Chciałbym aby divy z email i email5 miały inne klasy, jest to potrzebne to zmiennego pokolorowania wyświetlanych wyników.
kaem
Ale na początek może daj cały kod albo wytłiumacz na jakiej zasadzie to ma działać. Bo tak patrząc na ten kawałek kodu nie wiadomo o co kaman. np w obu if'ach wykonujesz przypisanie dla divów tej samej klasy, bo u Ciebie w każdej iteracji pętli while masz tylko jedną zmienną definiująca klase czyli własnie $classs. A może ty chcesz, żeby co drugi wyświtlany rekord te divy miały inny kolor? ;>

Edit: Acha i ustaw przed pętlą while jakąś wartość zmiennej $i, np $i=-1;
!*!
Nie zabardzo wiem po co Ci dały kod,

  1. <?php
  2. while($row = mysql_fetch_array($result))
  3. {
  4. ?>


odczytuje z bazy odpowiednie rekordy

  1. <?php
  2. ++$i;
  3. $classs = ($i%2==1) ? "gj1" : "gj2";
  4. ?>


przydziela zmiennej classs odpowiednią klasę z css, w tym wypadku gj1 lub gj2, i tak ma być co drugi div [czy cokolwiek innego] gdzie będzie dana klasa wyśiwtlana.

  1. <?php
  2. if ($row['email'] !== brak) {echo '<div class="'.$classs.'">Email: </div>';}
  3. if ($row['email5'] !== brak) {echo '<div class="'.$classs.'">Email5: </div>';}
  4. }
  5. ?>


wyświetla dane pobrane z bazy i jest ok, jedyne z czym mam problem to przedzielenie $classs do divów, tak aby zmieniał się co drugi...

czyli:

Kod
gj1
gj2
gj1
gj2
Maxik
!== To operator sprawdzający też typ, daj !=
!*!
ok, tylko co to ma do rzeczy?
kallosz
  1. <?php
  2. if ($row['email'] !== brak) {echo '<div class="'.$classs.'">Email: </div>';}
  3. $i++
  4. if ($row['email5'] !== brak) {echo '<div class="'.$classs.'">Email5: </div>';}
  5. ?>
powinny być na przemian smile.gif
l0ud
Twój kod działa tak:

- pobierasz rekordy z bazy w pętli
- uzyskujesz zmienną $classs (tak swoją drogą dziwna nazwa tongue.gif) z wartością gj1 albo gj2
- zakładamy że oba rekordy nie są równe 'brak' (błąd w kodzie: brak musi być pomiędzy '' albo "") - wyświetlasz divy: z Email i Email5 mające tą samą klasę - bo przecież drukują się przy jednym wywołaniu pętli(!)
- przy kolejnym rekordzie z bazy również wyświetlasz te divy, z tym że z klasą gj2

Czy aby na pewno o to chodziło?
!*!
kallosz - nic nie pomogło

l0ud :

- pobieram rekordy
- wyświetlam je w petli

Kod
if ($row['email'] !== brak)
jeśli email nie jest równy "brak" jest wyświetlane to co w echo... a w echo ma być przydzielona odpowiednia klasa do diva który wyświetla dane z pętli... Nie rozumiem Waszego nie rozumienia biggrin.gif
l0ud
Czego nie rozumiem: w jednej pętli zakładasz, że może wyświetlić się albo nic (brak email albo email5), albo email, albo email5, albo te 2 emaile razem wzięte. No i w jaki sposób chcesz do tego dobrać klasy?
scanner
Cytat(!*! @ 12.07.2008, 18:41:08 ) *
Kod
if ($row['email'] !== brak)
jeśli email nie jest równy "brak" jest wyświetlane to co w echo... a w echo ma być przydzielona odpowiednia klasa do diva który wyświetla dane z pętli... Nie rozumiem Waszego nie rozumienia biggrin.gif


Zacznijmy od tego, że powiedz, czy masz ustawioną stałą o nazwie brak?
Jak nie, to albo ją ustaw, albo wyraz brak wsadź w cudzysłów.

Druga sprawa - jeżeli inkrementujesz/dekrementujesz jakąś zmienną, to najpierw ją zadeklaruj.

Trzecia: machnąłem kod testowy:
  1. <?php
  2. $aRow[] = array( 'email' => 'brak', 'email5' => 'foo@bar' );
  3. $aRow[] = array( 'email' => 'brak', 'email5' => 'foo@bar' );
  4. $aRow[] = array( 'email' => 'brak', 'email5' => 'foo@bar' );
  5. $aRow[] = array( 'email' => 'nie brak', 'email5' => 'brak' );
  6. $aRow[] = array( 'email' => 'brak', 'email5' => 'foo@bar' );
  7. $aRow[] = array( 'email' => 'nie brak', 'email5' => 'brak' );
  8. $aRow[] = array( 'email' => 'brak', 'email5' => 'foo@bar' );
  9.  
  10.  
  11.  
  12. $bClass = true;
  13. foreach( $aRow as $row ){
  14. $sClass = ( $bClass ) ? 'gj1' : 'gj2';
  15. $bClass = !$bClass;
  16. if( $row['email'] !== 'brak' ){
  17. echo '<div class="'.$sClass.'">Email: </div>';
  18. }
  19. if( $row['email5'] !== 'brak' ){
  20. echo '<div class="'.$sClass.'">Email5: </div>';
  21. }
  22. }
  23. ?>


wynik:
  1. <div class="gj1">Email5: </div><div class="gj2">Email5: </div><div class="gj1">Email5: </div><div class="gj2">Email: </div><div class="gj1">Email5: </div><div class="gj2">Email: </div><div class="gj1">Email5: </div>
!*!
  1. <?php
  2. while($row = mysql_fetch_array($result))
  3. {
  4. ++$i;
  5. $classs = ($i%2==1) ? "gj1" : "gj2";
  6.  
  7. if ($row['email'] !== 'brak') {echo '<div class="'.$classs.'">Email: '.$row['email'].' </div>';}
  8. if ($row['telefon'] !== 'brak') {echo '<div class="'.$classs.'">Telefon: '.$row['telefon'].' </div>';}
  9. }
  10. ?>


To skoro tak odczytuje w pętli normalnie dane z bazy, na zasadzie:

jeśli email zwraca brak to się nie wyświetli to co w echo, normalne... i przechodzi do następnego i sprawdza czy telefon to nie "brak" jeśli coś innego to zostaje wyświetlone... [tak wiem, o pozamienianiu 'brak' na '0' ale to nie o tym temat] Jeśli zrobiłbym tak:

  1. <?php
  2. while($row = mysql_fetch_array($result))
  3. {
  4. ++$i;
  5. $classs = ($i%2==1) ? "gj1" : "gj2";
  6.  
  7. echo '<div class="'.$classs.'">Email: '.$row['email'].' </div>'
  8. echo '<div class="'.$classs.'">Telefon: '.$row['telefon'].' </div>'
  9. }
  10. ?>


to działa wszytko dobrze i divy są kolorowane na przemian, odpowiednio przydzierlany class... ale co mi po tym jak nie chcę wyświetlać każdego rekordu jaki jest?
l0ud
Możesz zrobić to tak:

  1. <?php
  2. while($row = mysql_fetch_array($result))
  3. {
  4. if ($row['email'] !== 'brak') {
  5. ++$i;
  6. $classs = ($i%2==1) ? "gj1" : "gj2";
  7. echo '<div class="'.$classs.'">Email: '.$row['email'].' </div>';
  8. }
  9. if ($row['telefon'] !== 'brak') {
  10. ++$i;
  11. $classs = ($i%2==1) ? "gj1" : "gj2";
  12. echo '<div class="'.$classs.'">Telefon: '.$row['telefon'].' </div>';
  13. }
  14. }
  15. ?>
!*!
l0ud - dzięki, działa, tylko... nadal nie rozumiem czemu $i i $class muszą być w każdym if... żeby potem przydzielić się do div... muszę pomyśleć nad optymalizacją tego bo mam wrażenie że nie robię tego dobrze...
l0ud
Pomyśl logicznie: za każdym razem przed wyświetleniem diva potrzebujesz 'unikalnej' klasy. Samo umieszczenie kodu jej generującego w pętli nie wystarczy - może być przecież wyświetlonych w niej kilka pól. Dlatego umieściłem 'regenerowanie' $class wtedy, gdy jest ona potrzebna - przez wyświetleniem diva.
dyniaq
Jeżeli kolorek ma się zmieniać na przemian, to może wystarczy tylko sprawdzić, czy zmienna, której używasz do iteracji wszystkich wyników, jest podzielna przez 2 (parzysta), czy nie. I jeżeli mod($i,2) = 0 to wtedy $class = 'gj1'. Jeżeli nie to gj2.
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.