2012-04-12 2 views
1

Я пытаюсь установить параметр, который будет передан на следующую страницу с помощью функции param.Невозможно установить параметр с помощью Perl CGI-> param()

Я пытался

param(-name=>'foo',-value=>'the value'); 
param(-name=>'fooz',-values=>['an','array','of','values']); 
param('foo3', 1); 

Мой скрипт перенаправляет на другой, который проверяет наличие всех (парам), но не повезло. CGI manpage подразумевает, что это должно «просто работать». Что я делаю не так?

Спасибо!

+0

Опишите эту ошибку, если таковая имеется. –

+0

@MichaelSlade Последующая страница не получает эти параметры вообще –

+0

+1: Я не знал, что Perl поддерживает отмененные слова, такие как '-name'. –

ответ

4

Есть несколько способов сделать это.

  1. Создайте свой URI перенаправления с помощью методов URI::QueryParam.

    use URI qw(); 
    use URI::QueryParam qw(); 
    
    my $q = CGI->new; 
    my $u = URI->new($q->url); 
    $u->query_param(foo => 'the value'); 
    $u->query_param_append(fooz => qw(an array of values)); 
    $u->query_param(foo3 => 1); 
    $u->as_string # expression returns serialised string 
    
  2. Save the state параметров в файл, а затем загрузить состояние этого файла из перенаправлены страниц.

    my $query = CGI->new; 
    $query->save(\*FILEHANDLE); 
    my $q = CGI->new(\*INFILEHANDLE); 
    
  3. ли редирект через JavaScript, хотя это не позволит вам изменить Params.

    my $q = CGI->new; 
    print $q->header(); 
    print "window.location=\"$url\";\n\n" 
    

На мой взгляд, первый вариант я перечислил выше, проще всего сделать.

+0

Я думал, что параметры могут быть переданы независимо от того, использовался ли этот объект или нет. Я использую my $ query = CGI-> new; $ query-> param (-name => 'foo', - value => 'значение'); print $ query-> redirect (-URL => 'cookietest.cgi'); без каких-либо результатов. cookietest.cgi прочитал параметры с и без объекта с такими же пустыми результатами. –

+1

@JD Похоже, вы пытаетесь установить параметры на другой запрос (через перенаправление). Установка параметров на объекте переопределит параметры вашего текущего запроса, но это не поможет вам с новым запросом через вашу переадресацию. Попробуйте распечатать $ query-> redirect (-URL => 'cookietest.cgi? Foo = bar'), чтобы передать параметры новому запросу. – oalders

+1

@JD Я обновил свой пример с помощью шагов для перенаправления с параметрами. Один из этих вариантов - это то, что сказал ольдер. –

1

Вам необходимо использовать self_url method.

$cgi->param(-name=>'foo',-value=>'the value'); 
$cgi->param(-name=>'fooz',-values=>['an','array','of','values']); 
$cgi->param('foo3', 1); 
printf '<a href="%s">next page</a>', $cgi->self_url; 

Это становится f.ex. <a href="http://localhost:5000/foo.pl?foo=the%20value;fooz=an;fooz=array;fooz=of;fooz=values;foo3=1">next page</a>.

Смежные вопросы