/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
At få data fra form, ved brug af CGI.pm - ~
Fra : Simon [2700]


Dato : 09-08-03 15:15

Hej,

jeg bruger (efter henvisning her fra gruppen)

use CGI;
$query = new CGI();
$url = $query->param('url');

til at få url feltet fra en html form, men kan jeg få den til at vise hele
strengen også ?

$linie = $query-> ???

mit program laver nemlig nogle småtricks, og så ville jeg gerne se hvilke
andre data den får, for nemmere at kunne afhjælpe problemet.

tak
mvh.Simon



 
 
Andreas Plesner Jaco~ (09-08-2003)
Kommentar
Fra : Andreas Plesner Jaco~


Dato : 09-08-03 15:30

In article <3f3501cb$0$32467$edfadb0f@dread16.news.tele.dk>, Simon [2700] wrote:

> $url = $query->param('url');
>
> til at få url feltet fra en html form, men kan jeg få den til at vise hele
> strengen også ?
>
> $linie = $query-> ???

Du kan hive strengen ud af dit environment:
$linie = $ENV{QUERY_STRING};

Du kan evt bruge Data::Dumper til at dumpe hele %ENV, så du kan se, hvad
du ellers har adgang til i et cgi-script:

use Data::Dumper;

print(Dumper(\%ENV));

--
Andreas Plesner Jacobsen | I enjoy the time that we spend together.

Simon [2700] (09-08-2003)
Kommentar
Fra : Simon [2700]


Dato : 09-08-03 20:42


> Du kan hive strengen ud af dit environment:
> $linie = $ENV{QUERY_STRING};

det virker sådan set fint når jeg bare kalder mit script blah.pl?simon=mig
så kan den godt skrive simon=mig når jeg udskriver $linie,
men når mit script submitter til sig selv (scriptet laver en form, der så
kan submitte til scriptet selv, og alt efter hvad der føres med af parametre
udfører scriptet nogle tasks, og er der ingen nøjedes det med at tegne
formen)... nå men når det så kalder sig selv, så kan jeg ganske vidst
sagtens hive det hele ud hvis jeg ved hvad tingene hedder med

$simon = $query->param('simon');

men
$linie = $ENV{QUERY_STRING};
er tom... det er lidt mystifystiks for mig...

metoden til at poste i formen er POST, ved ikke om det har noget at sige...
nå men mit egentlige problem, og grunden til jeg ville se den query string,
er at første gang jeg submitter til formen sker der ingenting, den ser godt
nok at en af de variable der skal være fyldt for at kunne køre er det, men
den mangler en hel masse, ved brug herefter kører det helt fint .. har
overvejet om jeg skulle lave en html side og så kun submitte til scriptet,
istedet for at lade det lave det hele... men jeg overlever nok, det er bare
en underlig fejl synes jeg... ...

tak

mvh.Simon



Andreas Plesner Jaco~ (09-08-2003)
Kommentar
Fra : Andreas Plesner Jaco~


Dato : 09-08-03 21:13

In article <3f354e83$0$32468$edfadb0f@dread16.news.tele.dk>, Simon [2700] wrote:
>
>> Du kan hive strengen ud af dit environment:
>> $linie = $ENV{QUERY_STRING};
>
> $simon = $query->param('simon');
>
> men
> $linie = $ENV{QUERY_STRING};
> er tom... det er lidt mystifystiks for mig...
>
> metoden til at poste i formen er POST, ved ikke om det har noget at sige...

Det har det. Når du bruger POST som metode får du ikke en decideret
query-string.

Du kan dog bruge Vars-funktionen:

use CGI qw(Vars);
my %params=Vars;

Så får du en hash med alle variable og kan iterere over den.

Der er mere info i sektionen "FETCHING THE PARAMETER LIST AS A HASH" i
perldoc CGI

--
Andreas Plesner Jacobsen | And on the seventh day, He exited from append mode.

Lars Kim Lund (10-08-2003)
Kommentar
Fra : Lars Kim Lund


Dato : 10-08-03 09:03

Andreas Plesner Jacobsen <apj@daarligstil.dk> wrote:

>Så får du en hash med alle variable og kan iterere over den.

Lidt off-topic nok, men det er vel principielt ikke en iteration?

--
Lars Kim Lund
http://www.net-faq.dk/

Kim Hansen (10-08-2003)
Kommentar
Fra : Kim Hansen


