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 06:33 | Komunita

    Přímý přenos (YouTube) z konference LinuxDays 2024, jež probíhá tento víkend v Praze v prostorách Fakulty informačních technologií Českého vysokého učení v Praze (FIT ČVUT). Na programu je spousta zajímavých přednášek.

    Ladislav Hagara | Komentářů: 0
    včera 07:11 | IT novinky

    Elon Musk na akci We, Robot (YouTube, 𝕏) představil Robotaxi, Robovan a vylepšeného Tesla Bota (Optimus).

    Ladislav Hagara | Komentářů: 40
    včera 06:33 | IT novinky

    Internet Archive je offline (𝕏, Bluesky, Mastodon‪). Unikly údaje 31 milionů uživatelů. Probíhal / probíhá na něj DDoS útok.

    Ladislav Hagara | Komentářů: 0
    včera 05:22 | Komunita

    Alyssa Rosenzweig se v příspěvku na svém blogu rozepsala o hraní AAA her na Asahi Linuxu. Na YouTube je záznam její včerejší přednášky na XDC 2024 (X.Org Developer's Conference).

    Ladislav Hagara | Komentářů: 10
    včera 04:55 | IT novinky

    Vláda schválila Národní polovodičovou strategii: Česká republika má velký potenciál stát se významným hráčem v oblasti výroby čipů, zejména v evropském měřítku. Využít tento potenciál je cílem Národní polovodičové strategie, kterou připravilo Ministerstvo průmyslu a obchodu ve spolupráci s experty, a která navazuje na evropský Akt o čipech.

    Ladislav Hagara | Komentářů: 2
    10.10. 18:11 | Zajímavý software

    V lete vyšiel Aeonwave 4.0, ktorý niekoľkonásobne menej vyťažuje procesor pri interpretácií priestorového zvuku než OpenAL Soft. Autor hľadá prispievateľov do knižnice libaaxopenal za účelom pridania ALC_EXT_EFX rozšírení využívaných napr. v hre Doom 3 cez port Dhewm3 v Linuxe.

    atirage21 | Komentářů: 6
    10.10. 15:33 | Nová verze

    Linuxová distribuce Ubuntu 24.10 „Oracular Oriole“ byla vydána. Jde o průběžné vydání s podporou 9 měsíců. Obsahuje mj. Linux 6.11 či GNOME 47 s několika odkazy na první vydání Ubuntu (4.10 „Warty Warthog“) před 20 lety. K dispozici jsou také oficiální deriváty s odlišnými výchozími desktopovými prostředími anebo balíky aplikací.

    Fluttershy, yay! | Komentářů: 2
    10.10. 13:55 | Nová verze

    Deno (Wikipedie), běhové prostředí (runtime) pro JavaScript, TypeScript a WebAssembly, bylo vydáno v nové major verzi 2.0 (YouTube). Důležité změny v Migration Guide.

    Ladislav Hagara | Komentářů: 3
    10.10. 13:33 | Nová verze

    Apache Tomcat (Wikipedie) slaví 25 let. Při té příležitosti byla vydána nová verze 11.0. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    10.10. 12:44 | Nová verze

    Open source 3D herní a simulační engine Open 3D Engine (O3DE) byl vydán v nové verzi 24.09.0. Přehled novinek v poznámkách k vydání. O3DE má nového maskota: Odie.

    Ladislav Hagara | Komentářů: 0
    Rozcestník

    Dotaz: PHP + MySQL - pole

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

    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.