Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]Lista rozwijana i zapamiętanie wyboru.
Szunaj85
post 9.10.2012, 16:05:42
Post #1





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


Witam,

Mam formularz i listę rozwijaną.
Czy da się za pomocą metody post zapamiętać wybór, tak aby przy weryfikacji lub po wysłaniu nie powracał do pierwszej pozycji?

Kod
<form name="form" action="test.php" method="post">
<select name="test">
    <option value="aaa">aaa</option>
    <option value="bbb">bbb</option>
    <option value="ccc">ccc</option>
    <option value="ddd">ddd</option>
    <option value="eee">eee</option>
</select>
<input type="submit" value="Wyślij" />
</form>


Ten post edytował Szunaj85 9.10.2012, 16:36:19


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
nospor
post 9.10.2012, 16:16:06
Post #2





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6296
Dołączył: 27.12.2004




Oczywiście. W zależności od wartości w post poprostu zaznaczaj od razu dany option


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
b4rt3kk
post 9.10.2012, 16:25:28
Post #3





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  1. function checkSelected($fieldValue, $selectName) {
  2. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  3. if ($fieldValue == $_POST[$selectName]) echo ' selected';
  4. }
  5. }


  1. <form action="form" action="test.php" method="post">
  2. <select name="test">
  3. <option value="aaa" <?php checkSelected('aaa', 'test'); ?>>aaa</option>
  4. <option value="bbb">bbb</option>
  5. <option value="ccc">ccc</option>
  6. <option value="ddd">ddd</option>
  7. <option value="eee">eee</option>
  8. <input type="submit" value="Wyślij" />
  9. </form>


Coś w tym stylu.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
bostaf
post 9.10.2012, 20:33:41
Post #4





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Cytat(Szunaj85 @ 9.10.2012, 17:05:42 ) *
Czy da się za pomocą metody post zapamiętać wybór, tak aby przy weryfikacji lub po wysłaniu nie powracał do pierwszej pozycji?

Tak jak napisali koledzy, da się. Ale się nie przyzwyczajaj. Już niedługo zadasz pytanie "co zrobić żeby formularz się nie submitowal przy odświeżaniu strony, żeby dane dwa razy do bazy nie leciały?", na co odpowiedzią będzie PRG, czyli zmienna POST = null przed wyświetleniem treści. Od razu zacznij kombinować z zapamiętywaniem w sesji lub ciastku.
Go to the top of the page
+Quote Post
Szunaj85
post 11.10.2012, 17:02:26
Post #5





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


Cytat(bostaf @ 9.10.2012, 21:33:41 ) *
Tak jak napisali koledzy, da się. Ale się nie przyzwyczajaj. Już niedługo zadasz pytanie "co zrobić żeby formularz się nie submitowal przy odświeżaniu strony, żeby dane dwa razy do bazy nie leciały?", na co odpowiedzią będzie PRG, czyli zmienna POST = null przed wyświetleniem treści. Od razu zacznij kombinować z zapamiętywaniem w sesji lub ciastku.
W zasadzie do tej pory u mnie listy rozwijane działały na sesjach.
Jednak problem jest taki, że działają do czasu aż zostanie wciśnięty przycisk wyślij czyli formularz zostanie wysłany wtedy traci te dane i wyświetla pierwsze pole z listy.
Myślałem, że post może być rozwiązaniem.


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
!*!
post 11.10.2012, 17:10:14
Post #6





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Cytat(bostaf @ 9.10.2012, 21:33:41 ) *
Tak jak napisali koledzy, da się. Ale się nie przyzwyczajaj. Już niedługo zadasz pytanie "co zrobić żeby formularz się nie submitowal przy odświeżaniu strony, żeby dane dwa razy do bazy nie leciały?", na co odpowiedzią będzie PRG, czyli zmienna POST = null przed wyświetleniem treści. Od razu zacznij kombinować z zapamiętywaniem w sesji lub ciastku.


A jaki miałby w tym cel, aby zapamiętywać cokolwiek w ciastku lub sesji? Po poprawnym wysłaniu formularza powinno lecieć przekierowanie.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
bostaf
post 11.10.2012, 19:38:27
Post #7





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Cytat(!*! @ 11.10.2012, 18:10:14 ) *
A jaki miałby w tym cel, aby zapamiętywać cokolwiek w ciastku lub sesji? Po poprawnym wysłaniu formularza powinno lecieć przekierowanie.

