Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]funkcja foreach cos zle pisze
Forum PHP.pl > Forum > Przedszkole
ukasz20
Witam

dopiero raczkuje w temacie php wiec prosze o wyrozumialsc.

mam taki kod i chce pokazac wynik zapytania sql na stronie:
  1. <html>
  2. <head>
  3. <title>
  4. spis plyt
  5. </title>
  6. </head>
  7. <body>
  8. <?
  9.  
  10. @ $db = mysql_pconnect('localhost', 'root', 'on');
  11. if (!$db)
  12. {
  13. echo 'baza dupa';
  14. }
  15. mysql_select_db(lista_plyt);
  16.  
  17. $zapytanie = "select tytul from gry";
  18. #---------------------------------------
  19. $wynik = mysql_query($zapytanie);
  20.  
  21. $ile_znalezionych = mysql_num_rows($wynik);
  22.  
  23. echo "<p>ilosc znaezionych pozycji: $ile_znalezionych</p>";
  24.  
  25. foreach ($wynik as $d) {
  26. echo "$d<br>";
  27. }
  28.  
  29. ?>
  30. </body>
  31. </html>

krzyczy :
Warning: Invalid argument supplied for foreach()

hasla użytkownicy itp sie zgadzaja
o co chodzi ?


-------------------------
ponieważ dostałeś już odpowiedzi
nie zamknę wątku ale dodam
odpowiedni [tag] do tematu
na przyszłość o tym pamiętaj
~Cienki1980
Darti
mysql_query zwraca wynik typu resource, czyli taki pseudo-uchwyt do odpowiedzi bazy danych. Teraz jeszcze trzeba taki uchwyt przepisać do tablicy (np za pomocą funkcji mysql_fetch_array" title="Zobacz w manualu PHP" target="_manual albo mysql_fetch_row" title="Zobacz w manualu PHP" target="_manual albo innym "fetch"), czyli tak jak jest w manualu.
rasgan
przed foreach wklej linijkę
Kod
$wynik = mysql_fetch_row($wynik);
yaotzin
Cytat(rasgan @ 29.06.2007, 09:43:18 ) *
przed foreach wklej linijkę
Kod
$wynik = mysql_fetch_row($wynik);



A nie powinno być tak questionmark.gif

while($wynik1 = mysql_fetch_row($wynik)){
echo $wynik['kolumna'];
}

Tak z ciekawości pytam.


-----------------------------------------------
chyba że się mylę....
rasgan
Tak, oczywiście masz rację. Napisałem jedną linijkę, bo w moim frameworku mam tą pentelkę zapisaną jako jedną funkcję. Przepraszam za wprowadzenie w błąd.
ukasz20
hmm to jak ma byc w koncu ?

  1. <?php
  2. $wynik = mysql_fetch_row($wynik)
  3. foreach ($wynik as $d) {
  4. echo "$d<br>";
  5. }
  6. ?>


to nie dziala :
  1. <?php
  2. while($wynik1 = mysql_fetch_row($wynik)){
  3. echo $wynik['kolumna'];
  4. }
  5. ?>


dziala natomiast:
  1. <?php
  2. while($dane = mysql_fetch_object($wynik)){
  3. $cd_id="$dane->cd_id";
  4. echo "$cd_id";
  5. $tytul="$dane->tytul";
  6. echo "$tytul";
  7. };
  8. ?>


czy jest jakis sposob zeby napisac funkcje w php ktora wypluwalaby to co jest w zapytaniu(w sensie wszystko) a manipulowac zapytaniami sql tylko i wylacznie bez mieszania w funkcji.
uli
Cytat(ukasz20 @ 28.06.2007, 23:26:02 ) *
Witam

dopiero raczkuje w temacie php wiec prosze o wyrozumialsc.

