Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: {V} P $ y c h o {V} 28 Března 2012, 17:20:09

Název: PHP - bug function is_int [vyřešeno]
Přispěvatel: {V} P $ y c h o {V} 28 Března 2012, 17:20:09
Nazdar, mám problém, mám kód:
Kód: [Vybrat]
if(!is_int($_POST['ID_Process']))
{
echo('<script type="text/javascript">alert("Musíte zadat pouze číslo!");</script>');
return;
}
jenže je problém že ať už tam zadám text nebo číslo, tak mi to furt vypíše ,,Musíte zadat ...''.
Nevím v čem je problém, dřív mi na PHP 5.2 fungovala, ale od verze 5.3 jsou skoro všechny funkce úplně jinak dělaný :/
Název: Re:PHP - bug function is_int
Přispěvatel: Martin - ViPEr*CZ* 28 Března 2012, 17:42:06
Podle mě todle $_POST['ID_Process'] vrací vždy řetězec. Tj. zadáte číslo 5 jenže $_POST['ID_Process'] = "5"; Ověříte to jednoduše a to tak, že si uděláte var_dump($_POST['ID_Process']);
Možná bude hezčí si udělat regulárek a testovat $_POST['ID_Process'] jestli obsahuje [0-9].
Název: Re:PHP - bug function is_int
Přispěvatel: {V} P $ y c h o {V} 28 Března 2012, 17:48:22
Podle mě todle $_POST['ID_Process'] vrací vždy řetězec. Tj. zadáte číslo 5 jenže $_POST['ID_Process'] = "5"; Ověříte to jednoduše a to tak, že si uděláte var_dump($_POST['ID_Process']);
Možná bude hezčí si udělat regulárek a testovat $_POST['ID_Process'] jestli obsahuje [0-9].
Ano, děkuji. Problém je již vyřešen a vyřešil sem to následovnou jednoduchou funkcí po svém ...
Kód: [Vybrat]
function _int($int)
{
if(is_numeric($int) === TRUE)
{
if((int)$int == $int) return TRUE;
else return FALSE;
}else return FALSE;
}
Název: Re:PHP - bug function is_int [vyřešeno]
Přispěvatel: Martin - ViPEr*CZ* 28 Března 2012, 17:52:33
is_numeric je určitě náhrada za regulár... navíc rovnou otestuje i kdyby šlo o typ integer. Jen teď nechápu tu kombinaci? Proč rovnou nepoužijete pouze is_numeric??? To je zbytečný to ifování co tam máte.
Název: Re:PHP - bug function is_int [vyřešeno]
Přispěvatel: {V} P $ y c h o {V} 28 Března 2012, 19:07:06
is_numeric je určitě náhrada za regulár... navíc rovnou otestuje i kdyby šlo o typ integer. Jen teď nechápu tu kombinaci? Proč rovnou nepoužijete pouze is_numeric??? To je zbytečný to ifování co tam máte.
Pokud bych použil pouze jen funkci is_numeric() tak by mi to vzalo i ,,1e4'' ale já potřebuju čistě jen integer a to ,ifování'' sem ještě zkrátil, takže momentálně vypadá takto:
Kód: [Vybrat]
function _int($int)
{
if(is_numeric($int) === TRUE && (int)$int == $int) return true;
else return false;
}
Název: Re:PHP - bug function is_int [vyřešeno]
Přispěvatel: Martin - ViPEr*CZ* 28 Března 2012, 19:17:05
1e4 je opravdu číslo... no možná by pak hezčí zápis měl opravdu regulární výraz... neboť (int)$int == $int se mi moc nezamlouvá.
Název: Re:PHP - bug function is_int [vyřešeno]
Přispěvatel: {V} P $ y c h o {V} 28 Března 2012, 20:18:43
1e4 je opravdu číslo... no možná by pak hezčí zápis měl opravdu regulární výraz... neboť (int)$int == $int se mi moc nezamlouvá.
Zde je už správná:
Kód: [Vybrat]
function _int($int)
{
if(is_numeric($int) === TRUE && intVal($int) == $int) return true;
else return false;
}
Název: Re:PHP - bug function is_int [vyřešeno]
Přispěvatel: Martin - ViPEr*CZ* 28 Března 2012, 21:59:29
Todle je možná ještě hezčí
Kód: [Vybrat]
function _int($int) {
   return preg_match("/^[0-9]/", (string)$int);
}
Název: Re:PHP - bug function is_int [vyřešeno]
Přispěvatel: starenka 30 Března 2012, 00:05:54
Todle je možná ještě hezčí
Kód: [Vybrat]
function _int($int) {
   return preg_match("/^[0-9]/", (string)$int);
}
cely zaporny cisla nejsou int?  8)
Název: Re:PHP - bug function is_int [vyřešeno]
Přispěvatel: Martin - ViPEr*CZ* 30 Března 2012, 09:39:37
No jo pravda... ani jsem v tu chvíli nepomyslel... je pravda, že se snažím spíš tlačit než psát to přesně za někoho... se mnou se taky nikdo nemaže. Ale máš pravda todle je takový unsigned int.
Tak mu to trochu vylepšíme:

Kód: [Vybrat]
function _int($int) {
   return preg_match("/^-?[0-9]/", (string)$int);
}
Název: Re:PHP - bug function is_int [vyřešeno]
Přispěvatel: ETNyx 30 Března 2012, 11:03:42
Ještě bych to trošku poupravil, ten pattern by měl vypadat spíše /^-?[0-9]+$/, ten původní by pustil nechtěné číslo 1e3 a spoustu dalších stringů která čísla ani vzdáleně nepřipomínají. btw záleží od požadavků programátora, ale tohle se nebude mít rádo ani s desetinejma číslama,...
Název: Re:PHP - bug function is_int [vyřešeno]
Přispěvatel: Martin - ViPEr*CZ* 30 Března 2012, 11:24:47
Ještě bych to trošku poupravil, ten pattern by měl vypadat spíše /^-?[0-9]+$/, ten původní by pustil nechtěné číslo 1e3 a spoustu dalších stringů která čísla ani vzdáleně nepřipomínají. btw záleží od požadavků programátora, ale tohle se nebude mít rádo ani s desetinejma číslama,...
Ano nebude to brát desetinný čísla, ale to ani ta původní funkce autora vlákna, kdy dochází k přetypování string na integer a tím se určitě desetinná část zahodí. Ta funkce by měla kontrolovat, zda-li je číslo typu integer co jsem pochopil. Samozřejmě +$ je určitě ještě lepší dát na konec, ale to už záleží na požadavcích jak jsi psal.