![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 2 Dołączył: 15.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Napisałem taki oto szkielet skryptu weryfikacji adresu email:
Kod działa poprawnie. Problem powstaje w momencie, kiedy chcę sprawdzić poprawność zmiennych, np. funkcją is_int. Za każdym razem funkcja zwraca wartość false. Dlaczego tak się dzieje? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Bo w tym momencie $code jest stringiem:
jak zresztą sam wiesz, bo używasz funkcji substr, czyli wycinasz string ze stringa, gdzie wartość wyjściowa również jest stringiem. Weryfikacji możesz dokonać za pomocą preg_match:
gdzie {4} (przykładowo) to długość jaką powinien mieć Twój kod. Ten post edytował b4rt3kk 6.10.2012, 11:39:42 -------------------- Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Weryfikacji możesz dokonać za pomocą preg_match:
gdzie {4} (przykładowo) to długość jaką powinien mieć Twój kod. Albo konwertować string do integera za pomocą funkcji intval: Zwróć uwagę, że jeśli konwersja się nie powiedzie to funkcja intval zwróci integer 0, co może być problemem jeśli pole id w Twojej tabeli może przyjmować wartość 0. Ten post edytował bostaf 6.10.2012, 12:04:30 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Albo konwertować string do integera za pomocą funkcji intval: Zwróć uwagę, że jeśli konwersja się nie powiedzie to funkcja intval zwróci integer 0, co może być problemem jeśli pole id w Twojej tabeli może przyjmować wartość 0. Nie sądzę by w tym przypadku konwersja do int spełniała swoją rolę, bo to nie zweryfikuje danych z GET. Jeśli użytkownik spreparuje link i da np. 12rt6897 to konwersja do int zwróci 12. -------------------- Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 2 Dołączył: 15.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za pomoc, tylko nie rozumiem jednego. Jeżeli przesyłam dane z formularza to bezproblemowo mogę użyć funkcji is_int
Cytat Nie sądzę by w tym przypadku konwersja do int spełniała swoją rolę, bo to nie zweryfikuje danych z GET. Jeśli użytkownik spreparuje link i da np. 12rt6897 to konwersja do int zwróci 12. Z drugiej jednak strony jeżeli funkcja utnie część kodu spreparowanego przez użytkownika to kod będzie niekompletny i na którymś etapie także zostanie zgłoszony błąd |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Nie sądzę by w tym przypadku konwersja do int spełniała swoją rolę, bo to nie zweryfikuje danych z GET. Jeśli użytkownik spreparuje link i da np. 12rt6897 to konwersja do int zwróci 12. Dobra uwaga, dzięki. Ale wtedy weryfikacja code z id prawdopodobnie nie powiodłaby się (WHERE id='" .$id. "' and code='" .$code. "'"), ale to tylko "prawdopodobnie". Najlepiej byłoby tu przekazać code i id w osobnych zmiennych i sprawdzać ich poprawność według zaplanowanego wzorca wyrażeniem regularnym, tak jak zaproponowałeś. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za pomoc, tylko nie rozumiem jednego. Jeżeli przesyłam dane z formularza to bezproblemowo mogę użyć funkcji is_int Z drugiej jednak strony jeżeli funkcja utnie część kodu spreparowanego przez użytkownika to kod będzie niekompletny i na którymś etapie także zostanie zgłoszony błąd Jak wiesz PHP automatycznie nadaje typ zmiennej.
Poza tym funkcja substr() jak można przeczytać w manualu operuje na stringach i zwracaną wartością jest również string. -------------------- Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Mogę się mylić bo nie potrafię w manualu znaleźć tej informacji, ale zmienne POST i GET są zawsze stringami. Zatem takie przypisane zwróci również string(3) "123". Nawet jeśli wartość w formularzu będzie przypisana bez cudzysłowów, w taki sposób:
Znalazłem jeszcze inny sposób na zwalidowanie integera, ale tylko od PHP5.2: użycie funkcji filter_var z rozszerzenia filter: Tej funkcji już się nie da oszukać spreparowanym kodem, bo zwróci false. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 20:20 |