Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Przeglądanie zawartości tablicy asocjacyjnej - foreach
Lukis92
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.07.2012

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


Witam.
Mam tabelę miasto z kolumnami id, nazwa. Chodzi o wyświetlenie jej zawartości. Mam to zrobić za pomocą pętli foreach. Wymyśliłem, że dane pobrane z bazy wstawię do tablicy asocjacyjnej, aby w łatwy sposób dostać się do danych np. row['id'], row['nazwa']. Tylko jest probem, że warunek zadania to użycie pętli foreach, która nie chce być posłuszna (IMG:style_emoticons/default/biggrin.gif) .

Oto kod:
  1. $servername = 'localhost';
  2. $username = 'root';
  3. $password = 'qsdfg';
  4. $dbname = 'baza';
  5.  
  6. //create connection
  7. $conn = mysqli_connect($servername, $username, $password, $dbname);
  8.  
  9. // Check connection
  10. if (!$conn) {
  11. die("Connection failed: " . mysqli_connect_error());
  12. }
  13.  
  14. // select table 'miasto'
  15. $sql = "SELECT id, nazwa FROM miasto";
  16. $result = mysqli_query($conn, $sql);
  17.  
  18. echo '<table border="1">
  19. <tr><th>ID</th><th>Nazwy miast</th></tr>';
  20. while($row = mysqli_fetch_assoc($result)){
  21. foreach($row as $id => $row['nazwa'])
  22. echo '<tr><td>'.$row['id'].'</td><td>'.$row['nazwa'].'</td></tr>';
  23. }
  24. echo '</table>';


Gdy użyję samej pętli while to ładnie wyświetla tabelę. Natomiast foreach powoduje takie cuda:
(IMG:http://files.tinypic.pl/i/00637/ds48tcsnwjbm.png)

Szukałem już wielu rozwiązań w internecie i już mam lekko dosyć . Dlatego też piszę tutaj na forum.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Tak naprawdę użycie foreach tutaj nie pasuje, bo dane z bazy powinno się pobierać wiersz po wierszu, tak jak Ty to zrobiłeś. Żeby użyć foreach, to musisz pobrać wszystkie wyniki naraz za pomocą mysqli_fetch_all. Ewentualnie możesz wyświetlić każdy wiersz osobno z foreach, żeby iterować każdą komórkę, ale to dosyć dziwne w tym przypadku.
Go to the top of the page
+Quote Post
ilidir
post
Post #3





Grupa: Zarejestrowani
Postów: 183
Pomógł: 14
Dołączył: 27.09.2014

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


Musiałbyś najpierw wstawić do tablicy wszsytko a potem odczytać tablice foreachem.
Go to the top of the page
+Quote Post
Lukis92
post
Post #4





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.07.2012

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


Dzięki ilidir za pomoc. Niby tak proste rozwiązanie a ciężko było wpaść na nie.
Teraz już wszystko działa jak należy (IMG:style_emoticons/default/smile.gif) Zrobiłem tak:
  1. echo '<table border="1">
  2. <tr><th>ID</th><th>Nazwy miast</th></tr>';
  3. $array = array();
  4. while($row = mysqli_fetch_assoc($result)){
  5. $array[] = $row;
  6. }
  7. foreach($array as $a){
  8. echo '<tr><td>'.$a['id'].'</td><td>'.$a['nazwa'].'</td></tr>';
  9. }
  10. echo '</table>';


Ten post edytował Lukis92 28.02.2015, 12:37:59
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #5





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Czy nauczyciel akceptuje rozwiązania, które są bez sensu? Bo to jest bez sensu. To tak jakbyś robił porządek w pokoju w taki sposób, że wywalasz wszystko na środek i ustawiasz tak jak było.
Go to the top of the page
+Quote Post
Lukis92
post
Post #6





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.07.2012

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


Nie jest to na uczelnie. Uczę się teraz z czystej chęci. Znalazłem zbiór zadań jakieś uczelni z php i go po kolei przerabiam.
Oto treść:
(IMG:http://files.tinypic.pl/i/00637/gzckxtgchn6q.png)

Może źle rozumiem treść zadania ale myślę, że o to chodziło (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #7





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Chcą, żebyś wczytał je do tablicy. Jeśli dane pochodzą z bazy danych, to to nie jest najlepsze wyjście. Ale jeśli chcesz tak zrobić, to użyj mysqli_fetch_all, które automatycznie zbiera wyniki z bazy do tablicy. mysql_fetch_assoc służy do tzw. fetchowania tablicy, czyli ładowania wyników wiersz po wierszu. Składanie tablicy tą metodą to rozwiązanie naokoło.
Go to the top of the page
+Quote Post
Lukis92
post
Post #8





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.07.2012

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


Więc wczytuję do tablicy pobierając z bazy. Teraz poprawiłem w ten sposób:
  1. echo '<table border="1">
  2. <tr><th>ID</th><th>Nazwy miast</th></tr>';
  3.  
  4. $row = mysqli_fetch_all($result, MYSQLI_ASSOC);
  5.  
  6. foreach($row as $r){
  7. echo '<tr><td>'.$r['id'].'</td><td>'.$r['nazwa'].'</td></tr>';
  8. }
  9. echo '</table>';


Niezła ta funkcja mysqli_fetch_all. Znacznie łatwiejsza w ogarnięciu (IMG:style_emoticons/default/smile.gif) . Czy chodziło Ci o ten sposób rozwiązania?

Ten post edytował Lukis92 28.02.2015, 17:29:10
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #9





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Tak, bardzo dobrze (IMG:style_emoticons/default/smile.gif) Jedyne co bym zmienił to nazwy zmiennych, bo $row teraz tak naprawdę zawiera wszystkie wyniki, więc może $rows?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 23:43