Warenkorbeinträge löschen

  • Hallo
    Ich möchte meinen einfachen Warenkorb, der mit einer mysql -Datenbank arbeitet, noch etwas verbessern und innerhalb einer Abfrage noch ein Inputfeld einfügen, dass die Löschfunktion beinhaltet. Ich habe eine Checkbox hinter jeden Datensatz gesetzt. Innerhalb der Schleife sollte nun dem value des Inputs die entsprechende ID zugewiesen werden, damit ich diese danach löschen kann.
    echo '<input name="loeschen" value=$inhalt[ID] type="checkbox">' ;
    $inhalt[ID] ist die ID, das habe ich mit print_r überprüft, doch wenn ich die Überprüfung mit value mache, kommt nichts.
    print_r ($value) ;
    Wo ist der Fehler?
    Danach möchte ich dann mit einer neuen Abfrage : ...."SELECT * FROM `warenliste` WHERE ID not LIKE '".$value."' .... So habe ich mir das vorgestellt. Geht das überhaupt? Und kann ich dabei immer auf der gleichen Seite bleiben?
    Ich habe nur den Videokurs gemacht, bin sonst totale Anfängerin. Der Warenkorb ohne Löschfunktion funktioniert jedoch und ich kriege auch das Mail mit der Bestellung. Das ganze ist schon online, falls ihr den Link wollt, könnt ihr es sagen.


    $produkt = $_SESSION['key101'] ;
    $produkt1 = $_SESSION['key102'] ;
    $produkt2 = $_SESSION['key103'] ;
    $produkt3 = $_SESSION['key104'] ;
    $produkt4 = $_SESSION['key105'] ;
    $produkt5 = $_SESSION['key106'] ;
    $produkt6 = $_SESSION['key107'] ;
    $produkt7 = $_SESSION['key108'] ;
    $produkt8 = $_SESSION['key109'] ;
    $produkt9 = $_SESSION['key110'] ;
    $produkt10 = $_SESSION['key111'] ;
    $produkt11 = $_SESSION['key201'] ;
    $produkt12 = $_SESSION['key202'] ;
    $produkt13 = $_SESSION['key203'] ;
    $produkt14 = $_SESSION['key204'] ;
    $produkt15 = $_SESSION['key205'] ;
    $produkt16 = $_SESSION['key206'] ;
    $produkt17 = $_SESSION['key207'] ;
    $produkt18 = $_SESSION['key208'] ;
    $produkt19 = $_SESSION['key301'] ;
    $produkt20 = $_SESSION['key303'] ;
    $produkt21 = $_SESSION['key302'] ;


    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";


    $db_erg = mysql_query("SELECT * FROM `warenliste` WHERE ID LIKE '".$produkt."' OR ID LIKE '".$produkt1."' OR ID LIKE '".$produkt2."' OR ID LIKE '".$produkt6."' OR ID LIKE '".$produkt7."'
    OR ID LIKE '".$produkt8."' OR ID LIKE '".$produkt9."' OR ID LIKE '".$produkt10."' OR ID LIKE '".$produkt12."'
    OR ID LIKE '".$produkt13."' OR ID LIKE '".$produkt14."' OR ID LIKE '".$produkt11."' OR ID LIKE '".$produkt15."'
    OR ID LIKE '".$produkt16."' OR ID LIKE '".$produkt17."' OR ID LIKE '".$produkt18."' OR ID LIKE '".$produkt19."'
    OR ID LIKE '".$produkt20."' OR ID LIKE '".$produkt21."'
    OR ID LIKE '".$produkt3."' OR ID LIKE '".$produkt4."' OR ID LIKE '".$produkt5."'");


    while ( $inhalt = mysql_fetch_assoc( $db_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">' ;
    echo "</td>" ;
    echo '</>';


    }
    echo "</table>" ;



    Vielen Dank für eure Hilfe.

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


    gibt aus

    HTML
    <input name="loeschen" value=$inhalt[ID] type="checkbox">



    ich empfehle dir das zu verketten mit einen Punkt

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




    bei einfachen ' wird der wert der variable nicht gelesen und als string ausgegeben
    bei " wird er gelesen und der inhalt der variable ausgegeben





    des weiteren...
    Wozu so viele Sessions?
    es müssen doch bloß ein paar zahlen gespeichert werden mach doch einfach ein Array.
    dieses array würde ich dann für die sql abfrage wieder zu einer Zeichenkette mit implode() machen.


    dann solltest du dir noch anschauen

    SQL
    SELECT * FROM `warenliste` WHERE ID IN ()


    dann ist das mit der Session und der sql abfrage in einer zeile erledigt^^

  • Hi Roland
    Vielen Dank für deine Antwort.
    Dieses Sessions sind entstanden, weil ich pro Seite 1 Produkt mit einer Session habe, die zum Warenkorb gesendet werden, wenn sie per radio-Button ausgewählt werden. Denn es gibt pro Produkt eben auch 2 Varianten, die je eine andere ID haben.


    <form action="lesen1.php#footer" method="post"> Ich möchte dieses
    Lernpaket
    bestellen:<br>
    <br>
    <input name="Lesen1" value="download" checked="checked" type="radio">als
    Download(Einzelversion) sFr. 7.-- <input name="Lesen1" value="CD" type="radio"> als
    CD(Mehrplatzversion) sFr. 17.-- <br>
    <br>
    <input value="in den Warenkorb" type="submit"> <input name="abgesendet" value="Ja" type="hidden"></form>
    <br>
    <a class="a rechts" href="einkauf.php">zum Warenkorb </a>
    <?php error_reporting(E_ALL ^ E_NOTICE);


    if ($_POST['abgesendet'] == "Ja" )
    { echo " Dieser Artikel wurde im Warenkorb gespeichert. ";
    }
    if ($_POST["Lesen1"] == 'download') {
    $key = "1011" ;
    }
    if ($_POST["Lesen1"] == 'CD')
    {
    $key = "101" ;
    }
    $_SESSION["key101"] = "$key";


    Vielleicht hätte man es anders lösen können, aber ich habe es probiert und es hat nicht geklappt.

  • Hallo Roland
    Also ich habe das jetzt mal bei der Produkteseite geändert:


    if ($_POST['abgesendet'] == "Ja" )
    { echo " Dieser Artikel wurde im Warenkorb gespeichert. ";
    }
    if ($_POST["Lesen1"] == 'download') {
    $key = "1011" ;
    $_SESSION["einkaufswagen"][] = "$key";
    }
    if ($_POST["Lesen1"] == 'CD')
    {
    $key = "101" ;
    $_SESSION["einkaufswagen"][] = "$key";


    Doch es kommt noch nichts in den warenkorb, weil die einkauf.php noch nicht funktioniert. Ich habe das mit dem implode zwar studiert, aber mit der Umsetzung habe ich wahrscheinlich Fehler gemacht. Ich bekomme eine Fehlermeldung :
    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource


    Hier meine Umsetzung in der einkauf.php:


    $_SESSION["einkaufswagen"] = $key ;
    $key = array('ID', 'Anzahl', 'Produktbezeichnung', 'Ausgabeart', 'Preis') ;
    $inhalt = implode(",", $key);
    $abfrage = "SELECT FROM user WHERE ID IN ()";
    $erg = mysql_query($abfrage);


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


    Was muss ich ändern? Mit einer Zeile nur bringe ich da nichts zustande.

  • Ich dachte, man müsse die SESSION immer mit einer Variablen holen.
    Also dann so:
    $_SESSION["einkaufswagen"] = array('ID', 'Anzahl', 'Produktbezeichnung', 'Ausgabeart', 'Preis') ;
    $inhalt = implode(",", $_SESSION["einkaufswagen"]);
    $abfrage = "SELECT FROM user WHERE ID IN ()";
    $erg = mysql_query($abfrage);


    while ($inhalt = mysql_fetch_assoc( $erg))
    {
    Aber die Fehlermeldung bleibt.

  • ich denke du solltest erst mal Grundlagen über php lernen^^
    dein ganzer Einkaufswagen ist sinnlos wenn du in sowieso immer mit den gleichen überschreibst.


    in deiner Session ist doch etwas drin da musst du doch nichts reinschreiben wenn du nur abrufen willst was drin ist.


    lass die Zeile einfach weg okay? du schreibst doch schon was bei deinen Produktseiten rein was du dann auf deiner Einkaufseite abruft.


    das * bei SELECT muss bleiben
    und du must bei IN()
    auch noch ein paar dinge in die klammer schreiben

  • Ja, ich weiss, ich habe die Grundlagen noch nicht wirklich begriffen. Jetzt ist wenigstens die Fehlermeldung weg, aber im Warenkorb sind alle meine Produkte. Das implode erstellt doch eine Liste von den gewählten Produkten, nicht von allen.


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


    while ($inhalt = mysql_fetch_assoc( $erg))

  • genauso sollte das aussehen.
    alle Produkte kann eigentlich nicht sein (naja außer du hast schon mal alle gespeichert) schau mal was in deiner Session drin ist
    print_r($_SESSION["einkaufswagen"]);

  • Was stimmt denn da nicht? Ich habe es doch so gemacht,wie du es geschrieben hast, nur habe ich die Variable umbenannt. Beim print kommt jedoch nichts.



    if ($_POST['abgesendet'] == "Ja" )
    { echo " Dieser Artikel wurde im Warenkorb gespeichert. ";
    }
    if ($_POST["Lesen1"] == 'download') {
    $key = "1011" ;
    $_SESSION["einkaufswagen"][] = "$key";
    }
    if ($_POST["Lesen1"] == 'CD')
    {
    $key = "101" ;
    $_SESSION["einkaufswagen"][] = "$key";
    }


    print_r($_SESSION["einkaufswagen"]);

  • <?php
    $_POST['abgesendet'] = "Ja";
    $_POST["Lesen1"] = 'download';
    if ($_POST['abgesendet'] == "Ja" ){ echo " Dieser Artikel wurde im Warenkorb gespeichert. ";}
    if ($_POST["Lesen1"] == 'download') {
    $key = "1011" ;
    $_SESSION["einkaufswagen"][] = "$key";
    }
    if ($_POST["Lesen1"] == 'CD'){
    $key = "101" ;
    $_SESSION["einkaufswagen"][] = "$key";
    }


    print_r($_SESSION["einkaufswagen"]);
    ?>
    kommt bei mir raus
    Dieser Artikel wurde im Warenkorb gespeichert. Array ( [0] => 1011 )


    benutzt du auch schön session_start()? nicht das du das vergessen hast^^

  • So, jetzt bin ich ein Stück weiter und ich habe eine neue Fehlermeldung erzeugt:


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


    while ($inhalt = mysql_fetch_assoc( $erg))


    Da kommt die Fehlermeldung: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource


    Das muss an dem Zusatz bei der Select-Abfrage 2AND where ID NOT LIKE $_SESSION[loeschen])" liegen, denn vorher war mysql_fetch_assoc() ja ok. Was habe ich da falsch gemacht? In $_SESSION[loeschen] sind die ID's der markierten Datensätze, die der Benutzer löschen möchte. Über eine submit-Action wird die Seite neu aufgerufen und der Warenkorb neu errichtet, eben ohne diese ID's. Oder kann ich das so nicht machen?

  • ja dann musst du einfach nur das Produkt wider aus deinen $_SESSION["einkaufswagen"] rausnehmen...



    das geht z.b. so

    PHP
    //davor solltest du vll noch Duplikate entfernen (kann ja sein das jemand 2 mal auf hinzufügen klickt). das wird in der nächsten Zeile hier gemacht
    $_SESSION["einkaufswagen"]= array_unique($_SESSION["einkaufswagen"]);
    
    
    
    
    $zuentfernendesproduckt = 100;
    $key = array_search($zuentfernendesproduckt, $_SESSION["einkaufswagen"]);
    unset($_SESSION["einkaufswagen"][$key]);
  • Das können aber auch mehrere Datensätze auf einmal sein.



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


    ergibt die Fehlermeldung: mysql_fetch_assoc(): supplied argument is not a valid MySQL

Jetzt mitmachen!

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