Schlüssel aus einem Array entfernen

king-ich

Mitglied
Hallo.
Folgender Code Füllt das Array:
PHP:
$artikel = $_POST['artikel'];
$name = $_POST['name'];
$preis = $_POST['preis'];
$anzahl = $_POST['anzahl'];

// Session-Warenkorb in Variable schreiben
$warenkorb = $_SESSION["warenkorb"];

// Neuen Artikel in eigenen Array schreiben
$neuer_artikel = array ('Name' => $name,
                        'Preis' => $preis,
                        'Anzahl' => $anzahl);

// neuen Artikel an Warenkorb-Array anhängen, der Warenkorb enthält pro Artikel einen Array
$warenkorb[$artikel] = $neuer_artikel;

// geänderten Warenkorb wieder in Session speichern
$_SESSION["warenkorb"] = $warenkorb;

$warenkorb = $_SESSION["warenkorb"];

Und mit diesem Code:

PHP:
<div id="warenkorb">

        <table>
            <tr style="height:30px">
                <th>Name</th>
                <th>Stückreis</th>
                <th>Menge</th>
                <th>Aktion</th>
            </tr>
            <?php foreach($warenkorb as $id => $artikel){ ?>
            <tr style="height:11px"></tr>
            <tr>
                <td><?php echo $artikel['Name']; ?></td>
                <td><?php echo $artikel['Preis']; ?></td>
                <td><?php echo $artikel['Anzahl']; ?></td>
                <td><a href="?delete=<?php echo $id; ?>">entfernen</a></td>
            </tr><?php } ?>
        </table>
    </div>
Will Ich das Array ausgeben und ggf. einzelne Schlüssel entfernen.
Wenn ich auf 'entfernen klicke, verschwindet ein Element, und ein bereits gelöschter 'Artikel' taucht wieder in der Tabelle auf. Als wenn Kobolde Ihren Spaß dabei haben...


Bin für jede Hilfe Dankbar. :oops:

Hier ist die Quelle aus der ich mein Nutzen ziehe: Session + Array = Warenkorb? von Chris, 28.07.2002 01:26 - SELF-Forum - SELFHTML Forum
 
Zuletzt bearbeitet:
Lösung
Jetzt solltest du noch einige Problemfälle abfangen
PHP:
session_start();
if(isset($_SESSION['warenkorb'])){
    $warenkorb = $_SESSION['warenkorb'];
}else{
    //Falls kein Warenkorb vorhanden ist einen anlegen
    $warenkorb = array();
}
if(isset($_GET['delete'])){
       // und jetzt nur das Element aus dem Array löschen:
       $del_id= $_GET['delete'];

       //Nur löschen, wenn die id im Warenkorb gefunden wurde
       if(array_key_exists($del_id, $warenkorb)) unset($warenkorb[$del_id]);
    $_SESSION['warenkorb'] = $warenkorb;
}
Lösung:
PHP:
<form method="post" action="action.php">
<?php foreach($warenkorb as $id => $artikel): ?> 
<input type="number" name="anzahl[<?php echo (int) $id ?>]" min="0" max="100" step="1" value="<?php echo (int) $artikel['Anzahl'] ?>" />
<?php endforeach; ?>

<input type="submit" name="change" value="Aktualisieren" class="aktualisieren">
</form>

action.php:
PHP:
<?php
session_start();
if(isset($_POST['change'])){
   $warenkorb = $_SESSION["warenkorb"];
   $anzahl = $_POST['anzahl'];

   foreach ($anzahl as $id => $num) {
      if(array_key_exists($id, $warenkorb)) {
         $warenkorb[$id]['Anzahl'] = $num;
      }
   }

$_SESSION['warenkorb'] = $warenkorb;

}
 
Zurück