Autor | Zpráva | ||
---|---|---|---|
Pitbiker Profil * |
#1 · Zasláno: 15. 2. 2011, 22:20:55
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 |
#2 · Zasláno: 15. 2. 2011, 22:47:03
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 * |
#3 · Zasláno: 16. 2. 2011, 13:24:51
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"] |
||
Tori Profil |
#4 · Zasláno: 16. 2. 2011, 13:48:27 · Upravil/a: Tori
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 * |
#5 · Zasláno: 16. 2. 2011, 13:55:10
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"]); |
||
Tori Profil |
#6 · Zasláno: 16. 2. 2011, 14:01:53 · Upravil/a: Tori
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 * |
#7 · Zasláno: 16. 2. 2011, 14:35:38
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 * |
#8 · Zasláno: 16. 2. 2011, 16:16:19
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...
|
||
Časová prodleva: 13 let
|
0