abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:44 | Nová verze

    Nová čísla časopisů od nakladatelství Raspberry Pi: MagPi 140 (pdf) a HackSpace 77 (pdf).

    Ladislav Hagara | Komentářů: 0
    dnes 01:00 | Nová verze

    ESPHome, tj. open source systém umožňující nastavovat zařízení s čipy ESP (i dalšími) pomocí konfiguračních souborů a připojit je do domácí automatizace, například do Home Assistantu, byl vydán ve verzi 2024.4.0.

    Ladislav Hagara | Komentářů: 0
    včera 22:11 | IT novinky Ladislav Hagara | Komentářů: 0
    včera 20:55 | Nová verze

    Neziskové průmyslové konsorcium Khronos Group vydalo verzi 1.1 specifikace OpenXR (Wikipedie), tj. standardu specifikujícího přístup k platformám a zařízením pro XR, tj. platformám a zařízením pro AR (rozšířenou realitu) a VR (virtuální realitu). Do základu se z rozšíření dostalo XR_EXT_local_floor. Společnost Collabora implementuje novou verzi specifikace do platformy Monado, tj. open source implementace OpenXR.

    Ladislav Hagara | Komentářů: 2
    včera 17:22 | Nová verze

    Byla vydána nová verze 0.38.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 4.4 nebo novější a také libplacebo 6.338.2 nebo novější.

    Ladislav Hagara | Komentářů: 1
    včera 17:11 | Nová verze

    ClamAV (Wikipedie), tj. multiplatformní antivirový engine s otevřeným zdrojovým kódem pro detekci trojských koní, virů, malwaru a dalších škodlivých hrozeb, byl vydán ve verzích 1.3.1, 1.2.3 a 1.0.6. Ve verzi 1.3.1 je mimo jiné řešena bezpečnostní chyba CVE-2024-20380.

    Ladislav Hagara | Komentářů: 1
    včera 12:11 | IT novinky

    Digitální a informační agentura (DIA) oznámila (PDF, X a Facebook), že mobilní aplikace Portál občana je ode dneška oficiálně venku.

    Ladislav Hagara | Komentářů: 8
    včera 05:11 | Komunita

    #HACKUJBRNO 2024, byly zveřejněny výsledky a výstupy hackathonu města Brna nad otevřenými městskými daty, který se konal 13. a 14. dubna 2024.

    Ladislav Hagara | Komentářů: 2
    17.4. 17:55 | IT novinky

    Společnost Volla Systeme stojící za telefony Volla spustila na Kickstarteru kampaň na podporu tabletu Volla Tablet s Volla OS nebo Ubuntu Touch.

    Ladislav Hagara | Komentářů: 3
    17.4. 17:44 | IT novinky

    Společnost Boston Dynamics oznámila, že humanoidní hydraulický robot HD Atlas šel do důchodu (YouTube). Nastupuje nová vylepšená elektrická varianta (YouTube).

    Ladislav Hagara | Komentářů: 1
    KDE Plasma 6
     (68%)
     (10%)
     (2%)
     (20%)
    Celkem 557 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: PHP + MySQL - pole

    4.6.2013 12:52 dennyx
    PHP + MySQL - pole
    Přečteno: 830×

    Dobrý den,

     

    chtěl bych se zeptat na radu zkušenějších programátorů.


    Něco na úvod o mé problematice - snažím se udělat internetový obchod a dostal jsem se do poslední fáze, kterou tvoří zapsání záznamů (produktů) z košíku do databáze.

    Vypisování řeším pomocí pole a session a potřeboval bych poradit s cyklem, který by prošel všechny zakoupené záznamy a zapsal je do databáze.

     

    Tento obchod nepůjde do ostrého provozu, proto není potřeba se zabývat zabezpečením jako je sql injection apod.

     


    Pro lepší pochopení příkládám screenshoty (Návrh tabulek, hl. stránka a screenshot kódu pro lepší zobrazení)

    Vzhled webové stránky s nákupem - http://2imgs.com/2i/i/51add260/b9d58ed187be42f29810afdb884b5ca2/115e1c36e5.f.png

     

    Návrh tabulek - http://2imgs.com/2i/i/51add2e2/b40d7c96fe11b51d123e6b56fe605aeb/eea1e3c91a.f.png

     

    Část kódu-

    http://2imgs.com/2i/i/51add318/2635afae9fb269957231f9cbbc8dd500/ffb0f2d80b.f.png

    http://2imgs.com/2i/i/51add322/31275a004b304afc7822a7d1f92627cd/cc83c1eb38.f.png

    http://2imgs.com/2i/i/51add328/53faf384a0fc6a3ef0585ae9f066e6b3/dd92d0fa29.f.png

     

    Pokud by někdo měl čas a ochotu pomoci, byl bych mu neskutečně vděčný, jelikož je to poslední část.

    Děkuji,

    Daniel!

    Odpovědi

    Tarmaq avatar 4.6.2013 13:52 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Zadny z obrazku se mi nezobrazuje. Navic doporucuju kod nevkladat jako obrazek, ale umistit ho sem do tagu <pre>
    Don't panic!
    4.6.2013 14:08 dennyx
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Přílohy:
    To se omlouvám, mě ty odkazy fungují. Přikládám zde část kódu a v přílohách obrázky, jelikož zde jsem mohl vložit čistě jen kód z php.
            
    if(isset($_GET['id_kosik'])){
            $id = $_GET["id_kosik"];
            $nazev = $_GET["nazev_kosik"];
            $cena = $_GET["cena_kosik"];
            }
            $_SESSION["data"][$id]=array(
              "nazev_kosik"=>$nazev,
              "cena_kosik"=>$cena,
            );
            if(is_array($_SESSION["data"])) {
              foreach ($_SESSION["data"] as $id=>$data) {
                $nazev = $data["nazev_kosik"];
                $cena = $data["cena_kosik"];
    			echo "";
                echo $id."";
                echo $nazev."";
                echo $cena."";
                echo "";
              }
            }
    
    			if(isset($_POST['jmeno_kosik'])){
                $dotaz1="INSERT INTO nakupujici (jmeno,prijmeni,bydliste,email,tel_cislo) VALUES (";
    			$dotaz1.="'".$_POST['jmeno_kosik']."',";
    			$dotaz1.="'".$_POST['prijmeni_kosik']."',";
    			$dotaz1.="'".$_POST['bydliste_kosik']."',";
    			$dotaz1.="'".$_POST['email_kosik']."',";
    			$dotaz1.="'".$_POST['telefon_kosik']."');";
                $vysledek1 =  mysql_query($dotaz1) or die (mysql_error());
    			echo "přidáno";
    			}
    			
    			
    			for($i= 0; $i < count($nazev); $i++){
                $dotaz="INSERT INTO kosik (zbozi_id,nazev_zbozi,cena_zbozi) VALUES (";
    			$dotaz.="'".$id."',";
    			$dotaz.="'".$nazev."',";
    			$dotaz.="'".$cena."');";
                $vysledek =  mysql_query($dotaz) or die (mysql_error());
    			}
    
    
    4.6.2013 15:16 Kit
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Doporučuji celé smazat a napsat znovu. Je to děravé jako řešeto, pro nasazení nepoužitelné.
    4.6.2013 15:51 dennyx
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Nemá to jít do ostrého nasazení, tudíž jestli je to děravé nebo ne je v podstatě fuk.

    Navíc, i kdybych to celé smazal, nevymyslel bych nic jinýho. Spíš by se mě hodila rada jak pokračovat, nebo jak znovu začít.

    Rada celý to smaž mě osobně k ničemu nepomůže.
    4.6.2013 17:44 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Děravé je to v zásadě ze dvou důvodů. První je že používáš uživatelem zadaná vstupní data rovnou na konstrukci dotazu a druhý je, že nepoužíváš vůbec mysql_escape_string(), a na závěr ještě to nejnevhodnější připojení do db, tedy pomocí mysql, kdyby alespoň mysqli, kde by už i Prepared Statements lze použít hezky.
    Je dobré si to zkusit od píky a zabývat se pak i tím, „proč je to špatně“, nyní je to ukázka velmi nebezpečného kódu a neměl by být akceptován i za jen výukovým účelem jinak, než jako „tudy tedy ne“.
    Jinak původní otázce moc nerozumím, SQL dotazy jaksi tvoříš a foreach, taky používáš…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    4.6.2013 19:38 dennyx
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole

    Je poměrně zajímavé tohle všechno číst. Studuji 3.ročník SŠ oboru IT a způsob, který mi je zde vytýkán je zároveň i způsob, jakým mě to ve škole naučili.

    V podstatě jsem se ještě nedozvěděl žádnou radu, jak pokračovat. je mi zde vytýkána bezpečnost, ale o tu v tomhle případě nejde, protože se to nikde používat nebude.

     

    Původní otázka je - jak zapsat ten nákup kterýje vypisován do pole do databáze.

    Mám tam sice cyklus, který by záznamy v poli měl projít, ale nefunguje správně.

    4.6.2013 20:11 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    I pokud je to učení jen mimochodem a ne jako „hlavní“ předmět, je to špatně porušuje to totiž elementární principy (vstup musí být ošetřený).
    Pokud by to byl kód zapsat/přečíst z DB nu dobrá, ale je to „web“ kód, toto je od základu špatně, takže to málokdo, kdo trochu „ví“, stráví.
    Možná to vypadá, že ti nikdo nechce pomoct, ale je to spíš o tom, že to nikdo nechce za tebe psát (nehledě na to, že by to musel celé přepsat protože, prostě bez záklaního ošetření to lze těžko publikovat :( ), ona ta otázka je vágní.
    Za předpokladu, že ID sloupce jsou auto_increment, tak asi ti jde o toto (nakupujici_id):
    $sqlq="INSERT INTO nakupujici (jmeno,prijmeni,bydliste,email,tel_cislo) VALUES…";
    mysql_query($sqlq)…
    //získani id posledního vloženého záznamu, nesmí být použit mysql_pconnect() pro připojení
    $nakupujici_id=mysql_insert_id();
    for($i= 0; $i < count($nazev); $i++){
      $sql="INSERT INTO kosik (nakupujici_id,zbozi_id,nazev_zbozi,cena_zbozi) VALUES ('${nakupujici_id}',…";
      mysql_query($sqlq)…
      …
    }
    
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    kozzi avatar 4.6.2013 20:23 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole

    Mohl bych se zeptat kam chodis na skolu?

    Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
    4.6.2013 18:15 kuka
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    A cemu to teda ma cele byt? Od toho se odviji, jak dal postupovat.
    kozzi avatar 4.6.2013 19:31 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole

    fuk to neni, jde o to proc takovyto kod vubec psat? Pokud se hodlate neco naucit, tak prave to ze to delate spatne a to jak by jste to mel delat by melo byt dulezite. Pokud jde o nejaky skolni projekt, tak by za neco takoveho meli dat nula bodu, takze opet ma smysl to resit a neni to fuk.

    Celkove bych se zamyslel, jestli to cele nesmazat a nezacit znovu, a treba zkusit pouzit nejaky framework. Osobne mohu doporucit napriklad Nette.

    Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
    4.6.2013 15:20 blondak | skóre: 36 | blog: Blondak | Čáslav
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Použil bych alespoň PDO
    Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
    4.6.2013 15:55 dennyx
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    O tom slyším poprvé a vypadá to jako skvělé ulehčení. Ale když už jsem udělal celej ten obchod (administrace, zobrazení, design a všechno) tímto způsobem a chybí mě jen zápis nákupu do db, nevím jestli by změna v tomto bodě byla vhodná.

    Nebo se mýlím?
    rADOn avatar 4.6.2013 16:36 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Z dlouhodobyho hlediska asi jo. Ale na tvym levelu ti trocha low-level praxe nemuze uskodit. Ony se vsechny tyhlety supermegacool nadstavby lip pouzivaji kdyz clovek ma predstavu co je pod kapotou.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    kozzi avatar 4.6.2013 19:38 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole

    Co se tyce navrhu, tak minimalne si myslim ze nazev_zbozi v kosiku je zbytecnej, kdyz uz tam je id na zbozi, a naopak mi tam chyby pocet kusu nakoupeneho zbozi

    Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
    4.6.2013 19:47 dennyx
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    S tím názvem zboží souhlasím. Počtem kusů se chci zabývat až se mě podaří úspěšný zápis do databáze
    kozzi avatar 4.6.2013 20:17 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole

    Ok co se tyce kodu, tak:

    for($i= 0; $i < count($nazev); $i++){
        $dotaz="INSERT INTO kosik (zbozi_id,nazev_zbozi,cena_zbozi) VALUES (";
        $dotaz.="'".$id."',";
        $dotaz.="'".$nazev."',";
        $dotaz.="'".$cena."');";
        $vysledek =  mysql_query($dotaz) or die (mysql_error());
    }
    
    tohle ma podle tebe delat co? nechces tam neco jako:
    foreach($_SESSION["data"] as $id=>$data){
        $nazev = $data['nazev'];
        $cena = $data['cena'];
        $dotaz="INSERT INTO kosik (zbozi_id,nazev_zbozi,cena_zbozi) VALUES (";
        $dotaz.="'$id',";
        $dotaz.="'$nazev',";
        $dotaz.="'$cena');";
        $vysledek =  mysql_query($dotaz) or die (mysql_error());
    }
    
    Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
    David Watzke avatar 5.6.2013 13:56 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    INSERTem lze vložit víc řádků najednou. (Následující jsem netestoval.)
    $dotaz="INSERT INTO kosik (zbozi_id,nazev_zbozi,cena_zbozi) VALUES ";
    $vysledek=NULL;
    
    foreach($_SESSION["data"] as $id=>$data){
        $nazev = $data['nazev'];
        $cena = $data['cena'];
    
        $dotaz.="('$id', '$nazev', '$cena'),";
    }
    
    if ($dotaz[strlen($dotaz)-1] == ',') {
        $dotaz[strlen($dotaz)-1] = ')';
        $vysledek = mysql_query("$dotaz;") or die (mysql_error());
    }
    
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    7.6.2013 10:56 Kozzi
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Tak to samozrejme jde, ale prichazi se o moznost napriklad zjistit posledni vlozene id zaznamu . Ale je pravda ze v tomto pripade ho nejspis stejne k nicemu nepotrebuje, takze aspon usetri vykon
    7.6.2013 11:26 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Tuto fičuru využívám ve velmi specifických případech, pro založení desítek až set tisíců záznamů, ale je trochu na ladění, kdy to na daném nastavení serveru (a HW) má pozitivní efekt, pode mé zkušenosti úspora začíná na několika desítkách až set záznamech a končí (u jednoduchých insert-ů) někde v jednotkách tísíc, až desítek tisíc a úspora může být až několika-více-násobků rychlejší.
    Poslední vložené id záznamu (, které není nyní potřeba) stále funguje, ale jinak :-), po příkazu je nastaveno na ID prvního záznamu.
    Prostě multi-insert to spíše zpřehlední, než zrychlí, ale nemusí to být přenositelné…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.6.2013 10:23 blondak | skóre: 36 | blog: Blondak | Čáslav
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Není, název by tam měl být, představete si, že bude chtít v budoucnosti ten samý výrobek třeba jen přejmenovat, nebo k němu přidat nějaký dárek. Už jsem se s tím párkrát setkal a název opravdu ukládat doporučiji, stejně jako cenu a případně sazbu DPH.
    Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
    6.6.2013 11:52 Kit
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    S tím názvem, cenou a sazbou DPH souhlasím, ale určitě by se neměly předávat přes POST, ale přímo z databáze při insertu. Přes POST by se mělo předat jen ID a množství žádaného zboží.
    6.6.2013 15:06 blondak | skóre: 36 | blog: Blondak | Čáslav
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Ano, s tím se nedá než souhlasit. Bral jsem to jako samozřejmost :-O.
    Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
    6.6.2013 15:13 Kit
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Když se podívám na první skript od it_projekt, tak mi to zas tak samozřejmé nepřipadá :-)
    4.6.2013 23:06 dennyx
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole

    Mnohokrát všem děkuji, uživatelům Kozzi a Šangala, konečně jsem se částečně posunul z místa a mohu pokračovat.

     

    Dále pro upřesnění -

    často mi zde byla vytýkáná ,,děravost" a nemožnost užití v praxi. Chci bych jen říct, že takové použití do nás učitelé vštěpují a jelikož se o programování zas tak moc nezajímám, používám to, co jsem se od nich naučil.

     

    Ještě jednou děkuji.

    5.6.2013 12:40 fffffffffffffffffffffff
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Ucitelia by si mali doplnit/osvojit vedomosti ohladom osetrovania vstupov od uzivatelov nezavisle od programovacieho jazyka.
    5.6.2013 16:13 jos
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    tohle vytiskni a lípni to tomu učiteli na kabinet
    okbob avatar 5.6.2013 19:43 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Prosím o kontakt na Vaše učitele. Rád jim to osobně vysvětlím.

    Čistě se má psát bez ohledu na to, jestli to někdo uvidí nebo ne. Zvlášť při výuce, neb co se v mládí naučíš, tak to potom použiješ :-(.

    A SQL injection je nehorázná ostuda!
    5.6.2013 20:21 dennyx
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole

    Ani si nedokážeš představit, jak rád bych ti ten kontakt dal. Není to poprvé, co mě bylo řečeno, že podobný kód se v praxi použít nedá. Na druhou stranu, kdyby mu podobná zpráva došla, soudě podle mého nicku a žádosti(typu) o radu bych z toho ve výsledku měl jen problémy.

    Přece jen co člověk na internetu jednou napíše, to tam taky zůstane.

     

    Z té lepší stránky si člověk udělá obrázek o výuce některých kantorů. :o)

    okbob avatar 5.6.2013 21:29 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole
    Výuka nemusí být dokonalá - a ne všechno musí být nezbytně praktické - ale všechno musí být bezpečné! Mám stavební průmyslovku, a představte si, že by nás podobným způsobem učili konstrukci staveb. Samozřejmě, že nás učili technologie, které se pak už třeba nepoužívali nebo leccos nám zatajili. Ale všechno, co nám řekli bylo bezpečné - a praktickou část vedli učitelé, kteří si své na stavbách odsloužili.

    Před roky jsem sloužil v Olomouci coby záklaďák, a potkával jsem se s holkama z peďáku. Jako ajťák jsem žasl, jaké nesmysly se učí. Mentorovaly parametry filesystému a klávesové zkratky wordu. Vím, že učit databáze není jednoduché - ale lepší je někdy neučit než učit blbě.
    6.6.2013 09:01 DarkKnightCZ | skóre: 12
    Rozbalit Rozbalit vše Re: PHP + MySQL - pole

    co databaze... se spatne navrzenou databazi muze mensi projekt stabilne fungovat, ale s deravou aplikaci moc dlouho nevydrzi

    a celkove se na oborech mimo IT uci dost zajimave veci, nedavno jsem se taky podivoval nad tim, proc musi ekonomove vedet, jake kodeky se pouzivaji pro prenos zvuku a jake maji parametry

    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.