Vaše pomoc je stále potřeba!
Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
mojeID OpenID
Pokročilé vyhledávání  

Novinky:

Přijďte se podívat a oslavit nové vydání Ubuntu 13.04, více informací naleznete zde.

Autor Téma: PHP - bug function is_int [vyřešeno]  (Přečteno 754 krát)

{V} P $ y c h o {V}

  • Návštěvník
  • *
  • Karma: +9/-11
  • Pohlaví: Mužské
  • Příspěvků: 72
    • Zobrazit profil
PHP - bug function is_int [vyřešeno]
« kdy: 28 Březen 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ý :/
« Poslední změna: 28 Březen 2012, 17:48:40 od {V} P $ y c h o {V} »
IP zaznamenána

Martin - ViPEr*CZ*

  • Moderátor
  • Závislák
  • *****
  • Karma: +141/-18
  • Pohlaví: Mužské
  • Příspěvků: 2967
    • Jabber/AQQ
    • Zobrazit profil
    • http://vipersoftware.net
Re:PHP - bug function is_int
« Odpověď #1 kdy: 28 Březen 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].
IP zaznamenána
Open source is gold way... Ubuntu 12.04, Debian 6.0.6 Squeeze | Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

{V} P $ y c h o {V}

  • Návštěvník
  • *
  • Karma: +9/-11
  • Pohlaví: Mužské
  • Příspěvků: 72
    • Zobrazit profil
Re:PHP - bug function is_int
« Odpověď #2 kdy: 28 Březen 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;
}
IP zaznamenána

Martin - ViPEr*CZ*

  • Moderátor
  • Závislák
  • *****
  • Karma: +141/-18
  • Pohlaví: Mužské
  • Příspěvků: 2967
    • Jabber/AQQ
    • Zobrazit profil
    • http://vipersoftware.net
Re:PHP - bug function is_int [vyřešeno]
« Odpověď #3 kdy: 28 Březen 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.
IP zaznamenána
Open source is gold way... Ubuntu 12.04, Debian 6.0.6 Squeeze | Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

{V} P $ y c h o {V}

  • Návštěvník
  • *
  • Karma: +9/-11
  • Pohlaví: Mužské
  • Příspěvků: 72
    • Zobrazit profil
Re:PHP - bug function is_int [vyřešeno]
« Odpověď #4 kdy: 28 Březen 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;
}
IP zaznamenána

Martin - ViPEr*CZ*

  • Moderátor
  • Závislák
  • *****
  • Karma: +141/-18
  • Pohlaví: Mužské
  • Příspěvků: 2967
    • Jabber/AQQ
    • Zobrazit profil
    • http://vipersoftware.net
Re:PHP - bug function is_int [vyřešeno]
« Odpověď #5 kdy: 28 Březen 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á.
IP zaznamenána
Open source is gold way... Ubuntu 12.04, Debian 6.0.6 Squeeze | Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

{V} P $ y c h o {V}

  • Návštěvník
  • *
  • Karma: +9/-11
  • Pohlaví: Mužské
  • Příspěvků: 72
    • Zobrazit profil
Re:PHP - bug function is_int [vyřešeno]
« Odpověď #6 kdy: 28 Březen 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;
}
IP zaznamenána

Martin - ViPEr*CZ*

  • Moderátor
  • Závislák
  • *****
  • Karma: +141/-18
  • Pohlaví: Mužské
  • Příspěvků: 2967
    • Jabber/AQQ
    • Zobrazit profil
    • http://vipersoftware.net
Re:PHP - bug function is_int [vyřešeno]
« Odpověď #7 kdy: 28 Březen 2012, 21:59:29 »

Todle je možná ještě hezčí
Kód: [Vybrat]
function _int($int) {
   return preg_match("/^[0-9]/", (string)$int);
}
IP zaznamenána
Open source is gold way... Ubuntu 12.04, Debian 6.0.6 Squeeze | Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

starenka

  • Závislák
  • ****
  • Karma: +138/-15
  • Příspěvků: 1269
  • Karma: plynová [zapalovač] [hasičák]
    • Zobrazit profil
    • /home/starenka
Re:PHP - bug function is_int [vyřešeno]
« Odpověď #8 kdy: 30 Březen 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)
IP zaznamenána
mojenka | blozinek v2 | starej blozinek | krotim hady za penize | UJ! Kalužátor

Debian testing vrní v Thinkpadu X200/bedně/EEE 900a, MasoX Tiger v lampe

Martin - ViPEr*CZ*

  • Moderátor
  • Závislák
  • *****
  • Karma: +141/-18
  • Pohlaví: Mužské
  • Příspěvků: 2967
    • Jabber/AQQ
    • Zobrazit profil
    • http://vipersoftware.net
Re:PHP - bug function is_int [vyřešeno]
« Odpověď #9 kdy: 30 Březen 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);
}
IP zaznamenána
Open source is gold way... Ubuntu 12.04, Debian 6.0.6 Squeeze | Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

ETNyx

  • Člen
  • **
  • Karma: +33/-1
  • Příspěvků: 396
    • Zobrazit profil
Re:PHP - bug function is_int [vyřešeno]
« Odpověď #10 kdy: 30 Březen 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,...
IP zaznamenána

Martin - ViPEr*CZ*

  • Moderátor
  • Závislák
  • *****
  • Karma: +141/-18
  • Pohlaví: Mužské
  • Příspěvků: 2967
    • Jabber/AQQ
    • Zobrazit profil
    • http://vipersoftware.net
Re:PHP - bug function is_int [vyřešeno]
« Odpověď #11 kdy: 30 Březen 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.
IP zaznamenána
Open source is gold way... Ubuntu 12.04, Debian 6.0.6 Squeeze | Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody