{V} P - y c h o {V} 0 Odesláno: 28. Březen, 2012 Share Odesláno: 28. Březen, 2012 Nazdar, mám problém, mám kód: if(!is_int($_POST['ID_Process'])) { echo(''); 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ý :/ Link to comment Share on other sites More sharing options...
0 7.Host 3 Odesláno: 28. Březen, 2012 Share Odesláno: 28. Březen, 2012 V PHP 5.3 by tato funkce podle dokumentace měla fungovat. Každopádně bych zkusil ještě funkci is_numeric(), až na pár rozdílů jsou si podobné a měla by ti stačit. Jediný problém bych viděl v tom, že jako číslo bere i např. "1e4", což by ti mohlo vadit. Ještě jeden problém, že to nerozezná int a string, ale to by ti taky nemělo vadit . Pokud by ti vadily ty stringy, tak bych si normálně vytvořil vlastní funkci, která bude kontrolovat, jestli string obsahuje jen čísla a případně z toho můžeš udělat i int. Link to comment Share on other sites More sharing options...
0 {V} P - y c h o {V} 0 Odesláno: 28. Březen, 2012 Author Share Odesláno: 28. Březen, 2012 V PHP 5.3 by tato funkce podle dokumentace měla fungovat. Každopádně bych zkusil ještě funkci is_numeric(), až na pár rozdílů jsou si podobné a měla by ti stačit. Jediný problém bych viděl v tom, že jako číslo bere i např. "1e4", což by ti mohlo vadit. Ještě jeden problém, že to nerozezná int a string, ale to by ti taky nemělo vadit . Pokud by ti vadily ty stringy, tak bych si normálně vytvořil vlastní funkci, která bude kontrolovat, jestli string obsahuje jen čísla a případně z toho můžeš udělat i int. Ty stringy mi tam vaděj hodně, proto is_int a ne is_numeric ... Ale už sem to vyřešil následovně touto funkcí: function _int($int) { if(is_numeric($int) === TRUE) { if((int)$int == $int) return TRUE; else return FALSE; }else return FALSE; } Toto už funguje ... Jen nevím proč nefunguje orig. způsob, ale když to dám na server s PHP 5.2, tak to jede v pohodě, jen u PHP 5.3 to dělá takovou neplechu :/ Link to comment Share on other sites More sharing options...
0 7.Host 3 Odesláno: 28. Březen, 2012 Share Odesláno: 28. Březen, 2012 Ještě bych to zkrátil function _int($int) { if(is_numeric($int) === TRUE && (int)$int == $int) return true; else return false; } Link to comment Share on other sites More sharing options...
0 mimic 27 Odesláno: 28. Březen, 2012 Share Odesláno: 28. Březen, 2012 A já bych to ještě více zkrátil $num = "432e2"; function isInt($input, &$int = 0) { if (is_numeric((int)$input)) { $int = (int)$input; return true; } return false; } isInt($num, $ok); echo $ok; // 432 (jako int) Link to comment Share on other sites More sharing options...
0 {V} P - y c h o {V} 0 Odesláno: 28. Březen, 2012 Author Share Odesláno: 28. Březen, 2012 Tak aby jste se nedohadovali, tak zde je nejkratší a funkční verze function _int($int) { return preg_match("/^[0-9]/", (string)$int); } Link to comment Share on other sites More sharing options...
0 mimic 27 Odesláno: 28. Březen, 2012 Share Odesláno: 28. Březen, 2012 Tak aby jste se nedohadovali, tak zde je nejkratší a funkční verze function _int($int) { return preg_match("/^[0-9]/", (string)$int); } Toto bych nepoužival, rozhodně ne na tak jednoduchou věc.. regexp žere víc sys. prostředky a v tomhle případě ti to stejně nechá jako string, musel bys to na výstupu ještě explicitně přetypovat... použij klasickej is_numeric a pak to ještě přetypuj na (int), podstatě co jsem psal... Link to comment Share on other sites More sharing options...
0 {V} P - y c h o {V} 0 Odesláno: 28. Březen, 2012 Author Share Odesláno: 28. Březen, 2012 Tak aby jste se nedohadovali, tak zde je nejkratší a funkční verze function _int($int) { return preg_match("/^[0-9]/", (string)$int); } Toto bych nepoužival, rozhodně ne na tak jednoduchou věc.. regexp žere víc sys. prostředky a v tomhle případě ti to stejně nechá jako string, musel bys to na výstupu ještě explicitně přetypovat... použij klasickej is_numeric a pak to ještě přetypuj na (int), podstatě co jsem psal... No když sem to zkoušel měřit oba scripty za jakou dobu se vykonají, tak je to na stejno ať tak nebo tak a dnes žijeme v moderní době a ne s CPU 300MHz, takže zátěž mě nijak nezajímá, ale kvalita a bezpečnost kódu hlavně ... Link to comment Share on other sites More sharing options...
0 Deleted User 295 Odesláno: 28. Březen, 2012 Share Odesláno: 28. Březen, 2012 skus este is_integer, je to sice alias na is_int ale mozno ze sa to bude spravat trochu odlisne. Link to comment Share on other sites More sharing options...
0 Deleted User 295 Odesláno: 28. Březen, 2012 Share Odesláno: 28. Březen, 2012 ho*no, chyba je v tom ze php bere vstupy z $_POST a $_GET ako string a nepretipovava ich. if (is_int((int)$input)) je to iste ako is_numeric($input) lebo ak mas 10e+05 a pretypujes to na int tak pravdepodobne dostanes 100000 a to je integer. Ale nechapem co ti tak vadi na tom zapise is_numeric(). Link to comment Share on other sites More sharing options...
0 mimic 27 Odesláno: 28. Březen, 2012 Share Odesláno: 28. Březen, 2012 nezáleží jaká je doba... vždy je důležitá rychlost a optimalizace kódu.. krom toho bezpečný jsou obě varianty... ale osobně bych se vysral na nějaký šílenosti a použil jen explicitní přetypování.. resp. $num = "43e4xl"; echo (int)$num; // 43 To ti odtrhne všechno od znaku, který není číslo 0-9.. pokud ovšem první znak nebude číslo, tak vrátí 0 Bloodman: to není pravda... pokud přetypuješ 333e9 na int, tak dostaneš 333, protože výraz "333e9" NENÍ int... jinak ještě is_integer je zastaralej alias k is_int.. dneska se, ale ani jeden z nich moc nepoužívá Link to comment Share on other sites More sharing options...
0 Deleted User 295 Odesláno: 28. Březen, 2012 Share Odesláno: 28. Březen, 2012 nezáleží jaká je doba... vždy je důležitá rychlost a optimalizace kódu.. krom toho bezpečný jsou obě varianty... ale osobně bych se vysral na nějaký šílenosti a použil jen explicitní přetypování.. resp. $num = "43e4xl"; echo (int)$num; // 43 To ti odtrhne všechno od znaku, který není číslo 0-9.. pokud ovšem první znak nebude číslo, tak vrátí 0 Bloodman: to není pravda... pokud přetypuješ 333e9 na int, tak dostaneš 333, protože výraz "333e9" NENÍ int... jinak ještě is_integer je zastaralej alias k is_int.. dneska se, ale ani jeden z nich moc nepoužívá Nanestastie nemas pravdu, vyraz 333e+04 je platny zapis integeru tak isto ako 0b0101010 alebo 0xAB4154564FC, No ja som si to preistotu overil a tento script mi vypisal obe cisla rovnake <?php $lol = 333e+04; echo $lol . ' '; echo (int)$lol; Link to comment Share on other sites More sharing options...
0 mimic 27 Odesláno: 28. Březen, 2012 Share Odesláno: 28. Březen, 2012 nezáleží jaká je doba... vždy je důležitá rychlost a optimalizace kódu.. krom toho bezpečný jsou obě varianty... ale osobně bych se vysral na nějaký šílenosti a použil jen explicitní přetypování.. resp. $num = "43e4xl"; echo (int)$num; // 43 To ti odtrhne všechno od znaku, který není číslo 0-9.. pokud ovšem první znak nebude číslo, tak vrátí 0 Bloodman: to není pravda... pokud přetypuješ 333e9 na int, tak dostaneš 333, protože výraz "333e9" NENÍ int... jinak ještě is_integer je zastaralej alias k is_int.. dneska se, ale ani jeden z nich moc nepoužívá Nanestastie nemas pravdu, vyraz 333e+04 je platny zapis integeru tak isto ako 0b0101010 alebo 0xAB4154564FC, No ja som si to preistotu overil a tento script mi vypisal obe cisla rovnake <?php $lol = 333e+04; echo $lol . ' '; echo (int)$lol; Promiň, ale ne.. nemáš pravdu Pokud máš takové číslo "333e+04" s exponentou a přetypuješ to surově na int, tak to ořízne tak, jak jsem psal, takže z toho udělá int čili "333", pokud by jsi chtěl, aby se použila i ta exponenta, tak je nutný to přetypovat na nějakej realnej typ, třeba double, potom z toho bude "3330000" Link to comment Share on other sites More sharing options...
0 Deleted User 295 Odesláno: 28. Březen, 2012 Share Odesláno: 28. Březen, 2012 nezáleží jaká je doba... vždy je důležitá rychlost a optimalizace kódu.. krom toho bezpečný jsou obě varianty... ale osobně bych se vysral na nějaký šílenosti a použil jen explicitní přetypování.. resp. $num = "43e4xl"; echo (int)$num; // 43 To ti odtrhne všechno od znaku, který není číslo 0-9.. pokud ovšem první znak nebude číslo, tak vrátí 0 Bloodman: to není pravda... pokud přetypuješ 333e9 na int, tak dostaneš 333, protože výraz "333e9" NENÍ int... jinak ještě is_integer je zastaralej alias k is_int.. dneska se, ale ani jeden z nich moc nepoužívá Nanestastie nemas pravdu, vyraz 333e+04 je platny zapis integeru tak isto ako 0b0101010 alebo 0xAB4154564FC, No ja som si to preistotu overil a tento script mi vypisal obe cisla rovnake <?php $lol = 333e+04; echo $lol . ' '; echo (int)$lol; Promiň, ale ne.. nemáš pravdu Pokud máš takové číslo "333e+04" s exponentou a přetypuješ to surově na int, tak to ořízne tak, jak jsem psal, takže z toho udělá int čili "333", pokud by jsi chtěl, aby se použila i ta exponenta, tak je nutný to přetypovat na nějakej realnej typ, třeba double Prosim ta, skvor nez sem nieco napises tak si to aspon vyskusaj Link to comment Share on other sites More sharing options...
0 mimic 27 Odesláno: 28. Březen, 2012 Share Odesláno: 28. Březen, 2012 Prosim ta, skvor nez sem nieco napises tak si to aspon vyskusaj Já nic zkoušet nemusim.. je to tak, jak jsem napsal - http://ideone.com/dGZJZ Jo ale pozor, já to od začátku beru jako string (autor to měl jako string tušim)... pokud to dáš jako číslo, tak to potom ano, protože se to napřed vykoná exponenta a až potom přetypování... u stringu je to opačně Link to comment Share on other sites More sharing options...
Dotaz
{V} P - y c h o {V} 0
Nazdar, mám problém, mám kód:
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ý :/
Link to comment
Share on other sites
14 odpovědí na tuto otázku
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now