Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlenie w selectach danych uprzednio zapisanych w bazie
Forum PHP.pl > Forum > Przedszkole
maza66
Witam.
Chcę wyświetlić uprzednio wybrane i zapisane w bazie dane, ale z możliwością ich ponownej edycji/wyboru z listy/.
Mam funkcję jn:
  1. <?php
  2. function klienci()
  3. {
  4. global $connect;
  5. $wynik='<option value=""></option>';
  6. $query="SELECT id, klient_id, status FROM klienci WHERE status='PROD'";
  7. $result=mysqli_query($connect, $query);
  8.  
  9. if($result)
  10. {
  11. while($dat=mysqli_fetch_assoc($result))
  12. $wynik.='<option value="'.$dat['klient_id'].'">'.$dat['klient_id'].'</option>';
  13. }
  14. return $wynik;
  15. }
  16.  
  17. // wyświetlam listę
  18. <form method="POST" action="">
  19. ...
  20. <input id="wybrany" type="hidden" value="'.$row['klient'].'"><select name="klient" size="1">'.klienci().'</select>
  21. ...
  22. </form>
  23. ?>


I dzięki poniższemu skryptowi na liście wyświetla się zapisany w bazie klient, czyli wszystko jest ok.

[JAVASCRIPT] pobierz, plaintext
  1. <script>
  2. $( document ).ready(function() {
  3. $('option').each(function(){
  4. if (this.value == $('#wybrany').val()){
  5. this.setAttribute('selected', 'selected');
  6. }
  7. });
  8. });
  9. </script>
[JAVASCRIPT] pobierz, plaintext


Ale problem pojawia się jak chciałbym zrobić to samo kilka razy, np: dodając analogiczne funkcje klienci_2() , klienci_3()
(plus powielone skrypty #wybrany2 i #wybrany3 ) i potem:

  1. <input id="wybrany" type="hidden" value="'.$row['klient'].'"><select name="klient" size="1">'.klienci().'</select>
  2. <input id="wybrany2" type="hidden" value="'.$row['klient2'].'"><select name="klient2" size="1">'.klienci_2().'</select>
  3. <input id="wybrany3" type="hidden" value="'.$row['klient3'].'"><select name="klient3" size="1">'.klienci_3().'</select>


Tak utworzone listy wyświetlają "losowo" zapisane w bazie dane po każdym odświeżeniu.
Gdzie tkwi błąd?
nospor
Czy ja dobrze widze? Generujesz liste klientow w SELECT/OPTION a potem przy pomocy JS zaznaczasz wlasciwy po wyswietleniu strony?
Przeciez takie rzeczy sie robi na etapie generowania tego SELECT/OPTION i juz js sie do tego nie uzywa. Poprostu dla wybranego option ustawiasz selected i z banki

<option ..... selected="selected">....</option>

przenosze
maza66
A czy Twoje rozwiązanie nie dotyczy przypadkiem selectów zamkniętych? Czyli takich gdzie są na sztywno ustawione np. 4 opcje i koniec.
Bo w moim przypadku opcje selecta pobierane są z bazy, która może być cały czas rozbudowywana i zmieniana.
nospor
nie, to doczy kazdego rozwiazania czy to statyczne czy dynamiczne. Nikt ci nie broni dynamicznie zrobic OPTION z selected="selected" gdy trzeba smile.gif
maza66
Poratujesz jakimś przykładem?
nospor
  1. while($dat=mysqli_fetch_assoc($result)){
  2. if ($dat['klient_id'] === $id_do_zaznaczenia) {
  3. // jesli to jest twoj klient co szukasz, to dodajesz dla niego selected="selected"
  4. $wynik.='<option value="'.$dat['klient_id'].'" selected="selected">'.$dat['klient_id'].'</option>';
  5. } else {
  6. $wynik.='<option value="'.$dat['klient_id'].'">'.$dat['klient_id'].'</option>';
  7. }
  8. }


Banalne, nieprawdaz?

No, ale zebys nie mial za latwo to teraz sam wymysl skad wziasc $id_do_zaznaczenia
maza66
Dla mnie to takie banalne nie było... ;-) Ale udało się :-) Wielkie dzięki!

Jeszcze jedno pytanie... Da się coś takiego zrobić?

  1. <input type="text" name="klient" value="<?php echo ($klient !== '') ? ''.$klient.'' : klienci() ; ?>"></td>


Czyli jeżeli nie istnieje zmienna $klient to wyświetla funkcję klienci().
aras785
  1. <input type="text" name="klient" value="<?= isset($klient) && $klient !== '' ? $klient : klienci() ?>">


lub

  1. <input type="text" name="klient" value="<?= !empty($klient) ? $klient : klienci() ?>">
maza66
Niestety nie wyświetla się poprawnie -> w polu input wyświetla "<option value=..."
Może przyczyna leży w konstrukcji wyświetlania funkcji
  1. $wynik.='<option value="'.$dat['klient_id'].'">'.$dat['klient_id'].'</option>';
trueblue
if klient pusty{
select+klienci()
}
else{
input+klient
}
maza66
Dzięki! O to chodziło.
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.