Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Mieszanie tabelek
dyktek
post 7.11.2005, 10:21:20
Post #1





Grupa: Zarejestrowani
Postów: 240
Pomógł: 0
Dołączył: 18.01.2004
Skąd: rzeszów / kraków

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


Witam mam pytanie. Pobieram jakąś tresc z bazy w ten sposób

  1. <?php
  2.  
  3. $query = mysql_query("SELECT * FROM `cos` OREDER by `id`") or die (mysql_error());
  4. while($row = mysql_fetch_array($query)){
  5.  
  6. echo'<table cellpadding="0" cellspacing="1" width="590">
  7. <tr>
  8.  <td class="biala" width="144">'.$row['jakis_rekord'].'</td></tr></table>';
  9. }
  10.  
  11. ?>


to zapytanie będzie zwracać rekordy z tabeli coś i kazdy rekord umiesci w tabelce z classą
  1. class="biala"
i zalozmy ze ta klasa oznacza to ze tło tabelki w której będzie rekord będzie białe a chciałem tak zrobic aby zwracało mi to w ten sposób że raz tło będzie białe a raz zółte i nie wiem jak to zrobić bo na pewno nie tak:

  1. <?php
  2.  
  3. $query = mysql_query("SELECT * FROM `cos` OREDER by `id`") or die (mysql_error());
  4. while($row = mysql_fetch_array($query)){
  5.  
  6. echo'<table cellpadding="0" cellspacing="1" width="590">
  7. <tr>
  8.  <td class="biala" width="144">'.$row['jakis_rekord'].'</td></tr>
  9.  <tr>
  10.  <td class="zolta" width="144">'.$row['jakis_rekord'].'</td></tr>
  11. </table>';
  12. }
  13.  
  14. ?>


chodzi mi o efekt jak np. tutaj http://opisy.gix.pl/ opisy zwracane są raz na szarym a raz na biały tle.
Go to the top of the page
+Quote Post
nospor
post 7.11.2005, 10:24:16
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




http://forum.php.pl/index.php?showtopic=32006&hl=kolor


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mike
post 7.11.2005, 10:25:31
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


  1. <?php
  2.  
  3. $query = mysql_query("SELECT * FROM `cos` OREDER by `id`") or die (mysql_error());
  4.  
  5. $i = 1;
  6. while($row = mysql_fetch_array($query))
  7. {
  8. if( $i % 2 == 0 )
  9. {
  10. echo'<table cellpadding="0" cellspacing="1" width="590">
  11. <tr>
  12.  <td class="biala" width="144">'.$row['jakis_rekord'].'</td></tr></table>';
  13. }
  14. else
  15. {
  16.  echo'<table cellpadding="0" cellspacing="1" width="590">
  17. <tr>
  18.  <td class="zolta" width="144">'.$row['jakis_rekord'].'</td></tr></table>';
  19. }
  20.  
  21. $i++;
  22. }
  23.  
  24. ?>
Go to the top of the page
+Quote Post
dyktek
post 7.11.2005, 10:33:53
Post #4





Grupa: Zarejestrowani
Postów: 240
Pomógł: 0
Dołączył: 18.01.2004
Skąd: rzeszów / kraków

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


@mike_mech dzięki za pomoc smile.gif
Go to the top of the page
+Quote Post
konys
post 7.11.2005, 10:43:30
Post #5





Grupa: Zarejestrowani
Postów: 100
Pomógł: 7
Dołączył: 5.11.2005

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


W trakcie pobierania z rezultatu SQL poszczególnych rekordów, musisz ustalić, który jest 'parzysty' a który 'nieparzysty'. Ogólnie, jeśli chcesz zastosować w kolorowaniu n klas CSS, musisz wiedzieć, czy aktualnie wyświetlany rekord jest co k-ty, k+1, ..., k+n-1. Najprościej uzyskać to przechowując licznik rekordów i pobierając resztę z dzielenia licznika modulo n. Służy do tego operator %.
  1. <?php
  2.  
  3.  $klasy = array('klasa0', 'klasa1', ..., 'klasan');
  4.  $n = count($klasy);
  5.  $licznik = 0;
  6.  while( $rekord = mysql_fetch_array( $result ) )
  7.  {
  8. echo $klasy[ $licznik % $n ].' '.$rekord['pole'];
  9. $licznik ++;
  10.  }
  11.  
  12. ?>


