Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Jak wybierać z bazy po polu typu "date"
Forum PHP.pl > Forum > Przedszkole
naj
Mam problem z wybieraniem z bazy po dacie.
Otóż pomysł jest taki, żeby za pomocą rozwijanej listy zawęzić zakres wyświetlanych dat. Użytkownik wybiera na formularzu dzień rok miesiąc początkowy i dzień rok miesiąc końcowy i powinny się wyświetlić dane z tego przedziału.

W bazie w odpowiednim polu przechowywane są daty w formiacie date: YYYY-MM-DD
Z danych pobranych z formularza tworzę string o tym formacie, np. 2008-5-29 jako datę początkową i 2009-5-20 jako datę końcową.

Sprawdzam, że moja data złożona z danych wybranych w formularzu równa się wpisanemu z klawiatury stringowi '2009-5-29'. No i z tym stringiem wpisanym z klawiatury wynik zapytania przedział dat w wyniku zapytania jest odpowiednio ograniczony a z tym złożonym z danych z formularza - nie. Dlaczego, kurczę?
korro
Wklej zapytanie, będzie łatwiej. Marzeniem byłby cały skrypt.
naj
heh, mi sie nigdy tych rzeczy nie chce czytac, ale prosze bardzo :]

Więc na początku mam formularz, do wybierania i submitowania daty początkowej i końcowej - tu we fragmentach

  1. echo"<form action='platnosci.php' method='POST'/>";
  2. echo"<select name='s_dzien'>...<option value=31>31</option> </select>";
  3.  
  4. echo"<select name='s_miesiac'> <option value=1>styczeń</option>...<option value=12>grudzień</option> </select>";
  5.  
  6. echo"<select name='s_rok'> <option value=2008>2008</option> </select>";
  7.  
  8. echo"<select name='e_dzien'> <option value=1>1</option>...<option value=31>31</option></select>";
  9.  
  10. echo"<select name='e_miesiac'> <option value=1>styczeń</option> <option value=12>grudzień</option> </select>";
  11.  
  12. echo"<select name='e_rok'> <option value=2008>2008</option> </select>";
  13.  
  14. echo"<input type='submit' value='filtrowanie płatności'>";
  15. echo"</form>";


następnie tworzę stringa z danych przesłanych formularzem:
  1. $s_data=$_POST['s_rok']."-".$_POST['s_miesiac']."-".$_POST['s_dzien'];
  2. $e_data=$_POST['e_rok']."-".$_POST['e_miesiac']."-".$_POST['e_dzien'];


i wysyłam zapytanie do bazy:

  1. $zapytanie="SELECT sp.dataplatnosci, sp.kwotaplatnosci FROM platnosci WHERE sp.dataplatnosci >= ".$s_data." AND sp.dataplatnosci <= ".$e_data;


dodam, że zapytanie w którym używam wartości wpisanych z klawiatury, tj.

  1. $zapytanie="SELECT sp.dataplatnosci, sp.kwotaplatnosci FROM platnosci WHERE sp.dataplatnosci >= '2008-5-10' sp.dataplatnosci <= '2005-5-25';


działa

no i sprawdzenie

'2005-5-25'==$s_data;

wyrzuca mi true przy wyborze odpowiedniej daty
Daimos
lektura na wieczór:
http://dev.mysql.com/doc/refman/5.1/en/dat...-functions.html
naj
Rozwiązaniem jest wzięcie value w
  1. <option value=31>31</option>
formularza w cudzusłów, o
  1. <option value='31'>31</option>


Stworzenie stringa bez kresek:

  1. $s_data=$_POST['s_rok'].$_POST['s_miesiac'].$_POST['s_dzien'];
  2. $e_data=$_POST['e_rok'].$_POST['e_miesiac'].$_POST['e_dzien'];


i można porównywać

http://dev.mysql.com/doc/refman/5.0/en/using-date.html
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.