Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP HTML select option
Forum PHP.pl > Forum > PHP
gucio1
Witam,
mam następujący problem.

Mam formularz gdzie wypełnia się kilka danych inputami a ostatnią opcję wybiera się z listy selected.
Każdy input ma walidacje i zapamiętuje co było wybrane w razie błędów przy wpisywaniu.
Chciałbym żeby select też zapamiętywało wybór.
Dane do select podciągnięte są z bazy i ich liczba stale rośnie.

Normalnie zapisuje wszystkie podane hasła w inputach do zmiennych sesyjnych a potem je wyświetlam w zależności od tego czy istnieją.
Jak to wygląda w wypadku select? wiem że jest opcja "selected" w optionie ale nie wiem, musiał bym sprawdzać warunkiem co było wybrane i potem w zależności dopisywać do którejś z opcji "selected"?

Jest na to jakiś prosty sposób?

Pozdrawiam.
nospor
Cytat
Jak to wygląda w wypadku select? wiem że jest opcja "selected" w optionie ale nie wiem, musiał bym sprawdzać warunkiem co było wybrane i potem w zależności dopisywać do którejś z opcji "selected"?
Dokladnie tak
gucio1
Mam coś takiego:

Pobieram wzystkich użytkowników z bazy
  1.  
  2. $pobierz = $polaczenie->query("SELECT * FROM uzytkownicy WHERE user='1' ORDER BY nazwisko ASC ");
  3.  
  4. echo '<select name="osobaAdmin" class="form-control">';
  5. while ($row = $pobierz->fetch_assoc()) {
  6. $nazwa = $row['nazwisko'] .' '.$row['imie'];
  7. $zapis = '<option>' . $nazwa. '</option>';
  8.  
  9. echo $zapis;
  10. }
  11. echo '</select>';
  12.  


  1.  
  2. $pobierz = $polaczenie->query("SELECT * FROM uzytkownicy WHERE user='1' ORDER BY nazwisko ASC ");
  3.  
  4.  
  5. echo '<select name="osobaAdmin" class="form-control">';
  6. while ($row = $pobierz->fetch_assoc()) {
  7. $nazwa = $row['nazwisko'] .' '.$row['imie'];
  8. $zapis = '<option>' . $nazwa. '</option>';
  9.  
  10. if (isset($_SESSION['fr_osobaAdmin'])) {
  11. $zapis = '<option>'.$_SESSION['fr_osobaAdmin'].'</option>';
  12. unset($_SESSION['fr_osobaAdmin']);
  13. }
  14.  
  15.  
  16. echo $zapis;
  17. }
  18. echo '</select>';
  19.  



Działa bez selected. Czy to jest w porządku?

Jednak nie działa tak jak powinno.
Po pierwsze na 1 miejsce na liście wskakuje mi to co było wybrane przed wysłaniem formularza a potem jest też do wyboru jeszcze raz na swoim miejscu.
Po drugie nie usuwa mi zmiennej sesyjnej.
Po trzecie po wysłaniu formularza nie ma wszystkich opcji do wyboru które powinny być.
nospor
Dostales odpowiedz jak to powinno byc zrobione. Czemu kombinujesz jak kon pod gorke?
Pyton_000
zobrazuję ci to

IF saved_value
EQUAL curent_value_from_while
THEN add "selected"
gucio1
Dobra, chyba śmiga wink.gif. Daj znać czy tak powinno być.
  1.  
  2. $pobierz = $polaczenie->query("SELECT * FROM uzytkownicy WHERE user='1' ORDER BY nazwisko ASC ");
  3.  
  4. echo '<select name="osobaAdmin" class="form-control">';
  5. while ($row = $pobierz->fetch_assoc()) {
  6. $nazwa = $row['nazwisko'] .' '.$row['imie'];
  7.  
  8. $zapis = '<option>' . $nazwa. '</option>';
  9.  
  10. if($nazwa == $_SESSION['fr_osobaAdmin']){
  11. $zapis = '<option selected>' . $nazwa. '</option>';
  12. unset($_SESSION['fr_osobaAdmin']);
  13.  
  14. echo $zapis;
  15. }
  16. echo '</select>';
  17.  
Pyton_000
Może być, tylko zgubiłeś } po unset();
viking
Możesz trochę poprawić czytelność nie dublując przy okazji kodu:

  1. echo '<select name="osobaAdmin" class="form-control">';
  2. $optionTemplate = '<option %s>%s</option>';
  3. foreach ($a as $row) {
  4. $nazwa = $row['nazwisko'] .' '.$row['imie'];
  5. $selected = '';
  6. if ($x) {
  7. $selected = 'selected';
  8. }
  9. echo sprintf($optionTemplate, $selected, $nazwa);
  10. }
  11. echo '</select>';
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.