Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+mysql] formularz - select [nie działa]
Forum PHP.pl > Forum > Przedszkole
rumpel
pokłony... winksmiley.jpg

Od kilku dni walczę z tym ustrojstwem i jakoś sobie poradzić nie mogę. Efekt jaki chcę uzyskać to:
- z rozwijanego menu chcę wybrać opcję wg. której wyświetli mi się tabelka z bazy danych, czyli chcę dla przykładu wyświetlić dane za rok 2005, to wybieram z menu rozwijanego ten rok i takie dane mi się ładują.
- pozycje w tym menu rozwijanym mają się automagicznie pojawiać, czyli jeśli w bazie dojdzie kolejny rok... to w menu wyboru automatycznie się pojawi (czyli czyta z bazy...)

Poniżej mam przykładowy skrypt, który "prawie działa", bowiem owszem w menu rozwijanym pojawia się prawidłowo rok 2005 i 2006 i po kliknięciu strona się przeładowuje, to niestety cały czas mam tabelę z danymi za rok 2006. Kiedy przed samym zapytaniem do bazy ustawiłem ręcznie zmienna $rok na rok 2005 to wyświetliło poprawnie rok 2005.. więc jest jakiś problem z tym rozwijanym menu, ale niestety z braku doświadczenia i wiedzy niestety nie widzę swojego błędu.

ps. wyświetliłem jako kod html, ponieważ jako kod php ma na końcu niektórych linii "/" <- takie znaczki. smile.gif

ps. 2. rok w bazie danych nie jest jako data, lecz int(4) ponieważ jest on dodawany ręcznie.
  1. //podzial na lata:
  2. //najstarsze
  3. $pytam = "SELECT rok as Y FROM statystyka ORDER BY rok ASC LIMIT 1";
  4.  
  5. $wynik = mysql_query($pytam);
  6. $ile = mysql_num_rows($wynik);
  7. $wiersz = mysql_fetch_array($wynik);
  8. $najstarsze = $wiersz["Y"];
  9. //najnowsze
  10. $pytam = "SELECT rok as Y FROM statystyka ORDER BY rok DESC LIMIT 1";
  11. $wynik = mysql_query($pytam);
  12. $ile = mysql_num_rows($wynik);
  13. $wiersz = mysql_fetch_array($wynik);
  14. $najnowsze = $wiersz["Y"];
  15.  
  16. //rysujemy rozwijare
  17. if(!empty($najnowsze) && !empty($najstarsze))
  18. {
  19. echo "<form method=\"post\" action=\"index.php?id=98\" name=\"strona\">";
  20. echo "\nPokaż statystykę z roku: ";
  21. echo "\n<select name=\"rok\" onchange=\"strona.submit();\">";
  22. for($i=$najnowsze; $i >= $najstarsze; $i-- )
  23. {
  24. echo "\n<option value=\"$i\" ";
  25. if($i == $rok)
  26. {
  27. echo "selected";
  28. }
  29. echo ">$i </option>";
  30. }
  31. echo "\n</select>";
  32. echo "\n<input type=\"submit\" value=\" pokaż \" />";
  33. echo "<br /><br />";
  34.  
  35. }
  36. // $rok = 2005;
  37. $pytam = "SELECT * FROM statystyka WHERE rok=$rok ORDER BY id DESC";
  38. $wynik = mysql_query($pytam);
  39. $ile = mysql_num_rows($wynik);
macek
z tego co widzę to nigdzie nie przepisujesz zmiennej $_POST['rok'] do $rok smile.gif
rumpel
hmm... faktycznie nic takiego nie mam... smile.gif a jak to zrobić ?
Lonas
  1. <?php
  2. // wybieram lata z bazy
  3.  
  4.  
  5. function pokaz_lata()
  6. {
  7. $result = mysql_query("select rok from statystyka order by rok asc");
  8. while($dane = mysql_fetch_array($result))
  9.  echo '<option value="'.$dane[0].'">'.$dane[0].' </option>';
  10. }
  11.  
  12. //wyswieltam 
  13.  
  14. echo' <select name="rok"> ';
  15. pokaz_lata();
  16. echo'  </select> ';
  17.  
  18. // wyslam.. odbieram metoda post
  19.  
  20. $rok = $_POST['rok'];
  21.  
  22. // zapytanie o dane z danego roku
  23.  
  24. $result_1 = mysql_query("SELECT * FROM statystyka WHERE rok=$rok ORDER BY id DESC");
  25. ?>
rumpel
Lonas dzięki smile.gif

co prawda zostałem przy swoim skrypcie, ponieważ twój wyświetlał mi 12 razy rok 2005 i 12 razy rok 2006 (tyle razy występuje w bazie, bo tyle jest miesięcy). W swoim skrypcie poprostu dodałem linie

  1. <?php
  2. $rok = $_POST['rok'];
  3. ?>


i działa smile.gif z tym, że:
- teraz cały czas menu rozwija domyślnie ustawione jest na rok 2006 nawet jak wyświetlam rok 2005 to i tak menu rozwijane ustawia się na 2006.
- po wejściu na stronę jest ona pusta, bo trzeba wybrać rok, a ja chciałbym: żeby dane za rok najnowszy się wyświetlały... bo po to jest rozwijane menu, żeby ktoś sobie ewentualnie wybrał rok inny

EDIT:

drugi problem rozwiązałem:
  1. if($_POST['rok'])
  2. {
  3. $rok = $_POST['rok'];
  4. }
  5. else
  6. {
  7. $rok = $najnowsze;
  8. }
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.