Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Porównywanie wartości kolumn o podanych nazwach zmiennych w przypadku kiedy kolumny nie są ułożone obok siebie w poziomie.
Forum PHP.pl > Forum > Przedszkole
wojteke
Witam!

Nie rozumiem czemu nie mogę porównać wartości wierszy kolumn o podanych nazwach zmiennych w przypadku kiedy kolumny nie są ułożone obok siebie w poziomie, tylko jedna na drugiej lub w osobnych tabelach.

Przykład:
(tabela z dwiema kolumnami, które są ułożone obok siebie)
Kod
   $kolumna_1[0]      $kolumna_1[1]


w takim układzie działa taka funkcja:

  1. <?php
  2. IF ($kolumna_1[0] == $kolumna_1[1]) $zmienna = styl_css_1; else $zmienna  = styl_css_2;
  3. ?>


ale jeżeli mam np taki zestaw kolumn:

(tabela z dwiema kolumnami, które są ułożone jedna na drugą)
Kod
   $kolumna_1[0]
   $kolumna_2[0]


w takim układzie kolumn nie działa taka funkcja (zawsze jest FALSE):

  1. <?php
  2. IF ($kolumna_1[0] == $kolumna_2[0]) $zmienna = styl_css_1; else $zmienna  = styl_css_2;
  3. ?>


Wygląda to tak jakby php nie pamiętało o tym, że wyżej była taka kolumna o zmiennej $kolumna_1[0]. sadsmiley02.gif

Przedstawię mój kod, bo może mam jakiś błąd.

  1. <?php
  2. echo '<table id="large">';
  3.  
  4. while ($kolumna2 = mysql_fetch_row($idzapytania))
  5.  
  6. {
  7.  
  8. '<tr class="'.$color.'">
  9.       <td>'. $kolumna2[0] .'</td>
  10.       <td>'. $kolumna2[1] .'</td>
  11.       <td>'. $kolumna2[2] .'</td>
  12.       <td>'. $kolumna2[3] .'</td>
  13. </tr>'
  14. ;
  15. }
  16.  
  17.  
  18.  
  19.  
  20. $zapytanie =
  21.  
  22.    "SELECT
  23.        '',
  24.        lp ,
  25.        DATE_FORMAT(data, '%m.%d'),
  26.        TO_DAYS(data) - TO_DAYS(NOW())    +7
  27.    FROM terminarz";
  28.  
  29. $idzapytania = mysql_query($zapytanie);
  30. while ($kolumna = mysql_fetch_row($idzapytania))
  31. {
  32.    
  33.    
  34.    
  35.    
  36.    
  37.    
  38.    
  39.    
  40.    
  41.    
  42.    
  43.    // nadanie stylu CSS dla wierszy //
  44.    
  45.    // ponizszy IF dziala!!! w kolumnach $kolumna[1] i $kolumna[3] są w pewnych wierszach takie same wartości
  46.    // i w tych wierszach przypisywany jest styl CSS "strzalka", bo $kolumna[1] == $kolumna[3] i tutaj wszystko jest OK!
  47.    
  48.    IF ($kolumna[1] == $kolumna[3]) $strzala = strzalka; else $strzala = puste;    
  49.  
  50.    // poniższy IF NIE dziala!!! pomimo, że w kolumnach $kolumna2[0] i $kolumna[1] w pewnych wierszach są takie same wartości, to
  51.    // w tych danych wierszach nie przypisywany jest styl CSS. Dlaczego?
  52.  
  53.    IF ($kolumna2[0] == $kolumna[1]) $strzala = strzalka; else $strzala = puste;
  54.    
  55.    // wyglada to tak, jakby php nie pamiętało o tym, że wcześniej była taka kolumna jak $kolumna2[0]
  56.    // czemu tak się dzieje?questionmark.gif :(
  57.    
  58.    
  59.    
  60.    
  61.    
  62.    
  63.    
  64.    
  65.  
  66.    
  67.  
  68. '
  69.    <tr class="'. $color .'">
  70.        <th class="'. $strzala .'">'. $kolumna[0] .'</th>
  71.        <td>'. $kolumna[1] .'</td>
  72.        <td>'. $kolumna[2] .'</td>
  73.        <td>'. $kolumna[3] .'</td>
  74.    </tr>
  75. '
  76. ;
  77. }
  78.  
  79. '</table>';
  80. ?>


Też nie ma znaczenia czy kolumny, które są ułożone jedna na drugiej są razem w tabeli czy w oddzielnych tabelach - zawsze nie można się w jednej kolumnie odwołać do wartości kolumny, która jest "wyżej/niżej".

Pozdrawiam!
Quider
ale zagmatwałes..
Czy tobie chodzi o tablice wielowymiarowe?
wojteke
Raczej nie. Mam jedną tablicę i drugą tablicę. Obie mają kolumny o pewnych nazwach, np.

$kolumna_1[0]

$kolumna_2[0]

W tych kolumnach są pewne wartości i chciałbym by w którejś z tych tabel dać taki warunek:

  1. <?php
  2. IF ($kolumna_1[0] == $kolumna_2[0]) $zmienna = styl_css_1; else $zmienna  = styl_css_2;
  3. ?>


Czyli w wierszach danej tabeli, jeśli w obu kolumnach są takie same wartości, to instrukcja IF zwróci TRUE i zostanie, np. dodany dany styl CSS dla tych wierszy. Funkcja działa ale tylko dla kolumn ułożonych obok siebie, a nie jedna na drugiej albo kolumn z różnych tablic. sciana.gif
JoShiMa
Ale co to znaczy dla kolumn ułożonych obok siebie blinksmiley.gif

Pierwsza pętla powoduje, że w tablicy $kolumna2 zapamiętany jest tylko sotatni rekord pobrany z bazy więc może dlatego Ci te warunki nie działają.
wojteke
Cytat(JoShiMa @ 6.08.2009, 01:16:32 ) *
Ale co to znaczy dla kolumn ułożonych obok siebie



Cytat(JoShiMa @ 6.08.2009, 01:16:32 ) *
Pierwsza pętla powoduje, że w tablicy $kolumna2 zapamiętany jest tylko sotatni rekord pobrany z bazy więc może dlatego Ci te warunki nie działają.

Może i tak ale co mam zrobić by ten warunek działał? guitar.gif
ayeo
Witam!

Tu nie chodzi o warunek tylko o to co masz w tych zmiennych tongue.gif Skąd Ci się bierze zmienna (tablica) $kolumna2 ? Przecież iterujesz po wszystkich wynikach i nadpisujesz sobie te dane!

Pozdrawiam!
wojteke
Zrobiłem teraz tak:



Czyli przyrównuję wartości dwóch tablic, z tym, że pierwsza tabelka ma tylko jedną komórkę. Jeszcze raz przedstawię kod ale z var_dump'ami.


  1. <?php
  2. $zapytanie_2 =
  3.  
  4.    "SELECT
  5.        MIN(TO_DAYS(data) - TO_DAYS(NOW()))
  6.    FROM terminarz WHERE TO_DAYS(data) - TO_DAYS(NOW()) >= 0";
  7.  
  8. $idzapytania_2 = mysql_query($zapytanie_2);
  9. while ($kolumna_2 = mysql_fetch_row($idzapytania_2))
  10. {
  11. var_dump($kolumna_2);
  12.  
  13. '
  14.    <tr>
  15.        <td>'. $kolumna_2[0] .'</td>
  16.    </tr>
  17. '
  18. ;
  19. }
  20. ?>


