Autor Zpráva
coffeephantom
Profil *
Zdravím,
mám nějakou zkušenost s html, php, mysql, ale pramálo s javascriptem a potřeboval bych pomoc.

Mám na webu košík a v něm vypsané produkty, u každého z nich je textový input a v něm hodnota počtu objednaných kusů. Rád bych, aby se po přepsání hodnoty v inputu aktualizoval řádek v databázi (počet kusů produktu).

Mohl by někdo poradit? Děkuji předem za každou radu.
juriad
Profil
A proč tam jednoduše nepřidáš tlačítko Aktualizovat košík? Přece se změnou počtu kusů souvisí mnohem více parametrů:
1) množstevní sleva
2) dostupnost
3) cena poštovného

Nějak si nedokážu představit, že bys chtěl toto vše řešit jak v PHP, tak v JS. Pokud tam tyto vlastnosti nemáš, ale nevylučuješ jejich zavedení, nejjedodušší je mít celý košík jako formulář a tlačítko Aktualizovat jej odešle na server. A buď se stránka refreshne, nebo se odešle AJAXem a celý obsah košíku se nahradí jeho novou verzí.
bestik_63
Profil
Ahoj, tuto aktualizaci ale provést pouze ajaxem. U inputu bude reakce na událost onChange (při změně hodnoty políčka) nebo onBlur(při deaktivaci políčka)
Pak se ti pošle informace díky technologii ajax do jiného scriptu, který v databázi změní hodnotu. Nicméně pokud máš pramalé zkušenosti s javascriptem asi by to chtělo studium, protože Ajax bez javascriptu neuděláš. Taktéž potřebuješ i cookies.
Pozn. internetový obchod jsem ještě nedělal, ale myslím, že ve fázi výběru zboží, se hodnoty píšou pouze do session a teprve po potvrzení nákupu se data píšou do databáze.
coffeephantom
Profil *
Děkuji bestik_63 za nakopnutí.

Pokud by někdo řešil stejný problém, předkládám řešení, které mi zafungovalo.

kosik.php
$(document).ready(function () {
    $('#cart').change(function () {
        $.post('update-cart.php', $(this).serialize(), function(data) {
            $('body').load('kosik.php#reload');
        });
    });
});

<form method="post" id="cart">
<input type="text" id="count" name="count[productid]">
</form>

<div id="reload">Celková cena apod, co je potřeba aktualizovat.</div>

update-cart.php
include "db.php";

foreach($_POST['count'] as $key => $val) { 
            if($val==0){ 
                mysqli_query($conn,"DELETE FROM cart_item WHERE pid='$key'");
            }else{ 
                mysqli_query($conn,"UPDATE cart_item SET count = '$val' WHERE pid='$key'");
            } 
        } 
juriad
Profil
coffeephantom:
To jako fakt všichni zákazníci dohromady sdílí ten samý košík? A zabezpečení evidentně vůbec neřešíš.
Než budeš vymýšlet kokotiny s AJAXem, měl bys mít jádro eshopu hotové, zabezpečné a otestované. K čemu je automatické propsání počtu kusů do databáze, když ti eshop neumožní nákup dvou lidí současně? Psát e-shop není sranda, tady jde o peníze.
coffeephantom
Profil *
Kód jsem samozřejmě zjednodušil, aby zobrazoval jen problém, se kterým jsem do tohoto fóra přišel! Jinak ta sprostá slova snad opravdu nejsou zapotřebí...
juriad
Profil
OK, myslel jsem, že je to reálný kus kódu; omlouvám se. Ono je skoro nemožné rozpoznat opravdu zkušeného člověka, který hledá nejlepší řešení, od bastliče, který ničemu vlastně nerozumí, ale tvrdí, že vše ovládá.
Ke zveřejněnému kódu mi [#5] přijde adekvatní; je na tobě posoudit, jak se týká tvé situace (kódu, který jsi nezverejnil).

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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