Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] tabela z rekordami
Forum PHP.pl > Forum > Przedszkole
em-ba
Witam, potrzebuję wykonać taką tabele, na którą będzie wczytywanych pięć rekordów ostatnio dodanych przez użytkownika do bazy

Zrobiłem tabele ale tam wyświetlają się wyniki na zasadzie, że jest przygotowana tabela na pięć rekordów i tyle.. nie wiem jak wykonać taką tabele, która pokaże tylko wypełnione rekrody ..i to pięć ostatnio dodanych (jeżeli były dodane tylko 3 rekordy to żeby wyświetliło je)

Oto kod:
  1. <?php
  2. mysql_connect ('localhost', 'root', 'krasnal') or die ("nie udało sie połączyć");
  3. mysql_select_db('style') or die ("Nie mozna zlokalizowac bazy danych");
  4.  
  5. $tok = mysql_query ("SELECT * FROM `kortc` WHERE login='$login'");
  6. $kot = mysql_fetch_array($tok);
  7.  
  8. '<table class="t">
  9.  <tr>
  10. <th class="t">nr</th>
  11. <th class="t">imię</th>
  12. <th class="t">nazwisko</th>
  13.  </tr>
  14.  <tr>
  15. <td class="t">1</td>
  16. <td class="t">'.$kot['imie'].'</td>
  17. <td class="t">'.$kot['nazwisko'].'</td>
  18.  </tr>
  19.  <tr>
  20. <td class="t">2</td>
  21. <td class="t">'.$kot['imie'].'</td>
  22. <td class="t">'.$kot['nazwisko'].'</td>
  23.  </tr>
  24.  </table>';
  25.  
  26. ?>
batman
W przykładach do mysql_fetch_array znajdziesz pętlę while, dzięki której stworzysz tabelę.
Do tego będziesz też potrzebował użyć order by oraz limit.
kopix
  1. <?php
  2. $i = 1;
  3. $tok = mysql_query ("SELECT * FROM `kortc` WHERE login='$login' LIMIT 0,5 ORDER BY data");
  4. '<table class="t">
  5.  <tr>
  6. <th class="t">nr</th>
  7. <th class="t">imię</th>
  8. <th class="t">nazwisko</th>
  9.  </tr>';
  10.  
  11. while($kot = mysql_fetch_array($tok)){
  12.  
  13.  echo '  <tr>
  14. <td class="t">'.$i.'</td>
  15. <td class="t">'.$kot['imie'].'</td>
  16. <td class="t">'.$kot['nazwisko'].'</td>
  17.  </tr>';
  18. $i += 1;
  19. }
  20.  
  21. echo '</table>';
  22. ?>


mniej więcej na tej zasadzie, oczywiście w tym przypadku w bazie musi istnieć kolumna o nazwie data, w której będzie podawana data i ewentualnie godzina dodania danej informacji do bazy.
em-ba
no tak, rozumiem z tą datą, mam akurat takie pole..

Przerobiłem na ten sposób co napisałes ale przy while wyskakuje mi taka inf:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in..

a poza tym wyświetla mi tylko nagłówki tabeli bez rekordów z pobranymi danymi :/
rzymek01
na moje to posortuj (sql: ORDER) wg id w odwrotnej kolejności (sql: DESC) z limitem 5 i będzie stykało tongue.gif
em-ba
poki co to mi nic nie wyświetla, tylko tak jak napisałem.. wyskakuje błąd i nie ma rekordów z danymi
rzymek01
em-ba, pokaż strukturę tabeli (łącznie z typami np. int itd.) smile.gif

bo na slepo to nie lubię pisać zapytań
em-ba
przepraszam, że tak długo nie odpisywałem ale siedziałem nad tym i się meczyłem nie mając dostępu do internetu i ...dalej nic :/

tak jak prosiłeś, to jest kod:
  1. <?php
  2. $i = 1;
  3. $tok = mysql_query ("SELECT * FROM `kortc` WHERE login='$login' LIMIT 0,5 ORDER BY data");
  4. '<table class="t">
  5.  <tr>
  6. <th class="t">nr</th>
  7. <th class="t">login</th>
  8. <th class="t">imię</th>
  9. <th class="t">nazwisko</th>
  10. <th class="t">dataprzyjazdu</th>
  11. <th class="t">dataodjazdu</th>
  12.  </tr>';
  13.  
  14. while($kot = mysql_fetch_array($tok)){
  15.  
  16.  echo '  <tr>
  17. <td class="t">'.$i.'</td>
  18. <td class="t">'.$kot['login'].'</td>
  19. <td class="t">'.$kot['imie'].'</td>
  20. <td class="t">'.$kot['nazwisko'].'</td>
  21. <td class="t">'.$kot['dataprzyjazdu'].'</td>
  22. <td class="t">'.$kot['dataodjazdu'].'</td>
  23.  </tr>';
  24. $i += 1;
  25. }
  26.  
  27. echo '</table>';
  28. ?>

