Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Wczytanie danych z bazy do tabeli
Forum PHP.pl > Forum > Przedszkole
Teodor0
Dzień dobry wszystkim, potrzebuje wczytać dane z bazy danych do tabeli stworzonej w HTML. Chodzi mi o 5 ostatnich wpisów jego zadań czyli ze zmienne sesji musi zgadzać się z wpisem z bazy. Póki co wczytuje mi ostatni wpisany rekord, x5. Tak to wygląda na dzień dzisiejszy:



A to moja funkcja:
  1. function get_request_to_table() {
  2. include 'db.php';
  3.  
  4.  
  5. $sql="SELECT * FROM zadania WHERE dokogo='".$_SESSION['valid_user']."'";
  6. $result=mysqli_query($conn,$sql);
  7. $p = 1;
  8.  
  9. $row=mysqli_fetch_assoc($result);
  10. for($i=0; $i <= 5; $i++) {
  11. printf ("<tr>
  12. <th scope=\"row\">".$p++."</th>
  13. <td>".$row['user']."</td>
  14. <td>".$row['dodano']."</td>
  15. <td>".$row['tytul']."</td>
  16. <td>".$row['priorytet']."</td>
  17. <td>".$row['status']."</td>
  18. </tr>"
  19. );
  20. }
  21.  
  22. // Free result set
  23. mysqli_free_result($result);
  24.  
  25. mysqli_close($conn);
  26. }



Chcę wyświetlić 5 wierszy, ale bez powtarzania. Próbowałem używać mysqli_num_rows ale wyświetlało mi błędy i nie mógł zwrócić wyniku... Jak poprawnie skorzystać z mysqli_fetch_assoc, z tego co mi wiadomo zwraca tabelę asocjacyjną czyli zamiast numerków przydziela takie same skojarzenia jak w bazie, no ale teraz pojawia się pytanie jak wyświetlić kolejny wynik z bazy a nie tylko ostatni wpisany?
viking
SELECT... LIMIT 5.
Potem dowolną pętlą zwyczajnie wyświetlasz. Masz przykłady w komentarzach http://php.net/manual/pl/mysqli-result.fetch-array.php
emillo91
Teodor0 powtarza Tobie 5 razy bo w Twoim przypadku zostaje zwielokrotniona ostatnia wartość rekordu, gdyż PHP nie wiedząc do jakiego indeksu tablicy się odwołujesz, wybiera ostatnią pozycję z kluczami: user, dodano itd. Przypisując do zmiennej $row funkcję mysqli_fetch_assoc($result) utworzyłeś tablicę z zawartością wybranych przez Ciebie rekordów. Do iterowania po takiej tablicy używa się innej pętli. Ta, której użyłeś też się nadaje z tym, że jest bardziej rozbudowana i trzeba ustalać maksymalną liczbę iteracji co jest nie praktyczne dla pobierania danych z bazy. Aby twój sposób zadziałał musisz wyciągnąć ze zmiennej $row najpierw numer indeksu czyli 0,1,2,3.. a później klucz. Zainteresuj się pętlą while i funkcją print_r(), która może wypisać całą strukturę utworzonej tablicy. Odnośnie pobierania ostatnich 5 rekordów możesz zastosować Order by Id_Rekordu Limit 5.
Teodor0
Zastosowałem całkiem inną metodę a mianowicie:

  1. $not_null=mysqli_num_rows($result);
  2. if($not_null > 0){
  3.  
  4. while($row = $result->fetch_array())
  5. {
  6. $rows[] = $row;
  7. }
  8.  
  9. foreach($rows as $row)
  10. {
  11. $p++;
  12. printf ...


I wszystko działa jak należy nerdsmiley.png
viking
Nie potrzebujesz tej drugiej pętli. Wszystko jest w pierwszej i $row.
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.