Beste leden,

Ik heb hieronder mijn "winkelwagen" script gepost. Nu wil ik graag de producten die in mijn winkelwagen staan verzenden naar de database. Echter lukt dit mij niet.

Kan iemand mij helpen?
gr

cart.php

<?php
include ("includes/connect.php");
    if(isset($_POST['submit'])){
        foreach($_POST as $key => $value){
            $key = explode("-",$key);
            $key = end($key);
            $key = explode("submit",$key);
            $key = end($key);
            
            if(isset($_POST['quantity-'.$key]) <= 0){
                unset($_SESSION['cart'][$key]);
            } else if($_POST['quantity-'.$key] >= 50){
                $_SESSION['cart'][$key]['quantity'] = 50;
            } else {
                $_SESSION['cart'][$key]['quantity'] = $value;
            }
        }
    } error_reporting(0);
?>
<h1>Bekijk winkelwagen</h1>
<a href="beveiligdepagina.php?page=products">Ga terug naar de producten pagina.</a><br />
<?php $sql = "SELECT * FROM producten WHERE id_product IN (";
                foreach ($_SESSION['cart'] as $id => $value){
                    $sql .= $id . ",";
                }
                $sql = substr($sql,0,-1).") ORDER BY id_product ASC";
                $query = mysql_query($sql);
            if(empty($query)){
                echo "Je moet een product toevoegen om toegang te krijgen op deze pagina.<br /><br />";
            }
?>
<form method="post" action="#">
<fieldset>
    <table>
        <tr>
            <th>Naam</th>
            <th>Hoeveelheid</th>
            <th>Prijs per product</th>
            <th>Totaal prijs</th>
        </tr>
        <?php 
        
            $sql = "SELECT * FROM producten WHERE id_product IN (";
                foreach ($_SESSION['cart'] as $id => $value){
                    $sql .= $id . ",";
                }
                $sql = substr($sql,0,-1).") ORDER BY id_product ASC";
                $query = mysql_query($sql);
                $total_price = 0;
                if(!empty($query)){
                while ($row = mysql_fetch_array($query)){
                    $subtotal = $_SESSION['cart'][$row['id_product']]['quantity']*$row['prijs'];
                    $total_price += $subtotal;
                    ?>
                        <tr>
                            <td><?php echo $row['naam'];?></td>
                            <td><input type="text" name="quantity-<?php echo $row['id_product'];?>" size="5" value="<?php echo $_SESSION['cart'][$row['id_product']]['quantity'];?>" style="width: 30px; height: 18px; margin-left: 17px;"/></td>
                            <td><?php echo "€" . $row['prijs'];?></td>
                            <td><?php echo"€" .  $_SESSION['cart'][$row['id_product']]['quantity']*$row['prijs'];?></td>
                        </tr>
                     <?php
                } }
            ?>
            <tr>
                <td></td>
                <td></td>
                <td>Totaal prijs:</td>
                <td><?php echo"€" . $total_price;?></td>
             </tr>
          </table>
          <br />
          <input type="submit" name="submit" value="Update winkelwagen"/></fieldset>
       </form><br />
       <form method="POST" action="afrekenen.php">
       <input type="submit" name="submit" value="Afrekenen"/></fieldset>
       </form><br />
       <p>Om een product te verwijderen, dient u de hoeveelheid op <strong>0</strong> te zetten.</p>
Als je dit maar eerst in de prullenbak mikt.

Ik zie:
- een hoop overbodige loops
- foutieve controles en validaties
- foutieve (mysql) foutafhandeling
- foutieve manier van het euro teken weergeven
- inline style
- een zeer rottige manier van fetchen
- geen relevante code met betrekking tot jouw vraag:
* SELECT gebruik je om gegeven uit de database tabellen te halen
* INSERT gebruik je om gegevens in de database tabellen te zetten
* UPDATE gebruik je om gegevens in de database tabbellen te wijzigen

Advies: kijk eens naar een goed geschreven winkelwagen script.
Jouw advies had ik al eerder opgevolgd en ik heb volgens internetgebruikers een "goed geschreven winkelwagen script" bekeken. Blijkbaar is dit dus niet goed. Ik weet niet beter en heb nog niet veel vestand van PHP.

Graag vraag ik uw hulp!
Laat me niet laggen "Deze goeie tutorial". Het geschrevene zal er wel mee door kunnen, maar de voorbeeldcode dient linia directa naar de prullenbak verwezen te worden.
Noppes Homeland op 12/09/2010 20:21:12

Laat me niet laggen "Deze goeie tutorial". Het geschrevene zal er wel mee door kunnen, maar de voorbeeldcode dient linia directa naar de prullenbak verwezen te worden.

@NOPPES: Kan je aangeven wat niet goed is aan deze code? Een tijdje geleden zei je dit ook al tegen mij en ik ben nog steeds op zoek naar waarom het prullenbak is. Gaarne niet de voor de hand liggende dingen noemen zoals SQL Injection, mysql_real_escape_string enzo.
Wel in feite draait het altijd om die factoren, maar ook de manier van controles en validaties, foutafhandeling, gebruik van de juiste functies, manier waarop om wordt gegaan met array's, naamgeving variabelen, het escapen, inconsequent onoverzicht coderen.

Naast dat, zet ik zo ook mijn vraagtekens bij de script logica.

Als je een tutorial schrijft, dien je correct werkende voorbeeld code erbij te posten. Het wordt immers door velen zo kwakkeloos overgenomen alszijnde het is zo als het is.
@Noppes: Dank voor je reactie. Ik ben beginner en heb de code wat aangepast en gebruikt. Controles, validaties, escapen toegevoegd en injection tegengegaan. Ik kom er nog niet uit om de explode (die San The ouderwets vond) eruit te halen en een array te gebruiken. De script logica was niet erg complex, simpele loop om producten te tonen en te bestellen. Ik ben geen webdesigner en wil dat ook niet worden, ik heb slechts wat gemaakt om een beginnende mkb-er te helpen.
"ik heb slechts wat gemaakt om een beginnende mkb-er te helpen."
Wel dat moet je dan maar achterwege gaan laten tot op het moment je op z'n minst 3 tot 5 jaar aantoonbare praktijkervaring hebt opgedaan in alle disiplines:
- programeren
- sql en databases
- webdesign
- bedrijfs proces analyse
Noppes Homeland op 12/09/2010 22:49:03

Wel dat moet je dan maar achterwege gaan laten tot op het moment je op z'n minst 3 tot 5 jaar aantoonbare praktijkervaring hebt opgedaan in alle disiplines


Wat een onzin.

Reageren