Dato : 10-08-03 09:17

Lars Kim Lund <lkl@fabel.dk> writes:

> Andreas Plesner Jacobsen <apj@daarligstil.dk> wrote:
>
> >Så får du en hash med alle variable og kan iterere over den.
>
> Lidt off-topic nok, men det er vel principielt ikke en iteration?

Dette vil jeg kalde for standardmåden at iterere over en hash:

while (($key,$value) = each %ENV) {
print "$key=$value\n";
}


--
Kim Hansen | |\ _,,,---,,_ | Det er ikke
Dalslandsgade 8, A708 | /,`.-´` -. ;:-. | Jeopardy.
2300 København S | |,4- ) )-,_. ,\ ( `'-' | Svar _efter_
Tlf: 32 88 60 86 | '---''(_/--' `-'\_) | spørgsmålet.

Lars Kim Lund (09-08-2003)
Kommentar
Fra : Lars Kim Lund


Dato : 09-08-03 21:43

"Simon [2700]" <devnull@linux.org> wrote:

>$simon = $query->param('simon');
>
>men
>$linie = $ENV{QUERY_STRING};
> er tom... det er lidt mystifystiks for mig...
>
>metoden til at poste i formen er POST, ved ikke om det har noget at sige...

Det har det. Med GET sender den variablene i URL'en (QUERY_STRING),
med POST overfører den blot variablene til STDIN.

Læs evt. her: http://www.faqs.org/faqs/www/cgi-faq/section-37.html

--
Lars Kim Lund
http://www.net-faq.dk/

Simon [2700] (10-08-2003)
Kommentar
Fra : Simon [2700]


Dato : 10-08-03 07:59


> >$simon = $query->param('simon');
> >
> >men
> >$linie = $ENV{QUERY_STRING};
> > er tom... det er lidt mystifystiks for mig...
> >
> >metoden til at poste i formen er POST, ved ikke om det har noget at
sige...
>
> Det har det. Med GET sender den variablene i URL'en (QUERY_STRING),
> med POST overfører den blot variablene til STDIN.
>
> Læs evt. her: http://www.faqs.org/faqs/www/cgi-faq/section-37.html

Hej,
Kunne jeg så bare ændre metoden til GET istedet for at bruge POST ? det
betyder vel ikke
noget for programmet som sådan?

hvad er sikrest / bedst at bruge?
mvh.Simon



Simon [2700] (10-08-2003)
Kommentar
Fra : Simon [2700]


Dato : 10-08-03 08:02


> Hej,
> Kunne jeg så bare ændre metoden til GET istedet for at bruge POST ? det
> betyder vel ikke
> noget for programmet som sådan?
>
> hvad er sikrest / bedst at bruge?
> mvh.Simon

jeg fik lige læst din url, den besvarer vidst det meste.
tak
mvh.Simon



Peter Makholm (10-08-2003)
Kommentar
Fra : Peter Makholm


Dato : 10-08-03 09:12

Lars Kim Lund <lkl@fabel.dk> writes:

> Andreas Plesner Jacobsen <apj@daarligstil.dk> wrote:
>
>>Så får du en hash med alle variable og kan iterere over den.
>
> Lidt off-topic nok, men det er vel principielt ikke en iteration?

Hvad er ikke en iteration? Andreas siger bare man kan, han viser det
ikke.

Jeg vil da absolut kalde

foreach (keys %params) {
...
}

en iteration.

--
Peter Makholm | I congratulate you. Happy goldfish bowl to you, to
peter@makholm.net | me, to everyone, and may each of you fry in hell
http://hacking.dk | forever
| -- The Dead Past

Lars Kim Lund (10-08-2003)
Kommentar
Fra : Lars Kim Lund


Dato : 10-08-03 10:13

Peter Makholm <peter@makholm.net> wrote:

>Hvad er ikke en iteration? Andreas siger bare man kan, han viser det
>ikke.
>
>Jeg vil da absolut kalde
>
>foreach (keys %params) {
> ...
>}
>
>en iteration.

Det er godt nok et gennemløb af sammen rutine for forskellige værdier,
men normalt ved en iterativ proces bruger man resultatet af hvert
gennemløb som startværdi for det næste.

Jeg forstår godt hvad Andreas mener, men jeg mener ikke det strengt
taget er en iterativ proces at hente elementerne fra hashen og bruge
dem i et udtryk, rutine eller whatever.

--
Lars Kim Lund
http://www.net-faq.dk/

Andreas Plesner Jaco~ (10-08-2003)
Kommentar
Fra : Andreas Plesner Jaco~


Dato : 10-08-03 11:10

In article <3d2cjv016g21mqivurni5ulqar2ugvvnh7@dtext.news.tele.dk>, Lars Kim Lund wrote:
>>
>>en iteration.
>
> Det er godt nok et gennemløb af sammen rutine for forskellige værdier,
> men normalt ved en iterativ proces bruger man resultatet af hvert
> gennemløb som startværdi for det næste.

Ikke nødvendigvis:

From The Free On-line Dictionary of Computing (09 FEB 02) [foldoc]:

iteration

   <programming> Repetition of a sequence of instructions. A
   fundamental part of many {algorithms}. Iteration is
   characterised by a set of initial conditions, an iterative
   step and a termination condition.

Du tænker på rekursion.

--
Andreas Plesner Jacobsen | try again

Lars Kim Lund (10-08-2003)
Kommentar
Fra : Lars Kim Lund


Dato : 10-08-03 13:50

Andreas Plesner Jacobsen <apj@daarligstil.dk> wrote:

>Du tænker på rekursion.

Nej, men jeg kender nok bedst ordet fra matematik. Jeg kan se at det
også bruges som synonym for løkker (det samme et antal gange eller
indtil et givent kriterie er opfyldt) ved programmering.

--
Lars Kim Lund
http://www.net-faq.dk/

Peter Makholm (10-08-2003)
Kommentar
Fra : Peter Makholm


Dato : 10-08-03 09:26

"Simon [2700]" <devnull@linux.org> writes:

> Kunne jeg så bare ændre metoden til GET istedet for at bruge POST ? det
> betyder vel ikke

> hvad er sikrest / bedst at bruge?

Det kommer an på ...

Jeg vil mene at der er en marginal forskel i sikkerheden til POST's
fordel. Det er meget lettere at komme til at opdage mulige SQL-injection-
lignende fejl når man bare skal komme til at rette i browserens
url-linje.

Men ellers er der både fordele og ulemper ved begge metoder. Mange af
de cgi-ting jeg laver bruger ikke forms men faste url'er og så kan man
ikke lave POST, derfor bruger jeg næsten udelukkende GET, også i de
enkelte html-forms jeg har.

--
Peter Makholm | I congratulate you. Happy goldfish bowl to you, to
peter@makholm.net | me, to everyone, and may each of you fry in hell
http://hacking.dk | forever
| -- The Dead Past

Lars Kim Lund (10-08-2003)
Kommentar
Fra : Lars Kim Lund


Dato : 10-08-03 10:15

Peter Makholm <peter@makholm.net> wrote:

>Men ellers er der både fordele og ulemper ved begge metoder. Mange af
>de cgi-ting jeg laver bruger ikke forms men faste url'er og så kan man
>ikke lave POST, derfor bruger jeg næsten udelukkende GET, også i de
>enkelte html-forms jeg har.

En anden ret praktisk fordel ved GET er at man kan linke dybt.

--
Lars Kim Lund
http://www.net-faq.dk/

Peter Makholm (10-08-2003)
Kommentar
Fra : Peter Makholm


Dato : 10-08-03 12:36

Lars Kim Lund <lkl@fabel.dk> writes:

> Det er godt nok et gennemløb af sammen rutine for forskellige værdier,
> men normalt ved en iterativ proces bruger man resultatet af hvert
> gennemløb som startværdi for det næste.

Stadardeksemplerne på iteration vs. rekursion er:

sub fac_iter {
my $n = shift;
my $res = 1;
for (1 .. $n) {
$res *= $_;
}
return $res
}

sub fac_rec {
my $n = shift;
return 1 if $n == 1;
return $n * rec_fac($n-1)
}

sub fac_tailrec1 {
my ($n,$acc) = @_;
return $acc if $n == 1;
return fac_tailrec1($n-1,$acc*$n);
}

sub fac_tailrec { fac_tailrec1 $_[0],1}

Sproget taget i betragtning er det ikke overraskende at fac_iter er
den absolut hurgtigste.

--
Peter Makholm | Emacs is the only modern general-purpose
peter@makholm.net | operating system that doesn't multitask
http://hacking.dk |

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste