Hallo,

Ik ben aan het stoeien met het volgende:

Ik heb een php geschreven winkelwagen waarin men van een specifiek artikel het aantal kan wijzigen naar een positief getal tussen de 1 en de 100. Ik wil dit oplossen m.b.v. ajax/jquery om zo zonder te refreshen de winkelwagen totaalprijs te laten zien.

Wat heb ik op dit moment:
- database tabel genaamd shopping_products (velden zijn: rowid, shoprow_id, prod_id, aantal, sessieid)
Hierin is "rowid" het unieke nummer voor de rij in de tabel.
"shoprow_id" is het unieke nummer uit de winkelwagen tabel (dient als index key).
"sessieid" bevat een unieke sessie waarde om de juiste waarden te bewerken in de database.
prod_id en aantal zijn duidelijk velden.

In het winkelwagen script heb ik een input type='number' veld opgenomen waarin de gebruiker een getal tussen de 1 en 100 kan opgeven (dit wordt gechecked, bij een negatief getal wordt er sowieso 1 positief gebruikt).

// het input veld:
<input type='number' name='changeprodamount' value='$currentamound' class='amountprod' min='1' max='30' id='amountprod' /> <a href='/winkelwagen'>wijzig</a>


Vervolgens hangt daar nu een Javascript code achter om de nieuwe waarde voor het aantal producten "aantal" door te sturen naar een php file:

// javascript code:
$('#amountprod').bind('input', function() {
	var newprodamount = $(this).val();
	$.post( "/savenewamount.php", { newamount:newprodamount  } );
}); 


Deze code stuurt de nieuwe variabele door naar het php script "savenewamount.php" waarin de database wordt aangeroepen en het veld AANTAL wordt aangepast.

In het php script staat het volgende:

   $checkamountprod = $_POST['newamount'];
   if($checkamountprod <= 1){ $amountprod = 1; }else{ $amountprod = $_POST['newamount']; }
  
   $updatequery  = "UPDATE shopping_products SET aantal='$amountprod', WHERE sessieid='". $_SESSION["clientsesid"] ."'";
   $queryresult= mysqli_query($verbinding, $updatequery) or die ("Query mislukt: " . mysqli_error($verbinding));


Waar ik tegen aan loop is dat bij meer dan 1 product in de winkelwagen alle velden van dezelfde winkelwagen sessie worden geupdate naar dezelfde waarde in het AANTAL veld.

Ik moet dus op één of andere manier in de INPUT nog een waarde mee sturen die aangeeft om welke "rowid" het gaat en vervolgens deze zal aanpassen.

Op de bovenstaande manier druk ik ook op de link "wijzig" zodat de pagina wordt gerefreshed en daarmee dus de nieuwe totaalprijs in de winkelwagen zichtbaar is. Dit zou ik willen oplossen met Ajax.
>> Ik heb het geprobeerd met de CLASS maar ik krijg dat op één of andere manier niet voor elkaar.

Wat heb je geprobeerd?
De CLASS attr. in de INPUT heb ik gebruikt in de JS ipv het ID attr. om zo de dubbele ID te voorkomen daar waar CLASS wel vaker gebruikt mag worden.
Johnny Cash op 03/02/2015 11:14:45

De CLASS attr. in de INPUT heb ik gebruikt in de JS ipv het ID attr. om zo de dubbele ID te voorkomen daar waar CLASS wel vaker gebruikt mag worden.



oké en dan heb je dus een event aangemaakt:

$(function() {
  $('.amount-input').change(function() {
	// doe iets
  });
});


Ik weet niet of je hier aan gedacht hebt of niet:
De event wordt nu aangeroepen als de waarde veranderd (.change()) van ELK html element dat de attribuut class="amount-input" heeft. Hoe weet je dan WELK element veranderd is? met het sleutelwoord this !

$(function() {
  $('.amount-input').change(function() {
	alert($(this).val());
  });
});

Frank Nietbelangrijk op 03/02/2015 09:43:28
Je mag eigenwijs zijn Thomas,

Maar dit is de meest efficiënte methode.


Lees die twee zinnen nog eens langzaam over :).

Daarnaast, alles is een tradeoff: efficiëntie is ook niet alles als je code daardoor wolliger wordt. Die code moet op den duur ook onderhouden worden...

Frank Nietbelangrijk op 03/02/2015 09:43:28
4) wat is het probleem? Dat je 4 milliseconden trager bent of zo? Als dat de discussie gaat worden dan haak ik af!


Laat me denken, ik denk dat het probleem de insteek van de vraagoplossing is (en hoe daar vervolgens op gereageerd wordt). Ik probeer mensen aan te sporen zelf na te denken over hun oplossing in plaats van voort te borduren op het pad dat men vaak reeds is ingeslagen. Ik probeer dan meestal ook voorstellen te doen zonder de knoop zelf door te hakken.

Eens kijken hoe hier vervolgens op gereageerd wordt:
Dat is helemaal niet nodig.

Wat een onzin!

Je mag eigenwijs zijn, maar dit is de meest efficiënte methode.


Dit is volgens mij typerend voor dit soort communities: er wordt teveel nadruk gelegd op het (rechtstreeks) beantwoorden van vragen, in plaats van het pad wat je aflegt wat leidt tot een oplossing (volgens mij werd op de basisschool het belang hiervan al benadrukt).

Daarnaast snap ik niet dat men altijd meteen hard wil gaan rennen, zonder dat men echt weet waar naartoe. De personen die stilstaan en zich dit hardop afvragen worden vervolgens door de renners bekritiseerd :). Sorry, maar ik doe niet mee aan dat soort hysterie.

Hell, laten we de beredenering bagatelliseren of gewoon helemaal overslaan en het antwoord meteen geven! Hoe moet zo iemand zo'n reis straks zelf maken als 'ie elke keer gebracht wordt?

Als dat de discussie gaat worden dan haak ik af!


Ik snap niet dat je je zo in je wiek geschoten voelt. Ook hoeven we elkaar hier niet te lopen bashen, we helpen allebei bezoekers hier, elk op ons eigen manier. Ik vraag me alleen af hoeveel iemand ergens van opsteekt als iemand anders al het (denk- en programmeer)werk voor hem doet.

ontopic: als je alles via JavaScript doet en niet wegschrijft naar sessie of database, wat gebeurt er dan met de inhoud van je shoppingcart als je je browser sluit of je pagina ververst? Gebruiksvriendelijkheid van een webshop lijkt me ook redelijk belangrijk. Trouwens, je moet er tegenwoordig wel een potje van maken wil de boel "inefficiënt" worden. Dit lijkt mij daarom ook ondergeschikt aan de gebruikerservaring en de veiligheid van je applicatie (om maar eens een dwarsstraat te noemen). Ik zou niet blij zijn als een derde partij op de meest efficiënte wijze mijn persoonlijke gegevens steelt van een webshop.
Thomas van den Heuvel op 03/02/2015 00:47:07

[quote="Frank Nietbelangrijk op 02/02/2015 23:50:45"]Het kan juist ook prima in javascript.


Als je jezelf een korting wilt geven tijdens het boodschappen doen is dat idd een goede manier :).


[/quote]

Hierdoor misschien ;-)

Het is al goed hoor Thomas, Ik zeg het ook als ik vindt dat je gelijk hebt maar ik zeg het ook als ik vindt van niet. Dat het dan wat kribbig overkomt is misschien het nadeel van lettertjes.

Reageren