Ïðèãëàøàåì ïîñåòèòü
Ëàððè (larri.lit-info.ru)

Äåêîäèðîâàíèå html-ôîðì ñ ïîìîùüþ ìåòîäà post

Äåêîäèðîâàíèå html-ôîðì ñ ïîìîùüþ ìåòîäà post

Ñëåäóþùèé ñêðèïò î÷åíü íàïîìèíàåò òîëüêî ÷òî îáñóæäàâøèéñÿ, çà èñêëþ÷åíèåì òîãî, ÷òî äàííûé ñêðèïò èñïîëüçóåò ìåòîä POST äëÿ ïîñûëêè äàííûõ ôîðìû ñêðèïó CGI . Ìåòîä POST äàåò äèðåêòèâó áðîóçåðó ïîñëàòü äàííûå ôîðìû, èñïîëüçóÿ ñòàíäàðòíûé âõîä ñêðèïòà, à íå ñòðîêó çàïðîñîâ. Ïîëåçíîñòü ìåòîäà POST çàêëþ÷àåòñÿ â òîì, ÷òî îí ìîæåò îáðàáàòûâàòü áîëüøèå îáúåìû äàííûõ, òîãäà êàê ìåòîä GET îãðàíè÷åí ïðîñòðàíñòâîì ïåðåìåííîé ñåðâåðà, à òàêæå äëèíîé URL áðîóçåðà.

Äëÿ ÷òåíèÿ äàííûõ ñî ñòàíäàðòíîãî ââîäà ñêðèïò ìîæåò âûçâàòü ôóíêöèþ sys - read ñ íóæíûì ÷èñëîì áàéò. Ðàçìåð ñòðîêè çàïðîñà â áàéòàõ ñîäåðæèòñÿ â ïåðå­ìåííîé îêðóæåíèÿ CONTENT _ LENGTH .

Ïîñëå òîãî êàê ñêðèïò ïðî÷åë ñòðîêó çàïðîñîâ, äàëüíåéøàÿ îáðàáîòêà äàííûõ îêàçûâàåòñÿ î÷åíü ïîõîæåé íà ðàññìîòðåííóþ â ïðåäûäóùåì ïðèìåðå. Äëÿ òîãî ÷òîáû ñäåëàòü, ýòîò ñêðèïò áîëåå êîðîòêèì, îáðàáîòêà ñòðîêè çàïðîñîâ îñóùåñò­âëÿåòñÿ ñ ïîìîùüþ íåñêîëüêî áîëåå ñëîæíîãî ïîäõîäà:

           

($cgi_bin, $cgi_script) = ($0 =~ m:(.*)[/\\](.*):);

$content_length = $ENV(CONTENT_LENGTH);

if (!definet($query) || $query eq ‘’) {

            # ñãåíåðèðóåì ôîðìó

                        print <<FORM;

Content-type: text/html

<HTML>

<HEAD><TITLE>Sample POST Form </TITLE></HEAD>

<BODY>

What is your query? <P>

<FORM METHOD=”POST” ACTION=”$cgi_script”>

A checkBox. <BR>

<INPUT TYPE=”checkbox” NAME=”chek” VALUE=”on”><P>

A radio button set. <BR>

<INPUT TYPE=”radio” NAME=”button” VALUE=”1”> 1<BR>

<INPUT TYPE=”radio” NAME=”button” VALUE=”2”> 2<BR>

<INPUT TYPE=”radio” NAME=”button” VALUE=”3”> 3<P>

A data entry field<BR>

<INPUT NAME=”field”><P>

Send the data.<BR>

<INPUT TYPE=”submit”>

</FORM>

</HTML>

FORM

                 }

else   {

            # ðàñïå÷àòàåì ðåçóëüòàòû

            print “Content-type: text/html\n\n”;

print “<HTML>\n”;

print “<HEAD><TITLE>POST Form Result</TITLE></HEAD>\n”

print “<BODY>\n”;

print “Your query values:<P>\n”;

@fields = split(‘&’, $query);

forech (@field) {

                       /([^=](.*)/ && do {

                       local ($filed, $value) = ($1, $2);

                       $query{$field} = &decode($value);

           }

}

            print “Check Box: $query{check}<BR>\n”;

            print “Radio Button: $query{button}<BR>\n”;

            print “Data Field:”, &html($query{field}), “<BR>\n”;

            print “<HTML>\n”;

}

            sub decode{

                        local ($value) = @_;

                        $value =~ s/\+/ /g;

                        $value =~ s/%([0-9A-H]{2})/pack(‘C’,hex($1))/eg;

                        return $value;

                        }

            sub html {

                        local ($value) = @_;

                        $value =~ s/</&lt;/g;

                        $value =~ s/>/&gt;/g;

                        return $ value ’

                        }

           

Ýòîò ñêðèïò èñïîëüçóåò îäíî ðåãóëÿðíîå âûðàæåíèå äëÿ àíàëèçà âñåõ çíà÷åíèé ïîëåé â ñòðîêå çàïðîñà:

                        /([^=](.*)/ && do {

           local ($filed, $value) = ($1, $2);

           $query{$field} = &decode($value);

}

Âìåñòî òîãî ÷òîáû ïðèñâàèâàòü çíà÷åíèÿ êàæäîãî çàïðîñà îòäåëüíîé ïåðåìåííîé. äàííàÿ ïðîãðàììà õðàíèò âñå çàïðîñû â àññîöèàòèâíîì ìàññèâå.  ñâîþ î÷åðåäü ñêðèïò ìîæåò èíäåêñèðîâàòü ìàññèâ, èñïîëüçóÿ íóæíûå èìåíà ïîëåé.

Îáðàòèòå âíèìàíèå íà ñî÷åòàíèå [^=] â ðåãóëÿðíîì âûðàæåíèè.  äàííîì êîíòåêñòå çíàê (^) íå ÿâëÿåòñÿ ÿêîðåì, óêàçûâàþùèì íà íà÷àëî ñòðîêè, êàê ýòî áûëî â ïðåäûäóùåì ïðèìåðå.  äàííîì ñëó÷àå ýòîò çíàê ñëóæèò îòðèöàíèåì Äëÿ çíàêà [=].  òàêîì êà÷åñòâå ðåãóëÿðíîå âûðàæåíèå ìîæåò áûòü ïðî÷èòàíî òàê: «ñîîòâåòñòâóåò îäíîìó èëè áîëåå ñèìâîëàì, íå âêëþ÷àÿ çíàê ðàâåíñòâà çà­òåì ñîîòâåòñòâóåò çíàêó ðàâåíñòâà è çàòåì ñîîòâåòñòâóåò âñåì îñòàþùèìñÿ, ñèì­âîëàì».

Íàçàä | Îãëàâëåíèå | Äàëåå