Perl CGI не может печатать элементы из массива флажков php

1

У меня была форма 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"? Спасибо вам за помощь!

  • 0
    Вы видите что-то вроде ARRAY(0x27967ac) ? Это отличается от Array и означает, что у вас есть ссылка на массив, которая просто нуждается в разыменовании.
Теги:
cgi

2 ответа

2

Конечный [] в имени переменной является PHP-ism - он не является стандартным и не обрабатывается специально модулем Perl CGI (или чем-то другим, кроме PHP). Если можно, удалите его из формы. Если нет, вы должны иметь возможность получить параметр из Perl, включив в него скобки:

my @profiles = $q->param("v1-profile[]");
  • 0
    Спасибо за ответ. Когда я удаляю «[]» из формы PHP, скрипт CGI работает. Однако, если вы установите несколько флажков, я вижу только 1 элемент, отправленный в сценарий CGI. Мне нужно несколько флажков. Я также попытался добавить «[]» к имени параметра, как вы предложили, но это не работает. (Я даже не вижу выходного слова «Массив» в то время. Опять же, спасибо за предложение.
  • 0
    @ dars33 - и этот, и ваш исходный код, похоже, получают результат в контексте списка, поэтому он должен дать вам значения всех отмеченных флажков.
1

Не знаете, в чем проблема. Кажется, это отлично работает для меня. Здесь небольшая испытательная установка, которую я построил.

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. Это должно произойти.

Итак, вопрос в том, как это отличается от вашей настройки?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню