Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Porównywanie wartości kolumn o podanych nazwach zmiennych w przypadku kiedy kolumny nie są ułożone obok siebie w poziomie.
wojteke
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.07.2009

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


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]. (IMG:http://forum.php.pl/style_emoticons/default/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?(IMG:http://forum.php.pl/style_emoticons/default/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!

Ten post edytował wojteke 5.08.2009, 23:00:02
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Quider
post
Post #2





Grupa: Zarejestrowani
Postów: 91
Pomógł: 9
Dołączył: 6.03.2009
Skąd: Katowice

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


ale zagmatwałes..
Czy tobie chodzi o tablice wielowymiarowe?
Go to the top of the page
+Quote Post
wojteke
post
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.07.2009

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


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. (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif)

Ten post edytował wojteke 5.08.2009, 22:50:13
Go to the top of the page
+Quote Post
JoShiMa
post
Post #4





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Ale co to znaczy dla kolumn ułożonych obok siebie (IMG:http://forum.php.pl/style_emoticons/default/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ą.

Ten post edytował JoShiMa 6.08.2009, 00:20:21
Go to the top of the page
+Quote Post
wojteke
post
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.07.2009

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


Cytat(JoShiMa @ 6.08.2009, 01:16:32 ) *
Ale co to znaczy dla kolumn ułożonych obok siebie

(IMG:http://fotoo.pl/zdjecia/files/2009-08/212506b8.gif)

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ł? (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif)
Go to the top of the page
+Quote Post
ayeo
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Witam!

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

Pozdrawiam!
Go to the top of the page
+Quote Post
wojteke
post
Post #7





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.07.2009

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


Zrobiłem teraz tak:

(IMG:http://img228.imageshack.us/img228/3314/kolumny3.gif)

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?

Ten post edytował wojteke 6.08.2009, 13:53:35
Go to the top of the page
+Quote Post
JoShiMa
post
Post #8





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


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ę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) No bo niby jak Ty te kolumny układasz na sobie? Bierzesz w paluszki i układasz?

Ten post edytował JoShiMa 6.08.2009, 20:16:20
Go to the top of the page
+Quote Post
wojteke
post
Post #9





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.07.2009

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


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





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


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. (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
wojteke
post
Post #11





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.07.2009

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


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:

(IMG:http://img232.imageshack.us/img232/4455/cssdla1wiersza.gif)

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".
(IMG:style_emoticons/default/sciana.gif)

Ten post edytował wojteke 13.08.2009, 22:43:23
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 - 14:26