![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.04.2015 Ostrzeżenie: (0%) ![]() ![]() |
Witam kolegów,
mam problem, a mianowicie zapytanie do DB nie zwraca żadnego wyniku ani błędu. Gdy wpiszę w miejsce zmiennej $data2 datę z palca np. "2020-11-10" wszystko hula. Gdy pobieram z formularz nie działa. . CODE
pomóżcie proszę. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 594 Pomógł: 66 Dołączył: 22.02.2008 Skąd: Dublin Ostrzeżenie: (0%) ![]() ![]() |
A co zaraca formularz
Wlacz sobie raportowanie bledow Ten post edytował dublinka 21.11.2020, 13:08:13 -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 799 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
żebyś wiedział gdzie szukać, to dwie rzeczy ze zmienną $data2 są źle, jedna w definicji zmiennej, druga w samym zapisie zapytania. A tak poza tematem to ten post w ogóle nie w tym miejscu.
Ten post edytował gino 21.11.2020, 14:03:46 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.04.2015 Ostrzeżenie: (0%) ![]() ![]() |
Formularz przesyła datę, która ma być porównana klauzulą WHERE z datą w DB i zgodnie z relacją utworzoną w zapytaniu zwrócić zawartość odpowiednich rekordów.
Jeśli mogę, to proszę o więcej wskazówek, studia informatyczne skończyłem ponad 10 lat temu i przez ten czas nie zajmowałem się programowaniem. Teraz musze się uczyć tego od nowa. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Data w mysql-u ma okreslony format i jest wyrażona stringiem. W definicji zmiennej format daty jest zły, bo dodałeś dwa tagi br, wyrzuć je. W zapytaniu ta zmienna nie jest zaprezentowana jako string. Poczytaj w php czym różni się cudzysłowów od apostrofu.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.04.2015 Ostrzeżenie: (0%) ![]() ![]() |
ok, dzięki za podpowiedź. Wydawało mi się, że gdy użyje metody ->format klasy DateTime to php sformatuje zmienną do odpowiedniego typ. Po usunięciu tagów, teraz wyświela tylko daty wyzerowane. Wygąlą da na to, że do DB wysyła "1970-01-01"
CODE _rejestr = rewizje.Id_rejestr AND rewizje.Data_nast_rew <='.$data2); $wybierzWinde->execute(); $rezultat = $wybierzWinde->fetchALL(PDO::FETCH_ASSOC); foreach ($rezultat as $row) { echo ('<tr><td>'.$row['Adres'].'</td><td>'.$row['Rodzaj'].'</td><td>'.$row["Data_nast_rew"].'</td></tr></br>'); } ?> [/php] |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
W Twoim zapytaniu do BD przesłane jest np.
Kod rewizje.Data_nast_rew >=2020-11-04 To nie jest string. Dlatego wyrzuca wszystkie daty jakie znajdzie Ten post edytował gino 21.11.2020, 16:55:11 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
W jaki sposób się zabezpieczasz jeżeli format daty jest nieprawidłowy? Tak, pytanie mające tylko dac do myślenia.
-------------------- |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.04.2015 Ostrzeżenie: (0%) ![]() ![]() |
Jak wobec tego powinienem zaklarować tę zmienną? Jak ją przekonwretować na string?
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
- new DateTime otoczone blokiem try / catch
- dane z post do zapytania więc mają być POPRAWNIE zabezpieczone (prepare ma zawierać placeholder a nie dane z POST) - data jest stringiem więc w zapytaniu kolumna = '2020-01-01' albo funkcja DATE() w mysql. Jak zrobisz poprawnie pkt wyżej będzie dobrze. Ten post edytował viking 21.11.2020, 17:52:54 -------------------- |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.04.2015 Ostrzeżenie: (0%) ![]() ![]() |
W jaki sposób się zabezpieczasz jeżeli format daty jest nieprawidłowy? Tak, pytanie mające tylko dac do myślenia. if (checkdate($mienna)===true) //wykona się instrukcja else //wyświeeetlle echem komunikat tylko tak bo formularz jest typu date, raczej nie sposób wstrzyknąć sql, ponadto dane z posta są fetchowane przed wysłaniem do bazy. Bardzo dziękuję za podpowiedź, zastosuje się do wskazówek. Ten post edytował rafkar0252 21.11.2020, 17:59:42 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
To że ustawiłeś sobie date w formie mogę w 5 sekund zmienić w narzędziach developerskich albo wysłać zupełnie inaczej. Co to znaczy że dane są fetchowane? Wszędzie tam gdzie wkładasz dane od użytkownika w swoim kodzie musisz to zabezpieczyć.
-------------------- |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.04.2015 Ostrzeżenie: (0%) ![]() ![]() |
Widzę, że czeka mnie mnóstwo czytania na temat praktyk tworzenia bezpiecznych aplikacji webowych. Bezmyślnie uznałem, że metoda fetchALL::DateTime() zabezpiecza dane z POSTA. Jesze raz dziękuję za zwrócenie mi uwagi. Po 10 latach BEZ kodowania myślałem, że coś jeszcze pamiętam, teraz widzę jak się pomyliłem
![]() |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
walidacja danych z formularza dotyczy wszystkich przesyłanych danych bez wyjątku, nie tylko daty. Na to, co napisał viking chciałem zwrócić uwage nieco później, jak byś się uporał z wyświetleniem danych z tego zapytania. Mam nadzieję, że zrozumiałeś w czym tkwił błąd. Przecież nawet w opisie typu date mysql-a stoi jak byk:
"MySQL pobiera i wyświetla wartości DATE w formacie 'RRRR-MM-DD'." I zapenwe widzisz te pazurki w których jest ujęta data. Manual, manual, manual. |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.04.2015 Ostrzeżenie: (0%) ![]() ![]() |
gino dzięki - działa. Na laboratorium programowania uczono mnie, że to " ' ' " i ' " " ' można stosować zamiennie. Tyle, że nie pamiętam z którego języka to było programowanie. Jak widać w php muszę na to uważać. Jeszcze raz dziękuję.
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Tylko że u ciebie nie to było bezpośrednio problemem tylko nieprawidłowo użyty prepare. Prawidłowo użyty odpowiednio by to wysłał do zapytania.
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.05.2025 - 14:30 |