Volledige versie bekijken : array Update
bremskie
%Europe/Berlin %803 %2010, 20:17
Hallo ik heb een vraagje over een winkelwagentje wat ik aan het toevoegen ben aan mijn site.
De delete en add new item werken al maar bij de update kom ik niet uit'
In mijn array word het artikel id(id), aantal(count) en de prijs(price) bewaard
In mijn form is er behalve het deleten en toevoegen ook een update mogelijkheid.Het enige wat ie moet kunnen updaten is het aantal van ieder artikel in de winkelwagen
Om te beginnen is de constructie van mijn default array:
$_SESSION['cart'];
array(array('id'=> 0, 'count'=>0, 'price'=>0));
//onderstaande update_card functie staat in mijn sessie.php:
function update_cart($id, $count) {
$line = array('id' => $id ,'count' => $count);
if(isset($_SESSION['cart'][$line['id']])){
//Hier moet wat komen
$_SESSION['cart'][$line['id']]['count'] = $line['count'];
}
}
Dus het argument $count en $id komen uit de POST variabelen (array) uit mijn form.
Wat er eigenlijk moet gebeuren is dat ie de hele $_SESSION['card'] array doorloopt en de count index update.
Ok ik hoop dat het duidelijk is en ben in afwachting
vriendelijke groeten Bram
Dauntless
%Europe/Berlin %933 %2010, 23:24
Aangezien de hoofd array geen associatieve array is moet je hem zelf doorlopen:
<?php
$productArray = array(array('id'=> 0, 'count'=>1, 'price'=>0), array('id'=> 5, 'count'=>2, 'price'=>0),array('id'=> 10, 'count'=>3, 'price'=>0));
$id = 5;
$newCount = 10;
print_r($productArray);
$inbasket = false;
for($i = 0; $i<count($productArray); $i++)
{
if($productArray[$i]["id"] == $id)
{
$inbasket = true;
$productArray[$i]["count"] += $newCount;
}
}
if(!$inbasket)
{
array_push($productArray, array('id' => $id, 'count' => $newCount, 'price' => '0'));
}
print_r($productArray);
?>
Houdt er rekening mee dat de prijs die je mee opslaat niet mee opgeslagen moet worden in de database. Een bezoeker kan die prijs namelijk aanpassen. Vertrouw enkel de prijs die je echt uit de database haalt.
//edit nu ik je oorspronkelijke code zie lijkt het alsof je hoofd array wel associatief is op ID ?
bremskie
%Europe/Berlin %358 %2010, 09:36
Hallo goedemorgen, inderdaad ik heb een associatieve array op id.\
print_r :
Array ( [69] => Array ( [id] => 69 [count] => 2 [totalprice] => 1900 ) [71] => Array ( [id] => 71 [count] => 1 [totalprice] => 675 ) )
price moet kwa benaming zijn totalprice in tegenstelling op mijn opening topic om verwarring te voorkomen
function update_cart($count, $id){
print_r( $count);
echo '<br />';
echo '<br />';
print_r($id);
}
//Geeft een output van:
print_r( $count);
Array ( [0] => 7 [1] => 5 )
--
print_r( $id);
Array ( [id] => 69 [count] => 2 [totalprice] => 1900 ) Array ( [id] => 71 [count] => 1 [totalprice] => 675 )
Array ( [0] =>7 [1] => 5 ) geeft de count value aan na verandering van het aantal items van ieder artikel in het form gewijzigd door de klant
//Als de functie update cart goed werkt zou het resultaat van het voorbeeld dit moeten worden:
Array ( [id] => 69 [count] => 7 [totalprice] => 1900 ) Array ( [id] => 71 [count] =>5 [totalprice] => 675 )
Het spreekt vanzelf dat de total price dan ook aangepast moet worden maar dit is voor mij nu even niet belangrijk en daar kom ik wel uit
Er worden geen bestellingen opgeslagen in de db. Op het moment dat de klant een bestelling doet krijg de shopowner een email met persoonlike gegevens en de bestelling van deze klant
De klant zelf krijg ook een bevestiging etc.. dus geen paypal etc .
Dankje wel
groeten Bram
Dauntless
%Europe/Berlin %498 %2010, 12:57
Dan wordt het eerder zo iets:
<?php
$productArray = array(array('id'=> 0, 'count'=>1, 'price'=>0), array('id'=> 5, 'count'=>2, 'price'=>0),array('id'=> 10, 'count'=>3, 'price'=>0));
$id = 5;
$newCount = 10;
print_r($productArray);
if(isset($productArray[$id]))
{
//staat al in de array, verhoog count
$productArray[$id]['count'] += $newCount;
}
else
{
//staat er nog niet in
$productArray[$id] = array('id' => $id, 'count' => $newCount, 'price' => '0');
}
print_r($productArray);
?>
En het maakt niet uit dat je bestelling al dan niet in de DB komt, wat ik wil zeggen is: wanneer je de mail verstuurt moet je alle producten terug uit de database halen en de prijs die daarbij hoort gebruiken om het totaal te berekenen. Anders kan ik mijn totale prijs op 0 zetten (of alleszinds lager dan het hoort) en die prijs mee laten mailen.
bremskie
%Europe/Berlin %661 %2010, 16:52
Ok bedankt voor je reply en het is opgelost.
Jouw code heeft me meer begrip geven wat betreft genestelde array's en het refereren naar de keys en values daarvan.
In de ondertaande functie zijn de argumenten $id en $count beide array's.
$id_al en $count zijn beide array's en slaan respectievelijk het id van het artikel en het aantal van dit op en komen uit een form.
function update_cart($id_al,$count ){
$i = 0;
foreach($id_al as $id){
$i++;
$line = array('id' => $id ,'count' => $count[$i - 1], 'price' => 1);
$_SESSION['cart'][$line['id']]['count'] = $line['count'];
}
HArdstikke bedankt voor je aandacht en hulp
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.