in reply to Registration Error

This is an update of the changes I've made based on your suggestions. Still no change in output however :(

#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); use CGI; use POSIX; require SDBM_File; # # Define our constants # my $sendmail = "/usr/lib/sendmail"; my $adminmail = "test\@test.com"; my($verified, $unverified, $ID); my @chars = ( "A" .. "Z", "a" .. "z", 0 .. 9, qw(! @ $ % ^ & * ) ); # # Define our dynamic input # my $query = CGI->new; print $query->header; my %form = %{$query->Vars}; my $accountID = $query->url_param('accountID'); my $accountAD = $query->url_param('accountAD'); my (%dbm1, %dbm2); my $dbm1 = "unverified.dbm"; my $dbm2 = "verified.dbm"; tie (%dbm1, 'SDBM_File', $dbm1, O_CREAT|O_RDWR, 0644) || die "Died tying database\nReason: $!\n"; tie (%dbm2, 'SDBM_File', $dbm2, O_CREAT|O_RDWR, 0644) || die "Died tying database\nReason: $!\n"; # # If form was completed generate an ID, store them to database, email +user # if ($form{'usermail'}) { &generate_id; &email; print "An email has been sent to $form{'usermail'} for verification. +<br><br>\n"; $dbm1{$form{'usermail'}} = "$accountID"; } # # Or if url param's are present and checked add them to other DB and r +emove them from $unverified # else { my $unverified = $accountID; my $verified = "$accountAD"; if ($dbm1{"$accountAD"} && $dbm1{"$accountID"} =~ /^$accountAD$/) { $dbm2{"$verified"} = "$accountAD"; print "You have been added to the mailing list successfully!\n"; } else { print "Registration failed!<br><br>\n"; print "\$accountID: $accountID .<br>\n"; print "\$accountAD: $accountAD .<br>\n"; } } sub email { $accountAD = "$form{'usermail'}"; 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/revised.pl?accountI +D=$accountID&accountAD=$accountAD\n"; close (MAIL); } sub generate_id { do { $accountID = join '', map { $chars[ rand @chars ] } 1..17; } while grep {$_ eq $ID} my @used; print $ID; # my @unverified_emails=($form{'usermail'}, $accountID); # $unverified = join "::",@unverified_emails; #$dbm{"$unverified"}= join "::",@unverified_emails; #foreach my $mail (split /::/, $dbm{'notverified'}) { # print "$mail is not verified!\n"; #} } untie(%dbm1); untie(%dbm2);


"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

Replies are listed 'Best First'.
Re: Re: Registration Error
by poj (Abbot) on Mar 07, 2003 at 09:21 UTC
    I think the problem is here
    # if ($dbm1{"$accountAD"} # && $dbm1{"$accountID"} =~ /^$accountAD$/) { # key values reversed if ($dbm1{"$accountAD"} && $dbm1{"$accountAD"} =~ /^$accountID$/) { # corrected
    If it helps, here's code I used to debug your script, paste it in after the ties
    # debug sub showdata { my ($head,$data) = @_; print qq(<table border=1><tr><td> key </td><td> $head </td></tr>\n); foreach (sort keys %$data){ print qq(<tr><td> $_ </td><td> $$data{$_} </td></tr>\n); } print q(</table>); } showdata("Unverified",\%dbm1); showdata("Verified",\%dbm2);
    poj
    update ; Another way to fix it is to change these round
    # $dbm1{$form{'usermail'}} = "$accountID"; $dbm1{"$accountID"} = $form{'usermail'};
      I've tried all the suggestions you proposed, Poj, but the results aren't changing. I actually have been doing database prints to verify things are actually stored so they can be compared to. Things are storing as I expected them to so the only possible problem is with the verification which we concluded earlier.

      Maybe what's confusing you is what's going on so I'll try to explain that small section.

      AccountID is their generated $ID number which is a 17 character string. AccountAD is their email address collected from the form. Both of these are stored in the DB1 just fine. I'm trying to verify the url_params (accountID=xxx&accountAD=xxx) to what's being stored so I can add them to DB2.

      That's what I am after anyways, is this what the code is actually doing or am I confusing that entire process? Thanks so much. sulfericacid

      "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
        When you say 'all the suggestions', what did you mean ? Just the update I posted was all you had to do, this makes the generated ID the key and the accountAD the value. If you do that the test should be
        if ($dbm1{"$accountAD"} # you have an accountAD to test && $dbm1{"$accountID"} =~ /^$accountAD$/) # ID is key AD is value
        poj