Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Lista rozwijana zapamiętanie wyboru
pietroff
post 14.04.2020, 13:02:21
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 11.03.2013

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


Witajcie,

raczkuję w php i próbuję napisać kalendarz z możliwością wyboru miesięcy. Wszystko działa nawet nieźle tylko chciałbym aby lista rozwijana zapamiętywała wybór i aby ustawiała się automatycznie na miesiąc który jest obecnie. Poniżej kod samej listy:

  1. $MonthNames = array(1=>'Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec','Lipiec','Sierpien','Wrzesień','Październik','Listopad','Grudzień');


  1. <form action="" method="post" class="center">
  2. <h3> Wybierz interesujący Cię miesiąc:&nbsp;&nbsp;&nbsp;
  3. <select name="wybMiesiecy" class="lista-rozwijana" >
  4. <?php
  5. for ($m=1; $m<=(12); $m++){
  6. echo '<option>'.$MonthNames[$m].'</option>';
  7. ?>
  8. </select>
  9. <input type="submit" name="wyslij" class="lista-rozwijana-button" value="Wyświetl wskazany miesiąc" />
  10. </h3>
  11. </form>

Go to the top of the page
+Quote Post
gino
post 14.04.2020, 13:25:46
Post #2





Grupa: Zarejestrowani
Postów: 319
Pomógł: 52
Dołączył: 18.02.2008

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


to raczej podstawy HTML-a niż php, prawidłowo powinno być:
Kod
<option value="watrosc" selected>nazwa_meisiąca</option>


gino

edit: jak chcesz bez parametru value określić które option ma być selected (wybrane)?

Ten post edytował gino 14.04.2020, 13:30:29
Go to the top of the page
+Quote Post
kreatiff
post 14.04.2020, 13:43:09
Post #3





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


Dodaj w pętli warunek na sprawdzanie liczby porządkowej miesiąca i jeśli się zgadza z bieżącym $m, to go zaznacz:
  1. for ($m = 1; $m <= 12; $m++) {
  2. $selected = $m == date('n') ? ' selected' : '';
  3. echo '<option value="' . $m . '"' . $selected . '>' . $MonthNames[$m] . '</option>';
  4. }
Go to the top of the page
+Quote Post
gino
post 14.04.2020, 13:56:27
Post #4





Grupa: Zarejestrowani
Postów: 319
Pomógł: 52
Dołączył: 18.02.2008

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


@kreatiff ja rozumiem, że osoba początkująca ale jeśli operuje tablicami, pętlami, to powinna chociaż w podstawowym stopniu opanować podstawy języka, czy instrukcje warunkowe i tag html-a, którym się posługuje, chyba lepiej pobudzić kreatiffność (smile.gif) naprowadzając na problem, niż dać gotowca zwłaszcza w rzeczach tak prostych.

gino
Go to the top of the page
+Quote Post
pietroff
post 14.04.2020, 14:00:53
Post #5





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 11.03.2013

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


Po zmodyfikowaniu kodu niestety ustawia mi się aktualny miesiąc czyli kwiecień ale nie można już zmienić na inny sadsmiley02.gif ciągle wraca do kwietnia sadsmiley02.gif
  1. <form action="" method="post" class="center">
  2. <h3> Wybierz interesujący Cię miesiąc:&nbsp;&nbsp;&nbsp;
  3. <select name="wybMiesiecy" class="lista-rozwijana" >
  4. <?php
  5. for ($m=1; $m<=(12); $m++){
  6. $selected = $m == date('n') ? ' selected' : '';
  7. echo '<option value="' . $m . '"' . $selected . '>' . $MonthNames[$m] . '</option>';
  8.  
  9. }
  10. ?>
  11. </select>
  12. <input type="submit" name="wyslij" class="lista-rozwijana-button" value="Wyświetl wskazany miesiąc" />
  13. </h3>
  14. </form>
Go to the top of the page
+Quote Post
gino
post 14.04.2020, 16:50:09
Post #6





Grupa: Zarejestrowani
Postów: 319
Pomógł: 52
Dołączył: 18.02.2008

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


robi dokładnie to, co chcesz, przed wysłaniem formularza ustawia aktualny miesiąc. Wybierz innych miesiąc, zrób obsługę w php po wysłaniu formularza i zobaczysz, że wybiera ten miesiąc który chcesz.
Przed tablicą miesięcy wklej ten kod i zobaczysz, że i kod i formularz działają ok. Poczytaj o $_POST:
Kod
if(isset($_POST['wybMiesiecy']))
echo $_POST['wybMiesiecy'];



gino

Ten post edytował gino 14.04.2020, 16:52:06
Go to the top of the page
+Quote Post
pietroff
post 16.04.2020, 07:39:50
Post #7





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 11.03.2013

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


W takiej formie działa bez zarzutu. Czy można tu coś poprawić zmienić? Czy jest dobrze?
  1. <form action="" method="post" class="center">
  2. <h3> Wybierz interesujący Cię miesiąc:&nbsp;&nbsp;&nbsp;
  3. <select name="wybMiesiecy" class="lista-rozwijana" >
  4. <?php
  5. for ($m=1; $m<=(12); $m++){
  6. if(isset($_POST['wybMiesiecy'])){
  7. $selected = $m == $_POST['wybMiesiecy'] ? 'selected' : '';
  8. }else{
  9. $selected = $m == date('n') ? ' selected' : '';}
  10. echo '<option value="' . $m . '"' . $selected . '>' . $MonthNames[$m] . '</option>';
  11.  
  12. }
  13.  
  14. ?>
  15. </select>
  16. <input type="submit" name="wyslij" class="lista-rozwijana-button" value="Wyświetl wskazany miesiąc" />
  17. </h3>
  18. </form>
Go to the top of the page
+Quote Post
nospor
post 16.04.2020, 11:39:59
Post #8





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




Mozna to poprawic. Teraz masz duplikacje w ustawianiu selected i o wiele za duzo logiki w tej banalnej petli FOR

  1. $toSelect = isset($_POST['wybMiesiecy']) ? $_POST['wybMiesiecy'] : date('n');
  2. for ($m=1; $m<=12; $m++){
  3. $selected = $m == $toSelect ? 'selected' : '';
  4. echo '<option value="' . $m . '"' . $selected . '>' . $MonthNames[$m] . '</option>';
  5.  
  6. }

Prawda ze czytelniej?


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

"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
pietroff
post 17.04.2020, 14:07:03
Post #9





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 11.03.2013

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


Bardzo dziękuję wszystkim za pomoc smile.gif
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 - 20:21