dedlfix: Merkwürdiges Problem ungelöst

Beitrag lesen

Hi!

Also ich werde jetzt nochmal explizit das Problem und mein Vorhaben schildern + die Lösung die jetzt funktioniert.

Und an welcher Stelle konkret läuft Wunsch und Wirklichkeit auseinander? Mach Kontrollausgaben mit var_dump() und benenne die Stellen, an denen vor der Operation noch der gewünschte Inhalt da war und hinterher nicht mehr.

//Hier kann ich per Post also aus dem Listenfeld Spalten hinzufügen
if(array_search($_POST['setcol'], $_SESSION['availcol'])) {

Wie auch im Handbuch zu array_search() deutlich hingewiesen wird, muss man zwischen 0 und false unterscheiden. Wenn in $_POST['setcol'] der erste Wert aus $_SESSION['availcol'] (der mit dem Key 0, wenn er noch nicht mit unset() entfernt wurde) enthalten ist, wird die Bedingung nicht wahr.

foreach($_SESSION['tablecolallpc'] AS $delcol){
  unset($_SESSION['availcol'][array_search($delcol,$_SESSION['availcol'])]);

Auch hier ist wieder eine Stelle, die false und 0 nicht unterscheidet. Das ist vielleicht nicht relevant, wenn $delcol garantiert in $_SESSION['availcol'] vorkommt. Aber das sieht man nicht durch einen Blick auf den Code, ohne sich den genauen Ablauf zu Gemüte zu führen. Besser ist es, hier durch Code Klarheit zu schaffen. (Siehe dein "false !== $key = array_search()"-Konstrukt.)

//Sicherheitshalber werden hier noch doppelte Einträge gelöscht

Sicherheit? Warum kann das passieren? Ist das unumgänglich oder durch geschicktere Programmlogik vermeidbar? Fragen, die du nicht unbedingt mir beantworten musst, aber die du dir stellen solltest. Wenn du einen plausiblen Grund findest, gib den an anstatt nichtssagend von sicherheitshalber zu reden. Da weißt du dann später beim Lesen deines eigenen Codes besser, warum das Konstrukt existiert.

Lo!