У меня была форма HTML, которая передавала значения флажка в Perl CGI-скрипт в виде массива. Однако, поскольку сайт был перестроен с использованием в основном PHP, массив checkbox обрабатывается по-разному. У меня есть функция PHP, которая возвращает форму. Это выглядит примерно так:
<td>Profiles: </td>
<td><input type=\"checkbox\" value=\"oneconnect\" name=\"v1-profile[]\">OneConnect <br />
<input type=\"checkbox\" value=\"http\" name=\"v1-profile[]\">HTTP <br />
<input type=\"checkbox\" value=\"xforwardedfor\" name=\"v1-profile[]\">Xforwarded-for</td>
</tr>
Затем я отправляю это на скрипт Perl CGI
use CGI qw(:standard);
my $q = new CGI;
my @profiles1 = $q->param("v1-profile");
Когда я пытаюсь напечатать элементы массива, я вижу только выход "Массив".
foreach my $r (@profiles1) {
print "$r\n";
}
Я также пробовал несколько вещей, которые не сработали.
foreach my $r (@profiles1) {
foreach my $v (@$r) {
print "$v\n";
}
}
Как получить доступ к элементам массива "@profiles1"? Спасибо вам за помощь!
Конечный []
в имени переменной является PHP-ism - он не является стандартным и не обрабатывается специально модулем Perl CGI (или чем-то другим, кроме PHP). Если можно, удалите его из формы. Если нет, вы должны иметь возможность получить параметр из Perl, включив в него скобки:
my @profiles = $q->param("v1-profile[]");
Не знаете, в чем проблема. Кажется, это отлично работает для меня. Здесь небольшая испытательная установка, которую я построил.
test.html:
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>Test</h1>
<form action="/cgi-bin/form">
<table>
<tr>
<td>Profiles: </td>
<td><input type="checkbox" value="oneconnect" name="v1-profile[]">OneConnect <br />
<input type="checkbox" value="http" name="v1-profile[]">HTTP <br />
<input type="checkbox" value="xforwardedfor" name="v1-profile[]">Xforwarded-for<br />
<input type="submit"></td>
</tr>
</table>
</form>
</body>
</html>
CGI-BIN/форма:
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
my $q = CGI->new;
print $q->header(-type => 'text/plain');
my @profiles = $q->param('v1-profile[]');
foreach (@profiles) {
print "$_\n";
}
И я точно вижу, чего я ожидаю. Каждый флажок, который я проверяю, отображается на выходе.
Одно дело проверить. Как выглядит ваш URL-адрес после отправки формы? Моя выглядит так (с проверенными двумя флажками).
http://localhost/cgi-bin/form?v1-profile%5B%5D=oneconnect&v1-profile%5B%5D=xforwardedfor
Обратите внимание, что квадратные скобки во входных именах были закодированы в URL. Это должно произойти.
Итак, вопрос в том, как это отличается от вашей настройки?
ARRAY(0x27967ac)
? Это отличается отArray
и означает, что у вас есть ссылка на массив, которая просто нуждается в разыменовании.