В моем скрипте Perl CGI как я могу получить доступ к отмеченным значениям в группе флажков? - PullRequest
1 голос
/ 05 октября 2011

У меня есть форма с несколькими методами ввода.Я передаю эти данные в Perl-скрипт для обработки распечатанного текста на основе ввода данных.У меня проблема со значениями группы флажков.(все флажки с одинаковым именем)

<td>Profiles: </td>
 <td><input type=\"checkbox\" value=\"oneconnect\" name=\profile[]\">OneConnect <br />
 <input type=\"checkbox\" value=\"http\" name=\profile[]\">HTTP <br />
 <input type=\"checkbox\" value=\"xforwardedfor\" name=\profile[]\">Xforwarded-for</td>
 </tr>
 </table>

Действие отправляет эти данные в сценарий perl для обработки.

read (STDIN, $FormData, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $FormData);
print Dumper($FormData);

foreach my $pair (@pairs) {
# Separate the name and value:
($name, $value) = split(/=/, $pair);
# Convert + signs to spaces:
$value =~ tr/+/ /;
# Convert hex pairs (%HH) to ASCII characters:
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# Store values in a hash called %FORM:
$FORM{$name} = $value;
}

Затем я могу распечатать большую часть данных с помощью:

print "$FORM{'vsip1'}  $FORM{'vsport1'} <br />\n";

Однако я не могу получить доступ к имени «профиль» из флажков с той же командой печати.Я вижу значения «профиля», когда «сбрасываю» данные.вывод на вывод дампа печати (&% 5Cprofile% 5B0% 5D% 22 = oneconnect &% 5Cprofile% 5B1% 5D% 22 = http & SubmitForm) Это хэш хэша?и как я могу получить доступ к этим значениям в perl.

Спасибо за любые предложения, которые вы можете предоставить.

Ответы [ 3 ]

4 голосов
/ 05 октября 2011

Вы должны использовать CGI или CGI :: Simple , чтобы вам не приходилось беспокоиться о таких вопросах.

my @profile = $cgi->param('profile');

См. param.

0 голосов
/ 18 августа 2018

Похоже, что приведенный выше код был написан для тестирования из командной строки.Если вы создадите и экспортируете переменную окружения с именем CONTENT_LENGTH и назначите ей числовое значение, по крайней мере, до тех пор, пока строка проверяемых строк «имя-значение» будет сбрасывать их как строку (используя Dumper), и, если именасоответствуют ключам в $ FORM {'vsip1'}, $ FORM {'vsport1'} и т. д., они должны печатать их, если они являются текстовыми полями, или каким-либо другим HTML-виджетом, который всегда возвращает значение.Если вы включаете элемент, представляющий флажок в командной строке, он также печатает его, если он содержит значение.Однако, если вы интерпретируете строку запроса из формы HTML в обработчике CGI perl, она будет включать пару «имя-значение» флажка, если флажок установлен.В противном случае он не возвращает ни одной из этой пары имя-значение.Я проверил это на короткой странице HTML с помощью сценария обработки CGI, и это было результатом.

0 голосов
/ 06 октября 2011

Ничего себе. Это выглядит как много лишней работы. Вы не используете веб-сервер?

пакет? Взгляните на uri_escape .

Как уже упоминалось выше, вот фрагмент кода с использованием CGI:

<html>
  <form <form name='formName' method='POST' action='someperlscript.pl'>
  <tr><td>
     <input type=checkbox name='XMatch' $xMatch> Exact Match
  </td></tr>
  </form>
</html>

use CGI;

my $q = new CGI;

$xMatch = $q->param( "XMatch" );

$xMatch = ( $xMatch eq "on" ? "checked" : "" );

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...