Perl guide


Läsa formulär

Genom att använda formulär kan du läsa in data som användaren skriver. Detta kan vara nödvändigt om man exempelvis skall skriva en gästbok eller sökfunktion. Det finns 2 olika metoder att föra över data från ett formulär till ditt script. Den ena metoden kallas POST och den andra GET. Den senare varianten används av många sökmotorer på internet. Där skickas det inmatade datat med adressen till CGI-scriptet som ett antal parametrar. Detta kan vara bra om du gör en sökning och vill göra en bookmark av det resultat du har fått fram. Båda dessa metoder resulterar i att det inmatade datat hamnar i den såkallade miljödataarean på webservern, "enviroment space" på engelska. Vi börjar med att läsa av ett formulär som använder metoden POST. Först tittar vi på hur formuläret kan se ut.

<form action="/cgi-bin/myscript.pl" method="POST">
Ange ditt namn: <input type="text" name="namn"><br>
<input type="submit" value="Skicka">
</form>

Sedan tittar vi på hur man tar emot datat. Obserera att datat från formuläret hamnar i hashen form.

%form = get_form();
sub get_form {
	my (%form,$buffer,$name,$value,$pair,@pairs);
	read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
	@pairs = split(/&/, $buffer);
	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$value =~ tr/+/ /;
		$name =~ tr/+/ /;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		$form{$name} = $value;
	}
	return %form;
}

Den andra metoden, GET, kan du läsa av på i princip samma sätt. Nackdelen med detta är att denna metod inte kan hantera lika mycket data som POST. Observera att variabelnamnet (hashen) är ändrat till query så att du skall kunna använda båda metoderna till samma script.

%query = get_query();
sub get_query {
	my (%query,$buffer,$pair,$name,$value,@pairs);
	if ($ENV{'QUERY_STRING'}) {
		$buffer = "$ENV{'QUERY_STRING'}";
		@pairs = split(/&/, $buffer);
		foreach $pair (@pairs) {
			($name, $value) = split(/=/, $pair);
			$value =~ tr/+/ /;
			$name =~ tr/+/ /;
			$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
			$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
			$query{$name} = $value;
		}
		return %query;
	}
}

Tillbaks till innehållsförteckningen


© Johan Johansson -1999 Jojoxx.net