var_dump($kolumna_2);
Kod
array(1) { [0]=> string(1) "2" }



  1. <?php
  2. $zapytanie =
  3.  
  4.    "SELECT
  5.        '',
  6.        TO_DAYS(data) - TO_DAYS(NOW())
  7.    FROM terminarz";
  8.  
  9. $idzapytania = mysql_query($zapytanie);
  10. while ($kolumna = mysql_fetch_row($idzapytania))
  11. {
  12.        
  13.    // $strzala
  14.  
  15.    IF ($kolumna_2[0] == $kolumna[1]) $strzala = strzalka; else $strzala = puste;
  16.    
  17.    
  18. echo  var_dump($kolumna_2) . var_dump($strzala) . var_dump($kolumna). '<br>';    
  19.  
  20.  
  21. '
  22.    <tr class="'. $color .'">
  23.        <th class="'. $strzala .'">'. $kolumna[0] .'</th>
  24.        <td>'. $kolumna[1] .'</td>
  25.    </tr>
  26. '
  27. ;
  28. }
  29. ?>


echo var_dump($kolumna_2) . var_dump($strzala) . var_dump($kolumna). '< br>';
Kod
bool(false) string(5) "puste" array(2) { [0]=> string(0) "" [1]=> string(2) "-6" }
bool(false) string(5) "puste" array(2) { [0]=> string(0) "" [1]=> string(1) "2" }
bool(false) string(5) "puste" array(2) { [0]=> string(0) "" [1]=> string(1) "3" }



Powyższy kod przyrównuje ($kolumna_2[0] == $kolumna[1]) i instrukcja IF nie zwraca TRUE, a powinno, bo w obu tablicach jest "2" w kolumnach: $kolumna_2[0] i $kolumna[1].

Poniżej przedstawię kod który porównuje stałą zmienną $kolumna_stala_zmienna[numerek] = 2; z tabeli i wtedy instrukcja IF zwraca TRUE:


Wszystko co napisałem poniżej jest tylko po to by pokazać, że skrypt przydziela styl CSS, jeśli porównuję:
($kolumna_stala_zmienna[numerek] == $kolumna[1])
czyli stałą zmienną z danej tabeli do zmiennej $kolumna[1] z bazy danych.

  1. <?php
  2. $kolumna_stala_zmienna[numerek] = 2;
  3. var_dump($kolumna_stala_zmienna);
  4.  
  5. '
  6.    <tr>
  7.        <td>'. $kolumna_stala_zmienna[numerek] .'</td>
  8.    </tr>
  9. '
  10. ;
  11. ?>


var_dump($kolumna_stala_zmienna);
Kod
array(1) { ["numerek"]=> int(2) }



  1. <?php
  2. $zapytanie =
  3.  
  4.    "SELECT
  5.        '',
  6.        TO_DAYS(data) - TO_DAYS(NOW())
  7.    FROM terminarz";
  8.  
  9. $idzapytania = mysql_query($zapytanie);
  10. while ($kolumna = mysql_fetch_row($idzapytania))
  11. {
  12.    
  13.    // $strzala
  14.  
  15.    IF ($kolumna_stala_zmienna[numerek] == $kolumna[1]) $strzala = strzalka; else $strzala = puste;
  16.    
  17.    
  18. echo  var_dump($kolumna_stala_zmienna) . var_dump($strzala) . var_dump($kolumna). '<br>';    
  19.  
  20.  
  21. '
  22.    <tr class="'. $color .'">
  23.        <th class="'. $strzala .'">'. $kolumna[0] .'</th>
  24.        <td>'. $kolumna[1] .'</td>
  25.    </tr>
  26. '
  27. ;
  28. }
  29. ?>


echo var_dump($kolumna_stala_zmienna) . var_dump($strzala) . var_dump($kolumna). '<br>';
Kod
array(1) { ["numerek"]=> int(2) } string(5) "puste" array(2) { [0]=> string(0) "" [1]=> string(2) "-6" }
array(1) { ["numerek"]=> int(2) } string(8) "strzalka" array(2) { [0]=> string(0) "" [1]=> string(1) "2" }
array(1) { ["numerek"]=> int(2) } string(5) "puste" array(2) { [0]=> string(0) "" [1]=> string(1) "3" }


