Maui Muc: Cooki

Hallo,

ich habe folgendes Problem: ich habe ein sehr einfaches Umfragesript gefunden, das eigentlich genau meinen Vorstellungen entspricht.

Beim abgeben  einer Stimme setzt das Programm ein Cooki, so dass keine erneute Stimmabgegeben möglich ist (solange man nicht die Cookis löscht). Da ich nicht nur eine einzige Umfrage durchführen will sondern jeweils eine pro Quartal, möchte ich das Programm sie modifizieren, dass durch eine einfache Änderung am Code (von mir pro Quartal) das bisherige Cooki ignoriert wird und ein neues erstellt.

Leider habe ich nicht den geringsten Dunst von Perl, wie kann ich das bewerkstelligen?

Ich danke eucht schon im Voraus recht herzlich für die Hilfe

Gruß aus München

Maui Muc

Hier der Code (stammt von http://www.perl-seite.de/):

.....

#==============================================

Cookie vom Browser abfragen

#==============================================

if ($with_cookies =~ /^on$/i)
{

# Erlaubt Browser Cookies ?

if ($cgi->param("cookietest"))
 {
  if ($ENV{'HTTP_COOKIE'} !~ /Cookie=Test/)
  {
   error("$ENV{'HTTP_COOKIE'}<br>Ihr Browser unterstützt keine Cookies. Bitte Cookies im Browser einschalten.<br><br><a href="$cgipath">Zurück zur Umfrage</a><br>");
  }
 }
 elsif ($ENV{'HTTP_COOKIE'} !~ /Cookie=Test/ && $ENV{'HTTP_COOKIE'} !~ /umfrage=voted/)
 {
  my $cookiecheck = $cgi->cookie( -name => 'Cookie',
             -value => 'Test');
  print $cgi->redirect(-uri=>"$ENV{'SCRIPT_NAME'}?cookietest=1", -cookie=>[$cookiecheck]);
  exit;
 }

if ($ENV{'HTTP_COOKIE'} =~ /umfrage=voted/)
 {
  $already_voted = 1;
  $action = "Sie haben bereits abgestimmt.";
 }
}

if (!$already_voted || $with_cookies !~ /^on$/i)
{
 if (! $vote)
        {
                print_formular();
                exit(0);
        }

# ist stimme gueltig ?
        foreach(@valid_vote)
        {
                if ($_ eq $vote)
                {
                        $ok = 1;
                }
        }
        error ("Antwort ist nicht gültig") if (!$ok);

if ($with_cookies =~ /^on$/i)
 {
  #===========================================================
  # Cookie an Browser senden
  #===========================================================

my $c = $cgi->cookie (
     -name   =>      "$cgipath umfrage",
                                 -value  =>      'voted',
                                 -expires => '+12M',
                                 -path   =>      "$cgipath",
                                 );

print "Set-Cookie: $c\n";
 }
        # stimme zaehlen
        count($vote);
        $action = "Vielen Dank. Ihre Stimme wurde gezählt.";
 show_result();

}
else
{
 show_result();
}

sub count
{

....

  1. my $cookiecheck = $cgi->cookie( -name => 'Cookie',
                 -value => 'Test');

    Hier wird dem cookie ein Name und ein Wert zugewiesen, da musst du deine gewünschten Werte einbauen.

    Struppi.

    1. Hallo Struppi,

      habe gerade ein wenig rumprobiert, da tut sich leider gar nichts. Woran macht das Script denn fest ob ein entsprechender Cookie gespeichert ist oder nicht?

      mfg

      Maui Muc

      1. Hallo Maui Muc

        Hallo Struppi,

        habe gerade ein wenig rumprobiert, da tut sich leider gar nichts. Woran macht das Script denn fest ob ein entsprechender Cookie gespeichert ist oder nicht?

        keine Ahnung ich seh aber gerade eine andere Zeile:

        my $c = $cgi->cookie (
             -name   =>      "$cgipath umfrage",
                                         -value  =>      'voted',
                                         -expires => '+12M',
                                         -path   =>      "$cgipath",
                                         );

        Das ist der Cookie.

        und hier wird es getestet:

        if ($ENV{'HTTP_COOKIE'} =~ /umfrage=voted/)

        Ist aber nicht sauber. den einerseits verwendet das Skript die Funktion CGI::cookie zum setzten, aber nicht zum lesen. Besser wäre es ein eindeutig benannten Cookie zu setzten, je nach Umfrage und diesem dann z.b. den Wert 'voted' geben.

        Struppi.

        1. Hi Struppi,

          jetzt funktioniert es, vielen herzlichen dank, allein währe ich total aufgeschissen gewesen, da ich nicht die geringste Ahnung von Perl habe.

          Was meinst du mit nicht ganz sauber? was empfiehlst du mir, sollte ich doch ein anderes Script verwenden? Mir gefällt es so gut da es so schön einfach ist, und jetzt auch genau das macht was ich will.

          mfg

          Maui Muc

          1. Was meinst du mit nicht ganz sauber? was empfiehlst du mir, sollte ich doch ein anderes Script verwenden? Mir gefällt es so gut da es so schön einfach ist, und jetzt auch genau das macht was ich will.

            Naja, wenn es jetzt für deine Zwecke funktioniert ist es ja gut. Es gibt sicher wesentlich schlechtere Skripte. Lediglich die Art wie das Skript die Werte des cookies prüft und an den Browser sendet könnte man verbessern, bzw. so ändern, dass das Skript flexibler wäre.

            Struppi.

            1. ok das nehme ich aber in kauf, dafür funktioniert es so wie ich will *g*.

              Vielne Dank noch mal

              cu

              Maui Muc