2010-09-29 9 views
0

je suis en train de changer cela:champ de contrôle formmail

foreach $require (@Required) { 

     # If the required field is the email field, the syntax of the email # 
     # address if checked to make sure it passes a valid syntax.   # 
     if ($require eq 'email' && !&check_email($Config{$require})) { 
      push(@error,$require); 
     } 

////////////////////////////////////////////////////////////////////////////////// 

sub check_email { 
    # Initialize local email variable with input to subroutine.    # 
    $email = $_[0]; 

    # If the e-mail address contains:          # 
    if ($email =~ /(@.*@)|(\.\.)|(@\.)|(\[email protected])|(^\.)/ || 

     # the e-mail address contains an invalid syntax. Or, if the   # 
     # syntax does not match the following regular expression pattern  # 
     # it fails basic syntax verification.        # 

     $email !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z0-9]+)(\]?)$/) { 

     # Basic syntax requires: one or more characters before the @ sign, # 
     # followed by an optional '[', then any number of letters, numbers, # 
     # dashes or periods (valid domain/IP characters) ending in a period # 
     # and then 2 or 3 letters (for domain suffixes) or 1 to 3 numbers # 
     # (for IP addresses). An ending bracket is also allowed as it is # 
     # valid syntax to have an email address like: [email protected][255.255.255.0] # 

     # Return a false value, since the e-mail address did not pass valid # 
     # syntax.               # 
     return 0; 
    } 

    else { 

     # Return a true value, e-mail verification passed.     # 
     return 1; 
    } 
} 

dans ce:

foreach $require (@Required) { 


      if ($require eq 'fieldb' && !&check_fieldb($Config{$require})) { 
       push(@error,$require); 
      } 

    /////////////////////////////////////////////////////////////////////////////// 

    sub check_fieldb { 

     # If field b is under 20% of field a:          # 
     if ($fieldb <=($fielda/100)*20) { 

      # Return a false value, since field b is less than 20% of field a 
      return 0; 
     } 

     else { 

      # Return a true value, fieldb verification passed.     # 
      return 1; 
     } 
    } 

mais il ne fonctionne pas, retourne toujours 0. comment pourrais-je résoudre ce problème?

+3

! Horreur de codage! - variables globales!! Ouch ouch mes yeux! Ne pensez même pas à demander de l'aide jusqu'à ce que vous passiez '$ fielda' et' $ fieldb' comme paramètres pour votre fonction. –

+0

En outre, si vous avez accès au CPAN ... vous devriez utiliser Email :: Valid (http://search.cpan.org/~rjbs/Email-Valid-0.184/lib/Email/Valid.pm) pour vérifier pour –

+0

Je ne veux pas valider le champ email, juste un champ numérique. quant aux variables globales, ce n'est pas mon script - je ne connais pas du tout perl – Jamie

Répondre

0

Il est impossible de savoir ce qui ne va pas sans connaître les valeurs de $ fielda et $ fieldb. Mon diagnostic est que $fieldb est inférieur ou égal à ($fielda/100)*20

Vous passez une valeur à check_fieldb, mais vous ne l'utilisez jamais. Pourquoi le transmettez-vous? Comme un commentateur a noté que vous devriez transmettre à la fonction les valeurs que vous voulez vérifier. Est-ce que $ fielda et $ fieldb sont correctement initialisés avant que check_fieldb soit appelé?

Ne vous vouliez dire

foreach my $require (@Required){ 
    if($require eq 'fieldb' && !check_fieldb($value_of_fielda, $value_of_fieldb)){ 
     push(@error, $require); 
    } 
} 

# ... later ... 

sub check_fieldb($$){ 
    my $fielda = shift; 
    my $fieldb = shift; 

    return !($fieldb <=($fielda/100)*20); 
} 

peut-être?

+0

j'ai essayé à l'origine avec fielda comme 10 et fieldb comme 2, qui a renvoyé 0 comme il le devrait, mais si je change les nombres à quoi que ce soit d'autre ils retournent 0 quand il devrait retourner 1 s'il n'a pas de valeur 20% de fielda – Jamie

+0

Pourquoi le template dans le sous-programme check_fieldb? – ishnid

+0

fielda et fieldb sont deux champs entrés dans un formulaire, donc ils pourraient être n'importe quoi. le contrôle est supposé voir si fieldb est inférieur ou égal à 20% du champ a et s'il est sur la page d'erreur. Si ce n'est pas le champ valide – Jamie

Questions connexes