abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 17:02 | Pozvánky

Přijďte si popovídat o open source obecně a openSUSE konkrétně s dalšími uživateli a vývojáři. Oslava nového vydání openSUSE Leap se uskuteční 16. prosince od 17:00 v nových prostorách firmy SUSE v Praze. K dispozici bude nějaké občerstvení a DVD pro ty, kdo je sbírají nebo ještě mají mechaniku. Po párty v kanceláři se bude pokračovat v některé z hospod v okolí.

Miška | Komentářů: 7
včera 14:55 | Zajímavý software

Byla vydána verze Alpha 1.0 otevřeného operačního systému pro chytré hodinky AsteroidOS. Podporovány jsou hodinky LG G Watch, LG G Watch Urbane, Asus ZenWatch 2 a Sony Smartwatch 3. Ukázka ovládání hodinek na YouTube. Jaroslav Řezník přednášel o AsteroidOS na chytrých hodinkách (videozáznam) na letošní konferenci OpenAlt.

Ladislav Hagara | Komentářů: 0
včera 13:30 | Zajímavý software

Byly uvolněny zdrojové kódy známé rogue-like hry DoomRL. Počátky hry jsou v roce 2002. Je napsána ve FreePascalu a zdrojový kód je nyní k dispozici na GitHubu pod licencí GNU GPL 2.0. Autor pracuje na nové hře Jupiter Hell, která je moderním nástupcem DoomRL a na jejíž vývoj shání peníze prostřednictvím Kickstarteru.

Blaazen | Komentářů: 0
včera 13:15 | Pozvánky

Přijďte s námi oslavit vydání Fedory 25. Na programu budou přednášky o novinkách, diskuse, neřízený networking atd. Release Party se bude konat 16. prosince v prostorách společnosti Etnetera. Na party budou volně k dispozici také propagační materiály, nová DVD s Fedorou 25 a samozřejmě občerstvení. Přednášky budou probíhat v češtině. Pro více informací se můžete podívat na web MojeFedora.cz. Jen připomínám, že tentokrát jsme zavedli

… více »
frantisekz | Komentářů: 0
9.12. 16:38 | Komunita

Byly zveřejněny videozáznamy přednášek a workshopů z letošní konference OpenAlt konané 5. a 6. listopadu v Brně. K videozáznamům lze přistupovat ze stránky na SuperLectures nebo přes program konference, detaily o vybrané přednášce nebo workshopu a dále kliknutím na ikonku filmového pásu. Celkově bylo zpracováno 65 hodin z 89 přednášek a workshopů.

Ladislav Hagara | Komentářů: 0
9.12. 11:30 | Komunita

Bylo oznámeno, že bude proveden bezpečnostní audit zdrojových kódů open source softwaru pro implementaci virtuálních privátních sítí OpenVPN. Audit provede Matthew D. Green (blog), uznávaný kryptolog a profesor na Univerzitě Johnse Hopkinse. Auditována bude verze 2.4 (aktuálně RC 1, stabilní verze je 2.3.14). Audit bude financován společností Private Internet Access [reddit].

Ladislav Hagara | Komentářů: 4
9.12. 06:00 | Komunita

Na YouTube byl publikován Blender Institute Reel 2016, ani ne dvouminutový sestřih z filmů, které vznikly za posledních 10 let díky Blender Institutu. V institutu aktuálně pracují na novém filmu Agent 327. Dění kolem filmu lze sledovat na Blender Cloudu. Videoukázka Agenta 327 z června letošního roku na YouTube.

Ladislav Hagara | Komentářů: 0
9.12. 01:02 | Zajímavý článek

Minulý týden byly vydány verze 1.2.3 a 1.1.7 webového poštovního klienta Roundcube. V oznámení o vydání bylo zmíněno řešení bezpečnostního problému nalezeného společností RIPS a souvisejícího s voláním funkce mail() v PHP. Tento týden byly zveřejněny podrobnosti. Útočník mohl pomocí speciálně připraveného emailu spustit na serveru libovolný příkaz. Stejně, jak je popsáno v článku Exploit PHP’s mail() to get remote code execution z roku 2014.

Ladislav Hagara | Komentářů: 1
8.12. 16:00 | Nová verze

Byla vydána verze 0.98 svobodného nelineárního video editoru Pitivi. Z novinek lze zmínit například přizpůsobitelné klávesové zkratky. Videoukázka práce s nejnovější verzí Pitivi na YouTube.

Ladislav Hagara | Komentářů: 1
8.12. 15:00 | Zajímavý software

