Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Lista rozwijana i zapamiętanie wyboru.
Forum PHP.pl > Forum > Przedszkole
Szunaj85
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>
nospor
Oczywiście. W zależności od wartości w post poprostu zaznaczaj od razu dany option
b4rt3kk
  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.
bostaf
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.
Szunaj85
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.
!*!
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.
bostaf
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?
Szunaj85
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ć?
!*!
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.
bostaf
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>
Szunaj85
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.
bostaf
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ę".
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-2024 Invision Power Services, Inc.