Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie mysql w deklaracji funkcji
Forum PHP.pl > Forum > Bazy danych
herne
Witam, mam pewien problem z dodaniem pewnego elementu do działającego projektu php/mysql.

Mam funkcję, która ze znajdującej się w bazie mysql sygnatury wyciąga unikalny numer, który służy dalej do wyświetlania obrazka mającego ten sam numer. Jeśli chodzi o funkcję i generalnie cały projekt - wszystko działa prawidłowo. Teraz chciałem dodać podpis pod obrazkiem, oczywiście wzięty z odpowiedniego rekordu o takim samym numerze jak numer obrazka w bazie mysql... i nie mogę ruszyć do przodu. Zapytanie pobierające opis działa jeśli wpisać je poza funkcją i z podaną ręcznie wartością (numerem), ale wtedy nie mogę umieścić go pod obrazkiem. Gdzie robię błąd?

  1. FUNCTION obrazki($zmienna) {
  2.  
  3. if(($id = strpos($zmienna, '-')) !== false)
  4. {
  5. $nr_zd = substr($zmienna, $id + 1);
  6. }
  7.  
  8. $nr_zdjecia = explode("/", $nr_zd);
  9.  
  10. $plik = "duze/$nr_zdjecia[0].jpg"; //deklaracja ścieżki do pliku
  11. $test = file_exists($plik); //sprawdzenie czy plik istnieje
  12.  
  13. if (!$test) //jeżeli plik nie istnieje (zmienna $test=FALSE)
  14. {
  15. echo ("<a href='max.php?q=$nr_zdjecia[0]'><div id='img'><img src='images/brak.gif' alt='Brak obrazka na serwerze'></div></a>"); //informacja o braku pliku na serwerze
  16. }
  17. else
  18. {
  19. echo ("<a href='max.php?q=$nr_zdjecia[0]'><div id='img'><img src='m$nr_zdjecia[0].html' alt='Zdjęcie nr $nr_zdjecia[0]';><br>");
  20.  
  21. $podpis_miniatury = mysql_query("SELECT $opis FROM $tabela WHERE $nr LIKE '$nr_zdjecia[0]'"); //<<<<<<<<<<<<<<<TO JEST FUNKCJA MAJĄCA WYŚWIETLIĆ PODPIS>>>>>>>>>>>>>>>>>>>
  22. echo $podpis_miniatury;
  23.  
  24. echo ("</div></a>");
  25. }
  26. }


WYWOŁANIE FUNKCJI W DALSZEJ CZĘŚCI

  1. while ($row=mysql_fetch_array($wynik, MYSQL_BOTH)) {
  2.  
  3. echo ("");
  4. echo (obrazki($row[10]));
  5. echo ("");
  6.  
  7. }
  8.  
  9. echo ("</div>");


Mam nadzieję że to, co napisałem, jest w miarę zrozumiałe.
piotrex41
A może tak?
  1. $podpis_miniatury = mysql_query("SELECT `opis` FROM `tabela` WHERE `nr` = '".$nr_zdjecia[0]."'");
herne
To nic nie daje - zapis w takiej formie jak moja, czy też w apostrofach, daje dokładnie taki sam rezultat.
Już wcześniej napisałem, że moja wersja działa jeśli umieścić ją poza funkcją, ale chodzi o to, że to w niej generowany jest kod, który umożliwia wyświetlanie obrazków, a to właśnie pod nimi (każdy obrazek w osobnym divie) chcę dodawać podpisy. Jeśli zamiast tego zapytania wstawię zwykłe
  1. echo $nr_zdjecia[0];

to pod każdym zdjęciem wyświetli się jego numer, ale ja chcę opis wyciągany przez zapytanie z bazy...
piotrex41
To czemu nie dopiszesz pobierania opisu z bazy do zapytania pobierającego numer zdjęcia? Przecież to jedna tabela (o ile się nie mylę), więc spokojnie możesz pobrać obie dane jednym zapytaniem.
mmmmmmm
Pewnie gdybyś wyświetlił mysql_error() to byś wiedział o co chodzi. Sądzę, że o widoczność zmiennych globalnych w funkcji...
herne
W weekend się tym nie zajmowałem, dziś próbowałem na nowo... ciągle nie mogę tego ugryźć. Jeśli dodam zapytanie w funkcji, to nic się nie pojawia (błędnego także), więc prawdopodobnie wynik jest, ale pusty; przy dodaniu zapytania poza funkcją, jako wynik pokazuje się komunikat o niezdefiniowanej zmiennej, czyli funkcja działa "sobie", nie pobierając zmiennych z reszty kodu. Pewnie tak właśnie powinno być, ale szukam sposobu żeby to połączyć.
franki01
Błąd na błędzie.

1.
  1. $podpis_miniatury = mysql_query("SELECT $opis FROM $tabela WHERE $nr LIKE '$nr_zdjecia[0]'");

Nigdzie nie masz zadeklarowanej zmiennej $opis, $nr i $tabela. Jeżeli masz to ustawione poza funkcją, użyj:
  1. global $opis, $tabela, $nr;

Jeżeli mają to być pola, zapytanie powinno wyglądać tak:
  1. $podpis_miniatury = mysql_query("SELECT `opis` FROM `tabela` WHERE `nr` LIKE '$nr_zdjecia[0]'");


2.
  1. echo $podpis_miniatury;

Tym sposobem wyświetalsz wynik mysql_query. Jeżeli jest pusty, zapewne wynosi false, ponieważ mysql_query zwrócił błąd. Zamiast tej linijki, powinieneś jeszcze użyć mysql_fetch_assoc():
  1. $podpis_row = mysql_fetch_assoc($podpis_miniatury);
  2. echo $podpis_row['podpis'];
herne
Dostajesz "pomógł" bo w końcu po drobnej modyfikacji wg Twoich uwag w końcu zadziałało jak powinno.
Generalnie chodziło tylko o te dwie linijki:
  1. $podpis_row = mysql_fetch_assoc($podpis_miniatury);
  2. echo $podpis_row['opis'];

Wielkie dzięki!
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.