Stop motion je technika animace, při níž je reálný objekt mezi jednotlivými snímky ručně upravován a posouván o malé úseky, tak aby po spojení vyvolala animace dojem spojitosti. Jaký software lze pro stop motion použít na Linuxu? Článek na OMG! Ubuntu! představuje Heron Animation. Ten bohužel podporuje pouze webové kamery. Podpora digitálních zrcadlovek je začleněna například v programu qStopMotion.

Ladislav Hagara | Komentářů: 5
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (23%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 809 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: BUG v PHP array_search a in_array ?

21.5.2015 12:33 Sparrow | skóre: 4 | blog: Sparrow
BUG v PHP array_search a in_array ?
Přečteno: 269×

Zdravím,

teď jsem narazil na asi docela velký problém.
Při hledání v poli mi to tam najde hodnotu která tam není :)

Konkrétně jde o kontrolu voucherů ze Slevomatu, zda zákazník nezadá jeden voucher 2x.
Bohužel si z nějakého důvodu PHP myslí že 6089139600E-908 = 3767958990E-624.

Zkoušel jsem to php sanboxu a zjistil, že to blbne až od PHP v 5.2 :) V nižších verzích to funguje správně.

Výsledek následujího kódu je FIND IN 2

viz http://sandbox.onlinephpfunctions.com/code/df586ba56c8547a21853cade3dd5659195de4852

To samé dělá i in_array, vrací TRUE.

Vyřešil jsem to tím, že pole převedu na řetězec oddělený | a potom to hledám pomocí STRPOS, ale docela mne to rozhodilo.

Co vy na to?

Dan

 
$allCode=array(
    0 => "4911843820E-152",
    1 => "9189208690C-823",
    2 => "6089139600E-908",
    3 => "1847645250C-229",
);

$findCode="3767958990E-624";

$search = array_search($findCode,$allCode);

if($search !== false){
    echo "FIND IN ".$search;
}else{
    echo "NO FIND";
}

Řešení dotazu:


Odpovědi

21.5.2015 12:38 Sparrow | skóre: 4 | blog: Sparrow
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Řešení 1× (Sparrow (tazatel))
21.5.2015 13:00 lofcek
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Kratkodobe riesenie: Staci do search_array pridat posledny parameter (strict) true. Potom to bude fungovat.

Dlhodobe riesenie: Prestat pouzivat PHP, uz asi milion krat som zastal na podobnych koninach. Dalsi podobny bonus - retazec "0" je vyhodnoteny ako false a podobne. Proste ked jazyk vznikol bol dobry, ale dnes uz patri na zasluzeny odpocinok.
Řešení 1× (Sparrow (tazatel))
21.5.2015 14:29 Kit | skóre: 37 | Brno
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Přidání parametru strict je dlouhodobým řešením.

Dalším (a podle mne mnohem vhodnějším) dlouhodobým řešením je použití databáze, která ve většině případů umí hledat mnohem lépe než PHP.

"0" přece je false. Nechápu, čemu se divíš. Pokud ti to nevyhovuje, použij jiný predikát.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Jendа avatar 21.5.2015 16:41 Jendа | skóre: 73 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
"0" přece je false.
Ale tazatel nemá "0", ale string s nějakým bordelem. Jenom PHP se snaží být strašně chytré a vyrábí ze stringů floaty a další věci podle potřeby.
21.5.2015 17:47 chrono
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Keď poviem Php, aby sa pokúsilo porovnať podobné objekty (napr. pomocou ==, array_search bez strict, ...) zmenou typu, tak nemôžem byť prekvapený, že to naozaj urobí.
Jendа avatar 21.5.2015 19:38 Jendа | skóre: 73 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Samozřejmě, a to je deceptive default.
21.5.2015 20:06 Kit | skóre: 37 | Brno
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Obvykle je nejlepší takové konstrukce v PHP nepoužívat.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
21.5.2015 17:01 Sparrow | skóre: 4 | blog: Sparrow
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Díky za nakopnutí, toho parametru jsem si vůbec nevšiml (nebo zapomněl) nebyl do teď potřeba.

Jinak DB není potřeba jde o eShop a kontrolu pár kódů, než klient dokončí objednávku, o zbytek se pak už stará API Slevomatu.
21.5.2015 17:07 Kit | skóre: 37 | Brno
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Ty kódy přece nemáš v aplikaci, ale v databázi, takže uživatelem zadaný string můžeš porovnávat přímo v té databázi.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
21.5.2015 17:22 Sparrow | skóre: 4 | blog: Sparrow
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Vím jak to myslíš, ale kupóny se do DB ukládají až po dokončení objednávky. Jako "zboží" s minusovou hodnotou.

