| 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: 12 let
|
|||
0