[PHP] Array kopieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
hugediggs
Beiträge: 171
Registriert: 26.07.2012 22:40:23

[PHP] Array kopieren

Beitrag von hugediggs » 16.01.2014 13:57:12

Ich habe ein Formular, bei dem sich jemand einen Artikel aussuchen kann. Der Artikel wird dann in POST['Warenkorb'] gespeichert.
Der Nutzer arbeitet mit einer Session, sodass ich gern alle bisherigen Artikel in die Variable _$SESSION['Warenkorb'] hätte.
Dazu lege ich ein Array Warenkorb an, kopiere bisher alle Elemente aus der _$SESSION['Warenkorb'] und hänge das aktuelle Element hinten dran. Klappt soweit auch, zumindest sind die Vorher/Nachher-Ausgaben korrekt. Leider versagt PHP seinen Dienst, wennn ich alle Artikel ausgeben möchte (oder auch nur ein einziges (siehe letzte for-schleife). Habt ihr irgendwelche Ideen?

Code: Alles auswählen


        if (isset($_POST['Warenkorb'])) {

            $Warenkorb = array();

            if (isset($_SESSION['Warenkorb'])){
            echo "Copy";

                for($i=0; $i < count($_SESSION['Warenkorb']); $i++) {
                    $Warenkorb[$i] = $_SESSION['Warenkorb'][$i];
                }

                $t = count($Warenkorb);
                echo 'Vorher'.$t.'<br>';
                $Warenkorb[] = $_SESSION['Warenkorb'];

                $_SESSION['Warenkorb'] = $Warenkorb;
                echo 'Nachher'.count( $_SESSION['Warenkorb']).'<br>';
                echo 'Gekaufte Artikel'.count($_SESSION['Warenkorb']).'<br>';
                
                for($i=0; $i < count($_SESSION['Warenkorb']); $i++) {
                    echo $_SESSION['Warenkorb'][$i];
                    echo "<br>";
                }
                echo '<a href="Kasse.php">Kasse</a>';

            }
            else {
                $_SESSION['Warenkorb'][0] = $_POST['Warenkorb'];
            }

            }

Benutzeravatar
4A4B
Beiträge: 926
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: [PHP] Array kopieren

Beitrag von 4A4B » 16.01.2014 14:12:37

Code: Alles auswählen

                $t = count($Warenkorb);
                echo 'Vorher'.$t.'<br>';
                $Warenkorb[] = $_SESSION['Warenkorb'];
Es würde hier vielleicht eher Sinn machen, wenn du $_POST['Warenkorb'] als Element hinzufügst?

Code: Alles auswählen

                $Warenkorb[] = $_POST['Warenkorb'];

Benutzeravatar
sys_op
Beiträge: 672
Registriert: 17.09.2007 19:10:47
Lizenz eigener Beiträge: GNU General Public License

Re: [PHP] Array kopieren

Beitrag von sys_op » 16.01.2014 14:32:23

Der Fehler liegt wohl hier:

Code: Alles auswählen

$_SESSION['Warenkorb'] = $Warenkorb; 
Durch die Kopiererei des Arrays und der Zuweisung in der Schleife weist du der $_SESSION['warenkorb'] jedes Mal ein immer tiefer werdendes Array zu.
Setz mal folgenden Code vor deinen und sieh dir an, was mit deiner $_SESSION passiert:

Code: Alles auswählen

echo "<br><pre>";
echo '$_POST<br>';
print_r($_POST);
echo "<br>";
echo '$_SESSION<br>';
print_r($_SESSION);
echo "</pre>";

Code: Alles auswählen

echo "<br><pre>";
echo '$_POST<br>';
print_r($_POST);
echo "<br>";
echo '$_SESSION<br>';
print_r($_SESSION);
echo "</pre>";

if (isset($_POST['Warenkorb']) AND ($_POST['Warenkorb'] != ''))
{
    if (isset($_SESSION['Warenkorb']))
    {
        echo "Copy";

        echo 'Vorher'.count($_SESSION['Warenkorb']).'<br>';
        $_SESSION['Warenkorb'][] = $_POST['Warenkorb'];

        echo 'Nachher'.count( $_SESSION['Warenkorb']).'<br>';
        echo 'Gekaufte Artikel'.count($_SESSION['Warenkorb']).'<br>';

        for($i=0; $i < count($_SESSION['Warenkorb']); $i++)
        {
            echo $_SESSION['Warenkorb'][$i];
            echo "<br>";
        }

        echo '<a href="Kasse.php">Kasse</a>';

    }
    else {
        $_SESSION['Warenkorb'][0] = $_POST['Warenkorb'];
    }

}
Weniger Code und sollte funktionieren.
gruss sys;-)

hugediggs
Beiträge: 171
Registriert: 26.07.2012 22:40:23

Re: [PHP] Array kopieren

Beitrag von hugediggs » 16.01.2014 15:10:48

Perfekt, danke sys. Deine Lösung klappte auf Anhieb *freu*

Antworten