![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 15.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Próbuję odfiltrować niepotrzebne dane z bazy danych. Filtracja odbywa się przez wybranie daty, numer użytkownika jest pobierany automatycznie po zalogowaniu. Kod wygląda tak:
Kiedy nie wpiszemy żadnego ograniczenia wyrzuca dane jakie powinien, ale gdy wpiszę datę od ($searchtext) lub do ($searchtext2) lub obie nie zwraca żadnych wyników. Daty w bazie są w formacie rrrr-mm-dd gg:mm:ss, ale dodałem %, więc nie powinno być z tym problemu. Po wpisaniu pokazuje prawidłowe daty (wcześniej wpisane). Będę wdzięczny za pomoc. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Wystarczy, że sobie odpowiesz na pytanie, co Ci generuje następujący kod w treści zapytania i będziesz wiedział, czemu nie działa:
Kod '.%$searchtext%.' |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 15.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Generuje datę w postaci rrrr-mm-dd, a % jest bo w bazie data jest razem z godziną.
Ten post edytował rafalekjan 9.12.2010, 11:21:26 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
1. Zamiast kombinować ustaw kolumnę time na TIMESTAMP'a (no i poczytaj na google jak tego używać w praktyce)(IMG:style_emoticons/default/smile.gif)
2. Lub:
3. Lub (nie wiem czy zadziała ;p):
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 15.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Nic to nie zmieniło.
Kiedy wpisuję jakiekolwiek ograniczenie datowe nie wyrzuca wyników: (IMG:http://img189.imageshack.us/img189/4212/jedenn.png) Dla upewnienia dane w tabeli mają strukturę: (IMG:http://img143.imageshack.us/img143/3059/dwav.png) I nawet po zmianie na timestamp nie zmieniło się wyszukiwanie. Dane w tabeli: (IMG:http://img262.imageshack.us/img262/8885/trzy.png) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Zabrzmię może trochę totalitarnie, ale jak osoba ze 128 "Pomógł" pisze Ci, żebyś się przyjrzał temu, co wpisujesz, to Ty się przyglądasz i usuwasz wątpliwe elementy. I usuwasz ZARÓWNO znaki procenta, jak i znajdujące się obok nich KROPKI. Twoje uzasadnienie nie pokrywa się bowiem z rzeczywistością i tym, jak MySQL działa dla dat.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 15.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ale przecież tak zrobiłem:
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
OK, widzę że nieco opornie to idzie. We wszystkich przypadkach doklejasz nadmiarowe kropki wraz ze zmiennymi do wartości, którą baza ma Ci sprawdzić. A to dlatego, że masz burdel w kodzie: raz używasz apostrof, innym razem cudzysłowów i się gubisz w tym, próbując wstawiać zmienne '.$foo.' do ciągów ograniczonych przez cudzysłowy i pewnie vice versa. A jeśli tak zrobisz, kropki stają się integralną częścią zapytania i są wysyłane do bazy. Zatem próbujesz dane liczbowe przyrównywać nie do np. 5, a do .5.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 15.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ok, działa po usunięciu wszystkich kropek.
Więc kiedy mogę je stosować a kiedy nie? Teraz wszędzie zrobiłem pojedyncze cudzysłowy i działa bez kropek. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Kropka to operator łączenia ciągów tekstowych i stosujesz je wtedy, kiedy chcesz połączyć dwa ciągi tekstowe, a to możesz zrobić jedynie będąc aktualnie poza ciągiem tekstowym. Apostrof nie zamyka ciągu otwartego cudzysłowem i vice versa.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 07:30 |