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í
×

    dnes 17:00 | Pozvánky

    Soutěž amatérských robotů Robotický den 2023 proběhne v neděli 4. června v Kongresovém centru Praha.

    Ladislav Hagara | Komentářů: 0
    dnes 14:11 | IT novinky

    V Tchaj-peji probíhá počítačový veletrh COMPUTEX 2023. Firmy představují své novinky. Nvidia například superpočítač DGX GH200 AI.

    Ladislav Hagara | Komentářů: 2
    dnes 12:11 | Nová verze

    Vyšla nová verze XMPP (Jabber) klienta Gajim. Nejvýznamnější novinkou je integrace OMEMO pluginu přímo do jádra aplikace, takže již není třeba plugin samostatně instalovat. Přehled dalších novinek je dostupný na oficiálních stránkách. Gajim je vytvořen v jazyce Python s využitím knihovny GTK a vedle Linuxu jej lze vyzkoušet i na platformách MacOS a Windows.

    sonicpp | Komentářů: 0
    včera 22:22 | Komunita

    Komunita KDE představila stránku KDE for Developers pro vývojáře používající KDE aplikace. Postupně byly představeny stránky pro umělce KDE for Creators, děti KDE for Kids a vědce KDE for Scientists.

    Ladislav Hagara | Komentářů: 5
    včera 16:00 | IT novinky Ladislav Hagara | Komentářů: 0
    28.5. 22:00 | IT novinky Ladislav Hagara | Komentářů: 0
    28.5. 13:55 | Komunita

    Na itch.io probíhá Linux Game Jam 2023. Zapojit se a přihlásit hru běžící na Linuxu lze do 6. června do 01:59. Zahrát si lze hry z loňského ročníku.

    Ladislav Hagara | Komentářů: 3
    27.5. 18:55 | IT novinky

    Na Steamu lze získat zdarma počítačové hry Warhammer 40,000: Gladius - Relics of War a Hue. Na Epic Games Storu počítačovou hru Fallout: New Vegas - Ultimate Edition.

    Ladislav Hagara | Komentářů: 10
    26.5. 08:00 | Komunita

    WordPress (Wikipedie), open source systém pro správu webového obsahu (CMS), zítra slaví 20 let. První verze byla vydána 27. května 2003.

    Ladislav Hagara | Komentářů: 47
    25.5. 21:44 | Nová verze

    Deno (Wikipedie), běhové prostředí (runtime) pro JavaScript, TypeScript a WebAssembly, bylo vydáno ve verzi 1.34. Přehled novinek v poznámkách k vydání. Od verze 1.6 lze pomocí "deno compile" sestavit ze zdrojových kódů binární spustitelný soubor. Nově "deno compile" podporuje také npm balíčky.

    Ladislav Hagara | Komentářů: 9
    Obnovovací frekvenci obrazovky (LCD) preferuji
     (73%)
     (21%)
     (4%)
     (2%)
    Celkem 788 hlasů
     Komentářů: 13, poslední 25.5. 07:25
    Rozcestník

    Dotaz: Divný select...

    poky74 avatar 23.6.2009 17:09 poky74 | skóre: 36 | blog: Zápisník | Vrchlabí
    Divný select...
    Přečteno: 250×
    V phpku dělám celkem dlouho, ale teď už několik hodin (!!!) bádám nad tím, s čím potřebuju poradit...

    Měl by to být script na výběr dat (článku) z db:
    $cislo_clanku=1;
    $pokracovat=1;
    
    while ($pokracovat==1){
    $clanekk=mysql_fetch_array(mysql_query('select * from clanky where id="'.$cislo_clanku.'"'));
    if($clanekk['adr']==$_GET['read']){echo "bingo";$pokracovat=0;}
    $cislo_clanku++;
    }
    
    Tedy je to cykl, který se bude provádět, dokud se mu neřekne dost (respektive nenastaví proměnná $pokracovat na 0).

    Na nulu se to nastaví v případě že $clanekk['adr']==$_GET['read'], v db jsou dva záznamy v kolonce "adr" a to "ahoj" a "cau".

    Bohžel ať je v proměnné $_GET['read'] "ahoj" nebo "cau" tak se zacyklí, proč?

    Díky

    PS. vím, že takhle se to nedělá, ale už jen z principu bych rád přišel na to, proč to nejede...
    Chcete Linuxové samolepky nebo Tuxe na klíče? ->

    Odpovědi

    23.6.2009 18:32 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Divný select...

    Fujtajbl :), žádné ošetření, procházení znovu a znovu novým selectem - to je docela fičák :)
    ale ...
    Dal bych před if toto

    echo "['".$clanekk['adr']."' = '".$_GET['read']."']<br />";
    

    a na konec

    if($cislo_clanku > 1000) break;

    a díval se co se vypíše - to je takový rychlý „debuger“ :)
    ahoj a cau lze porovnávat pomocí = pokud to teda není jedno v UTF-16 a druhé v UTF-8, ale jinak bych doporučil strcmp()

    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    poky74 avatar 24.6.2009 00:17 poky74 | skóre: 36 | blog: Zápisník | Vrchlabí
    Rozbalit Rozbalit vše Re: Divný select...
    Divné, píše to tohle:
    ['ahoj-ahoj ' = 'cau']
    ['cau ' = 'cau']
    ['' = 'cau']
    ['' = 'cau']
    ['' = 'cau']
    ['' = 'cau']
    ['' = 'cau']
    ['' = 'cau']
    ['' = 'cau']
    ['' = 'cau'].............. TO SAME PORAT DOKOLA
    
    Jinak, pokud jsou nyni v db 2 zaznamy, mel by se cykl vykonat maximalne 2x, ne se zacyklit...
    Chcete Linuxové samolepky nebo Tuxe na klíče? ->
    24.6.2009 00:30 T
    Rozbalit Rozbalit vše Re: Divný select...
    Protoze v databazi jsou ulozeny "ahoj " a "cau " - s mezerou na konci, proto se cyklus nezastavi na podmince rovnosti tech retezcu. Kazdej dalsi select vybere prazdny radek, ale to neni osetreno v podmince cyklu. Takze se program zacykli.
    24.6.2009 08:47 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Divný select...

    No na tom je jasně vidět kam takový kód vede :)
    Kdyby bylo ošetřeno mysql_query a mysql_query jasně by bylo vidět, že to (asi) na 3. smyčku vrací nulový počet řádků tudíž:
    $clanekk === NULL
    Pokud se jedná o PHP5 (i PHP4 s malou vyjímkou) tak pokud vložíš na začátku kódu

     error_reporting(E_ALL | E_STRICT);//php4 (asi) error_reporting(E_ALL);
     ini_set('display_errors', 'On');
    

    Jistě tam vyjedou nějaká zajímavá hlášení :)
    Jinak 'cau' a 'cau ' není překvapivě totéž :)
    DOPORUČUJI jednoznačně kód ošetřit tzn. minimálně:

    if(!($rs = mysql_query('select * from clanky where id="'.$cislo_clanku.'"')));
    {
     error
    }
    else
      if(!($clanekk=mysql_fetch_array($rs)))
      {
        /*
          pozor na mysqli_xxxx vrací NULL, mysql_xxx false 
        */
        error
      }
      else
      { 
        pokracovat
      }
    }
    

    Po důvodu braní záznamů po jednom nepátrám, jediné takovéto použití co mě napadá:
    snad že řádek je moc veliký (např ø 1Mb) a je jich nekonečně mnoho a provádí se s řádkem nějaké operace a pak se zahodí.
    V tom případě je to odůvodnitelné štření zdrojů na úkor výkonu.
    Také nepátrám proč neporovnat v clausuli WHERE rovnou text :).

     

    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    poky74 avatar 24.6.2009 09:28 poky74 | skóre: 36 | blog: Zápisník | Vrchlabí
    Rozbalit Rozbalit vše Re: Divný select...
    Ejhle, mezery jsem si nevšiml :)

    Teď už se s tím poperu, díky vám za pomoc, mezera me opravdu nenapadla :)
    Chcete Linuxové samolepky nebo Tuxe na klíče? ->
    24.6.2009 09:53 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: Divný select...
    Kdybys to porovnával v databázi, tak by mezera na konci nebyla problém, protože ji MySQL u nebinárních typů ignoruje (je to vysvětleno v manuálu).
    23.6.2009 20:50 12345 | skóre: 41 | blog:
    Rozbalit Rozbalit vše Re: Divný select...
    Existuje nějaký rozumný důvod, proč nepoužít WHERE adr = ? a dosadit tam správně ošetřenou (escaping nebo lépe prepared statement) hodnotu $_GET['read']? Tenhle kód si přímo říká o DoS. I kdyby to někdo neudělal záměrně, stačí trochu větší návštěvnost a program si to zařídí sám. Takovými zdrojáky se straší malé servery, případně se objevují na The Daily WTF :-)

    Mimochodem, PHP má datový typ bool.

    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.