Warenkorbeinträge löschen

  • du brauchst keine Session für das loeschen dass musst du dir doch nicht speichern über mehrere Seiten...


    dann müsste man jetzt überlegen ob du überhaupt mehrere zum entfernen machen willst?
    Mann könnte ja gleich einen Link in die Letzte spalte machen der das Produkt entfernt?

  • Ich kann mir das nicht so ganz vorstellen. Zuerst wird doch der Warenkorb gezeigt. Erst dann kann man anklicken, was man wieder entfernen will. Dann ist doch der Link in der letzten Spalte schon vorbei, bzw. die Schleife schon fertig. Oder wie funktioniert das?

  • jedes mal wenn die seite aufgerufen wird wird der komplette code abgearbeitet.


    wenn du z.b. den link zum löschen verwendest dann sind die Daten die der Link übertragen hat ab der ersten Zeile im php code verfügbar.



    der Link müsste auch gar nicht auf der Seite sein, könnte auch von außerhalb kommen würde trotzdem gehen solange du


    vor der abgrage und dem ausgeben machst...

    PHP
    $inhalt = implode(",", $_SESSION["einkaufswagen"]);
    $abfrage = "SELECT * FROM warenliste WHERE ID IN ($inhalt)";
    $erg = mysql_query($abfrage);
  • Jetzt kommt die gleiche Fehlermeldung schon am Anfang, bevor ich überhaupt die Ware im Korb habe. Und was meinst du mit der URL, ich habe ja die ID, die gelöscht werden soll, auf dieser Seite, nicht auf einer anderen. Ohne SESSION müsste ich sie einfach in ein Array speichern. Ich zeig dir mal das Ganze, was ich bis jetzt habe:


    <?php error_reporting(E_ALL ^ E_NOTICE);
    require_once ('funktionen.php') ;



    $_SESSION["einkaufswagen"]= array_unique($_SESSION["einkaufswagen"]);
    if(!empty($_SESSION["loeschen"])){
    $del = array_search($_SESSION["loeschen"], $_SESSION["einkaufswagen"]);
    unset ($_SESSION["einkaufswagen"][$del]) ; }



    echo '<table class="rahmen">';
    echo '<th class="kopf">';
    echo "ID" ;
    echo '<th class="kopf">';
    echo "Anzahl" ;
    echo '<th class="kopf">';
    echo "Produktbezeichnung";
    echo '<th class="kopf">';
    echo "Ausgabeart";
    echo '<th class="kopf">';
    echo "Preis";
    echo '<th class="kopf">';
    echo "L&ouml;schen";


    //$_SESSION["einkaufswagen"][] = array_diff ($_SESSION["einkaufswagen"][], $_SESSION["loeschen"][]) ;


    $inhalt = implode(",", $_SESSION["einkaufswagen"]);
    $abfrage = "SELECT * FROM warenliste WHERE ID IN ($inhalt) ";
    $erg = mysql_query($abfrage);


    while ($inhalt = mysql_fetch_assoc( $erg))
    {


    echo '<tr class="zeilen">';
    echo '<td class="felder">';
    echo $inhalt['ID'] ;
    echo "</td>" ;
    echo '<td class="felder">';
    echo $inhalt['Anzahl'] ;
    echo "</td>" ;
    echo '<td class="felder">';
    echo $inhalt['Produktbezeichnung'];
    echo "</td>" ;
    echo '<td class="felder">';
    echo $inhalt['Ausgabeart'] ;
    echo "</td>" ;
    echo '<td class="felder">';
    echo $inhalt['Preis'] ;
    echo '<td class="felder">';
    echo '<input name="loeschen" value="'.$inhalt['ID'].'" type="checkbox">' ;
    $_SESSION["loeschen"][] = $inhalt['ID'] ;
    echo "</td>" ;
    echo '</>';
    }
    echo "</table>" ;




    ?>
    <br>
    <form action="einkauf.php" method="post">
    <center><input value="aktualisieren" type = "submit"> <input name="markiert" value = "Ja" type="hidden"></center></form>
    <?php
    if ($_POST['markiert'] == "Ja" )
    { echo " Markierte Artikel wurden gel&ouml;scht. ";


    }


    ?>
    <br>
    <br>
    <div style="text-align: center;" id="inhalt"> <a href="bestellung.php"><br>
    </a>
    </div>
    <div style="text-align: center;" id="footer"><a href="#header"><br>
    </a>
    </div>
    </div>


    </body>
    </html>

  • $_SESSION["loeschen"][] = $inhalt['ID'] ;


    okay Problem ist bei dieser Zeile: alle Produkte die im Warenkorb sind werden in die löschen session geschrieben ich denke das ist nicht das was du willst^^

  • echo '<input name="loeschen" value="'.$inhalt['ID'].'" type="checkbox">' ;
    $_SESSION["loeschen"][] = $inhalt['ID'] ;


    das bedeutet doch, dass wenn man auf das Kästchen klickt, die ID von diesem Datensatz gespeichert wird, also nur von dem Datensatz, den man löschen will. Die anderen Datensätze, die nicht angeklickt werden, die kommen nicht in diese $_SESSION["loeschen"][]. Habe ich da was grundlegend falsch verstanden? ?(

  • mein überarbeitetes Script: bekomme die Fehlermeldung:


    Parse error: syntax error, unexpected '.' Das ist eine leere Zeile. Oben in der Adresse sehe ich den Link mit dell_art=103 , was die ID ist vom gelöschten Datensatz - somit richtig ist. Aber was ist mit dieser Fehlermeldung?


    $_SESSION["einkaufswagen"]= array_unique($_SESSION["einkaufswagen"]);
    $delete = ($_GET['dell_art']);
    if(!empty($delete)){
    $key = array_search($delete, $_SESSION["einkaufswagen"]);




    if ($key) {
    unset ($_SESSION["einkaufswagen"][$key]);


    }
    }
    echo '<table class="rahmen">';
    echo '<th class="kopf">';
    echo "ID" ;
    echo '<th class="kopf">';
    echo "Anzahl" ;
    echo '<th class="kopf">';
    echo "Produktbezeichnung";
    echo '<th class="kopf">';
    echo "Ausgabeart";
    echo '<th class="kopf">';
    echo "Preis";
    echo '<th class="kopf">';





    $inhalt = implode(",", $_SESSION["einkaufswagen"]);
    $abfrage = "SELECT * FROM warenliste WHERE ID IN ($inhalt) ";
    $erg = mysql_query($abfrage);


    while ($inhalt = mysql_fetch_assoc( $erg))
    {


    echo '<tr class="zeilen">';
    echo '<td class="felder">';
    echo $inhalt['ID'] ;
    echo "</td>" ;
    echo '<td class="felder">';
    echo $inhalt['Anzahl'] ;
    echo "</td>" ;
    echo '<td class="felder">';
    echo $inhalt['Produktbezeichnung'];
    echo "</td>" ;
    echo '<td class="felder">';
    echo $inhalt['Ausgabeart'] ;
    echo "</td>" ;
    echo '<td class="felder">';
    echo $inhalt['Preis'] ;
    echo '<td width="20">';
    echo '<a href="warenkorb.php?dell_art='.$inhalt['ID'].'">Löschen</a>';
    echo "</td>" ;
    echo '</>';
    }
    echo "</table>" ;
    ?>
    <br>
    <br>
    <div style="text-align: center;" id="inhalt"> <a href="bestellung.php"><br>
    </a>
    </div>
    <div style="text-align: center;" id="footer"><a href="#header"><br>
    </a>
    </div>
    </div>


    </body>
    </html>



  • oh, da hat wirklich ein tr gefehlt, aber die Fehlermeldung bleibt. Zeile 43 : die ist aber leer und steht über der 1. Zeile des Scripts. Also davor ist nur der head -Eintrag und require_once ('funktionen.php') . Da ist definitiv nichts falsch.

  • <?php session_start();
    include("connect.php");
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html><head>
    <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
    <title>Einkauf</title>
    <link rel="stylesheet" href="styles.css" type="text/css">
    <meta name="keywords" content="Primarschule; Kindergarten; Lernprogramme; Heilpädagoge; Heilpädagogin; Logopädie; phonologisches Bewusstsein; Mediatorprogramme;PC; Computer; Lernen; Lesen; Laute: Selbstlaute; Umlaute; Mitlaute; Schweiz;">


    <meta name="editor" content="html-editor phase 5">
    </head>
    <body>
    <br>


    <div id="seite">
    <div id="header"><img style="width: 207px; height: 137px;" alt="" src="logo.png"><br>
    <h1 class="table">Lernprogramme</h1>
    </div>
    <div class="navi">
    <ul>
    <li><a href="index.php" class="index.php">Home<br>
    </a></li>
    <li><a href="einkauf.php" rel="me" class="aktiv">Warenkorb<br>
    </a></li>
    <li><a href="bestellung.php" rel="me">Bestellung absenden<br>
    </a></li>
    </ul>
    </div>
    <br>
    <?php error_reporting(E_ALL ^ E_NOTICE);
    require_once ('funktionen.php') ;


    hier ist die zeile von der Fehlermeldung


    $_SESSION["einkaufswagen"]= array_unique($_SESSION["einkaufswagen"]);
    $delete = ($_GET['dell_art']);
    if(!empty($delete)){
    $key = array_search($delete, $_SESSION["einkaufswagen"]);


    if ($key) {
    unset ($_SESSION["einkaufswagen"][$key]);


    }
    }
    echo '<table class="rahmen">';
    echo '<th class="kopf">';
    echo "ID" ;
    echo '<th class="kopf">';
    echo "Anzahl" ;
    echo '<th class="kopf">';
    echo "Produktbezeichnung";
    echo '<th class="kopf">';
    echo "Ausgabeart";
    echo '<th class="kopf">';
    echo "Preis";
    echo '<th class="kopf">';





    $inhalt = implode(",", $_SESSION["einkaufswagen"]);
    $abfrage = "SELECT * FROM warenliste WHERE ID IN ($inhalt) ";
    $erg = mysql_query($abfrage);


    while ($inhalt = mysql_fetch_assoc( $erg))
    {


    echo '<tr class="zeilen">';
    echo '<td class="felder">';
    echo $inhalt['ID'] ;
    echo "</td>" ;
    echo '<td class="felder">';
    echo $inhalt['Anzahl'] ;
    echo "</td>" ;
    echo '<td class="felder">';
    echo $inhalt['Produktbezeichnung'];
    echo "</td>" ;
    echo '<td class="felder">';
    echo $inhalt['Ausgabeart'] ;
    echo "</td>" ;
    echo '<td class="felder">';
    echo $inhalt['Preis'] ;
    echo '<td width="20">';
    echo '<a href="warenkorb.php?dell_art='.$inhalt['ID'].'">Löschen</a>';
    echo "</td>" ;
    echo '</tr>';
    }
    echo "</table>" ;
    ?>
    <br>
    <br>
    <div style="text-align: center;" id="inhalt"> <a href="bestellung.php"><br>
    </a>
    </div>
    <div style="text-align: center;" id="footer"><a href="#header"><br>
    </a>
    </div>
    </div>


    </body>
    </html>

  • Ich habe den Fehler gefunden. Ich bin so doof. Meine Seite ist ja nicht die Warenkorb.php sondern die Einkauf.php. Also der Link hat nicht gestimmt. Jetzt kommt keine Fehlermeldung mehr, aber das Produkt wurde auch nicht entfernt.
    D. h. ich kann das 1. Produkt, das ich in den Warenkorb gelegt habe ,nicht löschen, alle anderen schon.
    Ich werde mal noch ein bisschen studieren, woran das liegen kann.

  • gebe dir zu Testzwecken am besten den $_GET['dell_art'], $key und $_SESSION["einkaufswagen"] aus.


    ist es immer das erste?
    oder eins mit einer bestimmten id?
    oder ist es immer das letzte (nachdem du schon alle anderen entfernt) was du entfernen möchtest?

  • Ich habe es jetzt hinbekommen, dass der Datensatz mit Array [0] gelöscht wird. Doch jetzt kommt eine Fehlermeldung, ich nehme an, weil der Korb leer ist:


    mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource
    betrifft die rote Zeile:


    $_SESSION["einkaufswagen"]= array_unique($_SESSION["einkaufswagen"]);
    $delete = ($_GET['dell_art']);


    if(!empty($delete)) {
    $key = array_search($delete, $_SESSION["einkaufswagen"]);



    if (($key) != NULL) {
    unset($_SESSION["einkaufswagen"][$key]);


    }
    if (($key) == NULL){
    unset ($_SESSION["einkaufswagen"][0]) ;}
    }
    print_r (($_SESSION["einkaufswagen"])) ;
    echo '<table class="rahmen">';
    echo '<th class="kopf">';
    echo "ID" ;
    echo '<th class="kopf">';
    echo "Anzahl" ;
    echo '<th class="kopf">';
    echo "Produktbezeichnung";
    echo '<th class="kopf">';
    echo "Ausgabeart";
    echo '<th class="kopf">';
    echo "Preis";
    echo '<th class="kopf">';
    $inhalt = implode(",", $_SESSION["einkaufswagen"]);
    $abfrage = "SELECT * FROM warenliste WHERE ID IN ($inhalt) ";
    $erg = mysql_query($abfrage);
    while ($inhalt = mysql_fetch_assoc( $erg))
    {

  • ja ist klar^^


    der index war 0 und deshalb: 0 ist false
    if($key){
    //wird nicht ausgeführt wen key 0 ist
    }



    so ist es auch möglich das zu schreiben ist besser da brauchst nicht deine 2 if Bedingungen
    if($key !== false){
    unset($_SESSION["einkaufswagen"][$key]);
    }





    für dein problem...


    da musst du eine große if klammer drum machen am besten prüfst du ob der wahrenkorb leer ist mit


    PHP
    if(empty($_SESSION["einkaufswagen"])){
    echo 'kein Produkt im Warenkorb';
    }
    else{
    echo 'sie haben Produkte in ihren Warenkorb';
    }

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!