Autor Zpráva
Rellik
Profil
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&amp;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
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
Mělo by fungovat normálně toto:

$_SESSION['kosik'][$key] = intval($pocet)
Rellik
Profil
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
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
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
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
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

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0