LINUX.ORG.RU

perl + использование post,get одновременно


0

0

често то я пишу 1,2 скрипт на перле
не могу понять, использую одновреммено post + get
не вижу get переменных, это специфика перл ??

[cgi-bin]# cat elem_demo.pl
#! /usr/bin/perl -w
#

#use strict;
use CGI qw/:standart escapeHTML escape/;

$q = new CGI;

print $q->header(),
$q->start_html( -title => 'демонстрация элементов формы',
-bgcolor => 'white');

my $sticky = defined ($q->param('sticky'));

## объвление полей
print $q->start_multipart_form( -action => $q->escape($q->url().'?get=true;')),
$q->hidden (-name => 'hidden field',
-value => 'hidden value',
-override => !$sticky),
$q->p ('Text field: '),
$q->textfield (-name => 'text field',
-override => !$sticky),
$q->p('Password field: '),
$q->password_field(-name => 'password field',
-override => !$sticky),
$q->p('text area: '),
$q->textarea (-name => 'text area',
-rows => 3,
-cols => 60,
-wrap => "virtual",
-override => !$sticky),
$q->p('file load field: '),
$q->filefield (-name => 'file field', -size => 60),
$q->p('self opened menu: '),
$q->popup_menu (-name => 'popup menu',
-values => ['a', 'b', 'c', 'd', 'e'],
-labels => {
'a' => 'element a',
'b' => 'element b',
'c' => 'element c',
'd' => 'element d',
'e' => 'element e'
},
-override => !$sticky),
$q->p('list prokrytki whith choise propoties ;( '),
$q->scrolling_list (-name => 'scrolling list single',
-values => ['a', 'b', 'c', 'd', 'e'],
-labels => {
'a' => 'Element A',
'b' => 'Element B',
'c' => 'Eleemnt C',
'd' => 'Element D',
'e' => 'Element E',
},
-override => !$sticky),
$q->br (), $q-> br(),
$q->checkbox( -name => 'sricky',
-label => 'Special field list'),
$q->br (), $q-> br(),
$q->submit (-name => 'choise',
-value => 'send'),
$q->reset('reset form'),
$q->end_form();

## конец формы

my @names = $q->param();

if( !@names )
{
$q->p('элеметны отцуцтвуют');
}
else
{
my @item = ();
foreach my $name (@names)
{
my @val = $q->param($name);
$val[0] = '[' . join(', ', @val) .']' if @val > 1;
push (@item, $q->escapeHTML ("$name: ($val[0])\n"));
}

print $q->ul ($q->li (\@item));

}

print $q->hr();

# создаю ссылку
print $q->a( {-href => $q->escape($q->url().'?get=true;')}, ' link ');


[cgi-bin]#

перехожу по <a href> - вижу метож get
перехожу по submit - не вижу get
(прошу заметить что форма создана с методом get
print $q->start_multipart_form( -action => $q->escape($q->url().'?get=true;'))
если возможность "увидеть" ?

помогите плз...


Каша... Форматировать код надо научиться, прежде чем вопросы задавать...

Paranoik
()

Юзай cgicc, и будет тебе кашерно

fMad ★★★
()
Ответ на: комментарий от waker

>многа букф. объсни словами суть проблемы. читать все это влом. при передачи переменных методом POST не вижу GET переменные (

hose
() автор топика
Ответ на: комментарий от hose

>многа букф. объсни словами суть проблемы. читать все это влом.
при передачи переменных методом POST не вижу GET переменные (

ps сорри за форматирование

hose
() автор топика
Ответ на: комментарий от waker

> а откуда они возьмутся, если метод post?
print $q->start_multipart_form( -action => index.pl?variable=true;')

? 
т.е. я так понял только путем анализа ENV{QUERY_STRING} ??


hose
() автор топика
Ответ на: комментарий от waker

<script type="text/javascript">
function beforeFormSubmit(form) {
	var action = form.action
	action = action.replace( /^.*\?/, '' )
	if ( action ) {
		var attrs = action.split(/(;|&)/)
      	for( var i = 0; i< attrs.length; i++ ) {
        	var pair = attrs[i].split('=');
         	var input = document.createElement('input');
         	input.setAttribute( 'type', 'hidden' )
		 	input.setAttribute( 'name', pair[0] )
		 	input.setAttribute( 'value', pair[1] )
		 	form.appendChild(input, true);
      	}
   	}

	return true;
}

function attachFormSubmitHandler() {
	var forms = document.getElementsByTagName('form');
	for( var i=0;i<forms.length;i++ ) {
		forms[i].onsubmit = function() { beforeFormSubmit(this) }
	}
}
</script>
<body onload="attachFormSubmitHandler()">

Простите, не удержался )

golubeff
()
Ответ на: комментарий от golubeff

СПАСИБО способа через js еще не видел )

hose
() автор топика
Ответ на: комментарий от hose

> т.е. я так понял только путем анализа ENV{QUERY_STRING} ??

perldoc CGI блин

$q->url_param(...)

swizard
()

все не прочитал. но.
кусок из FastCGI правда.


if ($ENV{REQUEST_METHOD} eq "GET")
{
$input = $ENV{QUERY_STRING};
}
else
{
read STDIN, $input, $ENV{CONTENT_LENGTH};
}

my $cgi = new CGI($input);



ну и $cgi->param("blah_blah");

Effect
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.