| Autor | Zpráva | ||
|---|---|---|---|
| Rellik Profil |
#1 · Zasláno: 19. 7. 2011, 20:53:55 · Upravil/a: Rellik
Zdravím,
v diskuzi http://diskuse.jakpsatweb.cz/?action=vthread&forum=2&topic=127828 sem řešil použití košíku na e-shopu - měl sem ukládání položek do košíku pomocí tabulek a teď to podle rad předělávám pomocí session. Narazil sem ale na jednu věc, na kterou nikde nemůžu narazit a to sem prohledal kde co. Udělal sem nový script na výpis košíku: <h2>Košík:</h2>
<?php
$cash = intval($_GET['cash']);
$kod_zbozi = strip_tags(intval($_POST['kod']));
$pocet = strip_tags(intval($_POST['qty']));
// zápis položek do session
if($cash ==1) {
$_SESSION['kosik'][intval($kod_zbozi)] = array('pocet' => intval($pocet));
}
// úprava položek v session
if($cash ==2) {
$pocet = $_POST['qty'];
$key = $_POST['key'];
if($pocet == 0) {
unset($_SESSION['kosik'][$key]); // smaže aktuální položku
} else {
/// tady nevím jak přičíst nebo odečíst počet položek v session
}
}
// výpis položek košíku
echo '<table class="kosik">';
echo '<tr class="kosik_zahlavi">
<td>Název Zboží</td><td>Cena s DPH</td><td>Množství</td>
<tr>';
$idecka=array();
$i=0;
foreach ($_SESSION['kosik'] as $key => $value)
{
$idecka[$i]=array("ID" => $key,"pocet"=> $value["pocet"]);
$i++;
$sql = mysql_query("SELECT * FROM zbozi WHERE kod_zbozi = '".$key."'");
while($data=mysql_fetch_array($sql))
{
$vypis='
<tr><td>
<b>{nadpis}</b>
</td>
<td>
<span class="red"><b>{cena},-kč</b></span>
</td>
<td>
<form action="?page=kosik&cash=2" method="post">
<input type="hidden" name="key" value="'.$key.'" />
<input type="text" name="qty" value="'.$value["pocet"].'" size="2" />
<button type="submit" name="buy" class="button buy">Přepočítat</button>
</form>
</td>
</tr>';
$vypis=str_replace('{nadpis}',$data['nazev'],$vypis);
$vypis=str_replace('{cena_bez_dph}',$data['cena'],$vypis);
$cena = sprintf("%0.2f", $data['cena']*$value["pocet"]*1.2);
$vypis=str_replace('{cena}',$cena,$vypis);
echo $vypis;
// výpočet ceny
$cena = $data['cena']*$value["pocet"];
$pole[$sid++] = $cena;
}
}
echo '</table>';
echo "Celkem bez DPH: <span class='red'>".array_sum($pole).",-kč</span>\n<br />\n\t\t";
echo "Celkem s DPH: <span class='red'>".array_sum($pole)*1.2.",-kč</span>\n<br /><br />\n\t\t";
echo '<a href="?page=objednavka" class="button">Dokončení nákupu</a>';
?>A právě nevím jak měnit počet položek, které už jsou v session - mazání mi jde.. :-) Pak bychtaky chtěl poradit jak to dál zpracovat: Napadlo mě to asi tak: Obsah session podobně jako u tohoto výpisu uložit do tabulky v DB (musím popřemýšlet jak to spáchat), kde by navíc bylo ID zákazníka, to samé ID by bylo v tabulce kde by se uložila zákazníkova adresa po potvrzení objednávky. Ukázka práce "nového" košíku : http://firstpage.profitux.cz/fotoshop/ - (přidávání položek je momentálně možné pouze z úvodní strany) |
||
| Rellik Profil |
#2 · Zasláno: 19. 7. 2011, 21:44:14 · Upravil/a: Rellik
Tak tu změnu už sem vyřešil.
Řádek 18: $_SESSION['kosik'][intval($key)] = array('pocet' => $pocet);Teď ještě jedna otázka: Když se vrátím na zboží a dám do košíku položku, která už v košíku je, jak docílím toho aby se přičetla v tom košíku ke stejné položce? |
||
| zatomik Profil |
#3 · Zasláno: 19. 7. 2011, 21:51:18
Mělo by fungovat normálně toto:
$_SESSION['kosik'][$key] = intval($pocet) |
||
| Rellik Profil |
#4 · Zasláno: 19. 7. 2011, 21:59:08
zatomik:
> Mělo by fungovat normálně toto: > > $_SESSION['kosik'][$key] = intval($pocet) Mělo by fungovat na první dotaz a nebo na přičtení počtu v košíku?? I když to přičtění už mám v hlavě trochu vymyšlené - i když myslím že trochu prasácky: napadlo mě k položce přidat další hiden input, kde by byl aktuální počet položky a s odesláním by se to sečetlo s opětovným zadáním počtu položek u stejného zboží. blbě se to vysvětluje. prostě v košíku je třeba 10 UV filtrů - při procházení filtry mě napadne ještě jeden přikoupit a kliknu na tlačítko do košíku - je tam přednastavená hodnota jedné položky. Kdybych to řešil jako minulý dotaz, tak se mi změní počet filtrů v košíku na 1. Když tam přidám hiden intput s hodnotou 10 (už je v košíku), tak po odeslání se to sečte a uvede jako nová hodnota položky. Je to blbé řešení? Nebo to jde udělat jednodušej? |
||
| zatomik Profil |
#5 · Zasláno: 19. 7. 2011, 22:06:46
To bylo k tomu prvnímu.
U toho druhého testuj jestli je $_SESSION['kosik'][intval($kod_zbozi)] == null, pokud ano tak tam nastavis 1 a pokud ne tak udelas $_SESSION['kosik'][intval($kod_zbozi)] + 1, tim pridas 1polozku do kosiku. |
||
| Rellik Profil |
#6 · Zasláno: 20. 7. 2011, 17:02:16
zatomik:
Do košíku nemám problém zapsat zboží. problém mám s tím, že pokud už zboží v košíku existuje a v obchodě kliknu znovu na stejné zboží, tak by se mělo přičíst. Jinak ten kód $_SESSION['kosik'][intval($kod_zbozi)] + 1 nefunguje - zamrzne stránka. Vkládání dělám takhle: $_SESSION['kosik'][intval($kod_zbozi)] = array('pocet' => intval($pocet)); |
||
| Rellik Profil |
#7 · Zasláno: 20. 7. 2011, 18:08:32
Tak už sem to zprovoznil i s přidáváním položek
U položky, která už je v košíku je hiden input ve kterém je počet položek v košíku, takže se po opětovném odeslání sečte předchozí počet s počtem odesílaným. Líp je to vidět přímo ve zdrojáku. Teď jdu projít $_GET a $_POST a zabezpečit. Změna oproti původnímu: Vytváření ID zákazníka odpadlo, jde plnit košík rovnou. Do session se zapíše ID zboží a jeho zakoupený počet. Co ještě půjde dodělat: Po dokončení objednávky se obsah košíku zapíše do DB kde bude doručovací adresa s vygenerované ID zákazníka, podle kterého se bude dát sledovat stav zboží. |
||
| Rellik Profil |
#8 · Zasláno: 22. 7. 2011, 16:42:20 · Upravil/a: Rellik
Tak se znovu ozývám pro radu. Celý e-shop sem předělal, tudíž není nutné vytváření ID zákazníka a zboží se ukládá do session. http://firstpage.profitux.cz/fotoshop/
Chtěl bych poradit (pomoct) jak elegantně uložit vybrané zboží a jeho počet do DB abych to pak mohl v administraci znovu vypsat jako fakturu. V DB mám tabulku id | id_zakaznik | zbozi | pocet Do id_zakaznik se generuje 10 místné unikátní číslo při odeslání objednávky pak bych chtěl ze session nějak vydolovat kod zbozi a jeho pocet a uložit to taky do té tabulky. Na výpis session sem si zatím udělal takovou funkci: function vypis() {
$kos=array();
$i=0;
foreach ($_SESSION['kosik'] as $key => $value)
{
$kos[$i]=array("ID" => $key,"pocet"=> $value["pocet"]);
$i++;
echo $key ." ".$value["pocet"]." "; // vypíše ID zboží a jeho počet - tyto jediné data jsou v SESSION
}
}Takhle se to momentálně vypíše do toho jednoho inputu, což mi moc nepomůže, protože mi z toho vznikne pouze řada čísel. Chtěl sem aby se to rozdělilo na dva inputy kde v jednom bude kód zboží a v druhém počet. Ježe když bude víc položek v košíku, tak by ty inputy měly stejné name="" a tak by se odeslal jen jeden od každého. A číslovat to pomocí $i je asi taky blbost, protože by se pak musely nějak vyřešit i $_POSTy podle počtu položek. Poradí mi někdo jak to elegatně provést? Díky |
||
|
Časová prodleva: 15 let
|
|||
0