a oto struktura bazy danych:
  1. create table 'kortc'
  2. id, int 32, unsigned, auto_increment,
  3. login, varchar 32
  4. imie, varchar 30
  5. nazwisko, varchar 30
  6. dataprzyjazdu, varchar 12
  7. dataodjazdu, varchar 12


dopiszę jeszczę, że błąd obiawa się tym, że wyświetlają sie tylko nagłówki tabeli - bez wartości i nad nagłówkami znajduje się inf dotyczący linii z instrukcją while..
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\...
mike
A zapytanie zwraca jakieś wyniki? Jeśli nie to nie dziwota, że masz błąd.
Sprawdź czy są wyniki (mysql_num_rows()) zanim puścisz pętlę.
Puzi
No to spróbuj tak:
  1. <?php
  2. $i = 1;
  3. $tok = mysql_query ("SELECT * FROM `kortc` WHERE login='".$login."' LIMIT 0,5 ORDER BY data");
  4. '<table class="t">
  5.  <tr>
  6. <th class="t">nr</th>
  7. <th class="t">login</th>
  8. <th class="t">imię</th>
  9. <th class="t">nazwisko</th>
  10. <th class="t">dataprzyjazdu</th>
  11. <th class="t">dataodjazdu</th>
  12.  </tr>';
  13.  
  14. while($kot = mysql_fetch_array($tok)){
  15.  
  16.  echo '  <tr>
  17. <td class="t">'.$i.'</td>
  18. <td class="t">'.$kot[1].'</td>
  19. <td class="t">'.$kot[2].'</td>
  20. <td class="t">'.$kot[3].'</td>
  21. <td class="t">'.$kot[4].'</td>
  22. <td class="t">'.$kot[5].'</td>
  23.  </tr>';
  24. $i += 1;
  25. }
  26.  
  27. echo '</table>';
  28. ?>
em-ba
dzieki, ale nic się nie zmieniło..
Puzi
Masz błąd w zapytaniu przy sortowaniu... nie masz żadnej kolumny w bazie o nazwie data!!!
mike
Cytat(em-ba @ 11.06.2008, 12:38:37 ) *
dzieki, ale nic się nie zmieniło..
No to może wprowadzisz miany proponowane przeze mnie? Na co czekasz?
I pokaż kod, jaki stworzysz.
em-ba
u siebie mam ok, tylko tu wrzuciłem zapominając poprawić
  1. <?php
  2. $tok = mysql_query ("SELECT * FROM `kortc` WHERE login='".$login."' LIMIT 0,5 ORDER BY dataprzyjazdu");
  3. ?>


mike juz patrze, nie zauważyłem postu biggrin.gif

zanim wprowadziłem zmiany dotyczące wstawienia pętli while to pobierało mi dane do tabeli z bazy ale to był tylko jeden rekord (ostatnio dodany) i wyświetlał te dane prawidłowo. Problem się zaczął w momencie, kiedy potrzebuje zrobić wyświetlanie 5-ciu ostatnio dodanych rekordów przez użytkownika :/

oto kod:
  1. <?php
  2. $user=$_SESSION['login'];
  3. mysql_connect ('localhost', 'root', 'krasnal') or die ("nie udało sie połączyć");
  4. mysql_select_db('fi') or die ("Nie mozna zlokalizowac bazy danych");
  5.  
  6. $i = 1;
  7. $tok = mysql_query ("SELECT * FROM `kortc` WHERE login='".$login."' LIMIT 0,5 ORDER BY dataprzyjazdu");
  8. '<table class="t">
  9.  <tr>
  10. <th class="t">nr</th>
  11. <th class="t">login</th>
  12. <th class="t">imię</th>
  13. <th class="t">nazwisko</th>
  14. <th class="t">dataprzyjazdu</th>
  15. <th class="t">dataodjazdu</th>
  16.  </tr>';
  17.  
  18. while($kot = mysql_fetch_array($tok)){
  19.  
  20.  echo '  <tr>
  21. <td class="t">'.$i.'</td>
  22. <td class="t">'.$kot['login'].'</td>
  23. <td class="t">'.$kot['imie'].'</td>
  24. <td class="t">'.$kot['nazwisko'].'</td>
  25. <td class="t">'.$kot['dataprzyjazdu'].'</td>
  26. <td class="t">'.$kot['dataodjazdu'].'</td>
  27.  </tr>';
  28. $i += 1;
  29. }
  30.  
  31. echo '</table>';
  32. ?>
