eine Position nur löschen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • eine Position nur löschen

    hallo

    hab mir heute
    unset($_SESSION['cart'][4]);
    $_SESSION['cart'] = array_values(array_unique($_SESSION['cart']));
    erarbeitet.
    "ich" kann also mein array bearbeiten.

    aber wie kann der Anwender jetzt in meiner Warenkorb-Tabelle
    eine Position löschen?
    PHP-Code:
    $total 0;
      for (
    $i 0$i count($_SESSION['cart']); $i++) {
      
    $cartsql 'SELECT ..FROM..  WHERE id ='$_SESSION['cart'][$i];
      
    mysql_query..
      
    mysql_fetch_array...  
     
          $...=......
      
       echo     
    '<td>' $i .  '</td>';
       echo     
    '<td>' $artikelnummer '</td>';
       echo     
    '<td>''hier Löschmöglichkeit' '</td>';   
      } 
    in die for-Schleife "wie" einen link oder einen button oder/ und einen button?

    Gruss
    Pepsi

  • #2
    anstatt der for-schleife lieber foreach benutzen

    PHP-Code:
    foreach ( $SESSION['cart'] as $id=>$value ) {
    echo 
    "<a href=\"warenkorb.php?id=".$id."\">löschen</a>";

    Kommentar


    • #3
      Jupp, und zum löschen dann einfach

      PHP-Code:
      unset($SESSION['cart'][$_GET['id']]); 
      verwenden

      Kommentar


      • #4
        Vielen Dank!
        kann diese Super-Tip's aber leider erst morgen "verarbeiten"
        bis dahin
        Gruss Pepsi

        Kommentar


        • #5
          so einfach tauschen geht wohl leider nicht
          habe zwar per quakenet festgestellt, dass foreach ein array benötigt.
          -hab hin und her probiert bis nur noch assumed-Problem auftauchte -
          aber ich weiss nicht weiter.
          Hier meine erste Änderung von for auf foreach.
          PHP-Code:
           // $total = 0;
          //  for ($i = 0; $i < count($_SESSION['cart']); $i++) {

          //Zeile139:
            
          $cartsql 'SELECT id, artikelnummer, artikelname FROM artikeltabelle WHERE id ='$_SESSION['cart'][$i];
            
          $artikel mysql_query($cartsql);
            
          $art mysql_fetch_array($artikel);
            echo 
          mysql_error();
                 
            
          $id $art['id'];
            
          $artikelnummer $art['artikelnummer'];
            
          $artikelname htmlspecialchars($art['artikelname']);
          //Zeile148:  
            
          foreach ( $SESSION['cart'] as $id=>$value )
            {
          //echo "<a href=\"warenkorb.php?id=".$id."\">löschen</a>";

            
             
          echo '<tr>';
             echo     
          '<td>' $artikelnummer '</td>';
             echo     
          '<td>' $artikelname '</td>'
             echo     
          '<td>''löschen muss ich alleine schaffen' '</td>';   
            
          // echo     '<td align=right>' . $vk . '</td>';
             
          echo '</tr>';
                 
            } 





          Notice: Undefined variable: i in C:\Programme\xampp\htdocs\home\kundenbereich\cart.php on line 139

          Notice: Undefined index: in C:\Programme\xampp\htdocs\home\kundenbereich\cart.php on line 139

          Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Programme\xampp\htdocs\home\kundenbereich\cart.php on line 141
          You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
          Warning: Invalid argument supplied for foreach() in C:\Programme\xampp\htdocs\home\kundenbereich\cart.php on line 148

          Kommentar


          • #6
            Du hattest bisher eine for-Schleife, in der bei jedem Durchlauf eine SQL-Anfrage abgefeuert wurde. Diese lieferte jeweils nur einen einzigen Datensatz. Das würde zwar funktionieren (von anderen Fehlern mal abgesehen), ist aber der denkbar schlechteste Weg.

            Viel besser wäre, wenn du nur eine einzige SQL-Abfrage brauchst, die dir alle Datensätze in einem Resultset liefert. Über das Resultset iterierst du dann in einer Schleife.

            Ungefähr so:
            PHP-Code:
            $sql 'SELECT id, artikelnummer, artikelname FROM artikeltabelle 
                    WHERE id IN ('
            implode(','$_SESSION['cart']) .')';
            $result mysql_query($sql) or die(mysql_error());
            while (
            $row mysql_fetch_object($result)) {
                echo 
            '<a href="?delete_id='$row->id .'">'$row->artikelname .' löschen</a>';

            Zum eigentlichen Problem: Das Löschen.
            Geht ganz einfach, du mußt dir nur genau überlegen, was ablaufen soll. Du gibst Links aus (s.o.), die ein Skript aufrufen und ihm den zu löschenden Artikel (genauer dessen ID) als GET-Parameter übergeben. Dieses Skript sieht etwa so aus:
            PHP-Code:
            <?php
            session_start
            ();
            if (isset(
            $_GET['delete_id'])) {
                @unset(
            $_SESSION['cart'][intval($_GET['delete_id'])]);
            }
            ?>
            Die beiden Skripte kannst du natürlich auch kombinieren.
            PHP-Code:
            <?php
            session_start
            ();
            if (isset(
            $_GET['delete_id'])) {
                @unset(
            $_SESSION['cart'][intval($_GET['delete_id'])]);
            }

            $sql 'SELECT id, artikelnummer, artikelname FROM artikeltabelle WHERE id IN ('implode(','$_SESSION['cart']) .')';
            $result mysql_query($sql) or die(mysql_error());
            while (
            $row mysql_fetch_object($result)) {
                echo 
            '<a href="?delete_id='$row->id .'">'$row->artikelname .' löschen</a>';
            }
            ?>

            Kommentar


            • #7
              was ist bei der fehlermeldun nicht klar?
              $i existiert nicht, also existiert auch der index nicht.
              daraus folgt dass du in deinem query nach id='' suchst, was natürlich auch kein ergebnis bringt.
              gibt es kein ergebnis, dann kann auch mysql_fetch_array auf nichts zugreifen.
              mach statt for schleife besser eine einzige abfrage
              'SELECT ... WHERE id in('.implode(',',$_SESSION['cart']).')';
              EDIT:
              zu spät :-)
              Slava
              bituniverse.com

              Kommentar


              • #8
                dankeschön für die ausführliche Erklärung.
                ich knie mich nochmal rein.

                Gruss
                Pepsi

                Kommentar


                • #9
                  Parse error: syntax error, unexpected T_UNSET in C:\Programme\xampp\htdocs\home\kundenbereich\cart.php on line 139

                  ich habe die GET-$ im Link so wie siehe unten eingegeben
                  (geschützter Bereich per variable.php)

                  PHP-Code:
                  if (isset($_GET['delete_id'])) {
                     @unset(
                  $_SESSION['cart'][intval($_GET['delete_id'])]);
                  }
                  $sql 'SELECT id, artikelnummer, artikelname FROM artikeltabelle WHERE id IN ('implode(','$_SESSION['cart']) .')';
                  $result mysql_query($sql) or die(mysql_error());
                  while (
                  $row mysql_fetch_object($result)) {
                     
                  //echo '<a href="?delete_id='. $row->id .'">'. $row->artikelname .' löschen</a>';
                     
                  echo '<tr>';
                     echo     
                  '<td>' $row->id'</td>';
                     echo     
                  '<td>' $row->artikelnummer '</td>';
                     echo     
                  '<td>' $row->artikelname '</td>'
                     echo     
                  '<td>''<a href="?site=cart&delete_id='.$row->id.'">löschen</a></td>';   
                     echo 
                  '</tr>';
                     
                    } 
                  schöner (oder falscher) Nebeneffekt:
                  gegenüber der for-Schleife habe ich jetzt pro Klick keine gleichen Ausgaben mehr.

                  mit echo $_GET['delete_id']; bekomme ich meine id
                  (session_start läuft)


                  Gruss
                  Pepsi
                  Zuletzt geändert von pepsi; 06.10.2007, 10:45.

                  Kommentar


                  • #10
                    Was ist eigentlich alles drin in deinem Warenkorb, wenn du keine $id drin hast kannst du die Datenbank auch nicht nach $id abfragen...

                    und das @ kannst du da wegmachen
                    PHP-Code:
                    if (isset($_GET['delete_id'])) {
                       @unset(
                    $_SESSION['cart'][intval($_GET['delete_id'])]);

                    Kommentar


                    • #11
                      vielen Dank, aber id ist vorhanden:
                      echo $_SESSION['cart'];
                      array(2) { [0]=> string(4) "1753" [1]=> string(5) "37055" }

                      oder (neuer Korb)
                      echo var_dump ($row):
                      object(stdClass)#1 (3) { ["id"]=> string(4) "9717"
                      ["artikelnummer"]=> usw

                      und das @ vor unset stelle ich mir im Moment noch erforderlich vor, weil:
                      wenn noch nicht gelöscht wäre, würde eine Fehlermeldung kommen.


                      Nur beim Löschen tut sich leider nach wie vor nichts.

                      Gruss
                      Pepsi
                      Zuletzt geändert von pepsi; 06.10.2007, 10:48.

                      Kommentar


                      • #12
                        ich habe nur objekte mit ner while-Schleife gefetcht
                        und wollte es alleine schaffen aber......


                        ok, das @ habe ich vorerst mal weg und nach dem Link-Klick kommt auch
                        keine Fehlermeldung.

                        Wie hätte ich sonst nach der id im Warenkorb fragen müssen?
                        Denke ich falsch, dass sie vorhanden ist?

                        könnte ich noch einen Schubs bekommen, damit unset
                        sich auswirken kann?

                        Gruss
                        Pepsi

                        Kommentar

                        Lädt...
                        X