W sumie to się trochę spóźniłem - Robal okazał się szybszy ;) Ale tak dla formalności wyjaśnię Ci w czym robiłeś błąd. Pocieszające jest to, że szliśmy w dobrym kierunku, więc jeszcze kilka prób i byśmy doszli razem do rozwiązania :)
Dobre jest to, że w ostatnim kodzie dałeś całość w "pierwszych" klamrach (linie 2-8), przez co całość się wykonywała za każdym przebiegiem pętli while.
Natomiast nadal nie do końca czaisz, jak działa ten if.
Ponieważ Robal/ @stivens podał rozwiązanie, więc najprościej będzie, jak na jego podstawie wyjaśnię, jak to działa.
- linia 1 jest pętlą, która pobiera "porcję" danych, a następnie się wykonuje kod zawarty w klamrach (linie 2-9). W chwili, w której zostaną pobrane wszystkie wartości z bazy, pętla
while się zakończy, a program będzie się dalej wykonywać od linii 12.
- linia 2 wypisuje
<option - za każdym razem tak trzeba zacząć wypisywanie nowej pozycji, niezależnie czy będzie ona selected czy nie. Początek każdego elementu listy samochodów jest taki sam
- linie 4-6 wykonują sprawdzenie, czy obecna marka jest tą, której szukasz. Zauważ, że nadal jesteśmy "wewnątrz" elementu
<option - jeśli mamy dodać informację o tym, że dana pozycja jest zaznaczona/aktywna, to musimy to zrobić wewnątrz tego tagu. I tutaj był Twój błąd - chciałeś robić sprawdzenie po zamknięciu tagu, przez co wygenerowany przez Ciebie kod HTML byłby błędny. Poprawna postać to <option selected>XXX</option>, natomiast to, co byłeś w stanie uzyskać wcześniej miałoby postać <option>XXX</option>selected. Czy teraz rozumiesz o co chodzi i dlaczego Twój if był w nieodpowiednim miejscu?
- linia 8: tutaj zamykamy tag
<option> (zamknięcie wygląda tak samo, niezależnie od tego, czy tag posiada atrybut selected), następnie wypisujemy markę auta, a na końcu wstawiamy tag zamykający </option>.
Czy teraz wszystko jest jasne, czy jeszcze chciałbyś, żeby coś Ci wyjaśnić?