Autor Zpráva
Pitbiker
Profil *
Zdravím,

zkouším dělat košík a mám chybu v počtu celkové sumy... Když mám v košíku jedno zboží, tak vše funguje jak má, ale když mám v košíku dvě a více zboží, tak když měním počet kusů, tak se změní, ale cena se pak počíta divně. U prvního přidáného zboží dám například 2 kusy ty se změní, ale u posledního přidaného zboží se cena taky projeví jako 2 kusy, nezůstane to jen u jednoho, ale přitom to nadále píše, že počet kusů je 1. A když mením počet kusů u posledně přidáného zboží, tak se cena neprojeví, pouze počet kusů

Nevím kde mám chybu, může někdo poradit ? S php a sql teprve začínám. Díky....

             <table cellpadding="0" cellspacing="0" border="0" style="float: left; width: 100%; margin-top: 20px;">
             <tr><td style="background-color: #f0eee3; padding: 5px;"></td><td style="background-color: #f0eee3; padding: 5px;"><strong>Název</strong></td><td style="background-color: #f0eee3; padding: 5px;"><strong>Počet</strong></td><td style="background-color: #f0eee3; padding: 5px;"><strong>Velikost</strong></td><td style="background-color: #f0eee3; padding: 5px;"><strong>Cena</strong></td><td style="background-color: #f0eee3; padding: 5px;"></td></tr>';
                           
             while ($row = mysql_fetch_assoc($kosik_obsah)) {
             $mezi= $_SESSION['kosik'][$row['id']];
             $celkem = mysql_query("SELECT SUM(cena * $mezi) AS soucet FROM web_zbozi WHERE id IN ('" . implode("', '", array_keys($_SESSION["kosik"])) . "')"); 

             echo '<tr><td><img src="img/zbozi/thumb205/'.$foto['nazev'].'.jpg" width="50"></td><td>'.$row['nazev'].'</td> <td><form action="funkce/exec.php?akce=pocetzbozi" method="post" enctype="multipart/form-data" style="float: left;" id="'.$row['id'].'" /><input type="hidden" name="add" value="'.$row['id'].'"><input type="text" name="pocet" value="'.$_SESSION["kosik"][$row["id"]].'" size="3" maxlength="4" alt="int" class="ks" /> ks <input type="submit" value="" class="refresh" /></form></td><td></td><td>'.$row['cena'].' Kč s DPH</td><td><a href="index.php?kosik=seznam&del='.$row['id'].'" title="Smazat zboží z košíku"><img src="img/no.png"></a></td></tr>';
             }
             
             $vysledek = MySQL_Fetch_Assoc ($celkem);
             $mezidph = $vysledek['soucet'] / 100;
             $dph = $mezidph * 80;  
             echo '</table>
             
             


Formulář pro změnu počtu kusů:

	$pocet = clean($_POST['pocet']);
	$add = clean($_POST['add']);
	
	if($pocet == '0') {
		$errmsg_arr[] = '<span style="color: red;"><strong>Nemůžete zadat 0 kusů, pokud tak chcete, tak smažte zboží z košíku !</strong></span><br>';
		$errflag = true;
	}

	if($errflag) {
		$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
		session_write_close();
		header("location: ../index.php?kosik=seznam");
		exit();
	}
	
  $_SESSION["kosik"][intval($_POST["add"])] = intval($_POST["pocet"]);
  
	session_write_close();
	header("location: ../index.php?kosik=seznam");
	exit();
Tori
Profil
Dělá to řádek 6 z prvního výpisu. Při každém průchodu cyklem přepisujete ukazatel na výsledek, vrácený databází. Ve výsledku tedy z $celkem čtete: cena jednotlivých zboží * počet kusů posledního zboží, které vrátil předchozí dotaz ($kosik_obsah).
Myslím, že sql dotaz na řádku 6 by šlo vyhodit. Cenu toho zboží už máte v $row[cena], počet kusů v košíku v session. Přidejte si před cyklus proměnnou s hodnotou 0, a v cyklu ji postupně zvyšujte o (cena tohoto zboží * počet kusů v košíku).
Pitbiker
Profil *
Díky, udělal jsem to následovně :)

             $celkem = 0;
             while ($row = mysql_fetch_assoc($kosik_obsah)) {
             echo '<tr><td><img src="img/zbozi/thumb205/'.$foto['nazev'].'.jpg" width="50"></td><td>'.$row['nazev'].'</td> <td><form action="funkce/exec.php?akce=pocetzbozi" method="post" enctype="multipart/form-data" style="float: left;" id="'.$row['id'].'" /><input type="hidden" name="add" value="'.$row['id'].'"><input type="text" name="pocet" value="'.$_SESSION["kosik"][$row["id"]].'" size="3" maxlength="4" alt="int" class="ks" /> ks <input type="submit" value="" class="refresh" /></form></td><td></td><td>'.$row['cena'].' Kč s DPH</td><td><a href="index.php?kosik=seznam&del='.$row['id'].'" title="Smazat zboží z košíku"><img src="img/no.png"></a></td></tr>';
             $celkem+= $row[cena] * $_SESSION[kosik][$row[id]];
             }



Ještě bych se chtěl zeptat, u toho druhého výpisu, kdyby chtěl přidat k
$_SESSION["kosik"]
další položku, jak by to mělo vypadat ? Díky.
Tori
Profil
A tak jak to máte to nefunguje?

Nemám zkušenost s tvorbou eshopu. Jedině mě napadá, že bych při přidání zboží do košíku uložila do session ID, počet kusů i cenu toho zboží. Tím by se jednak ověřilo, jestli ta věc je vůbec na skladě, a pokud se zákazník bude často koukat do košíku tak ušetříte pár dotazů do DB (na ten celkový součet). Zároveň by se celková cena věcí v košíku dala zobrazovat někde na stránce přímo ze session. Ale nevím, jestli tenhle způsob nemá i nějaká úskalí.
Pitbiker
Profil *
Celková cena již funguje, tak jak jsem to postnul výše, za to děkuji :)

Ale ještě si nevím rady s tím, že bych chtěl k těm počtu kusům, když to zapisuji do session, přidat i velikost.
$_SESSION["kosik"][intval($_POST["add"])] = intval($_POST["pocet"]);
K tomu bych chtěl i zapisovat velikost, ale nevím jak na to...
Tori
Profil
Pitbiker:
Tak pod to ID uložte pole:
$id = intval($_POST["add"]);
$_SESSION['kosik'][$id]['kusu'] = intval($_POST['pocet']);
$_SESSION['kosik'][$id]['velikost'] = intval($_POST['velikost']); // atd.

Nejasně jsem se vyjádřila: ↑ myslela jsem tím při přidání zboží do košíku načíst info o něm z DB. Totéž asi i při změně velikosti, předpokládám?
php_apc
Profil *
Tori:
Tak pod to ID uložte pole:
Raději bych ukládal vše ostatní mimo (např. do $_SESSION["kos"][intval($_GET['id'])]["velikost"])
$_SESSION["kosik"][intval($_GET["id"])] = intval($_GET["pocet"]);


Všechny operace jsou velice jednoduché, např. počet kusů v košíku zjistí array_sum($_SESSION["kosik"]), počet druhů zboží v košíku jednoduché count($_SESSION["kosik"]).

http://php.vrana.cz/nakupni-kosik.php
Pitbiker
Profil *
Při vložení do košíku se s DB nic nedělá, uložím ID, počet kusů a velikost do Session, DB jde na řadu až při nahlédnutí do košíku...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0