Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> jak sprawdzic czy string to int ?
R3B3L
post
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 6.06.2004
Skąd: Zielona Gora

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


Witam

wiem ze brzmi to troche dziwnie, ale ...

Sytuacja wyglada nastepujaco:
jesli wysylam w formularzu z pola input zmienna to w globalnej zmiennej $_POST i $_GET jest ona traktowana jako string. Czy istnieje jakaś wbudowana funkcja sprawdzajaca czy zawartosc tej zmiennej (np. $_GET['a'] ) jest typu integer questionmark.gif
Wiem o istnieniu funkcji is_int() ale ona powie ze to nie jest int tylko string.
moj sposob na rozwiazanie tego problemu to narazie:
  1. <?php
  2. $buf = (int) $_GET['a'];
  3. if($buf == $_GET['a'] ) ...
  4. ?>

takie coś działa ale chciałbym wiedzieć czy nie istnieje jakiś wbudowany mechanizm.

z gory dzieki za pomoc


--------------------
"Grunt to Bunt"
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
bela
post
Post #2


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


is_numeric" title="Zobacz w manualu php" target="_manual ?


--------------------
Go to the top of the page
+Quote Post
R3B3L
post
Post #3





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 6.06.2004
Skąd: Zielona Gora

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


Cytat(bela_666 @ 2005-12-02 21:18:51)

to prawie to

is_numeric sprawdza czy string jest liczba, ale np 3.5 tez potraktuje jako liczbe, a mi chodzi o to rzeby sprawdzic czy to jest int.


--------------------
"Grunt to Bunt"
Go to the top of the page
+Quote Post
strife
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


  1. <?php
  2.  
  3. $string = 3.5;
  4.  
  5. if ( is_int( $string ) )
  6. {
  7. echo 'TRUE';
  8. }
  9. else
  10. {
  11. echo 'FALSE';
  12. }
  13.  
  14. ?>

A to chodzi?


--------------------
Go to the top of the page
+Quote Post
R3B3L
post
Post #5





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 6.06.2004
Skąd: Zielona Gora

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


Cytat(scarface @ 2005-12-02 21:38:10)
  1. <?php
  2.  
  3. $string = 3.5;
  4.  
  5. if ( is_int( $string ) )
  6. {
  7. echo 'TRUE';
  8. }
  9. else
  10. {
  11. echo 'FALSE';
  12. }
  13.  
  14. ?>

A to chodzi?

wiem ze w takiej formie to zadziala ale sproboj zrobic to dla zmiennej globalnej $_POST albo $_GET (np: $_POST['a'] )
u ciebie w przykladzie
$string = 3.5
sproboj $string = "3.5" bo w wlasnie takiej formie otrzymasz dane z formularza


--------------------
"Grunt to Bunt"
Go to the top of the page
+Quote Post
strife
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


No to użyj eval" title="Zobacz w manualu php" target="_manual


--------------------
Go to the top of the page
+Quote Post
R3B3L
post
Post #7





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 6.06.2004
Skąd: Zielona Gora

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


Cytat(scarface @ 2005-12-02 21:50:01)

