Schlüssel aus einem Array entfernen


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

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:

king-ich

Mitglied
PHP:
if(isset($_GET['delete'])){
   // und jetzt nur das Element aus dem Array löschen:
   $del_id= $_GET['delete'];
   unset($warenkorb[$del_id]);
}
 

Yaslaw

n/a
Moderator
Du musst vor dem unset den Array aus der Session lesen und danach wieder in die Session schreiben.
 

king-ich

Mitglied
Kannst Du mir dabei helfen?

PHP:
session_start();
if(isset($_SESSION['warenkorb'])){
$warenkorb = $_SESSION['warenkorb'];
}
if(isset($_GET['delete'])){
   // und jetzt nur das Element aus dem Array löschen:
   $del_id= $_GET['delete'];
   unset($warenkorb[$del_id]);
}
 

king-ich

Mitglied
Ich glaube ich hab's :
PHP:
session_start();
if(isset($_SESSION['warenkorb'])){
$warenkorb = $_SESSION['warenkorb'];
 
}
if(isset($_GET['delete'])){
   // und jetzt nur das Element aus dem Array löschen:
   $del_id= $_GET['delete'];
   unset($warenkorb[$del_id]);
$_SESSION['warenkorb'] = $warenkorb;
}
 

Yaslaw

n/a
Moderator
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;
}
 

king-ich

Mitglied
Jetzt habe ich nur noch ein (kleines) anderes Problem:

[array(3) { [5]=> array(3) { ["Name"]=> string(32) "Coca Cola 0.33l Dose inkl. Pfand" ["Preis"]=> string(1) "1" ["Anzahl"]=> string(1) "1" } [6]=> array(3) { ["Name"]=> string(31) "MezzoMix 0.33l Dose inkl. Pfand" ["Preis"]=> string(1) "1" ["Anzahl"]=> string(1) "1" } [7]=> array(3) { ["Name"]=> string(28) "Pepsi 0.33l Dose inkl. Pfand" ["Preis"]=> string(1) "1" ["Anzahl"]=> string(1) "1" } } ][/ICODE]

Wie ändere ich die Anzahl von z.B. 'MezzoMix' ?

Danke im Voraus :)

(Ich weiß, dass das mit str_replace geht. Werde aber aus dem Manual nicht schlau, weil da str_replace nur auf ein Array Inhalt angewendet wird...) :confused:
 

EuroCent

Erfahrenes Mitglied
Jetzt habe ich nur noch ein (kleines) anderes Problem:

[array(3) { [5]=> array(3) { ["Name"]=> string(32) "Coca Cola 0.33l Dose inkl. Pfand" ["Preis"]=> string(1) "1" ["Anzahl"]=> string(1) "1" } [6]=> array(3) { ["Name"]=> string(31) "MezzoMix 0.33l Dose inkl. Pfand" ["Preis"]=> string(1) "1" ["Anzahl"]=> string(1) "1" } [7]=> array(3) { ["Name"]=> string(28) "Pepsi 0.33l Dose inkl. Pfand" ["Preis"]=> string(1) "1" ["Anzahl"]=> string(1) "1" } } ][/ICODE]

Wie ändere ich die Anzahl von z.B. 'MezzoMix' ?

Danke im Voraus :)

(Ich weiß, dass das mit str_replace geht. Werde aber aus dem Manual nicht schlau, weil da str_replace nur auf ein Array Inhalt angewendet wird...) :confused:
Welche Zahl?!
Meinst Du die 0.33?! Falls ja musst Du den String durchsuchen und dann entsprechend ersetzen :)
 

king-ich

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

}
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…