Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]Wczytanie danych z bazy do tabeli
Teodor0
post 26.02.2018, 11:29:02
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 26.02.2018

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


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?
Go to the top of the page
+Quote Post
viking
post 26.02.2018, 11:34:51
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


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


--------------------
Go to the top of the page
+Quote Post
emillo91
post 26.02.2018, 22:41:04
Post #3





Grupa: Zarejestrowani
Postów: 129
Pomógł: 13
Dołączył: 29.03.2012

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


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.
Go to the top of the page
+Quote Post
Teodor0
post 28.02.2018, 08:24:16
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 26.02.2018

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


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

Ten post edytował Teodor0 28.02.2018, 08:24:59
Go to the top of the page
+Quote Post
viking
post 28.02.2018, 08:29:21
Post #5





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Nie potrzebujesz tej drugiej pętli. Wszystko jest w pierwszej i $row.


--------------------
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: 16.04.2024 - 22:00