Zrozumiałem, że po wysłaniu (i przekierowaniu) na liście rozwijalnej ma być wybrana opcja zaznaczona przed wysłaniem. Czyli trzeba wybraną opcję jakoś zapamiętać, i na pewno nie w POST, bo po przekierowaniu POSTa już nie będzie. Czyli zostaje get, plik, baza, ciastko, sesja. Pierwsze trzy odpadają (jak dla mnie) bo są zbyt toporne do tego celu, czyli zostają ciastko i sesja - stworzone dokładnie w tym celu: do zapamiętywania zmiennych użytkownika. No nie?
Go to the top of the page
+Quote Post
Szunaj85
post 12.10.2012, 10:30:27
Post #8





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


Kogo tu posłuchać? ohmy.gif
Jak wcześniej już pisałem u mnie sesje działają do czasu aż zostanie wciśnięty przycisk wyślij czyli formularz zostanie wysłany wtedy traci te dane.
Zauważyłem, że likwiduje ją ten kawałek kodu
  1. $_SESSION = $POST;
znajdujący się w warunku if gdy wiadomość wysłana. Da się ją jakoś uratować?


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
!*!
post 12.10.2012, 11:23:46
Post #9





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Cytat(Szunaj85 @ 12.10.2012, 11:30:27 ) *
Kogo tu posłuchać? ohmy.gif
Jak wcześniej już pisałem u mnie sesje działają do czasu aż zostanie wciśnięty przycisk wyślij czyli formularz zostanie wysłany wtedy traci te dane.
Zauważyłem, że likwiduje ją ten kawałek kodu
  1. $_SESSION = $POST;
znajdujący się w warunku if gdy wiadomość wysłana. Da się ją jakoś uratować?


A że tak zapytam, po co Ci te informacje po wysłaniu formularza?

  1. if(isset($_POST))
  2. {
  3. $_SESSION = $_POST;
  4. }


Taki warunek postaw, bo teraz po wysłaniu jest kasowane, czyli POST zwraca null.

Ten post edytował !*! 12.10.2012, 11:24:00


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
bostaf
post 12.10.2012, 19:52:57
Post #10





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Cytat(Szunaj85 @ 12.10.2012, 11:30:27 ) *
Kogo tu posłuchać? ohmy.gif

Wszystkich smile.gif I poskładać do kupy wszystkie informacje smile.gif

Cytat(Szunaj85 @ 12.10.2012, 11:30:27 ) *
Jak wcześniej już pisałem u mnie sesje działają do czasu aż zostanie wciśnięty przycisk wyślij czyli formularz zostanie wysłany wtedy traci te dane.

Eeee, coś kłamiesz. Pewnie zapomniałeś na samym początku strony dać session_start().

No to masz gotowca, skleconego z tego co koledzy już napisali.
  1. <?php
  2. session_start(); // obowiązkowo na samym początku strony
  3. if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['test']))
  4. {
  5. $session['option_test'] = $_POST['test'];
  6. }
  7. function check_selected($field_value)
  8. {
  9. if($field_value === $_SESSION['option_test'])
  10. {
  11. echo ' selected';
  12. unset($_SESSION['option_test']);
  13. }
  14. }
  15. ?>
  16. <form name="form" action="test.php" method="post">
  17. <select name="test">
  18. <option value="aaa" <?php check_selected('aaa');?>>aaa</option>
  19. <option value="bbb" <?php check_selected('bbb');?>>bbb</option>
  20. <option value="ccc" <?php check_selected('ccc');?>>ccc</option>
  21. <option value="ddd" <?php check_selected('ddd');?>>ddd</option>
  22. <option value="eee" <?php check_selected('eee');?>>eee</option>
  23. </select>
  24. <input type="submit" value="Wyślij" />
  25. </form>


Ten post edytował bostaf 12.10.2012, 19:53:50
Go to the top of the page
+Quote Post
Szunaj85
post 14.10.2012, 18:22:17
Post #11





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


Cytat
Eeee, coś kłamiesz.
Tylko po co miałbym to robić?
Cytat
Pewnie zapomniałeś na samym początku strony dać session_start().
Absolutnie nie. snitch.gif
Dzięki za pomoc, na szczęście udało mi się rozwiązać problem, który rozwiązałem w inny sposób.


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
bostaf
post 14.10.2012, 18:26:39
Post #12





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Cytat(Szunaj85 @ 14.10.2012, 19:22:17 ) *
Tylko po co miałbym to robić?

Żarcik, zapomniałem dać ";)" wink.gif

Cytat(Szunaj85 @ 14.10.2012, 19:22:17 ) *
Dzięki za pomoc, na szczęście udało mi się rozwiązać problem, który rozwiązałem w inny sposób.

Jak? Pokaż nam, nie po to się dzielimy z Tobą wiedzą i pomysłami, żebyś nas spławiał zwykłym "udało mi się".
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 05:58