Получите ввод из формы HTML в другом документе, используя perl и проверив ввод

У меня есть два отдельных документа perl:

  1. mailcheck.pl
  2. loggingpage.pl

Mailcheck распечатывает форму в html, где пользователь может ввести его / ее электронную почту и проверяет, является ли вход действительным адресом электронной почты. Затем он вызывает loggingpage.pl, который сохраняет сообщение электронной почты в файле журнала и выдает информацию пользователю, если адрес электронной почты был успешно сохранен.

Это два документа:

  1. mailcheck.pl:

    #!/usr/bin/perl use strict; use warnings; print "Content-type: text/html\n\n"; print <<HTML;   Mailcheck   
    Email:
    function emailcheck() { var emailoutline = /^[a-z0-9._%+-]+\@[a-z0-9.-]+\.[az]{2,4}\$\/\; var x = document.ec.email.value; if (emailoutline.test(x)) { open("./loggingpage.pl); } else { alert("Dies ist keine richtige eMailadresse!"); } } HTML exit;
  2. loggingpage.pl:

     #!/usr/bin/perl use strict; use warnings; use CGI qw(:standart); #reads the input of the form called "email" $emailinput = param('email'); #saves the email in the logfile open(my $ml, ">", "./../logs/maillog.txt") or die "Fehlermeldung"; print $ml scalar(localtime()), " Email: ", $emailinput; close($ml); #gives out information about the saving process if (...) #saving the email in the logfile succeeded { print <<HTML;     alert("Your input has been saved under the following email: " + $emailinput);    HTML exit; } else #gives out warning if information was not stored right { print <<HTML;     alert("Error while saving your input.");    HTML exit; } 

(Я знаю, что в блоках <<HTML (..) HTML не может быть пробелов перед ними – в моем фактическом документе я правильно отредактировал блок)

Мои вопросы сейчас:

а. Как я могу написать if-условия, когда хочу узнать, сохранено ли электронное письмо в файле журнала?

б. Я не совсем уверен, что часть $emailinput = param('email'); работает с тех пор, как я не смог его попробовать, правильно ли получить ввод формы в mailcheck.pl или мне нужно написать код по-другому?

Для вас информация: – mailcheck.pl работает правильно. – сохранение электронной почты в лог-файле также отлично работает (я попытался определить переменную как электронную почту и сохранить ее в файле журнала вместе с текущей датой …)

Поэтому я решил вопрос а) вроде этого (кажется, работает):

  open(my $ml, ">", "./../logs/maillog.txt") or die "Saving Error"; print $ml scalar(localtime()), " Email: ", $emailinput; close($ml); #print "\nYour eMail was successfully logged!", $emailinput, "\n\n"; print "Content-type: text/html\n\n"; print <  Mailcheck2   

Es wurde die folgende eMail erfolgreich gelogged:

HTML exit;

Теперь мне нужна помощь только с вопросом b).

После выполнения проверки отправьте форму, используя:

 document.ec.submit(); // 'ec' is the name of your form 

Это отправит данные формы на страницу, определенную в атрибуте действия вашей формы.

Еще лучше использовать атрибут onsubmit тега формы для выполнения проверки:

 

Затем измените метод проверки, чтобы вернуть false при ошибке:

 function emailcheck() { var emailoutline = /^[a-z0-9._%+-]+\@[a-z0-9.-]+\.[az]{2,4}\$\/\; var x = document.ec.email.value; if (!emailoutline.test(x)) { alert("Dies ist keine richtige eMailadresse!"); return false; } } 

Не полагайтесь на JavaScript таким образом. JS является полезной дополнительной проверкой работоспособности для вашей формы, но это не должно быть единственным и основным средством проверки ваших данных.

Вместо этого поместите все свои данные в одну страницу и для первоначальной разработки удалите все JS. Сделайте свою форму POST-запросом и определите, когда форма отправлена, чтобы определить, нужно ли выполнять проверку. Вам нужно будет использовать регулярное выражение JS validation в вашем perl вместо этого, хотя в конечном итоге вы должны перейти на Email::Valid .

После того, как ваша форма и пост работают без JavaScript, вы можете добавить метод onSubmit, если хотите выполнить некоторую проверку клиента, чтобы дублировать то, что вы сделали в perl.