W podanym przykładzie masz 2 klasy ('biala' i 'zolta') - oczywiście musisz sobie dostosować wyświetlanie rekordów wewnątrz pętli.
Go to the top of the page
+Quote Post
nospor
post 7.11.2005, 10:45:26
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to ja to lekko poprawię (kod mike_mech). W chwili obecnej generowanych jest n tabelek z jednym rekordem. Jest to ciut złe rozwiązanie. Powinna generować się jedna tabelka z n rekordami. Należy więc znacznik table wyciągnąc przed pętle.
Pozatym klasę z kolorem lepiej jest chyba nadać na wiersz (tr) a nie na komórkę (td), dzieki czemu mozna bedziec dodac bez problemu jeszcze jakies komorki, a kolor wiersza bedzie dla wszystkich z nich taki sam.
No i w ifie należy zmieniac tylko zmienną $class, a nie całe wiersze. Dzieki temu kod jest czytelniejszy i krótszy smile.gif

  1. <?php
  2.  
  3. $query = mysql_query("SELECT * FROM `cos` OREDER by `id`") or die (mysql_error());
  4.  
  5. $i = 1;
  6. echo'<table cellpadding="0" cellspacing="1" width="590">';
  7. while($row = mysql_fetch_array($query))
  8. {
  9.     if( $i % 2 == 0 )
  10.         $class = 'biala';
  11.     else
  12.         $class = 'zolta';
  13.   echo '
  14.   <tr class="'.$class.'">
  15.   <td width="144">'.$row['jakis_rekord'].'</td></tr>';
  16.  
  17.     $i++;
  18. }
  19. echo '</table>';
  20.  
  21.  
  22. ?>


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dyktek
post 7.11.2005, 14:37:09
Post #7





Grupa: Zarejestrowani
Postów: 240
Pomógł: 0
Dołączył: 18.01.2004
Skąd: rzeszów / kraków

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


tak tez zrobiłem na poczatku ale zasadajest dobra. nie chciałem zakładać osobnego wątku a mam jeszcze jedno pytanie

  1. <?php
  2. $alfabet = array ("0-9", "A","B","C","D","E","F","G","H","I","J","K","L","M",
  3.  "N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
  4. $num = count($alfabet) - 1;
  5. $counter = 0;
  6. while (list(, $ltr) = each($alfabet)) {
  7.  
  8. echo ' <a href="gry.php?ly='.$ltr.'">'.$ltr.'</a> | ';
  9. }
  10.  
  11. ?>




i teraz chciałem zrobić tak żeby z bazy wyświetlić wszystkie rekordy konkretnej kolumny w bazie np. jeśli ktoś kliknie na N to link gry.php?ly=N więc $ly = N
więc chce aby z bazy wyświetliło się to co zaczyna się od litery N
  1. <?php
  2. $query = ("SELECT * FROM cos WHERE gry LIKE '$ly%'") or die (mysql_error());
  3. while($row = mysql_fetch_array($query)){
  4.  
  5. echo "".$row['gry']."<br />";
  6.  
  7. }
  8. ?>

ale to nie działa i nie wiem czy w ogóle dobrze się za to zabrałem

Ten post edytował dyktek 7.11.2005, 14:39:32
Go to the top of the page
+Quote Post
mike
post 7.11.2005, 14:43:49
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Jak masz ustawione register_globals :?:
Może przy odbieraniu danych z URL'a zamiast $ly spróbuj $_GET[ 'ly' ]
Go to the top of the page
+Quote Post
dyktek
post 7.11.2005, 15:55:00
Post #9





Grupa: Zarejestrowani
Postów: 240
Pomógł: 0
Dołączył: 18.01.2004
Skąd: rzeszów / kraków

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


robie to na lokalu i sprawdzałem zmienna $ly prawidłowo transportuje swoją wartość

tylko nie jestem pewien tego zapytania czy ono jest prawidłowe zwraca mi błąd

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL

więc raczej coś z nim jest nie tak

a wygląda ono tak
  1. <?php
  2. SELECT * FROM dyk_gry WHERE nazwa_gry LIKE '$ly%'
  3. ?>


nazwa_gry to np.

ALex 1203
Antarctic
Adventure of lomax

więc jeśli klikam na A a swoim alfabecie zmienna ly przyjmuje wartość A więc zapytanie wygląda

  1. <?php
  2. SELECT * FROM dyk_gry WHERE nazwa_gry LIKE 'A%'
  3. ?>


i tutaj podejrzewam ze źle robie bo pytam o rekordy które są jak A a nie zaczynające się od A

Więc moje pytanie jak zrobić zapytanie takie aby zwracało mi rekordy zaczynające się od A
Go to the top of the page
+Quote Post
nospor
post 7.11.2005, 16:09:16
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




zrobiles banalny blad. Do mysql_fetch_array zapodajesz zapytanie a nie wynik jego wykonanania. powinno byc tak:

  1. <?php
  2.  
  3. $query = mysql_query("SELECT * FROM cos WHERE gry LIKE '$ly%'") or die (mysql_error());
  4. while($row = mysql_fetch_array($query)){
  5.  
  6. echo "".$row['gry']."<br />";
  7.  
  8. }
  9.  
  10. ?>


widac roznice? nie uzyles mysql_query smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dyktek
post 8.11.2005, 10:23:35
Post #11





Grupa: Zarejestrowani
Postów: 240
Pomógł: 0
Dołączył: 18.01.2004
Skąd: rzeszów / kraków

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


no tak:) prosty błąd dzięki biggrin.gif
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 03:04