Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sprawdzanie int, jako string...
Largo
post 22.01.2009, 22:51:11
Post #1





Grupa: Zarejestrowani
Postów: 203
Pomógł: 6
Dołączył: 11.09.2005

Ostrzeżenie: (0%)
-----


Witam,

Mam chyba dość nie typowy problem. Zacznę od zaprezentowania kodu:

  1. <?php
  2. //-------------------------------------
  3.        // Check all possible errors...
  4.        //-------------------------------------
  5.        if ( !$this->to_user['id'] )
  6.        {
  7.            $this->ipsclass->error(array(LEVEL => 1, MSG => 'id_not_exists'));
  8.        }
  9.        else if ( $this->ipsclass->input['to_id'] == $this->ipsclass->member['id'] )
  10.        {
  11.            $this->ipsclass->error(array(LEVEL => 1, MSG => 'send_to_you'));
  12.        }
  13.        else if ( $this->ipsclass->member['mgroup'] == $this->ipsclass->vars['banned_group'] )
  14.        {
  15.            $this->ipsclass->error(array(LEVEL => 1, MSG => 'send_to_banned'));
  16.        }
  17.        else if ( $this->ipsclass->input['amount'] <= 0 )
  18.        {
  19.            $this->ipsclass->error(array(LEVEL => 1, MSG => 'enough_fg'));
  20.        }
  21.        else if ( $this->ipsclass->input['amount'] > $this->ipsclass->member['fg'] )
  22.        {
  23.            $this->ipsclass->error(array(LEVEL => 1, MSG => 'more_than_have'));
  24.        }
  25.        else if ( $this->ipsclass->input['from'] != $this->ipsclass->member['id'] )
  26.        {
  27.            $this->ipsclass->error(array(LEVEL => 1, MSG => 'problem_id'));
  28.        }
  29.        else if ( $this->ipsclass->member['fg_locked'] == 1 )
  30.        {
  31.            $this->ipsclass->error(array(LEVEL => 1, MSG => 'fg_locked'));
  32.        }
  33.        else if ( $this->ipsclass->member['fg_password'] != md5($this->ipsclass->input['fg_password']) )
  34.        {
  35.            $this->ipsclass->error(array(LEVEL => 1, MSG => 'pass_not_match'));
  36.        }
  37. ?>


Warunek nad którym ubolewam to:

  1. <?php
  2. else if ( $this->ipsclass->input['amount'] > $this->ipsclass->member['fg'] )
  3.        {
  4.            $this->ipsclass->error(array(LEVEL => 1, MSG => 'more_than_have'));
  5.        }
  6. ?>


Wartości? A więc tutaj jest prosta odpowiedź - z bazy ( $this->ipsclass->member['fg'] ) pobiera w formie x, xxx.xx ( number_format($data, 2, '.', ',' ), a pole usera ( $this->ipsclass->input['amount'] ) jest pobierane z formularza również jako string. Gdzie jest problem? Ułamki, tu się sypie. Kolejna sprawa to setki, tysięcy nawet nie sprawdzałem. Jak takie coś sprawdzać?

PS. Narzucanie typów nic nie daję.

Pozdrawiam,
Largo
Go to the top of the page
+Quote Post
EarthCitizen
post 22.01.2009, 22:53:02
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 70
Dołączył: 13.01.2009

Ostrzeżenie: (0%)
-----


Te przecinki tam są niepotrzebne...
Go to the top of the page
+Quote Post
Largo
post 22.01.2009, 23:02:45
Post #3





Grupa: Zarejestrowani
Postów: 203
Pomógł: 6
Dołączył: 11.09.2005

Ostrzeżenie: (0%)
-----


Witam,

Zwykła notacja x xxx.xx nic nie dała. Nie rozumiem tego w ogóle... intval() nie przejdzie, ponieważ muszą być ułamki.

PS. Szkoda, że PHP nie ma rzutowania danych typów dla zmiennych...

@down
Tak.

Pozdrawiam,
Largo

Ten post edytował Largo 22.01.2009, 23:05:08
Go to the top of the page
+Quote Post
EarthCitizen
post 22.01.2009, 23:04:05
Post #4





Grupa: Zarejestrowani
Postów: 286
Pomógł: 70
Dołączył: 13.01.2009

Ostrzeżenie: (0%)
-----


hmm ... teraz zamiast przecinka masz spację, dobrze widzę?
Go to the top of the page
+Quote Post
wrzasq
post 22.01.2009, 23:20:11
Post #5





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


jaka spacje! :/ nic nie wstawiac. spacja nie jest zadnym sposobem zapisu liczby (chyba w zadnym jezyku programowania).

  1. <?php
  2. number_format($data, 2, '.', '');
  3. ?>


liczba sklada sie tylko z CYFR i ewentualnie jednej kropki oddzielajaca calosci od ulamka. i tyle. zadne spacje, zadne przecinki. te "notacje" sa tak po prostu dla ludzi aby bylo czytelniej.

rzutowanie typow? jasne ze jest: type juggling. tyle ze tak jak juz napisalem - "x xxx.xx" NIE jest liczba i zadne rzutowanie na typ liczbowy nie zalapie znakow po spacji jako czesci liczby.

-edit-

najlepiej nie uzywaj w ogole number_format, bo kompletnie szczerze mowiac nie rozumiem dlaczego to zrobiles. skoro masz liczbe to po co chcesz ja formatowac do obrobki? formatuje sie do wyswietlania. uzyj tej funkcji dopiero kiedy bedziesz musial wyswietlac ta dana.

takze problem raczej nie taki niezwykly winksmiley.jpg.

Ten post edytował wrzasq 22.01.2009, 23:22:04


--------------------
Go to the top of the page
+Quote Post
Largo
post 23.01.2009, 15:13:49
Post #6





Grupa: Zarejestrowani
Postów: 203
Pomógł: 6
Dołączył: 11.09.2005

Ostrzeżenie: (0%)
-----


Witam,

Zgadza się, pospieszyłem się i nie doczytałem dokładnie dokumentacji. Tam gdzie ja dawałem number_format jest pobieranie danych o użytkowniku, a klasa display prezentuje ładnie dane, musiałem jedynie dodać dodatkową zmienną do szablonu.

Pozdrawiam,
Largo
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 05:38