mam taki kod i chce pokazac wynik zapytania sql na stronie:
  1. <html>
  2. <head>
  3. <title>
  4. spis plyt
  5. </title>
  6. </head>
  7. <body>
  8. <?
  9.  
  10. @ $db = mysql_pconnect('localhost', 'root', 'on');
  11. if (!$db)
  12. {
  13. echo 'baza dupa';
  14. }
  15. mysql_select_db(lista_plyt);
  16.  
  17. $zapytanie = "select tytul from gry";
  18. #---------------------------------------
  19. $wynik = mysql_query($zapytanie);
  20.  
  21. $ile_znalezionych = mysql_num_rows($wynik);
  22.  
  23. echo "<p>ilosc znaezionych pozycji: $ile_znalezionych</p>";
  24.  
  25. foreach ($wynik as $d) {
  26. echo "$d<br>";
  27. }
  28.  
  29. ?>
  30. </body>
  31. </html>

krzyczy :
Warning: Invalid argument supplied for foreach()

hasla użytkownicy itp sie zgadzaja
o co chodzi ?


-------------------------
ponieważ dostałeś już odpowiedzi
nie zamknę wątku ale dodam
odpowiedni [tag] do tematu
na przyszłość o tym pamiętaj
~Cienki1980


No dobra, obiadek prosto na stół, bo już sił nie mam:

  1. <html>
  2. <head>
  3. <title>
  4. spis plyt
  5. </title>
  6. </head>
  7. <body>
  8. <?
  9.  
  10. @ $db = mysql_pconnect('localhost', 'root', 'on');
  11. if (!$db)
  12. {
  13. echo 'baza dupa';
  14. }
  15. mysql_select_db(lista_plyt);
  16.  
  17. $zapytanie = "select tytul from gry";
  18. #---------------------------------------
  19. $wynik = mysql_query($zapytanie);
  20.  
  21. $ile_znalezionych = mysql_num_rows($wynik);
  22.  
  23. echo "<p>ilosc znaezionych pozycji: $ile_znalezionych</p>";
  24.  
  25. while ($wiersz = mysql_fetch_array($wynik)) {
  26.  
  27. $a = $wiersz["tytul"];
  28. echo "$a<br>";
  29.  
  30. }
  31.  
  32. ?>
  33. </body>
  34. </html>
ukasz20
dzieki
wilkolaski
A ja mam dwa pytania. Chodzi o ta czesc kodu:
  1. <?php
  2. while ($wiersz = mysql_fetch_array($wynik)) {
  3.  
  4. $a = $wiersz["tytul"];
  5. echo "$a<br>";
  6.  
  7. }
  8. ?>

Jezeli sie myle to mnie poprawcie.
Rozumiem ze funkcja mysql_fetch_array($wynik) tworzy tablice asocjacyjna z wyniku odpowiedz bazy w ktorej jest jeden klucz o nazwie tytul i ktory przyjmuje rozne wartosci, tyle wartosci ile jest wybranych rekordow z tabeli. Tablica zapisana jest nastepnie w $wiersz. Teraz zaczynaja sie moje pytania.
1. Z tego co wiem do dzialania petli while potrzebne jest spelnienie warunku w nawiasie a jezeli dobrze czaje warunek ten bedzie zawsze spelniony bo nie widze w nim zadnego licznika petli. Czyli bedzie to nie konczaca sie petla chyba ze jest jakis niejawny licznik ktory wplywa na spelnienie lub nie warunku w petli.
2. W jaki sposob wobec tego pod zmienna $a beda podstawiane kolejne wartosci wyciagniete z tablicy $wiersz skoro nie ma licznika.

Pozdrawiam.
rasgan
warunek
Kod
$wiersz = mysql_fetch_array($wynik)
nie zawsze jest spełniony. Jeśli skończą się elementy tablicy to warunek nie jest spełniony. mysql_fetch_array — Zapisuje wiersz wyniku w tablicy asocjacyjnej, numerycznej lub w obu (php.net.pl) i zwraca false jeśli wiersz wyniku tablicy asocjacyjnej nie istnieje. Tak więc pętla jest powtarzana tak długo jak są wiersze w tablicy. Gdy się skończa pętla nie jest powtórzona.
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.