Parametrien luku

Whiz 10.06.01 08:11

Demonstroi kuinka perlillä luetaan käyttäjän syöttämät parametrit

 Tekstiversio  Arvo: -2 (4 ääntä)  Äänestä: +  -
#!/usr/bin/perl -Tw
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI;

my $cgiobject = CGI->new() or die "CGI->new() failed";
my $nimi=$cgiobject->param("nimi") || "";
my $kaupunki=$cgiobject->param("kaupunki") || "";


print $cgiobject->header;
print "nimesi on $nimi ja asut kaupungissa nimeltä $kaupunki";


#Eli jos tämä scripti ajetaan vaikka nettisivulta
#script.pl?nimi=Tero&kaupunki=Hämeenlinna , niin
#scripti tulostaa näytölle tekstin nimesi on Tero
#ja asut kaupungissa nimeltä Hämeenlinna. Tällä
#tavalla siis formien käsittely on todella
#helppoa. Muistat vain korjata tuon ensimmäisen
#rivin siihen muotoon, että se toimii sinun
#serverilläsi. (jos et tiedä missä niin kirjoita
#whereis perl shellissä niin saat hakemiston
#tietoosi. Mutta se siitä...

#Muokattu By Santzes, mutta voitte syyttää Ionia jos jotain on väärin ;)
 

kasa 12:52 24.3.03 
kyseessähän siis on perlillä kirjoitettu CGI-skripti, joka jostain syystä yrittää olla fiksu ja tehdä asioita kuten
 my $foo = param("foo") || "";


käsittääkseni CGI::param() on niinkin ovela, että mikäli parametrillä ei ole arvoa, se on arvoton.
kasa 13:27 24.3.03 
#! /usr/local/bin/perl -w

use strict;
use CGI qw( :standard :cgi-lib ); # tuodaan sisään asioita
use vars qw(
%param_hash
);

# 1024 byte POST limit
$CGI::POST_MAX = 1024;
# muut uploadit pois päältä
$CGI::DISABLE_UPLOADS = 1;

%param_hash = Vars();
print header(), start_html();

foreach my $key(sort keys %param_hash){
print "KEY('$key') VALUE('$param_hash{$key}')\n", br();
}

print end_html();

__END__;

itsestäänselvä pätkä, huomattavasti siistimpi ja käyttökelpoisempi vaihtoehto.
(ei täydellinen, tietenkään)
dist 15:53 15.4.03 
$foo=param("foo") nimenomaan asettaa $foo:lle arvon undef jos parametriä "foo" ei ole olemassa.

Siitä seuraa sitten se, että käytettäessä $foo:ta print:ssä seuraa warning: "Use of uninitialized valua in concatenation"...

Eli kyllä se 'param("foo") || ""; ' on oikeasti ihan kätevä - Ei tule turhaa tavaraa logeihin.

Tuon 'use vars qw(%param_hash);' voisi muuten korvata 'our %param_hash':lla.

Ja kannattaa huomata, että toi POST_MAX on säädetty varsin pieneksi, vain 1k. (Jos mitään text-boxeja aikoo lähettää formista niin varmaankin tuota pääsee kasvattamaan)