Maik Görgens: Problem bei Checkboxen in Verbindung mit cgi.pm

Hallo,

ich hab da ein mittelschweres Problem:

wenn ich 2 Checkboxen habe

<input type=checkbox name=c1 value=eins>
<input type=checkbox name=c2 value=zwei>

und nur die zweite checkbox aktiviere dann ist $eins = "zwei" und $zwei = "", wenn ich die beiden wie folgt einlese:

($eins, $zwei) = (param(c1), param(c2));

Habt ihr ähnliche Probleme mit cgi.pm, wie habt ihr das gelöst?

Danke Maik

  1. Moin,

    <input type=checkbox name=c1 value=eins>
    <input type=checkbox name=c2 value=zwei>

    ($eins, $zwei) = (param(c1), param(c2));

    zuerstmal: du verwendest kein use strict; und kein -w,
    das haette dich darauf aufmerksam gemacht, dass es
    param('c1') und analog param('c2') heissen muss.

    Dein Problem hat allerdings mit CGI.pm nichts zu tun, sondern beruht lediglich auf einem Denkfehler.
    Wenn eine Checkbox nicht angeklickt ist, wird sie auch nicht mit den Formulardaten mitgeschickt - weder ihr Name noch irgendwas anderes.
    das heisst, wenn c2 aktiviert und c1 nicht, ist param('c1') undef bzw. eine leere Liste. Das hat den Effekt, dass das Element ignoriert wird, also alle nachfolgenden Elemente nachruecken.

    Abhilfe: sorge dafuer, dass der Fall "nicht definiert" nicht eintritt, beispielsweise so:

    my ($eins, $zwei) = (param('c1') || '', param('c2') || '');

    btw: das Modul heisst tatsaechlich CGI.pm (das Universum ist casesensitive.. (C) by Cheatah ;))

    Viele Gruesse,

    n.d.p.

    1. Moin,

      zuerstmal: du verwendest kein use strict; und kein -w,

      Werd ich mir merken.

      Abhilfe: sorge dafuer, dass der Fall "nicht definiert" nicht eintritt, beispielsweise so:
      my ($eins, $zwei) = (param('c1') || '', param('c2') || '');

      Damit funktioniert es.

      Danke!!!