Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z tablicami
Forum PHP.pl > Forum > Przedszkole
nickkk
Witam,
Mam zapytanie do bazy, w którym wyciagam nazwy użytkowników online:

Kod
o_online

nazwau1
nazwau2
nazwau3


Chciałbym zapisać każdy element tablicy do zmiennej i ją wyświetlić:

foreach ($fetch as $klucz => $user)
{
echo $user;
}

Niestety zwraca mi tylko pierwszy element z tablicy $fetch. Co robię źle?

Inny problem. Chcę wyświelić te same dane w innych sposób:

Kod
while ($fetch = $db_uchwyt->fetch_array(MYSQLI_ASSOC)) {
echo $fetch['o_login'];    
}


Wyświetla mi wszystkie elementy tablicy, poza pierwszym na liście czyli np. nazwau1. Tablicę wcześniej zresetowałem. Po zresetowaniu funkcja current() pokazuje aktualny element jako nazwau1, czyi problem poprawnego zapytania odpada. Gdzie robię błąd z tymi dwoma pętlami?
Kicok
Cytat
Chciałbym zapisać każdy element tablicy do zmiennej i ją wyświetlić:

foreach ($fetch as $klucz => $user)
{
echo $user;
}

Niestety zwraca mi tylko pierwszy element z tablicy $fetch.


Skoro zapytanie zwraca tylko jedną kolumnę, to tablica $fetch będzie miała tylko jeden element. Pętla działa w tym przypadku poprawnie.


Cytat
Inny problem. Chcę wyświelić te same dane w innych sposób:
Kod
while ($fetch = $db_uchwyt->fetch_array(MYSQLI_ASSOC)) {
echo $fetch['o_login'];    
}



Wyświetla mi wszystkie elementy tablicy, poza pierwszym na liście czyli np. nazwau1

Najprawdopodobniej gdzieś wcześniej wywołujesz już $db_uchwyt->fetch_array() i w pętli zaczyna ci pobierać wyniki zapytania od drugiego wiersza.
nikk
Tylko, że ta sama tablica $fetch w while jest wyświetlana od poczatku do końca, natomiast w pętli foreach tylko jeden element (pierwszy) chociaż tablica posiada np. dwa elementy. Nie mam pojęcia dlaczego nie działa to na bazie danych, bo przykłady z manuala PHp wykonuje mi poprawnie. Może robię gdzieś błąd w metodzie? Zamieszczam w razie czego całą metodą z klasy i proszę o poradę:
  1. <?php
  2. function pobierz_online($db_sql, $db_uchwyt, $fetch) 
  3. {
  4. $this->db_sql = $db_sql;
  5. $this->db_uchwyt = $db_uchwyt;
  6. $this->fetch = $fetch;
  7.  
  8. $db_sql = "SELECT users.u_login AS o_login FROM online, users WHERE online.u_id = user
    s.u_id"
    ;
  9. $db_uchwyt = $this->query($db_sql);
  10. $fetch = $db_uchwyt->fetch_array(MYSQLI_ASSOC);
  11. {
  12.  
  13. foreach ($fetch as $klucz => $user) {
  14.  
  15. echo $user;
  16.  
  17. }
  18.  
  19. }
  20. }
  21. ?>
Kicok
To popatrz na takie czary:
  1. <?php
  2.  
  3. $db_sql = "SELECT users.u_login AS o_login FROM online, users WHERE online.u_id = user
    s.u_id"
    ;
  4. $db_uchwyt = $this->query($db_sql);
  5.  
  6. echo '<pre>';
  7. /* 1 */ print_r( $db_uchwyt->fetch_array(MYSQLI_ASSOC) );
  8. /* 2 */ print_r( $db_uchwyt->fetch_array(MYSQLI_ASSOC) );
  9. /* 3 */ print_r( $db_uchwyt->fetch_array(MYSQLI_ASSOC) );
  10. /* 4 */ print_r( $db_uchwyt->fetch_array(MYSQLI_ASSOC) );
  11. echo '</pre>';
  12.  
  13. ?>

Cztery razy wykonuję identyczną linijkę kodu i za każdym razem otrzymuję inny wynik.
Jedno wywołanie metody $db_uchwyt->fetch_array() wyświetla tylko jeden wiersz danych, a nie od razu cały wynik zapytania. Przy pętli foreach metodę $db_uchwyt->fetch_array() wywołałeś raz, więc dostałeś jeden wiersz. Natomiast przy while metoda fetch_array() wywoływana była za każdym razem gdy sprawdzany był warunek pętli:
  1. <?php
  2.  
  3. while( $fetch = $db_uchwyt->fetch_array() )
  4.  
  5. ?>
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.