#!/usr/bin/perl # # CGI A.S. Personel Tel/e-Posta Rehberi Uygulamasında # kullanılan alt programlar sub form_verilerini_al { # # CGI parametrelerini ayıklayıp çıkarır. # Her form alanı için "adi-degeri" çiftlerini # bir çağrişimli listede geri gönderir. # Bu çağrışımlı listede alan adları "anahtar", # alan değerleri "değer" olarak yer alır. # Örneğin $form{'asoyadi'} = "Ayfer" olur. # my ($cgi_satiri, @ciftler, $cift, $alan_degeri, $alan_adi); # # Form'da ACTION=POST belirtildiyse, form alan verilerini içeren # cgi_satiri <STDIN>'den okunmalıdır. # ACTION=GET seçildiyse form alan bilgilerini içeren cgi_satiri # 'QUERY_STRING' ortam değişkeninde gelir. # # Form'da seçilmiş olan ACTION tipi "REQUEST_METHOD" ortam # değişkeninde gelir. $form_metodu = $ENV{'REQUEST_METHOD'}; if ($form_metodu eq "GET"){ $cgi_satiri = $ENV{'QUERY_STRING'}; } elsif ($form_metodu eq "POST"){ read(STDIN, $cgi_satiri, $ENV{'CONTENT_LENGTH'}); } # # "cgi_satiri" içinde "adi=Can+U&%F0ur&soyadi=Ayfer&tel=2345673" # gibi bir dizi olacaktır. # Bu dizide özel karakterler (Türkçe karakterler) ve noktalama # işaretleri &HH şeklinde onaltılık sistemde kodlanmıışdır. # Her özel işaret ASCII tablosundaki sayısal koduyla kodlanır. # # Alan değerleri içinde "boşluk" varsa "+" işaretiyle kodlanmış # olacaktır. # "&" işaretiyle ayrılmış olan alan_adi=alan_degeri çiftlerini # ayirmalıyız: @ciftler = split(/&/, $cgi_satiri); foreach $cift (@ciftler) { # # Her "alan_adi=alan_degeri" ciftini "=" işaretiyle # parçalayarak alan adlarını ve değerlerini elde edebiliriz. ($alan_adi, $alan_degeri) = split(/=/, $cift); # # "+" ile kodlanmış boşluklar varsa onları " "'la değiştir. $alan_degeri =~ tr/\+/ /; # %HH şeklinde kodlanmış özel karakterler varsa, sayısal ASCII # kod değerini kullanarak karakterin kandisine dönüştür. $alan_degeri =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # alan adını ve değerini çağrışımlı listeye yerleştir. # $FORM_BILGILERI{$alan_adi} = $alan_degeri; } # return %FORM_BILGILERI; } sub hata { # # parametresi olarak gelen karakter dizisini bir hata mesajı # sayfası olarak görüntüler $mesaj = shift; # Parametreyi $mesaj değişkenine al print "Content-type: text/html\n\n"; print <<_SON_; <html><body> <p><table width="300"> <tr><td align="center"> <b>Sistem Hatası!</b><p>$mesaj </td> </tr> </table> </body> </html> _SON_ exit; } sub css { # # HTML kodları iiçnde yer alan CSS komutlarını gönderir # print <<_SON_; <style> A { color: rgb(0,0,0); font-size: 10pt; font-weight: bold; text-decoration: none; } A:link { color: rgb(16,16,16)} A:visited { color: rgb(16,16,16)} A:active { color: rgb(16,16,16)} A:hover { color: rgb(32,32,255); text-decoration: underline} body { margin-left: 10%; margin-right: 10%; color: black; background: white; font-family: Verdana, Arial, Helvetica, Swiss; } table { border-top: ridge 3px darkgreen; border-bottom: ridge 3px darkgreen; } </style> _SON_ } 1;