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.
Je update ook alleen op sessie id.
Ik zou daar ook het product id bij pakken.
Hallo SanThe,

Ja ik zat daar ook al aan te denken, maar hoe...?

Ik heb 1 input veld met daarin de waarde "aantal". Ik dacht misschien kan ik in die input nog een extra attribuut opnemen die de waarde "product id" bevat en deze in het javascript gedeelte afvangen. Maar hoe ga ik dat doen, dat is dus mijn vraag.

Groeten, Johnny
Semi offtopic: alle attributen van HTML-tags dienen tussen "dubbele quotes" te staan.
Dank je Thomas,

Dat staat het ook. Ik heb alleen een fragment gekopieerd vanuit een php echo.
Dus de velden staan wel goed verder.

Ik had gehoopt dat er een oplossing was binnengekomen :)))
het data- attribuut gebruiken!


<input type="number" value="1" name="amount" data-product_id="526" data-price="5.99" />

Hallo Frank,

Hartstikke bedankt voor je post. Kun je me allen nog vertellen hoe ik vervolgens dat data- attribuut ga verwerken in mijn Javascript?

Doe ik dat met: document.getElementById('datestart').value; ?
Nee zo:


var elem = document.getElementById("datestart");
alert(elem.getAttribute("data-product_id")); 
alert(elem.getAttribute("data-price")); 
document.getElementById('datestart').value;
kopieerde ik uit een ander deel van mijn script.

Maar nu raak ik toch in de war.
Op basis van het input veld met de data- attributen. Hoe valideer dan die VAR?
Ik ben zelf namelijk een groentje in javascript/jquery.

Die datestart is van het bekende Datepicker script.

-----------UPDATE-------------
Ik heb het nu tot zover voor elkaar dat hij het aantal aanpast, maar als ik nu een nieuw product toevoeg aan de winkelwagen en vervolgens het aantal wil aanpassen doet hij dat alleen voor het eerste toegevoegde artikel.

De input staat in een while lus... Waarschijnlijk zit daar nog een struikelblok omdat dan de ID van de input vaker voorkomt?
>> Hoe valideer dan die VAR?

Deze vraag snap ik even niet?

met document.getElementById('datestart').value krijg je het aantal te zien (1)

aantal = 1
product_id = 526
price = 5.99

[size=xsmall]Toevoeging op 02/02/2015 22:56:45:[/size]

overigens is

document.getElementById('datestart').value

exact hetzelfde als

document.getElementById('datestart').getAttribute('value')

althans in jouw situatie

[size=xsmall]Toevoeging op 02/02/2015 22:58:34:[/size]

>>De input staat in een while lus... Waarschijnlijk zit daar nog een struikelblok omdat dan de ID van de input vaker voorkomt?

Correct. Een id mag slechts één keer in een HTML pagina voorkomen. een class mag zo vaak voorkomen als je wil.
Ik wil altijd weten wat er precies gebeurd met de code.
Ik begrijp dat "datestart" is gerelateerd aan data-product_id??

Ik zie de connectie namelijk niet.

Reageren