Czyli wyświetla strzałkę: string(8) "strzalka". Czemu w pierwszym przypadku nie działa porównanie zawartości tablic?
JoShiMa
Powiem Ci co zrobić. Zacznij się uczyć PHP, bo nie masz pojęcia co to są tablice i że ich kolumny nie leżą na sobie ani obok. To nie są tabelki jakie możesz sobie narysowac ołówkiem w zeszycie w kratce. Potem pędź do manuala i spróbuj zrozumieć jak działa pętla while, którą wykorzystujesz.

Nie obraź się, ale z Twoim pojmowaniem tablic to nie ma nawet jak do Ciebie mówić, żeby Ci wytłumaczyć, a gotowca Ci pisać nie będę smile.gif No bo niby jak Ty te kolumny układasz na sobie? Bierzesz w paluszki i układasz?
wojteke
Cytat(JoShiMa @ 6.08.2009, 21:15:05 ) *
Zacznij się uczyć PHP

Ja właśnie zaczynam uczyć się php, zaglądam często do manualna ale tego problemu nie udaje mi się rozwiązać. Co do słów przeze mnie użytych do opisania problemu nie wiem czemu się czepiasz. Mam używać nie wiadomo jakiego słownictwa? Jeśli tego chcecie, to będę próbował. Chciałem tylko jak najkrócej przedstawić problem.

Cytat(JoShiMa @ 6.08.2009, 21:15:05 ) *
a gotowca Ci pisać nie będę

Ja chciałbym tylko dowiedzieć się co mam zrobić by to działało.
JoShiMa
Masz zrozumieć jak działają tablice, i jak działa pętla której używasz. Powinieneś również zacząć rozróżniać tablice i tabele. smile.gif Nie o słownictwo chodzi tylko o pojmowanie. Nie ma czegoś takiego, że tablice leżą jedna nad drugą albo obok siebie. To nie naleśniki smile.gif
wojteke
Hehe, wystarczyło $kolumnę_2 nie wywoływać z pętli i wtedy działa, także ten problem mam już rozwiązany.


Mam jeszcze jeden problem i chciałbym Was bardzo poprosić o jakąś wskazówkę jak to zrobić:

Chciałbym nadać styl CSS tylko i wyłącznie jednej komórce w tabeli.

W ten sposób tworzę przykładową tabelę z bazy danych:

  1. echo '<table>';
  2.  
  3. while ($kolumna = mysql_fetch_row($idzapytania))
  4.  
  5. {
  6.  
  7.  
  8. '<tr class="'. $color .'">
  9.  
  10. <td>'. $kolumna[0] .'</td>
  11. <td>'. $kolumna[1] .'</td>
  12. <td>'. $kolumna[2] .'</td>
  13.  
  14. </tr>'
  15. ;
  16. }
  17.  
  18. $zapytanie =
  19.  
  20. "SELECT
  21. pole1,
  22. pole2,
  23. pole3
  24. FROM terminarz";


I taka tebela wygląda np. tak:



I nie wiem jak nadać styl CSS tylko jednej komórce, nie zmieniając stylu CSS innych komórek.

Na ilustracji widać kolorowe tło wierszy - taki styl CSS nadaję w ten sposób:

  1. IF ($kolumna[2] < 2) $color = yellow2;
  2.  
  3. IF ($kolumna[2] < 1) $color = yellow1;
  4.  
  5. IF ($kolumna[2] < 0) $color = grey;


Mój problem polega na tym, że nie działa np. takie coś:

  1. IF ($kolumna[2] == 1) $kolumna[2] = styl_css;


Wszystko ładnie działa oprócz tego, że do danej komórki, zamiast przedzielenia stylu CSS, wpisuje do tej komórki nazwę stylu, czyli w tym przypadku: "styl_css".
sciana.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.