Během objednávky se slevové kupóny ukládají pouze do SESSION v DB je pouze zboží.

Je to kvůli tomu, že kupóny můžou mít časové omezení, tak když si vložím nějaké věci do košíku (ID košíku je v COOKIE) a vrátím se za třeba 3 dny tak kupón už může být neplatný.

Díky všem za radu
21.5.2015 17:36 Kit | skóre: 37 | Brno
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
A jak poznáš pravost kupónu od zákazníka jinak než jeho porovnáním se seznamem platných kupónů?
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
21.5.2015 17:50 Sparrow | skóre: 4 | blog: Sparrow
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Přes API Slevomatu (tam zkontroji platnost a zboží ke kterému se vztahuje), po dokončení objednávky je přes něj "uplatním" takže už nejde znovu použít.

Kódy si Slevomat generuje sám.

V postatě jeho kód ani nemusím ukládat, stačí mi výrobek a jeho cena co mám odečíst z objednávky, ale ukládám je kvůli pozdější kontrole.
21.5.2015 13:20 Jan Vostrý
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Bohužel to není bug ale feature. Pokud PHP porovnává dva stringy (operátor ==), které vypadají jako číslo, tak je oba převede na číslo a potom je porovnává. Tedy PHP pro "10" == "1e1" vrací true. viz. https://php.net/manual/en/language.operators.comparison.php
21.5.2015 16:58 Sparrow | skóre: 4 | blog: Sparrow
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Díky moc, to mne vůbec nenapadlo. Zadávám STRING myslím STRING, ach jo, taky mne mohlo trknout to E :(
21.5.2015 20:17 lertimir | skóre: 58 | blog: Par_slov
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
No když jsem si otázku četl, ani mě nenapadlo, že to čísla nejsou a spíše jsem přemýšlel, proč číslo v řádu 10^-908 se rovná číslu v řádu 10^-624 a myslím si, že jsou mimo přesnost a jsou oba float 0. Ale považuji za hloupost generovat stringy, které jsou čísla. Použitím i pismen je situace jednoznačná a stringy jsou navíc kratší se stejnou kolizní bezpečností.
Jendа avatar 21.5.2015 20:25 Jendа | skóre: 73 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Ale považuji za hloupost generovat stringy, které jsou čísla.
Jenže to je API slevomatu mimo jeho kontrolu. (a nejsou to čísla, podívej se na ty ostatní - 9189208690C-823)
21.5.2015 20:53 Sparrow | skóre: 4 | blog: Sparrow
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Přesně tak, já vůbec do poslední chvíle netušil jak budou kódy vypadat.

Dostal jsem akorát seznam ID (6 čísel) k propojení s výrobky.

Až dnes jsem dostal po 3 dnech odpověď (od někoho, kdo zná někoho, který má email na IT ze Slevomatu :D ) Jak se vlastně generuje kód kupónu.

xxxxxxxFF-xxx

X - náhodné číslo

FF - 256 kombinací pro produkt v HEX

Popis API ani nechtějte vědět a testací prostředí se skládá ze 3 kódů formát 1234567-111 až 333 (existují, neexistující, a již využitý)

Prostě radost něco napsat. :(

A jak jsem psal výše komunikace s IT probíhá přes obchoďáka a někoho kdo mám kontakt na někoho kdo něco ví.
21.5.2015 21:59 lertimir | skóre: 58 | blog: Par_slov
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
No a co kód v úplně prvním kroku concatenate s pevným stringem třeba "AA-".$SlevomatID, a pak v celém mém programu to bude vždy a pořád string, a až kód budu posílat Slevomatu tak prefix zase utrhnu.
Jendа avatar 21.5.2015 22:04 Jendа | skóre: 73 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Geniální řešení.

(jak je řešena stabilita té umělé inteligence napříč architekturami a verzemi? třeba až implementují komplexní čísla a začnou převádět všechny stringy kde je číslo a "i" :)
22.5.2015 10:08 logik
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Je řešena? V PHP? ....
21.5.2015 14:36 Kit | skóre: 37 | Brno
Rozbalit Rozbalit vše Re: BUG v PHP array_search a in_array ?
Však vidíš, že ta dvě čísla jsou stejná:
<?php
$a = "3767958990E-624";
$b = "6089139600E-908";
echo ($a == $b) ? "rovno" : "nerovno";
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.