Autor | Zpráva | ||
---|---|---|---|
Sabracon Profil |
#1 · Zasláno: 19. 8. 2014, 22:50:21
Ahoj,
potřeboval bych poradit, jak dál už jsem zoufalí a nemůžu na internetu najít uspokojující odpověď. Nejdříve popíšu problém. Mam přes cyklus výpis tabulek z mysql kde jsou výrobci a v nich jejich polozky. Vypisují se mi položky, kde u každé je checkbox a možnost zvolit si počet kusů. Po odeslání formuláře se vše zapíše do souboru. Podařilo se mi rozběhat ten výběr položek a uložení do souboru na základě výrobce, ale celý večer nemůžu přijít nato, jak k tomu přilepit <input type=text value=mj>. Jde mi o to, aby při odeslání vybraných položek se uložili i inputy kde jsem napsal počet kusu k vybrane polozce. Jde to vubec udelat ? částečný kod formulare: $sklad = array ("Eden", "Franke", "Gelco", "Grohe", "Hansa", "Imagine", "Jika", "LB", "Lebon", "Weber", "Nimco", "Polysan", "Rol", "RolTechnik", "Ronal", "Santech", "SDK", "Voda"); for($p = 0; $p < count($sklad); ++$p){ print "<h3 onclick=zobrazSkryj('oddil_".$sklad[$p]."')>".$sklad[$p]."</h3> <div id=oddil_".$sklad[$p]." class=skryvany> <br /> <input type='hidden' name='vyrobce' value='".$sklad[$p]."'>"; ///////////////////////////////////////////////////////////////////////////////////////////////////////// Sklady include "db.php"; mysql_set_charset("utf8"); $sql=MySQL_Query("SELECT * FROM $sklad[$p] LIMIT 0, 1000"); print "<table border=1 frame=below rules=rows><tr><td>ID</td><td>Název</td><td>MJ</td><td>Nákupní cena</td><td>Cena bez DPH</td><td>Číslo katalogu</td></tr>"; while ($zaznam = MySQL_Fetch_Array($sql)){ $id=$zaznam['id']; print "<tr><td><input type=hidden name=sklad value=$sklad[$p]><input type='checkbox' name='vybrat[".$zaznam['id']."]' value='1'></td><td>".$zaznam['popis']."</td><td><input type='text' name='mj[]' value='".$zaznam['mj']."' size='3'></td><td>".$zaznam['car_kod']."</td><td>".$zaznam['cena_bez']."</td><td>".$zaznam['id_kat']."</td></tr>"; } print "</table> <br /> <br /> <br /> <h3 onclick=zobrazSkryj('oddil_".$sklad[$p]."')>Skrýt obsah</h3> </form> </div> <br /> "; } a tady je kod pro ulozeni: $vyrobce = $_POST ['sklad']; foreach($_POST['vybrat'] as $id => $vybrat) { foreach($_POST['mj'] as $mj => $mjj){ $sql = MySQL_Query("SELECT * FROM $vyrobce WHERE $vyrobce.id='$id'"); $zaznam = MySQL_Fetch_Array($sql); $soubor = fopen("../klienti/$slozka/$slozka.txt", "a+"); fwrite($soubor, $zaznam ['popis']."|".$mj."|"); fwrite($soubor, $zaznam ['cena_bez']."|\n"); fclose($soubor); } } Děkuji moc za pomoc. Třeba to bude primitivní a předpokládám,že ano :) |
||
Taps Profil |
Sabracon:
nebude stačit jen ? <? fwrite($soubor, $zaznam ['popis']."|".$mjj."|"); ?> |
||
Sabracon Profil |
#3 · Zasláno: 20. 8. 2014, 08:22:23
Upravil jsem ještě řádek ve formuláři
print "<tr><td><input type=hidden name='sklad[".$zaznam['id']."]' value=$sklad[$p]><input type='checkbox' name='vybrat[".$zaznam['id']."][".$sklad[$p]."]' value='1'></td><td>".$zaznam['popis']."</td><td><input type='text' name='kusy[]' value='' size='3'></td><td>".$zaznam['car_kod']."</td><td>".$zaznam['cena_bez']."</td><td>".$zaznam['id_kat']."</td></tr>"; Kde vlastně posílám dvě pole sklad[".$zaznam['id']."] a 'vybrat[".$zaznam['id']."][".$sklad[$p]."] A při zpracování dotazu takto: foreach($_POST['vybrat'] as $id => $vybrat) { foreach($vybrat as $p => $pp) { foreach($_POST ['kusy'] as $mj => $mjj){ if(empty($mjj)){ }else{ $sql = MySQL_Query("SELECT * FROM $p WHERE $p.id='$id'"); $zaznam = MySQL_Fetch_Array($sql); $soubor = fopen("../klienti/$slozka/$slozka.txt", "a+"); fwrite($soubor, $p."|".$zaznam ['popis']."|".$mjj."|"); fwrite($soubor, $zaznam ['cena_bez']."|\n"); fclose($soubor); } } } A tady jsem docílil toho, že mi do souboru při výběru třeba 3 položek uloží každou položku 3x a z počtem kusů jsem zadal 5,4,3, které jsem zadal. A do souboru mi to zapíše takto: Eden|AL 19 L-EDEN- závěsná horní skříňka||5 241,00| Eden|AL 19 P-EDEN- závěsná horní skříňka||5 241,00| Eden|AL 23-EDEN- zrcadlo v AL rámu||4 295,00| Eden|AL 19 L-EDEN- závěsná horní skříňka|5|5 241,00| Eden|AL 19 L-EDEN- závěsná horní skříňka|4|5 241,00| Eden|AL 19 L-EDEN- závěsná horní skříňka|3|5 241,00| Eden|AL 19 P-EDEN- závěsná horní skříňka|5|5 241,00| Eden|AL 19 P-EDEN- závěsná horní skříňka|4|5 241,00| Eden|AL 19 P-EDEN- závěsná horní skříňka|3|5 241,00| Eden|AL 23-EDEN- zrcadlo v AL rámu|5|4 295,00| Eden|AL 23-EDEN- zrcadlo v AL rámu|4|4 295,00| Eden|AL 23-EDEN- zrcadlo v AL rámu|3|4 295,00| Snad to popisuji správně. Jedná se mi o Vybrání položky z řádku, zadání počet kusu a správné zapsání do souboru, tak abych s tím mohl hned pracovat a vypisovat zboží s počtem kusů. Děkuji moc za pomoc. |
||
Sabracon Profil |
#4 · Zasláno: 20. 8. 2014, 12:23:02
Popsal bych to ještě jednoduše jak bych si to představoval, aby to bylo lépe pohopitelné.
Soubor formular.php <form action='uloz.php' method='post'> Vyrobci Srouby <input type=hidden name='sklad[1]' value=Srouby> <input type='checkbox' name='vybrat[1][Srouby]' value='1'> srouby 15cm dlouhe , Zvolte pocet kusu<input type='text' name='kusy[]' value='' size='3'> Cena 15,- ks. <input type=hidden name='sklad[2]' value=Srouby> <input type='checkbox' name='vybrat[2][Srouby]' value='1'> srouby 20cm dlouhe , Zvolte pocet kusu<input type='text' name='kusy[]' value='' size='3'> Cena 5,- ks. <input type=hidden name='sklad[3]' value=Srouby> <input type='checkbox' name='vybrat[3][Srouby]' value='1'> srouby 30cm dlouhe , Zvolte pocet kusu<input type='text' name='kusy[]' value='' size='3'> Cena 20,- ks. Hmozdenky <input type=hidden name='sklad[1]' value=Hmozdenky> <input type='checkbox' name='vybrat[1][Hmozdenky]' value='1'> Hmozdenka mala , Zvolte pocet kusu<input type='text' name='kusy[]' value='' size='3'> Cena 2,- ks. <input type=hidden name='sklad[2]' value=Hmozdenky> <input type='checkbox' name='vybrat[2][Hmozdenky]' value='1'>Hmozdenkadlouhe , Zvolte pocet kusu<input type='text' name='kusy[]' value='' size='3'> Cena 3,- ks. <input type=hidden name='sklad[3]' value=Hmozdenky> <input type='checkbox' name='vybrat[3][Hmozdenky]' value='1'> Hmozdenka kotva , Zvolte pocet kusu<input type='text' name='kusy[]' value='' size='3'> Cena 4,- ks. <input type=submit value=Vytvor nabidku> </form> A tady je soubor , kde se to zpracuje: uloz.php <? foreach($_POST['vybrat'] as $id => $vybrat) { foreach($vybrat as $p => $pp) { foreach($_POST ['kusy'] as $mj => $mjj){ if(empty($mjj)) { }else{ $sql = MySQL_Query("SELECT * FROM $p WHERE $p.id='$id'"); //vyber skladu z mysql pomoci $p druhe pole v $_POST[vybrat] $zaznam = MySQL_Fetch_Array($sql); $soubor = fopen("../klienti/$slozka/$slozka.txt", "a+"); /// otevre a zapise zbozi fwrite($soubor, $p."|".$zaznam ['popis']."|".$mjj."|"); /// melo by zapsat jen vyplneni input pro kusy fwrite($soubor, $zaznam ['cena_bez']."|\n"); // cena a enter fclose($soubor); } } } ?> Ale stejně mi to nejde uloží to tam vícekrát. Nebo třeba nato jdu úplně špatně a je jiný způsob jak toho docílit. Děkuji za pomoc |
||
Taps Profil |
#5 · Zasláno: 20. 8. 2014, 12:37:06
Sabracon:
ten nepořádek bude asi dělat ten dvojitý foreach. |
||
Sabracon Profil |
#6 · Zasláno: 20. 8. 2014, 12:46:53
Mě to do souboru ukládá duplicitně. Čili když zaškrtnu dvě políčka u šroubů po 5 a 10 ks, tak do souboru zapíše:
srouby 15cm dlouhe 5 ks srouby 15cm dlouhe 10 ks srouby 20cm dlouhe 5 ks srouby 20cm dlouhe 10ks a správně by to mělo být: srouby 15cm dlouhe 5 ks srouby 20cm dlouhe 10ks čím více položek zaškrtnu tím více se to násobí. |
||
Sabracon Profil |
Upravil jsem ještě kód pro výpis a dostal jsem se k tomu, že mi již neduplicituje položky, ale "už" jen napiše k položce cele pole s kusy.
Takže kód pro odeslání vypadá takto: Pro jednoho výrobce a odmazal jsem promeny a nahradil čísly a jmény pro přehlednost <input type=hidden name='sklad[Eden]' value=Eden> <input type='checkbox' name='vybrat[1][Eden]' value='1'> <input type='text' name='kusy[]' value='' size='3'> A zde je kod pro uložení a procházení pole, kde mam chybu a nevím jak to správně poskládat :( <? foreach($_POST['vybrat'] as $id => $vybrat) { foreach($vybrat as $p => $pp) { foreach($_POST ['kusy'] as $mj) { if(isset($mj)){ print $mj; // výpis počet kusu u položky , které jsou zadány } } $sql = MySQL_Query("SELECT * FROM $p WHERE $p.id='$id'"); $zaznam = MySQL_Fetch_Array($sql); print $p." ".$zaznam ['popis']." ".$zaznam ['cena_bez']." ".$ks; // výpis řádky položky print "<br />"; } } ?> A výstup tohoto kódu je : 65 Eden Název1 cena1 65 Eden Název2 cena2 kde 65, je u jedné položky jsem zadal do inputu 6 ks a u druhe 5 ks, Vím, že je problém v procházení pole s kusy, ale nedokážu ho přesvědčit aby procházel pole postupně a ne hned celé najednou a vypsal počet kusu správně ke každé položce. Díky |
||
Tori Profil |
Sabracon:
Poznámka k [#1]: include 'db.php' a nastavení znakové sady pro DB dejte ještě před začátek cyklu for, je zbytečné xkrát navazovat už existující spojení a měnit správné nastavení.
Lepší návrh DB by obsahoval tabulku výrobců, tabulku zboží (kde by každé mělo svoje jedinečné ID a ID výrobce), a tabulku parametrů zboží (tou by se vyřešilo, že u šroubů ukládáte jiné údaje než u vodovodních baterií, což asi teď řešíte těmi různými tabulkami podle výrobců). Při ukládání byste pak název výrobce zjistil z DB podle ID zboží. Když to máte řešené takto, že zboží od různých výrobců může mít stejné ID, můžete využít pole výrobců a jeho klíče používat jako ID výrobce. Takže byste si generoval formulář např.: while ($zaznam = MySQL_Fetch_Array($sql)) { // proměnná $p je klíč z pole výrobců, tedy ID výrobce $id=$zaznam['id']; print "<tr><td><input type='checkbox' name='zbozi[".$p."][".$zaznam['id']."][objednat]' value='1'></td><td>".$zaznam['popis']."</td> <td><input type='text' name='zbozi[".$p."][".$zaznam['id']."][kusu]' value='".$zaznam['mj']."' size='3'></td> <td>".$zaznam['car_kod']."</td> <td>".$zaznam['cena_bez']."</td> <td>".$zaznam['id_kat']."</td></tr>"; } foreach ($_POST['zbozi'] as $id_vyrobce => $pole) { foreach ($pole as $id_zbozi => $zbozi) { if ($zbozi['objednat']) { $pocet_kusu = $zbozi['kusu']; $nazev_vyrobce = isset($sklady[$id_vyrobce]) ? $sklady[$id_vyrobce] : 'Neznámý (špatné ID)'; // tady máte k dispozici všechny potřebné údaje k jedné položce objednávky a můžete ji uložit. } elseif (!empty($zbozi['kusu'])) { // tady je vyplněný počet kusů, ale není zaškrtnuté zboží } } } Nepoužívala bych: <input type='text' name='kusy[]' value='' size='3'> , jak jste to upravil v [#7]. Když vám vyplním objednávku takhle:
[X] Šroub M6x30 Kusů: [____] [X] Šroub M8x30 Kusů: [___5] |
||
Sabracon Profil |
#9 · Zasláno: 21. 8. 2014, 17:44:47
Děkuji mnohokrát již to funguje, tak jak jsem si představoval. Klaním se :)
|
||
Časová prodleva: 10 let
|
0