Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z Drop-Down List + MySQL
Forum PHP.pl > Forum > PHP
switch301
Witam.

Jestem raczkujący w temacie PHP, i natknąłem się na problem z którym nie potrafię sobie poradzić. Mianowicie chodzi o to że mam pewną drop-down list do której wczytują się w odpowiednie pola dane z bazy. W czym więc problem? Już tłumaczę. W momencie gdy kod wygląda tak (zaraz wyjaśnię po co te pierwsze linijki):

  1. $for=$_REQUEST['for'];
  2. $query1 = "SELECT IdForum FROM Forums WHERE TypeOfForum = '$for'";
  3. $result1 = mysql_query($query1) or die ("Query failed");
  4. $query = "SELECT distinct Login FROM JoinFU";
  5. $result = mysql_query($query) or die("Query failed");
  6. print "<select name=usrname>\n";
  7. while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
  8. foreach ($line as $col_value) {}
  9. print "<option>$col_value\n";
  10. }
  11. $wybusr=$_REQUEST['usrname'];
  12. print "</select>\n";


wszystko działa i z listy można wybrać dowolnego użytkownika. Problem w tym że ja chciałbym tylko tych którzy są przypisani do danego forum (stąd 3 pierwsze linie kodu). Stwierdziłem że trzeba zmienić zapytanie z

  1. $query = "SELECT distinct Login FROM JoinFU;

na
  1. $query = "SELECT distinct Login FROM JoinFU WHERE IdForum = '$result1'";


Wydawać by się mogło że to załatwi sprawę, skoro przedstawiony SELECT w MySQLowej konsoli zwraca co powinien. Jeśli natomiast chodzi o drop-down listę, niestety już nie. Po tej małej zmianie zamiast kilku użytkowników wyświetla mi się tylko i wyłącznie jeden, i w każdym przypadku ten sam. Ktoś wie o co może chodzić? Z góry bardzo dziękuję za pomoc
wizu
Jeśli tak bardzo chcesz to zrobić w ten sposób, to po pierwsze musisz pobrać wyniki pierwszego zapytania z "resource". Zauważ, że po wykonaniu tego kodu:
  1. $query1 = "SELECT IdForum FROM Forums WHERE TypeOfForum = '$for'";
  2. $result1 = mysql_query($query1) or die ("Query failed");

A przed tym:
  1. $query = "SELECT distinct Login FROM JoinFU WHERE IdForum = '$result1'";

W zmiennej $result1 nie masz jeszcze wyników zapytania, masz tylko referencję do źródła wyników z mysql. Musisz to jeszcze przemielić, np po Twojemu:
  1. $ids = array();
  2. while ($line = mysql_fetch_array($result1, MYSQL_ASSOC)) {
  3. $ids[] = $line['IdForum'];
  4. }


I dopiero teraz wykonać zapytanie pobierające loginy, ale w tej formie:
  1. $query = "SELECT distinct Login FROM JoinFU WHERE IdForum IN (" . implode(',', $ids) . ")";


To i tak nie jest dobre rozwiązanie, ale podałem ci jako przykład, żebyś zrozumiał gdzie miałeś błąd. Możesz to wykonać w jednym zapytaniu, najprostsza jego forma to:
  1. SELECT Login FROM JoinFU WHERE IdForum IN (SELECT IdForum FROM Forums WHERE TypeOfForum = '$for')


dobrze by było również przefiltrować najpierw $for
switch301
Stary, jesteś wielki smile.gif Rozumiem błąd, mało tego, Twoje rozwiązanie znakomicie się sprawdziło. Wszystko działa, dziękuję!
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.