![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 60 Pomógł: 1 Dołączył: 6.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Macie moze jakies wlasne metody do zapamowania nad typami danych? Moze z jednej strony to dobre, ze w php nie trzeba sztywno deklarowac zmiennych i same się konwertują w niektorych okoliczonsciach ale czasem to sprawia problemy i nie wiemy czy to np. integer czy string.
Konkretnie mam teraz problem z danymi pochodzacymi z formularza. Form zawsze zwroci mi string a ja mam tam pola ktore sa przeznaczone jednoznacznie na wartosci liczbowe. Przy odbiorze tych danych wszystko konwertowac funkcja settype? Nie macie na to opracowanych jakichs sprawdzonych sposobow? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
-------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 561 Pomógł: 75 Dołączył: 19.08.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Beynar, przykład, który Cysiaczek pokazał, wiąże się z rzutowaniem typu.
Poczytaj: http://wortal.php.pl/wortal/artykuly/php/p...zutowanie_typow Zastosowanie rzutowania:
jest jedną z operacji ochrony przed SQL Injection - jeżelli do bazy ma być wsadzana liczba, a w formularz został wpisany/wklejony string, to wartość zmiennej $liczbaNaPewno wyniesie 0. Ten post edytował Grzyw 26.12.2007, 11:13:18 -------------------- Idąc po czyichś śladach, nie zajdziesz ani kroku dalej...
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 60 Pomógł: 1 Dołączył: 6.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Widze, ze to dziala jak settype()
Czyli wszystko pięknie ładnie ale 1. jesli user poda "," zamiast "." w stringu reprezentujacym wartosc to przy konwersji ucięte zostanie wszystko od przecinka w prawo. 2. Jeśli klient wpisze np. wartość: "fc24w1a4" to funkcja zwroci mi 0 choć w dokumentacji pisze: Cytat Zwraca TRUE w przypadku sukcesu, FALSE w przypadku porażki. Nie wiem czy skonwertowania fc24w1a4 do 0 można nazwać powodzeniem. Jak wtedy moge rozróżnić czy user rzeczywiscie podał 0 czy nic czy moze jakiś string.... settype we wszystkich trzech wypadakach zwróci zero! pozostaja eregi i zanim przejde do konwersji, moge sprawdzac co tam rzeczywiscie bylo... ale operacje na stringach nie naleza do najszybszych Ten post edytował Beynar 26.12.2007, 11:34:12 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 70 Pomógł: 3 Dołączył: 15.06.2003 Skąd: kosmosu? Ostrzeżenie: (0%) ![]() ![]() |
To nie jest dokońca tak że false równa się 0. Możesz sprawdzać czy wynik jest prawdziwy np przez if($result). I tutaj php odrózni czy wynik wyszedł zero czy się operacja nie wykonała poprawnie.
Ten post edytował .chudy. 26.12.2007, 13:36:35 -------------------- Warsztat#1 ::drum and bass:: Apache2.2 :: PHP 5.2 ::
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 60 Pomógł: 1 Dołączył: 6.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Wlasnie sprawdzam co ona zwraca (is_bool) i to nie jest boolowski falsz i php nie konwertuje go na 0 tylko po prostu ta funkcja zwraca 0 (float lub int), zaleznie od tego co wybiore przy konwertowaniu.
Błąd w dokumentacji? No chyba ze przykladową konwersje stringa "hj345k354jk" do integera ktora da rezultat 0 nalezy uwazac za udaną ![]() Czyzby błąd w dokumentacji? Ten post edytował Beynar 26.12.2007, 13:50:30 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
To może zamiast tego używać intval, nie koniecznie samej fukncji, ale tam w komentarzach są ciekawe propozycje.
-------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 4 Dołączył: 28.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie ptrzebnie komplikujecie.
I w dokumentacji nie ma błedu po prostu 0 == false Ja sprawdzam czy dane z formularza są liczbą funkcją is_numeric() która zwraca true jeżeli tak lub flase jeżeli nie. Sprawdzasz tą funkcją czy dane pole jest liczbą jeżeli nie to informujesz użytkownika o tym i nie wykonujesz dalej kodu. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 28.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ja bym uzyl wyrazen regularnych. np. jak w polu formularza ma byc wpisana tylko i wylacznie liczba :
a jesli np. tylko male i wielkie litery alfabetu plus polskie znaki z ogonkami:
Polecam artykuł: http://www.gajdaw.pl/php/walidacja-formularzy/p1.html |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
@Kiera - Twoje wyrażenia regularne są dziurawe. Przykładowo: [0-9]+ przepuści np. a123b. Zapomninasz o oznaczeniu początku (^) oraz końca ($) wzorca. Poprawny zapis powinien wyglądać tak: ^[0-9]+$
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 28.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
@Kiera - Twoje wyrażenia regularne są dziurawe. Przykładowo: [0-9]+ przepuści np. a123b. Zapomninasz o oznaczeniu początku (^) oraz końca ($) wzorca. Poprawny zapis powinien wyglądać tak: ^[0-9]+$ Szczerze to nie wiem dlaczego nie przekopiowalo mi poprawnie czyli z z +$ na koncu. ^ na poczatku nie jest potrzebny. Mi taki skrypt dziala i nic oprocz cyfr nie da sie wklepac do formularza.
Ja oczywiscie raczkuje i moge sie mylic co do teori. Pisze jak to w praktyce wychodzi. Ten post edytował Kiera 28.12.2007, 21:48:16 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 60 Pomógł: 1 Dołączył: 6.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Przyklad wydrukuje: Cytat ustawiamy wartosc string: "vfd67vfd9.43" ustawiamy jej typ na int settyp zwraca bool true string teraz jest liczba calkowita wartosc zmiennej to: "0" kowersja stringu vfd67vfd9.43 do int 0 mozna uznac za true? Tak zwraca settype choć: Cytat Zwraca TRUE w przypadku sukcesu, FALSE w przypadku porażki. http://pl2.php.net/manual/pl/function.settype.php
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.07.2025 - 06:58 |