Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Mieszanie tabelek
Forum PHP.pl > Forum > Przedszkole
dyktek
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.
mike
  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. ?>
dyktek
@mike_mech dzięki za pomoc smile.gif
konys
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.
nospor
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. ?>
dyktek
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
mike
Jak masz ustawione register_globals :?:
Może przy odbieraniu danych z URL'a zamiast $ly spróbuj $_GET[ 'ly' ]
dyktek
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
nospor
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
dyktek
no tak:) prosty błąd dzięki biggrin.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.