sorki chyba czegos nie rozumiem ;(

jak moze mi to pomoc ? jak mam tego uzyc ?


--------------------
"Grunt to Bunt"
Go to the top of the page
+Quote Post
strife
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


  1. <form method="post">
  2. <input type="text" name="test" />
  3. <input type="submit" />
  4. </form>
  5.  
  6. <?php
  7. $string = $_POST['test'];
  8. eval("$string = $string;");
  9.  
  10. if ( is_int( $string ) )
  11. {
  12. echo 'TRUE';
  13. }
  14. else
  15. {
  16. echo 'FALSE';
  17. }
  18.  
  19. ?>

I teraz zostaną wywalone "" z $_POST co umożliwi rozpoznanie czy dana liczba jest int czy nie. O to chodziło prawda?


--------------------
Go to the top of the page
+Quote Post
Lars
post
Post #9





Grupa: Zarejestrowani
Postów: 279
Pomógł: 15
Dołączył: 29.04.2005
Skąd: Gdynia

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


  1. <?php
  2. settype($variable, 'integer');
  3. ?>

nie trzeba juz sprawdzać, od razu dostajesz inta

"is_numeric sprawdza czy string jest liczba, ale np 3.5 tez potraktuje jako liczbe, a mi chodzi o to rzeby sprawdzic czy to jest int. "

no bo 3.5 to też liczba laugh.gif

============

to wlasciwie jest bez sensu bo zmienna w php nie moze posiadać kilku
typów na raz, albo int albo string, bool czy coś innego!

Ten post edytował Lars 2.12.2005, 22:05:05


--------------------
(\.../) This is Bunny. Copy and paste bunny into
(O.o) your signature to help him gain world domination.
(> <) Zanim zapytasz | Też się przyda | Pomogłem ci? Kliknij "Pomógł"
Go to the top of the page
+Quote Post
R3B3L
post
Post #10





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 6.06.2004
Skąd: Zielona Gora

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


to juz by bylo to czego szukalem ale jeszcze pozostaje kwestia zabespieczenia tego jakos.

sprobojcie uruchomic powyrzszy przyklad dla 3a

jak zabezpieczyc sie przed czyms takim questionmark.gif


--------------------
"Grunt to Bunt"
Go to the top of the page
+Quote Post
Lars
post
Post #11





Grupa: Zarejestrowani
Postów: 279
Pomógł: 15
Dołączył: 29.04.2005
Skąd: Gdynia

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


Cytat(R3B3L @ 2005-12-02 21:05:53)
to juz by bylo to czego szukalem ale jeszcze pozostaje kwestia zabespieczenia tego jakos.

sprobojcie uruchomic powyrzszy przyklad dla 3a

jak zabezpieczyc sie przed czyms takim questionmark.gif

jeżeli chodzi o mój post to w tym przypadku dostaniesz 3 - inta. ciągle źle?


--------------------
(\.../) This is Bunny. Copy and paste bunny into
(O.o) your signature to help him gain world domination.
(> <) Zanim zapytasz | Też się przyda | Pomogłem ci? Kliknij "Pomógł"
Go to the top of the page
+Quote Post
R3B3L
post
Post #12





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 6.06.2004
Skąd: Zielona Gora

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


Cytat(Lars @ 2005-12-02 22:03:09)
  1. <?php
  2. settype($variable, 'integer');
  3. ?>

nie trzeba juz sprawdzać, od razu dostajesz inta

"is_numeric sprawdza czy string jest liczba, ale np 3.5 tez potraktuje jako liczbe, a mi chodzi o to rzeby sprawdzic czy to jest int. "

no bo 3.5 to też liczba laugh.gif

============

to wlasciwie jest bez sensu bo zmienna w php nie moze posiadać kilku
typów na raz, albo int albo string, bool czy coś innego!

wiem ze mozna to zrobic to w ten sposob. ale chodzi mi o to zeby nie przekonwertowywac tej zmiennej a tylko sprawdzic czy ma odpowiedni typ.
przyklad ktory podalem na poczatku dziala ale szukam jakiegos wbudowanego mechanizmu.

Ten post edytował R3B3L 2.12.2005, 22:13:16


--------------------
"Grunt to Bunt"
Go to the top of the page
+Quote Post
Lars
post
Post #13





Grupa: Zarejestrowani
Postów: 279
Pomógł: 15
Dołączył: 29.04.2005
Skąd: Gdynia

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


  1. <?php
  2. if(gettype($var)=='integer') {
  3. echo 'OK?';
  4. }
  5. ?>


cuś takiego?


--------------------
(\.../) This is Bunny. Copy and paste bunny into
(O.o) your signature to help him gain world domination.
(> <) Zanim zapytasz | Też się przyda | Pomogłem ci? Kliknij "Pomógł"
Go to the top of the page
+Quote Post
R3B3L
post
Post #14





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 6.06.2004
Skąd: Zielona Gora

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


Cytat(Lars @ 2005-12-02 22:12:38)
  1. <?php
  2. if(gettype($var)=='integer') {
  3. echo 'OK?';
  4. }
  5. ?>


cuś takiego?

to akurat zadziala dla $var = 3; ale dla $var = "3"; juz nie zadziala, a dane z formularza dstajemy w lasnie w tej drugiej wersji, nawet jesli w polu input wpisalismy 3 to wartosc $_POST['var'] bedzie rowna "3"


--------------------
"Grunt to Bunt"
Go to the top of the page
+Quote Post
strife
post
Post #15





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


Możesz najpierw pojechać $string htmlspecialchars" target="_blank wywalić wszystkie znaki prócz liczb i kropek z niego (2.5). Niestety takiego wyrażenia Ci nie ułożę bo nie czuje się mocny z regami.

Jest rozwiązanie którego nie polecam, jeśli nie chcesz komunikatu o błędzie wstaw przed eval => @ wtedy błąd będzie, ale nie będziesz go widział...

@DeyV - Ta... i zawsze wychodzi, że najlepsze jest naprostsze.. :]

Pozdrawiam!


--------------------
Go to the top of the page
+Quote Post
bela
post
Post #16


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


Jak tam zawsze rzutuje i dodaje slasze i działa. Tu nie ma żadnej filozofii.


--------------------
Go to the top of the page
+Quote Post
R3B3L
post
Post #17





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 6.06.2004
Skąd: Zielona Gora

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


Cytat(scarface @ 2005-12-02 22:31:12)
Możesz najpierw pojechać $string żeby się zabezpieczyć, a potem wyrażeniami regularnymi <a href="http://pl.php.net/preg_replace">preg_replace wywalić wszystkie znaki prócz liczb i kropek z niego (2.5). Niestety takiego wyrażenia Ci nie ułożę bo nie czuje się mocny z regami.

Jest rozwiązanie którego nie polecam, jeśli nie chcesz komunikatu o błędzie wstaw przed eval => @ wtedy błąd będzie, ale nie będziesz go widział...

Pozdrawiam!

żeczywiście innego wyjścia chyba nie ma.
myślałem że istnieje jakiś gotowy mechanizm który rozwiązał by ten problem.

wszystkie te operacje o których mówisz będe musiał zrobić dla jakiejś zmiennej pomocniczej bo chodzi mi o to zeby sprawdzic czy ta znienna ma odpowiedni typ ale nie modyfikowac jej.

THX 4 ALL


--------------------
"Grunt to Bunt"
Go to the top of the page
+Quote Post
DeyV
post
Post #18





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




a wiec najpierw sprawdzasz czy jest numeric ( is_numeric() )
A następnie sprawdzasz, czy ciąg nie zawiera kropki.
I masz pewność, że jest to int, lub nie.
Ewentualnie można sprawdzić jeszcze wielkość wprowadzonej liczby, by nie przekroczyć zakresu int winksmiley.jpg


scarface - a coś ty za bzdury z tym eval wymyślił?
Tak bardzo nie lubisz mieć bezpiecznego kodu?


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
dtb
post
Post #19





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

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


http://pl2.php.net/manual-lookup.php?pattern=is_&lang=pl


--------------------
Go to the top of the page
+Quote Post
sobstel
post
Post #20





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


a mzoe po prostu ctype_digit" title="Zobacz w manualu php" target="_manual ?


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Aktualny czas: 20.08.2025 - 04:25