Hallo,

Ik heb van alles geprobeerd maar het lukt me maar niet, en ben nu ook best gefrustreerd daardoor door het vele proberen, maar ik wil graag de totaalprijs van Winkelwagen.php uit http://www.phphulp.nl/php/script/overig/winkelwagen-update-van-de-tutorial/1750/ berekenen. Hieronder de kopie:

Ik zoek naar een oplossing, geen commentaar over fouten in de tutorial, heb de code al gedeeltelijk herschreven op mijn pc, maar ik wil optellen..


<?php
// Sessie starten
session_start();

// Database connectie maken
include('Config.php');

// Style pagina invoegen
echo '<link rel="stylesheet" type="text/css" href="CSS/Winkelwagen.css" />';

// Javascript voor updaten en deleten winkelwagen invoegen
echo '<script type="text/javascript" src="Winkelwagen.js"></script>';

// Kijk of er iets in de winkelwagen zit
if(empty($_SESSION['winkelwagen']))
{
    echo '<p class="error">Uw winkelwagen is momenteel leeg.</p>';
}
// Anders
else
{
    echo '<div class="wrapper">';
        echo '<div class="row">';
            echo '<p class="small"><b>Aantal:</b></p>';
            echo '<p class="small"><b>Art. nr.:</b></p>';
            echo '<p class="big"><b>Product:</b></p>';
            echo '<p class="small"><b>Actie:</b></p>';
            echo '<p class="small"><b>Prijs:</b></p>';
        echo '</div>';
    
        // Exploden
        $cart = explode('|', $_SESSION['winkelwagen']);

        // Begin formulier
        echo '<form action="Upd_winkelwagen.php" method="post">';
            // Show winkelwagen
            $i = 0;
            foreach($cart as $products)
            {
                // Split
                /*
                $product[x] -->
                    x == 0 -> product id
                    x == 1 -> hoeveelheid
                */
                $product = explode(',', $products);
        
                // Get product info
                $sql = mysql_query("SELECT * FROM producten WHERE id = '".intval($product[0])."'");
              
                // Als query gelukt is
                if($sql)
                {
                    // Als er items zijn
                    if(mysql_num_rows($sql) > 0)
                    {
                        // Alle items echoën
                        $rec = mysql_fetch_assoc($sql);
                        $i++;
        
                        // Verborgen vars
                        echo '<input type="hidden" name="productnummer_'.$i.'" value="'.$product[0].'" />';
                        
                        echo '<div class="row">';
                            // Aantal
                            echo '<p class="small">';
                                echo '<input type="text" class="aantal_w" name="hoeveelheid_'.$i.'" value="'.$product[1].'" size="2" maxlength="2" onKeyPress="return submitenter(this,event)" />';
                            echo '</p>';
                            
                            // Artikel nummer
                            echo '<p class="small">';
                                if($rec['voorraad'] < $product[1])
                                {
                                    echo '<font style="color: #FF0000;">'.$product[0].'</font>';
                                    $error = TRUE;
                                }
                                else
                                {
                                    echo $product[0];
                                }
                            echo '</p>';
                            
                            // titel
                            echo '<p class="big">';
                                echo $rec['titel'];
                            echo '</p>';
                            
                            // Acties
                            echo '<p class="small">';
                                echo '<a href="javascript:removeItem('.$i.')">Del</a>';
                            echo '</p>';
                            
                            // Prijs
                            echo '<p class="small">';
                                echo '&euro; '.($rec['prijs'] * $product[1]);
                            echo '</p>';
                        echo '</div>';
                    }
                    // Anders
                    else
                    {
                        // Fout weergeven
                        echo '<p class="error">Dit product is er niet meer.</p>';
                    }
                }
                // Anders
                else
                {
                    // Mysql error opvangen
                    echo 'Er is een fout opgetreden in de query. <br />';
                    echo mysql_error();
                }
            }
        echo '</form>';
        
        if($error == TRUE)
        {
            echo '<p class="error">';
                echo 'Van artikelen waarvan het artikelnummer rood is gekleurd hebben we niet voldoende op voorraad om je bestelling direct uit te kunnen leveren.';
            echo '</p>';
        }
    echo '</div>';
    
    // Winkelwagen leeghalen & Afrekenen
    echo '<a href="javascript:removeCart()">Winkelwagen leeghalen</a><br />';
    echo '<a href="Afrekenen.php">Afrekenen</a></p>';
}
?>


Hoor het graag!
Nope, ik heb het alleen over winkelwagentje, adminpanel en etalages heb ik allemaal al klaar..

Toevoeging op 28/08/2015 00:01:47:

En eigenlijk is het probleem alleen het totaalbedrag berekenen
Een winkelwagentje is echt custom scriptwerk. De een werkt met voucher-codes, de database is overal weer verschillend.

De oplossingen hier zijn al gegeven met multi-dimensionale array's. Alleen moet je zelf even zorgen dat je de data netjes in de sessie zet. Uitlezen is daarna niet echt heel lastig meer.
Maar hoe krijg ik het nou opgeteld, want het debuggen etc begrijp ik totaal niet.

Toevoeging op 28/08/2015 00:08:45:

Vind het zonde om alleen op het optellen al het werk voor niets te hbben gedaan
Je hebt in $_SESSION['cart']['products'] een hoop items die je producten voorstellen. Deze kan je met implode() splitten tot komma-gescheiden waardes, zodat je met een SELECT SUM(prices) FROM products WHERE id IN ($alle_producten) alle producten op kan halen.
Kan je het iets verder uitwerken, weet niet hoe ik moet beginnen, overigens zijn ze als decimalen opgeslagen in de database.
Bouw eerst eens een goede array op, in je sessie. Dat is de eerste stap.
Daarna moet je het voor elkaar kunnen krijgen om er data aan toe te kunnen voegen...

Als je weet hoe dat werkt (experimenteren!!!) dan kan je er een leuk formuliertje aan hangen.
De code die je nodig hebt staat hier precies beschreven, je moet het alleen maar op de juiste plaats inpassen in je eigen code. Als je iets simpelweg ergens knipt en plakt zonder te (proberen te) doorgronden wat er gebeurt dan gaat dit zelden goed.

Aar (en ik ook) raden je toch aan je script eerst wat meer te structureren zodat vervolgens het rekenen met al je data ook wat vlotter gaat, en je beter het overzicht in je code kunt bewaren. Het is verstandig om dit (wellicht overdreven) netjes te doen omdat dit administratieve data is, en toch vrij nauw luistert. Een heldere/simpele/ondubbelzinnige/nette opzet is daarvoor het beste.
Iets wat mij wel lukt is dat ik alle prijzen achter elkaar krijg, bijvoorbeeld:

6, 5, 4

met komma's of wat er dan ook tussen, maar hoe tel ik het nu op?

Toevoeging op 28/08/2015 16:19:23:

Thomas zijn scriptje nu op juiste plek alleen krijg ik de prijs van het onderste item uit de lijst, nog niet de totale.

Toevoeging op 28/08/2015 16:20:42:

Deze regel moet weg dan werkt het @Thomas.

$totaal = 0;
Je kan met explode() een array maken van een karakter-gescheiden string. Dan kan je met array_sum(0 de boel optellen.
Niels Rietveld op 28/08/2015 16:09:29
Deze regel moet weg dan werkt het @Thomas.
$totaal = 0;


Dat is om de variabele te initialiseren, anders is deze mogelijk ongedefinieerd (als je winkelwagen leeg is, bijvoorbeeld).

Reageren