Jak zrobić aby w przypadku kiedy użytkownik zmieni zawartość pola value="'.$cartitem['quantity'].'" skrypt przeliczał inne wartości w/g tej ilości ?
$html .= '<form name="cart_recount" method="POST" action="index.php">'; $html .= '<input type="HIDDEN" name="p" value="cart">'; $html .= '<input type="HIDDEN" name="recount" value="true">'; $html .= '<tr>'; $html .= '<td style="width:25px; height:30px; background-color:#ececec; border-style:solid; border-color:#dddddd; border-width:1px; text-align:center; vertical-align:middle;" class="cart_main_top">Lp.</td>'; $html .= '<td style="width:145px; height:30px; background-color:#ececec; border-style:solid; border-color:#dddddd; border-width:1px; text-align:center; vertical-align:middle;" class="cart_main_top">Produkt</td>'; $html .= '<td style="width:40px; height:30px; background-color:#ececec; border-style:solid; border-color:#dddddd; border-width:1px; text-align:center; vertical-align:middle;" class="cart_main_top">Ilość</td>'; $html .= '<td style="width:80px; height:30px; background-color:#ececec; border-style:solid; border-color:#dddddd; border-width:1px; text-align:center; vertical-align:middle;" class="cart_main_top">Cena</td>'; $html .= '<td style="width:40px; height:30px; background-color:#ececec; border-style:solid; border-color:#dddddd; border-width:1px; text-align:center; vertical-align:middle;" class="ccart_main_top">Rabat</td>'; $html .= '<td style="width:80px; height:30px; background-color:#ececec; border-style:solid; border-color:#dddddd; border-width:1px; text-align:center; vertical-align:middle;" class="cart_main_top">Cena z Rabatem</td>'; $html .= '<td style="width:80px; height:30px; background-color:#ececec; border-style:solid; border-color:#dddddd; border-width:1px; text-align:center; vertical-align:middle;" class="cart_main_top">Wartość</td>'; $html .= '<td style="width:25px; height:30px; background-color:#ececec; border-style:solid; border-color:#dddddd; border-width:1px; text-align:center; vertical-align:middle;" class="cart_main_top"> </td>'; $html .= '</tr>'; $lp = 1; $sum = 0; // pozycje $query = mysql_query("SELECT *,cart.id AS item FROM cart LEFT JOIN product ON cart.pid = product.id WHERE session='".session_id()."' LIMIT 0,10;"); { $html .= '<tr>'; $html .= '<td style="width:25px; height:30px; background-color:#ffffff; border-style:solid; border-color:#ececec; border-width:1px; text-align:center; vertical-align:middle;" class="cart_main_item">'.$lp++.'</td>'; $html .= '<td style="width:145px; height:30px; background-color:#ffffff; border-style:solid; border-color:#ececec; border-width:1px; text-align:left; vertical-align:middle; font-weight:bold;" class="cart_main_item"> <a href="http://alkomaty.biz/'.$cartitem['pid'].','.$cartitem['seo'].'">'.$cartitem['name'].'</a>'; if($cartitem['discount_code']=="PROMOCJA") $html .= '<font style="color:#dd0000; font-size:7.5pt; font-weight:normal;"><br> CENA PROMOCYJNA</font>'; elseif($cartitem['discount_code']) $html .= '<font style="color:#0000dd; font-size:7.5pt; font-weight:normal;"><br> KOD RABATOWY</font>'; $html .= '</td>'; //WAŻNE pole odpowiedzialne za wyświetlanie ilości towaru $html .= '<td style="width:40px; height:30px; background-color:#ffffff; border-style:solid; border-color:#ececec; border-width:1px; text-align:center; vertical-align:middle;" class="cart_main_item"> <input type="TEXT" onFocus="this.select();" name="quantity_'.$cartitem['id'].'" value="'.$cartitem['quantity'].'" class="cart_main_item" style="border-style:none; background-color:#ffffff; width:40px; padding:0px 0px 0px 0px; text-align:center;"> </td>'; //WAŻNE pole odpowiedzialne za wyświetlanie ilości towaru $html .= '<td style="width:80px; height:30px; background-color:#ffffff; border-style:solid; border-color:#ececec; border-width:1px; text-align:center; vertical-align:right; font-size:7.5pt;" class="cart_main_item">'.number_format($cartitem['pricewithtax'],2,',',' ').'zł z VAT<br>('.number_format($cartitem['price'],2,',',' ').'zł netto)</td>'; $html .= '<td style="width:40px; height:30px; background-color:#ffffff; border-style:solid; border-color:#ececec; border-width:1px; text-align:center; vertical-align:middle;" class="cart_main_item">'.round(((1-($cartitem['pricewithtax_discount']/$cartitem['pricewithtax']))*100),0).'%</td>'; $html .= '<td style="width:80px; height:30px; background-color:#ffffff; border-style:solid; border-color:#ececec; border-width:1px; text-align:center; vertical-align:middle; font-size:7.5pt;" class="cart_main_item">'.number_format($cartitem['pricewithtax_discount'],2,',',' ').'zł z VAT<br>('.number_format($cartitem['price_discount'],2,',',' ').'zł netto)</td>'; $html .= '<td style="width:80px; height:30px; background-color:#ffffff; border-style:solid; border-color:#ececec; border-width:1px; text-align:center; vertical-align:middle; font-weight:bold;" class="cart_main_item">'.number_format(($cartitem['quantity']*$cartitem['pricewithtax_discount']),2,',',' ').'zł<br>z VAT</td>'; $html .= '<td style="width:25px; height:30px; background-color:#ffffff; border-style:solid; border-color:#ececec; border-width:1px; text-align:center; vertical-align:middle;" class="cart_main_item"><A href="index.php?p=cart&delete='.$cartitem['item'].'"><img src="layout/'.$style.'/delete.png" alt="" title="" border="0" style="width:20px; height:20px;"></a></td>'; $html .= '</tr>'; $sum += ($cartitem['quantity']*$cartitem['pricewithtax_discount']); } // podusmowenie cen $html .= '</form>'; //WAŻNE element zdjęcia po jego kliknięciu powinna być odpalana procedura przeliczania produktów w/g nowej ilości $html .= '<img onClick="document.cart_recount.submit();" src="layout/'.$style.'/cart_recount_off.png" onMouseOver="this.src='."'layout/".$style."/cart_recount_on.png'".';" onMouseOut="this.src='."'layout/".$style."/cart_recount_off.png'".';" alt="" title="" border="0" style="cursor:pointer;">'; //WAŻNE element zdjęcia po jego kliknięciu powinna być odpalana procedura przeliczania produktów w/g nowej ilości
Wymyśliłem coś takiego żeby za pomocą ajax aktualizować rekordy w bazie. Niestety żadna akcja się nie wykonuje. Przypisanie dla zmiennej w źródle jest OK.
$html .= '<td style="width:40px; height:30px; background-color:#ffffff; border-style:solid; border-color:#ececec; border-width:1px; text-align:center; vertical-align:middle;" class="cart_main_item"> <input type="TEXT" onFocus="this.select();" id="przycisk_quantity" name="quantity_'.$cartitem['id'].'" value="'.$cartitem['quantity'].'" class="cart_main_item" style="border-style:none; background-color:#ffffff; width:40px; padding:0px 0px 0px 0px; text-align:center;"> </td>'; $html .= '<script type="text/javascript"> zmienna='.$cartitem['id'].';</script>'; //przypisujemy id rekordu do zmiennej JS $html .= '<img onClick="szukaj(zmienna);" src="layout/'.$style.'/cart_recount_off.png" onMouseOver="this.src='."'layout/".$style."/cart_recount_on.png'".';" onMouseOut="this.src='."'layout/".$style."/cart_recount_off.png'".';" alt="" title="" border="0" style="cursor:pointer;">'; //akcja podpięta pod onclick wywołuje funkcję ajax i przekazuje id rekordu jako parametr
function szukaj(id) { var wartosc = document.getElementById("przycisk_quantity").value; var xhr = xmlhttp(); var plik = "baza.php"; xhr.open("GET", plik+"?parametr="+wartosc+"&id="+id, true); xhr.onreadystatechange = function () { if(xhr.readyState == 4 && xhr.status == 200) { saveResult(xhr.responseText); } else { saveResult("Wystapił błąd podczas żądania: " + xhr.statusText); } }; xhr.send(null); } //funckja tworzaca obiekt XMLHttp w roznych przegladarkach function xmlhttp() { if (typeof XMLHttpRequest != "undefined") { return new XMLHttpRequest(); } else if (window.ActiveXobject) { var aVersions = ["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp", "MSXML2.XMLHttp", "Microsoft.XMLHttp"]; for (var i=0; i<aVersions.length; i++) { try { var oXmlHttp = new ActiveXObject(aVersions[i]); return oXmlHttp; } catch (oError) {} } } throw new Error("Nie można utworzyć obiektu XMLHttp."); } function saveResult(tresc) { var box = document.getElementById("przycisk_quantity"); if (box.innerHTML != "") box.innerHTML = ""; box.innerHTML = tresc; }
Plik baza.php
//lączenie z bazą $parametr = $_GET['parametr']; //pobranie parametrów z łańcucha zapytania $id = $_GET['id']; $zap = mysql_query("UPDATE cart SET quantity=".$parametr." WHERE id=".$id.";") or die('Blad w zapytaniu UPDATE ' . mysql_error()); else { $zap1 = mysql_query("SELECT id, quantity FROM cart WHERE id=".$id.";") or die('Blad w zapytaniu SELECT ' . mysql_error()); else { while ($row = mysql_fetch_array($zap1)) echo $row['quantity']; //wyświetlamy zaktualizowaną ilość jako wynik } }
Podbijam nikt nie pomoże ? Efekt jaki chce uzykać to dynamiczna zmiana zawartości koszyka jak tu: https://www.komputronik.pl/index.php/carts/pl/simpleCart
Czytałem trochę o ajax i w/g to rozwiązanie tutaj nadaje się idealnie.
Mechanika jest taka:
1. Pobranie aktualnej (zmienionej przez użytkownika ilości produktów pole quantity) i wstawienie jej do zmiennej za pomocą JS
2. Doczepienie zdarzenia onclick do elementu zdjęcia mającego przeliczać wartość
3. Przesłanie nowych wartości do serwera
4. Zwrócenie nowych wartości przez serwer i ich modyfikacja w skrypcie.