Puzi
To spróbuj tam gdzie masz LIMIT dać tylko 5...

A czasami tam gdzie masz pętle nie powinno być tak:
  1. <?php
  2. while($kot = mysql_fetch_row($tok))
  3. ?>
em-ba
dawałem z początku LIMIT 5 ..i było tak samo, potem zmieniłem na LIMIT 0,5 też błąd.. spróbowałem teraz znów z 5 ..też to samo

jak zmieniłem na
  1. <?php
  2. while($kot = mysql_fetch_row($tok))
  3. ?>

to dalej jest ten sam błąd, tylko, że nie dotyczy mysql_fetch_array() tylko mysql_fetch_row()
phpion
Weź zrób to, o czym pisze ~mike!!
  1. <?php
  2. if (mysql_num_rows($tok) > 0) {
  3. while($kot = mysql_fetch_array($tok)){
  4.  
  5.  echo '  <tr>
  6. <td class="t">'.$i.'</td>
  7. <td class="t">'.$kot['login'].'</td>
  8. <td class="t">'.$kot['imie'].'</td>
  9. <td class="t">'.$kot['nazwisko'].'</td>
  10. <td class="t">'.$kot['dataprzyjazdu'].'</td>
  11. <td class="t">'.$kot['dataodjazdu'].'</td>
  12.  </tr>';
  13. $i += 1;
  14. }
  15. }
  16. else {
  17. // brak rekordow zwroconych przez zapytanie
  18. }
  19. ?>

Tak ciężko to poprawić?
Puzi
A spróbuj tak:
  1. <?php
  2. $i = 1;
  3. $zapytanie = "SELECT * FROM `kortc` WHERE login='".$login."' LIMIT 0,5 ORDER BY dataprzyjazdu";
  4. $idzapytania = mysql_query($zapytanie);
  5.  
  6. '<table class="t">
  7.  <tr>
  8. <th class="t">nr</th>
  9. <th class="t">login</th>
  10. <th class="t">imię</th>
  11. <th class="t">nazwisko</th>
  12. <th class="t">dataprzyjazdu</th>
  13. <th class="t">dataodjazdu</th>
  14.  </tr>';
  15.  
  16. while ($kot = mysql_fetch_row($idzapytania))
  17. {
  18. echo '  <tr>
  19. <td class="t">'.$i.'</td>
  20. <td class="t">'.$kot['login'].'</td>
  21. <td class="t">'.$kot['imie'].'</td>
  22. <td class="t">'.$kot['nazwisko'].'</td>
  23. <td class="t">'.$kot['dataprzyjazdu'].'</td>
  24. <td class="t">'.$kot['dataodjazdu'].'</td>
  25.  </tr>';
  26. $i += 1;
  27. }
  28.  
  29. echo '</table>';
  30. ?>
cipek
Zapytanie:

  1. <?php
  2. $zapytanie = "SELECT * FROM `kortc` WHERE login='$login' ORDER BY dataprzyjazdu LIMIT 0,5 ";
  3. ?>
em-ba
phpion, zrobiłem jak poleciłes i..
ciągle jest ten sam błąd
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\... //dotyczy linii z if (mysql_num_rows($tok) > 0) {

teraz chyba działa juz..

zamieniłem jak radził cipek

ale mam jeszcze takie pytanie..

teraz mam w kodzie przed pętlą while instrkcję if
mam tak zostawić czy wyrzucić tego if-a questionmark.gif

Przy okazji dzięki wszystkim za pomoc smile.gif

o to mi chodzi
  1. <?php
  2. if (mysql_num_rows($tok) > 0) {
  3. while($kot = mysql_fetch_array($tok)){
  4. }
  5. }
  6. ?>
Puzi
MOżesz sobie zostawić... bo jak nie wyszuka Ci żadnego rekordu to tam gdzie masz else to sobie mozesz dodach echo i jaąś informację do wyświetlenia
em-ba
aha, okej, dzięki ..rozumiem

..jeszcze raz dziękuję wszystkim za pomoc biggrin.gif
widmo17
Ten if sprawdza czy są wszystkie rekordy ;]
Kod
<?php
if (mysql_num_rows($tok) > 0) {
while($kot = mysql_fetch_array($tok)){
//tabela
}
}else{
echo("Brak rekordów!");
}
?>


//whoops, trochę się spóźniłem tongue.gif sorry
rzymek01
na moje możesz wywalić, bo jak jest koniec zbioru to mysql_fetch... zwraca false, więc while się nie wykona

poza tym mysql_num_rows jest nieoptymalne smile.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.