Still working on the same script but I need a little more help. The problems I'm having don't seem to be fatal anymore, guess that's a step into the right direction, right?

One of the problems is my $dbm{'$unverified'} is overwriting itself, just like the problem in my last SOPW but with a different variable. It only keeps the last value written to it.

The other problem is probably more complex but the error checking isn't functional. At the bottom of the script you will see I am trying to check 2 things: 1) that both url_params exist 2) compare these to the $dbm{'$unverified'} to see if they match. (the testing is at the bottom of the script)

#!/usr/bin/perl -w use strict; use CGI; use POSIX; my $query = CGI->new; my %form = %{$query->Vars}; require SDBM_File; my %dbm; my $dbm_file = "evs.dbm"; my $accountID = $query->url_param('accountID'); my $accountAD = $query->url_param('accountAD'); tie %dbm, 'SDBM_File', $dbm_file, O_CREAT|O_RDWR, 0644; use CGI qw/:standard/; print header, start_html('EVS'), start_form, "What's your email address? ",textfield('usermail'),p, submit, end_form, hr; chomp $form{"usermail"}; my $chars; my $adminmail = "admin\@test.com"; my $sendmail = "/usr/lib/sendmail"; my @chars = ( "A" .. "Z", "a" .. "z", 0 .. 9, qw(! @ $ % ^ & * ) ); my $ID; ### randomize characters do { $ID = join '', map { $chars[ rand @chars ] } 1..17; } while grep {$_ eq $ID} my @used; ### If USERMAIL exists add information to notverified DBM if ($form{'usermail'}) { my @unverified_emails=($form{'usermail'}, $ID); $dbm{'$notverified'}= join "::",@unverified_emails; #foreach my $mail (split /::/, $dbm{'notverified'}) { # print "$mail is not verified!\n"; #} print "An email has been sent to $form{'usermail'}. Please ch +eck it to verify your information.\n"; ### email the users my $accountAD = "$form{'usermail'}"; my $accountID = $ID; open (MAIL, "|$sendmail -t") or die "Cannot access mail"; print MAIL "To: $form{'usermail'}\n"; print MAIL "From: $adminmail\n"; print MAIL "Subject: Verify your Email Address\n\n"; print MAIL "http://sulfericacid.perlmonk.org/evs/evs.pl?accountID=$a +ccountID&accountAD=$accountAD\n"; close (MAIL); } ### If url_param() exists if ($accountID && $accountAD) { &params; } ### If url_param() exists check to see if it exists in DBM sub params { if ($accountID && ($accountAD ne '') && (exists $dbm{'$notverified'})) + { $dbm{'$verified'} = $accountAD; print "Your address has been indexed!\n"; ### test database prints foreach (sort keys(%dbm)) { print "$_ => $dbm{$_}\n"; } } else { print "Your email address and registration did not match. Please ch +eck your email again.\n"; } }


"Age is nothing more than an inaccurate number bestowed upon us at birth as just another means for others to judge and classify us"

sulfericacid

In reply to Database still overwriting itself by sulfericacid

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.